یه پروژه بامزه با پایتون : ساعت دیجیتالی به اسم کدون کلاک (تولد مجدد کد منبع)

عکس پست!
عکس پست!


لینک گیت‌هاب پروژه : https://github.com/LastChemist/CodonClock

یا اگر حوصله کپی پیست ندارین اینجا کلیک کنید.

لینک پست مرتبط قبلی در مورد همین پروژه (توصیه میکنم اگر نخوندین بخونین چونکه نحوه محاسبه و تبدیل رو برای اینکه دیگه اینجا اطاله کلام نشه به تفضیل اونجا توضیح دادم )

آقا سلام!

قراره یه درامدی بر پروسه توسعه از قبل استارت پروژه تا الان (که نسخه پایدار منتشر میشه) داشته باشیم.

قبل از شروع ماجرا

اولین باری که من کدون های mRNA رو دیدم مال خیلی خیلی وقت پیشه زمانیکه فکر کنم دوران راهنمایی بودم و کتاب زیست شناسی و آزمایشگاه خاله گرامی رو مطالعه می‌کردم (صرفا عکساش البته) که یهو متوجه یه جدولی شدم که نوشته بود لیست کدون mRNA و حقیقتا جالب بود برام.

یه سالنامه چرمی عسلی (از اون هدیه های سازمانی!) دارم که به درخواست مادرم افکارم رو از سال ششم (تقریبا تابستان ۱۳۹۶) توش می‌نویسم (حالا کسی دیگه می‌خونه و می‌دونه چی توش هست رو نمیدونم!).

این
این



حالا اینکه چقدر گذشت و من این جدول رو وارد دفترم کردم رو یادم نیست ولی تاریخ ثبتش روش هست:

سیزدهم شهریور یک هزار و سیسد و نود و نه (۱۳۹۹/۰۶/۱۳)
خیلی درب داغون پر از اغلاط املایی!
خیلی درب داغون پر از اغلاط املایی!


این موند و بقیه ایده ها و طرح ها و فلان و بسال (مثلا در نظر خودم خیلی خفن بودن اون موقع!) اومدن روش و تقریبا دفن شد (گاهی میام و کمی خاطره بازی می‌کنم اینطوری نیست که به فراموشی سپرده بشن).

استارت ماجرا

دقیقا همون چیزی که توی دفتر نوشتم یک قسمتش رو که چی شد که همچین شد رو اینجا نقل قول می‌کنم، بقیه مربوط به محاسبات هست که بهتره به نظرم به این پست رجوع کنید.

البته یه ادبیات خاصی نوشته های من دارن انگاری که خطاب به یه جمع از هم قطاران دارم می‌نویسم یا تعریف می‌کنم!

نقل قول

ثبت شده به تاریخ ۱۴۰۱/۰۶/۱۵
بع له! بازهم با کشفی عجیب و غریب (البته ابداع یا اختراع هست!) خدمتتون رسیدم.
اسم این طرح CodonClock یا به فارسی ساعت کدون هست. علت این نامگذاری هم مشخصه. به جای عدد از کدون mRNA استفاده می‌کنید!!! یعنی هرکدوم از کدون های mRNA نماینده یک عدد هستن. حالا شاید بپرسین که خب اینجوری نمیشه!، من میخوام نحوه محاسبه جایگاه عددی کدون mRNA که از ۱ تا ۶۴ هستش رو به شما یاد بدم که حاصل این کار چیزی نیست به جز ساعت به سبک کدون mRNA.
برای انجام این کار، حدودا یک هفته اونم بصورت پاره وقت (جمعا ۷ ساعت) زمان صرف کردم. شاید بگین که خیلی زیاده، علتش وجود یه سری استثناهایی بودن که سر راهم بودن، دوم اینکه ضرایب رو توهم ضرب می‌کردم (الان که دارم نقل قول میکنم یادم نمیاد که برای چی بود!)، حالا دیگه کاری به کار چی بود و چی شد ندارم! اگر بخواین میتونین به آرشیو های این سند رجوع کنین (منظورم دست نویس ها هست).


و زمانیکه تاریخ از دستت فرار میکنه!

تاریخ نوشتن کد کامل برنامه رو یادم نیست ولی یادمه که اواخر شهریور کارش رو تموم کردم (هوا گرم بود و البته بالاخره مادر گرامی برای اولین بار به قدرت برنامه نویسی پی برده و از پروژه من لذت بردن)

شروع توسعه

متاسفانه سند مرجع و کاملی از روند توسعه در دسترس ندارم ولی فایل های تلاش های ناموفقم رو دارم که البته بازم متاسفانه در سیستم قبلی هست و کلا وضعیتش خیلی خیته!

من برنامه رو با دو زبان سی شارپ (بیشتر برای راحتی ایجاد برنامه های گرافیکی) و پایتون نوشتم.

فکر می‌کنم یه یک هفته ای طول کشید تا برنامه رو بنویسم و با اختلاف پایتون راحت تر از سی شارپ برای من تموم شد (هرچند بیشتر سی شارپ کار کرده بودم قبلا).
البته الان به کد سی شارپ دسترسی ندارم ولی به محض پیدا کردنش توی گیت‌‌‌هابم آپلودش میکنم

وقتی که نفسی چاق کردم کد رو توی گیت‌هاب آپلود کردم لایسنس آپاچی نسخه ۲ رو روش گذاشتم و یکم با پروفایل و این داستانا ور رفتم.

کد همینطوری یکسال موند. هیچ کسی هیچ ری‌اکشنی نشون نداد! حتی پست قبیلم یه کامنت هم نداره!

ولی انگار Amber Eye اخیرا دیده و شخصا به خودم توی تلگرام تکست داده بود که دمم گرم (*خنده) که باعث شد که تاپیک بعدی شکل بگیره! (همین اردیبهشت ۱۴۰۳)

یه تکون کوچیک و بوووم! - ریفکتور از بیخ و بن سورس کد با پایتون

داشتم با Amber Eye (فرهان خودمون) صحبت می‌کردم و بهش گفتم که باو کد خیلی داغونه و این داستانا (تقریبا یه حالت اسپاگتی داره!) گفت که :

مهم اینکه پیادش کردی حالا هرچقدر هم کثیف مهم نیست. بعدا میتونی اصلاحش بکنی

این باعث شد که برم پروژه رو کلون بکنم و یه دستی بهش بکشم و فرضم این بود که کد کار میکنه از بیخ نشستم از اول نوشتم، بهینه سازی کردم، کلاس بندی کردم و کلا هرچی OOP سرم میشد رو توش به کار بردم.

لحظه شعف ران کردن پروژه فرا رسید، آخ! کار نمیکنه! هاج و واج موندم که چرا اینطوری شده. کار می‌کرد ولی چرت و پرت تحویل می‌داد (میتونید یه سری به issue های پروژه توی گیت هاب بزنین اونجا مطرح کردم).

عملا ۲ تا باگ پیدا کردم که این دوتا باگ کل برنامه رو بلا استفاده میکرد. ریفکتور ۴۵ دقیقه ای شد ۳ ساعت!

یکی از باگ ها توی Codon2Index بود (تابعی (چون توی کلاسه متد میگیم از این به بعد) که کدون رو به عدد تبدیل میکنه)، و مشکل توی یه قسمتی در بدنه حلقه for بود (یادم نیست دقیقا چی بود ولی یه i اونجا هست اون ورا بود!)

در حقیقت این متد برای ساعت ساخته نشده و صرفا یه مبدل هست که اگر خواستین تبدیل انجام بدین قابل استفاده باشه.


یکی دیگه از باگ ها توی Index2Codon بود (متدی که عدد رو به کدون تبدیل میکنه)، در حقیقت این متد میاد عدد رو به کدون تبدیل میکنه که میشه در ادامه به صورت ساعت درش آورد.

باگ ماجرا توی قسمت

codon_output += str(self.index_nucleotide_symbol_reversed[_])

بود، جایی که به جای عبارت بولد شده عدد (اسم متغیر رو یادم نیست) و در نتیجه چرت و پرت تحویلت میداد.

به عبارت بهتر به جای یکی از حروف U,C,A,G (نوکلئوتیدها) عدد داشتیم که چیزی که ما می‌خوایم نیست!.


اینم باگ!
اینم باگ!


تولد مجدد سورس کد

بعد از اینکه کد رو نوشتم و خروجی رو دیدم یه نفس عمیق کشیدم یه تشکر گرم هم از فرهان کردم وگرنه معلوم نبود تا کی قرار بود سورس اشتباهی بمونه روی گیت هاب و ... برای همین اسمش رو میذاریم تولد مجدد سورس کد به تاریخ ۲۳ اردیبهشت ۱۴۰۳.

خیلی برای من لذت بخش بود بالاخره تونستم یه چیز جالب رو بدون نقص فنی به اجرا در بیارم

قابلیت توسعه و استفاده مجدد کد

(راست چین شو! (یکی از نویسنده های ویرگول این ایده رو مطرح کرده بود ولی پستش رو پیدا نکردم (*اشک))) Documentation کد در حال تکمیل هست ولی میتونین فایل readme رو بخونین یه سری خرده اطلاعات توش هست ولی فعلا داشته باشین که :

سورس کد برنامه به صورت one file نوشته شده و از پراکندگی فایل ها سعی کردم پرهیز کنم بنابراین شما که کد رو باز کنین دوتا کلاس می‌بینین:

کلاس Utilities که همون دوتا متد اصلی هستن به همراه یسری لیست ها و دیکشنری های ضروری

کلاس Driver که در اصل ساعت رو میسازه و یجورایی نحوه استفاده از برنامه هست و یه سری متد های اضافی برای سر و کله زدن باهاش رو میتونید پیدا بکنین.

خروجی برنامه

البته که این عکس رو از پست قبلیم کش رفتم و در اصل عدد صفر رو در ورژن جدید به صورت OOO نشون میدیم


برنامه های آینده احتمالی

مطمئن نیستم ولی احتمالا بعد کنکور با سی شارپ هم بنویسم و حتی یه ورژن تحت وب هم ایجاد بکنم شاید یه فاندی چیزی گیرم بیاد (*خنده و شوخی!)

از اونجایی که اعداد در پایه ۶۴ هستن میشه یه ماشین حساب باهاش ساخت! که دسیمال باشه (بجای ۶۴ کدون از ۱۰ کدون استفاده بکنیم!)





پ ن ۱ : خب آقا امیدوارم که این پروژه برای شما جالب بوده باشه حقیقتا خیلی هیجان زده شدم که بالاخره یه نسخه تمیز و مرتب از کد رو دارم و دفعه بعدی که نگاهش بکنم شوکنه نمی‌شم که واو! این چی بود یهو من ساختم! کلا به زبان دیگه ای هست متوجهش نمیشم!!!!!!.

پ ن ۲ : بالاخره علی، علمی نوشت (پس از ماه های مدید!)

ارداتمندتون Last Chemist بودم، out!