حال من خوب است، اما تو باور نکن!

کارگاه دو روزه رایگان برنامه نویسی 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

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

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

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

 

 

پ.ن.

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

استفاده از 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 ها استفاده می کنیم.

 

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

سختی تصمیم گیری های بزرگ

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

 

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

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

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

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

به نظرم این کتاب رو هر ۳ یا ۴ ماه یکبار باید مرور کرد. اسم بهتری که برای این کتاب پیشنهاد می کنم راهکارهای بهتر زندگی کردن.

 

 

پ.ن.

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

 

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

تغییر

همه منتظر شدن ، بیهوده است .
برای حل مشکلاتمان وابسته به زمان بودن ,
خود فریبی است .
آینده که به خود واگذار شود تکرار محض گذشته است .
تغییر , تنها هم اینک می‌تواند اتفاق بیفتد .

 

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

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

بررسی Ninja Framework

قبلا یه مطلبی درباره Ninja Framework خونده بودم و همیشه دوست داشتم یه سرکی توش بکشم ببینم چه حرفی برای گفتن داره. تا اینکه بالاخره Ninja Framework منو طلبید و دیشبو با اون گذروندم.

به نظر میرسه Ninja Framework توسط یکسری جاوا developer خفن که هیچ کدوم از فریم ورک های وب جاوا موجود مثل Spring MVC یا Play Framework کارشونو برای پروژه هاشون بخوبی راه ننداخته توسعه داده شده و به همین دلیل از کلی best practice های توی فریم ورک های قبلی در Ninja Framework هم استفاده شده.

Ninja Framework خیلی بیش از حد شبیه Play Framework ولی بر خلاف Play کاملا با جاوا نوشته شده و هیچ وابستگی در هیچ سطحی با اسکالا نداره. یجورایی Ninja Framework اومده کلی از library ها و ابزار های بالغ در دنیای جاوا مثل Maven, Freemarker, Google Guice, JPA و ... رو با استفاده از best practice های development و معماری در فریم ورک های وب جاوا مثل Spring MVC یا Play Framework ترکیب کرده و یک فریم ورک وب ایده آل برای عاشقان جاوا درست کرده.

 

مزایای Ninja Framework:

  • یادگیری سریع برای توسعه دهندگان جاوا: چون برای کار باهاش فقط باید جاوا بلد باشی حتی دانش Java EE لازم نداره و از همه مهمتر نیومده چرخ رو از اول اختراع کنه و هر جا شده از library ها و ابزار های استاندارد و بالغ دنیای جاوا استفاده کرده که خیلی از توسعه دهندگان جاوا باهاش آشنا هستند.
  • Stateless بودن: درسته که Ninja Framework بر روی servlet container jetty بالا میاد ولی از servlet container فقط بعنوان وب سرور استفاده می کنه و از استاندارد های servlet container در Java EE تبعیت نمی کنه و بر خلاف اون مثل Play Framework کاملا stateless است که کمک می کنه به راحتی scale بشه.
  • کتابخانه تست حاضر و آماده: Ninja Framework هم شبیه Play برای نوشتن تست های اتوماتیک در هر سطحی (unit، functional و integration) کلاس های و کتابخانه های حاضر و آماده داره و کلی کار آدم رو راحت میکنه.
  • سازگاری با تمام IDE های دنیای جاوا: چون Ninja Framework از Maven بعنوان build tools استفاده کرده و حتی برای ایجاد یک پروژه Ninja باید از maven archetype استفاده کرد تقریبا با تمام IDE های موجود در دنیای جاوا سازگاری داره و به راحتی میشه با هر IDE باهاش کار کرد.

معایب Ninja Framework (بیشتر در مقایسه با Play Framework):

  • اگر توی web application تون بخاین از websocket استفاده کنید، Ninja Framework هیچ امکاناتی برای این کار نداره.
  • مباحث سیستم های Reactive مثل non blocking و async بودن در Ninja Framework وجود نداره.
  • هیچکدام از API های Ninja بر پایه Java 8 طراحی نشدند.
  • community فوق العاده کوچک.
  • قابلیت SuperDevMode که قراره امکان hot code reloading رو برای ما بیاره کاملا به IDE وابستس و در اکثر موارد کار نمی کنه (حداقل تو Intellij).

به نظرم Ninja Framework تلاشی بوده برای آوردن بهترین تجربیات فریم ورک های وب مثل Play یا Ruby on Rails در کنار جاوا و استاندارد های Java EE. کاری که در Play هم اتفاق افتاده ولی در بسیاری از موارد جاوا و استاندارد های Java EE با اسکالا و استاندارد های اون جا بجا شده که این کمی به مذاق توسعه دهندگان جاوا خوش نیومده. Ninja Framework با هدف داشتن یک فریم ورک مدرن و کاملا بر پایه استاندارد های جاوا و Java EE وارد میدان شده.

اگر بخام مقایسه نهایی رو با Play انجام بدم، از نظر فرآیند توسعه و مدرن بودن، Ninja Framework خودشو از Java EE جدا کرده و می تونه با Play در این زمینه رقابت کنه هر چند در مواردی مثل hot code reloading یا websocket عقبتره. از نظر معماری ولی Play چون بر پایه مفاهیم Reactive بنا شده و کاملا non blocking و async است در مبحث scalability بر روی یک ماشین خیلی جلوتر از Ninja Framework است که برای این موارد به servlet container اعتماد می کنه.

در کل با Ninja Framework خیلی حال کردم و یه application باهاش بالا آوردم و ازش ممنونم که باعث شد علاقم و اعتقادم به Play بیشتر از پیش بشه.

 

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

گارگاه رایگان دو روزه برنامه نویسی Functional در جاوا ۸

یکی از چیزایی که از رایان خوشم میاد همین لارج بازیاشه. یه دوره رایگان دیگه در قالب کارگاه عملی رایگان دو روزه برنامه نویسی Functional در جاوا ۸. تو این دو جلسه کلی به سبک functional در جاوا ۸ کد میزنیم و البته برای جذب نیرو در رایان هم تبلیغ می کنیم.

 

اطلاعات بیشتر

 

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

آلودگی هوا و انگولک کردن اینترنت توسط دلواپسان

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

چند روزی بود معلوم نبود دوستان دلواپس چه انگولکی به اینترنت کشور می کردند که سایت های کاربردی برای ما developer ها مثل github و ... لود نمی شد. خداروشکر امروز مثل اینکه دست از انگولک کشیدن.

 

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