Dev Perfects
40 subscribers
9.23K photos
1.26K videos
468 files
13K links
بخوام خیلی خلاصه بگم
این کانال میاد مطالب کانالای خفن تو حوزه تکنولوژی و برنامه نویسی رو جمع میکنه

پست پین رو بخونید
https://t.iss.one/dev_perfects/455


ارتباط:
https://t.iss.one/HidenChat_Bot?start=936082426
Download Telegram
Forwarded from Md Daily (Mahan)
چطوری System Design رو یاد بگیریم قسمت ۲ از ۲

قسمت اول


خب خب بریم برای برای ادامه‌ی مسیر: از طراحی روی کاغذ تا آموزش دادن به بقیه

4️⃣ شروع کن به رسم، حتی اگه روی کاغذ باشه!

یه چیزی که خیلی کمک کنندس: رسم کردن (Drawing) هستش.

ما آرتیست نیستیم. ولی وقتی فلو کار رو از

دیتایبیس → اپ های سرور → لود بالانسر ها → کلانیت

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

وقتی رسم میکنیم:

✔️ فلو درخواست واقعی به نظر می‌رسه.

✔️ میبینیم که Bottlenecks کجاها ممکنه اتفاق بیفته.

✔️ میفهمیم که کش (Cache) رو کجا بذاریم یا کِی از صف (Queue) استفاده کنیم.

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

5️⃣ با حل کردن مسئله‌های واقعی تمرین کنید

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

این روش تمرینی میتونه کمکتون کنه:

✔️ یه سیستم واقعی انتخاب کنید: واتساپ، یوتیوب، اسنپ‌فود، اینستاگرام.

✔️ اول نیازمندی‌های عملکردی (Functional Requirements) رو بنویسید (سیستم باید چیکار کنه).

✔️ بعد نیازمندی‌های غیرعملکردی (Non-functional Requirements) رو اضافه کنید (مقیاس‌پذیری، دسترس‌پذیری، تأخیر).

✔️ یه تخمین اولیه بزنید (تعداد کاربر، QPS، حجم DB).

✔️ یه معماری سطح بالا (High-level Architecture) طراحی کنید.

🚀 حالا وقت عمیق تر شدن رسیده:

✔️ DB schema
✔️APIs
✔️ Scaling strategies
✔️ Handling failures (مدیریت خطا ها)
✔️ Edge Cases (حالت های خاص)

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

چون توی مصاحبه‌ها و کارهای واقعی، به ندرت یه جواب کامل وجود داره. مهم اینه که بتونی توجیه کنی چرا X رو به Y ترجیح دادی.

6️⃣ وقت واقعی کردن رسیده

🔴تئوری تا وقتی پیاده نشه، بی‌فایده‌ست.

بذارید از تجربه خودم بگم. تویه شرکت داشتیم رو یه سیستمی کار میکردیم که به صورت میکروسرویس پیاده شده بود با Go و برای ارتباط داخلی سرویس ها از GRPC استفاده کرده بودیم. اوایل برای سرویس آنالیتیکس از MongoDB استفاده کرده بودیم. اما با زیاد شدن حجم داده ها و کوئری ها (رکورد ها به قدری زیاد بودن که حجم دیسک دیتابیس شده بود 15 گیگ) سیستم شروع کرد به کند شدن. یه راهکار ها این بود که بیایم چنتا نود مختلف بیاریم بالا ولی پیچیدگی ایش زیاد بود، پس شروع کردیم به R&D کردن دیتابیس هایی که به نظر برای این کار مناسب بودن. بعد از تست های اولیه و گرفتن بنچمارک متوجه شدیم که clickhouse میتونه توی مورد ما این بخش از پروژه رو نجات بده. تیم بکند دور هم جمع شدیم و فقط یه ماژیک برداشتیم و ساعت ها روی شیشه سیستم دیزاین های مختلفیو رسم و بررسی کردیم و دیدمون باز شد و در نهایت طرح نهایی. حالا که همه چیز حداقل روی کاغذ اماده بود و کار میکرد باید مهاجرت رو شروع و سیستم جدید رو پیاده میکردیم. در نهایت با یه بررسی درست، بررسی سیستم دیزاین های مختلف و داشتن دید کلی و جزئی از سیستم ، به جایی رسیدیم که میلیون ها داده رو بدون مشکل آنالیز کردیم و نزدیک Real time خروجی نشون میدیم. بعد آروم آروم رفتیم جلو و چیز های دیگه هم مثل RabbitMQ اضافه کردیم. اره الان پروژه بزرگ شده ولی این پروژه ی بزرگ حاصل قدم های کوچیکی بود که برداشتیم ولی نکتش اینکه اگه میخواستیم به آخرش فکر کنیم که همچین چیز بزرگی چطوری قراره ساخته بشه هیچ وقت شروع نمیشد :)

7️⃣ شروع کنید به یاد دادن به بقیه

این آخرین مرحله هست.


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

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



درنهایت طراحی سیستم شعبده‌بازی نیست.

فقط کافیه:

✔️ از اصول اولیه شروع کنید.

✔️ به موارد استفاده‌ی دنیای واقعی فکر کنید.

✔️ یه ساختار برای خودتون بسازید.

✔️ هفته‌ای تمرین کنید.

✔️ پشت هر انتخابتون بپرسید «چرا»؟

✔️ و آروم‌آروم بهتر بشید.

حتی اگه روزی ۳۰ دقیقه هم وقت بذارید، بعد از ۳ ماه تفاوت رو می‌بینید.

حرف آخر: قضیه جواب‌ها نیست، قضیه رویکرده!


توی طراحی سیستم، اغلب احساس عدم اطمینان خواهید کرد. این طبیعیه.

چیزی که مهمه اینه که چطور به یک مسئله نزدیک می‌شید.

وقتی توضیح می‌دی مقیاس چقدره یا اگه این سرویس از کار بیفته چی می‌شه؟ اینه که شما رو به یه مهندس قوی تبدیل می‌کنه. نه تعداد دیاگرام‌هایی که حفظ کردید.

با «یک URL چطور کار می‌کنه؟» شروع کنید و به طراحی اینستاگرام ختم کنید.

تعجب خواهید کرد که قدم به قدم، چقدر پیش رفتید.

—-

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

🆔 @MdDaily
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Geek Alerts
اثر تتریس به زمانی گفته می‌شه که شما وقت، تمرکز و تلاش زیادی رو صرف انجام فعالیتی کرده باشید و این اتفاق باعث تغییر در افکار، رویاها و تجربه‌های دیگه شما بشه.

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

همچنین دیدن تصاویر رنگی از شکل‌هایی که دارن روی همدیگه فرود میان، موقع خوابیدن یکی از فرم‌های توهمات هیپاگوژنیا به‌حساب میاد. برای بعضی افراد، این کشش به کنار هم قرار دادن اشکال، شدیداً اعتیادآوره و تو طول روز ممکنه اون رو با چیزهایی مثل ساختمون‌ها تکرار کنن. [L]

🤓 abolfazl @geekalerts
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Linuxor ?
کی می‌گه مفاهیم شبکه سخته؟


@Linuxor
Forwarded from Linuxor ?
فرض کنید دو تا نورون داریم (منم نمی‌دونم نورون چیه ولی فرض کنید دو تا ممد داریم)

نورون الف (پیش‌سیناپسی) → سیگنال می‌فرسته.
نورون ب (پس‌سیناپسی) → سیگنال رو دریافت می‌کنه

حالا دو حالت پیش میاد:

حالت 1: نورون الف قبل از نورون ب فعال بشه؛ مثل اینه که نورون الف یه خبر مهم رو زودتر برسونه، بعد نورون ب هم جواب بده.
مغز فکر می‌کنه: «آها! پس سیگنال الف باعث شد ب فعال بشه. پس این ارتباط مهمه، قوی‌ترش کن!»

حالت 2: نورون ب قبل از نورون الف فعال بشه؛ اینجا یعنی نورون ب خودش قبلاً فعال شده بوده و بعدش تازه الف خبر رسونده.
مغز فکر می‌کنه: «این ارتباط خیلی به درد نمی‌خوره، چون دیر رسید.» نتیجه: اتصال (سیناپس) ضعیف‌تر می‌شه.

این قانون رو «انعطاف‌پذیری وابسته به زمان اسپایک (STDP)» می‌گن؛ سازوکاری که مغز انسان باهاش الگوهای زمانی رو یاد می‌گیره و حافظه شکل می‌گیره شبکه های SNN هم از همین الگو استفاده می‌کنن ولی هنوز رایج نشدن چون نیاز به سخت افزار خاص دارن اما بجاش همین دیپ لرنینگی که میشناسیم مثل CNN یا ANN یا Transformer خیلی رایج شده چون روی همه کامپیوترا اجرا میشه.



@Linuxor
Forwarded from Gopher Academy
📢 اگر تلگرام پرمیوم دارید، کانال ما رو Boost کنید ! 🚀

با Boost کردن کانال، به رشد و دیده شدن ما بیشتر کمک کنید💙

https://t.iss.one/boost/gopher_academy
Forwarded from Linuxor ?
یه جمله سنگین هم داریم که بهش می‌گن قانون hebbian که می‌گه :

<< نورون‌هایی که با هم آتش می‌زنند، با هم سیم‌کشی می‌شوند >>

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

@Linuxor
Media is too big
VIEW IN TELEGRAM
این قسمت :
🎬 Dwayne Johnson Gained 30lbs of Muscle for Smashing Machine Role, Pillow Fights Jimmy with Mark Kerr

تاریخ انتشار : ۱۴۰۴/۰۷/۰۹

〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️
از The Tonight Show Starring Jimmy Fallon با اجرای Jimmy Fallon
〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️
زیرنویس فارسی چسبیده
ترجمه با استفاده از سایت 👈 iSega.ro 🌎

کانال اخبار هوش مصنوعی 👈 @AiSegaro 👾
Forwarded from Linuxor ?
میدونستین در عین اینکه هوش مصنوعی یه زیر رشته از کامپیوتره خود کامپیوتر یه زیر رشته از برقه و برق هم یه زیر رشته از مکانیک، مکانیکم یه زیر رشته از فیزیکه، فیزیکم یه زیر رشته از ریاضیه :)


@Linuxor
Forwarded from Golden Code (@lix)
وقتی با Eloquent توی لاراول کار میکنیم، معمولا برای فیلتر کردن رکوردها از where استفاده میکنیم. مثلا:
User::where('email', $email)
->where('password', $password)
->first();

این روش خوبه، اما لاراول یه قابلیت بهتر و کاربردی داره به اسم Dynamic Where
یعنی میتونیم همون کد بالا رو اینطوری بنویسیم:
User::whereEmailAndPassword($email, $password)->first();

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

لاراول متود رو از روی اسمش میسازه.

وقتی میگی whereEmailAndPassword، خودش میفهمه باید روی ستون‌های email و password شرط بذاره.

بین فیلدها میتونی از And یا Or استفاده کنی.

مثال‌:
// شرط روی دو ستون
User::whereNameAndAge('Ali', 30)->first();

// شرط OR
User::whereEmailOrUsername($value, $value)->first();

📌 کجا به درد می‌خوره؟

لاگین یا احراز هویت سریع

جستجوهای ساده و کوتاه

کار با کلیدهای ترکیبی (Composite Keys)


خصلاش که:
این Dynamic Where خیلی وقت‌ها باعث میشن کد کوتاه‌تر، خواناتر و باشه.
#Laravel #Laravel_tip #لاراول

@GoldenCodeir 🔥

(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/Akr4mKhan/status/1973387425268507003?t=PqAyceJRXsgErfUOp8_wtQ&s=35
Forwarded from a pessimistic researcher (Kc)
#موقت
دوستان اگر کسی خدایی نکرده توی تلگرام فایل برنامه‌ی نیمه‌شب قسمت ۸ برای فصل ۵ که این هفته منتشر شده رو داره برای من ارسال کنه؟
مرسی :)
💬 ایلان ماسک علیه ویکی‌پدیا : «GrokiPedia» در راه است!

💬ماسک با پروژه جدید xAI، دانشنامه‌ای متن‌باز و بدون محدودیت به نام GrokiPedia می‌سازه؛ رقیبی مستقیم برای ویکی‌پدیا. هدفش هم ساخت منبعی آزاد، شفاف و بی‌طرف برای «درک جهانه».

💬ماسک بارها ویکی‌پدیا رو به جانبداری سیاسی متهم کرده؛ حتی یکی از بنیان‌گذاران ویکی‌پدیا هم قبلاً همین حرف رو زده بود.

😎@ITSecurityComputer
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Python Hints
سمت ما
__init__.py
لزوماً خالی نیست؛ خیلی وقتا تنظیمات خاص و راحت تر و ... داخلش هست
و یا حتی re-export برای راحتی بیشتر کاربر.
پروژه شرکت رو تحویل دادم؛
اما بعدش یک ایده به توسعه دهنده شرکت دادم، چندتا چیز بنظرم توی پروژه کم بود که خب کارفرما نخواسته بود.
بعضی موارد رو البته شخصاً اضافه کردم (آدمای خوب رو باید هواشونو داشت.) بعضی موارد هم زمان بیشتری می‌خواست که سپردم به خودشون!

مثلاً:
اینکه کل کد رو async کنند، تکنیکی که ratatui توی کدهای مثالش کم استفاده کرده و بیشتر روش hybrid رو رفته (ما توی این مرحله اصلا به async نیاز نداشتیم) و اکثر موارد multi-thread بود.

دوم نوتیف اضافه کردن؛ اینکه همون داخل ترمینال (مثل nice توی nvim) بجای اینکه وضعیت کار‌ها رو برم بررسی کنم! بتونم alert بذارم (درحد ی فلگ) که خودش بهم نوتیف بده کار انجام شد یا به خطا خورد یا ....

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

بعد از این دوباره پروژه برگشت بغل خودم، برای توسعه ورژن جدید :)

گفتم اینارم کم کم، به اون مثالی که برای ratatui نوشتم اضافه کنم.
Async - Notification (multi-thread)

بعد که تکمیل شد، بفرستم بالا!
Forwarded from Woland's Linux Journal (Woland)
💠ytsage💠

یک دانلودر همه‌کاره برای یوتوب

دانلود از گیتهاب

یا

python3 -m venv venv
source venv/bin/activate

pip install ytsage


#معرفی
Forwarded from 🎄 یک برنامه نویس تنبل (Lazy 🌱)
🔶 تیم Artix Linux اعلام کرده است که به‌طور رسمی پشتیبانی از محیط‌های دسکتاپ مبتنی بر GNOME را متوقف می‌کند. دلیل این تصمیم، تغییرات صورت‌گرفته در پروژه‌های بالادستی است که اجرای این محیط‌ها را بدون systemd غیرممکن کرده است.

#لینوکس

@TheRaymondDev
Forwarded from محتوای آزاد سهراب (Sohrab)
و پایان یک دوران.

شرکت AOL دیگه اینترنت دایال‌آپ ارائه نمیده.
من بچه که بودم صدای این دایال‌اپ رو زیاد می‌شنیدم، بزرگوار هم طوری بود که به بدبختی وصل می‌شد.

یوتوبر micheal MJD برای آخرین بار این سرویس رو تست کرده که می‌تونید ببینید:

https://youtu.be/ipjvVGEfYn0?si=Lrn5StXzarOENBSz


@SohrabContents
Forwarded from Linuxor ?