۱۴۰۳ فروردین ۳, جمعه

فلسفه یونیکس و systemd!

انگیزه اصلی نوشتن من، ادعای مشهوریه که در مورد systemd میشه اونم این که systemd بده چون با فلسفه یونیکس سازگار نیست. گاهی هم این موضوع به صورت‌های دیگه‌ای بیان میشه مثل این که systemd بزرگه یا این که تو هر موضوعی دخالت کرده و ... که همه تقریبا دارن یک چیز رو بیان می‌کنن. اما حداقل یک عده، تصور درستی از چیزی که بیان می‌کنند ندارند. برای همین بد ندیدم چیزهایی رو بگم که لااقل اگه کسی مخالف هم هست، بهتر مخالف باشه! ولی قبل از شروع یه خلاصه‌ای از کلیات چیزی که می‌خوام میگذارم که از قضاوت عجولانه شاید تا حدی جلوگیری کنه. البته بسته به شرایط شاید صحبت‌ها گسترده‌تر هم شد. اما اساس حرف‌های من:
۱. «فلسفه یونیکس» چیز خوبیه؟
۲. اصلا چی هست؟ و گفتن این که برنامه‌ای رعایتش می‌کنه یا نه راحته؟
۳. آیا systemd خلاف این فلسفه ست؟ و اگه هست، چیز بدیه؟ یا اگه نیست چرا نیست؟


مورد ۳ می‌تونه خلاصه یا مفصل باشه؛ ببینیم اوضاع چطور پیش میره! شاید یکمی بیشتر پروژه systemd رو باز کردیم و در موردش نوشتم.

یه چیزی هم بگم همین الان! من سعی می‌کنم چیزهایی که میگم غلط نباشه، ولی خب حالشم ندارم براشون سند و منبع بیارم. بررسی صحتشون در صورت تمایل با خواننده. اما اگه کسی خواست ازم ایراد بگیره، حتما باید مستند باشه وگرنه راستش رو بخواین لزوما حالشم ندارم هر ادعایی رو بخوام برم بررسی کنم ببینم درسته یا نه D: مخصوصا که من یه نفرم و شما احتمالا چندتا!

پس من بدون سند حرف می‌زنم، کسی خواست رو حرفم حرف بزنه سند بیاره ؛) به نظر خودم که عادلانه‌ست!

 

یک سری هستند که تعصب خاصی روی چیزهایی مثل «فلسفه یونیکس» دارند انگار که قطعا این چیز خوبیه و هر چیزی باهاش ناسازگار باشه چیز بدیه. اما این که این مسئله خوبه یا نه، مثل خیلی مسائل دیگه تو این رشته، قطعی و بدیهی نیست. و شخصا عادت ندارم این جور چیزها رو همین‌طوری بپذیرم. یا باید بشه درست بودن چیزی رو اثبات کرد، یا این که باید توجیهات و مزایا معایب رو شنید و براساس اون تصمیم گیری کرد. مثلا، برنامه‌نویسی شیءگرا بهترین روش برنامه‌نویسیه؟ آدم‌های بزرگی در موردش نوشتند، ولی عده‌ای هم هستند که مخالفن و میگن نه مثلا برنامه‌نویسی تابعی بهتره و شیء گرا چیز بدیه! یا در مورد روش‌های برنامه‌نویسی مثل آبشاری و چابک و همچنین روش‌های مختلف چابک. این‌ها هیچ کدوم «آیه» نیستند و چه بسا بعدا کسایی بیان و راه‌های متفاوتی رو به عنوان گزینه برتر معرفی کنند. شخصا، هیچ کدوم از این دست مسائل رو به صورت خشک و بدون تحلیل نمی‌پذیرم و برای تفکر خودم هم احترام قائلم! صرف این که فلان آدم شناخته شده گفته باشه چیزی خوبه به نظر من اون رو به یک حقیقت جامع و غیر قابل انکار تبدیل نمی‌کنه! مگر این که کسی بتونه اون رو به صورت منطقی و غیرقابل بحث اثبات کنه. آیا طراحی نرم‌افزار طبق «فلسفه یونیکس» واقعا خوبه؟ به نظر میاد جاهایی خوب بوده اما معنیش این نیست که لزوما همه‌جا خوبه یا اصلا راه بهتری براش وجود نداره. به نظرم این جور جاها باید بحث بشه که مثلا به فلان دلایل این کار خوب یا بده که احتمالا خیلی جاها در نهایت باید بین چند چیز سبک سنگین کرد؛ نه این که به صرف استناد به یک جمله حکم صادر کنیم.

 فلسفه یونیکس

فلسفه یونیکس چیه؟ تو ویکی‌پدیا که خیلی چیزا نوشته ولی قسمتی که اکثرا روش نظر دارن اینه: «برنامه‌ای بنویسید که یک کار رو به خوبی انجام بده».
تو نگاه اول ممکنه جمله به نظر ساده بیاد، اما ۲ قسمت داره که باعث میشه خیلی هم این جمله ساده نباشه: ۱. «یک کار» و ۲. «به خوبی». این‌ها چیزایی هست که باعث میشه این معیار خیلی هم واضح و شفاف نباشه و جای بحث پیش بیاد. نه «یک کار» لزوما تعریف مشخصی داره و نه «به خوبی»‌ انجام دادن یک کار. و نه لزوما شما می‌تونید هر دو رو با هم داشته باشیم. همون‌طور که خیلی اصول دیگه که مطرح میشن تو حرف راحت اما تو عمل اما و اگرهای زیادی پیدا می‌کنند.
خوبه یک مثال بزنم. بیاین ترکیب tar و یک فرمان فشرده‌سازی مثل gzip/xz/... رو مقایسه کنیم با برنامه zip/unzip.

تو کدوم مورد فلسفه یونیکس رعایت شده؟!
۱. دستور tar فقط کارش مدیریت بایگانی‌های tarه چه ساختن چه بیرون کشیدن فایل‌ها از اون‌ها
۲. برنامه‌هایی مثل gzip/xz و ... فشرده‌سازی و غیرفشرده‌سازی با قالب‌های مربوطه رو انجام میدند. اما اگه فایلی باشه در حد یک فایل.
۳. برنامه zip صرفا فشرده‌سازی انجام میده، اما می‌تونه بایگانی از چندین فایل داشته باشه. و حتی امکان انتخاب الگوریتم هم میتونه بده و الان bzip2 هم پشتیبانی می‌کنه. برای غیرفشرده کردن باید از unzip استفاده کرد.اینجا تفاوت‌های جالبی دیده میشه. tar به نظر میاد یک کار میکنه و اون هم خوب انجام میده. البته از یک دید هم ۲کار میکنه هم ساخت بایگانی و هم استخراج فایل‌ها از اون. برنامه‌هایی مثل gzip/bzip2/... هم فقط با فشرده‌کردن و البته غیرفشرده‌کردن کار دارند که میشه یک یا دو کار حسابشون کرد. ولی میشه گفت کار خودشون رو خوب انجام میدن. هر چند اینجا هم میشه گفت چرا هم فشرده‌سازی هم غیرفشرده‌سازی رو یک برنامه انجام میده؟!

یکی دیگه از خصوصیاتی که تو فلسفه یونیکس گفته میشه بحث ترکیب ابزارها هست. tar و gzip خب با هم به صورت ترکیبی هم استفاده میشند و شما امکان ترکیب با برنامه‌های دیگه هم دارید مثل bzip2 و xz که خب انعطاف‌پذیری رو نشون میده. البته دستور tar خودش گزینه میگیره برای ترکیبش با برنامه‌های فشرده‌سازی که شاید خودش یه جور نقض فلسفه یونیکس هم محسوب بشه!

از اون طرف zip/unzip کار فشرده‌سازی و غیرفشرده‌سازی رو جداگانه انجام میدند. اما دستور zip خودش هم با بایگانی چندین فایل سر و کار داره و هم با فشرده‌سازی اون‌ها.اما! با این که tar خوبه،‌gzip هم خوبه، ترکیب اون‌ها برای کار «فشرده‌سازی چندین فایل» لزوما ترکیب خوبی نیست. چرا؟ برای مثال، شما برای استخراج یک فایل از آرشیو tar.gz مجبورین کل فایل رو غیرفشرده کنید تا بعد بتونید از آرشیو tar یک فایل رو بکشید بیرون. اما توی zip شما می‌تونید چنین کاری بکنید. به نظر می‌رسه اینجا ابزاری که کار ترکیبی رو کرده در نهایت بهتر اون کار رو انجام داده.

آیا نمیشد tar و gzip هم چنین امکانی بدند؟ چرا احتمالا میشه، ولی اونجاست که مثلا برنامه tar دیگه فقط به فکر کار خودش نیست و عملا باید چیزهایی فراتر رو در نظر بگیره و احتمالا برخی از مزایای جدا بودن و کوچک بودن رو از دست میده. هر چند... همین الان هم با داشتن گزینه‌های مربوط به فشرده‌سازی میشه گفت خیلی هم مستقل نیست.

به هر حال، شاید اینجا «یک کار» بهتره هم شامل کد کردن و هم بایگانی چندین فایل باشه تا این که بایگانی «یک کار» باشه و کدکردن هم «یک کار» جدا.

در نهایت، خود یونیکس هم بعضا فلسفه‌ش رو رعایت نکرده! یکی همین که هسته‌های اولیه و حتی هسته‌های به روز یونیکس‌هایی مثل solaris و bsdها از نوع یک‌پارچه هستند.

یک مثال شاخص هم، تابع شاخص `ioctl`ه که عملا همه کار می‌کنه... یا لااقل می‌تونه بکنه. :)

خب، تا این‌جا اول گفتم که «فلسفه یونیکس» لزوما چیز خوبی نیست، یا لزوما بهترین چیز نیست، یا اصلا شاید بسته به شرایط خوب باشه یا نباشه!

دوم هم گفتم که اصلا تعریف خیلی دقیق و مشخصی هم نداره و بستگی به تفسیر ما می‌تونه معنی متفاوتی بده. مهم‌ترین نقاط ابهام هم یکی انجام «یک کار» بوده و یکی هم این که اون کار «به خوبی» انجام بشه. این که به چی میگم «یک کار» و هم این که معیار خوبی انجام کار چیه خودشون ابهام دارند.

سوم هم یک مثال زدم که نشون بدم که ممکنه ترکیب دو برنامه که دو کار کوچیک رو انجام میدند برای انجام یک کار بزرگ‌تر، ممکنه نتونه اون کار بزرگ‌تر رو به خوبی انجام بده. در نتیجه یا تعریف «کار»مون درست نیست،َ یا هم باید بگیم بعضی جاها فلسفه یونیکس باعث میشه نتونیم یه کار نسبتا پیچیده رو خوب انجام بدیم!یه نکته دیگه هم اضافه کنم. فلسفه یونیکس داره در مورد «یک برنامه» صحبت می‌کنه که حالا بخوایم عمومی‌ترش کنیم میشه یک ماژول. هیچ وقت این فلسفه در مورد یک پروژه صحبت نمی‌کنه، چون یک پروژه خیلی معنی فنی خاصی هم نداره. وگرنه یک پروژه هست به اسم «پروژه گنو»، که رسما هدفش تولید یک سیستم‌عامل کامل بود: از هسته گرفته تا پوسته و کامپایلر و ... .

تازه یکی از اجزای این پروژه، پروژه coreutilsه. این پروژه هم شامل بالای ۱۰۰ تا فایل اجرایی مختلفه: از cp و ls گرفته تا sleep و uname و ...

کسی نمیاد بگه پروژه گنو فلسفه یونیکس رو نقض می‌کنه یا مثلا coreutils این فلسفه رو نقض می‌کنه. چون این‌ها پروژه هستند و یک «برنامه» نیستند. و درست هم هست. حتی اگه تمام برنامه‌ها پیشوند gnu یا coreutils داشتند باز هم همین بود.

پس خوبه حواسمون به تفاوت «پروژه» و «برنامه» باشه. این اولین چیزیه که توی بررسی systemd باید حواسمون باشه؛ چون systemd هم اسم یک پروژه‌ست و هم اسم یک برنامه. متاسفانه، بخش قابل توجهی از افراد به این تفاوت دقت نمی‌کنند که باعث میشه نتیجه‌گیری‌هایی بکنند که از اساس اشکال داره.آخر این قسمت، یک سوال هم مطرح کنم: آیا Sys V init با فلسفه یونیکس سازگار بود که اینقدر طرفدار داشت وقتی systemd مطرح شد؟! آیا یک کاری رو به خوبی انجام میداد؟
من فقط میگم دقت کنید که تا جایی که من می‌بینم حتی خیلی توزیع‌های مخالف استفاده از systemd هم دیگه از Sys V init استفاده نمی‌کنند!

خب، من فکر می‌کنم احتمالا کارش رو خوب انجام نمیداده که جایگزین شده. در نتیجه خودش هم با فلسفه یونیکس سازگار نبوده. اما کسی گریبان پاره نمی‌کرد که چرا Sys V init بده و اوایل مخالفین systemd دوست داشتند برگردن به اون. :)

و البته دیدم یک عده هم تفسیر خودشون رو از «فلسفه یونیکس» دارند و صرفا هر تغییر نسبت به یونیکس سابق رو تعبیر می‌کنند به نقض فلسفه یونیکس! و این افراد بیشتر مقاومت در برابر تغییر دارند تا نگرانی در مورد فلسفه یونیکس :)

systemd

خب systemd چیه؟ این کلمه به ۲تا مفهوم متفاوت می‌تونه اشاره کنه، در نتیجه وقتی کسی می‌خواد در موردش صحبت کنه باید بدونه و مشخص کنه که داره در مورد کدومش صحبت می‌کنه و این ۲تا رو قاطی نکنه!
"systemd is a suite of basic building blocks for a Linux system."
به صورت کلی، systemd یک «مجموعه نرم‌افزاری پایه‌ای برای یک سیستم لینوکس»ه. و ما داریم در مورد یک «پروژه» نرم‌افزاری صحبت می‌کنیم نه یک «برنامه».
اما، اسم شاخص‌ترین برنامه این مجموعه هم systemd هست! کار «برنامه systemd» چیه؟ طبق تعریف خودشون، «مدیریت سیستم و سرویس‌ها». که البته خیلی قسمت «مدیریت سیستم»ش گویا نیست به نظرم و میشه منظورش رو از کارهایی که می‌کنه تشخیص داد.
حالا وقتی در مورد «پروژه systemd» صحبت می‌کنیم، آیا صحبت از این که این پروژه به خاطر پوشش موارد خیلی متنوع با فلسفه یونیکس در تناقضه، درسته؟ «به هیچ عنوان». اصلا چنین صحبتی معنا نداره؛ چون فلسفه یونیکس اصلا و به درستی در مورد پروژه‌ها یا مجموعه‌های نرم‌افزاری صحبتی نمی‌کنه. یک پروژه رو میشه به چند پروژه شکست بدون این که شما هیچ تغییری توی کدهای اجرایی ایجاد کنی. پس پروژه اصالت خاصی نداره.

به جز «برنامه systemd» برنامه‌های مختلفی توی این مجموعه وجود داره مثل مدیریت: لاگ‌ها، نشست کاربران، اتصالات شبکه، ساناد یا DNS، راه‌اندازی سیستم (بوت)، زمان سیستم، همگام‌سازی زمان با NTP، فایل‌های موقت و دستگاه‌های متصل به سیستم.

هر کدوم از این‌ها، در قالب برنامه‌های جداگانه هستند و در نتیجه، صرف ورود مجموعه systemd به این زمینه‌ها تناقضی با «فلسفه یونیکس» نداره. برخلاف چیزی که خیلیا ادعا می‌کنن. اما خب، میشه تک تک این برنامه‌ها رو جداگانه از این نظر بررسی کرد. همون‌طور که هستند کسانی که با اطلاع، در این موارد هم انتقاد می‌کنند. اما متاسفانه، دور رو برمون کمتر این مدل صحبت‌ها رو می‌بینیم.

البته ممکنه یکی با استدلال بگه به صورت کلی توی کل این پروژه، رویکرد متفاوتی نسبت به «فلسفه یونیکس» پیش گرفته شده و از این نظر بگه این پروژه با اون فلسفه سازگار نیست؛ اما من تا الان چنین چیزی رو ندیدم و خیلی افراد واقعا نه شناخت کافی نسبت به systemd دارند و نه حتی خود فلسفه یونیکس!

حالا «برنامه systemd» چی؟ این برنامه مطابق با فلسفه یونیکس هست یا اون رو نقض می‌کنه؟
جواب این سوال سخته و من جوابی که بتونه همه رو قانع کنه به ذهنم نمی‌رسه. همون‌طور که اوایل گفتم، «فلسفه یونیکس» یک سنجه دقیق نیست که بگذاریم و راحت بگیم این برنامه کاملا سازگاره و این برنامه هم متناقض. یک سری برنامه‌ها ممکنه به اندازه کافی به یکی از این دو سمت نزدیک باشند که بشه نسبتا راحت در موردشون نظر داد. اما یک سری برنامه‌ها هم ممکنه بیفتند توی طیفی بین این ۲ سمت که دلیلش هم قبلا گفتم: کلماتی مثل «یک کار» و انجام آن «به خوبی» کلماتی نیستند که تعریف دقیق و روشنی داشته باشند. در نتیجه، هر کس بسته به معیارها و تعریف خودش ممکنه قضاوت متفاوتی داشته باشه؛ و من هم قصد ندارم برای دیگران در موردش قضاوتی بکنم. اما صرفا سعی می‌کنم تا حدی توصیف کنم برخی خصوصیات systemd رو و نظرم رو هم بگم.
برنامه systemd کارش مدیریت سیستم و سرویس‌های سیستمه. این برنامه به جز journald، که اونم می‌تونه صرفا کارش ارسال لاگ‌ها به syslog باشه، تا جایی که من میدونم به هیچ‌کدوم از برنامه‌های مجموعه پروژه systemd وابستگی نداره. شاید بشه گفت مهم‌ترین کار این برنامه، مدیریت و اجرای سرویس‌های سیستم یا کاربره. حالا من اینجا بیشتر حالتی که systemd به عنوان اولین پردازه سیستم با PIDه شماره یک کار می‌کنه صحبت می‌کنم.
اما، systemd کاری فراتر از اجرا و اتمام سرویس‌ها انجام میده. توی systemd شما با «واحدها» یا unitها سر و کار دارین. اما این unitها صرفا سرویس‌ها نیستند، بلکه می‌تونن نماینده دستگاه‌ها، نقاط سوار شدن (mount pointها)، سوکت‌ها، زمان‌سنج‌ها و چند مدل واحد دیگه باشند. حالا اینجا جاییه که واقعا می‌تونه سوال برانگیز باشه. چون عملا systemd بخشی از کاری رو که قبلا سرویس‌هایی مثل crond، atd و inetd انجام می‌دادند رو هم انجام میده و خودش رو درگیر دستگاه‌های سخت‌افزاری و مدیریت فایل‌سیستم‌ها هم کرده. و این موارد مواردی هستند که می‌تونن به درستی مطرح بشند از این نظر که سازگاری با فلسفه یونیکس وجود داره یا نه (و نه تیترهای زردی مثل این که systemd بوت لودر هم هست...).

اما آیا systemd از این که روی انجام یک کار متمرکز بشه دور شده یا نه؟ این رو تا حدی میشه با مثالی که قبلا در مورد مقایسه tar - gzip و zip انجام دادم مقایسه کرد. اونجا هم از یک نظر میشه گفت zip داره به جای یک کار ۲کار انجام میده. و نمیشه هم گفت این حرف درسته یا غلط.
اینجا هم، کار systemd مدیریت سرویس‌هاست. اما عملا چیزهایی مثل cron و inetd هم به نحوی توی مدیریت سرویس‌ها دخالت دارند چون هر کدوم می‌تونند از نظر مفهومی یک یا چند سرویس رو هم اجرا کنند. حالا آیا بهتر نیست این‌ها هم مثل بقیه سرویس‌ها خود systemd مدیریت کنه؟ می‌تونه باشه. در واقع، میشه به نحو دیگه‌ای هم رفتار systemd رو توصیف کرد. systemd اومده یک انتزاع سطح بالاتر به نام واحد یا unit ساخته، که شما می‌تونید از همین مفهوم و به صورت یکپارچه برای مدیریت سیستم استفاده کنید. میشه این رو تا حدی با مفهوم «فایل» توی یونیکس مقایسه کرد. یکی از خصوصیات یونیکس این بوده که خیلی چیزها توی یونیکس فایل هستند: فایل‌های دیسک، سوکت‌ها، دستگاه‌های سخت‌افزاری، و ... . و این مسئله به شما قدرت میده که بتونید با مجموعه‌ای از چیزهای متفاوت رفتار مشابهی داشته باشید و این اتفاق خوبیه. «به نظر من»، کاری که systemd در مورد یک سری مفاهیم انجام داده هم مشابه همین مثاله. این که شما می‌تونید به جز سرویس‌ها، مفاهیم دیگه‌ای رو هم در قالب واحدها توصیف کنید به شما قدرت بیشتری توی مدیریت سیستم میده. این یعنی که شما میتونید از مسائلی مثل وابستگی بین واحدها و غیره برای چیزهای گسترده‌تری استفاده کنید و به صورت یکپارچه‌تری سیستم رو مدیریت کنید. از دید من، این چیز خوبیه و میشه این‌ها رو در قالب انجام یک کار به خوبی دید، اما درک می‌کنم که ممکنه کسی مخالف باشه و از نظر من اشکالی هم نداره.

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

با توجه به این که معمولا وقتی صحبت از استفاده یا عدم استفاده از systemd میشه اصولا منظور همین استفاده اون به عنوان init سیستمه، من روی برنامه‌های دیگه این پروژه دیگه صحبتی نمی‌کنم، به جز یک صحبت مختصر که در مورد journald خواهم کرد. و حتی فدورا، که ظاهرا اولین توزیعی بود که به systemd مهاجرت کرد، عجله‌ای توی استفاده از برنامه‌های دیگه نداشت و نداره و لزوما هم استفاده نخواهد کرد. 

journald

به عنوان آخرین صحبت قبل از خلاصه نهایی، یه نیم نگاهی هم به journald داشته باشیم بد نیست چون بخشی از انتقادات هم متوجه این سرویسه.اول که همون‌طور که گفته شد، شما مجبور نیستین از journald برای مدیریت رخدادنماها (logها) استفاده کنید و می‌تونه صرفا اون‌ها رو ارسال کنه برای syslog و خودش چیزی نگه نداره.
دوم این که از نظر من این برنامه صرفا یک کار انجام میده و اون هم مدیریت رخدادنماهاست و فکر نمی‌کنم از این نظر خیلی اختلاف نظری توش وجود داشته باشه. اما جایی که بیشتر روش صحبت هست، نحوه ذخیره‌سازی رخدادنماهاست، چون journald اون‌ها رو به صورت دودویی ذخیره می‌کنه و نه متنی. بعضی از اساس با این قضیه مخالفن و برای مثال میگن باعث میشه شما نتونید لاگ‌های ذخیره‌شده رو با ابزارهای معمول (مثلا grep) بررسی کنی. یا دلایل دیگه. و بعضی هم میگن این هم با فلسفه یونیکس ناسازگاره.
حقیقتا یک سری از دلایل رو خیلی صحبتی نمیشه روش کرد. مثلا من می‌تونم بگم شخصا موافق نیستم ولی فکر نمی‌کنم خیلی قابل بحث باشه. از نظر من این که شما می‌تونید با journalctl لاگ‌ها رو در قالب متنی دریافت کنید و پردازش دلخواه خودتون رو روش انجام بدید (به جز این که خود journalctl هم قابلیت‌هایی داره برای انتخاب رخدادنماهایی که دنبالش هستیم). و از نظر من دودویی بودن لزوما چیز بدی نیست همون‌طور که خیلی برنامه‌ها چنین کاری می‌کنند.
در مورد فلسفه یونیکس هم، طبق چیزی که من توی ویکی‌پدیا می‌بینم توی بعضی روایت‌ها گفتند که داده‌ها رو متنی نگه دارین ولی توی بعضی روایت‌های دیگه هم بیشتر تاکید روی ورودی و خروجی برنامه‌هاست که متنی باشه و تو بعضی روایت‌ها هم اصلا صحبتی از این قضیه نشده! در نتیجه، به نظرم اصلا این که این جزء فلسفه یونیکس هست یا نه خودش جای بحث داره. و دوم هم، به فرض هم اگر باشه شخصا موافقش نیستم، و البته ما با برنامه‌های زیادی سر و کار داریم که چنین کاری نمی‌کنن! مثلا بسیاری از پایگاه‌های داده اون رو در قالب دودویی ذخیره می‌کنند. یا مثلا شما تصویر رو در قالب متنی ذخیره نمی‌کنید... (البته قالب xpm هم قالب بامزه‌ایه :) ). جدای از این که «متن» هم دیگه لزوما فقط متن ASCII نیست. و حتی توی ارتباط برنامه‌ها می‌بینیم که زمانی بخشی از ارتباطات دودویی بود؛ بعدا ارتباطات متنی مثل xml و json مد شد، و بعد دوباره قالب‌ها و ارتباطاتی باینری مثل protocol buffers باب شد در بخشی از ارتباطات.

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

خلاصه 

  • فلسفه یونیکس لزوما و همه‌جا خوب نیست
  • فلسفه یونیکس یک معیار کیفی و قابل تفسیره، و سازگاری با اون لزوما صفر و یک نیست. و ممکنه برآورده کردن معیارهای مختلف اون به صورت همزمان ممکن نباشه
  • لزوما هر چی در یونیکس بوده کاملا مطابق با فلسفه یونیکس نیست
  • فلسفه یونیکس در مورد «برنامه»ها صحبت می‌کنه و نه «پروژه‌»ها یا مجموعه برنامه‌ها
  • سیستم SysV init لزوما مطابق با این فلسفه نیست
  • «پروژه systemd» شامل مجموعه‌ای از ابزارها یا برنامه‌هاست که زمینه‌های مختلفی رو پوشش میدن (بوت، مدیریت لاگ، ترجمه فایل fstab، مدیریت شبکه، ترجمه dns، مدیریت سیستم و سرویس‌ها و ...)
  • گسترده بودن محدوده پروژه systemd تناقضی با فلسفه یونیکس ندارد (چون یک برنامه نیست)
  • «برنامه systemd» وظایف مختلفی رو زیر چتر مدیریت سیستم و سرویس‌ها انجام میده که قبلا توسط چندین برنامه انجام میشده (مثل init، cron، inetd، اسکریپت‌های مدیریتی و ...)
  • با این وجود، لزوما «برنامه systemd» در تناقض با فلسفه یونیکس نیست، چون می‌توان گفت تمامی این کارها در راستای انجام کار اصلی آن به خوبی ست.
  • میزان رعایت فلسفه یونیکس در «برنامه systemd» بستگی به تفسیر شما متفاوت است.
  • با نگاه سخت‌گیرانه، بسیاری از برنامه‌های مرسوم ممکن است سازگار با فلسفه یونیکس محسوب نشوند. این معیار، به تنهایی برای قضاوت کافی نیست
  • برای برخی، فلسفه یونیکس صرفا بهانه برای مقاومت در برابر تغییر است، و ممکن است حتی خود فلسفه را هم دقیق ندانند.

 

در پایان، هدف، ارائه تصویری دقیق‌تر از systemd برای دوستانی بود که کمتر از نزدیک به آن نگاه کرده بودند. مخصوصا که حجم نسبتا زیادی مطالب نه چندان دقیق در مورد این برنامه وجود دارند که خواسته یا ناخواسته منتشر کننده ترس، ابهام و شک[۱] در مورد این مجموعه نرم‌افزار هستند. تا جایی که حتی برخی تصور می‌کنند بوت با systemd می‌تواند کندتر از بوت با sysv init باشد در صورتی که حداقل از نظر منطقی چنین نباید باشد!

 

[1] https://en.wikipedia.org/wiki/Fear,_uncertainty,_and_doubt

سال ۱۴۰۳ مبارک!

نوروز همه مبارک! :)


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


امیدوارم سال جدید برای همه سال بهتری باشه...


اینجا نوشتن یکمی سخته :) یعنی همش فکر می‌کنم نیاز به وقت داره! برای همین خیلی وقت بود چیزی ننوشته بودم... هر چند شاید خیلی حرفی هم نبوده. به هر حال، اخیرا وارد دنیای ماستادون هم شدم و یه حساب هم ساختم که شاید بعضی وقت‌ها اونجا هم یه چیزایی گذری بنویسم. حساب من اینه اگه کسی خواست می‌تونه اونجا هم دنبال کنه. ولی خب تصمیم گرفتم اگه چیزی نوشتم که شاید مفید بود اینجا هم بنویسمش.


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

 

۱۳۹۵ آذر ۱۰, چهارشنبه

زبان‌های برنامه‌نویسی...

دنیای زبان‌های برنامه‌نویسی هم دنیای جالبیه برا خودش! ظاهرا هیچ‌وقت ایده‌های افراد برای زبان‌های جدید تموم نمیشه :) و البته بعد از اومدن زبون‌هایی که ماشین مجازی دارند یا مفسری هستند مثل دات‌نت و ruby و این‌ها باز زبون‌هایی اومدن که به صورت بومی! (native) کامپایل میشند. زبون‌هایی مثل Vala و Go که خیلی طرفدار پیدا کرده و بعدش هم Rust که توی فدورا ۲۵ کامپایلرش اضافه شده.

ولی خب! اصلا قصدم از این پست صحبت در مورد این‌ها نبود. فقط خواستم اینو بگم: فکر می‌کنید این کد به چه زبونیه؟
void f(string_view id, unique_ptr foo) {
   if (auto [pos, inserted] = items.try_emplace(id, move(foo)); inserted){
      pos->second->launch();
   } else {
      standby.emplace_back(move(foo))->wait_for_notification();
   }
}

اگه می‌دونید که هیچ! ولی اگه نمیدونید حتما حدس زدید که شبیه سی++ هست ولی به نظر دقیقا سی++ هم نمیاد. خب حق دارید! چون سی++ هست، ولی سی++۱۷ (C++17). این کد یه نمونه کد هست از اینجا.

کلا روال جدید به روز رسانی استاندارد سی++ خیلی بهتر از قبل شده. بعد از استاندارد سی++۱۱ که در واقع قرار بود قبل از سال ۲۰۱۰ بیاد و خیلی طولانی شد (در واقع، تغییر توی سی++ بعد از ۱۳ سال بود نسبت به استاندارد ۹۸ (استاندارد ۲۰۰۳ هم بود ولی اون تغییر اساسی‌ای نسبت به ۹۸ نداشت))، تصمیم گرفتند روال استاندارد هم، مثل روالی که خیلی نرم‌افزارها برای انتشارشون در نظر گرفتند، براساس زمان و فعلا ۳ سال یک‌بار باشه. برای همین هم استاندارد سی++۱۴ و الان هم سی++۱۷ تو راهه. و بعدی هم میشه سی++۲۰.

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

هر چند این زبون‌های جدید جای سی++ رو تنگ کردند :(
؛)


۱۳۹۵ مرداد ۳۱, یکشنبه

۲تا کتاب جالب!

یه وقتی این ۲تا کتاب رو دیدم به نظرم قابل عکس گرفتن اومد! :)



و این:


پ.ن: شاید از این به بعد بیشتر بنویسم!

۱۳۹۴ تیر ۸, دوشنبه

واقعا؟!

جا داره از دوستان تشکر کنم که توی ۲۴ساعت تقریبا نصفش رو صرف نظافت روزانه‌ی یه نمازخونه‌ی کوچیک می‌کنند!

۱۳۹۴ فروردین ۱, شنبه

سال ۱۳۹۴ مبارک!

سلام، از اون‌جایی که دارم میرم بیرون، فقط میگم مبارک باشه!! امیدوارم امسال لااقل ۲-۳ ماه یک بار بتونم این وبلاگ رو به روز کنم. P:


۱۳۹۳ مهر ۱۵, سه‌شنبه

از زنجان تا اصفهان...

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

چند وقت پیش رفتیم زنجان، برای شرکت توی zconf یا همایش نرم‌افزارهای آزاد/متن‌باز. به طور کلی هم میشه گفت خوش گذشت! فقط به صورت ناجوانمردانه‌ای اولین ارائه ارائه‌ی من بود P: خدا رو شکر این بار استثنائا ارائه رو زودتر آماده کرده بودم و مشکلی نبود. :) ارائه‌م هم در مورد systemd بود که اخیرا خودش رو توی اکثر توزیع‌ها جا کرده.
راستی توی همایش زنجان توی یک ارائه که میشه گفت توسط یه نفوذی اپلی! ؛) ارائه میشد خنجرهایی از پشت! به پیکره‌ی گنو/لینوکس وارد شد با کمک ASLR که مدتی قصد دارم در مورد صحبت کنم. ان‌شاالله به زودی! اما فعلا خلاصشو بگم که: ۱) ASLR هم مثل تقریبا همه‌ی مکانیزم‌های امنیتی، امنیت رو به صورت نسبی افزایش میده و نمیشه به صرف پشتیبانی یا عدم پشتیبانی از ASLR امنیت ۲تا سیستم رو مقایسه کرد ۲) اصلا این واژه‌ی ASLR در دنیای لینوکس به وجود اومده! ۳) پشتیبانی ASLR توی هسته‌ی مکینتاش در سال ۲۰۱۲ اضافه شده.
حالا که خلاصشو گفتم شاید دیگه کاملشو نگم! برای اطلاعات بیشتر میشه به صفحه‌ی مربوط به ASLR توی ویکی‌پدیا مراجعه کرد!


http://isfd.ir
بگذریم! پنج‌شنبه آخر این هفته (۱۷ مهر) هم جشن روز آزادی نرم‌افزار اصفهانه. البته روز آزادی نرم‌افزار اواخر شهریوره ولی خب مراسم اصفهان با تاخیر برگزار میشه.  یه ۲ ماه پیش به من گفتند بیا روی ۲تا سخت‌افزار کوچولو که توکار (embedded) محسوب میشن ارائه بده. من گفتم ببینم چی میشه خبر میدم... ولی خبر ندادم! چون اصلا فرصت نکردم کار خاصی بکنم. P: گفتم احتمالا خودشون بی خیال من شدن. چند وقت پیش یهو گفتن پس بگو بیایم سخت‌افزارها رو بدیم بهت... خلاصه من هی از زیرش در رفتم تا این که .... یهو دیدم اسم منو زدن تو سایت. خلاصه! حالا ظاهرا قراره من ارائه داشته باشم. خدا به خیر بگذرونه. فعلا که هیچی آماده نیست. فکر کنم باید ببینم چطوری ۵شنبه فرار کنم!! یا شایدم یه طوری ماسمالیش کنم بره.... D:
حالا اونش مهم نیست. بیشتر امیدواریم که خوش بگذره اون روز!


۱۳۹۳ فروردین ۱۶, شنبه

فروش بهاره «کلیه» در تهران!

سلام! سال نو مبارک :)
دیگه نشد پست مخصوص عید بذارم امسال. تو این مدت هم اتفاقاتی که افتاد این بود که من ۲ماه رفتم آموزشی (مرکز ۰۱ تهران) و الانم از اسفند سربازم. فعلا بین تهران و اصفهان سرگردونم و میرم و میام...
بگذریم! روزهای آخر قبل عید دیدم تو تهران زدند که توی نمایشگاه بهاره، عرضه مستقیم کلیه هست. گفتم جالبه، عکسشو تو بلاگم بذارم هر کی خواست بره دنبالش D:


۱۳۹۲ آذر ۱۰, یکشنبه

پاییز

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


هوای بارونی پاییزی...

فقط این انگشتمو ندیده بودم!








۱۳۹۲ فروردین ۱۳, سه‌شنبه

پست شروع ۹۲!

سلام!
این یه پست الکیه P: سال نو مبارک اول.
دوم که دارم میرم برای مسابقات تهران برای یک هفته‌ای.
سوم هم اوایل عید دومین برنامم رو برای N9 آماده کردم که البته یه برنامه‌ی کوچیکه و عمدتا با QML و جاوااسکریپت نوشته شده. تجربه‌ی خوبی بود.
البته خیلی اوضاع امیدوار کننده نیست. نوکیا که خب هیچ! یولا (Jolla) هم که تاریخ انتشار گوشیش رو انداخته برای آخر ۲۰۱۳ و در نتیجه این هم خیلی بهش امیدی نیست. اگه واقعا بهار امسال میدادن خیلی خوب بود. BlackBerry هم که به نظر میاد خیلی اوضاع مناسبی نداره. اوبونتو فون هم که نمیدونم مگه این که اون یه گوشی منتشر کنه. نکته‌ی مثبت همه‌ی این‌ها هم اینه که پلتفرمشون خیلی به N9 نزدیکه (البته به جز BlackBerry که شباهتش توی Qt/QMLه و سیستم‌عامل متفاوتی داره).
چهارم هم که به نظر می‌رسه دارم وقتم رو از دست میدم. باید هر چه سریعتر به آینده فکر کرد. باید کمتر وقتم رو صرف کارهای متفرقه کنم و تمرکزم رو روی آینده و راه اون بگذارم.
پنجم هم که این پارسیدورا ۱۸ ماست که مدتیه تو خم یه کوچه مونده اون هم به خاطر یه مشکل توی مخازن به‌روز رسانی فدورا ۱۸ که هنوز پیداش نکردم.
ششم هم فعلا بسه! به امید این که همچنان زنده و سالم باشیم تا پست بعدی. P:
خدانگهدار
شاید امسال بیشتر به‌روز بشه اینجا.

۱۳۹۱ مهر ۵, چهارشنبه

پست جدید!

ساعت ۱ و ۲۵ دقیقه نصف شبه، و من تازه ساخت ارائه‌ی فردا ظهر رو شروع کردم! چند ساعت پیش بود که متوجه شدم مراسم همایش روز آزادی نرم‌افزار اصفهان فرداست نه پس‌فردا!! P: و البته همون‌طور که مشاهده می‌کنید از اون‌جایی که وقت زیادی ندارم و خوابم میاد، الان بهترین زمان بود برای این که ساخت ارائه رو ول کنم و بیام بعد این همه وقت یه پست جدید بذارم. ؛)

***
حالا اصلا مناسبت این پستم این همایش نبود، بلکه این بود که شنیدم (خوندم!) که ظاهرا بستن این دو روزه‌ی سایت گوگل به خاطر درخواست‌های مردمی بوده. این شد که طاقت نیوردم گفتم بذار یه پست بزنیم. آخه گفتم یه درخواست بکنم از مردم غیور و همیشه در صحنه که اگه واقعا اینقدر مشتاقین و درخواست مردمی دارین، دلیلی نداره بار این درخواست‌هاتون رو بندازین به دوش مسئولین که با کمال بی‌میلی!! ۲ تا سایت از ۴تا سایتی که هنوز فیلتر نشده رو هم ببندند؛ خب مردم خودتون سایت گوگل رو تحریم می‌کردین و استفاده نمی‌کردین، حتما باید یکی وایسه بالا سرتون بزنه تو سرتون که استفاده نکنید؟!!! نمی‌تونین خودتونو کنترل کنید؟ من نمیدونم چه مملکتیه که یه تحریم یه سایت اینترنتی هم که البته خواست عموم مردمه باید توسط دولت انجام بشه؛ که مسلما بار تبلیغاتی و تاثیر چنین تحریم مردمی‌ای رو کم می‌کنه!

در پایان کمی عقل سالم برای مسئولین محترم از خدا خواستارم. همچنین برای تمامی مردمی که یه گوشه نشستند و به جای این که کاری بکنند، درخواست می‌کنند. با تشکر!

***
برم ارائمو آماده کنم!

۱۳۹۱ تیر ۲۳, جمعه

آماده‌سازی اولین برنامه برای N9

خب! از اون‌جایی که تصمیم گرفتم حداقل به صورت تفریحی برنامه‌هایی رو برای گوشیم بنویسم، یا برنامه‌های دیگران رو بهش منتقل کنم، SDK گوشیم رو نصب کردم. و دیروز همین‌طوری به سرم زد که تست کنم ببینم انتقال یه برنامه‌ی دسکتاپی Qt به گوشی و بسته‌بندی برای اون چطوری پیش میره و برای این کار هم نرم‌افزار ساغر رو انتخاب کردم که یه برنامه‌ی Qt هست و وابستگی دیگه‌ای هم نداره... و برخلاف انتظارم این کار به سادگی و بدون هیچ مشکل خاصی انجام شد.در واقع تفاوت خاصی با بسته‌بندی ساغر برای فدورا نداشت و مهم‌ترین تفاوتش این بود که بسته‌ی نهایی deb بود نه rpm. این هم نتیجه‌ی اولین تلاش بدون هیچ گونه تغییری در برنامه:
ساغر روی N9
و این خیلی خوبه! البته ظاهر برنامه خیلی مناسب یه صفحه‌ی لمسی کوچیک مثل گوشی نیست و همچنین این برنامه‌ها ظاهرشون شبیه برنامه‌هایی که با تکنولوژی‌های توصیه‌شده برای گوشی(که البته جزء Qt هستند) نوشته شدند نیست؛ ولی با این حال این برنامه اجرا میشه و قابل استفادست. و به نظر میاد با کار نه چندان زیادی میشه برای گوشی بهینه‌ش کرد.

ویرایش: این هم لینک دانلود برنامه برای گوشی: saaghar_1.0.94-1_armel.deb

***
خوشبختانه با توجه به این که انتقال برنامه‌های گنو/لینوکسی و Qt به این گوشی راحته، و از طرف دیگه امکان اجرای برنامه‌های جاوای استاندارد (JavaSE)، اوضاع برنامه‌های N9 اونقدرا هم وخیم نیست! :)

۱۳۹۱ تیر ۵, دوشنبه

گوشی‌ای که نباید خرید: نوکیا N9

نوکیا N9

این گوشی، گوشی خاصیه! با این که از وقتی اومد خیلی جاها ازش تعریف کردند، اما تقریبا همشون روی یک نکته تاکید داشتند، اونم این که این گوشی رو نباید خرید! چون نوکیا چند وقت قبل از توزیع این گوشی (که جزء رده‌ی گوشی‌های هوشمند محسوب میشه) اعلام کرد که استراتژیش کلا تغییر کرده و بعد از این توی گوشی‌های هوشمند تمرکزش روی استفاده از ویندزه و قصد ادامه‌ی میگو (MeeGo) رو (حداقل به صورت مشخصی) نداره. در نتیجه، نوکیا N9 اولین و (ظاهرا) آخرین گوشی هوشمندیه که با سیستم‌عامل میگو (در واقع یه نسخه‌ی خاص از میگو به اسم  MeeGo Harmattan که ترکیبیه از سیستم‌عامل پایه‌ی Maemo و واسط کاربر و APIها بر مبنای MeeGo) عرضه شده. و این یعنی که نباید انتظار پشتیبانی نرم‌افزاری چندانی از این گوشی و سیستم‌عامل داشته باشیم. مخصوصا که سیستم‌عامل سیمبین (Symbian) هم عملا توسط نوکیا داره به خاک سپرده میشه (که اون هم مشابه اخیرا مشابه میگو از کتابخانه‌های Qt استفاده می‌کنه و برنامه‌هاشون رو میشه نسبتا با تغییرات کم به هم منتقل کرد). البته Qt هنوز از دنیای موبایل قرار نیست حذف بشه، چون BlackBerry تصمیم گرفته ازش استفاده کنه!

بعد از این قضایا هم که کلا نوکیا از پروژه‌ی MeeGo اومد بیرون و پروژه هم متوقف شد و پروژه‌ی جدید Tizen جایگزین میگو شد. برخلاف میگو، تمرکز Tizen روی پشتیبانی از برنامه‌های html5ه و اون رو به عنوان API اصلی در نظر گرفته. سامسونگ هم به این پروژه پیوسته و احتمالا به زودی گوشی‌های سامسونگ با این سیستم‌عامل به بازار میاند. البته یک عده هم (بدون پشتیبانی تجاری) تصمیم گرفتند پروژه‌ی MeeGo رو ادامه بدند و در حال حاضر اون رو به اسم Mer دارند دنبال می‌کنند.

یه نکته رو هم یادم رفت بگم، اونم این که تمامی این سیستم‌عامل‌ها (MeeGo, Maemo, Tizen و Mer) بر مبنای لینوکس هستند، و برای همینم برای من جالبند! البته اندروید هم از هسته‌ی لینوکس استفاده می‌کنه، اما این سیستم‌عامل‌ها بر خلاف اندروید تشابهات خیلی بیشتری با سیستم‌های گنو/لینوکس که ما روی دسکتاپ استفاده می‌کنیم دارند و از زیرساخت‌های مشابهی استفاده می‌کنند (نه فقط هسته). برای همینم من اینا رو خیلی بیشتر از اندروید دوست دارم!

خلاصه، با این توصیف‌ها به نظر میاد گوشی‌هایی که تقریبا هم قیمت و هم رده‌ی این گوشی هستند مثل گوشی Galaxy S II سامسونگ انتخاب‌های معقول‌تری هستند. این گوشی از اندروید استفاده می‌کنه و سخت‌افزارش هم کمی قوی‌تر از گوشی N9ه و قیمتش هم خیلی بالاتر نیست.

***
من تا الان یه گوشی داشتم، اونم یه سونی اریکسون K510i که انصافا گوشی خوبیه و مدت‌ها برام کار کرد. تو این مدت یه دفعه از کار افتاد که مجبور شدم فلشش کنم و اخیرا یکمی بعضی دکمه‌هاش خوب کار نمی‌کرد. ولی کلا ازش راضی بودم. چند وقتی بود که هی بهم می‌گفتند که گوشیم داغونه و عوضش کنم، ولی من خیلی نیازی نمی‌دیدم. اما از وقتی قرار شد N9 بیاد به این نتیجه رسیدم که اگه بخوام گوشیمو عوض کنم اونو می‌خرم. اما بعد که پروژه میگو این بلاها سرش اومد دیگه شک داشتم. از طرفی هم وقتی گوشی اومد قیمت بالایی داشت (مدل ۱۶ گیگ تقریبا ۹۰۰هزار تومن) که به نظرم نمیرزید.

صفحه‌ی قفل
اما در نهایت، با وجود این که خریدن این گوشی به نظر خیلی عاقلانه نیست، من خریدمش! D: البته سعی کردم یه وقتی که قیمتش نسبتا پایین باشه (با توجه به نوسانات اخیر) بگیرم و در نهایت یه دست دومش (۱۶ گیگابایتی) رو گرفتم. اما الان از خریدم راضیم!
البته من تجربه‌ی کار با یه گوشی هوشمند رو ندارم، و بنابراین نمی‌تونم این گوشی رو با گوشی‌های مشابه دیگه مقایسه کنم. شاید اونا واقعا خیلی بهتر باشند! ولی مهم نیست، به هر حال من دوست نداشتم گوشی آیفون یا گوشی اندرویدی بخرم. و خیلی هم نمی‌تونستم صبر کنم تا گوشی Tizenی بیاد. P:

 خب اول یکمی از مشخصات این گوشی بگم: این گوشی ۲ مدل ۱۶ گیگ و ۶۴ گیگ داره ولی کارت حافظه نمی‌خوره. اول توی ۳ رنگ مشکی، آبی روشن و سرخابی اومد ولی بعدا رنگ سفید براقش (بر خلاف رنگ‌های دیگه که مات هستند) هم فقط تو مدل ۶۴گیگ به بازار اومد. جنس بدنه این گوشی «پلی‌کربنات»ه که فکر کنم تو مایه‌های همون پلاستیک خودمون باشه! ؛) ولی میگن خیلی جنسش عالیه و باش چیزای خیلی مقاومی ساخته میشه... . یکی از خصوصیاتشم اینه که کل بدنه یک رنگه نه این که فقط روش رنگ زده شده باشه (یعنی اگه روش خط بیفته زیرشم همون رنگیه). و بدنش یه‌تیکست. این گوشی یک گوشی (و ظاهرا اولین گوشی؟!) «تمام لمسیه» و روش هیچ دکمه‌ای نیست. فقط ۳تا دکمه
فهرست برنامه‌ها
 کنارش هست: یکی دکمه‌ی روشن‌خاموش (که البته می‌تونه برای کارهای دیگه از جمله قفل کردن یا از قفل درآوردن گوشی هم استفاده بشه) و یکی هم کم و زیاد کردن صدا (۲تا دکمه حسابش کردم). و تنها کاری که فقط با دکمه‌ها میشه انجام داد همون روشن و خاموش کردن گوشیه. پردازندش هم یه پردازنده‌ی تک‌هسته‌ای ۱ گیگاهرتزه. بقیشم اگه دوست داشتین خودتون برین بخونین.

یکی از مهم‌ترین نگرانی‌ها در مورد این گوشی، پشتیبانی نوکیا از اونه (با توجه به این که قرار نیست سیستم‌عاملش توی گوشی‌های دیگه استفاده بشه، حداقل توی گوشی‌های هوشمند نوکیا). خوشبختانه، تا الان ۲ تا به‌روز رسانی عمده برای این گوشی منتشر شده و آخرین نسخه‌ی سیستم‌عاملش، نسخه‌ی ۱.۲ه. و حداقل یه به‌روز رسانی دیگه (احتمالا نسخه‌ی ۱.۳) تو راهه. با وجود این که نوکیا رفت سراغ ویندوز ولی موقع استفاده از این گوشی حس نمی‌کنی که داری از یه سیستم نیمه‌کاره استفاده می‌کنی و واقعا روی سیستم‌عامل این گوشی کار شده. البته من سریعا گوشی رو به ۱.۲ ارتقا دادم و خیلی با نسخه‌های قبلیش کار نکردم. توی نسخه‌ی ۱.۲ امکانات جدیدی هم اضافه شده از جمله قابلیت تشخیص و شناسایی چهره (نه این که فقط محل چهره رو تشخیص بده، بلکه بفهمه این عکس کیه). صفحه‌کلید فارسی هم که برای نسخه‌های قبلی در قالب یه برنامه‌ی
برنامه‌ی AccuWeather

جدا در دسترس بود توی این نسخه به صورت پیش‌فرض وجود داره. و البته زبان خود گوشی رو هم توی نسخه‌ی ۱.۲ میشه فارسی کرد همون‌طور که توی عکس بالا می‌بینین :).

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

حالا می‌رسیم به بحث برنامه‌ها، که شاید یکی از مهم‌ترین دلایلی باشه که نوکیا N9 رو «نباید خرید». خود گوشی به صورت پیش‌فرض با یک سری برنامه‌ی مفید میاد از جمله: برنامه‌ی AccuWeather که تو عکس بالا هست، یه مرورگر بر مبنای webkit، کلاینت ایمیل، تقویم و ساعت، برنامه‌ی پخش موسیقی و نمایش اسناد pdf، Open Document و word و excel، نقشه‌های Ovi (از جمله نقشه‌ی ایران و شهر‌های بزرگ اون) با قابلیت مسیریابی، rssخوان، کلاینت‌های: skype, twitter, facebook, youtube, ap mobile، و بازی‌های Angry Birds, RF2011, RealGolf, NFS Shift و GOF2.
جدا از این برنامه‌ها، برنامه‌های زیادی هم میشه از اینترنت (از جمله Nokia Store) اضافه کرد. اما با توجه به آینده‌ی نسبتا تاریک این سیستم‌عامل، کسی حاضره برای این سیستم‌عامل برنامه تولید کنه مشابه برنامه‌های اندروید یا آیفون؟ حقیقت اینه که نه، و تعداد برنامه‌های این گوشی اصلا با برنامه‌های اندروید یا آیفون قابل مقایسه نیست. و منم وقتی گوشی رو می‌خریدم خیلی این قضیه برام مهم نبود. اما خوشبختانه، تا این لحظه خیلی کمبود خاصی حس نکردم. با این که تعداد برنامه‌ها زیاد نیست، اما در اکثر کاربردها تعداد خیلی مهم نیست و مهم اینه که کارایی مورد نیاز رو داشته باشی. بعضی جاها تعداد مهمه، مثلا توی بازی چون تنوع زیادی داره. اما توی کاربردهای دیگه خیلی اوضاع بد نیست. چند تا نکته این‌جا هست: خیلی برنامه‌های n900 احتمالا به n9 انتقال پیدا می‌کنند، برنامه‌های زیادی برای symbian هست که میشه یه سریش رو با تغییرات نسبتا کم به n9 انتقال داد، و این که n9 از برنامه‌های html5 هم پشتیبانی می‌کنه بنابراین احتمالا برنامه‌هایی که برای گوشی‌های وبی مثل Tizen میاد رو بشه به n9 هم انتقال داد. علاوه بر اون، اون شباهت میگو به سیستم‌های رومیزی گنو/لینوکسی این‌جا به درد می‌خوره: اکثر برنامه‌های رومیزی به صورت «بالقوه» برنامه‌های n9 می‌تونن باشن! نمونش اجرای VLC روی گوشی N9ه! مخصوصا وقتی در نظر بگیریم که توزیع‌هایی مثل فدورا و دبیان به طور تقریبا کامل می‌تونن برای این پردازنده کامپایل بشند.
اما خب، در مورد برنامه‌هایی که دست یک شرکت هستند اینجا به مشکل برمی‌خوریم. شرکت‌ها رو نمیشه مجبور کرد برای این سیستم‌عامل هم برنامه تولید کنند، و با توجه به گستردگی کم اون احتمالا هم این کار رو نکنند. برای همین، شاید هیچ وقت کلاینت Shazam برای این گوشی نیاد. یا خیلی سرویس‌های دیگه. در نتیجه، واقعا نمیشه این گوشی رو خیلی به کسی توصیه کرد! راستی یادم رفت بگم این گوشی از J2ME هم پشتیبانی نمی‌کنه، برای همین برنامه‌های جاوایی موبایلی رو نمیشه روش اجرا کرد. (اما میشه JaveSE Embedded روش اجرا کرد، در نتیجه یه سری برنامه‌های جاوای دسکتاپی رو می‌تونه اجرا کنه). البته یک سری برنامه‌های جاوای موبایلی رو هم با MicroEmulator میشه توش اجرا کرد.
گذشته از مورد بالا اوضاع خیلی هم بد نیست: Firefox (Fennec) + Flash، فرهنگ لغت، دانلود منیجر!، مدیر فایل، پخش کننده رادیو fm، قبله/قطب‌نما، ebook خوان، بارکد/qrcodeخوان، ضبط صدا، تقویم فارسی،‌ عکس برداری پانوراما، ویرایش عکس، سفارشی‌سازی یک سری تنظیمات، قرآن، کلاینت identica و غیره وجود دارند. ولی خب، آخرش احتمالا خیلی جاها اثری از پشتیبانی این گوشی نمی‌بینید. :)

ولی من گوشیم رو دوست دارم! مخصوصا که میشه جزء گوشی‌های developer friendly محسوبش کرد. خودش یه developer mode داره که وقتی فعال بشه یه سری امکانات اضافه میشه (مثلا یک ترمینال، و قابلیت اتصال ssh به گوشی) و میشه یه سری محدودیت‌ها رو برداشت. علاوه بر اون، کد هسته هم موجوده و میشه گوشی رو با اون هسته توی «حالت باز» یا Open Mode آورد بالا و کلیه‌ی محدودیت‌ها رو برداشت (پروژه‌هایی مثل inception هم تکمیل کننده‌ی قضیه هستند). و به خاطر همین قضیه پروژه‌ی اجرای آندروید روی N9 هم در جریانه و می‌تونه یه سیستم بوت دوگانه داشته باشه که بشه موقع روشن کردن گوشی انتخاب کرد که با اندروید بیاد بالا یا با میگو. (البته اندروید روی n9 فعلا در مرحله‌ی آلفاست و کامل کار نمیکنه). از طرف دیگه، تقریبا خوشبینم که بشه Tizen رو هم روی این گوشی آورد بالا، یا حداقل (و حتی بهتر از اون!) بشه برنامه‌های Tizen رو روی سیستم‌عامل این گوشی اجرا کرد (با توجه به این که این سیستم‌عامل پشتیبانی از برنامه‌های وب‌بیس رو داره).


۱۳۹۱ خرداد ۹, سه‌شنبه

فدورا ۱۷!

چند وقتیه نیستم این دو رو برا! که خب به خاطر یه مقداری بی‌برنامگی و مشغولیت و این چیزاست. الانم راستش خیلی آمادگی نداشتم ولی دیگه دلم نیومد هیچی نذارم مخصوصا که فردا فدورا ۱۷م میادش. :) برای همین گفتم یه مطلب کوچیک در مورد فدورا ۱۷ بذارم لااقل.

فدورا ۱۷ فردا میاد، با یه عالمه تغییرات و امکانات جدید... اما خب اکثرش خیلی قابل دیدن نیست. برای همین بعد از نصبش نباید انتظار داشته باشید خیلی چیز متفاوتی نسبت به فدورا ۱۶ ببینین!

اما خب، بد نیست ۲-۳ موردش رو بگم و برم؛
یکیش که GIMP 2.8ه که خب بعد از مدت‌ها یه نسخه‌ی جدید از gimp اومد. میگن این نسخه روی یه پایه‌ی جدیده (gegl فکر کنم!) که قابلیت‌های خوبی داره و توی gimpe 2.10 چیزهای جالبی ازش می‌بینیم. علاوه بر اون می‌شه تغییرات جزئی رو توی ظاهر گنوم و GTK جدید دید (مثلا ظاهرا نوار لغزش):


یکی دیگه هم اینه که توی نسخه‌ی ۲.۸ KDE بعد از مدت‌ها دوباره زبان فارسی به این محیط رومیزی اضافه شد. در واقع توی فدورا/ردهت این اولین باره که KDE هم زبان فارسی داره (اون قدیم که یه مدت یه سری ترجمه‌ی فارسی به KDE 3 اضافه شده بود نمیدونم به چه دلیل توی ردهت نذاشته بودنشون).


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


این نسخه از فدورا با گنوم ۳.۴ میاد و از جمله قابلیت‌هاش هم قابلیت اجرای گنوم شل بر روی CPU به جای کارت گرافیک برای سیستم‌هاییه که کارت گرافیک ضعیفی دارند یا درایور درست و حسابی ندارند!
البته قابلیت‌های جدید دیگه‌ای هم توی فدورا ۱۷ هست مثل gcc 4.7 و نسخه‌ی آخر (هنوز منتشر نشده‌ی!)‌ Eclipse، و یه ارتقای عمده از روبی ۱.۸.۷ به روبی ۱.۹.۳، شاخه‌ی tmp/ مجزا برای بعضی سرویس‌ها (که از نظر امنیتی قابلیت مهمیه)، استفاده از mingw64 برای تولید برنامه‌های ۳۲ و ۶۴بیتی ویندوزی، و قابلیت راه‌اندازی بدون دردسر multi-seat.

۱۳۹۱ فروردین ۴, جمعه

نوروز ۱۳۹۱ مبارک!

خب! سال ۹۰م با همه‌ی اتفاقاش تموم شد و رفت. اول از همه، شروع سال جدید رو به همه تبریک می‌گم و امیدوارم سالی پر از شادی و موفقیت، همراه با سلامتی داشته باشیم!


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

سال پیش اتفاقای خوب و بد زیادی برام افتاد... ولی خب کلا سال خوبی بود. مخصوصا آخرش! این سال با این که نیمه‌ی دومش یکمی اوقاتمو تلخ کرد ولی خب به‌جاش آخرش تلافی کرد :) یه جورایی میشه گفت بعد از تولد و مرگ، مهم‌ترین اتفاق زندگیم توی چند روز آخر سال پیش افتاد، در نتیجه سال ۹۰ سال خیلی خاصیه برام (که امیدوارم خیر باشه) و باعث شد سال ۹۱ یه سال خیلی خیلی جدید باشه برام. خلاصه بعد از این دیگه خیلی مجردا رو تحویل نمی‌گیرما، گفته باشم! ؛) D: