OpenWrt اولین برخورد!

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

خب همونطور که میدونید علاقه مند به تکنولوژی‌های عجیب غریب در خونم هستم. یکی دیگه از اون چیزایی که از قبل می‌شناختمش و اخیرا سعادت کار عملی باهاش رو پیدا کردم OpenWrt هست. این یک لینوکس کوچک شده برای مسیریابهای بی سیم هست. البته باید بگم که استفاده از مسیریاب‌های بی‌سیم در ایران به علت اینکه adsl زیرساخت رایج ارائه خدمات هست، خیلی رایج نیست. من سعی می‌کنم که چیزهایی رو که از این تجربه یاد گرفتم اینجا مستند کنم که شاید به درد کسی بخوره.

در قدم اول باید بدونید که هر روتر وایرلسی سخت افزار خاص خودش رو داره و برخی از این روترها هستند که میشه روشون OpenWrt نصب کرد. پس اولین کاری که من انجام دادم این بود که بگردم و یه مدل روتر وایرلس ارزون پیدا کنم که رسیدم به TP-Link TL-701ND بود که قیمتش زیر ۸۰ هزار تومن هست و تست من رو میشه باهاش انجام داد. مدلهای دیگه هم هستن ولی همه از این مدل گرونتر هستن یا اصلا دیگه تولید نمیشن. نکته دیگه اینکه میشه اون رو روی روتربردهای Mikrotik و Raspberry Pi نصب کرد.

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

سومین مورد قابل توجه اینه که هنگام انتخاب مدل دستگاه به فضای محدود این دستگاه‌ها دقت کنید. یعنی فضای Flash دستگاه شما بسیار براتون حیاتی خواهد بود. یعنی روی این دستگاهی که من خریدم و ۴ مگ بیشتر Flash نداشت من فقط و فقط حدود ۶۴۰ کیلو بایت فضا خالی داشتم. هنگامی که میخواستم بسیاری از پکیج‌ها رو نصب کنم با مشکل جا مواجه میشدم. پیشنهاد اینه که دستگاه شما حداقل ۸ مگ Flash داشته باشه. اما اگه دستگاه USB داشته باشه میشه بخش‌های از سیستم عامل رو به اون منتقل کرد و پکیج‌ها روی یک حافظه خارجی نصب بشن. پس دقت کنید که دستگاه که میخرید یا بالای ۴ مگ Flash داشته باشه و یا از USB پشتیبانی کنه.

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

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

همین!

لذت برنامه نویسی: معرفی زبان lua

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

امروز با یه زبان جدید آشنا شدم که اسمش lua است. این زبان رو قبلا تو کانفیگ کردن nginx و جاهای دیگه هم دیده بودم. این زبان یک زبان مفصریه و یعنی کامپایلری نداره و زمان اجرا تفسیر و اجر میشه. این زبان به نسبت ساده است و با زبان‌هایی مثل javascript و scheme مقایسه میشه. چند روز پیش هم که داشتم توی اینترنت میگشتم دیدم که یکی از ویژگی‌های این زبان اینه که شما میتونی توی یک برنامه دیگه از اون استفاده کنی. یعنی مفسرش به برنامه اضافه میشه و برنامت میتونه به با استفاده از lua برنامه ریزی بشه و مثلا plugin براش طراحی بشه.

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

بعد گشتم و سعی کردم شواهدی در اینترنت پیدا کنم که ایده‌ای که به ذهنم رسیده آیا درسته یا نه. دیدم که مثلا در طراحی بازی خیلی از این ویژگی استفاده وعملا lua یک زبان برنامه‌نویسی محبوب در بین توسعه دهنده‌های بازی هست. یا دیدم که نرم‌افزاری به نام freeswitch که برای راه‌کاری تلفنی مبتنی بر voip هست از lua  به عنوان زبان طراحی روند تماس استفاده میکنه. یا با استفاده از lua شما میتونی nginx رو کنترل کنی. همچنین دیدم یه جایی مثل cisco برای سطوح دسترسی پویا از این زبان استفاده کرده. حتی lua یک سرور مثل node.js به نام luvit داره اما به اون مشهوری نیست.

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

همین!