সফটওয়্যার ডেভেলপমেন্ট@মাইক্রোসফট – ২

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

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

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

১। ১০.৩০টায় অফিসে আগমন।
২। লগিন করে প্রথম ইয়াহুতে ব্যাক্তিগত মেইল চেক।
৩। সিসিবিতে কি কি পোস্ট আইলো তা দেখা (জুক্স না কিন্তুক)।
৪। এইবার আমার বাগ লিস্টে কি আছে তা দেখা। এখানে কার কার দায়িত্ত্বে কি কি বাগ আছে তা ট্র্যাক করার জন্য বাগ ডাটাবেজ আছে। ওটা ওপেন করলেই আমার ঘাড়ে কি কি আছে তা টের পাওয়া যায়।

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

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

এতক্ষন ভাসা ভাস কথায় বললাম কি ভাবে কি হয়। এবার একটু টেকি ভাষায় প্র্যাক্টিকাল উদাহরন দিয়ে বলি। নন-টেকিরা অ্যান্টেনা বন রাখতে পারেন। বেশি উপর দিয়া যাইতে পারে। আগেই মাফ চাই।

আমি কাজ করি .NET4.0 এ। .NET এ অনেক কিছু আছে। তার মধ্যে একটা হোল WCF (Windows Communication Foundation)। WCF এর কাজ হোল ওয়েব সার্ভিস রিলেটেড। কোন ওয়েব ক্লায়েন্ট কোন ওয়েব সার্ভিসের সার্ভিস নিতে চাইলে সে SOAP মেসেজের মাধ্যমে যোগাযোগ করে থাকে। এই SOAP মেসেজে অনেক কিছু থাকে, তার মধ্যে একটা হোল সিকিউরিটি হেডার। একটু সহজ করে বললে যে ক্লায়েন্ট সার্ভিস নিতে চাচ্ছে সার্ভার থেকে, তাকে এই সিকিউরিটি হেডারের মাধ্যমে তার নিজের আইডেন্টিটি প্রমান করতে হয় সার্ভারের কাছে। এই আইডেন্টিটি প্রমানের কাজটা ম্যালাভাবে হতে পারে, Windows Token (Kerberos, NTLM) এর মাধ্যমে, x.509 সার্টিফিকেটের মাধ্যমে, পাসওয়ার্ডের মাধ্যমে। আমাদের কাজ হোল এই সিকিউরিটি হেডারের কন্টেন্ট ভেরিফাই করা যাতে আন-অথেন্টিকেটেড ক্লায়েন্ট সার্ভিস নিতে না পারে।

এখন গত সপ্তাহে আমার কাছে একটা বাগ আসল নিচের ফাংশনে x.509 সার্টিফিকেটের সিরিয়াল নাম্বার (যা একটি লিটল এন্ডিয়ান বাইট অ্যা্রে) ইনপুট হিসেবে দিলে তার ডেসিমাল ইকুইভ্যালেন্ট string এ কনভার্ট করে দেবে আউটপুট হিসেবে। মানে, নিচে ফাংশন্টা দেখঃ

public static string ByteToDecimalString(byte[] input)
{
// This method converts input to a string representation of decimal
// value. Example:
// input={15}, then returned value=”15”
// input={255}, then returned value=”-1”
// input={16, 1}, then returned value=”272”

// BUG:
// input={0}, then returned value=”” instead of “0”
}

বাগের কারনে যদি এই ইনপুট বাইট অ্যা্রেতে শুন্য থাকে তাহলে এই ফাংশন্টা “0” এর পরবর্তে “” (String.Empty) রিটার্ন করছিল।

এখন এই সমস্যা রিপ্রো করতে হলে আমাকে দুটো কম্পিউটারে কাজ করতে হবে। তার কারন হোল আমি কাজ করছি .NET4.0 ডেভেলপমেন্ট। তারমানে যে কম্পিউটারে আমি কোড করছি তাতে ইন্সটল করা আছে .NET3.5SP1। এখন 4.0 এর কোড 3.5 SP1 এ ডীবাগ করা যায় না। 4.0 এর কোড 4.0 তেই ডীবাগ/টেস্ট করতে হবে। মানে কইয়ের তেলে কই ভাজতে হবে মাগার কই মাছ আইবো পুকুর থিকা। সুতরাং আমার বাগ ফিক্স এর পর্যায়গুলো নিম্নরুপঃ

১। WCF এর কোড Visual Studio তে খোল। তারপর এই বাগওয়ালা কোড ফিক্স কর। ফিক্স করা কোড এবার ডেভেলপমেন্ট মেশিন(যেখানে 3.5 ইন্সটল করা আছে) থেকে টেস্ট মেশিন (যেখানে 4.0 ইন্সটল করা আছে) ট্রান্সফার কর।
২। টেস্ট মেশিনে এই ফিক্স টেস্ট করে দেখা যে বাগ ঠিক হয়েছে কিনা। যদি হয় তো আসল কাজ শেষ।
৩। এবার কাজ হোল ইউনিট টেস্ট লেখা যাতে পরবর্তিতে এই ফাংশনে কোন পরবর্তন যদি করে তাতে যাতে এক্সপেক্টেড বিহেভিওর ঠিক থাকে।
কি ধরনের ইউনিট টেস্ট হতে পারে? সাদা কথায় বোঝানো খুব মুশকিল এমনকি টেকি কথা দিয়েও। তাই সরাসরি কোড দিয়ে দিলামঃ

[Test]
public void TestByteTotegerConverter()
{
byte[] serialBytes = new byte[] { 0 };
string serial;
serial = GetSerial(serialBytes);
Assert.AreEqual(serial, "0");

serialBytes = new byte[] { 0, 0 };
serial = GetSerial(serialBytes);
Assert.AreEqual(serial, "0");

serialBytes = new byte[] { 1 };
serial = GetSerial(serialBytes);
Assert.AreEqual(serial, "1");

serialBytes = new byte[] { 255 };
serial = GetSerial(serialBytes);
Assert.AreEqual(serial, "-1");

serialBytes = new byte[] { 1, 2 };
serial = GetSerial(serialBytes);
Assert.AreEqual(serial, "513");

serialBytes = new byte[] { 16 };
serial = GetSerial(সerialBytes);
Assert.AreEqual(serial, "16");

serialBytes = new byte[] { 16, 1 };
serial = GetSerial(serialBytes);
Assert.AreEqual(serial, "272");
}

string GetSerial(byte[] input)
{
return ByteToDecimalString( input );
}

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

এখন আমার পরে অন্য কোন আবুল আইসা যদি ByteToDecimalString ফাংশনের কোন চেঞ্জ করে আর তাতে যদি এক্সপেক্টেড বিহেভিওর চেঞ্জ হয়ে যায় (যেমন {0} পাস করলে রিটার্ন করল “-0”), তাহলে এই টেস্ট কেস ফেল করবে।

এখন এই টেস্ট ফেল করলে আল্টিমেট রেজাল্টটা কি হবে? সে জন্যে আমাদের কোড চেক-ইন করার প্রসেস জানতে হবে। কোড চেক-ইন মানে হোল কোন বাগ ফিক্স করার পর সেই পরিবর্তিত কোড মূল কোড ডাটাবেজে সাবমিট করতে হয়। মানে হোল সবাইকে একটি সেন্ট্রাল কোড ডাটাবেজেই কাজ করতে হয়। যারা কাজ করেছ তারা হয়ত জান কোড চেক-আউট চেক-ইন করার কথা। আরেকটু খোলাসা করে বলি।

কোন বাগ ফিক্স করতে হলে প্রথমে আমাকে মূল কোড ডাটাবেজ থেকে কোড চেক-আউট করতে হয়। কোড চেক-আউট না করে আমি কোন পরিবর্তন করতে পারব না। ব্যাপারটা অনেকটা লাইব্রেরী থেকে বই ধার নেয়ার মত। আগে লাইব্রেরিয়ানের কাছ থেকে বই ইস্যু (=চেক আউট) করতে হয়। চেক আউট করার পর আমি বাগ ফিক্স করলাম। এবার আমাকে এই পরিবর্তিত কোড আবার জমা দিতে হবে। বই জমা দেয়ার সময় লাইব্রেরিয়ান মামু যেমন পাতা উল্টাইয়া দেখে পোলা কিছু উত্তেজক পৃষ্টা মাইরা দিছে নাকি, ঠিক তেমন ভাবে কোড জমা দিলে অটোমেটেড কোড সাবমিট সিস্টেম চেক করে দেখবে সবকিছু ঠিক আছে নাকি। এর জন্য নিচের কাজ গুলো কোড চেক-ইন সিস্টেম পর্যায়ক্রমে করে

১। পরিবর্তিত কোড কম্পাইল করা।
২। কম্পাইল সাক্সেস্ফুল হলে সব ইউনিট টেস্ট কোড রান করা। এর মধ্যে কোন টেস্ট ফেল হলে পুরো চেক-ইন প্রসেস ফেল করেছে বলে ধরে নেয়া হবে। তার মানে হোল আমার ফিক্স কম্পাইল করেছে ঠিকই কিন্তু এক্সপেক্টেড বিহেভিওর করছে না। ইউনিট টেস্ট না থাকলে এইটা ধরা সম্ভব হোত না। ঠিক যেমন কলেজের উত্তেজক গল্পের বইয়ের পৃষ্টা ছিড়া নিলে লাইব্রেরিয়ান মামু পাতা উল্টাইয়া ধরতে পারলে জরিমানা না দিয়া পার পাইবা না টাইপের আর কি। আগে ছেঁড়া পাতা (= এক্সপেক্টেড বিহেভিওর) ফেরত দাও তারপরে বই জমা। আর যদি সব টেস্ট পাস করে তাইলে চেক-ইন কম্পলিট।

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

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

D2R_0022_2

DSC_0197_2

৫,৭৩২ বার দেখা হয়েছে

৬৩ টি মন্তব্য : “সফটওয়্যার ডেভেলপমেন্ট@মাইক্রোসফট – ২”

  1. তানভীর (৯৪-০০)

    * চমৎকার একটা পোস্ট মরতুজা ভাই। :thumbup:
    * ইউনিট টেস্টিংয়ের কোড কি আপনারা করেন না টেস্টাররা? নাকি দুই দলই করে?
    * অফিসে তো ১০-৩০ এ আগমন করেন, বাসায় যান কয়টায়? নাকি বাসায় যাওয়ার কোন টিম-টেবিল নাই?
    * গাইড আপারে আমার সালাম জানাইয়েন। 😀

    জবাব দিন
    • মরতুজা (৯১-৯৭)

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

      আর বাসায় সাধারনত ৬ টার পরেই যাইগা। তবে ডেডলাইন থাকলে উইকেন্ড, ছুটি কিছু ঠিক থাকে না। আর গাইড আফারে তোমার সালাম জানাই দিমুনে।

      জবাব দিন
  2. কামরুল হাসান (৯৪-০০)

    গাইড আপার সাথে সমুদ্রে সাঁতার দেন নাই? :grr:


    ---------------------------------------------------------------------------
    বালক জানে না তো কতোটা হেঁটে এলে
    ফেরার পথ নেই, থাকে না কোনো কালে।।

    জবাব দিন
  3. ফয়েজ (৮৭-৯৩)

    তুমি নিশ্চয় এটা এনজয় কর।

    আমার কাছে প্রোগ্রামিং খুব পেইনফুল মনে হয়। ছোট্ট একটা বাগে ফিক্সের জন্য রাজ্যের ঝামেলা পোহাতে হয়।

    তোমার সাফল্য কামনা করি মরতুজা।


    পালটে দেবার স্বপ্ন আমার এখনও গেল না

    জবাব দিন
    • মরতুজা (৯১-৯৭)

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

      জবাব দিন
      • ফয়েজ (৮৭-৯৩)

        😀 😀

        আমি আসলে হার্ড-ওয়্যার পছন্দ করি, যদিও বাংলাদেশে আসলে ইঞ্জিনিয়িরিং জব স্কোপ খুবই লিমিটেড, R/D সেকশনটাই নাই কারও, তাই কোন চ্যালেঞ্জও নাই। ইঞ্জিনিয়ারিং পড়াকে ইফেক্টিভলি ব্যবহার করতে চাইলে আসলে আমেরিকা আর কিছু ইউরোপিয়ান আর এদিকে জাপান ছাড়া গতি নাই। ঈদানীং কোরিয়ায় হচ্ছে কিছু, আর আমি নিশ্চিত না, মালেশিয়ার ব্যাপারে।

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

        তবে মেধাকে কাজে লাগাতে লেগে কস্ট করতে হবেই। লেগে থাক। লাগে রহো মুন্না ভাই..।..।...।

        দেশে একটা ফার্ম করতে পার কিনা ভেবে দেখতে পার। অফ-সোর ফার্ম। তুমি কাজ বাগাবা, দেশের ছেলেরা ডেভেল্প করে দেবে।


        পালটে দেবার স্বপ্ন আমার এখনও গেল না

        জবাব দিন
  4. রেশাদ (৮৯-৯৫)

    যা লিখসো পুরা ফকফকা, খুব সোজা লাগ্লো। ক্যাম্নে লিখলা এতো সহজ কইরা???
    মাথার উপর দিয়ে গেলো কিনা তাও বুঝতে পারলাম্না 😕
    :dreamy: 😮 :-/

    অ ট - র‌্যাফটিং এ যাইতে মঞ্চায় 🙂

    জবাব দিন
  5. রবিন (৯৪-০০/ককক)

    অনেক কিছু জানতে পারলাম। জোস। খুব সহজ করে লিখেছেন।
    .Net 4.0 এ কোড 3.5 এ টেষ্ট করা যায় না কেনো?
    কোড চেক আউট করা মানে কি মূল ডাটাবেজ থেকে ওই রিলেটেড কোডটা আপনার নামে এসাইন হয়ে যায়??
    কোড এর Assert.AreEqual জায়গাটা বুঝি নাই।

    অ ট – র‌্যাফটিং এ যাইতে মঞ্চায় 😛

    জবাব দিন
    • মরতুজা (৯১-৯৭)

      কারন 4.0 এর CLR কোডও ভিন্ন। সুতরাং একটি স্যাম্পল প্রোগ্রাম 3.5 এ যেভাবে বিহেভ করবে 4.0 এ সেভাবে বিহেভ করবে না। আমার আল্টিমেট গোল তো 4.0 ডেভেলপ করা, 3.5 না। তাছাড়া তুমি একটা ফ্রেমওয়ার্ক ডেভেলপ করছ। একটা ফ্রেমওয়ার্কের নতুন ভার্সন বানাতে গেলে তার পুরানো ভার্সনে টেস্ট করে কি লাভ?

      আর চেক-আউট মানে ঠিক কোড অ্যাসাইন হয়ে যাওয়া না। বরং তোমার কোড চেঞ্জ করার পারমিশন পাওয়া। একই কোড একই সময় অন্য কেউও চেঞ্জ করতে পারে।

      Assert.AreEqual হোল ইকুয়ালিটি চেকের ফাংশন। এতা NUnit ফ্রেময়ার্কে পাবে। এর মানে হোল এই ফাংশনের প্রথম ও দ্বিতীয় ভ্যালু দুটোই সমান। In other words, I am asserting these two values are euqal. If not then throw exception.

      জবাব দিন
  6. Antenna বন কৈরাও কাম হৈলো না। ঠিকই বুইঝা ফেল্লাম সবকিছু। :-B
    (ছাতা বুঝছি :bash: )

    মরতুজা ভাই আসলে আধুনিক কবিতা দিছেন।
    Code is Poetry.

    বাচ্চাদের জন্য লেখা আপনার সিরিজটার পরের পর্ব পড়তে মঞ্চায়। :dreamy:

    জবাব দিন
  7. শাহরিয়ার (২০০৪-২০১০)

    আমারে কেউ হেল্প করেন!আমার উবুন্টু 9.04 এ আমার স্যামসাং ২৫০ মোবাইল ডিটেক্ট করতে পারে না...কি করবো?


    People sleep peaceably in their beds at night only because rough men stand ready to do violence on their behalf.

    জবাব দিন
  8. দিহান আহসান
    আমার টিউব দিয়া খুইজ্জা, এন্টেনা ৩৩০ ফিট তুইল্লাও ধরতে পারলাম না!!

    বড় বড় রথী মহারথীরা পারেনাই, আর আমিতো B-) 😛

    অফটপিকঃ মরতুজা ভাই, ভালো আছেন? ভাবী কেমন আছেন? 🙂

    জবাব দিন
  9. সামি হক (৯০-৯৬)

    সবই তো বুঝলাম(বুঝছি যে প্রোগামিং নিয়ে আলাপ করছো) কিন্তু ওই গেটস বেডা অফিসে বসে কি কাজ করে? আরেকটা কথা বলো তো হটাৎ করে কোন কম্পিউটারে কোন প্রোগাম বন্ধ হয়ে গেলে যে অপশন আসে 'সেন্ড এরর রির্পোট' এই রির্পোট টা কই যায়? এইটা নিয়ে কি আদৌ কোন কাজ করা হয়?

    জবাব দিন
  10. মরতুজা (৯১-৯৭)

    ভালো জিগাইছেন সামি ভাই। গেটস বেডা অহন আর অফিসে বহে না। হেয় চ্যারিটি নিয়া ব্যাস্ত।

    আর সেন্ড এরর রিপোর্ট সব আমাগো কাছে আহে। আর এইগুলা নিয়া আসলেই কাজ হয়। সো নো চিন্তা 🙂

    জবাব দিন
  11. কাইয়ূম (১৯৯২-১৯৯৮)

    মরতুজা ভাই, আইজকা বাসায় আপনার পোস্ট পিড়ার সময় গেটস সাহেব আর আপনাগো জানলা দুম কইরা রিস্টার্ট মারছিলো, হের পর থেইকা কইতাছে ntldr মিসিং। এখন আমি কিছু জানিনা, আপনে আমার ntldr আইন্যা দেএএএএন :gulli2:


    সংসারে প্রবল বৈরাগ্য!

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

    ভাই, বোটের কোন লোকটা আপনি"? চিনতে পারলাম না তো! 😛

    জবাব দিন
  13. সাইফ শহীদ (১৯৬১-১৯৬৫)

    মরতুজা,

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

    saif_shahid@yahoo.com

    সাইফ ভাই
    Albuquerque, NM, USA
    [www.saifshahid.com]

    জবাব দিন

মন্তব্য করুন

দয়া করে বাংলায় মন্তব্য করুন। ইংরেজীতে প্রদানকৃত মন্তব্য প্রকাশ অথবা প্রদর্শনের নিশ্চয়তা আপনাকে দেয়া হচ্ছেনা।