قدم‌های جدید در اوبونتو

نزدیک به هشت ماه است که به طور جدی از اوبونتو به جای ویندوز استفاده می‌کنم. به عنوان یک برنامه‌نویس دات‌نت فعلاً چاره‌ای جز مراجعه به ویژوال استودیو و ویندوز برای انجام امور برنامه‌نویسی ندارم. ولی در عوض هر نوع فعالیت غیر برنامه‌نویسی دات‌نتی را در اوبونتو انجام می‌دهم. هنوز کارایی استفاده از کامپیوتر به زمانی که از ویندوز استفاده می‌کنم نرسیده است ولی خوشحالم که هشت ماه است با اوبونتو دوام آورده‌ام. از بدو شروع سعی کردم به اوبونتو مسلط شوم، سعی کردم دات‌نت را در آن بالا بیاورم، نسخه جدید ASP.NET را در آن اجرا کنم و حتی سعی کردم ویژوال استودیو را در آن استفاده کنم. اما خوب تا حالا موفق نشدم که فعالیت‌های برنامه‌نویسی‌ام را به آن منتقل کنم.

هر اندازه که در استفاده از اوبونتو برای انجام برنامه‌نویسی دات‌نت ناموفق بودم در عوضش به عنوان یک admin پیشرفت خوبی در اوبونتو و لینوکس داشتم. با بسیاری از دستورات خط فرمانی آشنا شدم، Apache و MySql را خیلی بیشتر شناختم، با File Permission لینوکس بیشتر آشنا شدم، چندین بار WordPress را نصب کردم و حتی مقداری با PHP سر و کله زدم. با نصب تعدادی از نرم‌افزارهای کد باز دیگر مثل Redmine و Vtiger CRM آشنا شدم و تقریباً در بیشتر آن‌ها یک دور فرایند Migration از نرم‌افزارهای قبلی به نرم‌افزارهای جدید را انجام دادم. و دست آخر اینکه در برنامه ده سالگی لاگ تهران شرکت کردم. طی انجام این کارها موفق شدم یک سرور ویندوزی را تقریباً خالی کرده و عمده برنامه‌هایش را به یک سرور Ubuntu Server منتقل کنم.

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

ده سالگی گروه کاربران لینوکس تهران

گروه کاربران لینوکس (لاگ) تهران دیروز پنج شنبه ۹۴٫۵٫۱۵ جلسه ویژه دهمین سالگرد تاسیس خود را با حضور ۳۰۰ نفر از اعضا و علاقمندان برگزار کرد. این نهایت خوش شانسی من بود که اولین حضورم در لاگ مصادف شد با ویژه برنامه ده سالگی و حضور فعال اعضای قدیمی و علاقمندان جدید لاگ. نکته جالب اینکه در لاگ تعدادی از دوستان قدیمی و جدید را هم که فکر نمی‌کردم آنجا حضور داشته باشند دیدم. جلسه لاگ در مرکز آموزش عالی خاتم برگزار شد. فضای سالن کنفرانس و کلاس‌ها و به طور کلی کیفیت مکان، هماهنگی و پذیرایی خیلی خوب بود به نظر من. حضور افرادی مثل جادی، دانیال بهزادی، محمد افاضتی و بهنام توکلی باعث شده بود مراسم خیلی جذاب‌تر و جدی‌تر به نظر برسد. ویژه برنامه شامل دو سری کارگاه، پذیرایی و اختتامیه بود. من کارگاه‌های «تجربه‌ای عملی با زبان اسکالا» و «کسب درآمد توسعه دهندگان و تجاری سازی نرم افزارهای آزاد و متن باز» را برای حضور انتخاب کردم.

کارگاه تجربه‌ای عملی با زبان اسکالا (سختی‌ها و راه‌حل‌های پیاده‌سازی نمودن سایت پربازدید و پرتراکنش نمایشگاه کتاب ۹۴ با زبان اسکالا)

این کارگاه که توسط امیر کریمی برگزار شد شامل تجارب عملی او از به کارگیری اسکالا در یک پروژه جدی و پربازدید و دلایلی بود که باعث شده بود از سمت دات‌نت و ویندوز به سمت اسکالا و لینوکس کشیده شود. او در کارگاه اجرای جذاب و پر انرژی داشت و سعی کرد همه جوانب موضوع را پوشش داده و به سؤالات همه حاضران جواب دهد. علاقمندی شرکت کنندگان و Cancel شدن کارگاه نوبت بعد باعث شد که کارگاه او برای نوبت دوم هم ادامه پیدا کند. اسلاید مربوطه را اینجا ببینید.

کسب درآمد توسعه دهندگان و تجاری سازی نرم افزارهای آزاد و متن باز توسط

این کارگاه، جزء کارگاه‌های مورد علاقه استارتاپ‌ها، Freelancerها و کلاً کسانی بود که تم کارآفرینی و کسب درآمد داشتند. کسانی که فقط به زیبایی کد فکر نمی‌کنند بلکه کسب درآمد هم آیتم مهمی برایشان است. کارگاه توسط علیرضا حسین‌نژاد و به شکل تعاملی و پرسش و پاسخ برگزار شد. اشتراک تجارب و اطلاعات شرکت کنندگان در کارگاه به مفید بودن کارگاه کمک بسیار خوبی کرد. شاید تک تک شرکت کنندگان کم و بیش با همه راه‌های کسب درآمد مطرح شده آشنا بودند ولی جمع‌بندی و بحث دسته‌جمعی باعث شده کارگاه و ارائه آقای حسین نژاد بسیار مفید فایده واقع بشود.

کار با OWIN

OWIN یک Specification برای حذف وابستگی مستقیم بین برنامه‌های ASP.NET و Web Serverها است. این استاندارد را مایکروسافت به وجود آورده و بر اساس آن تکنولوژی‌های مختلفی مثل Katana و Helios را نیز تولید کرده است. من سعی کردم یک پروژه ASP.NET را صرفاً بر اساس OWIN ایجاد کنم. این نوشته حاوی نکات و اطلاعاتی است که در انجام این کار با آنها برخورد کردم.

 

OWIN یک Abstraction بر فراز وب سرورها از جمله IIS است. OWIN کمک می‌کند که برنامه‌های ASP.NET بتوانند به راحتی با Web Serverهای دیگری غیر از IIS هم کار کنند. از این طریق می‌توان برنامه‌های ASP.NET را خیلی راحت‌تر روی دیگر Web Serverها از جمله آپاچی و nginx و در دیگر سیستم‌عامل‌ها و سخت‌افزارها از جمله لینوکس، مک و Raspberry Pi سوار کرد. مایکروسافت تلاش زیادی می‌کند تا ASP.NET vNext به صورت Cross Platform در بیاید. در این راه رقابت سنگینی هم با امثال Node.js و Ruby دارد. یکی دیگر از اهداف OWIN و تکنولوژی‌های مربوطه استفاده از سرورهای خیلی سبک‌تر از IIS است. البته نه این که IIS وب سرور بدی است و دیگر نباید از آن استفاده کرد بلکه موضوع این است که IIS دارای بخش‌های خیلی زیادی است که خیلی وقت‌ها ممکن است اصلاً مورد نیاز برنامه نباشد. پس شابد بهتر باشد وب سروری وجود داشته باشد که تنها شامل آن بخش‌هایی باشد که واقعاً توسط برنامه استفاده می‌شوند.

 

خیلی‌ها در تلاش هستند تا وب سرورهای OWIN Compatible تولید کنند. خود مایکروسافت تا این لحظه (آگوست ۲۰۱۵) Katana و Helios را ارائه داده است. Katana به دو صورت قابل استفاده است. سوار بر IIS و اجرا به صورت مستقل در Process اختصاصی. در حالت اول همچنان از اسمبلی System.Web.dll استفاده می‌شود. در حالت دوم نیازی به IIS نیست ولی برنامه باید در چیزی مثل Windows Service اجرا شود. اسم package مربوط به Katana برابر Microsoft.Owin.Host.SystemWeb است. پروژه Helios هنوز در حالت آلفا است و نسخه نهایی آن احتمالاً همراه با ASP.NET 5 ارائه خواهد شد. این پروژه کمک می‌کند تا برنامه روی IIS سوار شود ولی مستقل از آن باشد. ضمناً خبری هم از System.Web.dll نخواهد بود. عدم استفاده از System.Web.dll به معنی Performance بالاتر می‌باشد. Microsoft.Owin.Host.IIS نام پکیج Helios است. خارج از مایکروسافت هم تلاش‌هایی برای تولید وب سرورهای OWIN Compatible در حال انجام است. برای کسب اطلاعات بیشتر اینجا را ببینید. مایکروسافت برای لینوکس هم Kestrel را تهیه کرده است.

 

بیشتر پیاده‌سازی‌ها در حال حاضر متمرکز بر روی Web API هستند و فعلاً خبری از MVC و WebForm نیست. وقتی که یک برنامه ASP.NET کاملاً مبتنی بر OWIN باشد خبری از Global.asax نخواهد بود. به جای آن از کلاس Startup استفاده می‌شود. همه تنظیمات یک برنامه ASP.NET باید از طریق این کلاس انجام شود. حتی موارد ساده‌ای مثل Serve کردن فایل‌های استاتیک مثل عکس‌ها و CSSها و غیره نیز باید در اینجا انجام شود. OWIN فعلاً در حال تکامل و تغییر است. پروژه‌ها و مستندات آن مدام عوض یا deprecate می‌شوند. چند تا از منابع مطالعاتی خوبی که پیدا کردم این، این، این، این و این هستند.

تبلیغات اینترنتی

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

 

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

 

در حال حاضر کاربر اوبونتو هستم و سعی دارم حتی المقدور از نرم‌افزارهای قفل شکسته استفاده نکنم پس به جای Photoshop محبوب از GIMP استفاده کردم. GIMP هم یک ویرایش‌گر عکس و تصویر مثل فوتوشاپ است اما رایگان و است و البته ساده‌تر و کم امکان‌تر. اما به هر حال برای کسی که این کاره باشد برای طراحی بنر جواب می‌دهد. خیلی به گیمپ وارد نبودم بنابراین مجبور شدم کمی راجع به لایه‌ها و ابزارهای اون مطالعه کنم. فهمیدم که باید تعدادی لایه طراحی کنم، در اسم آن‌ها مدت زمان نمایش فریم را مشخص کنم سپس از یکی گزینه‌های خود GIMP برای تبدیل آن به animated gif استفاده کنم. وقتی که آن را انجام دادم خیلی به نظرم سخت نیامد ولی انجام اولین بار آن کمی زمان‌بر بود. خوبی کار این بود که GIMP و اوبونتو مشکل اساسی با فونت‌های شورای عالی اطلاع رسانی نداشتند. خلاصه اینکه با مقداری سعی و خطا بنر زیر را ساختم:

 

 

بعد از ساخت بنر به سراغ سرویس تبلیغات اینترنتی رفتم. یک کمپین ایجاد کردم. بنر را به آن اضافه کردم و چهار پنج تا keyword مرتبط هم تعریف کردم. اما چند روز بعد که سرویس را چک کردم دیدم تعداد نمایش در حد دو سه مورد است. به پشتیبانی زنگ زدم گفتند تعداد keywordها خیلی کم است. آن‌ها را به تعداد ۵۰ تا رساندم. این کار تأثیر خوبی داشت چون تعداد نمایش آگهی به حدود ۳۳ تا در همان روز رسید. اما از فردای آن روز بازدید دوباره صفر شد. دوباره با پشتیبانی تماس گرفتم. گفتند کلمات کلیدی باید صد تا به بالا باشد تا مؤثر باشد و تعداد بنرها هم باید افزایش پیدا کند. برای آنکه از نمایش آگهی‌ها مطمئن شوم این بار تعداد keywordها را به حدود ۶۰۰ تا رساندم. این کار فقط باعث شد که تعداد نمایش‌ها از صفر به ۲ نمایش در روز برسد!

 

با آنکه طراحی بنر برای کسی مثل من که سر و کار زیادی با گرافیک نداشته‌ام کار راحتی نبود ولی دو بنر دیگر هم ساختم و تصمیم گرفتم اگر تعداد نمایش و کلیک افزایش پیدا کرد تعداد زیادی بنر دیگر هم بسازم. اما بعد از اینکه بنرهای جدید را قرار دادم و چند روزی را هم صبر کردم متوجه شدم که تعداد نمایش در حد بسیار ناچیزی است در حدی که آدم فکر می‌کند حتماً چیزی غیر فعال است یا ایراد دارد که اوضاع این‌طور است. مجدداً با پشتیبانی تماس گرفتم. نگاهی به keywordها و bannerها انداخت و نتیجه‌گیری کرد که شبکه نمایش آن‌ها تقریباً از هیچ کدام از keywordهای مد نظر من استفاده نمی‌کند و تلاش من ممکن است بی‌فایده باقی بماند. خلاصه اینکه تلاش ۴۵ روز من منجر به حدود ۵۰ نمایش و صفر کلیک شد و مطمئن شدم که شبکه نمایش آگهی تبلیغات اینترنتی، حداقل با این سرویس دهنده‌ای که من با آن کار می‌کردم خیلی عمومی است و بیشتر به درد فروش ساعت مچی می‌خورد تا سرویس Help Desk ابری!

 

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