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

امروز داشتم توی وب میگشتم و در مورد docker میخوندم که چشمم به این پست خورد که چطور توی pantheon تونستن با استفاده از تکنولوژی‌های مرتبط به container تونستن یه بیزنس بسیار جذاب برای ارائه یه نوع هاستینگ خاص مرتبط با drupal و wordpress بسازن. اما نکته‌ای که داشت این بود که یکی از نکاتی که منجر به خفن شدن سیستم اونها شده بود استفاده از یه ویژگی systemd به نام socket activation بود. که من یکم در موردش خوندم و بسیار ازش لذت بردم و گفتم ازش بنویسم.

قصه از اینجا شروع میشه که توی سیستم‌های مبتنی بر یونیکس از قدیم الایام یه چیزی وجود داشته با نام SysV که قدمهای مرتبط با boot سیستم توی اونجا انجام میشده. یعنی اینکه فرض کنید برای اینکه لینوکس بطور کامل بالا بیاد نیاز به داره که ۱۰ تا سرویس اجرا بشه و هر کدوم از اونها یه سری وابستگی دارن که این سیستم این قدم‌ها رو با توجه به وابستگی‌هاش اجرا میکنه. نحوه اجرا شدن این قدم‌ها توی SysV بصورت ترتیبی است که این روند باعث افزایش زمان مورد نیاز برای boot شدن سیستم میشه. توی MacOs از سیستم به نام launchd برای کاهش زمان boot پیاده‌سازی شده. همچنین توی لینوکس  راه حل‌هایی برای اجرای موازی سرویسهایی که به همدیگه وابسته نیستن مثل upstart اوبونتو توسعه پیدا کرده. اما مشکل سرعت کم boot بصورت کامل رفع نشده. به همین خاطر systemd پیاده‌سازی شده و از ساز و کاری به اسم socket activation ایجاد شده که سرویس‌ها هم بتونن با سرعت لود بشن هم مشکلی بوجود نیاد.

تقریبا همه چیز در لینوکس معمولا این سرویسها ارتباطشون از طریق socket ها ایجاد میشه و از socket به عنوان IPC استفاده میشه. حالا ایده اینه که بجای اینکه کل پروسس مربوط به یک سرویس بالا بیاد و بعد اون بیاد و سرویس رو ایجاد کنه، systemd بجای پروسه اصلی سوکت رو ایجاد کنه و هر وقت اولین درخواست به این سوکت رسید سرویس اجرا بشه و سوکت باز شده هم در اختیار پروسس این سرویس قرار بگیره. خوبی این روش هم اینه که تقریبا تمام سرویس‌های متونن همزمان اجرا بشن و خب در صورتی که یه سرویس زودتر از یه سرویس دیگه اجرا بشه و به سرویس کند نیاز داشته باشه درخواست‌هاش رو به سوکت مربوطه میفرسته تا زمانی که این سوکت بتونه چیزی دریافت کنه-لازمه بگم که هر سوکت میتونه به حجم محدودی اطلاعات رو توی خودش نگه داره- پس از اون کرنل دخالت میکنه و برنامه‌ یا برنامه ‌هایی که میخوان به اون سوکت بنویسن رو بصورت موقت متوقف میکنه. تا سرویس دهنده اجرا بشه و بیاد به درخواست‌ها پاسخ بده و سوکت با امکان نوشته شدن داشته باشه. این ایده جدید نبوده و توی inted ملقب به superserver هم برای سرویس دهنده‌های اینترنتی مثل ftp مورد استفاده قرار گرفته. اما systemd ایده رو توسعه داده و بجای سوکت‌های اینترنتی از همه نوع سوکتی پشتیبانی میکنه. این روش سود‌های دیگه‌ای هم داره:

  • وابستگی‌ها بصورت واضحی معرفی نمیشن چون همه سوکت‌ها برای دریافت اطلاعات وجود دارن
  • اگر یک سرویس به علتی خراب بشه و به اصطلاح بمیره سوکت اون وجود خواهد داشت و پس از شروع مجدد دوباره کارهاش رو از همون جایی که بوده پی میگیره
  • اگر یک سرویس بروزرسانی بشه میتوان اون رو به راحتی restart کرد ولی سوکت مربوطه وجود داره به سرویس دهی ادامه میده
  • تغییر سرویس هم از دید کاربر مخفی میمونه

همین!

منابع:

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

  1. این سایت اصلیه که کلی اطلاعات جذاب توش داره.
  2. این سایت نویسنده یا یکی از نویسندگان اصلی systemd هست
  3. اگه برنامه نویس هستید و میخواد با این مفهوم بیشتر آشنا بشید این مطلب و این یکی رو هم بخونید

 

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

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

به همین خاطر من یه سرچی کردم و دیدم که دستگاه‌هایی که از DLNA پشتیبانی میکنن چهار نوع هستن که لیستشون در پایین اومده:

  • Digital media servers (DMS):  این نوع مسئول پخش فایل‌هاست. این همون سروری هست که من توی خونه با استفاده minidlna راه انداختم.
  • Digital media renderers (DMR): همون دستگاه پخش کننده است که تلوزیون من مسئول پخش این بخش است. نکته قابل توجه توی این قسمت اینه که فایل‌های چندرسانه‌ای به این دستگاه فرستاده میشه!
  • Digital media controllers (DMC): این دستگاه مسئول کنترل پخش به جلو یا عقب بردنه که موبایل این آشنای ما این امکان رو داشت.
  • Digital media players (DMP): این دستگاه هم پخش کننده است با این تفاوت که خودش میره و فایل‌ها رو از سرور میگیره و پخش میکنه. باز هم این قسمت رو تلوزیون من برعهده داره.

بعد از یکم کمک گرفتن از گوگل من برنامه‌ای رو پیدا کردم میتونم که این کار رو کنن. برنامه ای که من روی لینوکسم برای اینکار پیدا کردم gUPnP بود که کارهای زیادی انجام میده اما یکی از اونا کنترل DLNA هست. واسه موبایل هم من BubbleUPnP رو پیدا کردم که علاوه بر اینکه میتونه سرور باشه، نقش کنترل کننده رو هم بازی میکنه.

همین!

منبع: اینجا

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

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

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

کار که من کردم ساده بود. اول کلی گشتم ببینم این allShare چیه؟ وقتی پیداش کردم که همون سرور dlna هست گشتم و یه پیاده سازی لینوکسی از این سرور رو روی همون کامپیوتری که توی پست «ماجراهای تکنولوژیک من و خانه ام» گفتم نصب کردم و حالا اون کامپیوتر قدیمی من کار پخش فیلم رو هم برعهده گرفته. تنها کاری که من میکنم اینه که فیلما رو توی یه فولدر اون کامپیوتر قرار میدم و کار تمومه.

خب یه سری اطلاعات فنی هم بدم که این داستانی که تعریف کردم یکم هم با تکنولوژیک داشته باشه. اونم اینه که سرورهای dlna زیادی وجود داره که من فقط اینجا اسم میبرم و یه لیست کوچیک رو ازشون معرفی میکنم

  • سرور allshare که یه سرور تحت ویندوزه که بصورت مجانی توسط خود سامسونگ ارائه میشه
  • سرور serviio که یه سرور اپن سورسه که لایسنس پولی هم داره. بخاطر جاوایی بودنش تمام سیستم عامل‌ها رو پشتیبانی میکنه و از تغییراتی که شرکت‌های پیاده ساز این تکنولوژی در راستای محصول سازی رو استاندارد دادن بخوبی پشتیبانی میکنه
  • سرور minidlna که سرور محبوب منه چون به رم و سی پی یو کمی نیاز داره و روی کامپیوتر من که کلی چیز دیگه هم روش داره ران میشه
  • نسخه‌های جدید xbmc که یه برنامه به عنوان media center هست هم این امکان رو فراهم میکنه.

لیست بیشتر این سرورها رو میتونید توی این آدرس پیدا کنید.

من تصمیم گرفتم خاک گرفتگی این جا رو یکم کم کنم
پس هر از گاهی یه چیزی مینویسم

توی سایت یونیکسمن یه پست زده که توش توضیح داده یه جایگزین متن‌باز برای یه کنترل پنل هاستینگ قوی به نام cpanel‌ وجود داره که اسمش zpanel هست که به نظر میرسه چیز بسیار خوبیه. البته خود من هم یه مدت علاقه داشتم به اینکه آیا جایگزین دیگه ای وجود داره یه نه؟

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

امیدوارم بدرد کسی بخوره!