StarCalendar 1.4.0

2009/12/05
سلام
بالأخره بعد از ماه‌ها فاصله، تصمیم گرفتم که StarCalendar 1.4.0 رو منتشر کنم!:D

واقعیت اینه که در این چند ماه سرعت توسعهٔ برنامه نسبت به قبل خیلی کمتر شده بود! از طرفی تغییراتی که ایجاد می‌کردم معمولاً یا رفع باگ بود یا تغییرات خیلی کلی نبودن. به همین دلیل انتشار این ورژن رو این‌قدر به تاخیر انداختم! البته نقشه‌های زیادی برای این برنامه کشیده بودم و کشیدم و می‌خوام تغییرات خیلی کلی و مهمی ایجاد کنم، اما اکثرشون رو هنوز موفق نشدم انجام بدم. با این حال مهمترین تغییراتی (که به ذهنم میاد) در این نسخه نسبت که ورژن قبلی یعنی 1.3.6 دادم از این قبیل هست:

۱- تغییرات کلی در نحوهٔ sizing پنجرهٔ اصلی
حتماً می‌دونید که قبلاً برای تغییر ارتفاع پنجرهٔ اصلی باید به تنظیمات برنامه می‌رفتید و ارتفاع پنجره رو بصورت عدد (بر حسب پیسکل) وارد می‌کردید. و از طریق گزینهٔ «تغییر اندازه» یا Resize از منوی اصلی، فقط می‌شد عرض پنجره رو تغییر داد. از طرفی حل این مشکل اصلاً ساده نبود چون در حین استفاده از برنامه و تغییر روز سلکت شده (همون سلولی که دورش خط کشیده شده) احتمالاً متن پایینی پنجره (مربوط به مناسبت‌ها و روزهای دلخواه و…) تغییر می‌کرد و بنابراین ارتفاع پنجره تغییر می‌کرد.از طرفی من نمی‌خواستم که اندازهٔ پنجره بیخودی بزرگ بشه (و یک ارتفاع ثابتی برای اون باکس پایینی اختصاص داده بشه) و نمی‌خواستم که برای دیدن کل متن هم نیاز به اسکرول یا تغییر دستی ارتفاع پنجره داشته باشه. خلاصه بعد از کلی فکر کردن و ور رفتن با PyGTK یک راه‌حل نسبتاً قابل‌قبول پیدا کردم و در این ورژن شما شاهد اون خواهید بود. اگه به گوشهٔ راست پایین پنجره نکته کنید، کنار اون آیکون status bar (که برای تغییر اندازهٔ پنجره به کار میره) دو تا آیکون جدید هم اضافه شده. سمت راستی یک فلش رو به پایی هست که اگه موس رو روش ببرید نوشته docked lower box (که من ترجمهٔ‌ خوبی براش پیدا نکردم) اگه اون دکمه رو بزنید (و به حالت فعال دربیاد)، جعبهٔ پایینی (که متن مناسبت‌ها و روزهای دلخواه و… رو توش نوشته) تبدیل به یک پنجرهٔ مجزا میشه!! بله یک پنجرهٔ جدا از پنجرهٔ اصلی برنامه. این پنجره کاملاً تابع و مطیع پنجرهٔ اصلی هست! یعنی با جابجا کردن پنجرهٔ اصلی (یا تغییر ارتفاعش)، این پنجره هم جابجا میشه و با تغییر عرض پنجرهٔ اصلی، این پنجره هم عرضش (و در نتیجه ارتفاعش) تغییر می‌کنه، انگار که کاملاً بهش چسبیده! اگه اون دکمه رو دوباره فشار بدید دوباره به همون حالت قبلی برمی‌گرده که یه expander هست که می‌تونید اون رو ببینید یا باز کنید.
سمت چپ اون دکمه، یه دکمهٔ ضامن‌دار دیگه (toggle button) هست که آیکونش یک فلش رو به بالا هست. اگه موس رو روش ببرید نوشته «ثابت ماندن ارتفاع تقویم» که معناش کاملا مشخصه. اگه اون دکمه در حالت فعال قرار بگیره، ارتفاع ویدجت اصلی تقویم (که روزها و هفته‌ها توش دیده میشه) ثابت می‌مونه و با تغییر ارتفاع پنجره، تغییر نمی‌کنه. و بالعکس یعنی اگه این دکمه در حالت غیرفعال باشه، با تغییر ارتفاع پنجره، ارتفاع ویدجت اصلی تقویم تغییر می‌کنه.
با این دو دکمه خودتون باید ور برید تا منظورم رو خوب متوجه بشید. شما با این دو آپشن (گزینه) می‌تونید رفتار sizing پنجره رو مطابق سلیقهٔ خودتون تنظیم کنید. که این دو گزینه با هم مناسبت دارن، یعنی منطقی این هست که هر دو فعال یا هر دو غیرفعال باشن.

۲- کنترل‌کننده‌های پنجره
همون دکمه‌های Close و Minimize و Maximize که گوشهٔ بیشتر پنجره‌ها (توی همهٔ محیطهای دسکتاپ در همهٔ سیستم‌عامل‌ها) هست. یعنی بجای اینکه Metacity یا KWin این دکمه‌ها رو برای پنجره بسازن، من خودم اون‌ها رو ساختم! البته دکمهٔ Maximize هنوز تعریف نشده. ولی دکمهٔ Close هست و دکمهٔ Minimize هم اگه پنجره در حالت Skip Taskbar نباشه هست (گزینه‌ای به اسم «پنجره در نواروظیفه» در ترجیحات). حالا چرا اینکارو کردم؟ بخاطر اینکه نیاز داشتم! یعنی اینطوری می‌تونستم بهتر پنجرهٔ برنامه رو مدیریت کنم. آیکون‌هاش هم شبیه MacOSX هست (در واقع از آیکون‌های تم T-ish-Ubuntulooks استفاده کردم) چون خودم خیلی از این مدل خوشم میاد!:D البته دیکتاتوری نیست چون برنامه آزاد هست و شما خودتون می‌تونید تغییرش بدید. مثلاً می‌تونید فایل آیکون‌هاش رو با آیکون‌های دیگه‌ای جایگزین کنید. دوست داشتم خود برنامه بتونه این آیکون‌ها رو بسته به تم (و حتی window manager) تشخیص بده ولی فعلاً راه درست و حسابی براش پیدا نکردم.
در ضمن اگه می‌خواید پنجرهٔ اصلی، کوچیک باقی بمونه (و شبیه ویدجت‌های دسکتاپ بشه) می‌تونید کنترل‌کننده‌های پنجره رو غیرفعال کنید: ترجیحات ⬅ عمومی ⬅ نمایش کنترل‌کننده‌های پنجره.

۳- منوی راست کلیک روی label های سال و ماه
کلمهٔ label چون ترجمهٔ رایج و شناخته‌شده‌ای نداره از همین اصطلاح label استفاده می‌کنم.
توی پنجرهٔ اصلی، زیر نوارابزار (toolbar) تعدادی label هست که سال و ماه رو بر حسب تقویم‌های فعال (جلالی، میلادی، قمری) نشون میده. اگه روی یکی از این label ها راست‌کلیک کنید، یک منو باز میشه که می تونید سال/ماه رو تغییر بدید. این امکان مخصوصاً در مورد تقویم‌های غیرپیش‌فرض مفید هست چون دکمه‌هایی برای تغییر مستقیم اون‌ها توی پنجره تعبیه نشده (که با این قابلیت نیازی هم نیست و پنجره هم ساده‌تر و جم‌وجورتر میشه. حتی می‌تونید دکمه‌های مربوط که تقویم پیش‌فرض که احتمالاً جلالی هست رو حذف کنید). مثلاً اگه تقویم‌های فعال شما «جلالی، میلادی و قمری» با همین ترتیب باشن، شما می‌تونید مستقیماً سال یا ماه میلادی و قمری رو تغییر بدید، حتی خود جلالی (که بطور پیش‌فرض دکمه‌هایی برای تغییر سال/ماه براش وجود داره). با این کار دیگه کمتر نیاز پیدا می‌کنید تا از دیالوگ «انتخاب تاریخ» استفاده کنید. و راحت‌تر می‌تونید زمان رو مرور کنید!

۴- پشتیبانی از پلاگین‌های واقعی!
توی ورژن قبلی، اسم افزونه یا Plugin توی ترجیحات برنامه اومده بود، اما این اسم فقط یک مقدمه بود برای پیاده‌سازی پلاگین‌های واقعی! یعنی اون موقع، اون پلاگین‌ها پلاگین نبودن چون قابلی تفکیک از خود برنامه نبودن. و نمیشد پلاگین‌هایی رو به برنامه اضافه کرد. اما این قابلیت در این ورژن کاملاً فرآهم شده و میشه گفت که واقعاً پشتیبانی از پلاگین به برنامه اضافه شده. پلاگین‌های پیش‌فرض برنامه توی پوشهٔ

/usr/share/starcal/plugins/

قرار دارن. غیر از این پوشه، پوشهٔ

~/.starcal/plugins/

هم برای لود شدن پلاگین‌ها اسکن میشه. شما می‌تونید پلاگین‌هایی (با فرمت‌هایی خاص) رو به یکی از این دو پوشه کپی کنید تا در اجرای بعدی برنامه فعال بشه. از چند فرمت/نوع برای پلاگین‌ها پشتیبانی میشه. یکیش فرمت درونی (builtin) خود برنامه هست که ازش برای ذخیره‌سازی منابست‌های جلالی/میلادی/قمری و همینطور اوقات شرعی (بصورت دیتابیس) استفاده کردم که می‌تونید فایل‌هاشون رو نگاه کنید (اگه می‌خواید از فرمتش سردربیارید و خودتون برای برنامه پلاگین بنویسید و ما رو خوشحال کنید!). از جمله تعطیلات که توی این ورژن، تعطیلات رسمی ایران بصورت یه پلاگین تعریف شده!! این پلاگین کارش اینه که رنگ شماره‌ٔ روزهای تعطیل رو تغییر میده!! (نه اینکه یک متن رو در پایین پنجره نمایش بده!) پس ممکنه در آینده پلاگین‌هایی برای تعطیلات رسمی سایر کشورها هم نوشته بشه. گرچه همین الآن هم از چنین پلاگین‌هایی پشتیبانی میشه فقط وقت نکردم این کارو انجام بدم (برای تعطیلات سایر کشورها، پلاگین بنویسم)
غیر از اینها، از پلاگین‌ها external هم پشتیبانی میشه. یعنی پلاگین‌هایی که خودشون یه برنامه به زبان پایتون هستن (یا با C و ++C نوشته شدن و بصورت ماژول پایتون دراومدن). که البته باید ضوابط در نوشتن این پلاگین‌ها رعایت بشه. هنوز هیچ پلاگینی از این نوع به همراه برنامه قرار نگرفته. ولی دارم روی نوشتن یک پلاگین اوقات شرعی کار می‌کنم که برای هر شهری اوقات شرعی رو خودش حساب کنه!

در ضمن پشتیبانی از فایل‌های ics یا iCalendar هم بصورت پلاگین اضافه شده. این فرمت خیلی مشهور و رایج هست. می تونید فایل‌های ics رو توی یکی از اون دو پوشهٔ پلاگین‌ها کپی کنید تا در اجرای بعدی برنامه، به لیست پلاگین‌ها اضافه بشه)
البته این کار رو خیلی عجله‌ای انجام دادم و پشتیبانی از ics هنوز خیلی ناقص هست که سعی می‌کنم به تدریج کامل‌تر بشه.
فایل‌های ics رو احتمالاً توی اینترنت خیلی زیاد هستن و با جستجو در گوگل می‌تونید پیدا کنید. مثلاً اینجا توی سایت موزیلا، تعطیلات رسمی خیلی کشورها رو با فرمت ics گذاشته (جالب اینکه ایران رو هم داره، هم بصورت فارسی و هم انگلیسی ). اگه یکی از اینا رو دانلود کنید و توی پوشهٔ پلاگین‌های استارکلندر کپی کنید، متن توضیح مربوط به اون روزهای تعطیل (در اون کشور خاص) زیر تقویم نشون داده میشه (البته رنگ شمارهٔ ماه عوض نمیشه چون بصورت یک پلاگین متنی عادی تعریف شده!).
نکتهٔ دیگه اینکه شما نیاز ندارید فایل ics تعطیلات رسمی ایران رو دانلود کنید و به استارکلندر اضافه کنید، چون اون فقط برای همین چند سال اخیر کار می‌کنه، چون ics فقط و فقط از تقویم میلادی پشتیبانی می‌کنه، دی حالی‌که خود استارکلندر بصورت کاملاً هوشمند، مناسبت‌ها رو به تفکیک جلالی/میلادی/قمری برای هر سالی (از سال ۰ تا بی‌نهایت!!) براتون نشون میده!! حتی در سال‌های قبل از رخ دادن یک رویداد تاریخی، متن مناسبتش رو نشون میده!! 😀

۵- ارتباط با سایر برنامه‌های تقویم
اگه Evolution گنوم یا Sunbird موزیلا رو نصب کنید، گزینه‌هایی به منوی راست‌کلیک روز اضافه میشه و می‌تونید اون روز رو مستقیماً در اون برنامه باز کنید. با دبل‌کلیک روی روز هم همین کار با Evolution انجام میشه (البته به شرطی که نصب باشه). می‌خواسم این کار رو با KOrganizer هم انجام بدم (تا دوستان KDE کار هم خوشحال بشن) اما فعلاً راهش رو پیدا نکردم!
و همونطور که عرض کردم این ورژن از استارکلندر از فایل‌های ics بصورت پلاگین پشتیبانی می‌کنه. پس اگه از یکی از اپلیکیشن‌های معروف تقویم استفاده می‌کنید که قابلیت اکسپورت (صدور) به iCalendar یا همون ics رو داره، کافیه ics حاصل رو در پوشهٔ پلاگین‌های استارکلندر

~/.starcal/plugins

کپی کنید تا در اجرای بعدی استارکلندر، فعال بشه.
فرمت ics خیلی معروف هست و اپلیکیشن‌های زیادی ازش استفاده می‌کنن. Sunbird و KOrganizer قابلیت export به ics رو دارن. Evolution هم خودش از فرمت ics برای ذخیره‌سازی استفاده می‌کنه. کافیه به پوشهٔ

~/.evolution/calendar/local

برید و از داخل یکی از زیرپوشه‌هاش فایل calendar.ics رو بردارید.

۶- نمایش زمان/تاریخ در tray (یا Notification Area)
برید به قسمت ترجیحات ⬅ عمومی ⬅ نمایش ساعت رقمی …
بقیه‌ش دیگه مشخصه!

این ساعت دیجیتال (رقمی) از فرمت زمان/تاریخ پشتیبانی می‌کنه. یعنی می‌تونید براش تعیین کنید که چه چیزی رو نشون بده. اگه با دستور date توی خط فرمان آشنا باشید، منظورم رو بهتر می‌فهمید. برای تنظیم فرمتش برید به: ترجیحات ⬅ پیشرفته ⬅ فرمت ساعت رقمی …
البته این این ساعت دیجیتال توی KDE دیده نمی‌شه. هنوز نتونستم علتش رو پیدا کنم. شاید KDE از آیکون غیرمربعی (که عرضش بیشتر از ارتفاع پنل هست) برای Notification Area پشتیبانی نمی‌کنه.
اگه از افکت‌های دسکتاپ استفاده می‌کنید (مثل compiz یا افکت‌های خود گنوم و KDE4)، و به عبارت دقیق‌تر اگه گرافیک شما composited باشه، این ساعت دیجیتال، شفافیت (transparency) نداشته و یک زمینهٔ سفید خواهد داشت (این اشکال رو سعی می‌کنم در آینده حل کنم). رنگ متنش هم که در هر حال سیاه هست.
اگه می‌خواید بگید رنگ زمینه و رنگ متنش با تم دسکتاپ شما هماهنگ نیست، خب حق دارید! سعی می‌کنم در آینده کاری کنم که خودش رنگ زمینه و متن پنل رو تشخیص بده تا فضای رنگی دسکتاپ شما هماهنگ بشه… یا حداقل به عنوان یک گزینه در تنظیمات قرارش بدم.

۷- پشتیبانی از Drag و Drop
ترجمه‌ش میشه «کشیدن و رها کردن» ولی ما همون می‌گیم Drag و Drop
یک سلول از ویدجت تقویم (که نماد یک روز هست و شمارهٔ ماه‌‌ها توش نوشته شده) رو می‌تونید بگیرید و بکشید و بندازید توی یه ویدجت editable text یعنی مثلاً یه ادیتور یا واژه پرداز یا هر جایی که بتونید چیزی رو تایپ کنید یا متنی رو paste کنید. با Drag و Drop اون سلول، تاریخ اون روز بصورت میلادی (و ارقام انگلیسی) paste میشه. چرا میلادی و انگلیسی؟ چون هدفم این بود که بتونه با سایر اپلیکیشن‌ها ارتباط برقرار کنه، مثلاً می‌تونید به داخل تقویم گنوم drop کنید، و بالعکس (از تقویم گنوم drag و به استارکلندر drop کنید) تا به همون روز سوییچ کنه.
وگرنه قبلاً هم قابلیت «کپی تاریخ» وجود داشت که بر حسب تقویم پیش‌فرض هست (احتمالاً جلالی برای شما) و از ارقام فارسی هم استفاده می‌کنه. اگه در حال تایپ یک نوشته، می‌خواید تاریخ جلالی رو (با ارقام فارسی) درج کنید، کافیه از tray گزینهٔ «کپی تاریخ» رو بزنید و توی متن خودتون paste کنید.
در ضمن قابلیت «کپی زمان» هم به این ورژن اضافه شده. دو گزینهٔ «کپی تاریخ» و «کپی زمان» به منوی راست کلیک آیکون tray اضافه شده. (گزینهٔ «کپی تاریخ» توی راست کلیک هر روز هم که قبلاً بود)

۸- انحنای گوشه‌های مکان‌نما
گِرد شدن گوشه‌های مکان نما، شاید اولین تغییری باشه که در نگاه اول، توجه رو جلب می‌کنه!
فکر می‌کنم این باعث میشه کمی به زیبایی تقویم اضافه بشه. گرچه برای زیبا شدن تقویم باید تغییرات مهم‌تری رو در آینده انجام بدم (مثل پشتیبانی از تم‌های مختلف و تصویر زمینهٔ سلول و طیف رنگی و شفافیت واقعی و…)

۹- تغییر وبسایت یا home page پروژه به سورس‌فورج (starcal.sourceforge.net)
با تعطیل شدن ospdev.net (که خیلی من رو ناراحت کرد) مجبور شدم این کارو انجام بدم. البته sourceforge هم خیلی خوبه (و معروف‌تر و معتبرتره) دوست داشتم پروژه‌هام توی هر دوی این هاست‌ها موجود باشه، ولی هاست اصلی برنامه همون ospdev خودمون باشه چون ساده‌تر و سریع‌تر بود و من باهاش راحت‌تر بودم و ضمناً ایرانی هم بود.
متأسفانه آقای بهرام سیادی تنها موندن و پشتیبانی مالی از ایشون نشد و مجبور شدن سایت رو تعطیل کنن! کاش کمکی از دست من برمی‌اومد!
همین‌جا از آقای سیادتی بسیار تشکر می‌کنم که توی این دو سال این همه وقت گذاشتن و زحمت کشیدن و ۷۰۰۰ دلار هم هزینه کردن!

۱۰- طبق معمول، رفع تعدادی باگ (از جمله چند باگ خیلی مهم) و مقداری بهینه‌سازی و تمیزکاری کد، و تغییرات دیگه‌ای که بیشترشون یادم نیست…

در این ورژن هم مثل ورژن‌های قبلی، پکیج deb و rpm ساختم تا کاربران اکثر توزیع‌های گنو/لینوکس به راحتی بتونن نصب کنن. فقط از کاربران Archlinux و Chakra معذرت می‌خوام چون آرچ ندارم و فعلاً هم بلد نیستم پکیج آرچ بسازم. ولی این دوستان هم می‌تونن پکیج rpm یا deb رو extract کنن و بصورت دستی نصب و اجرا کنن.
بعضی‌ها می‌پرسن «سورس برنامه رو از کجا بگیریم؟ چرا پکیج سورس قرار ندادی؟».
جواب اینه که این برنامه با پایتون نوشته شده و سورس توی همهٔ پکیج‌ها (rpm و deb) هست. پس دیگه دلیلی وجود نداشت که پکیج جدایی مخصوص سورس آپلود کنم!

حتماً می‌دونید که این برنامه تحت مجوز GNU GPL هست، البته قسمت‌هایی‌ش هم GNU LGPL هست.

نکتهٔ آخر اینکه اگه می‌خواهید خبر انتشار این ورژن رو جایی منتشر کنید، بهتره به‌جای کپی کردن این متن، به همین صفحه (در وبلاگ خودم) لینک بدید، چون ممکنه این متن رو در آینده تغییر بدم و اصلاح یا تکمیل کنم. این یک خواهش هست.

موفق باشید

Advertisements