پست‌ها

  • چهار ماه بعد از مهاجرت

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

  • ویدئو‌های قسمت دوم کارگاه اسکالا در جشن ۱۰ سالگی لاگ

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

  • استخراج آمار تکنولوژی‌های برنامه‌نویسی از نظر سنجی جادی

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

  • اندر باب سیستم توزیع بن کتاب نمایشگاه کتاب ۹۵

    امسال هم مثل پارسال فروش بن دانشجویی از طریق سیستمی که با Scala و MongoDB پیاده کرده بودم انجام شد. البته کلی کار جدید و قسمت‌های دیگه مثل بن‌های اساتید و مهد کودک و … هم بهش اضافه شد و یکی از دوستام هم کمکم کرد و بالاخره طلسم تک نفری بودن پروژه شکسته شد. از همه اینها مهمتر نحوه پرداخت بود که برای اولین بار به جای درگاه پرداخت آنلاین یا همون IPG از طریق نرم‌افزار آپ انجام شد.

  • چه زمانی اسکالا مناسب نیست و چه زمانی مناسبه؟

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

  • دعوت به همکاری از برنامه‌نویسان حرفه‌ای اسکالا

    ما توی شرکت مدرن پل (Modern Pal) به یک برنامه‌نویس حرفه‌ای اسکالا برای بخش Backend نیاز داریم.

  • یه استارت آپ، یه کتاب صوتی و درباره تبلیغ این کنار

    سعید زرین فام عزیز چندبار پیشنهاد کرده بود که کتاب «گوگل چگونه کار میکند» رو بخونیم که البته با جواب احمقانه ما مبنی بر اینکه کتاب چند صفحه هست و اینها روبرو می‌شد 😀 ولی از اونجایی که سعید پیشنهاد بد نمیده من توی ذهنم بود که این کتاب رو یه جوری بخونم. خوشبختانه یکی دیگه از دوستان، نوار رو معرفی کرد.

  • بازنویسی اسکریپت‌های اون هکره به زبان اسکالا

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

  • روی پروژه‌های متن باز کار کنید تا یه کار خوب گیرتون بیاد

    کار کردن روی پروژه‌های متن باز به طور مستقیم درآمد یا سودی نداره ولی به طور غیر مستقیم پر از سود و درآمده.

  • مهاجرت به آرچ

    arch_pixelهفته قبل یکی از دوستان و همکاران بیمار (Geek) اعلام کرد که می‌خواد رو لپ تاپ اپل خودش آرچ بریزه. از اونجایی که من هم کم بیمار نیستم یه دفعه زد به سرم که آرچ رو هم امتحان کنم و این نظر من در موردشه؛

  • ترافیک لحظه‌ای روی گوگل مپ

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

  • دوره آموزشی رایگان توسعه REST API با Play Framework نسخه Java

    rayan_free_courseشرکت رایان هم افزا داره یه دوره رایگان آموزشی با زبان Java و چارچوب Play و Spring برگزار میکنه. فرصت خوبی برای کسانی هست که با زبان Java آشنا هستند و می‌خوان یه پیشرفت اساسی توی این زبان و چارچوب‌های مدرن داشته باشن.

  • آیا Reactive Manifesto واقعا مهمه؟

    وقتی بین همکارا بحث کارایی بالای نرم‌افزار یا پاسخویی در زمان بسیار پایین به تعداد کاربران بسیار زیاد می‌شه، همیشه این بحث به وجود میاد؛ ما که توییتر و فیسبوک نیستیم! ما که این همه کاربر نداریم و نیازی هم نیست برای رسیدن به بالاترین کارایی و سرعت تلاش کنیم. به عبارت دیگه Reactive Manifesto برای ما نیست!

  • خودآموز اسکالا در Udemy

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

  • مقایسه تجربی روبی، جاوا اسکریپت و اسکالا

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

  • این خانه از پایبست ویران است

    ما توی یه کشور گیک هراس و گیک فراری بده! زندگی میکنیم برای همین توی این وبلاگ باید یه همچین پستی رو ببینید.

  • بارگذاری ویدئو‌های کارگاه اسکالا جشن ۱۰ سالگی تهلاگ

    آخرین به روز رسانی ۱۵ تیر ۹۵: بقیه ویدئو‌ها در یک پست جدید بارگذاری شد.

  • نصب RVM روی اوبونتو دسکتاپ

    من همیشه با نصب RVM روی دسکتاپ مشکل داشتم. مشکلم رو پیدا کردم؛ اینجا توضیح دادم.

  • افتتاح وب سایت انگلیسی

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

  • سوال و جواب درباره یادگیری اسکالا

    چند وقت پیش آرش در مورد رفرنس دادن به منابع آموزشی اسکالا سوال کرده بود که من هم ارجاع دادمش به مطلب قدیمی‌تر «چطور Scala و Play Framework را یاد میگیرم» و قرار شد ببینه چی کم و کسره و مطرح کنه تا توی وبلاگ جواب بدم که شاید برای بقیه هم کاربرد داشته باشه. فعلا این سوال‌ها رو ارسال کرده تا بعد.

  • جشن ده سالگی لاگ

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

  • مکان و زمان دقیق برگزاری جشن ده سالگی لاگ

    همونطور که قبلا گفتم برای جشن ده سالگی لاگ یه ارائه دارم که به اسکالا مربوط میشه. قرار شد زمان و مکان دقیقش رو اعلام کنم.

  • خطای کمبود RAM روی سرور مجازی

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

  • ارائه تجربیات پروژه‌های اسکالا

    چند وقت پیش تصمیم گرفتم تجربیاتی که توی پروژه‌های نمایشگاه کتاب (ثبت نام ناشران و بن کتاب) داشتم رو توی تهلاگ (TehLug) ارائه بدم. خیلی از بچه‌ها هم لطف داشتن و استقبال کردن. به هر حال قرار شد برای جشن ده سالگی لاگ که ۱۵ مرداد هست، جزو یکی از ۱۲ کارگاه تخصصی این مناسبت باشه.

  • رها سازی Xcala

    منظورم از رها سازی همون Release هست!

  • رعایت کپی رایت: خرید از استیم

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

  • فیشینگ بانک پاسارگاد – پیدا کردن هکر

    یه ایمیل برام اومد که با یه روش قدیمی و شناخته شده سعی در هک کردن اکانت حساب بانکی پاسارگادم داره؛ فیشینگ (Phishing).

  • چه ابزاری بهتره؟

    امروز بعد از ساعت کاری با بچه‌های شرکت راستین تو شبکه داخلی Counter Strike بازی کردیم. خیلی حال داد ولی من یه ایده جالب از این بازی گرفتم.

  • حال و احوال و تغییرات

    تغییرات

  • Push the Limits

    پل گراهام (Paul Graham) سازنده سیستم فروشگاهی است که بعدا توسط یاهو خریداری شد و Yahoo Store نام گرفت. این سیستم فروشگاهی با زبان Lisp نوشته شده است. خود پل گراهام میگوید که Lisp یک زبان عجیب و غریب است ولی برای کاری که میخواستند انجام بدهند مناسب بود و توانستند با استفاده از تکنولوژی که بقیه کمتر از آن استفاده میکردند مزیت رقابتی داشته باشند و در نهایت موفق شوند.

  • کوتاه ترین برنامه TODO لیست MVC و بقیه ماجرا

    از زمانی که Scala.js از حالت آزمایشی خارج شد، ظاهرا تکاپو برای ایجاد چارچوب‌هایی که بتوان فقط با زبان اسکالا، هم برای سمت سرور و هم برای سمت کلاینت کد زد افزایش پیدا کرده. یکی از زیباترین این تلاش‌ها که قطعا در آینده این روند تاثیر گذار است چارچوب Widok‌ است. از دیگر نمونه‌های بسیار بسیار جالب Monifu است که هم بروی JVM و هم بر روی Scala.js (یعنی در مرورگر) اجرا می‌شود. قطعا در چند سال آینده شاهد این روند خواهیم بود که سیستم‌های بزرگی بر روی زبان‌های مدرن مثل Scala و Rust وجود خواهند داشت که به طور کامل توسط این زبان‌ها پیاده شده‌اند (مثلا سمت کلاینت با JavaScript کار نشده است).

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

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

  • تایپ ۱۰ انگشتی

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

  • مسابقه برنامه‌نویسی شبیه ساز هرمی جادی

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

  • یک سال پس از مهاجرت به لینوکس

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

  • لینوکس برنده شد!

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

  • ماهنامه شماره ۲ سلام دنیا و اسکالا

    شماره ۲ سلام دنیااگر به قسمت بالا و سمت راست جلد شماره دوم از مجله سلام دنیا نگاه کنید قطعه کدی به زبان اسکالا مشاهده می‌کنید 🙂

  • مقاله در مورد اسکالا برای مجله سلام دنیا

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

  • بالاترین سرعتی که از یک وب سرور دیدم؛ ۹ میلی ثانیه!

    بعضی وقت‌ها سرعت وب سرور‌ها را به صورت تفننی بررسی می‌کنم. یک مقایسه جالب هم بین Django، Rails و Play Framework انجام داده‌ام که در آینده منتشر خواهم کرد. اما این بار یک سرعت باور نکردنی از وب سرور Play Framework دیدم.

  • تجربه کار با لینوکس مینت

    لینوکس مینت (میزکار Cinnamon)

  • چرا حس خوبی به لینوکس دارم

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

  • با Regular Expression دوست باشیم

    برنامه‌نویس‌ها اکثرا میانه خوبی با Regular Expression ندارند ولی این ابزار یکی از بهترین و سریعترین ابزارهای موجود برای برنامه‌نویس‌هاست. تقریبا هر موجودی که می‌توان در آن تایپ کرد، از امکان جستجو و جایگزینی (Replace) بر اساس RegEx پشتیبانی می‌کند.

  • گروه کاربران ایرانی اسکالا

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

  • ساکت کردن فن لپ تاپ DELL در اوبونتو ۱۴.۰۴ – قسمت ۲

    نصب پیش‌فرض i8k که در قسمت قبل این پست گفتم باعث بالا رفتن حرارت لپ‌تاپم شد. چون تنظیمات پیشفرض آن تا حدود دمای ۷۰ درجه را عادی تلقی می‌کند.

  • ساکت کردن فن لپ تاپ DELL در اوبونتو ۱۴.۰۴ – قسمت ۱

    کارکرد زیاد فن (Fan) لپ‌تاپ‌ها روی لینوکس یک مشکل شناخته شده است که البته کارهایی هم برای حل آن انجام شده ولی حداقل برای لپ‌تاپ من (Inspiron 5520) این مشکل به صورت پیشفرض حل نشده و نیازمند برخی کارهای اضافه است.

  • تهران لاگ ۱۹۸

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

  • زبان برنامه نویسی جدید اپل Swift

    امروز، اپل زبان برنامه نویسی جدیدی به نام Swift را معرفی کرد که ظاهرا از Objective-C قوی‌تر و راحت‌تر است. برای من شباهت جالبی به اسکالا دارد!

  • حل مشکل Aptana Studio 3 در اوبونتو ۱۴.۰۴

    به تازگی Aptana Studio 3 را بر روی اوبونتو ۱۴.۰۴ نصب کردم که هر از چند گاهی بدون دلیل کرش می‌کند و بدون هیچ پیغامی بسته می‌شود. برای حل این مشکل یک راه حل ساده وجود دارد.

  • درآمد بیت کوین از کامیت در پروژه متن باز

    سعی کردم ترجمه فارسی برای Active Admin ایجاد کنم و البته آن را به پروژه اصلی Push کردم. دیگر قبول کردن و Merge کردن Push Request ها در پروژه‌های متن باز در عرض چند ساعت برایم یک چیز عجیب نیست و عادی شده. اما این غیر عادی بود که به عنوان جایزه کامیت کردن، بیت کوین هدیه بدهند! هر چند مقدار آن بسیار ناچیز است یعنی ۰٫۰۰۰۰۰۴۰۵ Ƀ که تقریبا می‌شود معادل ۷۶ ریال خودمان ولی این پول احتمالا برکت خاصی دارد 😀

  • تهران لاگ برای اولین بار

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

  • مقایسه روبی و اسکالا: یک-هیچ به نفع اسکالا

    یکی از محاسن ریلز (روبی) وجود کتابخانه‌هایی مثل Active Admin است که کارش ایجاد یک کنترل پنل با کمترین میزان نیاز به کد نویسی می‌باشد. در واقع صفحات کنترل پنل در هنگام اجرا رندر می‌شوند. قبلاً هم چنین کاری را با سی شارپ و ASP.NET MVC کرده بودم که البته از نتیجه کار راضی نبودم و پروژه واقعاً شکننده شد. البته طراحی Active Admin بسیار زیباتر و بهتر از طراحی من است.

  • اولین پروژه Ruby on Rails

    اولین پروژه ریلز (Ruby on Rails) تجاری‌ام را امروز رسماٌ شروع کردم.

  • اطلاعات جالبی از بازدید کنندگان وب سایت نمایشگاه کتاب تهران

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

  • بازی غیر قابل اعتماد (Gamification)

    غیر قابل اعتماد یک بازی برای گیگ‌های برنامه‌نویس مخصوصا جاوا اسکریپت‌ کارهاست که من از طریق وبلاگ کیبرد آزاد با آن آشنا شدم. در این بازی شما باید به درب خروجی دست پیدا کنید و برای این کار لازم است قطعه کدی بنویسید که کار را ممکن کند. مثلاً در اوایل بازی می‌توانیم یک درب خروج در نزدیکی خودمان درج کنیم و از آن خارج شویم! ولی همیشه به این سادگی نیست. مثلاً در یکی از مراحل باید یک روبات را برنامه ریزی کنیم تا از یک پیچ و خم (Maze) عبور کند و کلید درب خروج را به دستمان برساند یا در یک مرحله دیگر باید دشمن را با تیرهای خودش نابود کنیم و خیلی چیزهای جالب دیگر.

  • بهینه‌سازی جستجو در MongoDB

    در ساعات اوج، هر جستجو در کتب نمایشگاه تا حتی چند ثانیه طول می‌کشید. مشکل از Regular Expression بود.

  • وب سایت نمایشگاه کتاب بارگذاری شد

    logoالبته وب سایت قبلا بارگذاری شده بود فقط روی یک پورت دیگر (غیر از ۸۰) بود تا اطلاعات وارد شده و تست‌ها انجام گیرد. حالا وب سایت در آدرس www.tibf.ir قابل مشاهده است.

  • تعداد کانکشن‌های آنلاین سرور نمایشگاه کتاب

    برای یافتن کانکشن‌های برقرار شده با یک سرور می‌توانیم از دستور netstat استفاده کنیم و برای شمردن آن‌ها از دستور wc.

  • در انتظار اوبونتو ۱۴.۰۴

    اوبونتو ۱۴.۰۴ که یک نسخه با پشتیبانی بلند مدت است (LTS) قرار است امروز منتشر شود. احتمالا تا چند ساعت آینده این اتفاق می‌افتد.

  • وب سایت جدید نمایشگاه کتاب، نزدیک به انتشار

    وب سایت جدید نمایشگاه بین‌المللی کتاب تهران در حال آماده‌شدن است. با همان تکنولوژی که قبلاً در موردش گفته بودم. هم اکنون نسخه آزمایشی این وب سایت به همراه یک وب سایت دیگر (با همان تکنولوژی) بر روی یک سرور لینوکس مجازی تک پردازنده‌ای ۳۲ بیتی با ۱ گیگ رم قرار گرفته. سرعت همین وب سایت‌های موقتی بسیار بیشتر از نسخه ویندوزی است که بر روی یک سرور ۶ هسته‌ای ۶۴ بیتی با ۶ گیگ رم قرار دارد!

  • همکاری در Play Framework

    برای اولین بار در Play Framework مشارکت کردم! البته این مشارکت فقط ۶ کاراکتر بود 🙂 برای همین ۶ کاراکتر مجبور شدم موافقت‌نامه مشارکت در این پروژه را امضا کنم اما نکته جالب اینجاست که درخواستم در کمتر از ۲۴ ساعت در نسخه اصلی Merge شد.

  • از برتری‌های اسکالا نسبت به سی شارپ – ۱

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

  • متن باز دات نتی

    dotnet_logoامروز شرکت Xamarin و مایکروسافت اعلام کردند که در یک همکاری مشترک اقدام به ایجاد یک بنیاد مشترک به نام بنیاد دات نت می‌کنند و پروژه‌های بیشتری را متن باز خواهند کرد تا توسط این بنیاد اداره شود. البته پروژه جدیدی در لیست پروژه‌های این بنیاد دیده نمی‌شود و تقریبا خیلی وقت است که این پروژه‌ها، متن باز هستند؛ مثل ASP.NET MVC.

  • ابزاری عالی برای Prototyping

    بارها به این نتیجه رسیده‌ام که بهترین ابزار برای Prototyping و کار بر روی UI (حداقل برای شروع)، طراحی روی کاغذ است. از همین روش در چندین پروژه به صورت تیمی استفاده کردیم و بسیار راضی بودیم.

  • به ندای درونت گوش بده!

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

  • موسیقی خوب:‌ باران تویی

    baran_toyiیک آلبوم موسیقی یافتم به نام باران تویی از گروه چارتار که خیلی خوب است! لطفاً از بیپ تونزخریداری کنید. فقط ۲ هزار و ۵۰۰ تومان.

  • GnuCash برای حسابداری شخصی

    نزدیک به ۲ سال است که هزینه‌ها و درآمدهایم را به ریز ثبت می‌کنم. این کار چند منفعت برای من داشته است:

  • سرعت ثانیه‌ای به‌روزرسانی ویکی‌پدیا

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

  • فروش خالص روزانه ۱ میلیارد و ۲۰۰ میلیونی دیجی‌کالا

    مطلبی از وب سایت خوشفکری خواندم که دیجی‌کالا، به طور متوسط روزانه ۲۰۰۰ سفارش دارد که متوسط قیمت هر یک ۶۰۰ هزار تومان است. یعنی روزی ۱ میلیارد و ۲۰۰ میلیون تومان فروش خالص! اگر ۷ درصد آن سود باشد به رقم  ۸۴ میلیارد تومان می‌رسیم (در روز)! قسمت خوبش برای من این است که دیجی‌کالا فروشنده‌های سنتی را عاصی کرده.

  • رزومه آنلاین

    بعد از حدود یک سال بالاخره رزومه را به روز رسانی کردم اما این‌بار از نسخه Word و PDF خبری نیست بلکه با HTML آن را بازتولید کردم. نمی‌دانم این تاثیر مثبت یا منفی بر روی مخاطب داشته باشد که رزومه آنلاین باشد، اما منطقی به نظر می‌رسد که در سال ۲۰۱۴ از رزومه‌های آنلاین به جای PDF و … استفاده کرد. فقط مشکل چاپ آن است که با وجود Bootstrap نسخه چاپی آن واقعاً کاربردی است. حتی لینک‌هایی که آدرسش در HTML مشخص نیست را به صفحه اضافه می‌کند (چون نمی‌توان روی Hyperlink چاپی کلیک کرد!).

  • سرعت فضایی Scala و Play Framework و Mongo

    so_happy_small

  • امنیت در PATH

    وقتی می‌خواهیم در لینوکس یک برنامه یا اسکریپت که در فولدر جاری قرار دارد و البته از نوع قابل اجرا هم است (با دستور chmod +x) را اجرا کنیم،‌ بر خلاف ویندوز فقط نوشتن نام فایل اجرایی کافی نیست و باید پیشوند نقطه-اسلش (dot-slash) را به آن اضافه کنیم.

  • نصب نود بر روی اوبونتو ۱۳.۱۰

    برای نصب نود (NodeJS) باید دستورات زیر را در ترمینال اجرا کرد:

  • آزادی پلتفرم

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

  • لینوکس مگ به هدف مالی‌اش رسید

    ظاهراً پروژه لینوکس مگ به هدف مالی خودش دست پیدا کرد.

  • پردازش توزیع شده و غیر همزمان تصویر در MongoDB با Scala

    MongoDB فایل‌های بزرگتر از ۱۶ مگابایت را به صورت تکه تکه شده ذخیره می‌کند. به هر کدام از این تکه‌ها یک Chunk می‌گویند. قوانینی که برای ذخیره و بازیابی فایل در MongoDB وضع شده GridFS نام دارد که توسط درایورهای MongoDB پیاده‌سازی می‌شود.

  • مدیرعامل جدید مایکروسافت معرفی شد

    امروز ساتیا نادلا به عنوان مدیرعامل جدید مایکروسافت و جایگزین ستیو بالمر معرفی شد. او زاده‌ی حیدرآباد هند است و قبلاً رئیس قسمت رایانش ابری و شرکتی مایکروسافت بود. ته لهجه‌ای از هندی هم دارد!

  • «مرا به خاطر بسپار» در Scala و Play Framework

    تقریباً همه کتابخانه‌های اعتبار سنجی از گزینه «مرا به خاطر بسپار» پشتیبانی می‌کنند.برای چارچوب Play (بر روی اسکالا) چندین پیاده‌سازی در خصوص قسمت‌های مختلف اعتبار سنجی کاربران وجود دارد که هر کدام مزایا و معایب خودشان را دارند و البته بسیاری از آنها فوق‌العاده هستند. اما بخاطر اینکه هم بهتر اسکالا و Play و MongoDB را یاد بگیرم و هم بیشتر با Functional Programming آشنا شوم خودم دست به کار شدم برای پیاده‌سازی یک کتابخانه اعتبار سنجی که دارای مشخصات زیر است:

  • چطور Scala و Play Framework را یاد می‌گیرم

    یکی از خوانندگان وبلاگ (رضا) در مورد منابعی که برای یادگیری Scala و Play Framework استفاده کردم سوال کرد. متن زیر بیشتر شبیه یک سفرنامه است تا لیست منابع اما امیدوارم منابعی هم از آن قابل استخراج باشد 🙂

  • مهمانی کپی رایت

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

  • اولین پروژه تجاری Scala

    smooth-spiralامروز اولین پروژه تجاری با Scala را گرفتم. برای پیاده‌سازی از تکنولوژی‌های زیر استفاده خواهم کرد:

  • نابرده رنج

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

  • ناتیلوس؛ باز کردن پوشه در ترمینال با راست کلیک

    open-in-terminal

  • مسئله جوانان و بیکاری

    نمی‌خواهم نمک به زخم جوانان بیکار بریزم اما این موضوع بیکاری موضوع جالبی شده!

  • اتمام دوره آموزشی Principles of Reactive Programming

    یکی از دوستان بزرگوار که از علاقه‌مند شدن من به زبان Scala آگاه بود، دوره آموزشی Principles of Reactive Programming را به من معرفی کرد. که توسط اساتید زیر برگزار شد:

  • تغییرات؛ انجام شد

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

  • ساخت وب سایتی شبیه Stack Overflow با Service Stack

    یکی از نمونه‌هایی که در سایت Service Stack برای یادگیری برنامه‌نویسان و نمایش قدرت و سادگی این چارچوب قرارداده شده، یک برنامه تحت وب تک صفحه‌ای (Singe Page Application) است که سعی کرده Stack Overflow را شبیه سازی کند.

  • چرا از DependencyResolver در ASP.NET MVC استفاده نمی‌کنم؟

    یکی از راه‌های استفاده از Dependency Injection در ASP.NET MVC استفاده از متد DependencyResolver.SetResolver است. اما من هیچ وقت از آن استفاده نمی‌کنم. هر چند DependencyResolver از ضد الگوی Service Locator استفاده می‌کند ولی دلیل من برای عدم استفاده از آن فقط این نیست.

  • کاربران موتور بازی Unity از ۲ میلیون گذشتند

    موتور بازی Unity یک موتور سه بعدی است که برای ساخت اکثر بازی‌ها (حتی دو بعدی) کاربرد دارد. موتور اسکریپت نویسی آن بر روی Mono استوار شده است تا بر روی اکثر پلتفرم‌های موجود قابل اجرا باشد و همین برای من خیلی جالب است. می‌توان با زبان C# هم برای این موتور به راحتی برنامه‌نویسی کرد.

  • زبان پایتون در ویژوال استودیو

    من هیچ علاقه‌ای به زبان‌های دینامیک (Dynamic) از جمله پایتون (Python) ندارم. اما واقعاً برایم جالب است که تیم توسعه ابزارهای توسعه‌دهنده مایکروسافت امکان استفاده از پایتون در Visual Studio را به صورت رایگان فراهم کردند! نکته جالب مسیری است که مایکروسافت در آن قرار گرفته؛ به جای پافشاری بر روی عقاید قدیمی و یا بستن محیط، مشغول کار کردن بر روی باز کردن محیط و امکانات است.

  • زغال؛ از کد پلکس به گیت هاب

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

  • کد دات نتی شما چقدر موبایلی است؟

    به تازگی شرکت Xamarin یک ابزار تولید کرده که با دریافت اسمبلی‌های اجرایی دات نت به شما می‌گوید که چند درصد از برنامه شما برای اجرا بر روی پلتفرم‌های موبایل آماده است. چارچوب زغال را تست کردم و نتیجه جالب بود؛

  • ملاقات با مشتری در حین انجام پروژه

    اکثر کسانی که به صورت پروژه‌ای کار می‌کنند (از جمله خود ما) از داشتن قرار ملاقات مکرر با مشتری، در حین انجام پروژه ترس دارند. مواردی که باعث این ترس می‌شوند از این قبیل هستند؛

  • از تجربه ۸ ماه کار در مایکروسافت چه می‌توان آموخت؟

    این پست را در وبلاگ آی کلاب خواندم که ترجمه‌ی یک پست از یکی از کارمندان جوان مایکروسافت است؛ Ahmet Alp Balkan. کلیت آن انتقاد از فرهنگ حاکم بر محل کار اوست. خواندن پست او و ترجمه آن یک تجربه است و خواندن کامنت‌های پست اصلی یک تجربه دیگر. حتماً پیشنهاد می‌کنم کامنت‌ها را در وبلاگ اصلی مطالعه کنید، Hanselman هم در آنجا کامنت گذاشته. کاملاً قابل انتظار است که بسیاری از افراد از این پست برای تایید انتقادات خود از مایکروسافت یا شرکت‌های بزرگ دیگر استفاده کنند و جنگ مذهبی به راه بیفتد! اما من دوست دارم از این مطلب چیزهای مهم‌تری بیاموزم.

  • برنامه‌نویسی برای ساعت با سی شارپ

    watchشرکت Netduino یک ساعت بسیار جذاب ساخته که پلتفرم آن .NET Micro Framework است. شرکت Netduino سخت افزارهای ارزان قیمت (از ۳۴ دلار) بر روی پلتفرم .NET Micro Framework می‌سازد که می‌توان به راحتی با Visual Studio برای آن‌ها کد نوشت. اخیراً این شرکت یک ساعت جذاب تولید کرده که شبیه ساز آن نیز پنجشنبه همین هفته در وب سایتش قابل دانلود خواهد بود و بدون خریدن ساعت می‌توان برای آن کد زد. دقیقاً به همان شکلی که برای یک وب سایت کد می‌نویسیم می‌توانیم برای این ساعت هم کد بنویسیم؛ با زبان C#! برای اینکه کار کاملاً قانونی باشد می‌توانید Visual Studio 2012 Express و .NET Micro Framework را به صورت رایگان دانلود کرده و شروع به کار کنید (نسخه Visual Studio 2012 Ultimate هم مطمئناً قابل استفاده است).

  • مشکل نصب یونیتی ۳ بر روی دات نت ۴

    در زمان نوشتن این پست، نسخه ۳ از یونیتی (Unity) بر روی دات نت ۴.۵ نصب می‌شود. برای پروژه‌هایی که بر روی دات نت ۴ هستند، باید از نسخه ۲ یونیتی استفاده کرد. متاسفانه به نظر می‌رسد مشکلی در بسته‌بندی یونیتی ۳ وجود دارد که نسخه کنونی دات نت پروژه را تشخیص نمی‌دهد تا در صورت نیاز به جای استفاده از نسخه ۳ یونیتی از نسخه ۲ استفاده کند. خوشبختانه اجتماع یونیتی به اندازه کافی فعال است و در این زمینه به خوبی کمک کردند.

  • روش جالب تبلیغات برای استخدام برنامه‌نویس

    skydrive_headerداشتم وب سایت SkyDrive را بررسی می‌کردم. متوجه شدم که یک Custom HTTP Header در پاسخ هر درخواست ارسال می‌شود به نام x-We-Are-Hiring و مقدار آن برابر است با skydrivejobs[at]microsoft[d0t]com. واقعاً روش جالبی برای جذب نیروی کار است. به نظرم این خودش بهترین فیلتر است تا افراد گزینش شده تر و کنجکاوتری درخواست کار و رزومه ارسال کنند.

  • ایجاد اطمینان در پروژه‌های برون‌سپاری شده

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

  • پیاده‌سازی Abstract Factory در Unity

    هنگام استفاده از Dependency Injection گاهی اوقات لازم است که از یک Factory برای ایجاد اشیاء جدید استفاده کنیم چون مسیر Composition Root جواب کار ما را نمی‌دهد. مخصوصاً در هنگام استفاده از Strategy Pattern.

    برای این کار می‌توانیم یک کلاس داشته باشیم که Container را به عنوان ورودی دریافت کند (به عنوان Constructor Dependency) و از آن برای ایجاد اشیاء استفاده کند. فقط باید دقت داشته باشیم Factory ما قرار نیست هر چیزی را ایجاد کند و در واقع یک Abstract Factory است.

    اینترفیس زیر را در نظر بگیرد؛

    public interface ICommand
    {
        void Execute();
    }

    و فرض کنید که کلاس‌های زیر آن را پیاده‌سازی کرده‌اند؛

    public class FirstCommand : ICommand
    {
        void Execute()
        {
            // Do something...
        }
    }
    
    public class SecondCommand : ICommand
    {
        void Execute()
        {
            // Do something...
        }
    }

    و حالا می‌خواهیم به صورت Dynamic در جایی از برنامه، و بر اساس یک پارامتر خاص یکی از دو کلاس بالا را ایجاد کنیم. دقت کنید که در حال استفاده از Dependency Injection هستیم و نمی‌توانیم از کلمه کلیدی new استفاده کنیم. پس برای این کار یک Abstract Factory می‌سازیم که با دریافت نام یک Command آن را ایجاد می‌کند. در اینجا از Convention Over Configuration استفاده می‌کنیم؛

    public interface ICommandFactory
    {
        ICommand Create(string name);
    }
    
    public class CommandFactory : ICommandFactory
    {
        private IUnityContainer container;
    
        public CommandFactory(IUnityContainer container)
        {
            this.container = container;
        }
    
        public static Type[] GetCommandTypes()
        {
            var commandInterfaceType = typeof(ICommand);
            return commandInterfaceType.Assembly
                .GetTypes()
                .Where(t => t.GetInterfaces().Any(i => i == commandInterfaceType))
                .ToArray();
        }
    
        public ICommand Create(string name)
        {
            var commandName = string.Format("{0}Command", name);
    
            var commandType = CommandFactory
                .GetCommandTypes()
                .FirstOrDefault(c => c.Name == commandName);
    
            if (commandType == null)
            {
                throw new Exception("Couldn't find a command with the specified name.");
            }
    
            return (ICommand)this.container.Resolve(commandType);
        }
    }

    همان طور که می‌بینید IUnityContainer به عنوان ورودی سازنده به این کلاس تزریق خواهد شد.

    البته متد GetCommandTypes با Reflection کار می‌کند و مطمئناً از کارایی بالایی برخوردار نیست ولی در نسخه نهایی این موضوع را با استفاده از Singleton بهبود داده‌ام. لینک دانلود سورس این برنامه در پایان این پست موجود است.

    جهت شبیه سازی بیشتر محیط واقعی، یک کلاس دیگر برای استفاده از این Factory می‌سازیم؛

    public class MyService
    {
        private ICommandFactory commandFactory;
    
        public MyService(ICommandFactory commandFactory)
        {
            this.commandFactory = commandFactory;
        }
    
        public void Invoke()
        {
            var command = this.commandFactory.Create("First");
            command.Execute();
    
            command = this.commandFactory.Create("Second");
            command.Execute();
        }
    }

    در این کلاس فقط از CommandFactory جهت ایجاد دو Command به صورت Dynamic استفاده می‌شود که می‌تواند کاربردهای زیادی داشته باشد.

    و اما Composition Root برنامه که برای برنامه‌های Console همان متد Main است؛

    class Program
    {
        static void Main(string[] args)
        {
            // Setup DI container
            var container = new UnityContainer();
            container.RegisterType<ICommandFactory, CommandFactory>();
    
            // Resolve my composition root object
            var myService = container.Resolve<MyService>();
    
            // Execute
            myService.Invoke();
    
            // See what happened
            Console.ReadKey();
        }
    }

    همانطور که مشاهده می‌کنید، در خط ۷، فقط CommandFactory ثبت (Register) شده. اما در هنگام Resolve شدن CommandFactory لازم است تا IUnityContainer هم Resolve شود ولی ما آن را ثبت (Register) نکرده‌ایم. عملیات Resolve در خط ۱۰ به ترتیب زیر اتفاق می‌افتد:

    • MyService
      • ICommandFactory
        • CommandFactory
          • IUnityContainer

    پس چطور برنامه اجرا می‌شود؟ نکته جالب اینجاست که Unity در هنگام Resolve به صورت پیشفرض IUnityContainer را Resolve کرده و خودش را به جای آن تزریق می‌کند و به عبارت ساده نیازی نداریم تا IUnityContainer را مثلاً به شکل زیر ثبت کنیم؛

    container.RegisterType<IUnityContainer>(new InjectionFactory(c => c));

     

    نسخه کامل برنامه را از اینجا دریافت و اجر کنید. برای اجرا به Visual Studio 2012 نیاز دارید.

    هر چند در این پست پیاده‌سازی Abstract Factory با استفاده از Unity شرح داده شد اما این مطالب، به هر Dependency Injection Container دیگری (مثل Ninject) نیز قابل تعمیم است.

  • معجزه ایمیل

    امروز می‌خواستم موضوعی را با بقیه اعضای تیم (۴ نفر) بررسی کنم. در صورتی که در یک محل حضور داشتیم معمولاً روال این‌طور بود که باید اول به همه اعلام می‌کردم بعد احتمالاً هر یک از افراد صحبت‌های متفاوتی می‌کردند که نیازمند بررسی حرف‌های هر یک به صورت جداگانه بود. در این صحبت‌ها هم همیشه حرف‌های تکراری زده می‌شود چون طبیعی است یک نفر به حرف دیگری گوش نداده باشد. برای یک کار به این کوچکی هم نمی‌توان جلسه گذاشت چون هنوز نمی‌دانم به همه مربوط می‌شود یا خیر؟ اما به هر حال همین کار حدود ۱۵ تا ۲۰ دقیقه از وقتم را می‌گرفت، اگر می‌خواستم با این شرایط، انتقال مطلب دهم.

  • کار تیمی – در طول یا در عرض

    دیروز یک مستند در خصوص یک مأموریت نظامی دیدم. مهم‌ترین نکته آن فیلم این بود که هر تیم کار خودش را انجام می‌داد و به تیم دیگر جز در خصوص ورودی‌ها و خروجی‌ها کاری نداشت. حتی در سطح تیم نیز هر یک از افراد تیم دارای مهارت خاصی بودند. مثلاً یک تیم کماندو که در آن یکی پزشک بود، یکی زبان‌شناس و … با وجود مشکلی که در روند مأموریت آن‌ها پیش آمد آن‌ها کاملاً موفق عمل کردند!

RSS