باگ سیزده ساله تعمیر شد

شنبه ۱۹ فروردین ۱۳۹۶
۴ دقیقه مطالعه

در مطلب قبلی در مورد باگ GTK و تلاشم برای مرج کردن آن نوشته بودم. الان قصد دارم نتیجه‌ی چند ماه دوندگی و همکاری آنلاین را بنویسم.

ماجرا به طور خلاصه این بود که من از مدتها پیش موقع تایپ فارسی در gedit و zim متوجه شده بودم که اگر کلید کنترل را نگه دارم و به چپ و راست حرکت کنم، نشانگر تایپ در جهت عکس حرکت می‌کند. مثل خیلی از آدم‌ها من هم منتظر شدم تا باگ توسط کس دیگری رفع بشود ولی نشد. در مرحله بعدی سعی کردم مشکل را پیدا و گزارش کنم که به ‏این باگ رسیدم. تاریخ باگ را نگاه کنید، سال ۲۰۰۴ ثبت شده است. آن موقع (سال ۲۰۱۵ یا ۱۳۹۴) کل همت من به نوشتن یک کامنت خلاصه شد. اینکه بگویم من هم این مشکل را دارم، بلکه کسی دلش به حالم بسوزد و از وقت خودش بزند و بیاید مشکل من را حل بکند!

خب، ولی کسی دلش نسوخت.

اگر باگ را دنبال کنید مراحل بعدی را خودتان می‌بینید. بعد از گذشت یکسال دوباره همتم را جمع کردم و اینبار تصمیم گرفتم خودم باگ را درست کنم. با صرف چند روز وقت و سرو کله زدن با GTK و C پچی درست کردم و باگ را با حل کردم که شرحش را در مطلب قبلی آوردم. ولی مهمترین قسمت کار دنبال کردن باگ است. اگر به کامنت‌ها نگاه کنید و به کسانی که باگ‌های مشابه را ثبت کرده‌اند یا این باگ را دنبال کرده‌اند، متوجه می‌شوید که بیشتر افراد آن را دنبال نمی‌کنند و فیدبک نمی‌دهند. کامنت‌های حاوی اطلاعات روشن و مورد نیاز هم کم است. یعنی افراد (مثل خود من قبلا) کامنت می‌گذارند ولی کامنتشان کم ارزش است چون حاوی اطلاعات به درد بخور نیست و کاری هم برای آن انجام نشده است. ولی اگر کسی برنامه را تست بکند و فیدبک بدهد یا پچ را امتحان بکند و خلاصه به طریقی به پیشرفت پروسه‌ی رفع باگ کمک بکند کارش با ارزش است، در غیر اینصورت کسی توجهی به کامنتش نمی‌کند. و احتمالا جوابی هم دریافت نمی‌کند. در این مورد خواندن مقاله‌ی اریک ریموند بسیار سودمند است. اینکه چطور از هکرها هوشمندانه سوال بپرسیم. جان کلام اینست که پیام باید نشانگر تلاش سوال کننده در جهت حل مشکل باشد (باید مشق شب خودت را انجام داده باشی)، گویا باشد، طلبکارانه نباشد و برای وقت پاسخ‌دهندگان ارزش قائل باشد. در ضمن باید گفتگو را دنبال کرد و در صورت نیاز با اطلاعات دوباره آن را بروزرسانی کرد. اگر پرسشی پرسیده شده باید به سرعت و دقت پاسخ داده بشود و مانند اینها.

در نهایت بعد از گذشت چند ماه و پیگیری دائمی و رد و بدل کردن چندین و چند پچ و مشارکت عده‌ای از برنامه‌نویسان GTK بالاخره ‬پچ نهایی در مخزن اصلی مرج شد و باگ مورد بحث بعد از گذشت ۱۳ سال فیکس شد. در این مدت دوستم آیدین غریب‌نواز به عنوان کاربر RTL با تست پچ صحت آن را تایید کرد و کامنت گذاشت و دو نفر از برنامه‌نویسان GTK بنام Daniel Bolse و Nelson Benítez León همکاری زیادی برای تولید پچ نهایی کردند.

به این صورت بعد از مدتی اندک اندک با ریلیزهای بعدی گنوم و GTK این پچ منتشر می‌شود و دیستروها هم در نسخه‌های بعدی‌شان آنرا دریافت خواهند کرد. نکته مهمی که طی فرآیند تعمیر این باگ فهمیدیم این بود که از سیزده سال پیش تا به امروز GTK تغییرات زیادی کرده است و این باگ به تنهایی مشکل gedit را حل نمی‌کند چرا که امروز gedit دیگر از GtkTextView (که تعمیرش کردیم) برای نمایش متن استفاده نمی‌کند و بجای آن از یک ویجت دیگر بنام GtkSourceView استفاده می‌کند. بنابراین در تاریخ ۱۹ فوریه ۲۰۱۷ (اوایل اسفند ۹۵) باگ جدیدی ثبت کردم و کار را روی آن شروع کردیم. با کسب تجربه از پیچیدگی‌های باگ قبلی و فرآیند حل آن اینبار با سرعت وارد عمل شدیم (یعنی یکی دو ماه!). هم من یاد گرفته بودم چطور با بچه‌های GTK کار کنم و هم آنها با مشکل راست به چپ نویسی آشنا شده بودند. (مثلا دانیل یاد گرفته بود که خودش متن عربی را تست بکند.) اول فکر می‌کردیم که باید API ویجت GtkTextView را تغییر بدهیم و همان توابع را در GtkSourceView استفاده کنیم که با واکنش منفی یکی دیگر از برنامه‌نویسان روبرو شد و درخواست کرد که اول تلاش کنیم مشکل را درون GtkSourceView حل کنیم و بار اضافی نگهداری از یک API جدید را به پروژه تحمیل نکنیم. خوشبختانه با مقداری تلاش و همفکری دوستان به پچ جدیدی رسیدیم، حتی خیلی بهتر از پچی که برای GtkTextView نوشته بودیم! پچ به قدری ساده بود که کارها خیلی زود پیش رفت. طبق معمول دوستان اصلاحاتی پیشنهاد کردند که اعمال کردم. مثلا اینکه متن کامیت باید شامل لینک باگزیلا باشد، خط اول آن باید فیکس را شرح بدهد و در بدنه کامیت هم شرح مشکل آمده باشد و در خط آخر هم لینک باگزیلا. خود کد هم باید قواعد رایج GTK و خود ویجت را رعایت کند. مثل تعریف متغیرها در ابتدای کد و استفاده از آکولاد حتی برای بلاک‌های تک خطی و مانند اینها. آزاد کردن اشاره‌گرهای سی هم فراموش نشود!

با این اوصاف باگ دوم بجای سیزده سال در کمتر از دو ماه حل شد. حتما تصدیق می‌کنید که پیشرفت قابل توجهی است! پچ حلال مشکلات ما را هم می‌توانید در مخزن GTK ‬ببینید. من که بی صبرانه منتظرم تا آرچ لینوکسم را آپدیت بکنم و از این به بعد هرچقدر دلم می‌خواهد در متن‌های فارسی با کنترل و کلیدهای جهت کیبورد به چپ و راست بروم! واقعا چه لذتی از این بالاتر؟ :)

این هم عیدی من به کامیونتی راست به چپ نویسان گنوم باز ایران!

سورس

دیدگاه‌ها

من دوباره ب این کامنت سر میزنم   ۲۸ فروردین ۱۳۹۶   پاسخ 3259767363

ولی یه چیزی رو میخام بگم نمیدونم قبولش داری یا نه به نظر من کار گروهی برنامه نویسان ایرانی یا حد اقل کسایی که به برنامه نویسی علاقه دارن ضعیفه تو ایران، علتش نمیدونم چیه اینهمه برنامه نویس داریم تو کشور ولی یه پروژه ی بزرگ اوپن سورس ایرانی نیست. یدونه دانلود منیجر پرسپولیس هست که اونم اقای امیر صمیمی تکی داره توسعش میده انصافا هم خیلی خوبه به نظرم شما توجهتون رو به این نکته معطوف کنید که چرا کار گروهی ضعیفه؟ چرا پروژه های اوپن سورس بزرگ با وجود این همه برنامه نویس در کشور وجود نداره به دنبال راه کار هایی برای حل این مشکل باشید، اینکه چیکار کنیم، از چه روشی استفاده کنیم تا ما هم مثل برنامه نویسان خارجی پروژه های بزرگ رو جلو ببریم فک کنم مشکل پروژه های ما اینه که داکیومنتشن خوبی ندارن، بیشتر از اینکه به این فکر کنیم که چیکار کنیم که پروژه ما برای توسعه دهندگان دیگه قابل فهم و اسون تر باشه، به این فک میکنیم که فقط یه سورس بنویسیم و کار کار بر نهایی رو راحت کنیم

Mehdi Sadeghi   ۲۹ فروردین ۱۳۹۶   پاسخ 3261038610

یه جمله تو اینترنت رایجه. سوال: می‌دونی چه کسانی RFC ها رو می‌نویسند؟ جواب: کسانی که RFCها رو می‌نویسند! یه جمله هم تو وب (یا تلگرام) فارسی دست به دست می‌شه: «بجای لعنت بر تاریکی شمعی روشن کن!» پیشنهاد من اینه که اصلا به موضوعی که در بالا گفتی فکر نکنی و بجاش خودت یک گروه موفق بسازی. اول خودت بعد با رفقا یا دوستان نزدیکت. کلی چیز یاد می‌گیری. بهت اطمینان می‌دم ما ایرانی‌ها هیچ مانع ژنتیکی در برابر کار گروهی نداریم!

من دوباره ب این کامنت سر میزنم   ۲۹ فروردین ۱۳۹۶   پاسخ 3262043822

درسته، این جمله خیلی خوبه “جای لعنت بر تاریکی شمعی روشن کن!” اول از همه باید خودم دست ب کار بشم …

Javad Bahoosh   ۰۴ اردیبهشت ۱۳۹۶   پاسخ 3270970818

ممنون و خسته‌نباشی! من بعد از این مدت، حتی به ذهنم نرسیده بود که این باگ باشه. فکر می‌کردم درستش همینه.

Mehdi Sadeghi   ۰۴ اردیبهشت ۱۳۹۶   پاسخ 3270992678

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

mori   ۱۱ اردیبهشت ۱۳۹۶   پاسخ 3282858855

سلام. من یه باگ گزارش دادم ولی هیچ تجربه ی قبلی ای در این زمینه ندارم اگر راهی برای گزارش بهتر یا حتی رفع باگ، مدنظرتون هست خوشحال میشم راهنمایی بفرمایید https://bugs.launchpad.net/…

Mehdi Sadeghi   ۱۱ اردیبهشت ۱۳۹۶   پاسخ 3282888599

باید سورس کد رو بخونی و بفهمی که اون چیزی که نمایش داده می‌شه توسط کدام برنامه تولید شده. معمولا با نگاه به پیش‌نیازهای یک برنامه می‌شه اینها رو فهمید. مثلا در مورد این باگی که من در بالا شرح دادم من اول مثل تو مشکلی دیدم، در اون مثال مشکل در gedit و zim بود. زود فهمیدم که مشکل از این برنامه‌ها نیست و GTK باید تعمیر بشه. حالا این برنامه که گذاشتی هم اول باید پیدا کنی که از چه ابزاری برای تولید قطعات گرافیکی‌اش استفاده کرده. بعد مشکل ساده‌تر می‌شه. شاید اون ابزار اجازه راست به چپ کردن بده و مشکل راحت حل بشه. نگاه کردن به سورس کد از همه چی مهمتره. یاد بگیر سورس رو بخونی. کم کم راه میفتی!

mori   ۱۱ اردیبهشت ۱۳۹۶   پاسخ 3282955250

ممنون از اینکه سریع جواب دادی و تشکر از راهنماییت حتی متن پیام شما توی جیمیل بر عکس اومد (منظور من هم همین باگ هست) https://uploads.disquscdn.c…

Mehdi Sadeghi   ۱۲ اردیبهشت ۱۳۹۶   پاسخ 3284797463

خوب خیلی از این موارد در کنترل ما نیست. مثلا این ایمیل که اشاره کردی دیسکاس ارسال می‌کنه و کافیه کد HTML یا CSS رو کمی تغییر بده که پیام درست نمایش داده بشه (چون ایمیل یا متن معمولیه یا HTML). یعنی مانع فنی وجود نداره ولی اونها فقط چون بیشتر کابرانشون چپ به راست می‌نویسند به مشکلات راست به چپ اهمیتی نمی‌دن. ولی در مورد سایر ابزارها باید ببینی تکنولوژی نمایش متن چیه.