مهاجرت به آرچ

arch_pixelهفته قبل یکی از دوستان و همکاران بیمار (Geek) اعلام کرد که می‌خواد رو لپ تاپ اپل خودش آرچ بریزه. از اونجایی که من هم کم بیمار نیستم یه دفعه زد به سرم که آرچ رو هم امتحان کنم و این نظر من در موردشه؛

نصب

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

کلی چیز جدید در مورد توزیع‌های لینوکس و این که چطور کار میکنن یاد گرفتم.

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

Pacman

نرم‌افزار مدیریت بسته‌های آرچ Pacman هست که واقعا چیز باحالیه. فکر کنم هر نرم‌افزار رایگانی که توی دنیا هست توی آرچ بسته بندی شده‌ش هم هست. مخصوصا با وجود AUR هیچی از قلم نمیفته. حتی برای Scala و Sbt نسخه رسمی توی Pacman هست.

به نظر من کل آرچ خلاصه شده توی Pacman که البته ارزشش رو هم داره.

محیط‌های دسکتاپ (Desktop)

من عادت دارم یه ابزار رو از حالت پیشنهاد شده‌ش خارج نکنم. واسه همین مثلا دسکتاپ دیگه‌ای به جز Unity روی Ubuntu راه ننداختم. از طرفی مثلا از OpenSuse خوشم نمیاد واسه همین خیلی وقت بود که KDE رو امتحان نکرده بودم. اما آرچ کلا هیچ نظری نداره و میگه هرچی دلت خواست نصب کن و واقعا نهایت کمک رو هم بهت میکنه.

واسه همین من از بین محیطهای دسکتاپ Gnome، KDE و Xfce رو نصب کرد تا ببینم کدوم بهتره.

Xfce

یه محیط کاملا کلاسیک و قدیمی که البته میشه تقریبا به هر شکلی که بخوایی کانفیگش کنی. اونقدرها هم که میگن سبک نیست. شاید در بهترین حالت ۱۰۰ مگ رم کمتر از محیطهای سنگین مصرف کنه ولی در عوض هیچ کدوم از افکت‌های اونها رو نداره. اولش که اصلا زیبا نیست ولی اگر سلیقه داشته باشید یا یه تم خوب پیدا کنید میتونید خیلی خوشگلش کنید. نمی‌دونم چرا اما انگار Xfce یه آرامش خاصی داره.

چون قبلا LXDE رو دیده بودم دیگه اون رو نصب نکردم، تقریبا تو مایه‌های Xfce هست فقط بازم سبکتره.

Gnome

نسخه ۳ گنوم به نظر اصلا جالب نیست. بدترین ویژگیش اینه که از فضا خیلی بد استفاده کرده در حالی که ادعا میکنه مناسب برای تبلت هست. یه نوار که ۸۰ درصدش بیخودیه اون بالا همیشه هست. وقتی یه برنامه رو Full-screen کنی یه نوار بیخود دیگه اضافه میشه که فقط اسم برنامه توشه، یه نوار دیگه برای منو هم هست. کل اینها شاید نزدیک ۲۰٪ صفحه رو میگیره که واقعا تو مخه. برعکس Unity که واقعا عالی از فضا استفاده میکرد.

برای هر کاری باید یه پلاگین نصب کرد که یا دیگه ساپورت نمیشه یا باگ داره. ظاهرش رو دوست دارم اما بقیه چیزاش به دلم نشست.

KDE

خیلی وقت بود دوست داشتم KDE رو امتحان کنم. Plasma 5 رو نصب کردم که واقعا عالیه! اینکه میگن پیشرفته‌ترین دسکتاپ موجوده واقعا راست میگن. از طرفی قبلا (چند سال پیش) اصلا از ظاهر KDE خوشم نمیومد. اما این Plasma 5 زیباترین تمی که تاحالا دیدم رو به صورت پیشفرض داره. هم ساده، هم تمیز و هم زیبا.

اما اصلا Stable نبود. وقتی سیستم برای مثلا ۱۵ دقیقه بیکار میموند بعد از لاگین دوباره، هر چند ثانیه یکبار هنگ میکرد.

حالا نمی‌دونم کاملا اوکی شده یا نه ولی بعد از اینکه بسته xf86-video-ati رو حذف کردم فعلا انگار درست شده و مشکلی ندارم.

یکی از مسائل دیگه اینه که مثلا Variety روی KDE درست کار نمیکنه. میشه یه کارایی کرد ولی بعضی وقتا قاطی میکنه و دوباره تصویر پیشفرش دسکتاپ رو نشون میده.

نتیجه

خلاصه که آرچ خیلی باحاله و نقطه منفی در مورد آرچ ندارم بگم. اما در مورد محیطهای دسکتاپ، به نظرم هنوز Unity بهترین استفاده رو از فضا داره میکنه و واقعا Stable هست. اما KDE Plasma واقعا عالیه. هنوز نمی‌تونم بگم Plasma 5 بهتره یا Unity ولی حداق جهت تنوع هم که شده Plasma 5 خیلی داره حال میده.

Pacman که اصلا گفتن نداره واقعا عالیه و کامیونیتی آرچ هم حرف نداره. کاملا هم بالغه و حتی خیلی از مشکلات جزئی و روش حلشون رو از قبل توی مستندات نوشتن که داخل هیچ مستندات دیگه‌ای پیدا نمیشه.

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

لینوکس برنده شد!

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

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

اینکه سکو‌های مایکروسافت در آینده چقدر راه خود را در لینوکس باز می‌کنند هنوز قابل پیشبینی نیست و شاید به این زودی‌ها هم قابل پیشبینی نباشد. تجربه به من نشان داد که متن باز کردن به تنهایی نمی‌تواند باعث مقبولیت یک تکنولوژی شود. برای مثال تا وقتی Entity Framework پشتیبانی کاملی از بانک‌های اطلاعاتی غیر MS SQL نداشته باشد متن باز بودن آن بی معنی است. و از همه اینها مهمتر تا وقتی یک اجتماع از برنامه‌نویسان حرفه‌ای مستقل برای این سکو‌های متن باز شده شکل نگیرد، هیچ حرکت جدیدی صورت نخواهد گرفت.

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

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

چرا حس خوبی به لینوکس دارم

امروز روی یک سیستم قدیمی و از کار افتاده با حدود ۳۰۰ مگا بایت RAM و یک CPU بسیار ضعیف، توزیع Lubuntu نصب کردیم. این توزیع یکی از سبک‌ترین‌هاست. بخاطر قدیمی بودن سیستم روند نصب خیلی کند و سخت انجام شد ولی سیستم عامل بالا آمد و سرعتش هم بد نیست.

جدا از اینکه یک سیستم در حال مرگ که ۱۰ سال از عمرش می‌گذشت را نجات دادیم داشتم فکر می‌کردم زمانی که روی پلتفرم ویندوز کار می‌کردم همیشه از این هک‌های نجات سیستم‌های قدیمی، راه اندازی یک سرور کوچک روی آن‌ها یا حتی راه اندازی سیستم روی دستگاه‌هایی مثل RaspberryPi لذت زیادی می‌بردم ولی اینکه نمی‌شد با ویندوز این کارها را انجام داد و مجبور بودم هر روز روی ویندوز کار کنم یک حس بدی داشت. هر آدم گیکی این حس را درک می‌کند!

اینکه سیستم عامل روزانه‌ام که با استفاده از آن کار می‌کنم و نرم‌افزار تولید می‌کنم، سیستم عاملی که پروژه‌هایم روی آن‌ها اجرا می‌شود، سیستم عاملی که روی تبلتم اجرا می‌شود و حتی قابلیت اجرای روی RaspberryPi را هم دارد، اجازه می‌دهد این هک‌های لذت بخش را انجام دهم، یک حس توصیف نشدنی خوب می‌دهد؛ یکی دیگر از دلایلی که باعث شده حس خیلی خوبی به لینوکس داشته باشم.

اطلاعات جالبی از بازدید کنندگان وب سایت نمایشگاه کتاب تهران

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

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

بازه زمانی این آمار از ۶ تا ۱۰ اردبیهشت ۱۳۹۳ می‌باشد. نمایشگاه کتاب ۱۰ اردیبهشت افتتاح شد و ۲۰م به پایان رسید.

این آمار مربوط به بازدید کنندگان منحصر به فرد است که در این بازه زمانی حدود ۳۰۴ هزار نفر بوده‌اند.

بازدید کنندگان جهانی

countries

بیشتر بازدیدکنندگان از ایران بودند ولی با وجود اینکه میهمان ویژه نمایشگاه امسال افغانستان بود بازدیدکنندگان آمریکا و اروپا و خیلی جاهای دیگر، بیشتر از افغانستان بودند 😀

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

بازدید کنندگان ایرانی

iran

طبق آمار، بازدیدهای اصفهان بیشتر از هر جای دیگر حتی تهران بوده است.

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

روند بازدید در روزهای مختلف

days

روزی که بیشتر از همه بازدید داشتیم روز افتتاحیه (۱۰ اردیبهشت) بوده است و تقریبا بعد از آن روند نزولی داشته‌ایم.

نتیجه اخلاقی ندارد!

روند بازدید در ساعات مختلف

hours

بیشترین بازدید مربوط به ساعت ۱۱ صبح است. این الگو در روزهای تعطیل تغییر می‌کند.

نتیجه اخلاقی: در اوج ساعات اداری بیشترین بازدیدکننده را داشتیم. این اصلا نشانه خوبی نیست. در این ساعت کارمندان یا باید مشغول کار باشند و یا پاسخگوی ارباب رجوع.

سیستم‌های عامل

os

این یکی از جالب ترین آمارهاست. در روزهای تعطیل بعد از ویندوز ۷ بیشترین بازدیدها مربوط به اندروید بود، مخصوصا در ساعت اولیه روز. جالب اینجاست که ویندوز ۸ هنوز با اختلاف قابل توجهی از اندروید پایین‌تر است و الان بیش از یک سال از ارائه ویندوز ۸ می‌گذرد.

در انتهای لیست سیستم‌عامل‌های جالبی وجود دارند. QNX یک سیستم‌عامل Realtime است که واقعاً نمی‌دانم چطور ۳ نفر با استفاده از آن سایت را مشاهده کردند؟ البته ممکن است مربوط به سیستم‌های مانیتورینگ باشد. و از آن جالب‌تر ویندوز ۹۸ است!!! ۴ نفر با استفاده از ویندوز ۹۸ از این وب سایت بازدید کردند!

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

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

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

و اما مرورگرها

browsers1

لیست بالا ۲۵ مرورگر پر استفاده در بین بازدیدکنندگان را نمایش می‌دهد. و لیست پایین جایگاه IE 5.0 را نشان می‌دهد:

browser_ie5

هر چند در بین ۵۰ مرورگر کم بازدید قرار گرفته اما ۴ بازدید کننده داشتیم که با این مرورگر سایت را مشاهده کردند. از صمیم قلب آرزو داشتم بدانم چرا و چگونه این چهار نفر با IE 5 سایت را مشاهده کردند، در کجا زندگی می‌کنند و از چه امکاناتی برخوردارند؟ آیا با مودم Dial-up به اینترنت متصل شده‌اند؟ اصلا هدفشان از اتصال به اینترنت چه بود؟ آیا می‌خواستند تست کنند که سایت ما با IE 5 هم قابل مشاهده است؟ همین سوال‌ها را از آن ۴ نفر که با ویندوز ۹۸ آمده‌اند (که احتمالا همین ۴ نفر هستند)  هم دارم.

نتیجه اخلاقی: بیشتر مراجعه کنندگان دارای امکانات HTML 5 و CSS 3 هستند و این جای خوشحالی دارد و به طور قطع استفاده از ویژگی‌های جدید HTML و CSS پذیرفته شده است.

موتورهای جستجو

searchengine

نتیجه اخلاقی:‌ گوگل اختلاف واقعاً فاحشی (حتی شاید وحشیانه) با بقیه موتورهای جستجو دارد.

و ترافیک مصرفی در ۳۰ روز گذشته

traffic

اپ‌های موبایل نمایشگاه

چند شرکت اقدام به تولید نرم‌افزارهای تحت موبایل برای نمایشگاه کتاب کردند که آمار دانلود صورت گرفته آن‌ها به شرح زیر است:

  1. نرم‌افزارهای اندرویدی جمعاً ۱۴,۰۷۶ مورد کلیک (دانلود)
  2. نرم‌افزار آی او اس ۳,۴۲۲ مورد کلیک

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

چند نکته

  1. در ساعات اولیه روز به خصوص روزهای تعطیل، بعد از ویندوز ۷، بیشترین بازدید توسط سیستم عامل اندروید صورت می‌گرفت
  2. با استفاده از این روش محاسبه کردم که به طور متوسط ۴.۸ درخواست در هر ثانیه بر روی سرور بوده است
  3. تعداد کانکشن‌های باز بر روی پورت ۸۰ با استفاده از دستوری که قبلاً توضیح داده بودم در ساعات شلوغی به ۸۰۰ عدد می‌رسید
  4. بیشتر مراجعات بعد از صفحه خانه به صفحه جستجوی کتاب بوده است
  5. اطلاعات کتب توسط مرکز دیگری تهیه و به ما تحویل می‌شود و متاسفانه محل بسیاری از کتاب‌ها در نمایشگاه مشخص نبود

با تشکر از stat7.com برای آمارگیری، که سرویس خوبی دادند فقط گاهی اوقات از دسترس خارج می‌شد و در کل کمی نیاز به بهبود در زمینه سرعت پاسخگوی سرورها و احتمالا پهنای باند دارد.

وب سایت نمایشگاه کتاب بارگذاری شد

logoالبته وب سایت قبلا بارگذاری شده بود فقط روی یک پورت دیگر (غیر از ۸۰) بود تا اطلاعات وارد شده و تست‌ها انجام گیرد. حالا وب سایت در آدرس www.tibf.ir قابل مشاهده است.

سایت از تصاویر با کیفیت بالا تشکیل شده و فونت‌ها نیز از سرور دانلود می‌شوند. به همین دلیل برای بار اول کمی زمان می‌برد تا سایت به طور کامل دانلود شود. اما تصاویر Cache می‌شوند و برای دفعات بعد سرعت بالاتر خواهد بود.

مهم‌ترین بخش که سرعت کار را نشان می‌دهد قسمت جستجوی کتاب در آدرس http://tibf.ir/fa/book  است. با کلیک بر روی دکمه‌های صفحه‌بندی می‌توان سرعت اجرا را فهمید. همین الان بیش از  ۳۵۰ کانکشن هزمان بر روی سرور برقرار است و این مقدار روز به روز بیشتر می‌شود.

این سرور داخل ایران است و سرعت اینترنت سرور‌های داخل ایران محدود است و من واقعا نمی‌دانم این سرور با چه سرعتی به اینترنت متصل است اما همین الان پهنای باند مصرفی آن به ۷ مگا بیت بر ثانیه هم می‌رسد.

netusage 2014-04-24 21:18:28

و اما مصرف حافظه و سی پی یو؛

sysinfo 2014-04-24 21:27:30

این سرور دارای ۶ گیگا بایت رم و یک پردازنده ۶ هسته‌ای ۶۴ بیتی است.  ۲۸ درصد رم (RAM) معادل ۱.۶ گیگا بایت مصرف شده و لود سیستم زیر یک است. از آنجایی که سرور دارای ۶ هسته است مادامی که لود سیستم زیر ۶ باشد هیچ مشکلی وجود ندارد. در اینجا در مورد لود/Load بیشتر بخوانید. به عبارت ساده هنوز ندیدم سی پی یو بالای ۲۰ درصد استفاده شود.

متاسفانه هنوز اطلاعات کتب فارسی به دستم نرسیده و اطلاعات کتب فارسی مربوط به پارسال است ولی به محض اینکه اطلاعات به دستم برسد بارگذاری می‌کنم. اطلاعات سالن و غرفه هم به همین ترتیب.

لطفاً در مورد سرعت اجرای وب سایت و بقیه موارد نظر بدهید.

همکاری در Play Framework

برای اولین بار در Play Framework مشارکت کردم! البته این مشارکت فقط ۶ کاراکتر بود :) برای همین ۶ کاراکتر مجبور شدم موافقت‌نامه مشارکت در این پروژه را امضا کنم اما نکته جالب اینجاست که درخواستم در کمتر از ۲۴ ساعت در نسخه اصلی Merge شد.

نتیجه اخلاقی: به این میگن پروژه متن باز!

متن باز دات نتی

dotnet_logoامروز شرکت Xamarin و مایکروسافت اعلام کردند که در یک همکاری مشترک اقدام به ایجاد یک بنیاد مشترک به نام بنیاد دات نت می‌کنند و پروژه‌های بیشتری را متن باز خواهند کرد تا توسط این بنیاد اداره شود. البته پروژه جدیدی در لیست پروژه‌های این بنیاد دیده نمی‌شود و تقریبا خیلی وقت است که این پروژه‌ها، متن باز هستند؛ مثل ASP.NET MVC.

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

تک فرهنگی بودن

اگر مایکروسافت تمام دات نت را هم متن باز کند، تا زمانی که امکان اجرای آن بر روی سیستم عامل‌های غیر ویندوزی با همان کیفیت اجرا بر روی ویندوز وجود نداشته باشد در واقع آن نرم‌افزار‌ها را آزاد نکرده است و به عبارت دیگر انحصار‌هایی مثل Echo Chamber سر جایش باقی مانده.

مدل تجاری

در یک ویدئو دیدم که Miguel de Icaza (بنیانگذار Mono و بعدها شرکت Xamarin) می‌گفت در دنیای تجاری (غیر متن باز) بر خلاف دنیای متن باز مردم به راحتی برای محصولات پول خرج می‌کنند و این خیلی جالب است. محصولات شرکت Xamarin پولی هستند و اگر هم محصول متن بازی ارائه کرده است همه آن‌ها باید بر روی محصولات پولی Xamarin اجرا شوند (البته یک نسخه محدود شده مجانی دارد که فقط برای برنامه‌های بسیار ساده و کوچک قابل استفاده است). به عبارت دیگر شرکت Xamarin مدل تجاری شبیه مایکروسافت دارد.

در پرانتز: Miguel de Icaza یکی از افراد معروف در دنیای متن باز بود و جایزه‌هایی هم در این زمینه در حدود سال ۲۰۰۰ گرفت. اما کم کم تغییر مسیر داد تا جایی که در سال ۲۰۱۰ یک جایزه Microsoft MVP دریافت نمود.

خطر تجاری شدن

تجاری بودن یک نرم‌افزار به خودی خود هیچ مشکلی ندارد. بدترین چیز این است که یک نرم‌افزار متن باز در وسط کار تبدیل شود به یک نرم‌افزار تجاری! اتفاقی که همین چند وقت پیش برای Service Stack افتاد. Service Stack یک ابزار بسیار قوی در عین حال ساده است که قبلا هم در موردش نوشته بودم. متاسفانه نسخه جدید این ابزار خوب، دیگر متن باز نیست و برای استفاده از آن باید پول پرداخت کرد که البته از نظر خیلی از مردم کاملا غیر اخلاقی است.

مدل تجاری که جامعه دات نت با آن در ارتباط است باعث می‌شود توسعه‌دهندگان به این سمت بروند تا بتوانند کارشان را ادامه دهند.

جامعه (Community)

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

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

سرعت فضایی Scala و Play Framework و Mongo

so_happy_small

از شعف در پوست خود نمی‌گنجم!

برای پروژه اخیر اسکالا یک سرور مجازی بر روی یک سرور مجازی دیگر راه انداختم. چون سرور اصلی مجازی بود VMWare جواب نداد و از VirtualBox و مد Binary Translation که کندترین حالت مجازی سازی است استفاده کردم. ۱ گیگابایت رم و ۴۰ گیگابایت هارد به آن اختصاص دادم. یک سرور ۳۲ بیتی اوبتو ۱۲.۰۴ روی آن نصب کردم. بعد جاوا، MongoDB، Play Framework و بقیه. و خلاصه پروژه را رویش بالا آوردم.

یک سرور Git هم برای خودکار سازی انتشار برنامه بر روی سرور نصب کردم و با یک اسکریپت ساده برنامه را بر روی سرور Publish می‌کنم.

سرعت اجرا و پاسخگویی برنامه واقعاً عجیب است! یک لحظه شک کردم که شاید دارم با نسخه روی سیستم خودم کار می‌کنم. به یکی از بچه‌ها هم زنگ زدم و خواستم سایت را چک کند. او هم از سرعت بالای سایت تعجب کرد. همه چیز عالی و با سرعت و دقت کار می‌کند در حالی که فقط حدود ۱۰۰ مگابایت از رم سرور مصرف شده بود با فقط یک CPU  تک هسته‌ای ۳۲ بیتی که دو مرتبه مجازی سازی شده! 

رکوردهای یکی از جداول را زیادتر کردم تا به تعداد بیشتر از ۲۶۰،۰۰۰ رکورد رسید و کلی اطلاعات دیگر به سیستم اضافه شد. بعد از چند ساعت کار کردن با سرور، رم مصرفی کل سیستم (به جز cache) به ۴۴۰ مگابایت رسید ولی باز هم باورد کردنی نیست. یعنی خود لینوکس، جاوا، برنامه‌ها، بانک اطلاعات و خلاصه همه چیز، فقط ۴۰۰ مگابایت!!!

Screenshot from 2014-03-06 00:42:36

البته قبلاً با ۱ میلیون رکورد روی سیستم خودم (که آن هم لینوکس است) تست کرده بودم و باز هم سرعت باور نکردنی بود! ولی فکر نمی‌کردم با چنین سرور ضعیفی چنین پاسخی بگیرم.

همین تعداد رکورد را در SQL Server دارم. در حالتی که سر سرور خلوت است فقط ۸۰۰ مگابایت توسط SQL Server به تنهایی مصرف می‌شود! همیشه مجبور بودم یک سرور ویندوزی با حداقل ۴ گیگابایت رم تهیه کنم و برای SQL Server حتما از نسخه Standard یا Enterprise (نسخه‌های دزدی) استفاده کنم تا بتواند بیشتر از ۱ گیگابایت رم را استفاده کند و سرعت خوبی داشته باشد. خود ویندوز و دات نت و بقیه برنامه‌ها هم که بقیه رم را مصرف می‌کردند و تقریبا چیزی باقی نمی‌ماند.

Screenshot from 2014-03-06 00:50:07

متاسفانه بخاطر مسائل امنیتی تا کامل شدن کار فعلاً نمی‌توانم لینک وب سایت را منتشر کنم ولی به زودی این کار را خواهم کرد.

پیشنهاد می‌کنم اگر تجربه‌ی کار با لینوکس را ندارید حتماً در اولین فرصت شروع کنید.

چطور Scala و Play Framework را یاد می‌گیرم

یکی از خوانندگان وبلاگ (رضا) در مورد منابعی که برای یادگیری Scala و Play Framework استفاده کردم سوال کرد. متن زیر بیشتر شبیه یک سفرنامه است تا لیست منابع اما امیدوارم منابعی هم از آن قابل استخراج باشد :)

از آنجایی که من پیش زمینه دات نتی دارم شاید این روندی که من پیش گرفتم برای کسانی که پیش زمینه‌های متفاوت دارند کارساز نباشد.

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

بعد با کتاب Scala in Action شروع کردم که شاید انتخاب خیلی خوبی نبود ولی خواند تقریباً نیمه اول کتاب کمک خوبی بود و بقیه آن را نخواندم. شاید اگر الان آن را مطالعه کنم خیلی بهتر بفهمم. پیشنهاد می‌کنم اگر بخش‌هایی از این کتاب (یا کتاب مشابه) را متوجه نشدید به راحتی از کنارش عبور کنید و ادامه دهید.

همزمان با خواندن کتاب کم کم وارد تمرین‌های عملی شدم که بهترین ابزار همان REPL خود Scala است. بعد از نصب Scala کافی است در ترمینال تایپ کنید scala و وارد یک محیط محاوره‌ای می‌شوید که به راحتی می‌توانید دستورات Scala را تایپ کرده و همانجا نتیجه را مشاهده کنید.

مقایسه‌ها خیلی کمک می‌کند. مثلاً در اینجا معادل Extension متدهای مرسوم در #C برای Scala گفته شده.

وقتی در مورد Scala یا Play Framework جستجو می‌کردم و مطلب خوبی پیدا می‌کردم سریع عضو خوراک یا خبرنامه وب سایت یا وبلاگ مربوطه می‌شدم. از همین وبلاگ‌ها کلی مطالب جالب نصیبم شد. از این مرحله به بعد فقط با مطالعه وبلاگ‌ها، مستندات و سورس کدها ادامه دادم.

مرحله بعد شروع ساخت یک برنامه واقعی خیلی ساده بود. من نیاز به یک Time-sheet آنلاین داشتم که آنرا با Scala، Play و MongoDB شروع کردم و خیلی چیزها هم یاد گرفتم اما به علت مشغله کاری نیمه کاره رهایش کردم :) باشد که در فرصتی مناسب در Github بارگذاری کرده و ادامه دهم.

برای یادگیری Play Framework هنوز هیچ کتابی نخواندم ولی یک نگاه مختصری به کتاب Play for Scala انداختم و متوجه شدم که تقریباً همان مستندات خود سایت www.playframework.com است. مستندات Play مختصر و مفید هستند. در عرض چند دقیقه اولین برنامه‌تان با Play را می‌نویسید.

بدون شک بعد از یادگیری Scala و مطالعه مستندات Play Framework (از سایت خودش) و نوشتن برنامه‌های ساده با Play و Scala، بهترین منبع برای حرفه‌ای شدن در Play خواندن سورس‌کدهای آن در Github است. باور کردنی نیست که چقدر این کدها مختصر و مفید و تمیز و خوانا هستند. اولین بار است که برای فهمیدن اینکه یک متد از یک کتابخانه (که خودم ننوشتم) چکار می‌کند، ترجیح می‌دهم سورس آن را ببینم تا به مستنداتش رجوع کنم. بی دلیل نیست که خود Play هم برنامه‌نویسان را تشویق به مطالعه سورس‌ها و نوشتن کدهای مشابه می‌کند.

نکته اینکه؛ با وجود اینکه Play با زبان Scala نوشته شده است فقط برای Scala نیست و یک API مجزا مخصوص Java دارد که من فقط بر روی نسخه Scalaی آن تمرکز دارم.

برای من یکی از جالب‌ترین نکات بعد از مهاجرت به متن باز، وجود Community قوی و انرژی که افراد قدیمی برای یک فرد تازه وارد صرف می‌کنند است. وقتی جواب سوالی را پیدا نمی‌کردم آن را در Google Group مربوطه می‌پرسیدم که همیشه با توجه و کیفیت عالی و سرعت خوب پاسخ گرفتم؛

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

برای درک قدرت Community اشاره می‌کنم به یک سوال و جواب وحشتناک جالب در اینجا؛ یک بنده خدایی دنبال یک Wrapper با زبان Scala بر روی کتابخانه‌ای برای کار با Excel است. یک نفر پاسخ می‌دهد که یک API جالب ساخته ولی نمی‌داند رییسش اجازه می‌دهد کد را با دیگران به اشتراک بگذارد یا خیر. در این فاصله یکی از بچه‌ها API مربوطه را پیاده‌سازی کرده و در Github در دسترس عموم قرار می‌دهد.

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

و در نهایت شرکت در برنامه آموزشی Coursera بود که در موردش نوشته بودم و واقعاً‌ بهترین تجربه من در شرکت در یک برنامه‌ آموزشی تا کنون است که یک ساعت از آن می‌ارزد به تمام دوران دانشجویی که داشتم. البته این برنامه آموزشی بیشتر در مورد نحوه طراحی و نوشتن برنامه‌های Reactive است. مطلبی در خصوص Play در این برنامه تدریس نمی‌شود.

به طور خلاصه نه فقط برای Scala بلکه برای هر تکنولوژی دیگر که تازه می‌خواهم یادش بگیرم مراحل زیر را طی می‌کنم (تا کنون جواب خوبی گرفتم)؛

  1. مطالعه خیلی سریع و کلی صفحاتی مثل ویکی پدیا در مورد تکنولوژی مورد نظر
  2. آشنایی با سازندگان یا پشتیبانان تکنولوژی و سوابق کاری ‌آنها
  3. خواندن یک یا چند کتاب خوب (حتی نصفه و نیمه)
  4. دست به کار شدن و ساختن اولین برنامه
  5. عضویت خوراک وبلاگ‌ها و وب‌سایت‌های مرتبط
  6. سوال و شرکت در بحث‌های Community
  7. شرکت در Courseهای آنلاین

خوشبختانه این روزها در مورد هر موضوعی انقدر مطلب وجود دارد که نمی‌توان به راحتی یک منبع را برای آن معرفی کرد به همین خاطر ارجاء دادن به منابع را کافی نمی‌دانم و کل تجربه یادگیری را گفتم.