Pi Developer
112 subscribers
12 photos
4 videos
45 links
Download Telegram
چگونه برنامه خود را به میکروسرویس‌ها بشکونیم؟
https://mcsh.github.io/fa/microservice/2018/06/14/breaking_services.html

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

تقسیم بندی بر اساس تیم‌ها
وقتی Gerstner ریاست IBM رو برعهده گرفت حرف جالبی زد «با نگاه کردن داخل یکی از کامپیوتر‌های IBM شما می‌تونید تیم‌های ما رو ببینید» این حرف که در واقع نقدی بر طراحی قبلی بود می‌تونه به شما کمک کنه. اگر تیم‌های زیادی همزمان با هم به توسعه محصول شما می‌پردازن تقسیم کردن سرویس‌ها با توجه به تیم‌ها می‌تونه بهتون کمک کنه تا کمترین تداخل رو داشته باشید. اینطوری هر تیم روی پروژه کوچکی کار می‌کنه که بر اساس یک schema بزرگتر که طراح سیستم (شما!) با بقیه اجزای سیستم کار می‌کند.

تقسیم بندی بر اساس کاربرد
در این روش شما ابتدا تمامی اعمال کاربر رو لیست می‌کنید. اعمالی مثل «لاگین/ریجستر/ایجاد پست جدید/لایک کردن پست دیگران/ایجاد کامنت/ آپلود عکس» رو مشخص می‌کنید سپس یکی از دو روش زیر رو در نظر می‌گیرید:

۱- با استدلال اعمال بالا رو دسته بندی کنید. مثلا به نظر می‌رسه افراد بعد از ریجستر کردن اقدام به آپلود عکس کنن. پس باید این دو عمل در یک سرویس قرار بگیرن تا وقتی تعداد زیادی کاربر ثبت‌نام می‌کنند شما تنها با scale کردن این سرویس مشکل رو حل کنید.

۲- ابتدا یک سرویس کلی بنویسید که همه چیز را لاگ می‌کند (توصیه می‌کنم از ELK استفاده کنید!) و سپس با تحلیل لاگ‌ها بین اعمال بالا ارتباط پیدا کنید و آن بخش‌ها را جدا کنید. این روش به خصوص وقتی به کار می‌آید که شما برنامه فعلیتان به صورت مونولتیک توسعه داده شده است و می‌خواهید به میکروسرویس‌ها سوییچ کنید. ممکن است مثلا با تحلیل لاگ‌ها به این نتیجه برسید که ریجستر کردن و ایجاد کامنت ارتباط نزدیک‌تری دارند تا ریجستر کردن و آپلود عکس!

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

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



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


ادامه مطلب:

https://mcsh.github.io/fa/god/logic/2018/12/03/FSM_Russell.html
Article 13 - بند سیزدهم و آزادی اینترنت

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

ادامه مطلب:

https://mcsh.github.io/fa/2019/03/22/article_13.html
whataboutism پس‌چه‌ایسم

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

ادامه مطلب:

https://mcsh.github.io/fa/society/2019/03/23/whataboutism.html
آدم‌ها دارن به سمتی میرن که کمترین میزان تصمیم گیری رو داشته باشن و به حد زیادی به دستیارهای مصنوعیمون وابسته شدیم.

الآن چی گوش کنم؟ بذار ببینم *فلان سرویس موسیقی* چی برام گذاشته.

الآن چی بخونم؟ بذار ببینم *فلان سرویس محتوا* چی داره.

چیکار کنم؟ بذار ببینم رو *فلان سرویس تقویم* چی دارم.

آیا این وابستگی لزوما بده؟ نه. مغز انسان توانایی‌های زیادی داره ولی محدودیت تمرکز داره. هر موردی رو که برون‌سپاری کنه فضای بیشتری برای تمرکز و خلاقیت باز میشه.

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

فیسبوک برای ما تصمیم می‌گیره کدوم پست از کدوم دوستمون رو ببینیم.

گوگل برای ما تصمیم می‌گیره وقتی دنبال چیزی هستیم چه مطالبی رو درباره‌اش ببینیم.

آمازون برای ما تصمیم می‌گیره وقتی نظرات راجع به یک محصول رو می‌خونیم کدوم نظرها رو ببینیم.

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

چیزی که باید بهش توجه کنیم اینه که سرویس‌های آزاد محدودیت‌های خیلی کمتری دارن، مخصوصا اگر توسط خودتون اداره بشن. بیاید و یواش یواش به جای استفاده از محصولات شرکت‌های دیگه به استفاده از محصولات آزاد رو بیاریم، که هم ذهنمون آزاد باشه هم کسی فکر نکنه صلاحمون رو بهتر از خودمون می‌دونه!
صورت مسئله‌: ما به یک روش برای مدیریت حساب‌هایی که تعلق به فرد خاصی ندارن نیاز داریم، برای مثال حساب‌های متعلق به NGOها یا لاگ‌ها. اعضا باید بتوانند هر تغییری در روال اجرای برنامه مدیریت کننده بدهند، اما قدرت نباید در اختیار یک فرد باشد.

پیش‌فرض‌ها: یک هاست امین داریم که در تصمیم‌ها دخالت نمی‌کند.

راه حل #۱:

بر روی یک بستر همانند گیتلب یا گیتهاب ریپوی خاصی هاست می‌شود. در این ریپو باتی هست که MR های خود را بررسی می‌کند. بر روی هر ریپو یک تگ Vote می‌گذارد و کاربران رای مثبت یا منفی با reaction دادن به پست می‌دهند. بات در یک بازه ۲۴ ساعته در صورت رای آوردن، آن را مرج می‌کند و در غیر اینصورت رد می‌کند.

بات توسط یک ایمیج داکر ساخته می‌شود، اطلاعات حساس همانند توکن‌ها، توسط هاست از طریق متغییرهای محیطی به بات داده می‌شوند. هاست تنها برای تغییر این اطلاعات و یا در صورت کرش برای roll back به نسخه قبلی به هاست متصل می‌شود.

کاربردها:

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

ایده‌های لازم برای ارتقا:
* عدم وابستگی به یک هاست
* ایجاد مکانیزم برای جلوگیری از حمله اسپمرها

برای بحث بیشتر به @pi_developer_discuss مراجعه کنید.
‏خب گل سر سبد این هفته، کتابفروشی ماکروسافت به زودی تعطیل میشه و کتب خریداری شده دیگه قابل خوندن نیستن.

از DRM دوری کنید!

‏درسته که پولش بر می‌گرده، ولی شما کتاب رو خریدید. شما صاحب اون کتاب باید بشید، حتا برگشت وجه هم قابل قبول نیست!

‏یادتون هم باشه که رایگان و رایگان‌ با DRM فرق داره. بله!

https://twitter.com/Sajjad_Heydari/status/1144375218053373952?s=19
وقفه‌ها

دو تا استاکر داریم. آلیس و بتی هر دو به کریس علاقه دارن و می‌خوان هر تغییری در شبکه‌های مجازی اون رو زیر نظر بگیرن تا بهش نزدیک بشن.

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

بتی اما باهوش‌تره، به جای دستی چک کردن کریس،...

ادامه مطلب:

https://mcsh.github.io/fa/cs/2019/07/03/interrupt.html
«به بهانه خدا - هاوکینگ»

https://blog.heydaris.com/fa/god/logic/2019/08/20/hawking.html

در این نویسه:

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

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

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

داستان تعاملی جدیدیه که نوشتم، بخش اولشه. خوشحال میشم نظر بدید بهم:

https://blog.heydaris.com/fa/story/wind/01/
نویسه جدید: «هوش مصنوعی چیست؟»

این پست الآن نزدیک ۸ ۹ ماه هست که توی درفتم بوده، تصمیم گرفتم بالاخره منتشرش کنم. خوشحال میشم بخونید، نظر بدید و بازنشر کنید بقیه هم ببینن!

https://blog.heydaris.com/fa/ai/2019/08/25/AI.html

در این نویسه:

*‌ هوش مصنوعی چیست؟

* انواعش چی هست؟

* آزمایش تورینگ

* نوشتن یک Boiler Plate برای یک مسئله هوش مصنوعی
نویسه جدید «آنچه که نیستیم»

https://blog.heydaris.com/fa/philosophy/2019/08/26/what_we_are_not.html

در این نویسه:

تا حالا ازتون پرسیدن که «شما چی هستید؟»؟ جواب این سوال بسته به جایی که ازتون پرسیده شده متفاوته. اگر در یک مهمانی پر از موجودات فضایی باشید،‌ جواب شما «من یک انسان از سیاره زمین هستم» خواهد بود اما در یک قرار ملاقات حرفه‌ای، جواب ممکن است «من طراح وبسایت هستم» باشه

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

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

اول اشاره به خیام داره، دوم اسم کامپایلر رو میشه rum گذاشت و اینترپرتر رو rumi که مثل rum interpreter هست. با همین رویکرد هم پیش رفتم.

زبان کامپایل میشه، یعنی همه تایپ‌ها و بیشترخطاهای احتمالی موقع کامپایل گرفته میشن. قابلیت لینک شدن به C (و در نتیجه هر زبان معقول دیگه‌ای رو) داره، و ویژگی‌های منحصر به فردی داره مثلا کد @compile که باعث میشه تابع شما در زمان کامپایل اجرا بشه، باهاش میشه خیلی کارها کرد مثلا تست‌ها رو اجرا کرد یا ورژن رو ست کرد یا خیلی چیزهای دیگه.

زبان ویژگی‌های فانکشنال داره،‌ فانکشن پوینتر‌ها به راحتی ساخته میشن و مقدار می‌گیرن، توی چند خط به راحتی میشه ویژگی‌هایی مثل map و aggregate رو پیاده سازی کرد.

بکند کامپایلر از llvm استفاده می‌کنه، در نتیجه هر خروجی‌ای میشه ازش گرفت،‌از web assembly گرفته تا JVM Bytecode یا حتا فایل قابل اجرا روی ماشین خودتون.

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

https://github.com/MCSH/rumi

یا این که تو این گروه عضو بشید و در موردش حرف بزنید:

https://t.iss.one/pi_developer_discuss

در ادامه هم چند عکس از سینتکس زبان می‌گذارم:
نویسه جدید «تورینگ و هوشمندی»

https://heydaris.com/fa/turing_ai
نویسه جدید به انگلیسی:

Writing a Self Compiling Compiler

https://heydaris.com/en/blog/compiler_0

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