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

همیشه در سیستم‌هایی که بصورت توزیع شده اجرا میشن و نیاز هست که یک سری اطلاعات رو اولا با هم دیگه توافق کنن و دوما همه به اون اطلاعات دسترسی داشته باشن و سوما اینکه بتونن اون اطلاعات رو آپدیت کنن. این عملیات رو میشه بصورت‌ها مختلف انجام داد. ایده‌هایی که واقعا پیاده سازی شدن همون‌هایی هستن که به ذهن من و شما میرسن. میشه از یه دیتابیس برای اینکار استفاده کرد. میشه اطلاعات رو بوسیله یک سرویس مشترک در اختیار بقیه گذاشت. این دوتا روش بزرگترین ایرادشون اینه که اگه از دسترس خارج بشن معمولا هیچ کس دیگه‌ای به این اطلاعات که معمولا حیاتی هم هستن دسترسی نداره. خب راه حل بعدی اینه که سرویس‌های توزیع شده یا کلاستر شده استفاده کرد که خب یه راه‌حل هایی مثل zookeeper این راهبرد رو انتخاب کردن. راهبرد سوم برای این مساله استفاده از روشهای نقطه به نقطه یا peer-to-peer هست که توی این روش‌ها همه نودها همه اطلاعات رو دارن و در صورتی که یکی از دست بره بقیه این اطلاعات رو به تازه واردهای اطلاع رسانی میکنن. خوبی این روشها معمولا اینه که مقاومتشون نسبت به از دست رفتن نودهای زیاد بالاست.

یکی از مهمترین پروتکل‌هایی که توی این زمینه استفاده میشه به اصطلاح پروتکل‌های شایعه است. بدین صورت که هر نودی وقتی شایعه‌ای رو میشنوه بصورتی انتخابی اون شایعه‌ به چندتا از نودهای همسایش انتقال میده. این رفتار، رفتار شیوع پیدا کردن بیماری‌های مسری هم هست. مقالات زیادی در این زمینه به چاپ رسیده ولی دوتا از پیاده‌سازی‌های متن بازی که من میشناسم etcd و serf هست. هر دوی این‌ها براساس «یک کلاغ چل کلاغ» عمل می‌کنند و بصورت کاملا توزیع شده به کارشون ادامه میدن.

همین.

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

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

تنها بخش مجهول این بود که من ایده‌ای نداشتم که چطوری پروتکل ۸۵۸۳ رو بصورت بهینه توی این زبان parse کنم که این پروژه‌ها رو پیدا کردم که بهم یکم ایده میدن. گفتم لیستش رو اینجا بنویسم شاید به درد دیگران هم بخوره

https://github.com/jthmath/VirtuaPOSP

https://github.com/paopaol/bank

https://github.com/linphy/iso8583go

https://github.com/dgv/omg8583

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

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

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

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

همین!

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

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

همین!

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

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

من این مدت سعی کردم لیست کارهایی که باید انجام بدم رو با  taskwarrior مدیریت کنم که تا الان از عملکردش راضی بودم. روی دستگاه‌های اندرویدی هم یه برنامه متن‌باز به نام mirakel پیدا کردم که از فرمت taskwarrior پشتیبانی میکنه که باعث میشه من بتونم روی گوشم هم لیست کارهام رو داشته باشم. من همیشه مشکل همگام سازی اطلاعات رو دستگاه‌های مختلفم رو داشتم که در مورد لیست کارهام بیشتر از همیشه من رو اذیت میکنه. به دنبال یه راهی بودم که این کار رو انجام بدم. راه حل‌های مختلفی وجود داشت اما یکی از موثرترین‌هاش استفاده از taskd بود که سرور برای همگام سازی اطلاعات taskwarior هست که اتفاقا توی mirakel هم پشتیبانی میشه. پس کارهایی که من انجام دادم ایناست:

  1. نصب taskd روی اون کامپیوتری که توی پست‌های قبل گفته بودم باهاش کارهای زیادی میکنم
  2. تست اینکه نصب به درستی انجام شده
  3. ایجاد یک اکانت dynamic dns در یکی از سایت‌هایی که مجانی این کار رو انجام میده
  4. تنظیم pfsense که مسئول اینترنت خونه است برای گزارش IP متغیرم به این سرویس ddns
  5. باز هم تنظیم pfsense برای NAT کردن پورت خروجی به اون کامپیوتری که همیشه روشنه.

با توجه به استفاده من در این چند روز نتیجه بسیار قابل قبول بوده و من از سر کار و خونه تونستم کارهام رو در یک مکان متمرکز ذخیره کنم.

همین