۱۳۹۴-۰۵-۲۸

۱۳۹۴-۰۵-۲۵

تولید سرویس REST با استفاده از Play Framework 2.4، Scala و ReactiveMongo

پروژه ReactiveMongo هنوز به نسخه ۱ نرسیده ولی کاملا آماده و قابل استفاده در پروژه های عملیاتیه. قبلنا مستندات سایت ReactiveMongo کامل نبود، البته نه که فکر کنید الان کامله ولی باز خیلی بهتر از قبله و قسمت مستندات سایتشو کلی کامل کردن. اما بازم وقتی یه تازه کار وارد اون قسمت میشه ممکنه یکم گیج بشه. من در اینگونه مواقع دنبال یه sample project می گردم.
یک پروژه درست کردم و توی github گذاشتم، این پروژه توضیحات مستند مربوط به Play2-ReactiveMongo سایت ReactiveMongo رو در قالب یک مثال قابل اجرا برای تولید سرویس REST آورده.

امیدوارم بدرد تازه کارها بخوره.

شاد باشید.

۱۳۹۴-۰۵-۱۹

استفاده از spring data mongodb در play framework

امروز برای اتصال به mongodb با استفاده از play framework از spring data mongodb استفاده کردم. کلا پروژه spring data رو خیلی قبول دارم، یک پروژه بالادستیه که یکی از اهداف مهمش اینه که با قرار دادن یک لایه abstraction در لایه اتصال با دیتابیس یکسری کارهای تکراریو ساده کنه و همچنین بعنوان یک کتابخانه مشترک برای اتصال به RDBMS ها و NoSQL ها باشه. 
کتابخانه spring data mongodb زیر مجموعه همین پروژس که امکان استفاده از قابلیت های خاص mongodb در spring data رو پیاده سازی کرده.




۱۳۹۴-۰۵-۱۸

مزیت استفاده از Constructor Injection و Setter Injection بجای Field injection

چند وقت پیش برای یک موقعیت شغلی به یه جلسه مصاحبه رفتم، بعد از سال ها بود که یه مصاحبه فنی درست حسابی ازم گرفته شد. فکر کنم آخرین بار شهرام (جاویدنیا) توی شرکت بهین پژوهش (حدود ۳ سال پیش) بود که یه مصاحبه فنی درست درمون ازم گرفته بود.
حدود ۱۴ یا ۱۵ سوال فنی ازم پرسیدن فکر کنم ۳ یا ۴ تاشو جواب ندادم یا ناقص جواب دادم (البته تو مصاحبه پذیرفته شدم)، یکی از مواردی که ناقص جواب دادم همین بود که استفاده از Constructor Injection بهتره یا Field injection؟
می دونستم که Constructor Injection بهتره (علارقم اینکه همیشه خودم Field injection استفاده می کنم) ولی دلیلشو نمی دونستم! و جواب ندادم.
یه سوال تو جواب یاب در همین زمینه مطرح کردم که شاید براتون جالب باشه.

شاد باشید. 

۱۳۹۴-۰۵-۱۷

تفاوت روش های Table Per Class و Joined در نگاشت وراثت در JPA چیست؟

این سوال رو خیلی وقت پیش در جواب یاب پرسیده بودم تا سر فرصت بهش جواب بدم. کلا اگه performance برامون مهمه و قابلیت پلی مرفیسم در وراثت JPA برامون مهم نیست بدون شک روش  Table Per Class خیلی بهتره و فکر می کنم تنها مزیت روش Joined اینه که بصورت کامل از قابلیت پلی مرفیسم در وراثت JPA پشتیبانی می کنه.

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

۱۳۹۴-۰۵-۰۹

ارزش دوست داشتن واقعی

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

۱۳۹۴-۰۵-۰۴

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

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

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

شاید با این کار سرانه مطالعم بره بالا.

۱۳۹۴-۰۴-۳۱

از کار افتادن فید سایت DZone

سایت DZone یکی از سایت های مورد علاقه من برای مطالعه اخبار و مطالب فنی در زمینه software development، ولی حدود ۲ یا ۳ هفته ای میشه که مثل اینکه فید (rss) سایتشون غیر فعال شده و من دیگه مطلبی از DZone در inoreader نمی بینم!!!
به سایت DZone هم سر زدم کلا مثل اینکه تغییرات زیادی کرده و کلا همه فید ها حذف شده. واقعا چرا؟
نمی دونم DZone برام انقدر با ارزش هست که بجای فید هر روز به سایتش سر بزنم؟

۱۳۹۴-۰۴-۲۴

قاطی کردن ایرانسل

از صبح کسی نمی تونه بهم زنگ بزنه ولی من می تونم به بقیه زنگ بزنم!!! بجز بعضی ها که خطشون ایرانسل ولی به بعضی از ایرانسلی ها هم می تونم زنگ بزنم. خیلی پیچیده شد. فکر کنم یه چیزی تو ایرانسل ترکیده. الانم یه چیزی حدوده ۵۰ تا sms برام اومده که افراد مختلف نتونستن به من زنگ بزنن.
حالا الان نمی دونم وصلم قطعم...

۱۳۹۴-۰۴-۲۳

بالا رفتن محبوبیت زبان برنامه نویسی اسکالا بخاطر Apache Spark

در بین ده ها زبان های برنامه نویسی که برای JVM وجود دارند، تا به حال فقط جاوا (بعنوان زبان برنامه نویسی پیشفرض بر روی JVM) محبوبیت فراوانی بین توسعه دهندگان نرم افزار بدست آورده است و طبق آمار های موجود محبوبترین زبان برنامه نویسی بین توسعه دهندگان است.
با وجود فریمورک هایی مثل Akka یا Play یا  Scalatra که با زبان برنامه نویسی اسکالا توسعه داده شده اند باز هم محبوبیت این زبان در سطح  بالایی نبود.

با حضو پروژه Apache Spark و در ادامه آن Apache Kafka که با زبان برنامه نویسی اسکالا پیاده سازی شده اند و محبوبیت شدید آنها در مباحث big data و cluster computing، محبوبیت زبان اسکالا نیز در حال بالا رفتن است. 

به نظر من Apache Spark باعث شده جنبه های برنامه نویسی functional اسکالا بیشتر مورد توجه قرار گیرد و اسکالا که به زبان بعدی بر روی JVM مشهور بود تبدیل به یک زبان برنامه نویسی مناسب functional برای مباحث big data, cluster computing و distributed system شود و یجورایی کم کم از زیر سایه JVM و زبان جاوا خارج بشود.

۱۳۹۴-۰۴-۱۸

خداحافظ توویتر

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

۱۳۹۴-۰۴-۱۳

بازگشت

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

۱۳۹۴-۰۴-۰۴

گفتگو با دل

به تو میگم که نشو دیوونه ای دل
به تو میگم که نگیر بهونه ای دل
من دیگه بچه نمیشم آه
دیگه بازیچه نمیشم

به تو میگم عاشقی ثمر نداره
واسه تو جز غم و درد سر نداره
من دیگه بچه نمیشم آه
دیگه بازیچه نمیشم

عقلم و زیر پا گذاشتی رفتی
تو منو مبتلا گذاشتی رفتی
به غم زمونه ای دل
منو واگذاشتی ای دل

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

می دونم تو دیگه عاقل نمی شی
تو دیگه برای من دل نمیشی

من دیگه بچه نمیشم آه
دیگه بازیچه نمیشم

۱۳۹۴-۰۳-۲۶

بازنشر چند پست برای یادآوری گذشته !!!

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

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

۱۳۹۴-۰۳-۱۸

نقش دروغین

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

 نزار قبانی
برگردان از عربی: آرش افشار

۱۳۹۴-۰۳-۱۷

رفع فوبیای کمبود رم با حضور ۲۴ گیگابایت رم و رو شدن فوبیای جدید!

من همیشه فوبیای performance داشتم، که یکی از مهمترین آنها مقدار رم باقی مانده سیستمی بوده که با آن کد می زدم. از اونجایی که جاوا نیز یک ابزار رم خوار است، از زمان کار با JBuilder با ۲۵۶ مگابایت رم (یادش بخیر) تا همین چند ماه پیش که لپ تاپم ۸ گیگابایت رم داشت همیشه علاقه فراوانی به چک کردن میزان رم مصرفی و باقیمانده سیستم داشتم. چه زمانی که در ویندوز بودم با  Process Explorer که میزاشتمش تو system tray و هر ساعت ۳ یا ۴ بار چکش می کردم و چه وقتی که اومدم رو لینوکس و با اپلت مشهور System load monitor (گنوم ۲) همین کارو می کردم. تو لینوکس یه تفریح دیگه هم داشتم که چک می کردم که سیستم عامل از swap داره استفاده می کنه یا نه!

اما الان که لپ تاپم ۲۴ گیگابایت رم داره، فوبیای کمبود رم تموم شده و جاشو داده به یه فوبیای دیگه!

الان System Load Indicator را روی اوبونتو نصب کردم و هی چکش می کنم تا ببینم کی میشه کل ۲۴ گیگابایت رم استفاده بشه!!! 

تا حالا به بلطف کروم، android studio، intellij idea، genymotion فقط تونستم ۱۳ گیگابایت از رم رو استفاده کنم!

شاد باشید.

۱۳۹۴-۰۳-۱۵

پا گذاشتن روی ارزش های شخصی

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

۱۳۹۴-۰۳-۱۳

اگر مرا دوست نمی‌ داری

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

رسول یونان

۱۳۹۴-۰۳-۰۸

هم صحبت و همراه

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

۱۳۹۴-۰۲-۲۷

اهمیت وجود مکانیزم اطلاع رسانی خطا در سمت سرور در توسعه back end

در برنامه نویسی کلاینت سرور که امروز با نام front end و back end نیز شناخته می شود، حتما باید در سمت سرور مکانیزمی برای اطلاع رسانی خطا های احتمالی در سمت سرور به کلاینت باشد. چون معمولا در این مدل تولید سیستم، توسعه دهندگان سمت سرور جدا از توسعه دهندگان سمت کلاینت کار می کنند و حتی در بسیاری از موارد در دو سازمان یا شرکت مختلف هستند و یا معمولا توسعه back end زودتر از توسعه کلاینت ها آغاز می شود و ...
حال فرض کنید توسعه دهندگان back end هیچ گونه مکانیزم اطلاع رسانی خطا طراحی نکرده باشند، یعنی وقتی به هر دلیلی یک در خواست کلاینت در سمت back end منجر به خطا می شود، هیچ عکس العملی یا پاسخی از سمت سرور به کلاینت ارسال نشود. حالا بیچاره توسعه دهندگان کلاینت که باید با کلی تماس و ارتباط برقرار کردن با توسعه دهندگان back end و در بعضی از مواقع گشتن در لاگ های back end متوجه بشوند که مشکل کجاست.
در ساده ترین حالت ارسال یکسری error code برای مثال در قالب JSON می تواند خیلی مشکلات را حل کند و در بالاترین سطح ارائه یک مستند کامل که در آن تمام error code ها و دلیل بوجود آمدن آنها توضیح داده شده است خیلی خوب است.
اینکه توسعه دهنده back end بتواند تمام حالات خطا را تحت کنترل داشته باشد و برای آنها error code های مناسب تولید کند نیز کار دشواری است و نیاز به دقت زیادی در زمان برنامه نویسی قسمت های مختلف back end دارد، رعایت نکات ساده ای مثل مدیریت exception ها و کد نویسی safe برای رسیدن به همچین سطحی در توسعه back end بسیار مناسب است.


پ.ن. آخیش چه کیفی میده محدودیت ۱۴۰ کاراکتریه توییتر وجود نداره. من توییتر باز خوبی نخواهم شد.