ترافیک لحظه‌ای روی گوگل مپ

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

google_map_tehran_traffic

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

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

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

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

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

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

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

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

 

دوره آموزشی رایگان توسعه REST API با Play Framework نسخه Java

rayan_free_courseشرکت رایان هم افزا داره یه دوره رایگان آموزشی با زبان Java و چارچوب Play و Spring برگزار میکنه. فرصت خوبی برای کسانی هست که با زبان Java آشنا هستند و می‌خوان یه پیشرفت اساسی توی این زبان و چارچوب‌های مدرن داشته باشن.

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

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

 

 

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

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

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

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

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

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

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

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

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

خودآموز اسکالا در Udemy

امروز یه نفری از Udemy به زبان انگلیسی به من ایمیل زد که شما توی وبلاگت لینک دادی به Scala School و ما در Udemy اومدیم یه منبع جدید درست کردیم که میتونه یه مکمل خوب باشه برای یادگیری اسکالا در کنار بقیه منابع. حالا خواسته بود اگر کارشون خوبه، توی این وبلاگ معرفیش کنم. به نظر من که خیلی زحمت کشیدن و خیلی میتونه توی یادگیری اسکالا کمک کنه. در عین مختصر بود خیلی مفید و کاربردیه.

با افتخار، آدرس این منبع هست: https://blog.udemy.com/scala-tutorial-getting-started-with-scala

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

خلاصه که کارشون درسته، دمشون گرم. اگر می‌تونید حمایتشون کنید.

 

مقایسه تجربی روبی، جاوا اسکریپت و اسکالا

بعد از یه مدت قابل توجه کار درست و حسابی و واقعی با سه زبان روبی، جاوا اسکریپت و اسکالا، حالا میتونم به راحتی در موردشون نظر بدم. قطعا این مقایسه فقط از نظر زبان نیست بلکه از نظر اکو سیستم اونهاست.

بیشتر کار من با روبی روی Ruby on Rails، با جاوا اسکریپت روی AngularJS و با اسکالا روی Play Framework بوده.

شروع یادگیری

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

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

کتابخانه‌ها

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

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

روبی هم از نظر تعداد و هم از نظر کیفیت کتابخونه‌های خوبی داره. فکر کنم بین این سه تا بهترین باشه.

کامیونیتی

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

به نظر من کامیونیتی اسکالا حرف اول رو میزنه و سطح خیلی خیلی بالایی داره.

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

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

راحتی و سرعت در تولید

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

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

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

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

نگهداری و تغییر کد

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

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

تست اتومات و دیباگ

چند وقتی هست که بیشتر از همیشه دارم تست مینویسم و البته خیلی هم راضی هستم.

چارچوب Rails قوی‌ترین و راحتترین امکانات تست رو داره. فکر همه چیز رو کردن و در کمترین زمان و با بهترین کیفیت میشه برای هر قسمت از برنامه و در هر سطحی (Unit یا Functional) تست نوشت. برای دیباگ هم، هم میشه از امکانات IntelliJ به راحتی استفاده کرد هم Gem ی مثل ByeBug واقعا دیباگینگ رو برای آدم لذت بخش میکنه.

ابزارهای تست جاوا اسکریپت زیاد قوی نیست و مخصوصا دیباگ کردن واقعا عذاب آوره. حتی console.log هم خیلی از جاها کار نمیکنه. AngularJS سعی کرده از اول کار تست رو راحت کنه ولی فقط Unit Testing رو راحت کرده و Integration Test به سختی و به کندی قابل انجام هست و اصلا لذت بخش نیست. دیباگینگ Integration Test توی Angular یکی از رنج آور ترین کارهای عالمه.

تست توی اسکالا به اندازه روبی راحت نیست ولی واقعا لذت بخشه و جزیی از سیستمه. از روز اول هم فکرش شده بوده و چیزی نیست که بعدا به سیستم اضافه شده باشه. IntelliJ هم که مثل بنز ازش پشتیبانی میکنه و دیباگینگش فوق العاده قویه. از اونجایی که اسکالا Static-type هست، وقتی برای یه نرم‌افزار تست بنویسی دیگه کاملا خیالت راحته که همه چیز اونطور که باید پیش میره و نیازی نیست به اندازه زبونهای دینامیک تست‌های واضح و مبرهن بزنی.

 ابزارهای توسعه (IDE)

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

به هر حال ساختن ابزارهای کمکی برای توسعه زبان دینامیک کلا کار سختیه و بعضی جاها غیر ممکنه.

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

سرعت اجرا

واضحه که اسکالا از همه سریعتره و چارچوب Play بالاترین کارایی رو داره. هم از نظر سرعت و از نظر مقیاس پذیری (Capability). حتی چارچوب‌های وب Rust، Go و بقیه زبون‌ها هم توی تست‌هایی که روی لپ تاپ خودم گرفتم نمیتونن به پای Play برسن.

بازار کار

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

وضعیت نیروی انسانی

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

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

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

نتیجه گیری

نتیجه گیری نداریم! با هر زبونی که حال میکنید کد بزنید.

این خانه از پایبست ویران است

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

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

موضوع سر پروژه‌های نمایشگاه کتاب هست که از نظر فنی و اجرایی یکی از افتخاراتم هست و توی جشن ۱۰ سالگی لاگ تونستم در مورد تجربیات فنی و اجرایی این پروژه صحبت کنم که البته روی مثبت و سفید قضیه بود. توی این پست میخوام از تجربیات غیر فنی که کاملا منفی و سیاه هست بگم. مخصوصا که کارفرمای این پروژه جونم رو به لبم رسونده.

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

بعضی از آدمهایی که در مورد زیاد بودن این هزینه تصمیم میگیرن خودشون با بنز C Class و با راننده شخصی رفت و آمد میکنن. حتی چایی که میخورن با بقیه کارمندا فرق داره! هزینه نگهداری این بنز و راننده و … چند برابر مبلغ این قرارداد پشتیبانی هست! دوباره به مبلغ‌ها و آورده‌های این پروژه نگاه کنید.

جالب اینجاست که من هیچ اصراری برای انجام این پروژه نداشتم و بعضی از مدیران رده پایین‌تر داخل این سازمان باعث شدن که این کار رو قبول کنم. کاری نداریم که اولش به من سه تا فرم ساده که جمعا ۳۰ تا فیلد هم نمیشد دادن و گفتن سیستم هیچی بیشتر از این نیست و من قیمت رو بر اساس اون دادم ولی بعدش سیستم تبدیل شد به یه قول بی شاخ و دم! و البته با موفقیت انجام و اجرا شد.

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

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

بعد از یه کم بررسی و فکر، به این نتیجه رسیدم که ۸۰ درصد افراد داخل سازمان‌های بزرگ کشور، نیروی مازاد هستند و با هزینه بسیار اندک میشه با یه نرم‌افزار خوب جایگزینشون کرد. نگران از بین رفتن شغل نباشید! این موقعیت‌ها شغل نیستن اینها عین بیکاری هستن. مگه میشه یه زمین فوتبال رو پر از آدمهایی کرد که نه تنها برای برد تیم هیچ تلاشی نمیکنن بلکه ایستادن یه جا و برای هم تیمی‌ها جفت پا میگیرن تا با مخ برن تو زمین؟

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

بالاخره دست از کار کشیدم و اعلام کردم تا قرارداد امضاء نشه و پول ندن کار نمیکنم.

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

یه سوال؛ واقعا از من توقع میره که بمونم ایران و این مسائل رو (حالا به سهم خودم یا هر چی) درست کنم؟ واقعا این انتظار وجود داره؟ شما جای من بودید چیکار میکردید؟

و در نهایت تجربه من اینه که؛ این خانه از پایبست ویران است.

پ.ن: چند روز پیش یه ویدئو دیدم که تاریخ جغرافیایی ایران رو به صورت Timeline روی نقشه نمایش میداد. برای اولین بار دلم برای ایران سوخت! ولی به هر حال من خودم رو «زمینی» میدونم تا «ایرانی». فقط همین یه کم بهم آرامش میده.

به روز رسانی:

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

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

به هر حال این گلدون نابود هم بشه تاثیر خاصی توی زندگی من نداره و نخواهد داشت. ولی برای این کشور خیلی تاثیر گذاره.

خلاصه اهمیت مالی موضوع صفره! مسئله اینجاست که این خونه‌ای که از پایبست ویرانه رو باید چیکارش کرد؟

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

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

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

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

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

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

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

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

افتتاح وب سایت انگلیسی

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

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

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

یه نکته مثبت دیگه‌ش اینه که چون روی Github هاست شده اگر یکی دوست داشته باشه میتونه به راحتی غلط گیری کنه و Pull Request بفرسته. شاید هیچ کس حال و حوصله و همت مشارکت برای اصلاح اشتباهات من رو نداشته باشه ولی همین که امکانش هست، بهم اعتماد به نفس بیشتری میده. از همه مهمتر چشم امیدم به خارجی‌ها خیلی خیلی بیشتر از هموطنا هستش (هر چی باشه جمعیتشون خیلی بیشتره).

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

پی‌نوشت: خوشبختانه از وقتی رفتم توی دنیای متن باز، مرتب با آدمهای قوی‌تر و با ارزش‌تری توی ایران آشنا شدم و قطعا هموطن‌های خیلی عالی هم دور و برمون هست ولی وقتی تعدادشون رو میشمرم به نسبت جمعیت کل آدمهایی که دور و اطرفم هستن (با اینکه خیلی اجتماعی نیستم)، خیلی کم هستن. متاسفانه!

 

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

چند وقت پیش آرش در مورد رفرنس دادن به منابع آموزشی اسکالا سوال کرده بود که من هم ارجاع دادمش به مطلب قدیمی‌تر «چطور 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 رو یاد بگیری و بفهمی کلا کارش چیه و چطور کار میکنه (نمیخواد خیلی عمیق بشی). فکر کنم همین مدرسه اسکالا برای شروع خوبه.

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

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