Md Daily – Telegram
Md Daily
725 subscribers
239 photos
15 videos
21 files
283 links
راجب مقالات و مستندات فنی یا غیر فنی که میخونم و علایقم اینجا مینویسم :)


گروه کانال: https://news.1rj.ru/str/MdDailyGap

کورس ها: https://news.1rj.ru/str/MdDaily/395

وبلاگ: https://mddaily.ir
Download Telegram
سلام سلام :)

شب یلدای همگیتون مبارک باشه رفقا ❤️

پ ن:
الانکه شبا بلند تر شده ، بتکد ها میتونن بیشتر کد بزنن

🆔 @MdDaily
❤‍🔥121
#دل_نوشته

وقتی رو پروژه monolithic کار میکنی احتمالا میدونی الان کجایی و داری برا حرکت های بعدی برنامه ریزی میکنی. ولی وقتی میری رو microservice علاوه بر اینکه نمیدونی الان تو کدوم code editor و ide ای هستی و باید به کدوم پنجره سوئیچ کنی، نمیدونی کجا رو هم باید به کجا وصل کنی.

🆔 @MdDaily
👍5😁4👌2😨1
Md Daily
#دل_نوشته وقتی رو پروژه monolithic کار میکنی احتمالا میدونی الان کجایی و داری برا حرکت های بعدی برنامه ریزی میکنی. ولی وقتی میری رو microservice علاوه بر اینکه نمیدونی الان تو کدوم code editor و ide ای هستی و باید به کدوم پنجره سوئیچ کنی، نمیدونی کجا رو…
حالا که بحث میکرو سرویس باز شد، قبلا یه پست با موضوع سوال مصاحبه System Design: طراحی کوتاه کننده URL نوشته بودم.
بیایم همینو از تئوری خارجش کنیم و با استفاده از go و معماری clean در قالب میکرو سرویس با هدف آشنایی با مفاهیم پیاده سازیش کنیم :)

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

🆔 @MdDaily
👍52😢1
دوازدهمین رویداد ابر ها با موضوع Effortless Infrastructure جمعه ی همین هفته در تهران به همراه قهوه، صبحانه، ارائه و گفتگوی کاری در کنار متخصصین برگزار میشه.

اگه هم با کد تخفیف A12S1 ثبت نام کنید، شامل تخفیف میشه.

لینک ثبت‌نام:
abrh.ir/enjoy

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




🆔 @MdDaily
👍2
Md Daily
حالا که بحث میکرو سرویس باز شد، قبلا یه پست با موضوع سوال مصاحبه System Design: طراحی کوتاه کننده URL نوشته بودم. بیایم همینو از تئوری خارجش کنیم و با استفاده از go و معماری clean در قالب میکرو سرویس با هدف آشنایی با مفاهیم پیاده سازیش کنیم :) برای سیستم…
خلاصه بخوام بگم، تو این مجموعه، یه سیستم کوتاه کننده لینک (همون URL) رو با استفاده از معماری میکروسرویس‌ها، gRPC و Go می‌سازیم و در عین حال چیزای مهمی مثل API Gateways و کش کردن رو هم بررسی می‌کنیم.

معماری میکروسرویس چیه؟

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

خوبی‌های میکروسرویس‌ها:

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

کی از میکروسرویس استفاده نکنیم:

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

چرا از API Gateways استفاده می کنیم؟

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

کارهای اصلی یه درگاه API:

* مسیریابی: درخواست‌ها رو به میکروسرویس درست می‌فرسته.
* احراز هویت و مجوز: چک می‌کنه ببینه کیه و اجازه چی داره.
* تبدیل درخواست: درخواست‌ها و جواب‌ها رو به فرمت‌های مختلف تبدیل می‌کنه.
* محدود کردن تعداد درخواست‌ها: جلوی زیاد اومدن درخواست‌ها و خراب شدن سرویس‌ها رو می‌گیره.

درگاه API در مقابل reverse proxy

این دوتا شبیه همن، ولی فرق دارن:

* هدف: درگاه API برای مدیریت API و هماهنگ کردن میکروسرویس‌هاست، ولی reverse proxy فقط درخواست‌های HTTP رو به سرورهای بکند می‌فرسته.
* احراز هویت: درگاه‌های API هویت کاربر رو چک می‌کنن، ولی reverse proxy معمولاً این کار رو نمی‌کنه.
* تبدیل درخواست: درگاه‌های API می‌تونن درخواست‌ها رو تغییر بدن و جواب‌ها رو جمع کنن، ولی reverse proxy معمولاً درخواست‌ها رو بدون تغییر می‌فرسته.
* ویژگی‌های مخصوص API: درگاه‌های API قابلیت‌هایی مثل محدود کردن تعداد درخواست‌ها، کش کردن، و نظارت رو دارن، اما reverse proxy ندارد.


خلاصه که درگاه API خیلی کامل‌تر و مناسب میکروسرویس‌هاست، ولی reverse proxy فقط روی فرستادن درخواست‌ها و تقسیم بار تمرکز داره.

چرا gRPC برای میکروسرویس‌ها؟

مفهوم gRPC یک چارچوب RPC با کارایی بالا است که برای سیستم‌های توزیع‌شده مدرن طراحی شده و مزایای قابل توجهی نسبت به APIهای HTTP سنتی ارائه میده. به جای فرمت‌های مبتنی بر متن مانند JSON، این چارچوپ از پروتکل بافرها (Protobuf) برای سریال‌سازی فشرده و کارآمد استفاده میکنه (داده ها را به صورت باینری ارسال و دریافت میکنه) که باعث کاهش پهنای باند و سربار پردازش میشه. gRPC که بر پایه HTTP/2 ساخته شده، از ویژگی‌هایی مثل چندگانه سازی (multiplexing)، (streaming) و ارتباط با تأخیر کم پشتیبانی میکنه.

برخلاف APIهای REST HTTP استاندارد، gRPC از تایپ ها پشتیبانی میکنه، تولید خودکار کد برای کلاینت‌ها و سرورها به زبان‌های مختلف و امنیت داخلی با TLS رو هم فراهم می‌کنه. این امر gRPC را سریع‌تر، کارآمدتر و مقیاس‌پذیرتر می‌کنه، به ویژه برای میکروسرویس‌ها و سیستم‌هایی که به ارتباط بین سرویسی کارآمد نیاز دارن.

ساده و خلاصش شده اینکه شما یه فایل به نام .proto ایجاد میکنید و توش تعریف میکنید چه داده هایی قرار ارسال یا دریافت بشه و نوع هرکدوم از داده ها چی هستند بعدش با استفاده از کامپایلر (Protocol Buffer) میاد بسته به زبانی که دارید باهاش برنامه نویسی میکنید فایل های مورد نیاز رو تولید میکنه . یک بخشی از سرویس به عنوان کلاینت و یه بخشی از سرویس به عنوان سرور عمل میکنه. که توی این مثال api getway ما نقش client داره و کوتاه کننده ی لینک نقش server رو بازی میکنه. چطوری؟ جلوتور با مثال بهش می رسیم

جمع بندی:
ما به یه api getway نیاز داریم که کاربر بتونه با استفاده از http بهش متصل بشه و endpoint داشته باشه و درخواست ها را با استفاده از پروتکل grpc به سرویس کوتاه کننده ی لینک برسونه و جواب برگشتی رو به کاربر نشون بده.


🆔 @MdDaily
👍6👌1🆒1
Md Daily
خلاصه بخوام بگم، تو این مجموعه، یه سیستم کوتاه کننده لینک (همون URL) رو با استفاده از معماری میکروسرویس‌ها، gRPC و Go می‌سازیم و در عین حال چیزای مهمی مثل API Gateways و کش کردن رو هم بررسی می‌کنیم. معماری میکروسرویس چیه؟ میکروسرویس یه جور روش طراحی نرم‌افزاره…
داشتم فکر میکردم برای این اموزشش رو به صورت ویدیویی توی چنتا قسمت بگیرم.

نظرتون چیه؟

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

پ ن :
اگه با ویدیویی موافق هستید پستو لایک کنید
👍281👏1
Md Daily
داشتم فکر میکردم برای این اموزشش رو به صورت ویدیویی توی چنتا قسمت بگیرم. نظرتون چیه؟ با ویدیویی راحت تر هستید یا همین شکل به صورت متنی جلو بریم. پ ن : اگه با ویدیویی موافق هستید پستو لایک کنید
بالاخره بعد از کلی رکورد draft تونستم به یه نسخه ی اوکی برسم، این اولین ویدیوی کانال هست.

دامنه ی mddaily.ir هم گرفته شده و به زودی وبلاگ جدید کانال هم برای آموزش هایی که توی تلگرام انتشارشون سخته رو نمایی میشه :)
9🔥3👏2❤‍🔥1
Media is too big
VIEW IN TELEGRAM
قسمت اول آموزشی از ساخت url shorten با میکرو سرویس

توی این قسمت سعی کردم مفاهیم رو از پایه توضیح بدم و یکم زمان آموزش زیاد شد :)

بیشتر از همه تجربه ی جالبی بود برای خودم ضبط این قسمت، چون اولین تجربم از ساخت محتوای آموزش ویدیویی بود و چیزای جالبی از کار با kdenlive و نحوه ی ساخت محتوا یاد گرفتم 🙂‍↕️

ببخشید اگه کموکاستی هایی هست، هر قسمت بهتر میشیم :)

🆔 @MdDaily
❤‍🔥12👍2🔥2🎉2👌1
This media is not supported in your browser
VIEW IN TELEGRAM
چرا نباید به بنچمارک ها اعتماد کنیم؟

چند وقته میبینم اول لینکدین و بعد توئیتر و تلگرام این سبک ویدیو ها از مقایسه ی سرعت زبان ها درحال نشر هستند. ولی نباید. معیارتون رو برای انتخاب زبان مناسب و حتی مقایسشون این سبک ویدیو ها بذارید. طرفدارای یه زبان میگن: "زبان X از زبان Y سریع‌تره!" آره بابا، یه سری تست و بنچمارک نشون میده که یه ذره سرعت اجرا یا مصرف حافظه تو زبونا فرق می‌کنه. ولی بیخیال، واسه 99 درصد برنامه‌ها این فرق‌ها مثه اینه که موقع کدنویسی جوراب قرمز بپوشی یا آبی! مهم معماری، الگوریتم و استراتژی بهینه‌سازیه که کارو راه میندازه. یه سیستم بد طراحی‌شده، چه با Rust نوشته بشه چه با Ruby، آخرش بد و ناکار آمد هستش. نکته ی دیگه که راجب این سبک مقایسه وجود داره اینکه دقیقا معلوم،نیست تحت چه شرایطی و با چه سیستمی طبق چه نوع پیاده سازی ای این تست ها گرفته شده. خلاصه که تا وقتی بنچمارک توسط خودتون با شرایط یکسان گرفته نشده خیلی اعتماد نکنید و معیارتون برای انتخاب و مقایسه زبان ها اینها نباشه :)

🆔 @MdDaily
👍16👌51
گیت (Git) یه شمشیر دولبس

یه روز توی یکی از پروژه‌هامون داشتم کار می‌کردم. سیستم CI/CD ما طوری طراحی شده بود که دو برنچ اصلی داشتیم:

develop: برای آپدیت‌های روی سرور دولوپ

main: برای آپدیت‌های روی پروداکشن


تا اینجا همه چیز طبیعی پیش می‌رفت. من روی سه پروژه مختلف با دوتا برنچ جداگانه مشغول بودم. برای اینکه کدهای هر پروژه با کدهای برنچ develop تداخل نداشته باشه، قبل از مرج کردن، با دستور زیر کدها رو به‌روزرسانی می‌کردم:

git merge develop

فکر می‌کردم که این دستور همه چیز رو درست می‌کنه، ولی بعد از چند روز که تغییرات رو اعمال کرده بودم و تسک‌ها تموم شده بودن، وقت مرج نهایی فرا رسید. و اینجا بود که مشکل شروع شد: کلی conflict وجود داشت.

چرا؟

از آنجایی که به جای مرج کردن با برنچ origin/develop (برنچ به‌روز موجود در مخزن GitHub) از برنچ local قدیمی استفاده کردم، کدها با یکدیگر تداخل پیدا کردند. دستور درست باید این بود:

git merge origin/develop

من به خاطر عادت استفاده از دکمه‌ی ↑ برای زدن آخرین دستور تایپ شده، به جای تایپ دوبارش🥲 به این تفاوت توجه نکردم.

راه‌حل چی بود؟

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

حتماً قبل از اجرای هر کامندی، از نحوه عملکرد اون مطمئن بشید. وقتی دقیقاً نمی‌دونید چه اتفاقی می‌افته، بهتره از اجرای اون خودداری کنید.

خب برای یادگیری git به صورت visual منابع باحالی وجود داره که پیشنهاد میکنم یه سری بهشون بزنید :

https://learngitbranching.js.org/

https://onlywei.github.io/explain-git-with-d3/

https://ohmygit.org/



---

مثل همیشه کنجکاو بمونید :)

🆔 @MdDaily
👍11❤‍🔥4🔥1😢1
چند وقتی بود داشتم Cursor و Windsurf و Github Copilot رو توی پروژه های پروداکشن تست میکردم ببینم کدومشون واقعا باعث افزایش بهره وری میشه و درصد خطای کمتری داره که دیدم ۱۵ ساعت پیش گیت هاب کوپایلت یه آپدیت داده و میخواستم راجب ویژکی های خوبی که اینا دارن ولی Copilot نداره بگم که کلا زمین بازی عوض شد :)

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

جزو اولین AI Code Editor هایی که منتشر شد cursor بود که با شعار افزایش بهره وری اومد و زمانی که کوپایلت هنوز نسخه ی رایگان ارائه نکرده بود، پلن رایگان داشت. از نظر قیمتی اشتراک Pro این ادیتور ماهیانه ۲۰ دلار هست.

یکی از اکستنشن های محبوب AI برای برنامه نویسی codeium بود که یکی از رقبای کوپایلت حساب میشه و به تازگی ادیتور جدید خودش رو به نام Windsurf با شعار اولین agentic IDE منتشر کرده که ویژگی منحصر بفردش این بود که وقتی بهش task رو میدادی براش مرحله تعریف میکرد مثلا توی تست های من وقتی بهش گفتم به این پروژه ی بکند Go ای که دارم یه endpoint جدید اضافه کن که ویژگی خروجی اکسل رو اضافه کنه، اول رفت چک کرد ببین پکیج مورد نظر رو نصب دارم یا نه بعد پکیج رو نصب کرد بعد که مطمئن شد پکیج نصبه رفت شروع کرد فایل های پروژه رو خوندن و جاهایی که نیاز به تغییر داشتن رو تغییر داد و مرحله به مرحله برا خودش task تعریف میکرد و میرفت جلو. از مدل های مختلفی هم پشتیبانی میکنه و با پرداخت ۱۵ دلار در ماه بهتون دسترسی به مدل های GPT-4o, Claude Sonnet , DeepSeek-R1, o3-mini رو میده.


اما! همه ی این ها تا قبل از اپدیت جدید کوپایلت بود. توی آپدیت جدید گیت هاب کوپایلت اومده حالت Agent ای که توی Windsurf رو اضافه کرده.
الان مثل cursor و Windsurf از ورودی تصویر هم پشتیبانی میکنه .

یه حالتی توی cursor و Windsurf وجود داشت به نام Next Edit Suggestions این چیکار میکرد؟
مثلا شما یه متغیر یا استراکچریو تعریف نکرده بودی میومدی ازش استفاده میکردی که بعدا تعریفش کنی اینا میفهمیدن و بهت میگفتن اگه میخوای بیا برات تعریفشون کنیم یا مثلا از فلان چیز استفاده کردی ولی import اش نکردی بیا قبل از اینکه تو بخوای انجامش بدی خودم برات import کنم . الان این ویژگی توی آپدیت جدید کوپایلت هم اضافه شده.


و در نهایت ویژگی Prompt Files اضافه شده که شما میتونید یه فایل با فرمت Markdown بنویسید و توش دقیقا به کوپایلت بگید چیکار کنه تا بتونید بهترین نتیجه رو بگیرید.

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

ویدیوی آپدیت کوپایلت :
https://youtu.be/C95drFKy4ss?si=fddJFLYfJ2oM7sed


طرف کامنت گذاشته بود الان همه ی برنامه نویس ها تبدیل به code reviewer شدن 😂

---

مثل همیشه کنجکاو بمونید :)

🆔 @MdDaily
😁6👍3
Md Daily
GIF
+ دواپسمون همش داره ماینکرفت بازی میکنه

- اونایی که میدونن: 💀


داکر یه پروژه ی باحال داره به نام Dockercraft که میتونید مستقیم توی ماینکرفت کانتینر های داکرتون رو مدیریت کنید :)

اما چطوری کار میکنه؟

اومدن از Cuberite، یک سرور ماینکرفت متن‌باز و نوشته‌شده با C++، برای پیاده‌سازی Dockercraft استفاده کردن. این سرور از پلاگین‌های Lua پشتیبانی میکنه، بنابراین یک پلاگین اختصاصی برای تعامل با Docker توسعه دادن.

🔹 اجرای عملیات در سمت سرور

کلاینت ماینکرفت بدون تغییر باقی میمونه و تمام پردازش‌ها سمت سرور انجام میشه. پلاگین Lua که در مسیر world/Plugins/Docker قرار داره، یک تب مدیریتی در WebAdmin سرور ایجاد میکنه:

Plugin:AddWebTab("Docker", HandleRequest_Docker)

این باعث میشه درخواست‌های POST به مسیر http://127.0.0.1:8080/webadmin/Docker/Docker ارسال بشن.

🔹 اتصال به Docker Remote API

رویدادهای داکر از طریق سرویس Goproxy که با Golang نوشته شده پردازش شده و به پلاگین Lua منتقل میشن. این سرویس درخواست‌ها را به سرور ارسال می‌کنه:

func MCServerRequest(data url.Values, client *http.Client) {
req, _ := http.NewRequest("POST", "http://127.0.0.1:8080/webadmin/Docker/Docker", strings.NewReader(data.Encode()))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
req.SetBasicAuth("admin", "admin")
client.Do(req)
}

🔹 اجرای دستورات از طریق ماینکرفت

پلاگین Lua میتونه از طریق os.execute() با این سرویس ارتباط برقرار کنه. مثلاً موقع ورود یه بازیکن، اطلاعات کانتینرهای داکر بروزرسانی میشن:

function PlayerJoined(Player)
r = os.execute("goproxy containers")
end

این روش امکان مدیریت کانتینرهای Docker را مستقیماً از داخل ماینکرفت فراهم می‌کنه


گیت هاب پروژه:

🔗 https://github.com/docker/dockercraft

---

مثل همیشه کنجکاو بمونید :)

🆔 @MdDaily
❤‍🔥10🤣3👍2🤯2
عشق میاد و میره، اما git commit برای همیشه می‌مونه!

#ولنتاین_برنامه_نویس

🆔 @MdDaily
👍10❤‍🔥22😁2😢21👌1
دانشگاه شاهکاره

دارم با استاد بحث میکنم که BSD هم سیستم عامله و قبول نمیکنه میگه نه نرم افزار کاربردی برپایه ی لینوکسه

بعد خودش لینوکس رو چطوری نوشته؟

Linox

🆔 @MdDaily
🤣22😁1
Forwarded from Python Hints
این موضوع واقعاً گرد ناامیدی نیست، یک نیم‌نگاه به آمار اخراج‌ها یا لیست مشاغلی که دیگه نیروی جونیور نمی‌گیرند بندازید (البته بعضی‌ها زدن جونیور ولی دقت کنید لیست مهارت‌ها رو ببینید.)

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

این‌ها تسک‌های جونیور بود و سنیور نهایتاً review می‌کرد؛ الان تمام اینکارهارو یک الگوریتم هوش مصنوعی می‌کنه، سنیور در لحظه مسئله رو می‌شکنه و از AI می‌پرسه کد رو تحویل می‌گیره و کپی و تمام ...
همین مسیر رو ادامه میده و در نهایت حالات مختلف تست نویسی که به ذهنش میرسه رو هم دونه دونه از AI می‌خواد بنویسه بازم دابل چک می‌شه و تمام.

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

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

اگر شما نتونی اینکارها رو انجام بدی و نشناسی؛ خب تمام مدل‌های AI از شما بهتر کد می‌زنند و وقت کمتری هم میگیره اگر قرار باشه من هی برم سراغش و بهش بگم چیکار کنه و چطوری بزن و ...


دو گروه اینجا بهشون بر میخوره (توی آمار‌های مختلف هم همین رو نشون داده؛ به دیتاهای آمریکای شمالی نگاه کنید) :

۱- پکیج فروش‌ها: دیگه پکیجی که فقط جنگو یاد بده بدون پروژه‌ای که استاندارد باشه بی‌ارزش می‌شه و کاسبی خراب (این نیروها استخدام نمی‌شوند و کمتر کسی سراغ این آموزش‌ها میره)

۲- افرادی که شغل برنامه‌نویسی رو برای راحتی استفاده کردند؛ جدی میگم بسیار شنیدم که می‌گن بابا کار شما که چیزی نیست ۸ ساعت پشت کامپیوتر می‌شینی بعدم میری خونه ۱۲ ساعت عشق و حال و پارتی و ....

والا ما یک مهمونی هم میخوایم بریم باید ۷ روز قبل خبر داشته باشیم که بتونیم اون ۴-۵ ساعت مهمونی رو توی ۷ روز جبران کنیم تسک عقب افتاده نداشته باشیم.

چرا اینارو مجدداً اینجا می‌گم:

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

برای همین بجای اینکه بگم آقای X خانم Y بیاید برنامه‌نویسی یاد بگیرید ماهی ۲۰۰ میلیون درآمد دارید (دیدی اینو میگه بعد پکیج آموزشی ۳۰۰ هزارتومنی میذاره) میگم این مسیر سختی‌هاش زیاد شده، دیگه فقط با سینتکس یاد گرفتن نمی‌تونید شغل پیدا کنید، کسی که الان شروع می‌کنه از صفر حداقل ۲ سال وقت می‌ذاره. اگر قرار نیست جدی بگیرید برنامه‌نویسی رو پیشنهاد می‌کنم برید دنبال کار مورد علاقتون.

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


در نهایت، این متن باید به شمایی که برنامه‌نویسی رو انتخاب کردید انگیزه بده که برنامه‌نویسی رو جدی بگیرید و از وقت اینستاگرام و پارتی و ... بزنید و روی تخصص تمرکز کنید.
اگر نه که رشته یا تخصص رو اشتباه انتخاب کردید.
🔥5👍4👏1👌1
#میم

قبل و بعد یادگیری برنامه نویسی:

🆔 @MdDaily
🤣15👍6😁2🔥1
به طور کلی System Design چیه؟

طراحی سیستم یا System Design، فرآیند برنامه‌ریزی و ایجاد ساختاری برای یک سیستم نرم‌افزاری یا سخت‌افزاریه که بتونه نیازهای مشخصی رو برآورده کنه. این فرآیند شامل تعیین معماری سیستم، اجزا، نحوه‌ی ارتباط بین اون‌ها و تکنولوژی‌های مورد استفاده است.

چرا باید System Design رو یاد بگیریم؟

1. حل مسائل پیچیده: در پروژه‌های بزرگ، طراحی سیستم کمک می‌کنه تا با تقسیم مسئله به بخش‌های کوچکتر، راه‌حل‌های مؤثرتری پیدا کنیم.

2. بهینه‌سازی منابع: طراحی مناسب سیستم باعث می‌شه از منابعی مثل زمان، هزینه و نیروی انسانی بهینه استفاده کنیم.

3. مقیاس‌پذیری: با طراحی درست، سیستم می‌تونه با افزایش کاربران یا داده‌ها به‌خوبی سازگار بشه.

4. ارتباط بهتر تیمی: طراحی شفاف سیستم، فهم مشترکی بین اعضای تیم ایجاد می‌کنه و همکاری رو بهبود می‌ده.

5. آمادگی برای مصاحبه‌های شغلی: بسیاری از شرکت‌ها در مصاحبه‌ها سوالاتی درباره‌ی طراحی سیستم می‌پرسن.

اما System Design شامل چه مؤلفه‌هایی میشه؟

1. معماری سیستم (System Architecture): ساختار کلی سیستم و نحوه‌ی تعامل اجزا با هم.

2. مقیاس‌پذیری (Scalability): توانایی سیستم در مدیریت افزایش بار کاری و تعداد کاربران.

3. توازن بار (Load Balancing): توزیع متعادل ترافیک بین سرورها برای جلوگیری از بارگذاری بیش از حد.

4. ذخیره‌سازی داده‌ها (Data Storage): انتخاب نوع پایگاه داده و طراحی ساختار داده‌ها.

5. کشینگ (Caching): ذخیره‌سازی موقت داده‌ها برای افزایش سرعت دسترسی.

6. مدیریت تراکنش‌ها (Transaction Management): اطمینان از اجرای صحیح و کامل تراکنش‌ها.

7. امنیت (Security): حفاظت از داده‌ها و سیستم در برابر تهدیدات.

8. مانیتورینگ و لاگینگ (Monitoring and Logging): نظارت بر عملکرد سیستم و ثبت رویدادها.

9. پشتیبان‌گیری و بازیابی (Backup and Recovery): تدوین راهکارهایی برای حفظ و بازیابی داده‌ها در صورت بروز مشکل.

10. تست و ارزیابی (Testing and Evaluation): انجام تست‌های مختلف برای اطمینان از عملکرد بهینه سیستم.

توی منابع یادگیری سیستم دیزاین:

برای آشنایی با مفاهیم و مقدمات ویدیوی یک ساعت Learn System Design از freecodecamp:
🔗 https://www.freecodecamp.org/news/learn-system-design-principles/

مستندات متنی و رودمپ ها :

🔗 https://www.karanpratapsingh.com/courses/system-design

🔗 https://www.geeksforgeeks.org/complete-roadmap-to-learn-system-design/

خبر نامه ها و وبلاگ ها :

🔗 https://www.quastor.org/

🔗 https://blog.quastor.org/

🔗 https://blog.bytebytego.com/
کانال های یوتیوب:

🔗 https://www.youtube.com/ByteByteGo

🔗 https://www.youtube.com/c/SystemDesignInterview

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


---

مثل همیشه کنجکاو بمونید :)

🆔 @MdDaily
👍4🔥3👏1
This media is not supported in your browser
VIEW IN TELEGRAM
با معرفی شدن Claude 3.7 Sonnet به گیت هاب کوپایلت هم اضافه شد ولی به نظر فعلا برای مشترکین pro فعال شده‌.

🆔 @MdDaily
👍1
راز موفقیت WinRAR: چطور با دوره آزمایشی بی‌پایان، پول درمیاره؟

نرم‌افزاری که بهمون یه دوره آزمایشی ۴۰ روزه میده، ولی بعدش می‌تونیم تا ابد با زدن دکمه "بستن" روی پاپ‌آپ‌ها ازش رایگان استفاده کنیم. اما نکته شگفت‌انگیز اینجاست که این شرکت با همین روش عجیبش تونسته سال گذشته ۲۱ میلیون دلار درآمد داشته باشه! حالا بیاید ببینیم چطور این کار رو کرده.

استراتژی منحصر به فرد WinRAR

این نرم افزار از یه مدل لایسنسینگ استفاده میکنه که همیشه اجازه دسترسی به آزمایشی دائمی اپ رو میده . تو این روش، بعد از ۴۰ روز دوره آزمایشی، نرم‌افزار همچنان کار می‌کنه و هیچ محدودیتی برای کاربرا نمی‌ذاره. این شرکت به کاربرا اعتماد داره که خودشون برای حمایت از نرم‌افزار لایسنس بخرن. این استراتژی باعث شده WinRAR به یه ابزار معروف تبدیل بشه و کاربراش به ۵۰۰ میلیون نفر برسن. این روش همچنین به بازاریابی ویروسی (Viral Marketing) کمک کرده؛ کاربرایی که از نرم‌افزار راضین، اونو به بقیه پیشنهاد میدن و این یعنی رشد طبیعی از طریق تبلیغات دهان به دهان (Word-of-Mouth Promotion). پس یعنی در آمد winrar از طریق کاربران رندومی که اونو میخرن تامین میشه؟

جواب کوتاه: نه

جواب بلند تر:

منبع اصلی درآمد: شرکت‌ها

در حالی که کاربرای عادی می‌تونن تا ابد از نسخه رایگان استفاده کنن، درآمد اصلی WinRAR از فروش به شرکت‌ها (B2B Sales) تأمین می‌شه. شرکت‌های بزرگ مثل آمازون یا مایکروسافت نمی‌تونن ریسک استفاده از نرم‌افزار بدون لایسنس رو بپذیرن، چون ممکنه با مشکلات قانونی یا حتی آسیب به اعتبارشون مواجه بشن. برای همین، این شرکت‌ها ترجیح میدن لایسنس بخرن. WinRAR هم با قیمت مناسب (۳۰ دلار برای هر لایسنس) و تخفیف‌های حجمی (Volume Discounts) برای خریدهای عمده، خودشو به گزینه‌ای جذاب برای کسب‌وکارها تبدیل کرده. این جریان درآمدی پایدار، بدون فشار آوردن به کاربرای عادی، WinRAR رو سرپا نگه داشته. پس در اصل در آمد winrar از طریق شرکت های رندومی که اونو میخرن تامین میشه :)

تبلیغات و ترفندهای نرم‌افزاری

حالا WinRAR تو نسخه موبایلش از تبلیغات استفاده می‌کنه و کاربرا می‌تونن با خرید لایسنس، تبلیغات رو حذف کنن. این یه مدل رایج به اسم Freemium هست، یعنی نرم‌افزار به صورت رایگان ارائه می‌شه، ولی برای حذف محدودیت‌ها یا تبلیغات، باید پول پرداخت بشه. از طرف دیگه، پاپ‌آپ‌هایی که بعد از ۴۰ روز ظاهر می‌شن و تمومی هم ندارن، آزاردهنده هستن. این ترفند باعث می‌شه بعضی کاربرا برای خلاصی از این یادآوری‌ها، تصمیم به خرید لایسنس بگیرن.

---

مثل همیشه کنجکاو بمونید :)

🆔 @MdDaily
👍9❤‍🔥6🔥1👏1