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

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

به زودی نسخه نهایی آماده شده و در دسترس عموم قرار می‌گیرد. اگر فرصت بیشتری داده می‌شد علاقه داشتم که روی واسط کاربری (UI) و تجربه کاربری (UX) آن بیشتر کار کنم تا ظاهر کار هم در کنار باطنش زیباتر باشد.

همه برنامه‌نویس‌ها می‌دانند که چه لذتی دارد وقتی نرم‌افزاری که تولید کرده‌اند سرویس مهم را ارائه می‌دهد و یا پاسخگوی نیاز تعداد زیادی از کاربران است.

۲۸م فروردین ۱۳۹۳ بازدید: 11 دسته بندی: فناوری دیدگاه‌ها: ۳

همکاری در Play Framework

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

نتیجه اخلاقی: به این میگن پروژه متن باز!

۲۲م فروردین ۱۳۹۳ بازدید: 35 دسته بندی: فناوری دیدگاه‌ها: ۴

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

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

در واقع این مورد، برتری Function Programming است و همچنین نشان می‌دهد پشتیبانی از Lambda در یک زبان الزاماً به معنی پشتیبانی از Functional Programming در آن زبان نیست.

در سی شارپ وقتی بخواهیم یک خصیصه از یک شی را نمایش دهیم در حالی که مطمئن نیستیم آن شی Null است و در صورت Null بودن می‌خواهیم یک مقدار پیشفرض (مثل یک رشته خالی) را نمایش دهیم. به این صورت عمل می‌کنیم:

nullableObj == null ? "" : nullableObj.Property

اما اگر آن شی با صدا زدن یک متد به دست بیاید باید به شکل زیر عمل کرد:

obj.GetSomething() == null ? "" : obj.GetSomething().Property

که اغلب نمی‌خواهیم یک متد را دو بار صدا بزنیم پس باید آنرا در یک متغییر ذخیره و بعد استفاده کنیم که به شکل زیر در می‌آید:

var nullableObj = obj.GetSomething()
nullableObj == null ? "" : nullableObj.Property

تصور کنید می‌خواهیم عبارت بالا را در یک Razor View درج کنیم. چون یک انتصاب به متغییر وجود دارد، کار سخت می‌شود:

@{
var nullableObj = Model.GetSomething()
}

...

@(nullableObj == null ? "" : nullableObj.Property)

اما در اسکالا یک نوع وجود دارد به نام Option که وقتی قرار است یک شی تهی باشد پیشنهاد می‌شود از این نوع استفاده شود. مثلاً اگر بین رشته خالی و تهی تفاوت قائل هستید باید از نوع Option[String] استفاده کنید (در اسکالا برای معرفی نوع‌های Generic به جای کارکتر‌های <> از [] استفاده می‌شود مثلا در سی شارپ داریم Type1<Type2> در حالی که معادل آن در اسکالا می‌شود Type1[Type2]). Option تقریبا معادل Nullable در سی شارپ است.

با استفاده از Option، عبارت بالا به شکل زیر در اسکالا نوشته می‌شود:

obj.getSomething.map(_.property).getOrElse("")

همین عبارت را می‌توان در View Template پیشفرض Play استفاده کرد و مثل سی شارپ نیازی به انتصاب یک متغییر اضافی نیست.

این عبارت را می‌توان به شکل‌های مختلف دیگری هم نوشت و البته دفعه اول که کد‌های شبیه این را می‌دیدم فکر می‌کردم سخت و ناخواناست ولی به هر شکل آن که عادت کنید دیگر نوشتن کد با زبان‌هایی مثل سی شارپ واقعاً سخت می‌شود. الان وقتی روی سی شارپ کد می‌زنم احساس می‌کنم از ویندوز ۷ به ویندوز XP مهاجرت کردم. یک حس نوستالژیک دارم ولی انگار دست و پایم را بسته‌اند!

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

۱۸م فروردین ۱۳۹۳ بازدید: 142 دسته بندی: فناوری دیدگاه‌ها: ۸

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

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

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

تک فرهنگی بودن

اگر مایکروسافت تمام دات نت را هم متن باز کند، تا زمانی که امکان اجرای آن بر روی سیستم عامل‌های غیر ویندوزی با همان کیفیت اجرا بر روی ویندوز وجود نداشته باشد در واقع آن نرم‌افزار‌ها را آزاد نکرده است و به عبارت دیگر انحصار‌هایی مثل Echo Chamber سر جایش باقی مانده.

مدل تجاری

در یک ویدئو دیدم که Miguel de Icaza (بنیانگذار Mono و بعدها شرکت Xamarin) می‌گفت در دنیای تجاری (غیر متن باز) بر خلاف دنیای متن باز مردم به راحتی برای محصولات پول خرج می‌کنند و این خیلی جالب است. محصولات شرکت Xamarin پولی هستند و اگر هم محصول متن بازی ارائه کرده است همه آن‌ها باید بر روی محصولات پولی Xamarin اجرا شوند (البته یک نسخه محدود شده مجانی دارد که فقط برای برنامه‌های بسیار ساده و کوچک قابل استفاده است). به عبارت دیگر شرکت Xamarin مدل تجاری شبیه مایکروسافت دارد.

در پرانتز: Miguel de Icaza یکی از افراد معروف در دنیای متن باز بود و جایزه‌هایی هم در این زمینه در حدود سال ۲۰۰۰ گرفت. اما کم کم تغییر مسیر داد تا جایی که در سال ۲۰۱۰ یک جایزه Microsoft MVP دریافت نمود.

خطر تجاری شدن

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

مدل تجاری که جامعه دات نت با آن در ارتباط است باعث می‌شود توسعه‌دهندگان به این سمت بروند تا بتوانند کارشان را ادامه دهند.

جامعه (Community)

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

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

۱۵م فروردین ۱۳۹۳ بازدید: 45 دسته بندی: فناوری , کسب و کار دیدگاه‌ها: ۲

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

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

Prototyping on Paper یک نرم‌افزار برای موبایل است که امکان می‌دهد با گرفتن عکس از روی همین مستندات کاغذی یک نسخه فعال Prototype ایجاد کنید که حتی با کلیک بر روی قسمت‌های مختلف طرح‌ها از خود واکنش نشان می‌دهد، مثلاً وارد یک صفحه دیگر می‌شود.

۱۴م فروردین ۱۳۹۳ بازدید: 25 دسته بندی: فناوری دیدگاه‌ها: اولین نفر باشید

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

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

2888-cm288804edd805f929e5jpeg-CUOW

منبع تصویر

۹م فروردین ۱۳۹۳ بازدید: 69 دسته بندی: مدیریت , کسب و کار دیدگاه‌ها: ۳

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

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

برای برنامه‌نویسی هم خوب است.

۴م فروردین ۱۳۹۳ بازدید: 60 دسته بندی: دسته‌بندی نشده دیدگاه‌ها: ۴

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

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

  1. آرامش ذهنی: کلا وقتی چیزی که ذهنمان را مشغول کرده را ثبت می‌کنیم و از مغزمان بیرون می‌آوریم باعث آرامش بیشتر می‌شود.
  2. آمار و ارقام: اینکه در سالی که گذشت چقدر درآمد داشتم و پولم صرف چه کارهایی شده و در آینده می‌توانم چه مسیری را طی کنم، باعث ایجاد انگیزه و یا اصلاح کارها می‌شود.
  3. پیش‌بینی‌های مالی: با توجه به اینکه من پیمانکاری کار می‌کنم و حقوق ثابت ندارم این کمک بزرگی است که بدانم تا چه زمانی دوام می‌آورم و می‌توانم چه حرکت‌های اقتصادی بزنم.

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

ابزاری که برای این کار استفاده می‌کردم در ابتدا یک فایل Excel بود. بعد از یک فایل Access استفاده کردم. بعد از مهاجرت به لینوکس از LibreOffice Base استفاده کردم و در همان زمان یک اکانت از جیب هم خریدم. سیستم جیب خیلی خوب است ولی مشکلات جزئی آن و کند بودن کار با نرم‌افزارهای تحت وب اینچنینی باعث شد با همان LibreOffice Base که جایگذین Access در لینوکس است ادامه دهم. البته می‌شد با کمی بهبود کاری کرد که کاربر همان حس راحتی کار با نرم‌افزار ویندوزی را در جیب هم داشته باشد.

GnuCashBanner

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

۳م فروردین ۱۳۹۳ بازدید: 35 دسته بندی: فناوری , مدیریت دیدگاه‌ها: ۲

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

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

بچه‌های ویکی‌پدیا، کلا بچه‌های اجتماع متن باز، متشکریم.

۲۹م اسفند ۱۳۹۲ بازدید: 52 دسته بندی: فناوری دیدگاه‌ها: اولین نفر باشید

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

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

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

واقعاً مصخره نیست که تولید کننده که اصل کار را انجام داده سود اصلی را نمی‌برد و مشتری که اصل پول را پرداخت می‌کند درصد زیادی از پول را بابت اصل جنس پرداخت نمی‌کند؟

خوشبختانه شغل ما تنها کاری است که بستر از بین بردن این سیستم غلط را فراهم می‌کند. امیدوارم کارهایی مثل دیجی‌کالا بیشتر و موفق‌تر شوند.

نتیجه اخلاقی: بی دلیل نیست که تکنولوژی‌هایی مثل اکو سیستم Scala روز به روز بیشتر مورد توجه قرار می‌گیرند. برای ۲۰۰۰ فروش روزانه باید تکنولوژی را مورد استفاده قرار دهید که جوابگوی مراجعه کننده میلیونی باشد.

۲۵م اسفند ۱۳۹۲ بازدید: 121 دسته بندی: فناوری , مدیریت , کسب و کار دیدگاه‌ها: ۳