کتابخانه تقویمی جلالی
یادداشت اشکان قاسمی در وبسایت سیاره لینوکس فارسی درباره پروژه کتابخانه تقویمی جلالی که بر روی آن کار کرده بود.
تاریخچهی ایمپلمنتیشنهای مختلف تقویم جلالی
تا به امروز پروژههای بسیاری در راستای ایجاد یک کتابخانه جهت انجام محاسبات مربوط به تقویم جلالی استارت شدن. مثل این از خروجیهای فارسی-وب یا این یکی از خروجیهای طرح ملی نرم افزارهای آزاد — که البته ظاهرا دیگه در دسترس نیست و پروژههای مشابه دیگه. چیزی که همیشه کم بود یک کتابخانهی استاندارد با ای-پی-آی شبیه به پوزیکس و ابزارهاش برای محاسبهی تقویم بود. بعلاوه ایدهی تبدیل تاریخ میلادی به تاریج خورشیدی از اساسا یک ایدهی اشتباهه. کلیت ماجرا تا به این لحظه از این قرار بود که هر برنامه نویسی که با موضوع تقویم به نوعی درگیر میشد مجبور بود یا خودش از ابتدا یک سیستمی رو پیاده سازی کنه (اختراع مجدد چرخ) و یا از ابزارهایی مثل ابزارهای پروژهی آی-سی-یو و این جور چیزها استفاده کنه که میتونه برای یک پروژهی کوچک نوعی خودکشی به حساب بیاد. بعلاوه در هر پیاده سازی جدید هم همواره به هر حال مسئلهی «این کد متعلق به چه کسی است؟» پیش میآمد. تمامی این مسائل باعث شد که پیش خودم فکر کنم که دیگه ادامهی داستان مضحک خیلی هم مضحک نیست و چه بهتر یکبار برای همیشه با این مشکل با یک راه حل درست و حسابی مواجه شد
کتابخانهی تقویمی جلالی
چند سال پیش یک ورژن از یک لایبرری تقویم جلالی رو منتشر کرده بودم که البته ماهیتا فرق خیلی مهمی هم با بقیهی پیاده سازیها نداشت. بعدا مشخص شد که اساسا باگی هم هست. تنها چیز بدرد بخور اون پکیج ابزار ترمینالی کلندرش بود که تقویم جلالی رو توی ترمینال بهتون نشون میداد. حالا اما داستان کمی متفاوته. در این ورژن جدید ما با تبدیل تاریخ مواجه نیستیم. لازم نیست شما برای اینکه بفهمید امروز چه روزی است یا پنج شنبهی هفتهی آینده چه روزی خواهد بود بدونید که امروز چه روزی در تقویم میلادی است و غیره (همونطور که بالاتر هم اشاره کردم ایدهی تبدیل تقویم میلادی به خورشیدی از اساس یک ایدهی اشتباهه). الگوریتمهای محاسباتی مربوط به این تقویم با توجه به این تعاریف از تقویم خورشیدی ایرانی یا تقویم جلالی نوشته شده و حتی یک خط یا ایده از کدهای پروژههای دیگر در این پروژه استفاده نشده. البته این مسئله به خودی خود جای خوشحالی نداره، ما به عنوان عضوی از جامعه و عضوی از کمونیته خوشحال میشیم از ایدههای دیگران استفاده کنیم ـ این روشی است که علم به وسیلهی آن کار میکند، با این حال با توجه به بحثها و جنجالهای بی موردی که همواره بر سر این مسئله ایجاد شده چارهی دیگری باقی نمونده جز مطرح شدن یک ایدهی نو. کتابخانهی تقویمی جلالی یک ست از فانکشنها و دیتا-تایپهای بسیار شبیه به ساب-ست مربوط به تاریخ و زمان کتابخانههای استاندارد زبان سی در اختیار شما قرار میده. در واقع ابزارهایی کاری که ممکنه شما قبلا بارها ازشون استفاده کرده باشید. به عنوان مثال فانکشنهای زیر:
jmktime(), jlocaltime(), jlocaltime_r(), jgmtime(), jgmtime_r(), jasctime(), jasctime_r(), jctime(), jctime_r(), jstrftime(), jstrptime().
توضیحات کامل در مورد نحوهی کار این فانکشنها و تعاریف مربوط به دیتا-تایپ هاشون به صورت کامل در مستندات وجود دارن که میتونین ازشون استفاده کنید. بعلاوه همراه این پکیج دو تا ابزار ترمینالی کوچیک وجود داره. یکی ابزار کلندر که در ورژن قبلی هم وجود داشت برای نمایش تقویمها و دیگری ابزار دیت که درست مثل ابزار دیت استاندارد یونیکس کار میکنه. ورژن جدیدتر این کتابخانه به زودی روی رپوزیتوریهای دبین، اوبونتو و جنتو قابل دسترسی خواهد بود. چنانچه مایلید این کتابخانه رو به توزیع محبوب خودتون پورت کنید با من تماس بگیرید.