بهانه هایی برای گریز از کامنت گذاری

کامنت گذاری در کد، یک شمشیر دو لبه است. اگر به درستی انجام شود، می تواند طراحی سیستم را بهتر کند و در غیر این صورت، بسیار آسیب زننده است.

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

معمولا برنامه نویس ها 4 بهانه برای ننوشتن کامنت دارند:

  1. کد خوب نیازی به مستندسازی ندارد
  2. برای کامنت گذاری زمان ندارم
  3. کامنت ها بعد از گذشت زمان، منقضی شده و باعث اشتباه می شوند
  4. همه ی کامنت هایی که من دیده ام بی فایده بوده اند

این بهانه ها را بررسی کنیم:

1. کد خوب نیاز به مستندسازی ندارد

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

برای مثال، در یک کلاس، فقط بخش کوچکی از واسط آن، مثل signature متدها را می توان در کد مشخص کرد. ولی این که هر متد دقیقا چه کاری انجام می دهد، یا معنی خروجی آن چیست، تنها از طریق کامنت گذاری قابل انتقال به خواننده ی کد است. چیزهای دیگری هم هست که در کد قابل توضیح دادن نیست، مثلا این که چرا یک طراحیِ به خصوص برای بخشی از کد انتخاب شده و یا چرا یک متدِ بخصوص صدا زده شده است.

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

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

برای مثال فرض کنید یک متد داریم، که یک بخش از یک string را استخراج می کند. این متد دو ورودی دارد، start و end که مشخص کننده ی شروع و پایان ِ قسمتی از string هستند که باید جدا شود. قطعا از ظاهر این متد، نمی توان تشخیص داد که آیا string خروجی، شامل کاراکترهایی که در start و end هستند هم می شود؟ یا فقط هر آنچه بین این دو عدد است را جدا می کند؟ برای فهمیدن این سوال، استفاده کننده، باید کد را بخواند تا بتواند از این متد استفاده کند.

بنابراین اگر می خواهید از انتزاع استفاده کنید تا پیچیدگی را پنهان کنید، با استفاده از کامنت بهتر می توانید این کار را انجام دهید.

2. برای کامنت گذاری زمان ندارم

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

ولی باید از دیدگاه سرمایه گذاری به این مساله نگاه کرد. اگر یک نرم افزار با ساختار تمیزتر می خواهید، که در بلندمدت، عملکردِ شما را بهتر می کند و سرعت توسعه را بیشتر، باید در کوتاه مدت، زمانی را به ساختن این ساختار تمیز اختصاص دهید. کامنت های خوب، کمک بسیاری به نگهداری یک سیستم نرم افزاری می کنند و زمانی که برای کامنت گذاری صرف می شود، در آینده سود ده خواهد بود.

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

3. کامنت ها بعد از گذشت زمان، منقضی و باعث اشتباه می شوند

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

4. همه ی کامنت هایی که من دیده ام بی فایده و زحمت اضافه بوده اند

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

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


مزایای نوشتن کامنت

در مطلب پیچیدگی در نرم افزار گفته شد که پیچیدگی، به سه صورت خودش را در سیستم نشان می دهد:

  • تشدید تغییر (change amplification)

یعنی برای یک تغییر کوچک، بخش های زیادی از سیستم را باید تغییر داد.

  • بارِ شناختی (cognitive load)

یعنی برای اعمال یک تغییر، برنامه نویس باید اطلاعات وسیعی از بخش های مختلف سیستم به دست آورد.

  • ندانسته های ناشناخته (unknown unknowns)

یعنی این که چه بخش هایی باید تغییر کنند، یا برای اعمال تغییرات، چه ملاحظاتی باید در نظر گرفته شود، مشخص و شفاف نیست.

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


خلاصه

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

وقتی یک برنامه نویسِ دیگر، بعد از گذشت زمان، می خواهد آن ماژول را تغییر دهد، با خواندن کامنت ها، کار خود را بسیار سریعتر انجام می دهد. ولی بدون کامنت، باید آن چه که در ذهن برنامه نویس قبلی بوده را حدس بزند. این اتفاق هم باعث اتلاف وقت می شود، هم این که با حدسِ اشتباه، ممکن است برنامه نویس جدید، کدی بنویسد که منجر به خطا شود.

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


منبع

A philosophy of software design

نوشته بهانه هایی برای گریز از کامنت گذاری اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

نشست ها (Sessions) چیستند و فرق آنها با کوکی چیست؟

سلام. تو اولین پستم میخوایم در مورد نشست ها در پروتکل HTTP با هم صحبت کنیم و اینکه بدونیم فرقشون با کوکی ها چیه و پشت صحنه داره چه اتفاقاتی میفته که ما ازش خبر نداریم. پس در ادامه با من همراه باشید.

کوکی چیست؟

معمولا ما از کوکی ها برای ذخیره اطلاعات به طور موقت یا غیرموقت در حافظه مرورگر استفاده میکنیم. بیشتر برای ذخیره کوکی از جاوا اسکریپت استفاده میشه و اینکه چطور کار میکنه بماند برای بعد و خواستین خودتون تحقیق کنید. اما بریم ببینیم چه اتفاقاتی داره تو Header های HTTP Request میفته:

سرور:

HTTP/1.1 200 OK
/* ... */
Content-Type: text/html
Set-Cookie: time=16:00:00; Path=/; Version=1
Accept-Ranges: bytes
/* ... */

خب این یه نمونه Header هست که از سایتی که بهش مراجعه کردیم به ما ارسال شده. در Set-cookie مشاهده میکنیم که در متغیر تایم یه ساعتی ذخیره شده که کاری بهش نداریم. اما در دفعه های بعدی موقع رفتن به این سایت، مرورگر این Header رو برای سرور می‌فرسته:

/* ... */
Cookie: time=16:00:00;
/* ... */

دیدین؟ اینطوری سایت به یاد میاره که چه چیزی ذخیره کرده. البته سرور میتونه مشخص کنه که این کوکی کی حذف بشه، حتی ما هم میتونیم این کوکی هارو حذف کنیم، بهشون دسترسی داشته باشیم یا اصلا کلا اجازه ست کردن کوکی به سرور ها رو ندیم؛ از این ور اگه سایت باگ XSS داشته باشه به راحتی میشه کوکی هارو خوند 🙂 ، پس زیاد گزینه خوبی نیست.

نشست ها یا همون Session ها چی‌ان؟

شرایطی رو در نظر بگیرین که میخواین سرورتون یوزرنیم و پسورد کاربرتونو بعد از لاگین کردن و رفتن به صفحات دیگر، به‌یاد بیاره و از این ور ما هم نمیخوایم اینارو ذخیره کنیم تو حافظه مرورگر. چاره کار چیه؟ Session ها.

شاید این موقع ها اگه PHP کار باشین از SESSION_$ استفاده میکنین. حالا بیاین ببینیم در عمل چه چیزی اتفاق میفته:

سرور:

HTTP/1.1 200 OK
/* ... */
Content-Type: text/html
Set-Cookie: username=admin&password=admin; HttpOnly
Accept-Ranges: bytes
/* ... */

مرورگر:

/* ... */
Cookie: username=admin&password=admin;
/* ... */

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

تو نود جی اس میتونید نشست هارو اینطوری ست کنید:

http.createServer(function(res, req){
   /* ... */
   res.writeHead(200, {'Set-Cookie':'u=admin'});
   /* ... */
});

و اینطوری بدستش بیارید:

req.headers['Cookie'];

موفق باشید.

نوشته نشست ها (Sessions) چیستند و فرق آنها با کوکی چیست؟ اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

برنامه نویس، انسان منزوی یا اجتماعی؟!

توی اکثر فیلم هایی که حداقل یک سکانسش مربوط به یه برنامه نویس بوده( حتی اگه از جلو دوربین رد شده) یا توی باور اکثریت مردم برنامه نویس یه کاراکتره که :

هودی کلاه دار می پوشه (حتی تو آفتاب تابستون)، یه شخصیت مرموز و منزوی داره، جامعه گریزه، تنها دوستش کامپیوترشه، دائم داره با سرعت نور با کیبورد کار میکنه و ….

اما آیا واقعا برنامه نویس ها اینطور شخصیتی دارند؟

خب طبیعتا جواب هم آره هست هم نه!

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

ولی باور عمومی که این فیلم ها در ذهن مردم به جود آوردند به نظر من کاملا غلط هست.

حتی کسانی که مخصوصا در سنین پایین شروع به برنامه نویسی میکنند تحت تاثیر این فیلم ها سعی میکنند همچین شخصیتی داشته باشند که قطعا خیلی دووم نمیارن!

برای مطمئن شدن از این مسئله کافیه یه نگاه به برنامه نویسای اطرافتون بندازین (اول ازشون بپرسید که برنامه نویس هستن یا فقط جو برنامه نویسی دارند!)

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

این افراد غالبا توی انجمن های زیادی (حضوری یا آنلاین) عضو هستند، دائما در حال برگزار کردن یا شرکت کردن توی اجتماعاتی هستند که پر از آدمهای مختلف هست.

برنامه نویس ها با مشتری، رئیس،همکار و … دائما در ارتباط هستند(مگه اینکه نیازی به نون شب نداشته باشند)

اکثر برنامه نویس های واقعی! پارتنر دارند، دوستانی دارند، همکار دارند، مهمونی میرن، مسافرت میرن(با رعایت پروتکل های بهداشتی) و …

پس بنظرم وقتشه یه مقدار این باوری که در عموم جامعه راجع به برنامه نویس ها وجود داره رو تغییر بدیم!

برنامه نویس ها خوشحال هستند، اجتماعی هستند،با موس هم کار میکنند! ، با کامپیوترشون وارد رابطه عاطفی نمیشن! ،مناسب فصل لباس می پوشن! و کارهای که بقیه می کنند رو انجام میدن…

نظر شما راجع به این قضیه چیه؟

برنامه نویس باشید و ازش لذت ببرید 🙂

نوشته برنامه نویس، انسان منزوی یا اجتماعی؟! اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

فیسبوک: جزییات بیشتر در مورد قطعی ۴ اکتبر (فیسبوک، اینستاگرام، واتساپ…)

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

این قطعی توسط سیستم شبکه‌ی موسوم به ستون فقرات(بک‌بون) شبکه‌ی جهانی ما ایجاد شد. بک‌بون برای اتصال تمام ظرفیت‌های شبکه‌ی جهانی ما به هم ساخته شده است که شامل ده‌ها هزار کیلومتر فیبر نوری است که دیتاسنترهای ما را به هم متصل می‌نماید.

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

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

ترافیک داده‌ها ما بین تمام مراکز داده‌ی ما توسط (مسیریاب‌ها)روترها مدیریت می شود که تعیین می کنند که داده‌های ورودی و خروجی را به کجا ارسال کنند. و در کارهای بسیار بزرگ روزانه برای حفظ و نگهداری این زیرساخت، مهندسان ما باید بخشی از شبکه را برای تعمیر و نگهداری از دسترس خارج کنند مثلا شاید برای تعمیر یک خط فیبر نوی، اضافه کردن ظرفیت بیشتر به شبکه یا به روز رسانی نرم افزار روی روترها…

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

این تغییر باعث قطع کامل ارتباطات سرورهای ما بین مراکز داده‌هایمان و شبکه‌ی جهانی اینترنت شد. و از بین رفتن کامل ارتباط باعث ایجاد مسئله دوم شد که اوضاع را بدتر کرد.

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

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

تمام این اتفاقات خیلی سریع رخ‌داد. در حالیکه مهندسان ما تلاش می‌کردند تا بفهمند چه اتفاقی افتاده است و چرا؟ آنها با دو مانع بزرگ روبرو شدند: اول، دسترسی به دیتاسنتر‌های ما از طریق روشهای معمول (از خارج) امکان پذیر نبود زیرا شبکه های آنها خراب شده بود و دوم، از بین رفتن تمام DNS ها و از کار افتادن بسیاری از ابزارهای داخلی که ما معمولاً برای بررسی و رفع خاموشی هایی از این دست استفاده می کنیم شد.

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

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

این از رویدادهایی است که ما بخاطر آن تمرینات موسوم به “طوفان” که مدتهاست در حال اجرا هستیم. در یک تمرین طوفانی، ما با یک سیستم تمرینی، خرابی گسترده یا خرابی در کل یک منطقه را شبیه سازی می کنیم، تمام زیرساخت ها و نرم افزارهای مربوطه را تحت آزمون استرس(استرس تست) قرار می دهیم. تجربه این تمرینات به ما اعتماد به نفس و تجربه خوبی برای بازگرداندن سیستم‌ها به حالت آنلاین و مدیریت دقیق افزایش بار را به ما داد. در نهایت، خدمات ما نسبتاً سریع بدون هیچ گونه خرابی در سیستم‌های دیگر و به سرعت شروع به کار کرد. و در حالی که ما قبلاً هرگز طوفانی را شبیه سازی نکرده بودیم که شبکه‌ی ستون فقرات جهانی ما را به طور کامل از دور خارج کرده باشد، مطمئناً به دنبال راه هایی برای شبیه سازی رویدادهایی مانند این هستیم.

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

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

نوشته‌ی: سانتوش جاناردان

آدرس بلاگ پست فنی فیسبوک

ترجمه: محمود اسکندری

نوشته فیسبوک: جزییات بیشتر در مورد قطعی ۴ اکتبر (فیسبوک، اینستاگرام، واتساپ…) اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

کامپایل کردن پایتون ۳.۱۰ از سورس کد

این روزها واقعا حالت جالبی برام داره سه‌تا از زبون‌های مورد علاقه‌ام یا تازه ورژن جدید شون رلیز شده یا به زودی رلیز میشن و هر کدومشون یا تغییرات نسبتا بزرگی دادن یا قراره توی ورژنی که میاد تغییرات جالبی ایجاد کنند

زبان GO قرار اول فوریه آینده ورژن ۱.۱۸ رو بده و توش جنریک‌ها رو اضافه کنه، C# هم توی ورژن ۱۰ ش قراره ویژگی‌های جالب جدیدی از async رو اضافه کنه مثل async method builder

چند روز پیش‌ هم پایتون ۳.۱۰ منتشر شده، که متاسفانه یا خوشبختانه اوبونتو هنوز حتی ورژن ۳.۹ رو دیفالت توی پکیج‌های خودش نذاشته.

بخاطر همین تصمیم گرفتم هم سوس کد پایتون رو برای خودم کامپایل کنم هم اینکه به این بهانه یکم درباره سورس کد زبان پایتون اینجا بنویسم

پیش نوشت:

من خوشم میاد از این کارا، نشستم دستی کامپایلش کردم شما میتونید بدون دردسر از apt و یا ویندوز اینستالر استفاده کنید

با apt:

sudo apt install software-properties-common -y
sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt install python3.10

حالا بریم سراغ کامپایل کردنش:

مواد لازم برای این کار مسلما داشتن gcc و make و دسترسی به ترمیناله که من خودم از WSL2 ویندوز استفاده میکنم

خب بریم سر اصل مطلب، اول اینو بگم که پایتون ایمپلمنتیشن‌های مختلفی داره مثل pypy و IronPython.net و هر کدوم، سورس کد پایتون رو تغییرات اساسی دادن که باعث زیاد شدن سرعت اجرا و یا کامپتیبل شدنش با مایکروسافت Common runtime language یا چیزای دیگه می‌شه و خب کامپایل کردنشون داستانی کاملا جداست.

حالا ما میخوایم CPython که ایمپلمنتیشن اصلی پایتونه رو یه نگاهی بش بندازیم

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

mkdir python_source && cd python_source

لیست دیپندنسی‌ها و لایبرری‌های مورد نیاز پایتون رو نصب میکنیم:

sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev wget libbz2-dev

که تقریبا همشون لایبرری‌های نسبتا معروفی هستن مثل sqlite3, build-essential, libssl, و بقیه

فایل سورس کد هم که روی سایت پایتون هست و کلا ۲۴ مگه

wget  https://www.python.org/ftp/python/3.10.0/Python-3.10.0b4.tgz

با tar بازش میکنیم و میریم ببینیم چیا توشه؟

tar -xf Python-3.10.0b4.tgz
cd Python-3.10.0
ls 

فایل config خیلی چیز جالبه و کار رو به شدددددت راحت میکنه،‌ و میاد برای شما محتویات makefile.pre رو بسته به سیستم شما عوض میکنه. دیگه حتی نیازی نیست داکیومنت‌ها رو بخونیم یا سورس کد رو تو گیت‌هاب زیر و رو کنیم. هر چند این فایل خودکار تولید شده و حدود ۲۰هزار خطه، اما بخش‌هاش کاملا مشخصند و اگه یکم bash script بلد باشید و قبلا پروژه‌های متن باز رو کامپایل کرده باشید راحت می‌تونید چیزایی که می‌خواید رو پیدا کنید. میدونیم که عموما این پروژه‌های متن باز توی فایل کانفیگشون، به بخش optimization دارن که makefile یا makefile.pre رو برای سیستم شما عوض میکنه

حالا که دستور مد نظر رو پیدا کردیم اجراش میکنیم

./configure --enable-optimizations

لیست بلند بالایی از متغییرهای مختلف خواهید دید که بر مبنای سیستم شما، تنظیم میشن. و یه چند ثانیه شایدم چند دقیقه کوتاه طول میکشه یه چیزی مثل تصویر پایین

تموم که شد وقت make کردن میشه، که احتمالا برای WSL باید خود پکیجش رو نصب کنید

sudo apt install make -y

کامند make یه flag داره به اسم -j یا jobs که میتونید بگید چندتا از پروسسور‌ها رو استفاده کنه که خب من برای اینکه کارم سریع‌تر راه بیوفته میزنم رو ۸ تا. شما میتونی بگی پردازنده های بیشتری رو استفاده کنه یا کمتر

make -j 8

خود make میره makefile رو بر اساس Makefile.pre تولید میکنه براتون. وقتی میک فایل رو باز می‌کنید اولش یه همچین کامنتی میبینید که کامندهای بدرد بخور رو براتون نوشته

کامندهای make test , make install اصلی‌ها هستن ولی نوشته make altinstall پایتون جدید رو با قبلیه جایگزین نمی‌کنه ولی make install اینکارو میکنه به همین دلیل من اینجا altinstall میکنم

 make altinstall

معمولا برای اینکه ببینید نرم افزار درست کامپایل شده یا نه باید یه بار ترمینال رو ببندید دوباره باز کنید

برای چک کردن اینکه نصب تموم شده یا نه

python3.10 --version 


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

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

دایرکتوری Lib تمام لایبرری‌های استاندارد رو شامل میشه که شدیدا توصیه میکنم حداقل لایبرری‌های http, crypt, asyncio,ssl رو بخونید و ببینید چقدر نبوغ مهندسی برای پایتون خرج شده

دایرکتوری Python هم شامل سورس کد لایبرری‌های هسته پایتونه که واقعا کدهای جالبی توش هست

من هنوز تو مدیریت خطاها بعضی وقت‌ها شیش میزنم فایل errors.c خیلی برام باحال بود

دایرکتوری Objects هم سورس آبجکت‌های built-in پایتون به زبان C هستن و انقدر دقیق و کامل کامت گذاری شدن که انگار دارید کتاب میخونید نه کد.

نوشته کامپایل کردن پایتون ۳.۱۰ از سورس کد اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

پادکستی که امروز حال منو خوب کرد ❤️

پادکست رادیو صفر و یک

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

نوشته های زیر خلاصه ی ذهنی من از این پادکست است که ممکنه ناقص نوشته باشم و پیشنهاد میدم خود پادکست را گوش بدید که بالا آپلود کردم براتون ❤️❤️

پادکست در حوزه ی فناوری و برنامه نویسی

پادکست فوق العاده ای که من گوش دادم در مورد زندگی یه برنامه نویس بود که توش داستان های آموزنده ای برای من داشت و من هنوز بعد از چندین ساعت درگیرش هستم و دوبار هم گوش دادمش

یه فردی با این شخصیت و عظمت مگه میتونه باشه ؟‌

یه فردی چنین متواضع که دنیا رو عوض کرده و میتونست پولدارترین فرد روی زمین باشه ولی دست رد گذاشته روی ثروت و شهرت و …

پادکست فناوری و برنامه نویسی

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


زندگینامه ی لینوس توروالدز

پادکست زندگی لینوس توروالدز

این پادکست همانطور که بالا هم گفتم در ژانر بیوگرافی هست و روایت هایی از زندگی لینوس توروالدز رو بیان میکنه که لینوکس را ساخته البته فضای پادکست میخوره فضای داستان سرایی باشه و تعریفات گوینده بسیار جذاب هست و من فکر میکنم به همین زودی یکی از برترین و بزرگترین پادکست های فارسی زبان میشه

لینوس توروالدز یک برنامه نویسی هست که در سال ۱۹۶۹ در شهر هلسینکی فنلاند چشم به جهان گشوده است. پدر مادرش آرزوی دانشمند شدن او را داشتند و اسمش را از دانشمند بزرگ آن زمان به اسم لینوس پاولینگ گذاشتن.

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

اسم لینوس از این دانشمند گرفته شده و زمانی که کودک بوده پدربزرگی به اسم لئو داشته که یک کامپیوتر کومودور بهش کادو میده به نام vic-20 که باعث میشه لینوس توروالدز به دنیای برنامه نویسی علاقه مند بشه…

لینوس در مدرسه جزو افرادی بوده که همیشه جایزه های ریاضیات را برنده میشده و در زمینه ی ریاضیات نخبه بوده است.

همین ریاضیات در حل مسائل پیچیده ی لینوس احتمالا کمکش کرده

زبانی که شروع کرده به یادگیری BASIC بوده و سپس ASSEMBLY را یاد گرفته ولی اصلی ترین زبان برنامه نویسی که بعدا یاد گرفته زبان قدرتمند سی بوده که لینوکس را هم با این زبان برنامه نویسی نوشته….



داستان خلق لینوکس

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

داستان خلق لینوکس

دلیل خلق لینوکس :

  • لینوس توروالدز از سیستم عامل داس بدش میومد چون محدود بود
  • یونیکس پولی بود و دوست نداشت پنج هزار دلار بابت یه سیستم عامل بده
  • مینیکس ناقص بود

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

اری لمکه یه فردی بود که برای اولین بار لینوکس را منتشر کرد لینوس توروالدز در ابتدا نام Linux را روی این سیستم عامل گذاشته بود که ترکیب Linus + Unix Like بود ولی چون احساس میکرد یکم خودخواهانه هست اسم Freax را انتخاب کرد که ترکیب Free + Unix like بود . ولی زمان انتشار این سیستم عامل توسط اری لمکه همون اسم قبلی یعنی Linux انتخاب شد و روی ftp جهت دانلود همه قرار گرفت.

همین نقطه ی شروع لینوکس بود تا به دست هزاران نفری بیوفته که قرار بود براش کار بکنند و آینده ی کامپیوتر جهان را متحول بکنه …

افتخارات لینوس توروالدز برای ساختن لینوکس

سیستم عامل لینوکس توسط ۳ و نیم بیلیون کاربر در جهان مورد استفاده است که بیشترین استفاده ی لینوکس برای مدیریت سرورهاست ولی میشه روی همه چی نصبش کرد.

کرنل اندروید هم لینوکسی هست و اگر اندروید را هم لینوکسی حساب کنیم پس لینوکس بعنوان محبوب ترین کرنل جهان حساب میشه و یه نوعی محبوب ترین سیستم عامل جهانم هست.

سال ۲۰۰۱ کنسول پلی استیشن دو که پرفروش ترین کنسول بازی جهان بود از لینوکس استفاده میکرد.

شرکت IBM از همون اول به لینوکس علاقه نشون داد و روش سرمایه گذاری کرد بطوریکه الان سوپرکامپیوترهای IBM با لینوکس اجرا میشوند.

دلیل اصلی اینکه این پادکست رو د وس داشتم

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

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

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

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

حرف رو زیاد کش نمیدم پادکست رو گوش بدید و لذت ببرید

منبع : اپیزود ۱ پادکست رادیو صفر و یک در anchor

نوشته پادکستی که امروز حال منو خوب کرد ❤️ اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

سناریو سیستم های رزرواسیون

یه چالش خیلی مهم سیستم های رزرواسیون اینه:

نمایی از کنسرت اصغر آقا

اصغر آقا یه کنسرت برگذار می کنه با تعداد مشخصی صندلی و تو سایت هوشنگ و برادران IT تعداد بلیط ها رو ثبت می کنه که مردم بیان بخرن

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

من میرم بلیط رو بخرم، روی دکمه پرداخت کلیک می کنم میرم داخل درگاه پرداخت
اطلاعات رو وارد می کنم و پرداخت رو انجام میدم بعدش هم ریدایرکت میشم به سایت یه دفعه می بینم ارور میده:

ظرفیت این کنسرت پر شده است!

یعنی چی؟ مگه ننوشته بود یک بلیط موجوده؟ اصلا اگر ظرفیت پر شده چرا گذاشت پرداخت کنم؟

ماجرا اینه:

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

خب این یعنی مشکل از سرعت عمل پایین منه؟
خیر!

سیستم باید به این شکل پیاده سازی شده باشه:

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

من وسط پرداخت به این فکر می کنم حالش رو ندارم کنسرت برم بیخیال میشم

-‌ خب اینجوری که یه بلیط رزرو شده توی سیستم ولی پرداخت نداشتیم

باید چک کنیم بعد از پانزده دقیقه نتیجه تراکنش چی بوده؟ آیا پرداخت موفقیت آمیز بوده یا نبوده؟ (با کرون جابز این کار رو انجام میدیم)

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

امیدوارم مفید بوده باشه 🙂

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

گردآوری توسط ایده طلایی

مراحل اصولی طراحی وب

سلام

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

فرانت اند

برای طراحی اصولی بایستی 2 تا اصطلاح رو یاد بگیرید ، یکی فرانت اند و یکی بک اند که در این مطلب در مورد فرانت اند توضیح میدم خدمتتون ، فرانت اند یعنی ظاهر قضیه ، بک اند یکی فعالیت هایی که بایستی با کد به سرور فهموند که انجام بده ، یه مثال ساده بزنم تصور کنید شما یه شمایل انسانی دارید که بک اند استخوان بندی فرد هست و فرانت اند گوشت و پوست و مو ، یعنی شما توسط فرانت اند به استخوان بندی یه ظاهر شیک میدید و همگان این ظاهر رو میبینن و فرانت اند همون استخوان بندی هست که کسی ازش خبر نداره و پشت ظاهر هست .

برای یادگیری فرانت اند بایستی مراحل زیر رو طی کنید:

1-تاریخچه طراحی وب رو بدونید ( برای اطلاعات عمومی )

2-بلد شدن HTML – بنیاد و اساس شروع طراحی هست.

3-بلد شدن – CSS – وظیفش اینه که شمایل سایت رو شکیل کنه.

4-بلد شدن Java Script – یک زبان برنامه نویسی خیلی قدرتمند هست که بدونید شما رو از دیگر طراحان متمایز تر میکنه.

در این میون چند تا فریم ورک هم هست که برای طراحی فرانت اند استفاده میشه که دو تا مطرحش رو نام میبرم یکی Bootstrap و یکی Tailwind این دو تا رو هم اگر بلد بشید واقعا شما رو حرفه ای میکنه توی کارتون.

بعضی از اصطلاحات هست که من به کار میبرم بهتر هست خودتون برید و در موردش مطالعه کنید که ب شما خیلی کمک میکنه.

این تا اینجا ، توی پست بعدی در مورد بک اند هم توضیح میدم…

به امید دیدار

نوشته مراحل اصولی طراحی وب اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

ما،‌ الگوهای معماری، الگوریتم‌ها-بخش۱ ports & adaptors

سلام،‌این پست اولین پست وبلاگی من هست و امیدوارم اگه مشکلاتی داشت مخصوصا در مورد موضوع خوشحال می‌شم به من اطلاع بدید


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

توییت وایرال شده در باره الگوریتن ها

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

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

احتمالا اگه تا الآن در حال کار کردن با الگوی طراحی هشت ظلعی،‌ به جایی رسیدید که تعداد زیادی لایه بیرونی خواهید داشت که نیاز به استفاده از لایه اپلیکیشن داشته باشند،‌ درست مثل نمونه تصویر اول پست. مثلا بخش گزارش گیری نیاز داره درباره مدل‌های اپ خبر داشته باشه و همینطور رابط گرافیکی و همزمان API ها و بخش مربوط به تست ها،‌ هم همینطور،‌ حالا چی میشه اگه شما بخوای اینترفیس (Interface) بخش کامندها بکنید چی میشه؟ با فرض بر اینکه شما از اصل Dependency inversion پیروی کردید و حالا نیازمندی های بخش مدل‌ها عوض شده مثلا فکر کنید در حال اجرای اپلیکیشنی مثل گوگل میت هستید و حالا میخواید بخش کلندر رو تازه اضافه کنید. و وقتی که کسی براش جلسه ست شده یا لغو شد یا هر اتفاقی تغییری توی استیت شون افتاد ایمیل بفرستید برای کاربرها و میخواید ایمیل رو به صورت async بفرستید. چندتا از سرویس‌ها تو رو باید ریفکتور کنید؟ وقتی که ارسال ایمیل اضافه شد باید همه سرویس هایی که از مدل های داخلی استفاده میکنند باید ریفکتور بشن.

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

اول یه نگاهی به خود دیزاین پترن ها بندازیم:‌

اول Mediator

دیزاین پترن میدیتور

خلاصه این دیزاین پترن اینه که هرجا دیدید لایبرری‌ها تون نیاز دارن درباره همدیگه بدونن و تعداد بخش هایی که قراره از هم بدونن زیاده بیاید یه کلاس(یا لایبرری) بزارید وسطش که همه با اون کلاس کار کنن و اون کلاس در باره همه لایه های زیریش(تو تصویر بالا قسمت سمت راست) بدونه و بدونه کدوم ورودی رو به کدوم خروجی وصل کنه. در اصل بخش سمت راست خودش ور برای مدیتور داوطلب انجام کاری که بخش چپ درخواست میکنه، میکنه جالبی مدیتور اینه که میتونه اصلا بخشی از کد شما نباشه مثلا مسیج بروکر هایی مثل RabbitMQ یا مثلا Redis.

دیزاین پترن command

بهترین توصیف کامند

خلاصه این یکی دیزاین پترن اینه که هروقت تسکی داشتید که میخواست استیت رو عوض کنه و نیاز بود از جاهای مختلفی اینکار انجام بشه (مثل دکمه سیو که هم ctrl+s هست هم تو منو فایل هم توی آیکون سیو) بیاید و اون تست رو بدید به کلاس جدا گونه برای انجامش و از هرجا لازم شد فقط متد execute روی اون کلاس رو کال کنید تو مدل گوگل میت که بالاتر گفتم میشه sessionManger.AddNewSession(sessionInfo) دیگه کار فرستادن ایمیل و اضافه کردن دیتا بیس و اینا همه با سشن منیجره.

خب حالا چطور اینا کمک میکنن که ما کدمون راحت تر منیج بشه؟

با استفاده از ترکیب مدیتور و کامند میشه اجرای بخش ثبت اتفاقات و ایمیل فرستادن رو کاملا از سرویس ها مخفی کرد و فقط متدهایی رو که تسک های ساختن جلسات و ارسال ایمیل رو هم زمان برای مدیتور register کرد و سرویس ها فقط توی خودشون به مدیتور بگن میخوام کامند ثبت جلسه اجرا بشه، همین

چیزی مثل ساختار مدل زیر که اشتباهاتی توی درست کردنش داشتم ولی بخش قرمز در اصل اون مدیتور ماست و بخش های قرمز واسط های اجرای لاجیک اصلی یا بیزینس لاجیکمون هستن

اگه اشتباه نگارشی داشت معذرت میخوام و خوشحال میشم بم تو کامنتا بگید

اگه اشتباه فنی هم داشت بازم خوشحال میشم بگید و کمک کنید بیشتر یاد بگیرم.

ممنون

نوشته ما،‌ الگوهای معماری، الگوریتم‌ها-بخش۱ ports & adaptors اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

کار با پایتون – بخش دوم

Concatenate Strings (بهم پیوسته)

ما می توانیم رشته ها را با استفاده از نمادهای اضافی به هم متصل یا ترکیب کنیم ، و نتیجه یک رشته جدید است که ترکیبی از هر دو است:

“Name = “Michael Jackson

“Statement = Name + “is the best
Statement

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

3 * “Michael Jackson”

می توانید یک رشته جدید را با تنظیم متغیر اصلی ایجاد کنید. در نتیجه با یک رشته جدید ، نتیجه یک رشته جدید است که از مایکل جکسون به “مایکل جکسون بهترین است” تبدیل می شود.

Name = “Michael Jackson”
Name = Name + ” is the best”
Name

Escape Sequences (توالی فرار)

Back slash () شروع توالی های فرار را نشان می دهد. دنباله های فرار رشته هایی را نشان می دهد که ورود آنها ممکن است مشکل باشد. به عنوان مثال ، Back slash “n” نشان دهنده یک خط جدید است. پس از مواجه شدن با n ، خروجی توسط یک خط جدید داده می شود:

print(” Michael Jackson n is the best” )

به طور مشابه ، t/ نشان دهنده یک tab است:

print(” Michael Jackson t is the best” )

اگر می خواهید یک بک اسلش پشت رشته خود قرار دهید ، از یک بک اسلش دوتایی استفاده کنید:

print(” Michael Jackson \ is the best” )

ما همچنین می توانیم یک “r” را قبل از رشته قرار دهیم تا بک اسلش را نمایش دهیم:

print(r” Michael Jackson is the best” )

String Operations

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

Upper:

بیایید با روش upper شروع کنیم. این متد حروف کوچک را به حروف بزرگ تبدیل می کند:

A = “Thriller is the sixth studio album”
print(“before upper:”, A)
B = A.upper()
print(“After upper:”, B)

Replace:

جایگزینی ، قسمتی از رشته را جایگزین می کند ، یعنی یک رشته فرعی با یک رشته جدید. ما قسمتی از رشته را که می خواهیم تغییر دهیم وارد می کنیم. بحث دوم این است که ما می خواهیم بخش را با چه چیزی عوض کنیم ، و در نتیجه یک رشته جدید با تغییر بخش تغییر می کند:

A = “Michael Jackson is the best”
B = A.replace(‘Michael’, ‘Janet’)
B

Find:

متد find یک زیر رشته پیدا می کند. آرگیومنت زیر رشته ای است که می خواهید پیدا کنید ، و خروجی اولین شاخص دنباله است. ما می توانیم jack یا el زیر رشته را پیدا کنیم.

ادامه در :

پایتون – بخش دوم

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

گردآوری توسط ایده طلایی