برنامه ۱۲ عاملی (۷)- عامل ششم: پردازش

  • یوسف مهرداد بی‌بالان

عامل ۶: پردازش‌ها (process)

برنامه را به صورت یک یا چند پردازش بدون حالت (stateless processes) اجرا کنید.

برنامه‌ها در محیط اجرا به صورت یک یا چند پردازش اجرا می‌شود.

در ساده‌ترین حالت، کد برنامه شامل چندین خط است که با یک زبان برنامه‌نویسی نوشته شد و به تنهایی و بدون نیاز به اجزای خارجی می‌تواند اجرا شود؛ محیط اجرای برنامه نیز لپ‌تاپ توسعه‌دهنده‌ای است که محیط اجرای آن زبان روی آن آماده ‌شده است؛ پردازش (Process) هم با نوشتن دستور در خط فرمان(command line) اجرا می‌شود. به عنوان مثال با نوشتن دستور python my_script.pyُ پایتون برنامه‌ی شما را با ایجاد یک پردازش جدید در کامپیوتر اجرا خواهد کرد. از سوی دیگر، استقرار یک برنامه‌ی پیچیده در محیط عملیاتی ممکن است به چندین نوع پردازش‌ نیاز داشته باشد. توجه داشته باشید که از هریک از انواع می‌تواند چندین نسخه در حال اجرا وجود داشته باشد .

پردازش‌های دوازده عاملی بدون حالت (Stateless) هستند و هیچ چیزی را با دیگران به اشتراک نمی‌گذارند (Share Nothing). اگر داده‌ای نیاز به ثبت و نگهداری داشته باشد،‌ باید آن را در یک سرویس کمکی (backing service) که دارای حالت است (stateful) ذخیره کرد. این سرویس کمکی معمولاً یک پایگاه داده (database) است.

توضیح تکمیلی از سایت ردهت (اینجا):
اصل پردازش‌ها که بهتر است آن را پردازش‌های بدون حالت (Stateless Processes) نامید، ادعا می‌کند برنامه‌ی ۱۲ عاملی باید به صورت مجموعه‌ای از پردازش‌های بدون حالت اجرا شود. این بدان معناست که هیچ پردازشی خبری از وضعیت پردازش‌‌های دیگر ندارد و به هیچ اطلاعاتی از سایر پردازش‌ها مانند وضعیت نشست (session state) یا وضعیت گردش‌کار (workflow state) دسترسی ندارد و آنها را دنبال نمی‌کند.
وجود پردازش‌های بدون حالت، مقیاس‌پذیری (scaling) را آسان‌تر می‌کنند. اگر پردازشی بدون حالت باشد می‌توان در هر لحظه، تعداد نسخه‌های در حال اجرای آن را اضافه یا حذف کرد و به کمک آن بار (load) روی سیستم را مدیریت کرد. از آنجایی که هر پردازش مستقل از بقیه کار می‌کند، بدون حالت بودن کمک می‌کند تا از وقوع پیامدهای ناخواسته جلوگیری شود.

نوشته‌های قبلی:
قسمت ششم: ساخت، انتشار و اجرا

مترجم: حمید آقای خاتمی

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

یادگیری ماشین برای همه (۳)

  • یوسف مهرداد بی‌بالان

۲) سه مؤلفه یادگیری ماشین
۱-۲) داده‌ها (Data)
در نوشته قبل (اینجا) مطالعه نمایید.

۲-۲) ویژگی‌ها (Features)
ویژگی‌ها با نام پارامترها(parameters) یا متغیرها (variables) نیز شناخته می شوند. کارکرد خودرو، جنسیت کاربر، قیمت سهام، تعداد تکرار کلمه در یک متن نمونه‌هایی از ویژگی‌ها هستند. به عبارت دیگر، ویژگی‌ها عامل‌هایی‌اند که ماشین برای پیدا کردن الگوها آنها را بررسی می‌کند.
وقتی داده‌ها در جدول ذخیره شده باشند، پیدا کردن ویژگی‌ها ساده است، هر ویژگی معادل یکی از ستون‌های جدول است. اما اگر 100 گیگابایت تصویر از گربه‌ها داشته باشید چه چیزهایی را به عنوان ویژگی‌ انتخاب می‌کنید؟ بی‌شک نمی‌توان هر پیکسل از تصویر را یک ویژگی در نظر بگیریم. به همین دلیل است که انتخاب ویژگی‌های درست معمولاً بیشتر از سایر بخش‌های یادگیری ماشین طول می‌کشد. و همین انتخاب ویژگی‌ها نیز یکی از دلایل اصلی بروز خطاها و اشتباهات در کارهای یادگیری ماشین است. انسان‌ها معمولا بر اساس تفکر و تحلیل خود عمل می‌کنند.آنها فقط ویژگی‌هایی راانتخاب می‌کنند که به آنها علاقه دارند یا فکر می‌کنند “مهم تر” از بقیه‌اند. لطفا در انتخاب ویژگی‌ها تمایلات و احساسات انسانی را کنار بگذارید.

۳-۲) الگوریتم‌ها (Algorithms)
الگوریتم‌ها بدیهی‌ترين بخش یادگیری ماشین هستند. هر مساله‌ی یادگیری ماشین را می‌توان با روش‌های متفاوتی حل کرد. روش انتخابی شما بر دقت، کارایی و اندازه‌ی مدل نهایی تأثیرگذار خواهد بود. به این نکته مهم دقت کنید: اگر داده‌ها نادرست باشند بهترین الگوریتم‌ها هم کمکی به حل مساله نخواهد کرد. به این نکته‌ی مهم گاهی به اختصار «ورودی آشغال-خروجی آشغال» (garbage in – garbage out) گفته می‌شود. بنابراین بیش از حد دنبال به دقت مدل (accuracy)که به صورت درصد بیان می‌شود توجه نکنید، تلاش کنید در ابتدای کار، داده‌های بیشتری آماده کنید.

مترجم: خانم سپیده مشایخی

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

محدودیت‌های دنیای من

  • یوسف مهرداد بی‌بالان

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

داستان:
یک نفر بود که می‌گفت همکلاسی‌ها و استادهای من خیلی نژادپرست هستند. توی جلسات بحث و گفتگوی علمی دانشگاه هر وقت که نوبت به من می‌رسد و من حرف می‌زنم بهم می‌گند:
I know where you are coming from
بعد بنده‌خدا می‌خواست سر این قضیه دانشگاهش رو ول کنه.

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

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

گزیده:
محدودیت‌های زبان من به معنای محدودیت‌های دنیای من است. لودویگ ویتگنشتاین

یادگیری ماشین برای همه (۲)

  • یوسف مهرداد بی‌بالان

۲) سه مؤلفه یادگیری ماشین
اگر از مطالب نادرست و احمقانه‌ درباره‌ی هوش مصنوعی بگذریم باید گفت که تنها هدف یادگیری ماشین، پیش‌بینی نتایج بر اساس داده‌های ورودی است. تمام وظایف (tasks) یادگیری ماشین را می‌توان به همین شکل (پیش‌بینی بر مبنای داده‌ها) بیان کرد و اگر مساله‌ای را نتوان به این صورت بیان نمود احتمالا آن مساله ارتباطی به یادگیری ماشین ندارد.
هر چه تنوع نمونه‌ها (samples) بیشتر باشد، پیدا کردن الگوهای مرتبط و پیش‌بینی نتیجه آسان‌تر است. برای یادگیری ماشین به سه مولفه (component) نیاز داریم: داده‌ها (Data)، ویژگی‌ها (Features) و الگوریتم (Algorithm)

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

دو روش اصلی برای آماده‌سازی داده‌ها وجود دارد: روش دستی (manual) و روش خودکار(automatic) .
در روش دستی،‌ داده‌ها خطای بسیار کم‌تری دارند اما جمع‌آوری آنها به زمان بیشتری نیاز دارد و همین امر باعث می‌شود این روش به صورت کلی پرهزینه‌تر باشد.
روش خودکار نسبت به روش دستی ارزان‌تر است. شما هر داده‌ای را که پیدا می‌کنید جمع آوری می‌کنید به این امید که این داده‌ها برای حل مساله‌ی شما کافی‌اند.
برخی از شرکت‌های عقل کل‌ [کسی که تلاش می‌کند به شکل آزاردهنده‌ای باهوش‌تر از دیگران به نظر برسد؛ مترجم] مانند گوگل به صورت رایگان از مشتریان خود برای برچسب زدن (label) و آماده‌ساز داده‌ها استفاده می‌کنند. حتما به خاطر دارید که ری‌کپچای شرکت گوگل ( ReCaptcha) شما را مجبور می‌کند تا “در تصاویر زیر علائم راهنمایی را انتخاب کنید”؟ [ری‌کپچا اطمینان حاصل می‌کند که کاربر استفاده‌کننده از کامپیوتر یک انسان است نه یک ربات؛ مترجم]. این دقیقا کاری هست که آنها می‌کنند و شما را به عنوان نیروی کار رایگان به خدمت می‌گیرند! چقدر عالی! به جای کارمندان این شرکت‌ها منِ کاربر شروع می‌کنم به یاد دادن تعداد بیشتر و بیشتری از علایم راهنمایی به ری‌کپچا. اوف …!
جمع آوری مجموعه‌ای با کیفیت از داده‌ها کار بسیار دشواری است. به یاد داشته باشید که به مجموعه‌ی داده‌ها، دیتاست (dataset) گفته می‌شود. اهمیت داده‌ها به حدی است که شرکت‌ها، شاید حاضر شوند الگوریتم‌های خود را در اختیار عموم قرار دهند اما به ندرت حاضر به انتشار دیتاست‌های خود می‌شوند.
مترجم: خانم سپیده مشایخی

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

برنامه ۱۲ عاملی (۶)- عامل پنجم: ساخت، انتشار، اجرا

  • یوسف مهرداد بی‌بالان

عامل ۵: ساخت(build)، انتشار(release)، اجرا(run)
گام‌های ساخت (‌Build) و اجرا(Run) را کاملا از هم جدا کنید.

هر پایگاه کد (codebase) طی سه مرحله به استقرار (deploy) تبدیل می‌شود:

  • مرحله ساخت (build stage) : در این مرحله مخزن کد (codebase) به یک بسته قابل اجرا (executable bundle) تبدیل می‌شود. این بسته‌ی قابل اجرا با نام بسته‌ی ساخت (Build) نیز شناخته می‌شود. در این مرحله ابتدا بر اساس شماره‌ی نسخه‌ی (version) کدی که در فرایند استقرار مشخص شده، کد از مخزن کد برداشته می‌شود،‌ در گام دوم، اجزا و مولفه‌های خارجی که برنامه به آنها وابسته است (vendors dependencies) گردآوری می‌شود و در پایان، فایل‌ها و سایر اجزای برنامه کامپایل می‌شوند.
  • مرحله انتشار (release stage): در این مرحله بسته ساخت (Build) که در مرحله قبلی آماده شده با پیکربندی(config) استقرار ترکیب می‌شود که نتیجه‌ی آن نسخه قابل انتشار (release) است که شامل هم بسته‌ی ساخت و هم پیکربندی است. این نسخه‌‌ی انتشار برای استفاده در محیط اجرا (execution environment) آماده است.
  • مرحله اجرا (run stage): برنامه در محیط اجرا بالا می‌آید، برای هر انتشار مجموعه‌ای از فرآیندهای برنامه اجرا می‌شود. این مرحله نام “مرحله زمان اجرا” (runtime) نیز شناخته می شود.

مترجم:
بسته (bundle):‌به دو یا چند برنامه‌ی نرم‌افزاری (application) که با هم بسته‌بندی می‌شوند و به عنوان یک محصول به فروش می‌رسند) بسته یا باندل گفته می‌شود.

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

ابزارهای استقرار معمولاً دارای ابزارهای مدیریت انتشار نیز هستند و یکی از قابلیت‌های برجسته آنها،‌ امکان برگشت به عقب و به نسخه قبلی است (roll back). برای مثال، ابزار استقرار Capistrano نسخه‌ها را در پوشه‌ای (folder) به نام releases ذخیره می‌کند. در این ابزار به کمک یک فایل لینکی (Symlink) که به یکی از پوشه‌های داخل releases اشاره می‌کند، مشخص می‌گردد که نسخه‌ی جاری در کدام یک از پوشه‌ها قرار دارد. هم‌چنین در این ابزار، فرمان rollback به شما کمک می‌کند به راحتی و به سرعت به نسخه قبلی برگردید.

مترجم:
Symlink که symbolic link هم نامیده می‌شود نوعی فایل در لینوکس است که به فایل یا پوشه دیگری در کامپیوتر اشاره می کند. Symlink مشابه shortcut در ویندوز است.

هر انتشار باید یک شناسه‌ی منحصر به فرد مانند شناسه‌ی زمانی (timestamp) مانند 2011-04-06-20:32:17 یا یک شناسه‌ی عددی مانند v100 داشته باشد. فهرست انتشارها مانند لیستی است که فقط می‌توان به آن ردیف جدیدی اضافه کرد و بعد از اضافه شدن ردیف جدید، نمی‌توان آن را تغییر داد.. اعمال هر تغییر جدیدی در انتشار فقط از طریق ایجاد یک انتشار جدید و اضافه کردن آن به لیست موجود، امکان‌پذیر است.

نوشته‌های قبلی:
–قسمت پنجم: سرویس ‌های کمکی ( backing services)

مترجم: حمید آقای خاتمی

گزیده:
بخش توسعه‌ی (Devs) مریخی‌اند و بخش عملیات و اجرا (Ops) ونوسی! استیون هاینس

برنامه ۱۲ عاملی (۵)- عامل چهارم: سرویس‌های کمکی

  • یوسف مهرداد بی‌بالان

عامل ۴: سرویس ‌های کمکی ( backing services)
با سرویس‌‌های کمکی مانند منابع ضمیمه شده یا پیوست ( attached resources) رفتار کنید.

سرویس کمکی ( backing services) هر سرویسی است که برنامه از طریق شبکه از آن برای انجام کارهای معمول و روزمره‌اش استفاده کند. از جمله سرویس‌های کمکی می‌توان به پایگاه‌ داده مانند MySQL، سیستم‌های‌ پیام‌رسان و مدیریت صف (messaging/queueing) مانند RabbitMQ، سرویس ایمیل ( SMTP) برای ارسال و دریافت ایمیل‌هامانند Postfix و حافظه‌های ذخیره‌سازی سریع (caching) مانند Memcached اشاره کرد.

سرویس‌‌های کمکی مانند پایگاه داده از قدیم توسط راهبران سیستم (administrators) که استقرار برنامه‌ها نیز بر عهده‌ی آنهاست مدیریت می‌شوند. علاوه‌ بر سرویس‌هایی که به صورت محلی و داخلی (local) مدیریت می‌شوند، برنامه‌ها ممکن است از سرویس‌هایی استفاده کنند که توسط شرکت‌های دیگر ارائه و مدیریت می‌شوند. برای مثال می‌توان به سرویس ایمیل مانند Postmark، سرویس جمع‌آوری شاخص‌های آماری مانند New Relic یا Loggly، سرویس مدیریت دارایی‌های دیجیتالی مانند Amazon S3 و حتی سرویس‌های مبتنی بر API مانند Twitter، Google Maps یا Last.fm اشاره کرد.

کد هر برنامه دوازده عاملی هیچ تفاوتی بین سرویس‌های محلی و سرویس‌های خارجی قائل نیست. از دید برنامه، هر دو نوع سرویس، منابع پیوست (attached resources) هستند که از طریق یک آدرس (URL) یا هر مکانیزم آدرس‌دهی دیگری که در فایل پیکربندی ذخیره شده‌ قابل دسترسی‌اند. موقع استقرار ( deploy) هر برنامه دوازده عاملی باید بتوان بدون تغییر کد، یک پایگاه داده MySQL محلی را با نسخه‌ای که توسط یک شرکت خارجی مدیریت می‌شود مانند Amazon RDS تعویض کرد. هم‌چنین بدون تغییر کد باید یک سرویس‌دهنده‌ی SMTP داخلی را با یک سرویس‌دهنده‌ی خارجی مانند Postmark تعویض کرد. در هر دو مورد فقط کافی است آدرس دسترسی به منابع در پیکربندی (config) تغییر داده شود.


هر سرویس‌ کمکی یک منبع ( resource) به حساب می‌آید. برای نمونه هر پایگاه داده MySQL یک منبع است. دو پایگاه داده MySQL (که در لایه Application برای اشتراک گذاری استفاده می‌شود) دو منبع مجزا به شمار می‌آیند. برنامه دوازده عاملی با این پایگاه‌های داده مانند منابع پیوست (attached resources) برخورد می‌کند که نشان‌دهنده همبستگی کم (loose coupling) آن‌ها به استقراری است که در آن قرار دارند.
منابع را می‌توان به دلخواه به استقرارها متصل و جدا کرد. برای مثال، اگر پایگاه داده به دلیل مشکلات سخت افزاری بد کار کرد راهبر (admin) برنامه می‌تواند از روی آخرین نسخه‌ی پشتیبان، سرویس‌دهنده‌ی جدیدی برای پایگاه داده راه‌اندازی کند و برنامه را به آن متصل نماید. به عنوان نمونه‌ای دیگر، پایگاه داده عملیاتی را می‌توان جدا کرد و پایگاه داده جدیدی را به برنامه متصل کرد. تمام این‌ کارها بدون هیچ تغییری در کد انجام می‌شود.

نوشته‌های قبلی:
– قسمت چهارم: پیکربندی

مترجم: حمید آقای خاتمی

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

گیلان گیلان همیشه بهاره گیلان

  • یوسف مهرداد بی‌بالان

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

عکس: بی‌بالان، اردیبهشت ۱۴۰۱
با سپاس فراوان از یوسف ابر عزیز

برای خروج از جستجو کلید ESC را بفشارید