سیستم های هواشناسی و حمالی من

با عرض سلام و ادب خدمت دوستان عزیز

دو سال قبل یه آقایی باهام تماس گرفت و گفت دنبال برنامه نویس جاوا میگرده که برای مودم های صنعتی و دستگاه های هواشناسی برنامه نویسی کنه !! منم تا اون زمون کلا با جاوا یه خط کد هم ننوشته بودم اما از اونجایی که با خانواده سی آشنایی خوبی داشتم با اعتماد به نفس کامل گفتم که اول باید دستگاه ها رو ببینم بعد صحبت کنم ! خلاصه رفتم دفتر ایشون و دوسه تا دستگاه تحویلم داد گفت برو باهاشون کار کن ببین اگر تونستی ازشون سر دربیاری بیا باهات قرار داد ببندیم . به محض اینکه رسیدم خونه یه کتاب جاوا دان کردم و هرجوری شده بود یه هفته جاوا رو تا حدی که بتونم کارمو راه بندازم یاد گرفتم و بعدش شروع کردم به ور رفتن با دستگاه ها و بعد از یه مدت  کوتاه هرجوری بود با مصیبت تونستم برای یکی از این دستگاهها یه برنامه ساده بنویسم ! این دستگاه ها یکیش یه مودم صنعتی tc65i بود و یکیش هم یه لاگر هواشناسی به اسم lufft opus بود! بیشتر از چند روز وقت تلف شد تا بتونم محیط برنامه نویسی مودم tc65i  رو راه اندازی بکنم چون معلوم نبود از کدوم نسخه جاوا استفاده میکنه که بکنار مجبور بودم نسخه‌ی java me مورد نیاز برای این مودمم پیدا کنم که کلی دردسر داشت و بالاخره بعد از کلی اعصاب خراب کنی و کله به دیوار کوبیدن موفق شدم محیط لازم رو برای این مودم راه اندازی بکنم و یه برنامه ساده بنویسم که بعد از روشن شدن مودم یه اس ام اس بفرسته و بعد وصل بشه به نت و داده بفرسته  ,برنامه ای هم که مشتری ازم میخواست این بود که این مودم داده ها رو از لاگر lufft opus بخونه و بعد وصل بشه به اینترنت و داده هایی که خونده رو ارسال بکنه به یه سرور خاص.خلاصه بعد از اینکه با مصیبت تونستم مطمئن بشم که میتونم برای مودم هر کدی بنویسم افتادم جون لاگر ! لاگرم چه لاگری !!!!!!!!!!!! یه داکیومنت مسخره برای پروتکلش نوشته بودن که اصلا نمیشد ازش سردرآورد و فقط خدا میدونه با چه مصیبتی تونستم که موفق بشم بتونم با لاگر ارتباط برقرار کنم و داده بفرستم !! داشتم با جاوا کد میزدم اما گاهی اوقات چنان مزخرف میشد که احساس میکردم دارم با سی کد سطح پایین میزنم ! Null Pointer Exception  جاوا هم که گاهی اوقات وسط کار باعث میشد رسما اشکم در بیاد و لعنت بفرستم به اینکه چرا برنامه نویس شدم  🙁 ! خلاصه سردرد ندم هرجوری شده بود تونستم یه برنامه ساده برای لاگر بنویسم که مودم وصل بشه بهش و آی دی دستگاه رو بخونه و رفتم دفتر مشتری و نشونش دادم تا قرار داد ببندیم ! موقع بستن قرار داد فکر میکردم قلق کار مودم و لاگر دستم اومده و فوق فوقش یه ماه و نیم میکشه و برنامه رو تموم میکنم تحویل میدم پولم رو میگیرم و باعث شد قیمت خیلی خیلی پایینی صحبت کنم ! بعد بستن قرار داد رفتم خونه و شروع کردم به نوشتن برنامه بی خبر از اینکه قراره با چی چیزهایی روبه‌رو بشم !!!! روند نوشتن برنامه خوب پیش میرفت که یهو همه چی خراب شد ! با یه چیز عجیب غریب رو به رو شدم ! برنامه خود لاگر دمای بدست اومده از سنسور رو ۲۸ درجه نشون میداد اما وقتی خودم با کد به لاگر وصل میشدم بجای ۲۸ درجه عدد ۳۶۵۰۰ رو بهم میداد ! فقط خدا میدونه چقدر خون دل خوردم چقدر حرص خوردم چقدر کله خودمو به دیوار کوبیدم که موفق شدم کشف راز بکنم که چطور باید ۳۶۵۰۰ رو به ۲۸ درجه تبدیل کنم و بعد اینکه موفق شدم گفتم که قسمت سخت همین بود و دیگه تموم میشه اما غافل از اینکه تازه اول راهه !‌بله قسمت سخت تر این بود که حالا بیا و تک تک این داده ها رو از لاگر بخون بعد تبدیلش کن به مقدار قابل فهم برای انسان ,تازه که تبدیلشون کردی بیا اینا رو در قالب یه فرمت خاص از طریق مودم بفرست به سرور !!!! از همه مهمتر اصلا داده ها چجوری قراره از لاگر خونده بشه ؟ اصلا یادم می افته میخوام گریه کنم که صبح تا شب با بایت و بیت بازی میکردم ! به این لاگرها چند مدل سنسور وصل میشد که کاربرمیتونست از طریق تنظیمات رنج عددهای خاصی به لاگر بده که گاهی اوقاتم عددهای اعشاری بدست می اومد و تو اون نسخه از جاوا هم چیز خاصی برای کار کردن با اعداد اعشاری نبود  و مجبور بودم کلی کد بزنم که بیت و بایت رو بعد کلی انگولک تبدیل کنه به عدد اعشاری و … ! بعضی از سنسورها رنج عددی خاصی نداشتند و مثلا وقتی عدد صفر میفرستادن معنی خاصی میداد و باید کدی مینوشتم که در همه این سنسورهای مختلف با وضعیت های مختلف و رنج عددهای مختلف و حالت های مختلف و تبدیل های مختلف و تنظیم های مختلف کاربر و …. بخوبی کار بکنه و همه اینها رو باهم مَچ کنه ! تازه این همه بایت بی در و پیکر رو که لاگر تحویلم میداد چجوری باید از هم جدا میکردم بعد تبدیل میکردم به عدد قابل فهم ؟‌ قسمت بد ماجرا هم این بود که داکیومنت لاگر به قدری گنگ و کوتاه بود که نمینوشتن بهتر بود از نوشتنش! سختی خیلی خیلی خیلی زیادی کشیدم ولی درنهایت تونستم یه کلاس بنویسم که بعد از چک کردن اینکه لاگر خاموش نیست سنسور بهش وصل شده یا نه ؟‌ سنسور مدلش چیه ؟ چندتا کانال لاگر فعاله؟ کاربر چه تنظیماتی رو اعمال کرده ؟‌و …… یه دستور بفرسته و از لاگر بخواد که داده هایی که رو از سنسور گرفته و ذخیره کرده بفرسته به مودم . بازه زمانی که لاگر داده ها رو از سنسورها میگرفت و ذخیره میکرد بستگی به تنظیمات کاربر داشت و ممکن بود ۱۰ دقیقه باشه یا یه دقیقه و … ! از طرفی هر لاگر دو کانال داشت و به هر کانال یه سنسور وصل میشد که سنسورها  مختلف بودن و هر کدوم تنظیمات و تبدیلات و حالات خاص خودشون رو داشتن ! تازه لاگرها میتونستن بهم وصل بشن و اون وقت یه لاگر میشد ارباب و از بقیه هم داده ها رو میگرفت و میفرستاد و منه بدبخت مجبور بودم تمام این حالات و احتمالاتی که تمومی نداشت رو در نظر بگیرم ! با هر مصیبتی که بود موفق شدم کد تمام این قسمت ها رو بنویسم اما وقتی رسیدم به قسمت خوندن داده ها رسما دیگه دود از مغزم بلند شد !‌ هر لاگر lufft opus  دو کانال داشت و امکان داشت در یک ایستگاه تا سقف ۸ لاگر بهم متصل بشن  و اگر هر دو کانال این هشت لاگر فعال باشن یعنی من ۱۶ تا سنسور داشتم که مجبور بودم داده های ذخیره شده اینا رو بخونم و بفرستم به سرور! لاگر هم داده ها رو در قالب پاکت های ۱۲۸ بایتی میفرستاد و ممکن بود یه تعداد از داده ها در پاکت بعدی مونده باشن! از طرفی ممکن بود یه لاگر هر ۱۰ دقیقه یکبار داده ها رو ذخیره کنه یه لاگر هر ۱ دقیقه یکبار ! خلاصه رفته رفته کار بقدری پیچیده شد که من رسما رد دادم ولی هرجوری شده بود موفق شدم انجامش بدم  و داده های تمام اینها رو بخونم و بفرستم به مودم ! نتیجه کارم یه متد شد که داخلش چنان حلقه ها تو در تو بودن که هنوزم که هنوزه جرات نمیکنم به کدش نگاه بکنم ! این متد تک تک بایت ها رو میخوند و به بایت های قبلی و بعدی نگاه میکنه تا بفهمه در چه موقعیتی قرار داره و چی به چیه ؟ مثلا وقتی به یه بایت خاص میرسه میفهمه که پاکت تموم شده بعد نگاه میکنه ماله کدوم لاگره ماله کدوم کاناله چه سنسوری داره ! رنج عددیش چیه ؟‌کاربر چه تنظیماتی اعمال کرده ؟‌ چجوری باید تبدیلش کنه ؟‌اگر فلان بایته باید برگرده اول حلقه ؟‌اگر نیست باید از حلقه بره بیرون ! اگر در کانال اوله و فعال نیست حلقه رو ادامه بده ؟‌ چقدر باید حلقه رو تکرار بکنه تا تمام داده های کانال اول رو بخونه ؟‌از کانال های لاگر فعلی تموم شد باید بره کانال بعدی ؟‌بازه زمانی ذخیره در کانالی که در لاگر ایکس قرار داره چقدره ؟  خلاصه انقدر تو در تو و پیچیده هست که حتی جرات نمیکنم بهش فکر کنم ! ناگفته نماند که مودم cinterion tc65i هم گاهی اوقات خیلی اشکم رو در می آورد مثلا گاهی اوقات دو ساعت بدون هیچ دلیل خاصی کدم کار نمیکرد بعد متوجه میشدم که شارژ سیم کارت مودم تموم شده ! در اوایل هر چقدر سعی میکردم با مودم اس ام اس بفرستم موفق نمیشدم بعد فهمیدم مودم که روشن شد حداقل باید یه ۵ ثانیه رد بشه تا سیم کارت بتونه به خودش بیاد آنتن بده خخخ ! قسمت سوزناک ماجرا این بود که برای لاگر یه میلیون صحبت کرده بودم و برای مودم یه میلیون ! حالا من نمیگم با خودتون حساب کتاب کنید آیا دو میلیون تومن برای انقدر دردسر که من فکر میکردم فوقش دو ماه میکشه می ارزه ؟

نتیجه اخلاقی : حتی اگر از گشنگی هم مردید و به دیار باقی شتافتید ,اگر یه قرونم جیبتون پول نبود کاری رو که نمی صرفه قبول نکنید !

نتیجه اخلاقی ۲ : در پروژه هایی که دولت چه به صورت مستقیم چه به صورت غیر مستقیم دخالت داره کار نکنید چرا که همیشه یه دلال و واسط وجود داره که سود اصلی رو اون میکنه و شما فقط خر حمالی میکنید ! ایران کشور دلال هاست ! مهم نیست چقدر کار بلد و باسواد باشین یا کار و مهارت شما خوب باشه همیشه یه شخص واسطی هست که ارتباطات قوی داره و از شما به عنوان یک حمال استفاده میکنه و از شانس بد روزگارم دولتی ها همه کارها و پروژه ها رو به اونها میدن ! برای همین هیچ وقت هیچ پروژه ای که یجورایی به دولت ربط داره رو قبول نکنید چرا که از شما فقط به عنوان حمال استفاده میشه !

دیدگاه‌تان را بنویسید: