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

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

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

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

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

همین!

 

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

این یه پست کوتاهه. یه چند وقته که یه کتاب در مورد نحوه کار توی شرکت atumattic میخونم که پشت سایت wordpress.com هست. این شرکت کاملا بصورت دور کاری اداره میشه و افراد زمان‌های بسیار کمی کنار هم کار میکنن و اکثرا دور کاری میکنن. مدیریت این شرکت‌ها و کار کردن توشون کاملا متفاوت از کارکردن توی شرکت‌های عادیه پس قوانین مخصوص به خودشون رو دارن که من سعی میکنم در موردش بنویسم.

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

همین!

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

همینطور که قبلا نوشته بودم(لینک، لینک، لینک) من تقریبا دوسال میشه که یه سیستم تمام وقت روشن توی خونه دارم که باهاش کارهای بسیاری میکنم که لیست اون کارها از این قراره:

  1. یه ماشین مجازی کوچک دارم و pfsense مسئولیت مسیریابی خونه رو به عهده داره
  2. روش minidlna دارم  که مسئولیت تفریحات فیلمی خونه رو برعهده داره
  3. روش یه samba server دارم که مسئولیت اشتراک فایل رو برعهده داره
  4. روش یه seafile سرور دارم که مسئولیت بک آپ اتوماتیک از تصاویر تلفن‌ها و اطلاعات مهم لپ تاپ‌ها رو برعهده داره.
  5. روش یه deluge دارم که شبها تورنتها رو دانلود و آپلود میکنه
  6. روش یه سرور taskwarior دارم که نقط بک آپ مدیریت لیست کارهایی هست که در هفته انجام میدم

کانفیگ سیستم هم اصلا جدید نیست و یه سیستم میشه گفت بسیار قدیمیه

  1. سی پی یو: AMD sempron 3000+ AM2
  2. رم : ابتدا ۱ گیگ و سپس ارتقا به ۲٫۵ گیگ
  3. هارد: ۵۰۰ گیگ
  4. سیستم عامل: اوایل ubuntu server و mint

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

اما این سیستم بعد از دوسال نیاز به بروزرسانی داره و من میخوام به دلایل زیر این سیستم رو از نظر سخت افزاری و نرم افزاری ارتقا بدم

  1. پرشدن هارد بر اثر دانلود زیاد
  2. نیاز به راه‌اندازی یک NAS به دلیل نزدیک شدن به پایان عمر مفید هارد دیسک‌های اکسترنال(حدودا سال ۸۷ خریداری شده اند)
  3. یادگیری تکنولوژی‌های جدید
  4. بهینه سازی سیستم فعلی

اما طرح من برای بهینه کردن این سیستم از این قراره که:

  1. علی الحساب میخوام سه تا هارد دو ترا به سیستم اضافه کنم که یکیش بک آپ اون دوتای دیگه باشه. همچنین نمیخوام از کارت raid استفاده کنم و ترجیحم اینه که از سیستم فایل zfs استفاده کنم.
  2. میخوام بتونم روی این سیستم از مجازی سازی سبک یا همون container های استفاده کنم که این استفاده هم کلی چیز جدید به من یاد میده
  3. میخوام سیستم عامل رو سبک کنم و میزان مصرف منابع کاهش بدم. برای این کار به نظر میرسه باید از لینوکس به یه سیستم عامل دیگه مهاجرت کنم که این مهاجرت کلی مطالب جدید به من یاد میده
  4. در صورتی که پولم برسه میخوام یه ssd بخرم و اون رو به عنوان cache به zfs اضافه کنم,

چالشهای پیش روم هم ایناست:

  1. zfs یک سیستم فایل بسیار قوی هست اما من فکر نمیکنم که هنوز به اندازه کافی اون رو بلدم که بخوام بهش اعتماد کنم و کل هاردهام رو به اون بسپارم
  2. zfs روی سیستم عامل freebsd و illumos و حتی linux وجود داره اما من نمیدونم کدوم پیاده‌سازی بهتر و با ثبات تره. البته باید بگم که پیاده‌سازی‌های موجود روی این سیستم‌ها قدیمی و با ثبات هستن
  3. تکنولوژی مجازی سازی سبک یا container‌ ها همنطور که اینجا هم بررسی کردم روی لینوکس freebsd و illumos با هم متفاوته من هیچ دید عملیاتی ندارم که کدوم بهتره.
  4. هر کدوم از این سیستم‌های یه سری کارها رو راحت کردن مثلا freebsd با freenas و nas4free کار رو برای پیاده‌سازی آسون zfs راحت کرده و شیر کردن و تورنت بازی این چیزا خیلی ساده شده. همچنین illumos با یه محصول به نام smartos مجازی سازی و مجازی سازی سبک و مدیریت اونها رو بسیار ساده کرده. که این انتخاب رو سخت میکنه

حالا با توجه به اینکه انتخاب‌های من کم نیستن بایستی یکم بیشتر بررسی کنم و انتخاب کنم.

همین!

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

من اخیرا توی یکی از پروژه‌هام که به زبان c++ نوشته شده نیاز داشتم که از یک شبه ORM به نسبت سبک استفاده کنم چند تا ویژگی داشته باشه. این ویژگی‌ها عبارتند از:

  1. متن باز باشه
  2. وابستگی‌های زیادی نداشته باشه
  3. حداقل از sqlite و mysql و postgres پشتیبانی کنه
  4. استفاده ازش راحت باشه

گزینه‌های زیادی جلوی روم نبود

یادمه نمیاد چرا odb رو از لیست انتخاب‌هام حذف کردم. اما qxrm به دلیل اینکه نمیخواستم یه وابستگی جدید(وابستگی به qt) به کدم اضافه کنم استفاده نکردم. و در انتها از soci استفاده کردم. کار با soci به نسبت راحته و فقط کافیه که نمونه کد ازش ببینید. تقریبا هم توی تمام توزیع‌های لینوکس قابل استفاده است

#include "soci.h"
#include "soci-oracle.h"
#include <iostream>
#include <istream>
#include <ostream>
#include <string>
#include <exception>

using namespace soci;
using namespace std;

bool get_name(string &name)
{
    cout << "Enter name: ";
    return cin >> name;
}

int main()
{
    try
    {
        session sql(oracle, "service=mydb user=john password=secret");

        int count;
        sql << "select count(*) from phonebook", into(count);

        cout << "We have " << count << " entries in the phonebook.\n";

        string name;
        while (get_name(name))
        {
            string phone;
            indicator ind;
            sql << "select phone from phonebook where name = :name",
                into(phone, ind), use(name);

            if (ind == i_ok)
            {
                cout << "The phone number is " << phone << '\n';
            }
            else
            {
                cout << "There is no phone for " << name << '\n';
            }
        }
    }
    catch (exception const &e)
    {
        cerr << "Error: " << e.what() << '\n';
    }
}

همین.

 

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

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

معمولا آدم‌ها وقتی به این نتیجه میرسن که وبلاگ یا سایت میخوان کمتر با این سوال درگیر هستن که در چه موردی بنویسن. این نیاز برای ارائه یک موضوع بوده که اصلا اون‌ها رو به این وا داشته که سایت درست کنن. پس این مساله تقریبا حل شده است. اما یه بخش حل نشده که هنوز هم برای خود من سوال هست اینه که کدوم شکل ارائه محتوا خوبه؟ حالا توی این پس سعی میکنم یه بررسی کنم ببینم چه شکل‌های ارائه مطلبی وجود داره و سعی کنم به قول امتحان‌های زمان ما «با ذکر مثال توضیح» بدم:

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

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

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

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

فعلا همین

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

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

در ابتدای کار شواهدی پیدا کردم که احتمالا این روش وجود داره. اگه با روش مستند سازی doxygen آشنا باشید، مستندات با استفاده از فرمت خاص doxyegen نوشته میشن و این نرم افزار میتونه نتیجه رو به فرمت لاتک و html تبدیل کنه. پس کار امکان پذیره. همچنین یکی دیگه از نیازمندی‌های این راه‌حل برای تبدیل آسون بودنه تا مهاجرت و استفاده از راه حل کم هزینه باشه. همچنین به نظر من نوشتن به فرمت لاتک و html سخته و خیلی «تو دل برو» یا همون user friendly نیست. پس باید این نکته رو هم در پیدا کردن راه حل در نظر بگیرم.

خب حالا برم سراغ راه حلی که برای این مساله پیدا کردم. من از قبل با دو روش ساده نوشتن html که عبارتند از makrdown و reStructuredText بصورت محدودی آشنا بودم و میدونستم که تبدیل این فرمت‌های به html مثل آب خوردن انجام میشه پس نصف مساله حل بود. از اونجایی که من با markdown بیشتر آشنا بودم این زبان ساده شده رو انتخاب کردم. حالا میمونه تبدیل markdown به لاتک که بعد از یه ذره گشتن رسیدم به این دوتا پست(لینک، لینک) و با استفاده از اونها تونستم markdown رو به کمک ابزاری به نام pandoc به لاتک تبدیل کنم و با استفاده از زیپرشین اون رو تبدیل کنم به pdf. حالا مراحل انجام این کار رو اینجا مینویسم

  1. نوشتن مستند به فرمت markdown مثلا
    قسمت اول
    ======================
    
    نیازمندیها
    ======================
    پکیجهای زیر باید نصب شود
    
    ۱٫ پکیج اول
    ۲٫ پکیج اول
    ۳٫ پکیج اول
    
    ۴٫ پکیج اول
    ۵٫ پکیج اول
    
    ۶٫ سلام
    	۱٫ سلام ۲
    	۲٫ سلام ۳
    	۳٫ سلام ۴
    	۴٫ سلام ۵
    	۵٫ سلام ۶
    	۶٫ سلام ۷
    	۷٫ سلام ۸
    	۸٫ سلام ۹
    
    چطور کامپایل کنیم
    ====================
    کامپایل کن دیگه
    
  2. تبدیل این متن به فرمت xelatex با دستور زیر
    pandoc -f markdown --latex-engine=xelatex -R -i a.md -o a.tex
  3. متن نتیجه شده به شکل زیره که اضافاتی داره
    \section{قسمت اول}\label{ux642ux633ux645ux62a-ux627ux648ux644}
    
    \section{نیازمندیها}\label{ux646ux6ccux627ux632ux645ux646ux62fux6ccux647ux627}
    
    پکیجهای زیر باید نصب شود
    
    \begin{enumerate}[<+->]
    \def\labelenumi{\arabic{enumi}.}
    \item
      پکیج اول
    \item
      پکیج اول
    \item
      پکیج اول
    \item
      پکیج اول
    \item
      پکیج اول
    \item
      سلام
    
      \begin{enumerate}[<+->]
      \def\labelenumii{\arabic{enumii}.}
      \itemsep1pt\parskip0pt\parsep0pt
      \item
        سلام ۲
      \item
        سلام ۳
      \item
        سلام ۴
      \item
        سلام ۵
      \item
        سلام ۶
      \item
        سلام ۷
      \item
        سلام ۸
      \item
        سلام ۹
      \end{enumerate}
    \end{enumerate}
    
    \section{چطور کامپایل
    کنیم}\label{ux686ux637ux648ux631-ux6a9ux627ux645ux67eux627ux6ccux644-ux6a9ux646ux6ccux645}
    
    کامپایل کن دیگه
  4. حذف این اضافات با دستورارت زیر
    sed -i.bak 's/\[<+->\]//' a.tex
    sed -i.bak 's/\\def\\labelenumi{\\arabic{enumi}.}//g' a.tex
    sed -i.bak 's/\\itemsep1pt\\parskip0pt\\parsep0pt//g' a.tex
  5. که نتیجه میشه این
    \section{قسمت اول}\label{ux642ux633ux645ux62a-ux627ux648ux644}
    
    \section{نیازمندیها}\label{ux646ux6ccux627ux632ux645ux646ux62fux6ccux647ux627}
    
    پکیجهای زیر باید نصب شود
    
    \begin{enumerate}
    \item
      پکیج اول
    \item
      پکیج اول
    \item
      پکیج اول
    \item
      پکیج اول
    \item
      پکیج اول
    \item
      سلام
    
      \begin{enumerate}
      \item
        سلام ۲
      \item
        سلام ۳
      \item
        سلام ۴
      \item
        سلام ۵
      \item
        سلام ۶
      \item
        سلام ۷
      \item
        سلام ۸
      \item
        سلام ۹
      \end{enumerate}
    \end{enumerate}
    
    \section{چطور کامپایل
    کنیم}\label{ux686ux637ux648ux631-ux6a9ux627ux645ux67eux627ux6ccux644-ux6a9ux646ux6ccux645}
    
    کامپایل کن دیگه
  6. این متن به تنهایی توسط لاتک کامپایل نمیشه و باید یه سری تگ‌های استاندارد لاتک بهش اضافه بشه تا بگه فرمت مستند چیه فونتا چین و از این دست چیزا. بهترین راه برای انجام اینکار داشتن یه فایل دیگه برای اون تگ‌های و include کردن این فایل در اون فایل هست. یه نمونه از اون فایل به این صورته:
    \documentclass[a4paper,12pt]{book}
    \usepackage{aut_test}
    \usepackage[colorlinks,linkcolor=black,citecolor=black]{hyperref}
    \usepackage{graphicx}
    \usepackage{amsthm,amssymb}
    \usepackage{tocbibind}
    \usepackage{listings}
    \usepackage{xepersian}
    \settextfont[Scale=1]{B Zar}
    
    \begin{document}
    \chapter{فصل اول}
    \include{a}
    \end{document}
  7. و با این دستور لاتک رو کامپایل میکنیم
    xelatex  -synctex=-1 doc.tex
  8. و نتیجه توی اینجا قابل مشاهده است.

همین!

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

ایندفعه گفتم یه مطلب کوتاه بنویسم. اگه بخواید توی c++11 که آخرین نسخه زبان c++ هست بصورت اتوماتیک تعداد هسته‌های cpu یا همون تعداد thread ها رو دربیارید فقط کافیه که از کتابخانه‌های استاندارد استفاده کنید. نمونه کد هم به شکل زیر هست:

#include <iostream>
#include <thread>
 
int main() {
    unsigned int n = std::thread::hardware_concurrency();
    std::cout << n << " concurrent threads are supported.\n";
}

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

همین!

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

همونطور که احتمالا همه میدونید الان بازار containerها یا همون مجازی سازی سبک در دنیا و خب در ایران داغه. من توی یه سری پست سعی میکنم (قسمت اول) که راهی رو که خودم برای درک این موضوع طی کردم رو بنویسم.

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

  • لینوکس
    • Linux-VServer: این تکنولوژی یکی از قدیمی ترین(سال ۲۰۰۱) تکنولوژی‌های مجازی سازی در سطح سیستم عامل هست که نیاز به تغییر کرنل(پچ شدن کردن) برای بوجود آوردن امکان ایزوله کردن منابع سیستم هست. این سیستم متن باز بوده ولی هیچوت تغییراتش به هسته سیستم عامل راه پیدا نکرده
    • Parallels Virtuozzo Containers : این سیستم هم بسیار قدیمی است(سال ۲۰۰۱) و بصورت تجاری توسعه پیدا کرده.
    • OpenVZ: یک محصول متن بازه که اون هم نیاز به پچ کردن کرنل داره و تغییراتش هیچوت به درون هسته لینوکس راه پیدا نکرده. شروع توسعه این ابزار به سال ۲۰۰۵ برمیگرده.
    • ابزارهای مبتنی بر cgroups و namespaces در کرنل لینوکس: این تکنولوژی در سال ۲۰۰۶ توسط مهندسان گوگل شروع شده و به کرنل لینوکس راه پیدا کرده. با توجه به این ویژگی‌ها محصولات متفاوتی تولید شده
      • lmctfy: این ابزار توسط گوگل توسعه پیدا کرده و مورد استفاده قرار گرفته. شروع توسعه این ابزار به سال ۲۰۱۳ برمیگرده.
      • LXC: این ابزار تا اونجایی که من میدونم از دل اوبانتو در اومده و تبدیل به یک ابزار قابل استفاده شده. اما به دلیل مستندات محدود خیلی مورد استفاده قرار نگرفته. شروع توسعه این ابزار به سال ۲۰۰۸ برمیگرده.
      • Docker: سازندگان این ابزار ارائه دهنده سرویس paas بودند که از روند مشابهی برای مدیریت paas خود استفاده می‌کردند و تجربیات خودشون رو در قالب این ابزار ارائه دادند. این ابزار به دلیل سادگی، مستندات خوب و معرفی راه‌حلهای کارا بسیار مقبولیت پیدا کرده. شروع توسعه این ابزار به سال ۲۰۱۳ برمیگرده.
      • libvir lxc: این ابزار هم جزئی از کتابخانه libvirt برای مدیریت تکنولوژی‌های مجازی سازی هست که ابزاری برای مجازی سازی سبک هم ارائه کرده.
  • FreeBSD Jail: در این سیستم عامل از سال ۱۹۹۸ کرنل از ویژگی‌ای به نام jail پشتیبانی میکنه که مجازی سازی سبک رو بوجود میاره. برخلاف لینوکس که چند  ویژگی مجزا کرنل برای مجازی سازی سبک استفاده میشه ویژگی jail در freebsd یک ویژگی یک پارچه برای مدیریت مجازی سازی سبک به حساب میاد ابزارهای سطح بالایی هم برای این مدیریت این ویژگی بوجود اومده که لیست کوتاه اونها در پایین اومده:
  • Solaris Containers: این تکنولوژی در هسته سولاریس از سال ۲۰۰۵ وجود داره و من اطلاع زیادی از اون ندارم
  • sysjail: این تکنولوژی در هسته netbsd و openbsd تا سال ۲۰۰۹ وجود داشته و من اطلاع زیادی از اون ندارم
  • WPARs: یک سیستم خاص منظور برای سیستم عامل AIX هست(سال ۲۰۰۷) و من اطلاع زیادی از اون ندارم
  • HP-UX Containers (SRP): این تکنولوژی مختص HPUX هست(سال ۲۰۰۷) که من باز اطلاع خاصی ازش ندارم
  • Sandboxie: این یه تکنولوژی برای ویندوز هست و من دیدم دوستانی که روی بررسی ویروسها کار میکنن ازش استفاده میکنن.

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

همین!