During learn and experience

۴ مطلب در اسفند ۱۳۹۴ ثبت شده است

کتاب فرار از اردوگاه 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

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

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

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

 

 

پ.ن.

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

استفاده از CompletableFuture برای برنامه نویسی concurrent به سبک functional در جاوا 8

اولین بار که با کلاس Future در Scala و بعدش Akka آشنا شدم که با اون میشد با یک سبک جدید و ساده تر برنامه نویسی concurrent کرد خیلی مشتاق بودم که معادلی براش تو دنیای جاوا پیدا کنم. متاسفانه اینترفیس Future که در جاوا 5 معرفی شده بود بسیار نقص داره و نمی توان کارهای زیبایی که با Future در اسکالا انجام میشه رو باهاش انجام داد. تا اینکه در Play Framework با Promise آشنا شدم که تقریبا معادل جاوایی Future در اسکالا ولی با امکانات محدودتر بود.

سبک برنامه نویسی concurrent با Future یک سبک functional که هم کدنویسی concurrent رو ساده تر می کنه و هم خواناتر. جاوا 8 با آوردن کلاس CompletableFuture و همراهی Lambda expression ها و Stream ها این سبک برنامه نویسی concurrent به سبک functional رو برای توسعه دهندگان جاوا به ارمغان آورده. در مثال زیر یک نام و یک عدد قرار است با تاخیر بدست بیایند ولی برای چاپ خروجی به وجود نتیجه هر دو محاسبه احتیاج است که با استفاده از CompletableFuture آن دو مقدار بر روی یک ThreadPool جدید محاسبه می شوند و با اینکه مقدار نام زودتر بدست می آید ولی باید منتظر بماند تا مقدار عدد نیز محاسبه شود:

    public static void main(String[] args) { 
 
        CompletableFuture<Integer> futureNumber = CompletableFuture.supplyAsync(() -> { 
            delay(2000); 
            System.out.println("getting number finish"); 
            return 12345; 
        }, executor); 
 
        CompletableFuture<String> futureName = CompletableFuture.supplyAsync(() -> { 
            delay(1000); 
            System.out.println("getting name finish"); 
            return "Saeed"; 
        }, executor); 
 
        System.out.println("do some normal work"); 
 
        futureNumber.thenCombineAsync(futureName, (number, name) -> { 
            System.out.println(name + " " + number); 
            return null; 
        }, executor).join(); 
 
    } 
 
    private static final Executor executor = Executors.newFixedThreadPool(10, 
            r -> { 
                Thread thread = new Thread(r); 
                thread.setDaemon(true); 
                return thread; 
            } 
    ); 
 
    public static void delay(long time) { 
        try { 
            Thread.sleep(time); 
        } catch (InterruptedException e) { 
            throw new RuntimeException(e); 
        } 
    } 

 

یکی دیگه از قابلیت های خوب CompletableFuture استفاده از آنها در Stream های جاوا 8 بخصوص وقتی از parallel stream ها استفاده می کنیم.

 

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