اندر باب سیستم توزیع بن کتاب نمایشگاه کتاب ۹۵

امسال هم مثل پارسال فروش بن دانشجویی از طریق سیستمی که با Scala و MongoDB پیاده کرده بودم انجام شد. البته کلی کار جدید و قسمت‌های دیگه مثل بن‌های اساتید و مهد کودک و … هم بهش اضافه شد و یکی از دوستام هم کمکم کرد و بالاخره طلسم تک نفری بودن پروژه شکسته شد. از همه اینها مهمتر نحوه پرداخت بود که برای اولین بار به جای درگاه پرداخت آنلاین یا همون IPG از طریق نرم‌افزار آپ انجام شد.

توی شبکه‌های اجتماعی و جاهای دیگه دیدم که خیلی از مردم ناراحت بودن و با اطمینان کامل از رد و بدل شدن پول کلان بین آسان پرداخت با مسئولان برگذاری نمایشگاه و همچنین قراردادهای بزرگ با تولید کننده‌های گوشی تلفن همراه مثل سامسونگ خبر می‌دادن! نمی‌دونم شاید پشت پرده خبری بوده که واقعا ما بی خبریم (هر چند احتمالش از احتمال ارسال آدم به مریخ توسط ایران تا ۲۴ ساعت آینده کمتره) ولی این اتفاقا منو یاد اون برنامه‌استعداد یابی که از یکی از شبکه‌های فاسد و خانمان بر انداز فارسی زبان بیگانه بخش شد (و می‌دونم که همتون قشنگ نشستید دیدینش یا حداقل قسمت‌های مهمش رو خبر دارید) و باعث شد مردم برای گرفتن حقشون! از هر راه ممکن برای اعتراض استفاده کنن تا شاید اتفاقات پشت پرده رو بشه و فلان و بهمان کرد…

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

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

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

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

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

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

من تو جلسه گفتم این تنها راه مطمئنی هست که جلوی اینطور دزدی‌ها رو میگیره. یعنی اگر کسی بخواد ۵۰۰ تا ثبت نام بکنه باید  آپ رو برای ۵۰۰ تا سیم کارت نصب کنه و البته اون سیم کارت به درستی اعتبارسنجی و قابل ردیابی میشه چون خرید سیم کارت بدون نام یه کم سخت شده (حداقل برای ما که سخته نمیدونم برای دزدها هم به اندازه ما سخت میگیرن یا نه؟). از طرفی تنها دستگاه هوشمندی که از هر دستگاه دیگه‌ای به انسان نزدیک‌تره موبایل هوشمند هست و این می‌تونست یه راه برای بیشتر سیستماتیک کردن احراز هویت باشه.

مشکل کار اینجاست که یه عده ممکنه تلفن هوشمند نداشته باشن. هرچند دانشجویی که تلفن هوشمند نداشته باشه رو تاحالا از نزدیک ندیدم (حتی از دور) ولی بالاخره چنین افرادی هستند. برای این هم قرار شد آخر کار یه مکانیزمی بذاریم که مثلا به صورت حضوری خرید کنن.

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

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

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

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

و برای حسن ختام برنامه یه ماجرای آموزنده از همین بانک شهر میگم؛

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

کاری نداریم که مهندس‌هایی که توی جلسه بودن صورت جلسه‌ای که همین مدیر عزیز دستور داده بود رو به خاطر بی احترامی که بهشون کرده بود امضاء نکردن! ولی همون شرکت پیمانکاری که این عزیز داشت به اعتبار اونها حرف میزد، نتونستن به یک وب سرویس REST فوق العاده ساده ما متصل بشن و یه سری اطلاعات رو توی پنل بانکشون نمایش بدن تا همه چیز آنلاین و در لحظه باشه تا دانشجویان بیچاره کمتر اذیت بشن. حالا تصور کنید کل سیستم توزیع بن رو اونها مینوشتن.

کاش کمتر حرف پوچ میزدیم و بیشتر عمل میکردیم.

 

آیا Reactive Manifesto واقعا مهمه؟

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

این صحبت تا حدی درسته اما وقتی مثال‌های واقعی رو بررسی کنیم ظاهرا خیلی هم درست نیست!

فیسبوک حدودا ۶۰ هزار سرور در سراسر دنیا داره (که البته تا الان خیلی بیشتر شده) تا بتونه جوابگوی حدود ۲ میلیون کاربر فعالش باشه. پس هر کدوم از سرور‌های فیسبوک به ۳۳ هزار نفر پاسخ می‌دن که خیلی هم عدد بزرگی نیست!

وقتی پاسخویی به ۳۳ هزار نفر روی یه سرور، شاهکار به حساب میاد، اهمیت توجه به مفاهیمی مثل BigData، برنامه‌نویسی همروند و Non-blocking و در کل Reactive Programming مشخص میشه. یادمون نره که Facebook فقط ظاهرش PHP هست ولی باطنش هر چیزی غیر از اون PHP‌ هست که ما میشناسیم؛ فقط بخاطر اینکه بتونه سرعت خیلی بالایی داشته باشه.

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

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

پس اینکه بگیم ما Facebook و Twitter نیستیم دلیل نمیشه که به کارایی بالا توجه نکنیم. البته باید دقت کنیم دلیلی هم نداره که خود پروژه رو فدای مسائل تکنیکی کنیم!

پیشنهاد من اینه که اگر میخواییم توی تولید نرم‌افزار باقی بمونیم، باید مفاهیمی مثل Reactive Manifesto رو جدی بگیریم.

بارگذاری ویدئو‌های کارگاه اسکالا جشن ۱۰ سالگی تهلاگ

آخرین به روز رسانی ۱۵ تیر ۹۵: بقیه ویدئو‌ها در یک پست جدید بارگذاری شد.

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

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

می‌تونید اسلایدهای این ارائه رو از اینجا یا اینجا دانلود کنید و در کنار ویدئو مشاهده کنید. مخصوصا وقتی متن‌ها توی فیلم خوانا نیست.

قسمت اول – ویدئوی اول

قسمت اول – ویدئوی دوم

قسمت اول – ویدئوی سوم (آخر)

سوال و جواب درباره یادگیری اسکالا

چند وقت پیش آرش در مورد رفرنس دادن به منابع آموزشی اسکالا سوال کرده بود که من هم ارجاع دادمش به مطلب قدیمی‌تر «چطور Scala و Play Framework را یاد میگیرم» و قرار شد ببینه چی کم و کسره و مطرح کنه تا توی وبلاگ جواب بدم که شاید برای بقیه هم کاربرد داشته باشه. فعلا این سوال‌ها رو ارسال کرده تا بعد.

پس اگر«چطور Scala و Play Framework را یاد میگیرم» رو نخوندید اول اونو بخونید، بعد برگردید اینجا.

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

من با اسکالا خیلی راحتم. بعد از گذشت یکی دو ماه از کار کردن مداوم باهاش خیلی حس خوبی پیدا کردم و از اون موقعه دارم از کد زدن با این زبان لذت میبرم. تا حالا، تنها چیزی که روی مخم رفته اینه که اگر فرم‌های Play Framework بیشتر از ۱۸ تا فیلد داشته باشه باید Nested بشه و خلاصه یعنی نمیشه بیشتر از ۱۸ تا فیلد Flat داشت. که البته این مشکل کتابخونه Play هست و میشه از ابزارهای دیگه مثل این استفاده کرد یا از اون بهتر خودمون فرم Play رو گسترش بدیم ولی این دردسرها به Strongly-type بودن چارچوب وب می‌ارزه. بنابراین خود زبان اسکالا تا حالا روی مخم نرفته و از کد زدن باهاش لذت بردم و نمیتونم ایراد خاصی ازش بگیرم.

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

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

یک سوال دیگه هم که مطرح می‌شه اینه که رابطه اسکالا و جاوا به چه صورته ؟

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

لازم می‌شه به جاوا سرک کشید ؟

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

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

نکته:‌ متاسفانه مدرسه اسکالا با نسخه ۲.۸ اسکالا کار شده و ظاهرا به روز رسانی نشده (نسخه کنونی اسکالا ۲.۱۱ هست). هرچند تقریبا همه مطالب از نسخه ۲.۸ تا ۲.۱۱ مشترک هست ولی ممکنه یه چیزایی فرق کنه. مهمتر از همه اینه که اگر به یه کتابخونه ارجاع بدی باید دقت کنی که کدوم نسخه از کتابخونه مورد نظر با نسخه اسکالات همخونی داره.

می‌شه از کتابخونه‌هاش (جاوا) به راحتی استفاده کرد ؟

بله میشه. من تجربه کمی توی این زمینه دارم چون همونطور که گفتم همیشه یه کتابخونه خوب اسکالا وجود داشته. اما به طور کل پیشنهاد میکنم وقتی برای یه کاری کتابخونه اسکالا هست سراغ جاوا نری. فلسفه اسکالا با جاوا فرق میکنه. ولی در نهایت استفاده از کتابخونه جاوا مشکلی ایجاد نخواهد کرد.

اگر آره، راهی برای کنترل side-effectها وجود داره ؟

Side-effect معمولا دو حالت داره: ۱) به مرحله‌ای رسیدی که باید Side-effect داشته باشی مثل کار با IO (ورودی و خروجی). ۲) بیخودی داری Side-effect ایجاد میکنی.

خدا رو شکر اکثر کتابخونه‌های جاوا انقدر بالغ و قوی هستند که مورد ۲ رو به حداقل برسونن. برای مورد اول هم که مشکلی نداریم بالاخره توی اسکالا هم یه جایی نیاز به Side-effect داریم فقط باید جاش درست باشه. در بدترین حالت گفتم به راحتی میشه یه Wrapper روش کشید. تازه با وجود Akka میشه کارای واقعا جالبی در خصوص حذف Side-effectها کرد.

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

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

آره دقیقا موقعیت من همینه، مثل سی شارپ، اصلا یادم رفته چطور اسکالا رو یاد گرفتم.

ولی اگه بخوام یه ابزار باحال معرفی کنم، میگم شاید بهترین ابزار برای یادگیری و کار با اسکالا Activator باشه. Activator هم یه ابزار برای ساخت و توسعه برنامه‌ها هست و هم یه ابزار آموزشی خیلی عالیه. کلی نمونه پروژه ساده و پیچیده برای اسکالا هست که به راحتی با Activator UI میتونی بررسیشون کنی. وقتی Activator UI رو اجرا میکنی خودش برات یه سرور راه اندازی میکنه (که اون هم با اسکالا و Play ساخته شده) و یه محیط خیلی زیبا میاره بالا که توش میتونی دنبال پروژه‌های نمونه بگردی، دانلودشون کنی، کدها رو مشاهده کنی، کامپایل و اجراشون کنی، تستشون کنی و حتی کدها رو توی Browser تغییر بدی. اگر پروژه Tutorial داشته باشه میتونی مرحله به مرحله با خوندن مطالب و کد جلو بری. Activator حرف نداره!

نکته خیلی مهم: پیشنهاد میکنم قبل از کار با Activator اول sbt رو یاد بگیری و بفهمی کلا کارش چیه و چطور کار میکنه (نمیخواد خیلی عمیق بشی). فکر کنم همین مدرسه اسکالا برای شروع خوبه.

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

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

جشن ده سالگی لاگ

بالاخره توی جشن ده سالگی لاگ با کارگاهی در مورد پروژه‌های انجام شده با اسکالا و خود زبان و اکو سیستم اسکالا حضور داشتم و خیلی لذت بردم. من حدودا یک سال هست که لاگ رو میشناسم و متاسفانه فقط دو بار تونسته بودم توی جلساتش شرکت کنم و اینکه شرکتم برای بار سوم با برگذاری یه ارائه بود خیلی برام لذت بخش بود.

IMG_8072resized

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

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

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

به نظر خودم چندتا مشکل توی ارائه وجود داشت:

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

قسمت‌های خوب این ارائه:

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

بخش اول ارائه که تموم شد دیدم جادی اومد داخل! اولین بار بود جادی رو از نزدیک میدیدم خیلی خوشحال شدم! جادی از اون شخصیتی که فکر میکردم هم خیلی بهتره. یه آدم متواضع، حرفه‌ای، مهربون و دوست داشتنی. کلی هم عکش باهاش گرفتیم. جادی Celebrity گیک‌هاست. مخصوصا که وبلاگش اولین وبلاگ لینوکسی بود که من بعد از مهاجرت به لینوکس باهاش آشنا شدم و خیلی الهام بخشم بود.

خیلی دوست داشتم نظر تک تک بچه‌هایی که توی این ارائه بودن رو جویا بشم. اگر گذرتون به این پست افتاد و توی ارائه بودید یا اسلایدها رو دیدید حتما نظرتون رو بگید. چه مثبت چه منفی.

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

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

photo_2015-08-11_23-59-53

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

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

زمان: پنج‌شنبه مورخ ۱۵ مردادماه از ساعت ۹
مکان: تهران – خیابان ملاصدرا- خ شیراز شمالی – خ حکیم اعظم – پلاک ۳۰ – موسسه آموزش عالی خاتم (​لینک گوگل‌مپ)

جزئیات برنامه‌ها:

یک و نیم ساعت ابتدایی:

کلاس ۱۰۵: گام‌های نخست آزادی (قسمت اول) (آشنایی تئوری و عملی با گنو/لینوکس) توسط دانیال بهزادی از گروه کاربران ایرانی اوبونتو
کلاس ۲۰۵: خدمات متقابل اندروید و لینوکس توسط رضا محمدی از شرکت کافه بازار
کلاس ۱۰۳: تجربه‌ای عملی با زبان اسکالا (سختی‌ها و راه‌حل‌های پیاده‌سازی نمودن سایت پربازدید و پرتراکنش نمایشگاه کتاب ۹۴ با زبان اسکالا) توسط امیر کریمی
کلاس ۱۰۴: توسعه وب با زبان Go توسط فرود غفوری از شرکت وادا (آزمونا)
کلاس ۱۰۶: نرم‌افزار کنترل ورژن Git توسط سعید رسولی از شرکت پارس‌پویش
کلاس ۱۰۷: آشنایی با ابزارهای ذخیره‌سازی و تحلیل داده‌های بزرگ توسط فرید دهقان

نیم ساعت میانی:
طبقه منفی یک: پذیرایی

یک و نیم ساعت میانی:
کلاس ۱۰۵: گام‌های نخست آزادی (قسمت دوم) (آشنایی تئوری و عملی با گنو/لینوکس) توسط دانیال بهزادی از گروه کاربران ایرانی اوبونتو
کلاس ۲۰۵: شروع طراحی وب در گنو/لینوکس توسط پیام صادری از Xenon, Copywriting Agency
کلاس ۱۰۳: Create your own language توسط حمیدرضا سلیمانی از شرکت بیسفون
کلاس ۱۰۴: نوشتن Library با JavaScript توسط افشین مهربانی
کلاس ۱۰۶: آشنایی با هسته لینوکس توسط سعید تقوی
کلاس ۱۰۷: کسب درآمد توسعه دهندگان و تجاری سازی نرم افزارهای آزاد و متن باز توسط علیرضا حسین‌نژاد

نیم ساعت پایانی:
طبقه همکف، سالن ۳۰۰ نفره: برنامه عمومی و اختتامیه

پس وعده دیدار ما ۱۵ مرداد ساعت ۹ کلاس ۱۰۳ :)

منبع اطلاعات: ایمیل بهنام توکلی به لیست پستی لاگ. اطلاعات بیشتر در سایت تهلاگ.

خطای کمبود RAM روی سرور مجازی

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

برای دست گرمی این تجربه رو به انگلیسی نوشتم که حس میکنم زیاد جذاب نیست ولی بهتر از هیچیه:

https://coderwall.com/p/c1z3vq/jvm-s-insufficient-memory-error-and-the-swap

به قول خارجی‌ها Your feedback is very welcome

ارائه تجربیات پروژه‌های اسکالا

چند وقت پیش تصمیم گرفتم تجربیاتی که توی پروژه‌های نمایشگاه کتاب (ثبت نام ناشران و بن کتاب) داشتم رو توی تهلاگ (TehLug) ارائه بدم. خیلی از بچه‌ها هم لطف داشتن و استقبال کردن. به هر حال قرار شد برای جشن ده سالگی لاگ که ۱۵ مرداد هست، جزو یکی از ۱۲ کارگاه تخصصی این مناسبت باشه.

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

من هنوز اسلایدهای ارائه رو آماده نکردم ولی خیلی در موردش فکر کردم! یه صحبت‌هایی دارم که فکر میکنم یه کم متفاوت هست. علاوه بر اینکه از نظر فنی کلی حرف هست که باید بزنم از نظر فلسفی و فکری و … هم حرفایی هست که معمولا زده نمیشه و فکر میکنم خیلی به برنامه‌نویسا و گیک‌ها کمک میکنه. هر چی باشه من داره ۳۰ سالم میشه و کم کم وقت نصیحت کردن جوونترها داره میرسه 😀

کلا حس خیلی خیلی مثبتی به این ارائه دارم و امیدوارم همه چیز به خوبی و خوشی پیش بره. تنها نگرانیم این هست که زمان برای درست کردن اسلایدها خیلی کم دارم!

زمان دقیق ارائه‌ها رو نمیدونم ولی همونطور که گفتم ۱۵ مرداد هست یعنی ۹ روز دیگه. شرکت در این جشن برای همه آزاد و رایگانه. از همینجا از همه علاقه‌مندان به برنامه‌نویسی و خصوصا گیگ‌های عزیز دعوت میکنم که حتما شرکت کنن. مخصوصا توی ارائه من 😀

در صورتی که اطلاعات بیشتری به دستم برسه حتما اطلاع رسانی میکنم.

رها سازی Xcala

منظورم از رها سازی همون Release هست!

Xcala (اِکس کالا) یک کتابخانه از کدهای پر کاربرد برای تولید نرم‌افزارهای تحت وب با اسکالا، Play و MongoDB هست.

بعد از تجربه Xoqal (زغال) حالا یک سالی هست که سعی کردم تجربیات و کدهای پر استفاده‌ام روی اسکالا رو داخل یه پروژه به عنوان یه Application Library جمع کنم. امروز این پروژه که اسمش Xcala هست و تاحالا بیشتر از ۱۰ تا پروژه از جمله وب سایت نمایشگاه کتاب تهران، سیستم فروش بن کتاب نمایشگاه بین‌المللی، سیستم ثبت نام ناشران نمایشگاه کتاب و چندتا پروژه‌های دیگه روی این کتابخونه بنا شدن.

هر چند این پروژه نیاز داره یه کمی پولیش بشه ولی به هر حال حاصل یک سال تجربه کارم با اکو سیستم اسکالاست.

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

چه ابزاری بهتره؟

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

به نظرم توی این بازی میشه با دوتا استراتژی جلو رفت:

  1. یک سلاح رو که از همه بهتره برداریم و کلا بچسبیم به همون و دیگه درگیر خرید و تعویض و این چیزها نشیم
  2. از انواع سلاح و ابزار استفاده کنیم. مثلا استفاده از نارنجک، Shield و … که در این صورت لازمه حسابی توی تعویض ابزارها و استفاده به موقعه ازشون حرفه‌ای بشیم

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

این حکایت زبان‌های برنامه‌نویسی ساده و پیچیده هست. زبان‌های ساده مثل Go و Python و زبان‌های پیچیده‌تر مثل Scala و Rust. کار با زبان Go یا Python مثل کار با یک سلاح خاصه بدون اجازه خلاقیت و عدم وجود چند راه برای انجام یه ماموریت. اما کار با زبان Scala یا Rust یا هر زبانی که ازش به عنوان یه زبان پیچیده یاد میشه مثل استفاده از چند سلاح و ابزار و وجود چند راه مختلف برای انجام یه مامویت هست. به عبارت دیگه مثل چاقو سوئیسی هستن.

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

نکته: Simple != Easy ؛ ممکنه چیزهایی که ما امروز پیچیده میدونیمشون، بعدها ازشون به عنوان یه چیز ساده (نه الزاما آسون) یاد بشه.