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
#معرفی

وبسایت osssoftware اومده ابزار ها و پروژه های اپن سورس جایگزین ابزار های متن بسته و تجاریو به صورت دسته بندی شده قرار داده و میتونید در بین بیش از 500 ابزار مختلف جستجو کنید

سازندش میگه تمرکز اصلی روی جمع آوری پروژه هایی بوده که:

👈 توی GitHub فعال بودن
👈 توی DevHunt و Product Hunt جزو بهترین ها بودن
👈 توی منابع مختلف بهشون اشاره شده

چند نمونه از پروژه های اپن سورس معرفی شده:

💫 پروژه ی Penpot جایگزین اپن سورس Figma
💫 پروژه ی AppFlowy جایگزین اپن سورس Notion
💫 پروژه ی plausible جایگزین اپن سورس Google Analytics
💫 و ...

🆔 @MdDaily
👍5
داشتم توی dev.to یه مقاله میخوندم با عنوان :

چرا هرگز نباید از UUID به عنوان کلید اصلی در پایگاه داده های SQL استفاده کنید؟


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

به نظرم یکی از مباحث کم تر پرداخته شده اینکه برای primary key چه زمانی از uuid باید استفاده بشه و چه زمانی از integer.

خیلی خوشحال میشم اگه کسی تجربه ای یا نظری در مورد این تاپیک داره توی کامنت های همین پست با بقیه به اشتراک بگذاره تا در نهایت با مشارکت شما و مقاله ی dev.to به یه جمع بندیه خیلی خوب راجب این موضوع تو یه پست بعدی کانال برسیم :)

🆔 @MdDaily
👌5🤝1
Md Daily
داشتم توی dev.to یه مقاله میخوندم با عنوان : چرا هرگز نباید از UUID به عنوان کلید اصلی در پایگاه داده های SQL استفاده کنید؟ توی مقاله یه سری دلایلی رو اورده بود مثل بحث پرفورمنس، پیچیده تر شدن ساختار اپلیکیشن و ... ولی نکته ای که برام جالب بود، تقریبا یه…
با تشکر از عزیزانی که توی کامنت پست تجربه هاشون و مطالب خوبی رو به اشتراک گذاشتند، امشب/فردا صبح پست این تاپیک منتشر میشه و فردا به مناسبت شب یلدا هم یه 🎁سوپرایز ویژه داریم....
🔥4
Md Daily
داشتم توی dev.to یه مقاله میخوندم با عنوان : چرا هرگز نباید از UUID به عنوان کلید اصلی در پایگاه داده های SQL استفاده کنید؟ توی مقاله یه سری دلایلی رو اورده بود مثل بحث پرفورمنس، پیچیده تر شدن ساختار اپلیکیشن و ... ولی نکته ای که برام جالب بود، تقریبا یه…
چرا هرگز نباید از UUID به عنوان کلید اصلی در پایگاه داده های SQL استفاده کنید؟

استفاده از UUID که مخفف (Universally Unique Identifier) هستش به عنوان primary key در پایگاه داده‌های SQL مزایا و معایبی داره. اگرچه UUIDها در برخی شرایط مزایایی دارن ولی دلایلی وجود داره که ممکنه بهترین گزینه primary key نباشن:

👈 ایندکسینگ و عملکرد(Indexing and Performance):

وقتی که UUID ها 128 bits هستن در مقایسه با integer که 32 bits عه شاید در داده های کم خیلی به چشم نیاد ولی در مجموعه داده های بزرگ باعث افزایش نیاز به استوریج بیشتر و کاهش پرفورمنس میشه.

ایندکس هایی که روی UUID columns ساخته میشن ممکنه به اندازه ایندکس هایی که روی داده های کوچکتر هستن کارآمد نباشن. این به این دلیله که کلیدهای(keys) بزرگتر میتونه باعث خوندن(read) بیشتر page بشه و عملکرد query را تحت تأثیر قرار بده.

👈 قابل درک بودن و اشکال زدایی(Readability and Debugging):

برخلاف اعداد صحیح، UUIDها قابل خوندن/درک توسط نیروی انسانی(human-readable) نیستن، که میتونه اشکال زدایی و بازرسی دستی پایگاه داده رو سخت تر کنه. Integers یا data type های کوچیکتر میتونه برای توسعه دهندگان و مدیران پایگاه داده راحت تر باشه.

👈 خوشه بندی(Clustering):

دیتا تایپ های UUID برای منحصر به فرد بودن به صورت globally طراحی شدن ولی تضمین نمیشه که ترتیبی داشته باشن. این عدم ترتیب ترتیبی میتونه منجر به الگوهای I/O دیسک نامناسب بشه و عملکرد برخی از query ها رو تحت تأثیر قرار بده، به ویژه اونایی که range-based هستن

👈 فرگمنتیشن (Fragmentation):

دیتا تایپ UUID اغلب با استفاده از ترکیبی از timestamp و مقادیر تصادفی تولید میشن. این تصادفی بودن میتونه باعث افزایش سطح fragmentation ایندکس بشه و عملکرد پایگاه داده رو در درازمدت تحت تأثیر قرار بده.

فرگمنتیشن (fragmentation) در پایگاه داده زمانی اتفاق می‌افته که داده‌ها به صورت غیرمنظم در دیسک ذخیره بشن که باعث میشه سیستم مدیریت پایگاه داده برای دسترسی به داده‌ها زمان بیشتری صرف کنه و در نتیجه عملکرد پایگاه داده کاهش پیدا کنه. مثل اینه که شما یک کتاب را باز کنید و صفحاتش رو به هم بریزید. حالا برای پیدا کردن یک صفحه خاص، باید وقت بیشتری صرف کنید.


👈 سربار استوریج(Storage Overhead):

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

👈 پیچیدگی کاربرد(Application Complexity):

مدیریت UUID ها ، به ویژه تولیدشون و منحصر به فرد بودنشون در سیستم های توزیع(distributed systems) شده ، میتونه پیچیدگی رو به منطق(logic) برنامه اضافه کنه. این پیچیدگی ممکنه لازم نباشه اگر primary key های ساده تری از نظر تایپ برای نیازهای برنامه کافی باشن.

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

دیتا تایپ UUID به منحصر به فرد بودنش معروفه و یکی از اهداف اصلی استفاده ازش توی distributed systems هاس چون شما مطمئنی کلید تکراری تولید نمیشه .

وقتی که میزان استفاده از مموری و پرفورمنس SQL queries برای ما حیاتیه بهتر برای کلید اصلی مثلا از integer استفاده کنیم که به صورت متوالی افزایش پیدا میکنن .

حتی تویه سناریو های distributed system که باید از UUID استفاده بشه با توجه به نیاز پروژه میشه استفاده نکرد. مثلا توی MySQL میشه نحوه ی افزایش خودکار مقدار ID رو تنظیم کرد یعنی مثلا سرور اول: 1, 101، 201، 301، 401 و غیره (افزایش 100 + offset 1) رو تولید کنه. سرور دوم: 2، 102، 202، 302، 402 و غیره (افزایش 100 + offset 2) رو. این کار خیلی ساده ترعه و میشه این row ها رو بدون خطر تداخل بین سرورها منتقل کرد. اما این روش هم ممکنه برای همه سناریو ها مناسب نباشه و استفاده از UUID مناسب تر باشه.

شاپیفای هم یه مقاله منتشر کرده که توش توضیح میده چرا از UUIDv4 به ULID مهاجرت کرده و باعث شده عملیات INSERT تا 50 درصد سریع تر انجام بشه.

💫 نتیجه گیری:

در
نتیجه تا وقتی که نیاز نشده پروژتون رو الکی پیچیده نکنید. یکی از انتقاد هایی که به میکروسرویس میشه اینکه روی کاغذ داری سرویس هاتا به بخش های مختلفی تقسیم میکنی که هر بخش قرار یه کاریو انجام بده و این خوبه تا زمانی که در عمل و واقعیت شما برای ارتباط بین این سرویس ها و اشکال زداییشون باید پیچیدگی های بیشتری به پروژه اضافه کنید. پس تا وقتی واقعا نیاز نشده ساختار پروژه رو ساده و بهینه نگه دارید. احتمالا توی اکثر سناریو های نیاز پیدا نکنید از UUID استفاده کنید مگر در مواردی مثل میکروسرویس و distributed system ها.

🆔 @MdDaily
👍4🔥2
Md Daily
قرار یه پروژه ایو تحت عنوان رویای Md: آموزش آزاد و رایگان برای همه به صورت ازاد و با مشارکت شما عزیزان توی گیت هاب شروع کنیم. که تلاشی‌ باشه برای اینکه بتونیم منابع فارسی بیشتری در حوزه ی برنامه نویسی و تکنولوژی داشته باشیم و پلتفرمی صاحب مقالات نباشه …
🎉سوپرایز یلدایی MdDaily🎉


یلدای همگی مبارک باشه❤️

به مناسبت شب یلدا پلتفرم ام دی کورس برای محقق شدن پروژه ی رویای ام دی راه اندازی شد 🎊

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

🔗 گیت هاب پروژه: https://github.com/mdpe-ir/MdCourse

🔗 وبسایت: https://mddaily.web.app/

🔗 پیام تبریک شب یلدا
🆔 @MdDaily
❤‍🔥7🔥1👏1
تقریبا یه چند ماهی به Jetbrains Ai دسترسی داشتم و یه قابلیت خیلی خوبی که داشت این بود که اتوماتیک message برای commit های git تولید میکرد و زمان زیادی رو هم در نوشتن و هم در فکر کردن به اینکه چه بنویسم صرفه جویی میکرد 😅


تا اینکه از هفته ی پیش این سرویس اشتراکی شد و شروع کردم توی ابزار های open source دنبال یه جایگزین خوب گشتن تا اینکه با پروژه ی opencommit که عملکرد مشابه ای رو داشت آشنا شدم ولی یه مشکلی وجود داشت! نیاز به ای پی ای openai بود. خب ابزار هایی که از ای پی ای openai استفاده میکنند دقیقا دارن چیکار میکنند؟ بر اساس داده ی ورودی و یه سری عملیات پردازشی در نهایت یه Prompt رو اماده میکنند که میفرستن به openai و نتیجش رو میگیرن و نمایش میدن. خب با این ایده سورسش رو فورک کردم و شروع کردم به تغییر سورسش :) خروجی چیشد؟ یه نسخه ی ویرایش شده از opencommit با این تفاوت که 100٪ رایگانه و privacy شما تضمین شدس.

دقیقا تو نسخه ی فورک شده چه اتفاقی میوفته؟
شما بعد از اینکه ابزار را اجرا کردید تغییرات کدتون رو از git میگیره، یک Prompt آماده میکنه و بجای اینکه بفرسته به openapi یا هر سرویس شخص ثالثی تو کلیپبورد شما کپیش میکنه. شما میتونید توی هر chat bot ای که خواستید مثل bard یا gpt یا مدل های اپن سورس پیستش کنید و بوم! message کامیت رو تحویل بگیرید و push کنید :)

میتونید از لینک زیر دریافتش کنید 👇👇👇
🔗 لینک پروژه نسخه ی اختصاصی Md

برای اجراشم فقط کافیه پروژه رو clone یا Download ZIP کنید و با دستور :
node  {ProjectPath}/out/cli.cjs


اجراش کنید

مثلا من خودم توی .zshrc یه alias برای اجراش نوشتم:

alias md-oco="node /home/$USER/opencommit/out/cli.cjs"


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

باید README.md و توضیحاتش رو آپدیت کنم 😅 و در نهایت یه راه نصب ساده براش ایجاد بشه و دیگه برای اجراش وابسته به node نباشه


🆔 @MdDaily
👍71🤔1
Audio
🎧 پلی لیست #موزیک مناسب برای زمان برنامه نویسی و حل CTF


🆔 @MdDaily
❤‍🔥2👍1🔥1
داریم به پایان سال 2023 نزدیک میشیم و به مناسبت تولد خالق لینوکس بریم با ۷ اپلیکیشن جذاب و کاربردی متن باز که کاربران لینوکس در سال ۲۰۲۳ دوست داشتن آشنا بشیم :)

1️⃣ اپلیکیشن Warp:برنامه به اشتراک گذاری فایل امن

اپلیکیشن Warp یک برنامه اشتراک فایل متن باز مبتنی بر Rust عه که برای Linux، Windows و Android در دسترسه.

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

2️⃣ اپلیکیشن MusicPod: یک پخش کننده موسیقی زیبا

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

3️⃣ اپلیکیشن Beaver Notes: برنامه نوت برداری با تمرکز روی حریم شخصی

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

4️⃣ اپلیکیشن Wave: یک ترمینال مدرن لینوکسی

ترمینال Waveterm هم رابط کاربری خیره کننده ای داره و هم تجربه کاربری خیلی خوبی داره. بهتون اجازه میده پروفایل های مختلفی بسازید و کانکشن های SSH اتون رو هم ذخیره کنید. حتما امتحانش کنید. برای مک هم نسخه داره و با Go و Typenoscript نوشته شده

5️⃣ اپلیکیشن Xplorer: یک مدیر فایل زیبا

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

6️⃣ اپلیکیشن Mission Center: نرم افزار نظارت سیستم

اگه دنبال یه برنامه با GUI خوب هستید که میزان مصرف منابع سیستمون رو نشون بده Mission Center میتونه گزینه ی خوبی باشه.

7️⃣ اپلیکیشن Denaro

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


🆔 @MdDaily
❤‍🔥5👍1🔥1
فردا پست ساخت لود بالانسر با گولنگ توی وبلاگ MdCourse منتشر میشه
👍102🔥1
Md Daily
فردا پست ساخت لود بالانسر با گولنگ توی وبلاگ MdCourse منتشر میشه
#ام_دی_کورس

ساخت Load Balancer در گولنگ

لود بالانسر ها در معماری وب نقشی اساسی دارن.

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

توی این پست قرار با استفاده از Golang یک لود بالانسر ایجاد کنیم.



ادامه در :
https://mddaily.web.app/blog/building-a-load-balancer-in-go/

🆔 @MdDaily
👌5👍1🔥1🐳1
#course


درایو گوگل شامل آموزش های رایگان در زمینه های:

Artificial Intelligence
AWS Certified
Cloud
BIG DATA
Data science
BI
Python
Data Analytics
Google Cloud Platform
IT Training
MBA
Machine Learning
Ethical Hacking
Deep Learning and more


https://drive.google.com/drive/mobile/folders/1CgN7DE3pNRNh_4BA_zrrMLqWz6KquwuD 🔗


🆔 @MdDaily
🔥6
#معرفی

وب سایت هایی برای یادگیری تکنولوژی های مختلف:

🧠 هوش مصنوعی: ai.google

💻 برنامه نویسی: codeacademy.com

💹 بلاک چین: 101blockchains.com

🔒 امنیت سایبری: cybrary.it

🤖 ماشین لرنینگ: machinelearningmastery.com

📊 علم داده: kaggle.com

🏗 دوآپس: kodekloud.com

☁️ کلود کامپیوتینگ: aws.amazon.com

📈 تحلیل داده: careerfoundry.com

🌐 وب 3.0: buildspace.so

🧑‍💻 مصاحبه کدنویسی و الگوریتم ها‌: leetcode.com

🆔 @MdDaily
👍3
Md Daily
پست فردای ام دی کورس راجب چه موضوعی باشه؟
نمونه ی Sharing a state between windows که چند وقت پیش خیلی ترند شده بود :)
👍1
Md Daily
پست فردای ام دی کورس راجب چه موضوعی باشه؟
#موقت

با تشکر از تمام عزیزانی که توی نظر سنجی شرکت کردند
مقاله به زودی منتشر میشه ...
❤‍🔥2
#ام_دی_کورس

چطوری پی‌پل با استفاده از فقط 8 ماشین مجازی به یک میلیارد تراکنش روزانه رسید

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

دسامبر 1998 - کالیفرنیا، آمریکا

تیمی از مهندسان نرم افزار امنیتی برای دستگاه های hand-held درست کردن. ولی مدل کسب‌وکارشون شکست خورد.

پس تصمیم گرفتن یه سرویس پرداخت آنلاین درست کنن و اسمش رو گذاشتن پی‌پال.

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

ادامه در:

https://mddaily.web.app/blog/how-paypal-was-able-to-support-a-billion-transactions-per-day-with-only-8-virtual-machines/

🆔 @MdDaily
🔥8👍3
#معرفی #مصاحبه

کاربر X (توئیتر سابق) ای بنام Ashish Pratap Singh که الان مهندس نرم افزار توی آمازونه توی رشته پستی منابعی که برای : کد نویسی، سیستم دیزاین و ... مطالعه کرده تا توی مصاحبه های Adobe، Amazon، Google و Microsoft شرکت کنه رو منتشر کرده بود که در ادامه بررسیشون می کنیم:


👈 برای مصاحبه کدنویسی :

- مطالعه ی کتاب: Cracking the Coding Interview by Gayle Laakmann McDowell که این کتاب شامل 189 مسئله با کیفیت بالا و راه حل هاشون (فایل کتاب در پست بعدی)

- دوره های Algorithms 1 و Algorithms 2 از دانشگاه Princeton در کورسرا (این دو دوره رایگان هستند و میتونید مستقیم از خود کورسرا ببنید)

- پلی لیست ساختار داده از William Fiset’s توی این پلی لیست ویلیام ساختار داده را از طریق انیمیشن ها توضیح میده که درک مفاهیم سخت رو خیلی آسون تر میکنه

- پلی لیست Dynamic Programming و Graph از Tushar Roy’s این پلی لیست برای هر کسی که بخواد مشکلات Dynamic Programming رو حل کنه دیدنش واجبه

- پلتفرم LeetCode: برای تمرین مشکلات کدنویسی. بهترین پلفترم برای حل و تمرین سوال های روز مصاحبه


👈 برای مصاحبه سیستم دیزاین :


- کتاب Designing Data Intensive Applications از Martin Klepmann. خوندن این کتاب بهتون تو درک طراحی سیستم‌هایی با مقیاس بزرگ کمک میکنه و برای درک نحوه عملکرد سیستم های توزیع شده باید بخونید. (فایل کتاب در پست بعدی)

- دوره Grokking the System Design Interview در Educative . خود Ashish Pratap Singh میگفت که این دوره رو 3 بار گذرونده و بهش خیلی کمک کرده تا توی سوالات مربوط به سیستم دیزاین که ازش می پرسن جواب های خوبی بده. (دورش رایگان نبود. لینک دانلودش رو از دانلودلی براتون گذاشتم 😅)

- ویدیو های Tech Dummies System Design در یوتیوب

- پلی لیست Gaurav Sen's System Design for Beginners

- پلی لیست Codekarle System Design Interview

- ریپوی گیت هاب Awesome System Design Resources

👈 برای مصاحبه های low level design:

- کتاب Head First Design Patterns. این کتاب با استفاده از طنز و تصاویر، یادگیری مفاهیم شی گرا را سرگرم کننده و جذاب می کنه. (فایل کتاب در پست بعدی)

- دوره Grokking the Low Level Design Interview Using OOD Principles Course در Educative. این دوره همه چیز را از مفاهیم OOPS گرفته تا الگوهای طراحی تا اصول جامد و مشکلات رایج در چنین مصاحبه هایی را پوشش میده. (لینک دانلود رایگانش رو پیدا نکردم. اگه کسی پیدا کرد توی کامنت ها بفرسته)

- ریپوی گیت هاب awesome-low-level-design

👈 برای مصاحبه های behavioural:

- ریپوی گیت هاب Awesome Behavioral Interviews

👈 برای مصاحبه های تمرینی و آزمایشی (Mock):

- پلتفرم pramp . به نقل از Ashis:
من چند هفته قبل از مصاحبه هایم از Pramp استفاده کردم تا در یک مصاحبه تمرین کنم. این باعث شد من اعتماد به نفس بیشتری داشته باشم و سرعت بیشتری را که در آن به مشکلات مصاحبه نزدیک شدم ، بهبود بخشیدم.

👈 برای نوت برداری:

- پلتفرم Notion به نقل از Ashis:
پلتفرم Notion برای یادداشت برداری و سازماندهی اطلاعات است. من همه چیزهای جالبی را که در طول آماده سازی به آن برخورد کردم یادداشت کردم.




امیدوارم این منابع بهتون کمک کنه و براتون مفید باشه :)

🆔 @MdDaily
8👍2
@Mddaily_Cracking_the_Coding_Interview_189_Programming_Questions.rar
5.7 MB
کتاب:‌ Cracking the Coding Interview by Gayle Laakmann McDowell


🆔 @MdDaily
🔥1
@Mddaily OReilly-Designing-Data-Intensive-Applications.rar
20.1 MB
کتاب: Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems


🆔 @MdDaily
🔥1