TG Telegram Group Link
Channel: Learning With M
Back to Bottom
قانون هایروم (Hyrum’s Law)-بخش دوم

به عبارت دیگر، در صورتی که رابط (interface) به تعداد کافی استفاده‌کننده داشته باشد، مجموع استفاده‌کنندگان خواسته یا ناخواسته به بخش‌های مختلف پیاده‌سازی وابسته خواهند شد. نتیجه‌ی چنین اتفاقی، سخت‌تر شدن اعمال تغییرات در پیاده‌سازی رابط‌ها است زیرا از این نقطه به بعد، پیاده‌سازی نه تنها باید با بخش مستندشده و شفاف رابط‌ها (explicitly documented interface) تطبیق داشته باشد بلکه باید با بخش پنهان و غیرشفاف رابط‌ها (implicit interface) که ناشی از روش استفاده‌‌ از آنهاست نیز هم‌خوانی داشته باشد. ما معمولن این پدیده را «سازگاری با خطا برای خطا« (bug-for-bug compatibility) می‌نامیم [«سازگاری با خطا برای خطا» یا «سازگاری با خطا» تکنیکی است که در آن خطاها یا رفتارهای نادرست نسخه‌‌ی قبلی یک نرم‌افزار در نسخه‌ی جدید آن با آگاهی و خودخواسته باقی گذاشته می‌شوند. مترجم]

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

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

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

هویرام کیست؟

هویرام رایت (Hyrum Wright) دانشمند ارشد (Principal Scientist) ادوبی (Adobe) است و قبل از آن، مهندس نرم‌افزار در گوگل بود. او روی ابزارها و زیرساخت مدیریت تغییر کد در مقیاس بزرگ کار می‌کند و سال‌های زیادی را صرف بهبود کتابخانه‌های زیربنایی و مبتنی بر سی‌پلاس‌پلاس گوگل کرده است. او یکی از نویسندگان کتاب Software Engineering at Google نیز است.

منبع:
www.hyrumslaw.com

گزیده:
پسری از پدر برنامه‌نویس‌اش پرسید «بابا، واسه چی خورشید از شرق طلوع می‌کنه و در غرب غروب؟»
پدرش پاسخ داد:
پسرم داره کار می‌کنه کاری به کارش نداشته باش! 😀

A son asked his father (a #programmer) why the sun rises in the east, and sets in the west. His response? It works, don’t touch!

https://hottg.com/bibalan_com
https://bibalan.com/?p=4652
This media is not supported in your browser
VIEW IN TELEGRAM
#فان : استاد تمام فصول، م مدحج !

#هیراچی

#جدی : هرکی بتونه به صورت اصولی هیراچی رو توضیح بده یه جایزه پیش من داره.
#پاراگراف_سال_2024

Our souls sometimes feel like a dark night sky, searching, drifting. At times, we all feel lost and disconnected, not because of anything we've done, but simply because we're alive and we're human. It's a natural part of the journey on this planet because we are all human.

But what if these moments of uncertainty, these moments of confusion, are actually opportunities? What if there are moments that help guide us to bigger, brighter, better futures? Some barriers are insurmountable, but there's so many barriers that just exist within us that are barriers that we've created. And just as we build the barriers with work and with patience, we can also break them down. Inside each one of us, there's the potential for a journey that's as beautiful as the world around us. It takes work, but ultimately it's up to us to embrace it. The road ahead can go in lots of different directions, but the first step is leaving the cave. Once you leave the cave of self-doubt and confusion, the outside world is waiting with all of its beauty.

برگرفته از دکلمه ابتدایی :

Armin van buuren & Moby- the road ahead

https://youtu.be/93ELyI4gfTc?si=0wmORIVXjnWrmHi6
رضا پدرمون بود، محمدرضا دانش پور.

مادرم همیشه پدر رو رضا صدا می زد. پدرم عاشق یادگیری بود، سال های آخر عمرش به خاطر مشکلات بینایی که داشت، برای یادگیری از پادکست استفاده می کرد. اون الهام بخش ما بود برای یادگیری و رشد.
#بورسیه_رضا، بورسیه ای هست که ما هر سال در روز سالگرد پدرم (19 دی ماه) ثبت نامش رو شروع خواهیم کرد. توی این بورسیه، ما 1 سال کامل دو نفر رو برای تبدیل شدن به یک مهندس نرم افزار خبره که بتونه یک خانواده رو پشتیانی کنه آموزش می دیم. هرچه که در این مسیر یادگرفته ایم رو بدون منت در اختیار 2 نفر منتخب قرار خواهیم داد.

تمرکز #بورسیه_رضا بر روی نوجوان های مستعدی هست که دسترسی آنها به آموزش و رشد به دلایلی مثل : هزینه، سخت افزار، دوری از مراکز آموزشی، نبود امکانات و ... غیر ممکن است، طراحی شده است.

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



برای ثبت نام این دوره می تونید از این بخش اقدام کنید :

https://B2n.ir/rezbrs1403
برای اطلاعات بیشتر و پرسش های بیشتر هم می تونید این بخش رو ببینید :
https://B2n.ir/rezbrs
Please open Telegram to view this post
VIEW IN TELEGRAM
امروز می‌خوام در مورد Exchange ها در RabbitMQ براتون بگم. Exchange ها مثل پستچی‌های پیام‌رسان عمل می‌کنن و تصمیم می‌گیرن پیام‌ها رو چطوری به صف‌ها (Queue) برسونن. بیاید ببینیم هر کدوم چیکار می‌کنن:

Direct Exchange 🎯
کارش چیه؟
پیام‌ها رو فقط به صف‌هایی می‌فرسته که کلید مسیریابی (Routing Key) دقیقاً همون چیزی باشه که تعیین کردیم.

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

مثال:
Routing Key: order.created ➡️ Queue: order_queue

Fanout Exchange 📢
کارش چیه؟
پیام‌ها رو به همه صف‌های متصل شده می‌فرسته، بدون توجه به کلید مسیریابی.

کی استفاده کنیم؟
وقتی می‌خوایم یک پیام رو به چندین صف ارسال کنیم. مثلاً ارسال اطلاع‌رسانی به همه گروه های کاربران.

مثال:
پیام: "تخفیف ویژه!" ➡️ Queue: user_group1_queue, user_group2_queue, user_group3_queue

Topic Exchange 🌐
کارش چیه؟
پیام‌ها رو بر اساس الگوهای کلید مسیریابی ارسال می‌کنه. مثلاً می‌تونیم از wildcard (* و #) استفاده کنیم.

کی استفاده کنیم؟
وقتی می‌خوایم پیام‌ها رو بر اساس موضوع‌های مختلف دسته‌بندی کنیم. مثلاً خطاهای سیستم (error.*) یا لاگ‌های عمومی (log.#).

مثال:
Routing Key: error.database ➡️ Queue: error_queue
This media is not supported in your browser
VIEW IN TELEGRAM
بابا داشتن، یه شانسه.
امید وارم پدرهاتون سایشون بالاسرتون باشه.

دم بچه های علی بابا برای این ویدیو گرم.
برای 678 میخواستم عکس بگیرم، ولی یهو توی یک شب ترکید، الان از 789 براتون عکس گرفتم :)

خب به همین مناسبت و یه دلیل بی خودی برای شادیمون، تا آخر هفته اپیزود جدید پادکست رو منتشر می کنم که در مورد نحوه کار و جزئیات REDIS هست :)
Please open Telegram to view this post
VIEW IN TELEGRAM
Learning With M
استفاده از SWOT به راحتی به خطا میره. حالا در موردشون صحبت می کنم
سلام سلام
برای یک تحقیقات به نظر شما احتیاج دارم، ممنون میشم در این نظرسنجی شرکت کنید و همچنین تا جای ممکن با دوستانتون به اشتراک بزارید.
#چالش ۱۰۰۰ شرکت کننده! سوال: اگر ۱۰ واحد ارزش برای ماندگاری یا انتخاب یک شرکت داشته باشید، کدام یک انتخاب شماست؟
Anonymous Poll
22%
۷ واحد مالی، ۳ واحد آموزش و رشد.
38%
۶ واحد مالی، ۳ واحد آموزش و رشد، ۱ واحد برند کارفرمایی.
15%
۵ واحد مالی، ۵ واحد آموزش و رشد.
18%
۳ واحد مالی، ۵ واحد آموزش و رشد، ۲ واحد برند کارفرمایی.
5%
۱۰ واحد مالی.
2%
۱۰ واحد آموزش و رشد.
1%
۱۰ واحد برند کارفرمایی.
Forwarded from .NET Internals
درمورد DependencyInjection یکی از نکاتی که کمتر میبینم بهش توجه میشه اینه اگر شما یه شئ رو در زمان ریجستر کردن ایجاد کنید دیگه DI کنترلی روی ایجاد و حذفش نداره و این مسئولیت برنامه نویس هست که منابعی رو که توی اون کلاس استفاده میشه رو آزاد کنه.

نکته بد ماجرا اینجا شروع میشه که اگر از این روش برای AddScope استفاده بشه به ازای هر درخواست یه شئ ایجاد میشه و منابع آزاد نمیشه و بقیه ماجرا که خودتون بهتر میدونید!

بهترین روش اینه که بذارید خود DI کارشو انجام بده و درمورد خاص که راهی وجود نداره حتما اینترفیس IDisposable رو پیاده کنید.

شما ازین روش استفاده میکنید؟
Learning With M pinned «سلام سلام
برای یک تحقیقات به نظر شما احتیاج دارم، ممنون میشم در این نظرسنجی شرکت کنید و همچنین تا جای ممکن با دوستانتون به اشتراک بزارید.
#چالش ۱۰۰۰ شرکت کننده! سوال: اگر ۱۰ واحد ارزش برای ماندگاری یا انتخاب یک شرکت داشته باشید، کدام یک انتخاب شماست؟
»
حسن از خوبای مهندسی نرم افزاره.
Forwarded from Code With HSN
Media is too big
VIEW IN TELEGRAM
کلید موفقیت اُکالا در Distributed Transaction ها SAGA Orchestration است
👈🏻 چطور همچین پترنی رو توی دنیای میکروسرویس‌ها طراحی کنیم، اونم تو مقیاس بزرگی مثل اکالا؟ جواب این ویدیو است 🌟

💡 حالا مشکل کجاست؟
وقتی توی دنیای مونولیت هستیم، خیلی راحت با یک SQL Transaction همه‌چیز رو کنترل می‌کنیم.
اما توی دنیای میکروسرویس‌ها چی؟ 😟
پای چندین دیتابیس وسطه (از انواع مختلف).
دیگه خبری از اون روش‌های ساده نیست.
اینجاست که باید بریم سراغ Two-Phase Commit یا SAGA Pattern.

🎯 این ویدیو چی بهت یاد میده؟
1️⃣ عملیات Commit و Rollback با پروتکل Two-phase commit
2️⃣ عملیات Commit و Rollback با SAGA Choreography پترن
3️⃣ عملیات Commit و Rollback با SAGA Orchestration پترن

🎥 لینک‌ها:
📌 ویدیو: تماشا کنید
📌 پلی‌لیست دیزاین پترن‌ها: مشاهده کنید
📌 لینکدین من: بازکردن
مدت زمان ویدیو: 38 دقیقه

☕️ اگه ویدیو رو دوست داشتید میتونید از این لینک منو مهمون یک قهوه کنید ❤️

💬 نظرات و سوالاتتون رو هم تو کامنت‌ها بگید، خوشحال میشم کمک کنم!
چند دقیقه ای طلایی از استاد سپندارند عزیز.
Forwarded from tech-afternoon (Amin Mesbahi)
💡 واقعا نیازه تا به Rust جدی فکر کنیم؟

چند وقته توی کامیونیتی توصیفات عجیب و غریبی توسط جَواگِره عزیز (جمع مکسر جوگیر) راجع به Rust می‌بینیم. گویی که «امروزه، عصر Rustنویسی است و مابقی کدها شایسته‌ی لعنت کائنات» (همینو در مورد چیزهای دیگه هم می‌بینیم، ولی باشه برای پست‌های بعدی 😁)

خیلی مهمه که بدونیم «چرا» لینوکس، ویندوز، اندروید و کلی پروژه مهم دیگه در حال بازنویسی برخی کدهای موجود و توسعه برخی کدهای جدیدشون با Rust هستن؟
مثلا توی کرنل ویندوز یک سال و نیمه که راست به صورت رسمی وجود داره (System32\win32kbase_rs.sys) یا لینوکس کرنل ۶.۱۳ که این هفته ریلیز شد علاوه بازهم بخش‌های جدیدتری رو با راست بازنویسی کرده (البته خیلی وقته برخی درایورهاش رو با راست نوشتن) و...

با اینکه فریم‌ورک وب و دسکتاپ و... برای راست می‌بینیم، حتی جایگزین برای الکترون و.. هم داره، باید قبل از افتادن توی حباب، ببینیم «چه مسئله» ای رو قراره برامون حل کنه!

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

https://microsoft.github.io/rust-for-dotnet-devs/latest/
Please open Telegram to view this post
VIEW IN TELEGRAM
Audio
از کانال محمد عزیز (@icodenext):

🌀 ساکنان جزیره فرم رو درک کرده بودند، اما محتوی رو نه.

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

01:20 World War II
02:30 Melanesia
03:25 Cargo Cult
07:35 Cargo Cult Programming
09:00 Calendar Coder Anti-Pattern

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

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

https://castbox.fm/episode/Cargo-Cult-Programming-id5362393-id773612501

https://hottg.com/icodenext
HTML Embed Code:
2025/07/01 01:58:52
Back to Top