۱۳۹۴-۰۶-۲۱

خدا حافظ بلاگر - کوچ به blog.ir

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

برای مشاهده وبلاگ جدید من به اینجا بیایید


۱۳۹۴-۰۶-۱۹

در دسترس بودن مجدد فید سایت DZone و اعتراض محترمانه!

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

۱۳۹۴-۰۶-۱۸

گشتن دنبال ساعت در نوار بالای کتاب!

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

۱۳۹۴-۰۶-۱۷

استفاده از Scala و pattern matching برای پردازش آرایه ای از بایت ها

برخی از سیستم ها بدلیل حجم بالای تراکنش  بمنظور کاهش حجم اطلاعات رد و بدل شده بین کلاینت و سرور، اطلاعات را در سطح بایت برای کلاینت های خود ارسال می کنند (آرایه ای از بایت)، یکی از سیستم های بورس کالای ایران با همین روش پیاده سازی شده است و تمام اطلاعاتی که بین کلاینت ها و این سیستم رد و بدل می شود در قالب آرایه ای از بایت ها است.
حالا پردازش در سطح بایت و پردازش ساختار packet های دریافتی کار دشواری است چون چند بایت اول هر packet مشخص می کند که نوع packet دریافتی چیست و باید چگونه با آن رفتار کرد. پیاده سازی همچین پارسری با Scala و قابلیت pattern matching آن خیلی ساده و لذت بخش است:

  def receive = {
    case Array( 23 , tail @ _*) =>
      log.info("received packet type 23")
      parseType23(tail)
    case _ =>
      log.info("Unknown packet")
  }

البته جزئیات و پیچیدگی های بسیار زیادی برای پیاده سازی اینگونه سیستم ها وجود دارد که خوشبختانه با امکانات زبان Scala و library های قدرتمند آن مثل Akka کار کمی آسانتر می شود.

شاد باشید.

۱۳۹۴-۰۵-۲۸

۱۳۹۴-۰۵-۲۵

تولید سرویس 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 فقط تونستم ۱۳ گیگابایت از رم رو استفاده کنم!

شاد باشید.