ডিজিটাল ওয়ার্ল্ডে ডেভেলাপার কনফারেন্স

আগামীকাল শুক্রবার (৬ জুন) ডিজিটাল ওয়ার্ল্ডে অনুষ্ঠিত হবে সফটওয়্যার নির্মাতাদের একটি বিশেষ সম্মেলন।

সম্মেলনে বক্তব্য রাখবেন দেশের শীর্ষস্থানীয় কয়েকজন সফটওয়্যার নির্মাতা। অনুষ্ঠানটি হবে ঢাকার আগারগাঁতে অবস্থিত বঙ্গবন্ধু আন্তর্জাতিক সম্মেলন কেন্দ্রে। অনুষ্ঠানটি সবার জন্য উন্মুক্ত, কোনো রেজিস্ট্রেশনের প্রয়োজন নেই। তবে সেখানে আসনসংখ্যা সীমিত বিধায়, যারা আগে আসবেন, তারাই সেখানে বসার সুযোগ পাবেন। অনুষ্ঠান শুরু হবে সকাল ৯:৩০ মিনিটে এবং চলবে দুপুর ১টা পর্যন্ত।

নিচে আলোচনার বিষয় ও আলোচকদের নাম দেওয়া হলো।

1. User Experience – sell the experience, not the product by Azec Elahi, Senior UX Engineer, The Jaxara IT Ltd

2. Getting the most out of Chrome Developer Tools – M. Mahbubur Rahman , CTO, iViveLabs

3. Beyond PHP4 – The beautiful world of cutting edge PHP – Mohammad Emran Hasan , Founder and CTO, Right Brain Solutions Ltd.

4. CSS Preprocessor, Why and How – Mizanur Rahman , Development Manager, Trustpilot at GraphicPeople

5. Playing with Composer – Tareq Hasan, Founder, WeDevs

6. Introduction to Machine Learning, Nhm Tanveer Hossain Khan, Sr backend Engr at Tweek.tv

7. Power debugging and profiling – Abu Ashraf Masnun , Software Engr at AirCourt

8. Angular JS – Mafinar Khan, System Analyst at Panacea Ltd

9. Introduction to Laravel 4 – Mozammel Haque , Development Manager, Vantage labs Dhaka

10. Explore Awesomeness of Cutting Edge JS Tools by Rifat Nabi , Technical Architect, Tasawr Interactive

সুইফট – অ্যাপলের নতুন প্রোগ্রামিং ল্যাঙ্গুয়েজ

অ্যাপেল সুইফট (swift) নামে নতুন একটা প্রোগ্রামিং ল্যাঙ্গুয়েজ চালু করেছে । লিঙ্ক : https://developer.apple.com/swift/

সুইফট – অ্যাপেলের নতুন প্রোগ্রামিং ভাষা

এই শক্তিশালি প্রোগ্রামিং ল্যাঙ্গুয়েজটি অবজেক্টিভ সি (Objective-C) এর চেয়েও দ্রুত কাজ করবে এবং এটি সহজেই শেখা যাবে। সুইফট ব্যবহার করে প্রোগ্রমাররা আগের চেয়ে নিরাপদ ও নির্ভরযোগ্য কোড লিখতে পারবে বলে অ্যাপল জানিয়েছে। এতে প্রোগ্রামাররা একই সময় কোড লিখে তার আউটপুট দেখতে পারবে। সুইফট যেমন কম্পাইলড ল্যাঙ্গুয়েজের মতো শক্তিশালি ও ইফিশিয়েন্ট অন্যদিকে জনপ্রিয় স্ক্রিপটিং ল্যাঙ্গুয়েজগুলোর মতো সহজ ও ইন্টারএকটিভ। সুইফট ব্যবহার করে প্রোগ্রামাররা আগের চেয়ে সহজে আইওএস অ্যাপ্লিকেশান ডেভেলপ করতে পারবেন । সুইফট ল্যাঙ্গুয়েজ এর জন্য অ্যাপেল একটি ৫০০ পেজ এর বই তৈরি করেছে । এই বইটি অ্যাপেল এর নিজস্ব ibook store-এ পাওয়া যাবে । লিঙ্ক : https://itunes.apple.com/us/book/the-swift-programming-language/id881256329?mt=11

উল্লেখ্য যে এর আগে গুগল তাদের নিজেদের ল্যাঙ্গুয়েজ গো এবং ফেসবুক তাদের নিজেদের তৈরি ল্যাঙ্গুয়েজ হ্যাক বাজারে ছাড়ে। এখন অ্যাপলও সেই মিছিলে সামিল হলো।

ওয়েবসাইট বিপর্যয় ও মুক্তির উপায় – পর্ব ২

প্রথম পর্বের লিঙ্ক এখানে

২০১১ সালের ডিসেম্বর মাসে সাস্ট (SUST) থেকে শিক্ষক রুহুল আমিন সজীবের নেতৃত্বে একটি দল ঢাকায় আসে প্রায় দুই সপ্তাহের জন্য। মিশন জাতীয় বিশ্ববিদ্যালয়ের ভর্তি পরীক্ষার ফলাফল প্রসেস করে রেজাল্ট তৈরি করা। চার লক্ষ পরীক্ষার্থীর জন্য এই কাজটি এক বিশাল আয়োজন। এর মধ্যে একটি ছোট্ট অংশ হচ্ছে রেজাল্ট তৈরি করার পরে সেটি ওয়েবসাইটে প্রকাশ করা।

সজীবকে বললাম, ‘সজীব, চল ওয়েবসাইটটা ক্লাউডে হোস্ট করি, আর এমনভাবে করি যেন সেটা ডাউন না হয়।‘
সজীব উত্তর দিল, ‘আরে সুবিন ভাই, সব ব্যবস্থা করে ফেলছি, রেকস্পেস ক্লাউড সাইটে ওয়েবসাইট হোস্ট করবো, সেটা অনেক লোড সামলাতে পারবে‘।
– ‘লোড সামলাতে পারলে ভালো, কিন্তু সেটা তো যথেষ্ট নয়। ডাটাবেজ কানেকশনতো একটা মূল ইস্যু।‘
– ‘তাহলে কী করতে বলেন?’
– ‘মেমক্যাশ (memcached) ব্যবহার করি।‘
– ‘কোনো সমস্যা হবে না?’
– ‘না, সমস্যা নাই, সবার রেজাল্ট মেমোরিতে ক্যাশ করা থাকবে, আর কোনো কারণে সেটা ফেইল করলে মাইএসকিউএল ডাটাবেজ থেকে রেজাল্ট আনা হবে।‘
– ‘ঠিক আছে, আপনে যা ভালো বুঝেন করেন। আর টাকা–পয়সা সমস্যা না, সার্ভারে যত টাকা খরচ করতে হয় করবো, আপনে খালি দেখবেন, মান–ইজ্জত যেন না ডুবে।‘

আমি খুশিমনে তিনদিনের জন্য ওদের সাথে থেকে গেলাম।

নতুন সিস্টেমের আর্কিটেকচার: আমরা সিদ্ধান্ত নিলাম, ক্লাউড সাইটের পেছনে আটটি সার্ভার ব্যবহার করবো। প্রতিটি সার্ভারে সব পরীক্ষার্থীর ফলাফল থাকবে। ফলাফল প্রতিটি সার্ভারের ডাটাবেজে (এক্ষেত্রে MySQL) থাকবে। সেই সাথে প্রতিটি সার্ভারে মেমক্যাশ ইনস্টল করা হবে এবং মেমক্যাশেও সবার রেজাল্ট লোড করা থাকবে।

এখন আমরা যে আটটি সার্ভার ব্যবহার করবো, সেখানে কখন কোন সার্ভারে রিকোয়েস্ট যাবে, সেটা নির্ধারণ করা হবে কীভাবে? আমরা সহজ একটা সিদ্ধান্তে আসলাম। একটা ভেরিয়েবল N নেই। N-এর মান ৮। N ভেরিয়েবল হওয়ার সুবিধা হচ্ছে আমরা ইচ্ছামতো সার্ভার মূল সিস্টেমে যুক্ত করতে পারবো, আবার বাদও দিতে পারবো। এখন পরীক্ষার্থীদের রোল নাম্বারকে ৮ দিয়ে মড করা হবে (মড করলে সেটা হবে ০ থেকে ৭–এর ভিতরে)। মড করলে যেই সংখ্যাটি পাওয়া যাবে তার সাথে ১ যোগ করে তত নম্বর সার্ভারে রিকোয়েস্ট করা হবে। তাহলে প্রতিটি সার্ভারকে গড়ে ৫০ হাজার স্টুডেন্টের ফলাফল প্রসেস করতে হবে, যেহেতু মোট পরীক্ষার্থী ৪ লক্ষ! লোড অনেক কমে গেলো।

তারপরে কাজ হচ্ছে প্রতিটি সার্ভার যেন একসাথে যত বেশি সম্ভব রিকোয়েস্ট হ্যান্ডেল করতে পারে। সার্ভারগুলোয় ওয়েব সার্ভার হিসেবে এপাচি (Apache) ইনস্টল করা ছিলো। সেটার কনফিগরেশন ফাইল এদিক–সেদিক করে দেখলাম আগের চেয়ে বেশি রিকোয়েস্ট হ্যান্ডেল করা যাচ্ছি। কিন্তু আমি জানতাম যে ইঞ্জিন–এক্স নামে আরেকটি ওয়েব সার্ভার আছে যেটা আরো বেশি কনকারেন্ট (concurrent) রিকোয়েস্ট হ্যান্ডেল করতে পারে। তাই এপাচি বাদ দিয়ে ইঞ্জিনএক্স (Nginx) ইনস্টল করলাম। সেটার কনফিগারেশন ফাইল একটু এদিক–সেদিক করলাম। পরীক্ষা করে দেখলাম এপাচির চেয়ে ৫ গুণ বেশি কনকারেন্ট রিকোয়েস্ট হ্যান্ডেল করা যাচ্ছিল। সার্ভারের সবকিছু সিদ্ধান্ত চূড়ান্ত করে সেগুলো দেখাশোনার দায়িত্ব পড়ল সাস্টের ছাত্র শিব্বির হোসেনের উপর।

ারপরে সব সার্ভারে মেমক্যাশ ইনস্টল করা হলো। পিএইচপি স্ক্রিপ এমনভাবে লেখা হলো যে কোনো স্টুডেন্টের রেজাল্টের জন্য রিকোয়েস্ট আসলে সেটি প্রথমে মেমোরিতে খোঁজা হবে (মেমক্যাশে)। যদি পাওয়া যায়, তাহলে সেটি প্রসেস করে পাঠিয়ে দেওয়া হবে, আর পাওয়া না গেলে ডাটাবেজে কুয়েরি করা হবে এবং সেটি মেমক্যাশে সেভ করে রেখে তারপরে পাঠিয়ে দেওয়া হবে। এটি একটি বাড়তি নিরাপত্তা আর কী। কারণ রেজাল্ট একবার তৈরি হয়ে গেলে সেখানে পরিবর্তনের সম্ভাবনা খুবই কম। বিকাশ (সাস্টের শিক্ষক আবু নাসের বিকাশ) পিএইচপি‘র কোড করেছিল। সে তো মেমক্যাশের পারফরমেন্স দেখে হতবাক এবং আনন্দিত!

সব সেটআপ করা শেষ। এবারে লোড টেস্টিংয়ের পালা। সজীব অবশ্য চিন্তিত, আমরা যত বেশি টেস্ট করবো, তার বিল তত বেশি আসবে। কিন্তু বেচারা তো টেস্টিং করতে না বলতে পারে না। আমরা টেস্ট করে বললাম, আল্লাহ্ ভরসা। তিনদিনের মধ্যেই টেস্টিং সহ সব কাজ হয়ে গিয়েছিল।

এখন শেষ আরেকটা ইস্যু। সজীব বললো, ‘সুবিন ভাই, ক্লাউড সাইট কিন্তু শুরুতে বেশি রিকোয়েস্ট হ্যান্ডেল করতে পারে না। লোড যখন বেশি পড়ে তখন সেটা অটোমেটিক একটা উন্নত পারফরম্যান্সের সার্ভারে ট্রান্সফার হয়। তাই শুরুতে রেজাল্ট দেখায় একটু সমস্যা হতে পারে, তবে কয়েক ঘণ্টা পরে ঠিক হয়ে যাবে‘। আমি বললাম, ‘এটা শুরু থেকেই ঠিক করে দেই। তাওয়া গরম করার ব্যাপারই তো।‘ আমরা একটা স্ক্রিপ্ট লেখে অনেকগুলো সার্ভারে আর আমাদের ল্যাপটপে চালিয়ে দিলাম। স্ক্রিপ্টের কাজ ছিল ওয়েবসাইটে অটোমেটিক হিট করতে থাকা। তাওয়া গরম হয়ে গেল‌ো! আমরা রাত ১১টায় ওয়েবসাইটে রেজাল্ট পাবলিশ করলাম। আমার মনে আছে রাত ১টা থেকে ২টার মধ্যে দুই লক্ষ হিট হয়েছিল। এত রাতে লোকজনের ওয়েবসাইটে রেজাল্ট দেখার আগ্রহ দেখে অবাক হলাম। তো আমরা সিস্টেম সার্বক্ষণিক মনিটর করছিলাম। প্রথম দিনে এক মিলিয়ন (দশ লক্ষ) হিট হয়েছিল। দ্বিতীয় দিনের শেষে আমরা আটটি সার্ভারের মধ্যে ছয়টি বাদ দিয়ে কেবল দুইটি রাখি কারণ তখন একসাথে আর খুব বেশি হিটের সম্ভাবনা নাই। শেষমেষ আমাদের কাজটি সফল হয়েছিল। প্রথমদিনে আমাদের সিস্টেম এক সেকেন্ডের জন্যও ডাউন হয় নি। ৭২ ঘণ্টার সফল পরিশ্রম শেষে আনন্দ নিয়ে বাসায় চলে আসলাম। সজীব ও তাঁর দলকে ধন্যবাদ এমন একটি গুরুত্বপূর্ণ কাজে আমাকে কাজ করার সুযোগ করে দেওয়ার জন্য।

মেমক্যাশড নিয়ে আরো জানা যাবে এই লেখায়

ওয়েবসাইট বিপর্যয় ও মুক্তির উপায় – পর্ব ১

বাংলাদেশে বিভিন্ন পাবলিক পরীক্ষায় ফল প্রকাশের সাথে সাথেই একটি বিপর্যয় শুরু হয়ে যায়। তবে সেটি কিন্তু ফলাফল বিপর্যয় নয়, সেটি হচ্ছে ওয়েবসাইট বিপর্যয়। ওয়েবসাইটে পরীক্ষার ফলাফল প্রকাশ করা হলেও বেশিরভাগ মানুষই ওয়েবসাইট থেকে রেজাল্ট দেখতে পারে না। মনে হয় ওয়েবসাইটটি যেন হ্যাং হয়ে আছে।

এই সমস্যা হওয়ার কারণ হচ্ছে ওয়েবসাইটের আর্কিটেকচার। সাধারণত ওয়েবসাইটগুলো বানানো হয় এভাবে : সবার পরীক্ষার ফলাফল ডাটাবেজে সংরক্ষিত থাকে। ওয়েবসাইটে কোনো ফর্ম সাবমিট করা হলে (যেমন বোর্ড এবং রোল নাম্বার সিলেক্ট করে সাবমিট করলে) সেই রিকোয়েস্ট সার্ভারের কাছে যায়। সার্ভার তখন ডাটাবেজে কুয়েরি করে রেজাল্ট আনে নিজের কাছে। তারপর সেটা প্রসেসিং করে পাঠিয়ে দেয়। তখন ব্যবহারকারি ওয়েবসাইটে পরীক্ষার ফল দেখতে পারে।

এখানে দুটো জিনিস লক্ষ করতে হবে। ওয়েবসাইট থেকে রিকোয়েস্ট প্রথমে যখন সার্ভারের কাছে যায়, সেখানে একটি ওয়েব অ্যাপ্লিকেশন সার্ভার (যেমন : এপাচি কিংবা ইঞ্জিন-এক্স) সেটি হ্যান্ডেল করে। সেই ওয়েব অ্যাপ্লিকেশন সার্ভারের রিকোয়েস্ট হ্যান্ডেল করার একটি ক্যাপাসিটি থাকে, যেই ক্যাপাসিটির বেশি রিকোয়েস্ট সে হ্যান্ডেল করতে পারে না। দ্বিতীয়ত হচ্ছে ডাটাবেজ সার্ভার (যেমন : মাইএসকিউএল, পোস্টজিআরই এসকিউল, ওরাকল)। সেটিরও রিকোয়েস্ট বা কানেকশন হ্যান্ডেল করার একটা সীমা থাকে। একই সাথে একটি নির্দিষ্ট সংখ্যক কানেকশনের বেশি সে হ্যান্ডেল করতে পারে না। তাই ফলাফল প্রকাশের পর যখন লাখ লাখ পরীক্ষার্থী ও তাদের অভিভাবক ওয়েবসাইটে ফল দেখার চেষ্টা করতে থাকে, সার্ভারের ওপর তৈরি হয় প্রচন্ড চাপ, যেই চাপ সে সামলাতে পারে না এবং ওয়েবসাইটি থেকে আর ফলাফল দেখা সম্ভব হয় না।

এই সমস্যা থেকে মুক্তি পাওয়ার উপায় কী? উপায় হচ্ছে ডিসট্রিবিউটেড কম্পিউটিং (distributed computing), যা ক্লাউড কম্পিউটিং (cloud computing) ব্যবহার করে সহজে করা যায়। আগামী পর্বে লিখব ২০১১-২০১২ সালের জাতীয় বিশ্ববিদ্যালয়ের ভর্তি পরীক্ষার ফল প্রকাশের ওয়েবসাইটের জন্য ক্লাউড কম্পিউটিং ব্যবহারের অভিজ্ঞতার কথা।

পরের পর্বের লিঙ্ক এখানে

ওয়েব ডেভেলাপমেন্ট-এ ক্যারিয়ার

ওয়েব ডেভেলাপমেন্ট শব্দটা শুনে অনেকেই নাক সিঁটকায়, ‘ও, ওয়েবসাইট বানানো? এটা কোনো কাজ হলো?’ তো এরকম ভুল ধারণা থাকাটা দোষের কিছু না। তাই আজকে ওয়েব ডেভেলাপমেন্টের ক্যারিয়ার নিয়ে কিছু আলোচনা করবো।

একটিমাত্র পেইজ দিয়েও একটি ওয়েবসাইট তৈরি করা যায়, আবার ওয়েবসাইটটি ফেসবুকের মতো বিশাল হতে পারে। তাই কাজের পরিধি নির্ভর করবে ওয়েবসাইটের পরিধির ওপর। এখন কোনো ওয়েব সাইট বা ওয়েব অ্যাপ্লিকেশন তৈরির প্রথম কাজ হচ্ছে ফিচারগুলো নির্দিষ্ট করা, মানে সেখানে কী কী ফিচার থাকবে তার একটি তালিকা তৈরি করা। তখন ইউএক্স বা ইউজার এক্সপেরিয়েন্সের বিষয়গুলোও খেয়াল রাখতে হবে। কারণ কেবল ফিচার থাকলেই হবে না, সেই ফিচার ব্যবহারকারীরা কিভাবে ব্যবহার করবে, সেটাও নির্ধারণ করতে হবে। ফিচারগুলো নির্দিষ্ট করা হয়ে গেলে প্রথম কাজ হচ্ছে ওয়েবসাইটটি ডিজাইন করা। মানে ওয়েবসাইটি দেখতে কেমন হবে। এই ডিজাইনের কাজটি করেন ওয়েব ডিজাইনার বা গ্রাফিক্স ডিজাইনার। সৃজনশীলতা ছাড়াও একজন ডিজাইনারের আধুনিক ওয়েবসাইটের ডিজাইন, রং, ফন্ট ইত্যাদি বিষয়ে সম্যক ধারণা থাকতে হবে। ওয়েব ডিজাইনাররা সাধারণত ফটোশপ এবং ইলাস্ট্রেটর সফটওয়্যার ব্যবহার করেন, তাই এ দুটি সফটওয়্যার ব্যবহারে দক্ষতা থাকা প্রয়োজন।

ডিজাইনের পরবর্তি কাজ হচ্ছে মার্ক-আপ। মানে ডিজাইনার যেই ডিজাইনটি করেছেন, সেটি থেকে এইচটিএমএল (HTML → Hyper Text Markup Language) ফাইল তৈরি করা। তবে শুধু HTML এর কাজই যথেষ্ট নয়। সাথে দরকার CSS (Cascading Style Sheet)। সিএসএস ব্যবহার করে এইচটিএমএল ফাইলে স্টাইল আনা যায় যাতে ওয়েবসাইট দেখতে হুবুহু তার ডিজাইনের মতো হয়। এই কাজগুলো করেন মার্ক-আপ ইঞ্জিনিয়ার।

বড় কোম্পানীগুলোতে মার্ক-আপ ইঞ্জিনিয়ার এর আলাদা পোস্ট থাকে, তবে অনেক জায়গাতেই সেই কাজটা করতে হয় ফ্রন্ট এন্ড (front end) ইঞ্জিনিয়ারের। তবে ফ্রন্ট-এন্ড ইঞ্জিনিয়ারের মূল কাজ হচ্ছে জাভাস্ক্রিপ্টে। জাভাস্ক্রিপ্ট একটি প্রোগ্রামিং ভাষা যেটি ব্যবহার করে প্রোগ্রাম লিখলে সেটি ব্রাউজার থেকে চলে। ইন্টারএকটিভ ওয়েবসাইগুলোর জন্য জাভাস্ক্রিপ্ট অপরিহার্য। এই ভাষাটি জানতে হয় ফ্রন্ট এন্ড ইঞ্জিনিয়ারের। সাথে কয়েকটি ফ্রেমওয়ার্কও। যেমন জেকুয়েরি (jQuery), ইএক্সটিজেএস (ext-js), প্রটোটাইপ (prototype) ইত্যাদি। এসব জানার পাশাপাশি ওয়েব টেকনোলজির নানা বিষয় সম্পর্কেও স্বচ্ছ ধারণা থাকা দরকার। যেমন এক্সএমএল (XML), জেসন (JSON), এজাক্স (Ajax), ক্লায়েন্ট-সার্ভার ইন্টারএকশন ইত্যাদি।

ওয়েবসাইটে ব্যবহারকারির দেওয়া ইনপুটের উপর ভিত্তি করে বিভিন্ন কাজ হয়। যেমন ফেসবুকে কেউ একটা স্ট্যাটাস দিলো, সেটি তার ফেসবুক বন্ধুতালিকার সবাই দেখতে পাবে, আর পাবলিক হলে ফলোয়ারদের নিউজফিডেও চলে যাবে। এই কাজটি করার জন্য সার্ভারে কিছু কোড লেখা লাগে। আবার ধরা যাক, কেউ অনলাইনে কেনাকাটা করছে, সেখানেও সার্ভারে বেশ কিছু কোড রান করে। সার্ভারে এই প্রোগ্রামগুলো যিনি তৈরি করেন, তাকে বলা হয় ব্যাক-এন্ড ইঞ্জিনিয়ার (back-end engineer)। ব্যাক-এন্ডের কাজের জন্য জনপ্রিয় প্রোগ্রামিং ভাষা হচ্ছে পিএইচপি (PHP), পাইথন (Python), রুবি (Ruby), জাভা (Java) ইত্যাদি। একজন ভালো ব্যাক-এন্ড ইঞ্জিনিয়ারের কেবল প্রোগ্রামিং করতে পারাটাই যথেষ্ট নয়, সেই সাথে ওয়েব নিরাপত্তা, ডাটাবেজ, ওয়েব আর্কিটেকচার এরকম নানান বিষয়ে গভীর জ্ঞান থাকা দরকার। আবার ওয়েবসাইটকে স্কেলেবল (scalable) করাটাও তার কাজের মধ্যে পড়ে। একটি উদাহরণ দিই। প্রতি বছর বিভিন্ন পাবলিক পরীক্ষার ফলাফল যখন প্রকাশ হয়, ওয়েবসাইটে ঢুকলে মনে হয় সাইট হ্যাং হয়ে আছে – কোনো কাজ করছে না। তার মূল কারণ হচ্ছে এসব ওয়েবসাইট যেভাবে তৈরি করা হয়েছে, সেগুলো স্কেলেবল নয়। হয়ত ১০০ ব্যবহারকারির জন্য ওয়েবসাইট কাজ করছে, কিন্তু যখনই দশ হাজার কিংবা এক লক্ষ মানুষ সেই ওয়েবসাইটে হিট করছে, তখন ওয়েবসাইট আর কাজ করছে না, কারণ এত লোড সে সামলাতে পারছে না। একজন ভালো ব্যাক-এন্ড ইঞ্জিনিয়ারের পক্ষে এই সমস্যাটির সমাধান সম্ভব।

যেসমস্ত ওয়েবসাইট খুব বেশি ডাটা নির্ভর, সেখানে ডাটাবেজ ডিজাইন ওয়েবসাইটের পারফরমেন্সের উপর বেশ প্রভাব ফেলে। অনেকসময় ব্যাক-এন্ড ইঞ্জিনিয়ার ডাটাবেজের কাজ করলেও কিছু কিছু ক্ষেত্রে প্রয়োজন হয় একজন দক্ষ ডাটাবেজ আর্কিটেক্ট-এর। তিনি ডাটাবেজ ডিজাইন এবং অপটিমাইজেশনের কাজ করে থাকেন।

একটা ওয়েব সাইট বা ওয়েব অ্যাপ্লিকেশন তৈরির শেষ ধাপ হচ্ছে টেস্টিং। টেস্টিংয়ের কাজটি করেন ওয়েবসাইট টেস্ট ইঞ্জিনিয়ার কিংবা কোয়ালিটি অ্যাসুরেন্সের লোকজন। সাধারণ ওয়েবসাইটে যেমন ওয়েবসাইট ঠিকমতো কাজ করছে কি না সেটি টেস্ট করলেই চলে, কিছু কিছু ওয়েবসাইটে আবার লোড টেস্ট করতে হয়, যে অনেক বেশি ব্যবহারকারি একসাথে আসলে ওয়েবসাইটের কি অবস্থা হয়। আর নিরাপত্তার ব্যাপারটিও টেস্ট করাটা খুবই গুরুত্বপূর্ণ। তাই ওয়েবসাইটের প্রকার ভেদে বিভিন্ন লেভেলের দক্ষতার লোকজন দরকার হয়, যারা ওয়েবসাইটি টেস্ট করেন।

সার্ভারে বিভিন্ন সফটওয়্যার ইনস্টল করা, সেগুলো রান করা, মনিটর করা, সার্ভারের সংখ্যা বাড়ানো-কমানো, ফায়ারওয়াল বসানো ইত্যাদি কাজের জন্য দরকার একজন সিস্টেম এডমিনিসস্ট্রের। যিনি বিভিন্ন টুল ব্যবহার করে সেই কাজগুলো করেন। সিস্টেম এডমিনিসস্ট্রেটর-এর নখদর্পনে থাকতে হয় সার্ভারের অপারেটিং সিস্টেমের নানান বিষয়।

তাহলে দেখা যাচ্ছে একটি বড় ওয়েবসাইট বা ওয়েব অ্যাপ্লিকেশন তৈরিতে অনেক আয়োজন আর সেই কাজগুলো করার জন্য প্রয়োজন হরেক রকম দক্ষতাসম্পন্ন মানুষের। আপনি যদি ওয়েব ডেভেলাপমেন্টে আগ্রহী হন তবে আপনার দক্ষতা, লেখপড়া ও আগ্রহের ভিত্তিতে নির্বাচন করুন সঠিক ক্যারিয়ার।

পুনশ্চ : ওয়েবের উপর ধারণা আরো পাকাপোক্ত করতে এই ফ্রি অনলাইন কোর্সটি করে ফেলুন : http://dimikcomputing.com/course/web-concepts/। কোর্সটি সম্পূর্ণ বাংলায়।

জাভা দিয়ে ছোট্ট ওয়েব ক্রলার

জাভা প্রোগ্রামিং ল্যাঙ্গুয়েজ ব্যবহার করে সহজ একটি ওয়েব ক্রলার (বা স্পাইডার বা স্ক্রেপার)-এর কোড শেয়ার করছি। কোডটি আমি অনেক আগে একটি প্রজেক্ট করতে গিয়ে লিখেছিলাম। এটি সম্পূর্ণ ওয়েব ক্রলার নয়, কেবল একটি নমুনা (বা উদাহরণ) মাত্র।


কাজের ধাপ:

১) ব্যবহারকারীর কাছ থেকে ইনপুট হিসেবে ওয়েব সাইটের এড্রেস (ইউআরএল) নিতে হবে।

২) ওই ইউআরএল-এর এইচটিএমএল সোর্স কোড পড়তে হবে বা বের করতে হবে (getUrlContent(url))।

৩) এইচটিএমএল সোর্স কোড থেকে সব হাইপার-লিঙ্কগুলো বের করতে হবে (getHyperlinks(content))।

৪) প্রতিটি ইউআরএল-এর জন্য এইচটিএমএল সোর্স কোড বের করতে হবে এবং সেই সাথে এইচটিটিপি রেসপন্স কোডও বের করতে হবে (getHTTPResponseCode(url))।

 

সম্পূর্ণ সোর্স কোড নিচে দেওয়া হলো :

 import java.io.BufferedReader;    
 import java.io.IOException;    
 import java.io.InputStreamReader;    
 import java.io.FileWriter;    
 import java.io.BufferedWriter;    
 import java.net.HttpURLConnection;    
 import java.net.URL;    
 import java.net.SocketTimeoutException;    
 import java.net.UnknownHostException;    
 import java.util.ArrayList;    
 import java.util.regex.Matcher;    
 import java.util.regex.Pattern;    
 public class Checker {    
     public static void main(String args[]) throws Exception    
     {    
         String url = null;    
         if (args.length > 0) {    
             url = args[0];    
             System.out.println(url);    
         }    
         else {    
             System.out.println("Please enter the URL as a command line parameter.");    
             return;    
         }    
         String content = getUrlContent(url);    
         ArrayList<String> links = getHyperlinks(content);    
         FileWriter fstream = new FileWriter("out.txt");    
         BufferedWriter out = new BufferedWriter(fstream);    
         int status;    
         for (int i = 0; i < links.size(); i++) {    
             url = (String) links.get(i);    
             System.out.println(url);    
             status = getHTTPResponseCode(url);    
             if (status != 200) {    
                 if (status > 0) {    
                     out.write(url + ", HTTP Response Code: " + status + "n");    
                 }    
                 else {    
                     out.write(url + ", Unknown Errorn");    
                 }    
             }                
         }    
         out.close();    
     }    
     private static ArrayList<String> getHyperlinks(String html)    
     {    
         ArrayList<String> links = new ArrayList<String>();    
         Pattern p = Pattern.compile("<a [^<>]*?href="(http.*?)"");    
         Matcher m = p.matcher(html);    
         while(m.find()) {    
             links.add(m.group(1));    
         }    
         p = Pattern.compile("<a [^<>]*?href='(http.*?)'");    
         m = p.matcher(html);    
         while(m.find()) {    
             links.add(m.group(1));    
         }    
         return links;    
     }    
     private static String getUrlContent(String targetUrl) throws Exception    
     {    
         HttpURLConnection connection = null;    
         BufferedReader br = null;    
         StringBuilder sb = null;    
         String line = null;    
         String content = null;    
         URL target = null;    
         try {    
             target = new URL(targetUrl);    
             connection = (HttpURLConnection)target.openConnection();    
             connection.setRequestMethod("GET");    
             connection.setReadTimeout(30 * 1000); // timeout 30 seconds    
             connection.connect();    
             br = new BufferedReader(new InputStreamReader(connection.getInputStream()));    
             sb = new StringBuilder();    
             while ((line = br.readLine()) != null) {    
                 sb.append(line);    
             }    
             content = sb.toString();    
         } catch (SocketTimeoutException e) {    
             System.out.println("Timed Out!");                
         } catch (UnknownHostException e) {    
             System.out.println("Unknown Host");    
         } catch (Exception e) {    
             System.out.println("Unknown Error");    
         }    
         finally {    
             connection.disconnect();    
             br = null;    
             sb = null;    
             connection = null;    
         }    
         return content;    
     }    
     private static int getHTTPResponseCode(String targetUrl) throws Exception    
     {    
         HttpURLConnection connection = null;    
         int response;    
         URL target = null;    
         try {    
             target = new URL(targetUrl);    
             connection = (HttpURLConnection)target.openConnection();    
             connection.setRequestMethod("GET");    
             connection.setReadTimeout(10 * 1000); // timeout 10 seconds    
             connection.connect();    
             response = ((HttpURLConnection) connection).getResponseCode();    
         } catch (SocketTimeoutException e) {    
             response = -100;    
         } catch (UnknownHostException e) {    
             response = -101;    
         }catch (Exception e) {    
             response = -102;    
         }    
         finally {    
             connection.disconnect();    
             connection = null;    
         }    
         return response;    
     }    
 }    

সিএসই বিভাগের ক্লাস শুরুর আগে

তোমরা যারা বিভিন্ন বিশ্ববিদ্যালয়ে কম্পিউটার সায়েন্স বা কাছাকাছি কোনো বিষয়ে ভর্তি হয়েছ এবং ক্লাশ শুরুর অপেক্ষা করছ, তাদের জন্য আমার অভিজ্ঞতা থেকে কিছু পরামর্শ। উল্লেখ্য যে, এই লেখায় যেসব বইয়ের কথা বলেছি, সেগুলো আমারই লেখা।

screen-shot-2016-12-02-at-9-17-16-am

তোমার যদি কম্পিউটার না থাকে, তাহলে কম্পিউটার কিনে ফেলো, যত কম টাকায় পারা যায় (প্রোগ্রামিং করার জন্য দামি ল্যাপটপের প্রয়োজন নেই)। ডেস্কটপের চেয়ে ল্যাপটপ কেনাই ভালো হবে, কারণ বিদ্যুৎ না থাকলেও ব্যাটারিতে চলবে। ক্লাশ শুরুর আগে তুমি যদি প্রোগ্রামিং (সি ল্যাঙ্গুয়েজ) মোটামুটি শিখে ফেলতে পারো, তাহলে অনেক এগিয়ে যাবে এবং ভার্সিটি লাইফ তোমার জন্য অনেক সহজ ও আনন্দময় হয়ে যাবে। প্রোগ্রামিং শেখার জন্য বাংলায় ‘কম্পিউটার প্রোগ্রামিং (প্রথম খণ্ড)‘ বইটি পড়তে পারো।

কম্পিউটার প্রোগ্রামিং ১ম খণ্ড – চতুর্থ সংস্করণ

এটি নীলক্ষেতে ও রকমারি ডট কম (rokomari.com) -এ কিনতে পাওয়া যায়। আর টাকার সমস্যা থাকলেও অসুবিধা নাই। বইটি অনলাইনে ফ্রি পড়া যায়। আর বইয়ের সাথে সাথে তোমরা চাইলে অনলাইনে একটি প্রোগ্রামিং কোর্স করে ফেলতে পারো। এটিও সম্পূর্ণ ফ্রি, কোনো টাকাপয়সা লাগবে না। একা একা কিংবা বন্ধুরা কয়েকজন মিলে শিখতে পারো। বই এবং (অথবা) কোর্স করার পরে তোমরা কম্পিউটার প্রোগ্রামিং বইয়ের ওয়েবসাইটে দেওয়া প্রবলেমগুলো সলভ করার চেষ্টা করতে পারো। আর সমস্যাগুলোর সমাধান নিয়ে আলোচনা করেছি ‘৫২টি প্রোগ্রামিং সমস্যা ও সমাধান‘ বইতে। এই সমস্যাগুলোর সমাধানের চেষ্টা করলে তোমার প্রোগ্রামিং ও সি ল্যাঙ্গুয়েজের বেসিক শক্ত হয়ে যাবে। ভার্সিটির ক্লাশ শুরুর আগে এতটুকু ভালোভাবে রপ্ত করতে পারলে তোমার আর পেছনে ফিরে তাকাতে হবে না।

ক্লাশ শুরু হওয়ার পরে বইগুলো আবার পড়বে (হ্যাঁ, প্রোগ্রামিং বই কেবল একবার পড়ার জন্য নয়)। তারপরে “কম্পিউটার প্রোগ্রামিং ২য় খণ্ড” বইটি পড়া শুরু করে দাও। বইতে প্রোগ্রামিং ও সি ল্যাঙ্গুয়েজের বেশ কিছু জটিল ও গুরুত্বপূর্ণ বিষয় নিয়ে আলোচনা করা হয়েছে।

cpbook2pp         52_book_cover

(বইগুলো রকমারি ডট কম ছাড়াও daraz.com.bd এবং ঢাকায় নীলক্ষেতের হক লাইব্রেরি ও মানিক লাইব্রেরি-তে পাওয়া যায়।)

নিচের দুইটা বই অপশনাল – পড়তেই হবে এমন কোনো কথা নেই, তবে পড়লে শিক্ষার্থীরা উপকৃত হবে।

rokimg_20150817_102370

আর ভার্সিটিতে অনেক সিনিয়র ভাইয়া-আপুরা তাদের নিজেদের দূর্বলতা ঢেকে রাখার জন্যই হোক, কিংবা নিজেদের কম জানার কারণেই হোক, জুনিয়রদের অনেক উল্টা-পাল্টা গাইডলাইন দেয় – ‘এটা করলে ভালো হবে’, ‘সেটা করার দরকার নাই’ এরকম। তাই আমি বাংলাদেশের এক ডজন সফল প্রোগ্রামারের সাক্ষাৎকার নিয়েও একটি বই লিখেছি ‘প্রোগ্রামিং ক্যারিয়ার গাইডলাইন: এক ডজন প্রোগ্রামারের কথা‘ – যেটি শিক্ষার্থীদের অনুপ্রেরণা যোগাবে ও সঠিক পথ দেখাবে। এর মধ্যে বেশ কিছু সাক্ষাৎকার এই ব্লগে প্রকাশিত হয়েছে।

এছাড়া আমি নিজেও প্রোগ্রামিং শেখার গাইডলাইন হিসেবে একটি বই লিখেছি, যার নাম “প্রোগ্রামিংয়ের আশ্চর্য জগৎ“। বইটির বেশিরভাগ লেখাই এই ব্লগে পাওয়া যাবে। যারা বই পড়তে পছন্দ করো, তারা কিনতে পারো।

প্রোগ্রামিং যাত্রা শুভ ও আনন্দময় হোক।

প্রোগ্রামিং শেখার ১০টি লিঙ্ক

যারা প্রোগ্রামিংয়ের জগতে একেবারেই নতুন এবং বাংলা ভাষায় প্রোগ্রামিং শিখতে চায়, তাদের জন্য ১০টি দরকারি লিঙ্ক : 

১) দ্বিমিক কম্পিউটিং – অনলাইনে বাংলায় তথ্যপ্রযুক্তি বিষয়ক বিভিন্ন ফ্রি কোর্স (ভিডিও লেকচার)। নতুনদের জন্য সি প্রোগ্রামিংয়ের ওপরও একটি কোর্স রয়েছে এখানে। :http://dimikcomputing.com/

২) কম্পিউটার প্রোগ্রামিং বইটির ওয়েব ভার্শন (ফ্রি) :http://cpbook.subeen.com/

৩) কম্পিউটার প্রোগ্রামিং বইয়ের পিডিএফ ডাউনলোড : http://goo.gl/vv0kRN

৪) প্রোগ্রামিং বিষয়ক বই:

কম্পিউটার প্রোগ্রামিং ১ম খণ্ড

কম্পিউটার প্রোগ্রামিং ২য় খণ্ড

৫২টি প্রোগ্রামিং সমস্যা ও সমাধান

প্রোগ্রামিং কনটেস্ট – ডাটা স্ট্রাকচার ও অ্যালগরিদম

প্রোগ্রামিং ক্যারিয়ার গাইডলাইন – এক ডজন প্রোগ্রামারের কথা

৫) পাইথন শেখার ফ্রি অনলাইন বই – pybook.subeen.com

৬) প্রোগ্রামিং শেখার গাইডলাইন (তামিম শাহ্‍‍রিয়ার সুবিন)

৭) প্রোগ্রামিং শেখার গাইডলাইন (তানভীরুল ইসলাম) :http://goo.gl/M1DeIZ

৮) প্রোগ্রামাবাদ – প্রোগ্রামিং প্রশ্নোত্তরের জন্য ওয়েবসাইট : http://programabad.com

৯) বাংলা ভাষায় প্রোগ্রামিং সমস্যা :http://dimikoj.com

১০) ফেসবুক গ্রুপ :https://www.facebook.com/groups/programming.school/