During learn and experience

کتاب "یک فنجان چای بی موقع- رد پای یک انقلاب"

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

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

۱۳ خرداد ۹۶ ، ۲۰:۱۷ ۰ نظر موافقین ۱ مخالفین ۰
سعید زرین فام

Spring reactive stack web framework یا همان Spring WebFlux

از این بعد نام Spring reactive stack web framework را بیشتر بیشتر خواهید شنید. این stack جدید که برای توسعه برنامه های تحت وب در Spring 5 معرفی شده است و نسل بعدی توسعه برنامه های تحت وب در Spring Framework است که پس از Spring MVC و Spring Boot (Spring Servlet stack based web framework) که سال ها در بین توسعه دهندگان جاوا استفاده می شد آمده است و قابلیت تولید سیستم های reactive و non-blocking درون Spring Framework را با استفاده از پروژه Reactor خواهد داد.

برنامه های تولید شده با Spring WebFlux هم قابلیت اجرا درون Servlet container ها  مثل Tomcat, Jetty, Servlet 3.1 و هم قابلیت اجرا بر روی سرور هایی مانند Netty یا Undertow را دارد.

من اولین بار این مدل تولید برنامه تحت وب در دنیای جاوا رو با Play Framework تجربه کردم (حدود ۴ سال پیش) و سیستم های خوبی با Play Framework تولید کردیم ولی همیشه مشکل کمبود توسعه دهنده و پلاگین برای Play Framework را داشتیم ولی کاملا مشخص بود که أینده تولید برنامه تحت وب در دنیای جاوا از servlet container ها نمی گذرد و مدل پردازشی با event-loop بهمراه تعداد thread های کم آینده توسعه برنامه های تحت وب جاوا را رقم خواهد زد و قدرت JVM بصورت کامل نمایش داده خواهد شد.

سازگاری کامل Reactor با استاندارد Reactive Stream که در جاوا ۹ معرفی شده است آینده Spring WebFlux را تضمین خواهد کرد.

فعلا Spring 5 M5 عرضه شده و مستندات Spring WebFlux کامل نیست و مثال های کاملی برای آن وجود نداره ولی چیزی که واضح هستش اینه که مثل همیشه Backward compatibility وجود خواهد داشت. در زیر یک کنترلر که با Spring WebFlux پیاده سازی شده است را می بینیم:

@GetMapping("/persons")
Flux<Person> getPersons() {
    return this.repository.getPersons();
}
۲۵ ارديبهشت ۹۶ ، ۲۳:۲۷ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

چرا رای میدهم !!!

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

با اینکه هیچ کدوم از کاندیداها حتی ۲۰ درصد خصوصیاتی که من میخام رو ندارن پس چرا میخام رای بدم. از نظر من رای دادنم چند تا سود داره.

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

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

ترس از حضور ما برای رای دادن انقدر قدرتمنده که حتی کاندیداهای هم فکر نظام رو وادار میکنه برای جلب نظر ما قبول کنن و بگن که فساد وجود داره، دزدی وجود داره و ...

ولی با رای ندادن میگیم ما نیستیم حق با شماست، شما بیشترین و ...

 

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

۲۳ ارديبهشت ۹۶ ، ۰۸:۵۱ ۲ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

متوقف شدن توسعه Unity و آینده من و اون !!!

متاسفانه بر اساس این پست که در سایت رسمی اوبونتو گذاشته شده، شرکت Canonical تصمیمات جدید خودشو درباره محصولاتش اعلام کرده که یکی از آنها که منو خیلی ناراحت کرده تصمیم بر متوقف کردن توسعه Unity در آینده و عرضه اوبونتو ۱۸.۰۴ با Gnome Shell است.

برای من که حدود ۸ سالی میشه دارم از لینوکس بعنوان سیستم عامل دسکتاپ استفاده می کنم و desktop environment ها مختلف رو تست کردم Unity بعد Gnome 2 تمیزترین و پایدارترین desktop environment ی بود که باهاش کار کرده بودم. درسته Unity در ابتدا خیلی ناامید کننده بود ولی حدود ۴ سالی میشه که دیگه stable شده و منم خیلی باهاش راحتم.

البته Canonical برای Unity 7 کماکان بروزرسانی میده که این برای من جای امیدواریه.

روز بعد از خوندن این خبر سعی کردم از Gnome Shell استفاده کنم تا عادت کنم ولی واقعا با Unity قابل مقایسه نیست. Unity خیلی ساده و تمیزه.

اتفاق های خوبی که ممکنه بیوفته:

  • Canonical سال ها برای Unity 7 بروزرسانی بده که عالی میشه چون من از همین Unity 7 خیلی راضیم ولی بدیش اینه که Unity به مرور زمان دچار عقب موندگی تکنولوژی میشه.
  • امیدوارم Canonical سورس Unity رو در اختیار کامیونیتی بزاره که توسعش بدن تا Unity زنده بمونه ولی بدی این اتفاق اینه که پول و نیروهای فنی Canonical پشت Unity نخواهند بود که مطمئنا در کیفیت کار تاثیر داره.
  • نسخه Gnome Shell عرضه شده با اوبونتو خیلی سازگار و پایدار باشه که منو مجاب کنه دست از Unity بکشم.

پس فعلا تا اطلاع ثانوی از Unity عزیز لذت می برم.

۲۲ فروردين ۹۶ ، ۲۲:۵۵ ۱ نظر موافقین ۱ مخالفین ۰
سعید زرین فام

How Java 8 killed the Strategy Pattern

I have read a nice article about "How Scala killed the Strategy Pattern". In this article there is a sample Java implementation of Strategy Pattern from wikipedia but this implementation use old Java syntax (prior Java 8). I implement Scala sample using Java 8 syntax and show that how Java 8 killed the Strategy Pattern:

public class Main { 
 
    @FunctionalInterface 
    interface Function3 <A, B, C, R> { 
        public R apply (A a, B b, C c); 
    } 
 
    public static void main(String[] args) { 
        BiFunction<Integer, Integer, Integer> add = Math::addExact; 
        BiFunction<Integer, Integer, Integer> subtract = Math::subtractExact; 
        BiFunction<Integer, Integer, Integer> multiply = Math::multiplyExact; 
 
        Function3<BiFunction<Integer, Integer, Integer>, Integer, Integer, Integer> execute = (callback, x, y) -> callback.apply(x, y); 
 
        System.out.println("Add:      " + execute.apply(add, 3, 4)); 
        System.out.println("Subtract: " + execute.apply(subtract, 3, 4)); 
        System.out.println("Multiply: " + execute.apply(multiply, 3, 4)); 
    } 
} 

This implementation is more verbose than the Scala one but it is much better than the old one.

۲۴ آذر ۹۵ ، ۱۶:۴۶ ۰ نظر موافقین ۱ مخالفین ۰
سعید زرین فام

یا رب مباد کس را مخدوم بی عنایت

زان یار دلنوازم شکریست با شکایت

گر نکته دان عشقی بشنو تو این حکایت

بی مزد بود و منت هر خدمتی که کردم

یا رب مباد کس را مخدوم بی عنایت

رندان تشنه لب را آبی نمی‌دهد کس

گویی ولی شناسان رفتند از این ولایت

در زلف چون کمندش ای دل مپیچ کانجا

سرها بریده بینی بی جرم و بی جنایت

چشمت به غمزه ما را خون خورد و می‌پسندی

جانا روا نباشد خونریز را حمایت

در این شب سیاهم گم گشت راه مقصود

از گوشه‌ای برون آی ای کوکب هدایت

از هر طرف که رفتم جز وحشتم نیفزود

زنهار از این بیابان وین راه بی‌نهایت

ای آفتاب خوبان می‌جوشد اندرونم

یک ساعتم بگنجان در سایه عنایت

این راه را نهایت صورت کجا توان بست

کش صد هزار منزل بیش است در بدایت

هر چند بردی آبم روی از درت نتابم

جور از حبیب خوشتر کز مدعی رعایت

عشقت رسد به فریاد ار خود به سان حافظ

قرآن ز بر بخوانی در چارده روایت


حافظ

۱۶ آذر ۹۵ ، ۲۰:۴۵ ۰ نظر موافقین ۱ مخالفین ۰
سعید زرین فام

سال ها پس از سال ها می گذرد

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

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

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

 

شاد باشید.
 

۰۳ مهر ۹۵ ، ۰۷:۰۴ ۲ نظر موافقین ۱ مخالفین ۰
سعید زرین فام

کارگاه دو روزه رایگان برنامه نویسی Functional در جاوا ۸ (دوره چهارم)

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

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

 

۰۴ شهریور ۹۵ ، ۱۰:۲۹ ۱ نظر موافقین ۱ مخالفین ۰
سعید زرین فام

کدنویسی به سبک اسکالا با استفاده از Javaslang در جاوا 8

برنامه نویسی فانکشنال با اسکالا خیلی لذت بخش و آسونه و به نظر من علاوه بر سینتکس روان و موجر اسکالا، یکی از دلایل اصلی اون وجود لایبرری های فانکشنال بسیار عالی در دنیای اسکالا هست.

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

 

pattern matching:

Number plusOne = Match(obj).of(
    Case(instanceOf(Integer.class), i -> i + 1),
    Case(instanceOf(Double.class), d -> d + 1),
    Case($(), o -> { throw new NumberFormatException(); })
);

functional For:

Iterator<String> iterator =
    For(persons.filter(Person::hasAddress), p ->
        For(p.addresses).yield(a ->
             p.name + "," + a.street
        )
    );

 

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

 

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

 

شاد باشید.

۲۰ تیر ۹۵ ، ۱۴:۴۳ ۱ نظر موافقین ۱ مخالفین ۰
سعید زرین فام

صبر، ممارست و درس گرفتن از تجربیات، کلیدی که هر قفلی را باز می کند

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

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

 

ای نسیم سحر آرامگه یار کجاست

منزل آن مه عاشق کش عیار کجاست

شب تار است و ره وادی ایمن در پیش

آتش طور کجا موعد دیدار کجاست

هر که آمد به جهان نقش خرابی دارد

در خرابات بگویید که هشیار کجاست

آن کس است اهل بشارت که اشارت داند

نکته‌ها هست بسی محرم اسرار کجاست

هر سر موی مرا با تو هزاران کار است

ما کجاییم و ملامت گر بی‌کار کجاست

بازپرسید ز گیسوی شکن در شکنش

کاین دل غمزده سرگشته گرفتار کجاست

عقل دیوانه شد آن سلسله مشکین کو

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

ساقی و مطرب و می جمله مهیاست ولی

عیش بی یار مهیا نشود یار کجاست

حافظ از باد خزان در چمن دهر مرنج

فکر معقول بفرما گل بی خار کجاست

۱۸ تیر ۹۵ ، ۱۴:۳۵ ۱ نظر موافقین ۲ مخالفین ۰
سعید زرین فام

جام ملت های اروپا ۲۰۱۶ و گذر ۴ سال دیگه از عمر

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

۴ سال پیس یورو 2012، شرکت بهین پژوهش، شروع علاقه مندی به ارلنگ، آزمون آیلتس و ...

 

شکر

۲۲ خرداد ۹۵ ، ۱۳:۱۳ ۰ نظر موافقین ۱ مخالفین ۰
سعید زرین فام

معرفی کتاب چهل گفتار پیرامون ارتقای مهارتهای شخصی در کسب و کار

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

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

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

بسیاری از راهکار های کتاب هم برای استفاده شخصی و هم برای استفاده تیمی، سازمانی و شرکتی کاربرد داره. مطالبی مثل قهرمان درون و نادان درون، آینده سازی یا آینده سوزی، پرورش یک ذهن آشفته، مدیریت استرس، ساختن برند شخصی و ... برای من خیلی مفید و الهام دهنده بود.

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

 

۱۹ خرداد ۹۵ ، ۰۹:۳۶ ۰ نظر موافقین ۱ مخالفین ۰
سعید زرین فام

دوره های جدید آموزش اسکالا و برنامه نویسی Functional در Coursera

خبر خوب برای علاقه مندان به اسکالا، برنامه نویسی Functional و تکنولوژی های مرتبط با اسکالا مثل Spark اینه که سایت Coursera بهمراه دانشگاه EPFL علاوه بر دوره های قدیمی که برای آموزش در این زمینه داشتند، چند دوره جدید رو هم اضافه کردند که علاقه مندان می تونن  رایگان از آنها استفاده کنند:

این کار دانشگاه EPFL و سایت Coursera خیلی عالیه. سطح دوره ها از بالا به پایین سخت تر میشه و بهتره به ترتیب از بالا شروع کنید. نگران نباشید بعضی از دوره ها که ثبت نامشون تموم شده پس از اتمام دوره در حال برگزاری مجددا ثبت نام میکنن.

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

 

شاد باشید.

۱۲ خرداد ۹۵ ، ۱۰:۱۴ ۳ نظر موافقین ۱ مخالفین ۰
سعید زرین فام

معرفی کتاب Java 8 in Action: Lambdas, Streams, and functional-style programming

پس از سال ها و بعد از Java 5 یک نسخه انقلابی دیگر از جاوا عرضه شده است و کم کم پس از گذشت بیشتر از دو سال، جامعه توسعه دهندگان جاوا در حال وفق دادن خود با امکانات و سیسنتکس های جدید آن هستند. اصلی ترین قابلیت های Java 8 حول و حوش افزودن امکانات لازم برای کمی functional کردن جاوا بوده است تا کم کم جاوا از یک زبان برنامه نویسی imperative به یک زبان hybrid تبدیل شود ولی به نظر من امکانات اضافه شده در Java 8 برای پشتیبانی از سبک برنامه نویسی Functional بیشتر در حد syntactic sugar بوده و بدلیل backward compatible نگه داشتن جاوا در نسخه ۸ جاوا فقط کمی Functional شده است و اگر کسی با مفاهیم برنامه نویسی Functional آشنایی داشته باشد متوجه می شود که جاوا کماکان خیلی بیشتر imperative است تا Functional.

 

اگر برای یادگیری جاوا ۸ بدنبال یک منبع مطمئن و کامل هستید به شما کتاب Java 8 in Action  را پیشنهاد می کنم. مزیت اصلی این کتاب این است که علاوه بر اینکه با جزئیات فراوان و دقیق قابلیت های جدید جاوا ۸ را معرفی کرده، تمرکز زیادی بر معرفی سبک برنامه نویسی Functional داشته است و بصورت کامل خواننده را با دنیای برنامه نویسی Functional آشنا می کند که این کار بخصوص برای توسعه دهندگان جاوا که آشنایی کمتری با این سبک دارند عالی می باشد.

 

اخطار: اگر فقط میخواهید با قابلیت های جدید جاوا ۸ آشنا شوید و آنها را یاد بگیرید توصیه می کنم کتابی دیگر که فقط بر روی این هدف تمرکز دارد را مطالعه کنید. بدلیل اینکه این کتاب شما را بخوبی با سبک برنامه نویسی Functional آشنا می کند و همچنین با توجه به فوق العاده ضعیف بودن جاوا ۸ در زمینه برنامه نویسی Functional ممکن است پس از آشنایی با دنیای برنامه نویسی Functional دیگر از جاوا خوشتان نیاید و از کدنویسی با آن زجر بکشید !!!

 

۰۱ خرداد ۹۵ ، ۲۱:۳۵ ۱ نظر موافقین ۲ مخالفین ۰
سعید زرین فام

استفاده از Akka در Kotlin

زبان برنامه نویسی Kotlin به تازگی نسخه یکش عرضه شده و بنظر میرسه داره کم کم جای خودشو بین توسعه دهندگان بخصوص توسعه دهندگان روی JVM باز میکنه. اگه بخام Kotlin رو با اسکالا مقایسه کنم که بنظرم حرفی برای گفتن نداره ولی خب به نسبت جاوا امکانات خیلی بیشتری داره. مرور زمان و بزرگ شدن code base پروژه هایی که از Kotlin استفاده می کنند مشخص میکنه Kotlin تا کجاها میتونه جلو بره و محدودیت هاش چیه.

یکی از قابلیت های Kotlin تعامل (interoperability) خوب اون با کدهای جاوا است. برای همین سعی کردم یک پروژه درست کنم و از Akka java API در اون پروژه Kotlin استفاده کنم و ببینم میشه برنامه Akka با Kotlin نوشت.

پروژه کامل رو در github قرار دادم که در حد یک hello work در akka، البته کد معادل جاوا هم در پروژه وجود داره:

package hello

import akka.actor.*
import akka.dispatch.OnComplete
import akka.pattern.Patterns.ask;
import scala.concurrent.Await
import scala.concurrent.Future;
import scala.concurrent.duration.Duration
import java.util.concurrent.TimeUnit

fun main(args: Array<String>) {
    val system = ActorSystem.create("MySystem")
    val myActor = system.actorOf(Props.create(MyActor::class.java), "myActor")
    val testActor = system.actorOf(Props.create(TestActor::class.java), "testActor")

    myActor.tell("test", testActor);
    testActor.tell("ask", myActor);

}

class MyActor : UntypedActor() {

    data class Greeting(val from: String)

    object Goodbye

    override fun onReceive(message: Any?) = when (message) {
        "test" -> println("received test")
        is Greeting -> {
            println("I was greeted by " + message.from)
            sender.tell("hello " + message.from, self)
        }
        is Goodbye -> println("Someone said goodbye to me.")
        else -> println("received unknown message")
    }
}

class TestActor : UntypedActor() {
    override fun onReceive(message: Any?) {
        when (message) {
            "ask" -> {
                println("received ask")
                val future: Future<Any> = ask(sender, MyActor.Greeting("Saeed"), 5000)

                future.onComplete(object : OnComplete<Any?>() {
                    override fun onComplete(failure: Throwable?, result: Any?) {
                        if (failure != null) {
                            println("We got a failure, handle it here")
                        } else {
                            println("result = " + result as String)
                        }
                    }
                }, context.dispatcher())
            }
            else -> println("received unknown message")
        }
    }
}

همونطور که توی کد میبینید دستور when یجورایی یه switch case پیشرفته جاوا و اصلا با pattern matching اسکالا قابل مقایسه نیست. data کلاس های Kotlin کاربرد خوبی برای تعریف پیغام ها در Akka داره (از استاتیک اینر کلاس در جاوا بهتره). از monad و این چیزا هم در Kotlin خبری نیست که نشون میده اسکالا چه زبان قدرتمندیه.

استفاده از Akka Scala API در Kotlin تقریبا غیر ممکنه چون بسیاری از توابع و کلاس های اسکالا no name provided هستند.

نکته عجیب دیگه ای هم که مشاهده کردم این بود که Intellij Idea که IDE رسمی Kotlin چند تا از سینتکس های Kotlin رو نمی تونست پارس کنه و error الکی میده!

بمنظور پرسیدن سوال و تبادل نظر یک نسخه از discourse بالا آوردن که خیلی جالبه.

در نهایت فکر می کنم Kotlin هنوز جای کار داره و بنظرم در خوشبینانه ترین حالت بتونه در حد groovy رشد کنه ولی در کل تجربه خوبی بود.

۲۲ ارديبهشت ۹۵ ، ۰۰:۰۳ ۰ نظر موافقین ۲ مخالفین ۰
سعید زرین فام

Reactive Streams استانداردی برای آینده Stream Processing

با توجه به رشد سریع سیستم های نرم افزاری و افزایش شدید حجم اطلاعات و نیاز به سیستم های real time برای انجام پردازش های سنگین بر روی اطلاعات و جمع آوری اطلاعات مهم از آنها، نیاز به وجود استانداردی برای ارتباط سیستم ها بر پایه stream بسیار دیده می شود. امروزه ابزار ها و framework های فراوانی پردازش های برپایه Stream  را از منابع داده ای مختلف برای ما انجام می دهند ابزار هایی مثل Spark، Kafka، Hadoop و... با استاندارد های خود به پایگاه داده های NoSQL و ... متصل می شوند و در بعضی موارد حتی لازم است این سیستم ها با یکدیگر ارتباط بر پایه Stream داشته باشند.

استاندارد Reactive Streams یک استاندارد مدرن برای متصل کردن سیستم ها و منابع اطلاعاتی برپایه Stream است. به نظر من اهمیت استاندارد Reactive Streams در حال حاضر مانند اهمیت استاندارد JDBC در زمان اوج RDBMS ها بود. در حال حاضر با اینکه Reactive Streams در ابتدای راه است ولی بسیاری از محصولات، ابزار ها و فریم ورک ها در حال تکمیل پشتیبانی خود از استاندارد Reactive Streams هستند و خود را برای آینده آماده می کنند.

در حال حاضر در بین سیستم های پایگاه داده، Mongodb و Kafka و Cassandra و ... در بین فریم ورک ها و ابزار های stream processing سیستم هایی مثل Spark ، کتابخانه ارتباط با دیتابیس Slick در اسکالا، فریم ورک Akka در قالب Akka Stream ، پشتیبانی از Reactive Streams در JDK 9 و بسیاری دیگر از سیستم هایی که نقش بزرگی در دنیای big data و stream processing در حال پشتیبانی از این استاندارد هستند.

نسخه ۱ استاندارد Reactive Streams تمرکز خود را بر روی back pressure، asynchronous و non-blocking بودن قرار داده  ولی احتمالا در آینده مواردی مثل توزیع شدگی و چالش ها آن نیز به این استاندارد اضافه خواهد شد.

تصور یک سیستم large scale که stream processing را را بر مبنای درایور های بر پایه استاندارد Reactive Streams بصورت asynchronous و non-blocking و با کنترل back pressure بین کامپوننت هایی مثل MongoDB، Kafka و Spark انجام می دهد برای تمام کسانی که در این حوزه کار می کنند بسیار هیجان انگیز است.

۱۷ فروردين ۹۵ ، ۲۲:۰۹ ۰ نظر موافقین ۲ مخالفین ۰
سعید زرین فام

سال ۹۴

سال ۹۴ بالاخره تمام شد.سال ۹۴ برای من خیلی دیر گذشت وقتی فکر می کنم میبینم انگار حدود ۳ یا ۴ سال اتفاق برام تو این سال افتاده. شکست ها، پیروزی ها، تنهایی و ... ولی هر چی بوده باید سعی کنم از همشون درس بگیرم و تمام اتفاقات سال ۹۴ رو بکنم توشه و تجربه برای سال ۹۵ و بعد از اون.

یک عادت خوب که در سال ۹۴ دوباره بهش بازگشتم، مطالعه کتاب های غیر کاری و فنی بود که باعث شده حدودا ماهی یک کتاب بخونم (می دونم کمه). یه کار مهم دیگه ای که در سال ۹۴ شروع کردم و در ۹۵ هم باید ادامه پیدا کنه اتمام کارها و نیمه تمام ول نکردن اونهاست که واقعا هم در موفقیت و هم در تمرکز تاثیر گذاره. یک کار دیگه ای هم که دارم سعی میکنم برام به عادت تبدیل بشه، استفاده بهینه از زمانه که برای این کار دارم از Toggl استفاده می کنم.

سال ۹۵ بیشتر زمانم رو برای شرکت بیان روی یک پروژه خفن کار خواهم کرد و با اینکه تصمیم جدایی از رایان سخت بود ولی مثل اینکه سال ۹۴ برای من سال گرفتن تصمیم های سخت بوده (چه در زندگی شخصی و چه کاری!) و از نظر کاری لازم بود همچین تصمیمی بگیرم.

در سال ۹۴ یکسری دوره و کارگاه رایگان در شرکت رایان هم افزا برگزار کردیم که خیلی به دل خودم نشست که به احتمال زیاد در سال ۹۵ هم ادامه خواهد داشت.

اواخر سال ۹۴ یک همکاری ناموفق با آموزشگاه برنامه نویس برای تدریس جاوا و Java EE  داشتم که هر چی میگذره بیشتر خوشحال میشم که باهاشون قطع همکاری کردم!

سال ۹۴ بالاخره اولین پروژه اسکالا عمرم رو هم در یک شرکت استارت زدم و باعث شد پس از چند سال مطالعه بالاخره در عمل یک سیستم با اسکالا تولید کنیم البته بدلایلی هر چه به آخر سال نزدیک می شدیم حضور من در پروژه کمرنگتر میشد و در حقیقت اکثر زحمات پروژه رو امیر عزیز می کشید (و میکشه).

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

 

شاد باشید.

 

 

۰۲ فروردين ۹۵ ، ۱۱:۰۵ ۱ نظر موافقین ۲ مخالفین ۰
سعید زرین فام

کتاب فرار از اردوگاه 14

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

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

۲۸ اسفند ۹۴ ، ۲۲:۱۶ ۰ نظر موافقین ۱ مخالفین ۰
سعید زرین فام

Play Framework 2.5 عرضه شد، سازگاری بیشتر با جاوا 8 و Java EE کماکان عقب مانده

Play Framework در هر نسخه بالغتر و کاملتر میشه و من خیلی خوشحالم که از نسخه 2.1 شاهد این فرایند بودم.

بر خلاف گفته های توسعه دهندگان Play Framework که استفاده از Akka streams بجای iteratee مهمترین تغییر در Play Framework 2.5 بوده است ولی به نظر من تغییرات Java API در Play Framework 2.5 خیلی مهمتر بوده، در Play Framework 2.5 تمام کلاس هایی که توسعه دهندگان Play Framework برای پشتیبانی از asynchronous functional programming به Play اضافه کرده بودند (مانند F.Option یا F.Promise و ...) با معادل های جاوا 8 آن جایگزین شده اند:

  • استفاده از functional interface های جاوا 8: استفاده از Runnable, Consumer, Predicate, و ... بجای Function0، Function ، Callback و ...
  • استفاده از Optional بجای F.Option
  • استفاده از CompletionStage بجای F.Promise

این تغییرات باعث میشه که کدنویسی در Play با استاندارد های برنامه نویسان جاوا سازگاری کامل داشته باشه. این درحالیه که Java EE بعنوان مرجع اصلی برنامه نویسی وب و Enterprise در دنیای جاوا همیشه کمترین و دیرترین سازگاری رو با نسخه های جدید جاوا دارد!

یکی دیگر از تغییرات مهم Play Framework 2.5 برای توسعه دهندگان جاوا، فراهم شدن API های جدیدی در Play Framework 2.5 است که تا قبل از این نسخه فقط برای زبان اسکالا وجود داشت:

  • HttpRequestHandler: اجازه دستگاری درخواست رسیده به سرور با زبان جاوا  قبل از رسیدن آن به router را می دهد.
  • EssentialAction: پیاده سازی Action های سطح پایین با زبان جاوا.
  • EssentialFilter و Filter: نوشتن فیلتر با استفاده از زبان جاواو
  • BodyParser: نوشتن Body Parser سفارشی با زبان جاوا.

در هر نسخه جدید Play Framework همیشه بهبود performance هم وجود داره که در این نسخه به نسبت نسخه 2.4 حدود ۲۰ درصد بهبود performance داشتیم.

یک قابلیت جدید Play Framework 2.5 که زیاد بهش پرداخته نشده پشتیبانی وب سرور Play یعنی Netty از native socket transport در لینوکس است که باعث میشه Play Framework بر روی لینوکس performance بهتری داشته باشه.

 

لیست کامل تغییرات در Play Framework 2.5

۲۰ اسفند ۹۴ ، ۱۰:۲۱ ۴ نظر موافقین ۱ مخالفین ۰
سعید زرین فام

معرفی کتاب برترین تصمیم ها در مشهورترین برندها

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

 

 

پ.ن.

۰۷ اسفند ۹۴ ، ۱۰:۲۹ ۰ نظر موافقین ۱ مخالفین ۰
سعید زرین فام