وبلاگ سعید رسولی

بخور، بخواب، کد بزن

بخور، بخواب، کد بزن

گنو/لینوکس، پایتون، زندگی

آخرین مطالب
مطالب پربحث‌تر

این متن The Zen of Python هست که با import this به شما نشون داده میشه و فلسفه و شعار و خط مشی کلی پایتون رو نشون میده.

نمی‌دونم ترجمهٔ خوبی از این متن شده یا نه، برای همین خودم دوباره ترجمه کردم با عنوان «سرلوحهٔ پایتون»

من این متن رو (به انگلیسی) چاپ کردم و دیوار اتاقم چسبوندم


The Zen of Python, by Tim Peters


Beautiful is better than ugly.

Explicit is better than implicit.

Simple is better than complex.

Complex is better than complicated.

Flat is better than nested.

Sparse is better than dense.

Readability counts.

Special cases aren't special enough to break the rules.

Although practicality beats purity.

Errors should never pass silently.

Unless explicitly silenced.

In the face of ambiguity, refuse the temptation to guess.

There should be one-- and preferably only one --obvious way to do it.

Although that way may not be obvious at first unless you're Dutch.

Now is better than never.

Although never is often better than *right* now.

If the implementation is hard to explain, it's a bad idea.

If the implementation is easy to explain, it may be a good idea.

Namespaces are one honking great idea -- let's do more of those!

سرلوحهٔ پایتون، نوشتهٔ Tim Peters


زیبا بهتر از زشت است.

صریح بهتر از ضمنی است.

ساده بهتر از پیچیده است.

پیچیده بهتر از بغرنج (غیر قابل فهم) است.

هموار بهتر از تودرتو است.

کم‌پشت بهتر از متراکم است.

خوانایی اهمیت دارد.

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

گرچه عملی بودن بر ناب بودن غلبه می‌کند.

ارورها هرگز نباید بطور پنهان رد شوند.

مگر آنکه صریحا (توسط کاربر) پنهان شده باشند.

در برخورد با ابهام، وسوسهٔ حدس زدن را رد کنید.

برای هر کار باید یک -- و ترجیحاً فقط یک -- راه واضح وجود داشته باشد.

گرچه آن راه ممکن است در ابتدا واضح نباشد، مگر اینکه شما هلندی باشید.

«الآن» بهتر از «هرگز» است.

گرچه «هرگز» معمولاً بهتر از «همین الآن» است.

اگر پیاده‌سازی یک ایده، توضیح دادنش سخت است، ایدهٔ بدی است.

اگر پیاده‌سازی یک ایده، توضیح دادنش آسان است، ممکن است ایدهٔ خوبی باشد.

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

۱ نظر موافقین ۰ مخالفین ۰ ۰۴ ارديبهشت ۹۴ ، ۱۷:۲۸
سعید رسولی

سلام و عید نوروز مبارک :)


این فایل‌های سمیناری هست که در ۲۵ اسفند ۱۳۹۳ در لاگ اصفهان در مورد «مجوزهای آزاد نرم‌افزاری» دادم:

Download PDF

Download ODP


و این هم متن کامل دیالوگی که در بهمن سال ۱۳۸۷ با ریچارد استالمن داشتم و سوال‌‌هایی که پرسیدم و جواب‌هایی که داد:

me-rms-emails.pdf

(اون موقع انگلیسی‌م ضعیف بود!)


اون ترجمه‌ای که از متن ویدئوی اعلامیه انتشار GPLv3 کرده بودم نیاز به ویرایش داره، و بعدا می‌ذارم.


۲ نظر موافقین ۱ مخالفین ۰ ۲۹ اسفند ۹۳ ، ۱۹:۵۲
سعید رسولی

استارکلندر 2.4.1 منتشر شد

starcal2_2.4.1-1_all.deb

starcal2-2.4.1-1.noarch-openSUSE.rpm

Github Release


در این نسخه چند باگ برطرف شد از جمله:

ارور در کد منطقهٔ زمانی که در شرایط خاصی پیش میومد

عدم ذخیره کردن تنظیمات پنجرهٔ «شخصی‌سازی» که در شرایط خیلی خاصی پیش میومد و فقط توسط یک کاربر گزارش شده بود

توی پکیج دبیان/اوبونتو، مقدار Installed Size اشتباه بود (هزار برابر نشون میداد)

توی اسکریپت install-suse هم اروری مربوط به فایل desktop داده میشه که رفع شد

و یکی دو باگ جزئی دیگه که شاید کسی متوجهش نشده باشه

۹ نظر موافقین ۱ مخالفین ۰ ۱۶ بهمن ۹۳ ، ۲۳:۱۴
سعید رسولی

حدود ۸ سال پیش اولین شعرم رو نوشتم که شاید نمی‌شد اسمش رو شعر گذاشت

حال و هوای امروز اهواز من رو دوباره یاد اون شعر انداخت و چون شعر ضعیفی بود تصمیم گرفتم بازنویسی‌ش کنم

که نتیجه‌ش شد این:

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

کویر است و شن و طوفان

شبی تار و بسی سوزان

به سانِ سردی قلبم

کویر است و شب است و غفلتِ یاران

که در چادر پناهی بهرِ خود جویند و می‌دانم که تا پایانِ شب هرگز نپایند

چرا آن خرسِ کوچک* در میان شب نهان است؟

چگونه راهِ خود را بازیابم؟

منم با این زبانِ خشک و عطشان

و چشمانی که شد آماجِ شن‌ها

نه بُگشودن توانم چشم‌ها را

نه با بستن امیدِ راه جُستن

منم با این دهانِ پر ز شن‌ها

که نتوانم به یاران هین بگویم

کویر است و هراس و شکّ و تردید

من این قصّه سرانجامش ندانم

کویر است و شن و طوفان

و این شعری که پایانش ندانم

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

*صورت فلکی خرس کوچک (دب اصغر) که ستارهٔ قطبی جزئی از آن است

۱ نظر موافقین ۱ مخالفین ۰ ۱۰ بهمن ۹۳ ، ۱۸:۰۵
سعید رسولی

این یکی از عجیب‌ترین و خنده‌دارترین ارورهای پایتون هست که تا به حال بهش برخورد کردم:

(البته فقط توی پایتون ۲)

UnboundLocalError: local variable 'IndexError' referenced before assignment


و این کدی هست که اون ارور رو توی پایتون 2.7 تولید می‌کنه:

def func1():
    l = []
    d = {}
    try:
        l[0]
    except IndexError:
        print 'list item not found'
    try:
        d['a'][0]
    except KeyError, IndexError:
        print 'dict item not found'
func1()


این هم متن کامل ارور:

Traceback (most recent call last):
  File "funny-python-error.py", line 18, in <module>
    func1()
  File "funny-python-error.py", line 10, in func1
    except IndexError:
UnboundLocalError: local variable 'IndexError' referenced before assignment



اما چه چیزی باعث ایجاد این ارور شده؟ این خط:

    except KeyError, IndexError:

که از لحاظ سینتکسی درسته(توی پایتون ۲)، ولی از لحاظ منطقی کاملاً اشتباهه. و باید تغییر کنه به:

    except (KeyError, IndexError):


چون بدون پرانتزها (که tuple ایجاد می‌کنه)، علامت ویرگول به معنای as هست(که as توی 2.6 اضافه شده)، پس این دو خط معادل هم هستن:

    except KeyError, IndexError:
    except KeyError as IndexError:


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


مثلاً هستن برنامه‌نویس‌هایی که متغیرهایی به اسم id یا type یا str تعریف می‌کنن که خیلی کار بدیه و باعث ایجاد مشکلات غیرمنتظره میشه. باید حداقل یه underline اول اسم این متغیرها بذاریم که با اشیاء و توابع درونی پایتون قاتی نشه.


نکتهٔ بعدی اینکه سینتکس

except KeyError as e:

توی پایتون 2.6 اضافه شده، ولی اون سینتکس قبلی

except KeyError, e:

بخاطر سازگاری، توی 2.6 و 2.7 هم پشتیبانی میشه. ولی بخاطر ابهامی که داره (که اینجور مشکلات هم نتیجهٔ این ابهام هست) توی پایتون ۳ پشتیبانی نمیشه.


یعنی توی پایتون 2.6 و 2.7 و 3 می‌تونید این‌ها رو بنویسید:

except KeyError as e:
except (KeyError, IndexError):
except (KeyError, IndexError) as e:


این رو توی پایتون 2 می‌تونید بنویسید ولی توی پایتون 3 نمی‌تونید بنویسید:

except KeyError, e:

در نتیجه اون ارور عجیب و غریب احتمالاً توی پایتون ۳ دیده نمیشه (مگه به دلیل دیگه‌ای)


۴ نظر موافقین ۰ مخالفین ۰ ۱۵ دی ۹۳ ، ۱۶:۰۷
سعید رسولی

انتشار استارکلندر 2.4.0


دانلود:

starcal-2.4.0.tar.gz

starcal2-2.4.0-1.noarch-openSUSE.rpm

starcal2_2.4.0-1_all.deb


Github Release


تغییرات نسبت به نسخهٔ 2.3.4


۱- کاهش زمان لازم برای شروع شدن برنامه

اصطلاحاً Laziness (تنبلی) برنامه به حداکثر خودش رسیده. اون ماژول‌ها و کدهایی که برای شروع کار برنامه لازم نیستن، در شروع برنامه، لود نمیشن و هر موقع که بهشون نیاز شد لود میشن.

میزان کاهش این مدت زمان، کاملاً بستگی به تنظیمات شما، تعداد رویدادها و ... داره. ممکنه بین ۲۰ تا ۶۰ درصد کاهش پیدا کنه.

امیدوارم کاربرانی که از زمان اجرای برنامه شکایت می‌کردن راضی شده باشن :)


۲- کاهش زمان باز شدن پنجرهٔ مدیریت رویدادها برای اولین بار

در پنجرهٔ مدیریت رویدادها، درخت رویدادها بطور کامل نمایش داده میشد که اگه تعداد رویدادهای شما زیاد بود، تشکیل این درخت در رابط گرافیکی، که در اولین باز کردن «این پنجره» انجام میشد، زمان زیادی طول می‌کشید. ضمن اینکه RAM زیادی هم اشغال می‌کرد.

در این ورژن، رویدادهای داخل یک گروه غیرفعال، در درخت لود نمیشه و نمایش داده نمیشه، مگه اینکه اون گروه رو فعال کنید.

چون فرض میشه کاربر معمولاً نیازی به ویرایش محتویات یک گروه غیرفعال نداره. اگر هم داره، می‌تونه اون رو فعال و دوباره غیرفعال کنه. با غیرفعال کردن گروه، محتویاتش در درخت، ناپدید *نمیشه*. چون هدف اصلی، کاهش زمان اولین باز شدن پنجره بود.


۳- نماد وضعیت

اصطلاح انگلیسی Tray Icon که ترجمهٔ خوبی به فارسی نداشت، به اصطلاح کلی‌تر و دقیق‌تر Status Icon تغییر کرد که ترجمه میشه به «نماد وضعیت»

یعنی دیگه کلمهٔ Tray در هیچ‌جای برنامه (نه رابط گرافیکی، نه کد) دیده نمیشه.

همینطور مسیر فایل‌های svg آیکون‌ها تغییر کرده و از پوشهٔ pixmaps به پوشهٔ مجزای status-icons جابجا شدن.

به همین خاطر، «نماد وضعیت» به حالت پیش‌فرض برمی‌گرده و اگه چیز دیگه‌ای (از بین آیکون‌های svg خود برنامه) گذاشته بودید، باید دوباره تغییر بدید.


۴- کپی یک رخداد (Occurence) از یک رویداد تکرارشونده

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

هنوز این قابلیت در برنامه وجود نداره که برای هر رخداد/نمونه از یک رویداد تکرارشونده، بشه یادداشت یا متن مجزا اضافه کرد یا حتی یک Occurence رو جدا (exclude) کرد از رویداد اصلی. ولی با این قابلیت کپی رخداد/نمونه که اضافه شده، فعلاً تا حدی میشه این‌گونه نیازها رو برآورده کرد.


۵- رفع مشکل پخش صدای اذان در افزونهٔ اوقات شرعی

در نسخه‌های قبل بخاطر اینکه برای زمان‌بندی پخش فایل صوتی، از ماژول gobject و تابع timeout_add استفاده می‌شد، اگه در حال اجرای استارکل، کامپیوترتون رو suspend می‌کردید، زمان پخش صوت با مشکل مواجه میشد.

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


۶- راست‌به‌چپ و مختصات منوها

از اولین نسخه‌های برنامه تا حالا، با راست‌به‌چپ کم‌وبیش مشکل داشتم(که به تدریج این مشکلات کمتر شد)، شاید کاربران مشکل چندانی مشاهده نمی‌کردن، ولی مثلاً مختصات باز شدن menu ها مشکل داشته چون به gtk و سیستم‌عامل باید مختصات مطلق menu از گوشهٔ چپ و بالا، داده بشه، در حالیکه در حالت فارسی و راست‌به‌چپ، menu باید سمت راست جایی که کاربر کلیک می‌کنه باز بشه و محاسبهٔ عرض منو قبل از باز شدنش کار خیلی مشکلی بود

در این نسخه، مختصات منوها کلاً بهبود پیدا کرده، مخصوصاً برای فارسی.


۷- تغییر صفحهٔ خانگی برنامه به گیت‌هاب

مدت‌ها بود آخرین کدهای برنامه روی github بود، ولی بخاطر تاریخچه و عمومیت سورس‌فورج، آرشیو انتشارهای برنامه رو توی سورس‌فورج هم می‌گذاشتم.

ولی بالأخره دست از سورس‌فورج برداشتیم و صفحهٔ خانگی پروژه رو تغییر دادیم به:

ilius.github.io/starcal


۸- بروزرسانی ماه‌های قمری و مناسبت‌ها طبق تقویم رسمی ۱۳۹۴

طبق معمول هر سال، مطابق با تقویم رسمی سالانهٔ ایران (که ۳-۴ ماه مونده به نوروز، توسط مؤسسهٔ ژئوفیزیک دانشگاه تهران منتشر میشه)، دیتای مربوط به طول ماه‌های قمری، و همینطور تغییراتی که در مناسبت‌های رسمی کشور داده شده بود، در استارکلندر هم آپدیت و اعمال شد.


۹- تغییر در نیازمندی‌های برنامه و سایر تغییرات

نیازمندی به پکیج pytz کلاً برداشته شد و دیگه از pytz استفاده نمی‌کنیم

این نصب برنامه رو راحت‌تر و سریع‌تر می‌کنه، چون این پکیج، دیتای مناطق زمانی رو در خودش داره و حدود ۴۶۰ کیلوبایت حجم داره (حجم کل استارکل کمتر از ۶۰۰ کیلوبایته)

در این نسخه، این کتابخونه با کدی جایگزین شده که از دیتای مناطق زمانی که توی خود گنو/لینوکس هست استفاده می‌کنه.

در نتیجه این نسخه با ویندوز سازگار نخواهد بود

سعی می‌کنم در نسخه‌های بعد، سازگاری با ویندوز رو هم به این کد اضافه کنم


ضمناً، نیازمندی اختیاری به کتابخونه python-dateutil هم اضافه شده که فقط برای صدور به iCalendar یا ics استفاده میشه. و بدون نصب این کتابخونه هم، برنامه اجرا میشه و کار می‌کنه.


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


۱۲ نظر موافقین ۰ مخالفین ۰ ۳۰ آذر ۹۳ ، ۱۷:۲۰
سعید رسولی

تغییرات نسبت به نسخهٔ 2.3.3

اضافه شدن اسکریپت install-ubuntu برای کاربران اوبونتو

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

 

نکات انتشار و لینک‌های دانلود

۱۶ نظر موافقین ۲ مخالفین ۰ ۱۹ خرداد ۹۳ ، ۲۲:۴۷
سعید رسولی

در چند ماه گذشته «سلام دنیا» یکی از نام‌های پیشنهادی من بعنوان نام جدید نشریهٔ نرم‌افزارهای آزاد/متن‌باز انتخاب شد و البته من با یکی دو ما تاخیر فهمیدم


و همینطور در چند ماه گذشته با خوانندهٔ مشهور «دکتر سامی یوسف» (که زادهٔ ایران هست) آشنا شدم، که یکی از آهنگ‌های زیباش هم «سلام علیکم» هست

من متن این آهنگ رو که به انگلیسی و عربی هست، به فارسی ترجمه کردم

در این پست ترجمهٔ فارسی خودم و متن اصلی آهنگ رو می‌ذارم

_________________________


سلام


من روزی را آرزو می‌کنم

که دیگر بدبختی نباشد


دیگر گرسنگی نباشد

نیازی به پناهگاه نباشد

آیا آنقدر نیست که بتوان تقسیم کرد

یا اینکه ما واقعاً اهمیت نمی‌دهیم؟


ما یکی دو روزی اینجا هستیم


بگذار من راه و روشم را نشان دهم

سلام بر شما، سلام بر شما، سلام بر شما

من برای روزی دعا می‌کنم

که عدالت و اتحاد باشد


که ما تفاوت‌هایمان را کنار بگذاریم

چون جنگیدن معنایی ندارد

فقط کمی ایمان

تا اینجا را یک جای بهتر کنیم


ما یکی دو روزی اینجا هستیم


بگذار من راه و روشم را نشان دهم

سلام بر شما، سلام بر شما، سلام بر شما

سلام بر شما، ای اهل سلام، سلام بر شما

سلام بر شما، ای آقای بخشندگان، سلام بر شما

بگذار من راه و روشم را نشان دهم


سلام بر شما، بر شما، بر شما


ترجمه: سعید رسولی


_________________________



Salaam


I dream for a day

When there’ll be

No more misery


When there’s no more hunger

No need for shelter

Isn’t there enough to share

Or is that we just don’t care?


We’re here for a day or two…


Let me show my way…

Salaamu alaik, Salaamu alaik, Salaamu alaikum

I pray for a day

When there’ll be

Justice and unity


Where we put aside our differences

Fighting makes no sense

Just a little faith

To make it a better place


We’re here for a day or two…


Let me show my way…

Salaamu alaik, Salaamu alaik, Salaamu alaikum

Salaamu alaikum Ya ahlas-salaam, Salamu alaikum

Salaamu alaikum Sayyid al-Kiram, Salaamu alaikum

Let me show my way…


Salaamu alaikum, alaikum, alaikum

Submitted by pharmacy_f on Mon, 12/11/2012 - 22:22


Copyright:

Writer(s): Sami Yusuf

Copyright: Resonance Music Fze

Lyrics powered by www.musiXmatch.com


۰ نظر موافقین ۰ مخالفین ۰ ۱۰ خرداد ۹۳ ، ۰۰:۱۳
سعید رسولی

اگه یه مقدار ریاضی بلد باشید، فکر نکنم نیازی به توضیح داشته باشه:


نتیجه، توانایی، انگیزه

۰ نظر موافقین ۰ مخالفین ۰ ۱۱ فروردين ۹۳ ، ۰۳:۴۱
سعید رسولی

سلام و تبریک عید نوروز و سال نو به همهٔ ایرانیان و هم‌زبانان خودم در داخل یا خارج ایران

دوست دارم این تبریک رو با دادن یک خبر علمی خیلی خوب همراه کنم: روزی به یاد ماندنی برای علم

به امید روزی که کشور ما پرچمدار دانش و فناوری باشه و بتونیم دوباره به ایرانی بودن‌مون افتخار کنیم.

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

۰ نظر موافقین ۰ مخالفین ۰ ۰۱ فروردين ۹۳ ، ۰۸:۱۷
سعید رسولی