ماجراهای تکنولوژیک خانه من: اولین فاز بروزرسانی!

اینم یه تجربه پراکنده دیگه!

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

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

IMG_20150313_090826

IMG_20150313_094727

انتخاب‌های نرم افزاری که انجام دادم اینها بودن. با توجه به نگاهی که به smartos انداخته بودم(لینک) به این نتیجه رسیدم که بهتره از سیستم‌های مبتنی بر FreeBSD استفاده کنم چون آشنایی بیشتری باهاشون دارم. همچنین برای سر هم کردن هاردها از ZFS استفاده کردم. دوتا محصول برای این کار وجود داشت NAS4Free و FreeNAS که ارتباط‌هایی با هم دارن اما کلا از هم جدا شدن. قبلا استفاده از NAS4Free بر FreeNAS ارجحیت داشت چون نسخه FreeBSD و ZFS بالاتری رو پشتیبانی می‌کرد اما الان که این نسخه‌ها یکی شدن استفاده از FreeNAS بخاطر واسط کاربری بهتر قابل قبول بود. همچنین من با کمک دوتا ماشین مجازی سعی کردم که سه تاهارد رو از FreeNAS به NAS4Free انتقال بدم که انتقال سریع و بدون دردسر بود پس اگه به این نتیجه رسیدم که اشتباه کردم راه بازگشت برام وجود داره.

تو فاز اسمبل کردن هم باید قبل از شروع به کار چک میکردم که همه هاردها به درستی کار میکنن بعدش همه چیز رو سر هم کنم که نتیجش شد این وضعیت

IMG_20150313_105428

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

الان بعد از گذشت یک ماه همه چیز به خوبی کار میکنه و موارد زیر هر از گاهی اذیت میکنه:

  • سرعت بوت شدن از فلش کمه
  • به علت قدیمی بودن سخت افزار، یه باگ توی مادربرد وجود داره که باعث میشه سیستم به درستی shutdown نشه
  • FreeNAS به سرعت خوب اینترنت حساسه و اگه اینترنت سرعت خوبی نداشته باشه نصب پکیجهاش و این جور چیزاش به درستی انجام نمیشه
  • نصب اولین Plugin با کندی انجام میشه چون باید یه حجم به نصبت زیاد رو دانلود کنه

فعلا همین!

ویر کارایی: مدل برنامه نویسی reactive

اینم یه تجربه پراکنده!

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

کل این متن از این سایت ایده گرفته شده و میخواد بخش از حرفهایی که اونجا زده شده رو بگه. reactive در معنی لغتی به معنی واکنشدار و واکنشی هست و به سیستمی اطلاق میشه که واکنش قابل قبولی در زمان قابل قبول نسبت به درخواست‌هایی که بهش داده میشه، انجام میده. این سیستم‌های این ویژگی‌ها رو دارن:

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

فعلا همین!

همه ایده‌های من: CMS as Service

اینم یه تجربه پراکنده دیگه

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

برم سراغ ایده. چیزاهایی در دنیا وجود داره که در کشور ما به دلایل مختلفی اجرایی نمیشه و کسی هم روش کار نمیکنه. یکی از اون‌ها سرویس‌های زیرساختی هست که بصورت اتوماتیک ارائه بشه. تنها سیستم‌های زیرساختی اتوماتیکی که وجود داره سیستم‌های خرید هاست هست که اون هم به همت whmcs و cpanel هست که دیگرانی زحمت کشیدن و اون رو اتوماتیک کردن. پس جای خالی فراهم کنندگان IaaS و PaaS حس میشه. از طرف دیگه همیشه علاقه به وجود آوردن سایت سازهای اتوماتیک در بین مهندسین کامپیوتر وجود داشته و داره. یعنی اونها از قبل با زدن سرویس وبلاگ و اخیرا با زدن سایت سازهای متفاوت(مثل لینکسایت ساز کاموا، لینکتکنولوژی ۷۸، لینکسایت سازی کانی وب) سعی کردن خدمات از نوع SaaS ارائه بدن. این خدمات معمولا خدمات خوبی بودن اما کاربر حرفه‌ای که میخواد کار جدی بکنه رو جذب نمی‌کرده. همچنین معمولا سایت‌داران حرفه‌ای میرفتن سراغ خریدن vps و سرور و مدیریت کردن زیرساخت خودشون. اما من برخی از دوستانم رو میشناسم که توی مدیریت زیرساختشون همیشه مشکل دارن و بهشون حمله میشه و کلی اتفاق بد دیگه براشون میفته. پس اگه کسی باشه که بتونه سایت داران حرفه‌ای خدمتی ارائه بده و بهشون آزادی عمل بده که بتونن هر کاری میخوان انجام بدن و توی حجم بازدید بالا دوام بیارن و کمر خم نکنن اونها رو خوشحال میکنه.

پس اگه من بخوام تیتر وار بگم که چه کاری میخوام انجام بدم و به چه دلیلی این کار خوبه اینهاست:

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

بزم سراغ کاری که میخوام انجام بدم:

  • ابزار اصلی مورد استفاده: با توجه به آنچه که در شرکت‌های مشابه در دنیا انجام شده، استفاده از مجازی سازهای سبک یا همان مجازی سازی در سطح سیستم عام یا همان container ها رمز موفقیت این تجربه‌هاست. برای آشنایی بیشتر با این تکنولوژی‌ها به اینجا و اینجا مراجعه کنید. لیست این تکنولوژی‌ها که مستندات و منابع کافی در مورد آنها در اختیار است به شرح زیر است
  • هدف نهایی
    • اینکه کاربران بصورت اتوماتیک بتوانند سایت بسازند
    • نسخه‌های سایت آنها در git یا سیستم مشابه مدیریت نسخه‌های ذخیره شود
    • هر سایت دو سایت کمکی برای وضعیت stage و dev داشته باشد که از نظر ساختار شبیه سایت نهایی باشد
    • هر سایت بتواند در صورت نیاز افزایش کارایی پیدا کرده (با اجرا شدن کانتینرهای دیگر)
    • هزینه سرویس بصورت ساعتی محاسبه شود
    • به فایل‌های سایت(عکسهای آپلود شده و سایر مستندات) دسترسی معمول مثل ftp وجود داشته باشد
    • سایت بصورت on demand فعال و غیر فعال شوند تا در هزینه‌ها صرفه جویی شود.
  • مراحل اجرا
    • فاز اول(انجام شده):
      • استفاده از docker به عنوان تکنولوژی
      • استفاده از fig به عنوان سیستمی که سایت‌ها و کانتینرها را سر هم میکند
      • ایجاد یک image خاص منظوره برای cms ها استفاده شده. علی الحساب برای drupal و WordPress
      • استفاده از git برای نگهداری نسخه‌های مختلف سورس سایت‌ها
    •  فاز دوم:
      • ایجاد یک سیستم توزیع بار برای امکان افزایش کارایی
      • ایجاد یک سیستم برای share کردن فایلهای سایت بین کانتینرهای مختلف
      • رفع اشکال سیستم
    • فاز بینهایت
      • پیاده سازی service discovery در سیستم توزیع بار
      • پیاده سازی کانتینرهای on demand
      • پیاده سازی پرتال مشتریان برای انجام این عملیات بصورت اتوماتیک
  • چالش‌های کار
    • انتخاب تکنولوژی کانتینرها
    • سخت بودن service discovery و on demand بودن سیستمها
    • سخت بودن بازاریابی و جلب اعتماد سایت‌داران بزرگ
    • نیاز به سرمایه قابل توجه انسانی و مالی

نمیدونم چیزی از قلم افتاده یا نه ولی فعلا همین!

کتاب نویسی دیجیتال: چیزاهایی که من جمع آوری کرده‌ام

اینم یه تجربه پراکنده دیگه!

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

  • اول اینکه راحت بتونه کتاب رو بنویسه و خیلی درگیر فرمت و این چیزا نباشه
  • بتونه نسخه‌های مختلف کتاب رو بصورت همزمان و با کمترین زمان تولید کنه یعنی
    • نسخه وب  که همون html باشه
    • نسخه دسکتاپ که pdf بااشه
    • نسخه موبایل که یکی از فرمت‌های epub, fb2, mobi باشه.
  • نوشتن کتاب راحت باشه و نیاز به نرم افزار خاصی برای نوشتن نباشه که بشه روی تبلت، موبایل یا لپ تاپ با تمام سیستم عامل‌ها نوشت. این باعث میشه که بشه کتاب رو به راحتی در وقت‌های آزاد نوشت یا ترجمه کرد.
  • سایت کتاب رو بشه تولید کرد.
  • تاریخچه تغییر و تحول کتاب  رو بشه به خوبی مدیریت کرد.

خب مجموعه خام چیزایی که من پیدا کردم توی منابع اومده و خلاصه اونها اینه

  • استفاده از markdown و pandoc: این میشه همون پستی که نوشتم. تنها ایرادی که به این روش گرفته شده اینه که برای نوشتن متن‌های فنی و علمی که فرمول و کد زیاد دارن خوب نیست
  • راه حل‌های متن بازی مثل gitbook و softcover مخصوص این کار توسعه پیدا کردن که به نظر خوب میان
  • یه راه حل تجاری که توسط یکی از ناشران بزرگ خارجی درست شده O’Reilly’s Atlas هست که همه نسخه‌های کتاب رو تولید می‌کنه. این نرم‌افزارهای متن باز سعی میکنن ادای این نرم افزار رو در بیارن

اما چالش‌هایی که به نظر من وجود داره بالاخص برای زبان فارسی ایناست

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

منابع: لینک، لینک، لینک، لینک، لینک، لینک

 

 

 

 

 

 

 

 

معرفی یک کتاب خوب: معماری نرم افزارهای متن باز

اینم یه تجربه پراکنده دیگه!

قبل از همه چیز سال نو شما مبارک باشه و سال خوب و خوشی داشته باشید

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

لینک کتاب

همین!