Philocode – Telegram
Copy and paste is a design error.
#DavidParnas
👍1
هیچ‌وقت به امید تغییردادن با کسی ازدواج نکنید.
ما آدم‌ها توی تغییردادن خودمون هم همیشه موفق نمی‌شیم، چه برسه به تغییردادن بقیه.
👍13😁1🤔1😱1
Philocode
Quick sort #GA
مثال دزد توی کتاب Grokking Algorithms به دو روش حل شده: توی فصل هشتم به روش حریصانه (greedy) حل شده، و توی فصل نهم با برنامه‌نویسی پویا (dynamic programming). روش اول جواب بهینه‌ای بهمون نداد و از ظرفیت کیفِ دزد به شکل خوبی استفاده نکرد، برعکس روش دوم.

روش حریصانه اینطوره که دزده نگاه می‌کنه که ببینه گرون‌ترین چیزی که می‌تونه برداره چیه، بعد از اون دوباره دنبال گرون‌ترین می‌گرده.
برای مثال ظرفیت کیف، سه کیلوگرمه و نگاهی به اجناس می‌ندازه:
- لپ‌تاپ: 3KG (بیست میلیون تومن)
- مانیتور: 1KG (پونزده میلیون تومن)
- موبایل: 300G (ده میلیون تومن)
- دسته‌بیل با امضای محمود احمدی‌نژاد: 3.5K (دویست هزار تومن)
باارزش‌ترین محصول لپ‌تاپه، و وقتی اون رو توی کیفش می‌ذاره، می‌بینه که دیگه جا برای چیز دیگه‌ای نداره!

اما این جواب بهینه نیست، چون می‌تونست مانیتور و موبایل رو برداره و به جای بیست میلیون تومن، بیست و پنج میلیون تومن دزدیده باشه! جواب بهینه رو چی بهمون می‌ده؟ آره، dynamic programming!

الآن که فکر می‌کنم، این الگوریتم به درد آدم‌های شکمو هم می‌خوره؛ اینکه وقتی می‌رن مهمونی، چی بخورن که بیشترین مواد مغذی رو به بدن رسونده باشن. حداقل از مثال دزد و کیفش بهتره! 😁
#GA
🔥2👍1
Philocode
https://matthiasnoback.nl/2022/09/is-it-a-dto-or-a-value-object
A DTO:
- Declares and enforces a schema for data: names and types.
- Offers no guarantees about correctness of values.

A value object:
- Wraps one or more values or value objects.
- Provides evidence of the correctness of these values.
Philocode
لطفاً با ⭐️ دادن به ریپازیتوری، حمایت کنید. می‌تونید برای خودتون یه ربات داشته باشید که مردم به جای پیام خصوصی، به اونجا پیام بدن و اکانت شما همچنان مخفی بمونه! https://github.com/WebPajooh/MediumBot
فیچر جدید: حالت آفلاین!
فرض کنید مشکلی براتون پیش اومده و نمی‌تونید تا چند هفته سوالات یا پیام‌های دیگران رو دریافت کنید. کافیه که یه پیام تنظیم کنید و اگه کسی به ربات پیام بده، عذرخواهی شما رو دریافت کنه و بدونه که فعلاً نمی‌تونه بهتون پیام بده.

!offline / !online

جدیداً دانشمندان متوجه شدند که ⭐️ دادن به این ریپازیتوری، فرد رو به ایدز، سیفلیس یا سرطان مبتلا نمی‌کنه؛ پس با خیال راحت از پروژه حمایت کنید!

https://github.com/WebPajooh/MediumBot/commit/ae3924f7e7c7fc879e435d12df0270d547c753c9
2👍1🔥1
از Sam Newman دربارۀ دوتا کتابی که راجع به مایکروسرویس‌ها نوشته پرسیدم، و اینکه پیشنهاد خودت شروع با کدومشونه؟
جوابی که نوشت:
I’d suggest starting with Building Microservices, 2nd Edition. Monolith To Microservices is a deep dive on how to break apart an existing system - if you’re looking for a broad coverage of topics, it leaves that to Building Microservices!
#microservices
👍31
کدی رو عجالتاً ریفکتور کردم:
https://github.com/HazNet/SalavatiRefactor/pull/1
نکاتی رو بعدش گفتم که شاید براتون مضر نباشه. 👇

یکی از مشکلات شدید کد شما، مشکل style ــه که بهتره حداقل ابزاری مثل Pint رو داشته باشید. بعضی جاها نیولاین‌های اضافی داشتید، بعضی جاها که نیولاین می‌تونست خوانایی رو بالا ببره، استفاده نکرده بودید. آرایه‌ها هم توی یه سطر نباشه مگر اینکه کوتاه باشه (آرایه‌ای با یک کلید، مثلاً).

یه مورد مهم دیگه هم استفاده از resourceها برای بالابردن consistency توی پروژه‌ست. این‌طوری اگه فردا بهتون بگن که باید ساختار پیام‌های خطا تغییر کنه، چون از exception handler و بقیۀ چیزها خوب استفاده کردید، تغییردادن ریسپانس‌ها خیلی ساده می‌شه.

یه مشکل دیگه که باز هم مربوط به انسجام و یک‌دستی کدهاتون می‌شه و احتمالاً در سراسر پروژه وجود داره، اینه که گاهی از snake_case استفاده کردید و گاهی از camelCase و این رو به وضوح می‌شه توی routeهای پروژه‌تون دید:
/register_complete
/resetPassword
توی REST، چیزی که رایجه، استفاده از kebab-case ـــه؛ برای همین خبری از underscore و اینها نیست.

همچنین ترجیح بر اینه که کنترلرهامون بزرگ نباشند، خصوصاً وقتی که خواسته باشیم REST API توسعه بدیم؛ چون در این صورت، API ما resource محوره و اینجا باید الگوی CRUD رو ترجیحاً همه‌جا پیاده کنیم و در نتیجه استفاده از یه دونه کنترلر برای هندل‌کردن کل این قصۀ کرد شبستری کافی نیست. کاری که باید بکنید اینه که یه ResetPasswordController بسازید و متدهای مربوط بهش رو همونجا قرار بدید.

این یه سری از نکاتیه که الآن به ذهنم رسید بنویسم و بقیۀ دوستان هم می‌تونند نکات مفیدشون رو رو کنند.

نکته: من چرخ خیاطی ندارم ولی کیبوردم رو به اون‌هایی اهدا می‌کنم که اینترنت رو مختل کردند. :)
👍21🔥1
Philocode
از Sam Newman دربارۀ دوتا کتابی که راجع به مایکروسرویس‌ها نوشته پرسیدم، و اینکه پیشنهاد خودت شروع با کدومشونه؟ جوابی که نوشت: I’d suggest starting with Building Microservices, 2nd Edition. Monolith To Microservices is a deep dive on how to break apart an existing…
من خیلی‌ها را دیده‌ام که واژۀ monolith را مترادف legacy می‌دانند و این یک مشکل بزرگ است! معماری monolithic یک انتخاب معتبر است و حتی پا را فراتر گذاشته و می‌گویم: به عقیدۀ من، معماری monolithic یک انتخاب و پیشفرض منطقی است.
#BuildingMicroservices
👍2