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
قدرتمند و ساده مثل API Blueprint

زبان طراحی و توضیح (description language) ساده API Blueprint یک زبان سطح بالا برای APIهای وبه که با استفاده از قالب Markdown نوشته میشه. این زبان برای طراحی اولیه (design-first) API، مستندسازی، نمونه‌سازی، و تست API استفاده می‌شه.

هدفش اینه که:
🔹زبان ساده و قابل فهمی داشته باشه؛
🔸تعامل و همکاری بین تیم‌ها، توسعه‌دهندگان و
🔹حتی مشتریان رو تسهیل کنه؛
🔸با ابزارهای مختلف سازگار باشه؛

ا گرچه Swagger / OpenAPI استاندارد غالب اند
اگر دنبال جایگزین سبک‌تر و ساده‌تر برای Swagger اید
اگر خوانایی برای افراد غیرتکنیکی براتون خیلی مهمه API Blueprint
را بررسی کنید

سطح پست : #متوسط
#برنامه_نویسی
#programming
@MehrdadLinuxchannel
Forwarded from Ninja Learn | نینجا لرن (Mohammad)
خب همونجور که میدونید درمورد GIL یا همون Global Interpreter Lock بحث زیاده 🤯

مشکل ما با GIL چیه؟
اینه که نمیذاره مولتی‌تردینگ واقعی داشته باشیم.
یعنی چی؟
یعنی نمی‌تونیم چندتا تسک رو همزمان روی چندتا ترد اجرا کنیم.
چرا؟
چون GIL میگه:
«در هر لحظه فقط یه ترد حق داره اجرا بشه، بقیه باید وایسن نوبتشون بشه.»

حالا نکته بامزه اینجاست:
اگه بیای چندتا ترد ران کنی، این تردا میان سر GIL دعوا می‌کنن کلی context switching می‌خوره latency میره بالا یه عالمه overhead میاد رو برنامه.
نتیجه؟ مولتی‌تردینگ برای کارای CPU-bound نه تنها کمک نمی‌کنه، بدترم می‌کنه برای همین باید single-thread باشه 😅
(احتمالاً خودتونم وقتی async برای CPU-bound نوشتید دیدید چه وضعیه.)

حالا چرا اصلاً GIL وجود داره؟
سؤال خوبیه 👌
خیلی خلاصه بگم نذاشته پایتون به چوخ بره 😂
چطوری؟
میاد thread safety رو برات تضمین می‌کنه، نمیذاره race condition بیاد وسط و همه چی بترکه.

ولی خب GIL دردسرم کم درست نمیکنه:

نمیذاره مولتی‌تردینگ CPU-bound داشته باشیم.

بعدم بخوای حذفش کنی هزاران لایبری که با درنظر گرفتن gil نوشته شده باید اپدیت بشن :)

و....
کلاً محدودمون می‌کنه.

راه‌حل چیه؟

1. C Extension
یعنی توابع سنگینت رو تو C بنویسی، اونجا اجرا بشه، فقط از پایتون صدا بزنی. اینجوری GIL رو می‌تونی دور بزنی.

2. Multiprocessing
این یکی مطرح ترین راهه. به تعداد core های CPU پروسس بالا میاری. هر پروسس مفسر خودش و در نتیجه GIL خودش رو داره اینجا واقعاً موازی میشه.
ولی اینجا یه توهمه که «ایول مشکل حل شد»…
سخت در اشتباهید 😅
چرا؟
چون:
ـprocess خیلی سنگینه، هر کدوم کلی overhead دارن.

ارتباط بین processها (همون IPC) خودش یه هزینه‌ی جداست.
داده‌ها باید بین processها جابه‌جا بشن (queue، pipe، shared memory و …) که اینم کندی و مصرف حافظه میاره.

گزینه اپشنال شدن گیل هم توی ۳.۱۳ کامل گیل رو حذف نمیکنه میتونیم مولتی پراسسینگ و موازی سازی کنیم ولی خب خودشون هنوز تایید نکرده و ازمایشیه و کلی مشکلات داره.

گزینه هاییم هست مثل استفاده از nogil که خب یکسری مشکلات دارن که توی این پست جا نمیشن بگم

📌 خلاصه: GIL هم ناجیه، هم قاتل. ناجی چون امنیت میده، قاتل چون مولتی‌تردینگ CPU-bound رو ازمون میگیره. ولی خب این مورد توی I/O bound process نیست چون وقتی یه پراسس io ران میشه گیل خاموش میشه و میتونی parallel processing داشته باشی :)

#️⃣ #web #programming

 
🥷🏻 CHANNEL | GROUP
Forwarded from Gopher Academy
🔵 عنوان مقاله
It's Survey Time! The 2025 Go Developer Survey is Live

🟢 خلاصه مقاله:
** نظرسنجی 2025 Go Developer Survey آغاز شده و Go team طبق روال دوره‌ای برای تعیین اولویت‌های بعدی از جامعه بازخورد می‌گیرد. این نظرسنجی به تصمیم‌ها درباره زبان، ابزارها، مستندات و اکوسیستم کمک می‌کند. مهلت شرکت کوتاه است و تا September 30 ادامه دارد—اگر با Go کار می‌کنید یا به آن علاقه‌مندید، همین حالا مشارکت کنید و خبرش را به دیگران هم برسانید.

#Go #Golang #DeveloperSurvey #GoCommunity #2025 #Programming #OpenSource #DevTools

🟣لینک مقاله:
https://golangweekly.com/link/174414/web


👑 @gopher_academy
Forwarded from Ninja Learn | نینجا لرن (Mohammad)
OSRM ماشین مسیریابی متن‌باز برای دنیای واقعی 🌍

اگه تو حوزه توسعه اپلیکیشن‌های نقشه، مسیریابی یا لجستیک کار می‌کنین، حتماً اسم
OSRM (Open Source Routing Machine) رو شنیدین. این ابزار یه موتور مسیریابی قدرتمند و متن‌بازه که بر اساس داده‌های OpenStreetMap کار می‌کنه و می‌تونه مسیریابی سریع و دقیق رو برای اپ‌های موبایل، وب یا حتی سیستم‌های بزرگ فراهم کنه.(به تازگی توی یکی از پروژه هام استفادش کردم و عالی بود)
تو این پست قراره یه نگاه تقریباً کامل به OSRM بندازیم.

🧠 اول از همه OSRM چیه؟

OSRM مخفف Open Source Routing Machine، یه موتور مسیریابی متن‌بازه که با
‏ C++ نوشته شده و برای محاسبه کوتاه‌ترین مسیرها تو شبکه‌های جاده‌ای طراحی شده. این ابزار از داده‌های OpenStreetMap (OSM) استفاده می‌کنه – یه نقشه متن‌باز جهانی که توسط جامعه ساخته می‌شه – و می‌تونه مسیریابی برای ماشین، دوچرخه، پیاده یا حتی وسایل نقلیه خاص رو انجام بده.

پروژه OSRM از سال ۲۰۱۰ توسط Dennis Luxen شروع شد و حالا توسط جامعه‌ای از توسعه‌دهنده‌ها (از جمله تیم Mapbox) نگهداری می‌شه. هدف اصلیش؟ ارائه مسیریابی سریع، دقیق و قابل سفارشی‌سازی بدون وابستگی به سرویس‌های تجاری مثل Google Maps.
‏OSRM نه‌تنها مسیریابی ساده انجام می‌ده، بلکه قابلیت‌هایی مثل map matching (مطابقت مسیر با جاده) و حل مسئله TSP رو هم داره.

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

‏OSRM دو بخش اصلی داره:
پیش‌پردازش (Preprocessing) و سرویس‌دهی (Serving).

1⃣ پیش‌پردازش:
آماده‌سازی داده‌ها 🛠️
داده‌های OSM (فایل‌های .osm.pbf) رو می‌گیره و به یه گراف بهینه‌شده تبدیل می‌کنه.

از الگوریتم‌های پیشرفته‌ای مثل Contraction Hierarchies (CH) یا Multi-Level Dijkstra (MLD) استفاده می‌کنه. CH برای ماتریس‌های فاصله بزرگ عالیه، و MLD (پیشنهادی برای بیشتر موارد) تعادل خوبی بین سرعت و دقت برقرار می‌کنه.

مراحل پیش‌پردازش:
Extract:
داده‌های OSM رو به گراف خام تبدیل می‌کنه.

Partition/Customize:
گراف رو بهینه می‌کنه (مثل ساخت ایندکس‌ها برای سرعت).

Contract:
برای CH، گراف رو فشرده می‌کنه تا جستجو سریع‌تر بشه.

2⃣ سرویس‌دهی محاسبه مسیر 🗺️
سرور HTTP/JSON ارائه می‌ده که می‌تونین ازش برای محاسبه مسیر، تخمین زمان، یا حتی تولید tileهای نقشه با metadata مسیریابی استفاده کنین.

🚀 ویژگی‌های کلیدی OSRM


1⃣ الگوریتم‌های مسیریابی پیشرفته 🧮

Contraction Hierarchies (CH):
برای ماتریس‌های فاصله بزرگ (مثل محاسبه فاصله بین ۱۰۰۰ نقطه) عالیه. سرعت محاسبه رو به میلی‌ثانیه می‌رسونه.

Multi-Level Dijkstra (MLD):
تعادل خوبی بین دقت و سرعت داره و برای مسیریابی روزمره پیشنهاد می‌شه.

Map Matching:
مسیرهای GPS نویزی (مثل داده‌های موبایل) رو با جاده‌های واقعی مطابقت می‌ده – عالی برای اپ‌های ناوبری.

2⃣ پروفایل‌های سفارشی 🚗🚲
می‌تونین پروفایل‌های مختلف بسازین:
‏car (ماشین)، bike (دوچرخه)، foot (پیاده) یا حتی وسایل نقلیه سنگین.
هر پروفایل قوانین خاص خودش رو داره (مثل اجتناب از بزرگراه‌ها برای دوچرخه).

3⃣ تولید Tileهای نقشه 🏗️
‏OSRM می‌تونه Mapbox Vector Tiles با metadata مسیریابی تولید کنه، که برای اپ‌های موبایل (مثل Mapbox GL) عالیه.

4⃣ حل مسئله فروشنده دوره‌گرد (TSP) 🛒
برای محاسبه بهینه مسیر بازدید از چند نقطه (مثل تحویل کالا) استفاده می‌شه.
مثال: محاسبه ماتریس فاصله بین ۱۰ انبار.

5⃣ ادغام آسون با Docker و API 🐳
‏Docker images آماده برای سریع راه‌اندازی (ghcr.io/project-osrm/osrm-backend).
‏ API ساده JSON/HTTP که با هر زبانی (پایتون، JS، Go) کار می‌کنه.


جمع‌بندی

OSRM یه موتور مسیریابی متن‌باز قدرتمنده که با الگوریتم‌های پیشرفته مثل MLD و CH، مسیریابی سریع و دقیق رو برای اپ‌های واقعی فراهم می‌کنه. از محاسبه مسیرهای ساده گرفته تا map matching و تولید tileها، این ابزار برای توسعه‌دهنده‌های نقشه و لجستیک یه گنجینه‌ست.

#️⃣ #geo #programming #osrm

 
🥷🏻 CHANNEL | GROUP
تا حالا کلی مطالب خفن و کاربردی تو کانال NinjaLearn براتون آماده کردیم و الان صدها مطلب مختلف و جذاب داریم.

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

این شما و این لیست دسته‌بندی‌های کانال🔻:

🦫 #go: آموزش‌ها و نکات کاربردی زبان گو

💻 #programming: مطالب برنامه نویسی

🐍 #python: ترفندها و نکات پایتونی

🦄 #django: مطالب فریم‌ورک جنگو

⚡️ #fastapi: مطالب فریم ورک فست

🌐 #web: مطالب مرتبط به وب

📡 #network: مطالب مرتبط به شبکه

🗂️ #db: معرفی و نکات دیتابیس

🔖 #reference: معرفی مقاله و ویدیو

📢 #notif: اطلاع رسانی ها

#question: سوالات جالب در برنامه نویسی

🎊 #event: رویداد هایی که معرفی کردیم

🎬 #movie: معرفی فیلم و سریال

📚 #book: معرفی کتاب‌های تخصصی

🤖 #AI: مطالب مرتبط به هوش مصنوعی

📊 #ml: مطالب مرتبط به یادگیری ماشین

🛠️ #backend: آموزش‌ها و ترفندهای بک‌اند

🔒 #security: نکات امنیتی

#devops: مطالب مرتبط به دواپس

📺 #YouTube: ویدیوهای چنل یوتیوب ما

🌏 #geo: تکنولوژی های جغرافیایی


هر کدوم از این هشتگ‌ها برای یه موضوع خاص طراحی شده تا شما به راحتی بتونید محتوای مورد نظرتون رو پیدا کنید. دیگه لازم نیست کلی تو کانال بگردید 😊

اگه موضوع جدیدی به مطالب کانال اضافه بشه، حتماً تو این لیست قرار می‌گیره


راستی میتونید بنر کانال رو برای دوستاتون هم بفرستید تا اونا هم به جمع ما بپیوندن و از این مطالب مفید استفاده کنن 😉

NinjaLearn Banner 🥷🤝


#category



🔆 CHANNEL | GROUP
Forwarded from Ninja Learn | نینجا لرن (Mohammad)
یکی از چالش‌های رایج بین فعالان حوزه‌ی هوش مصنوعی اینه که نمی‌دونن برای آموزش مدلشون باید از چه الگوریتمی استفاده کنن
آیا باید سراغ Classification برن؟ یا Regression؟ یا شاید Clustering؟ 🤔

خوشبختانه، کتابخونه‌ی قدرتمند Scikit-learn (sklearn) توی مستندات رسمیش یه فلوچارت خیلی کاربردی ارائه داده که با دنبال کردنش می‌تونید دقیقاً بفهمید کدوم الگوریتم مناسب نوع داده و هدف پروژه‌تونه.

لینک

#️⃣ #ai #programming

 
🥷🏻 CHANNEL | GROUP
Forwarded from Ninja Learn | نینجا لرن (Mohammad)
How to Prove It A Structured Approach (Daniel J. Velleman).pdf
8.1 MB
اینم کتاب

#️⃣ #math #book #programming

 
🥷🏻 CHANNEL | GROUP
Forwarded from Ninja Learn | نینجا لرن (Mohammad)
📘 کتاب: How to Prove It – نوشته‌ی Daniel J. Velleman

این کتاب یکی از بهترین منابع برای یادگیری منطق ریاضی و روش‌های اثباته. برخلاف بیشتر کتاب‌های دانشگاهی، How to Prove It از پایه شروع می‌کنه و قدم‌به‌قدم یاد می‌ده چطور از یک گزاره ساده به یک استدلال کامل برسی.

مطالبش شامل منطق گزاره‌ای، کوانتورها، مجموعه‌ها، توابع، روابط و روش‌های مختلف اثبات مثل اثبات مستقیم، خلف و استقراست.
نویسنده با مثال‌های زیاد نشون می‌ده چطور باید “فکر کردن ریاضیاتی” رو تمرین کنی مهارتی که توی برنامه‌نویسی، طراحی الگوریتم و تحلیل مسائل پیچیده واقعاً حیاتی‌ه.

📖 این کتاب برای هرکسی مناسبه که می‌خواد منطق پشت ریاضیات و اثبات‌ها رو عمیق‌تر درک کنه، مخصوصاً دانشجوهای ریاضی و علوم کامپیوتر و برنامه‌نویس‌هایی که دنبال تفکر دقیق‌تر و تحلیلی‌ترن.

پی دی اف کتاب

#️⃣ #math #book #programming

 
🥷🏻 CHANNEL | GROUP
Forwarded from Ninja Learn | نینجا لرن (Mohammad)
Random Forest یا همون غول پایدار یادگیری ماشین

داستان از اونجا شروع میشه که
لئو بریمن سال ۲۰۰۱ این الگوریتم رو معرفی کرد. بعد از ۲۴ سال، هنوز تو تاپ ۵ مسابقه‌های Kaggle و پروژه‌های واقعی هست

نه به خاطر پیچیدگی، بلکه به خاطر تعادل دقت، پایداری و تفسیرپذیری.

اول از همه Random Forest چیه؟
یه مجموعه (Ensemble) از درخت‌های تصمیم که:
هر درخت روی یه زیرمجموعه تصادفی از داده‌ها (Bootstrap) آموزش می‌بینه

تو هر گره، فقط یه تعداد تصادفی از ویژگی‌ها (features) بررسی می‌شه

خروجی نهایی با رأی‌گیری (طبقه‌بندی) یا میانگین (رگرسیون) ترکیب می‌شه

نتیجه؟ یه مدل قوی که Variance درخت‌های تک رو کم می‌کنه، بدون اینکه Bias زیاد بشه.

چطور کار می‌کنه؟ (۳ گام ساده داره)

۱‏. Bagging
از داده اصلی، چندین زیرمجموعه با جایگزینی می‌سازیم.
تقریباً 63.2% داده‌ها تو هر درخت هستن (بقیه می‌شن OOB برای ارزیابی بدون نیاز به Validation).
احتمال انتخاب نشدن یه نمونه: (1 - 1/n)^n نزدیک به 0.368

۲. انتخاب تصادفی ویژگی
تو هر گره:
طبقه‌بندی: √p ویژگی (p = کل ویژگی‌ها)

رگرسیون: p/3 یا √p

این کار باعث می‌شه درخت‌ها همبستگی کمی داشته باشن

چرا اینقدر خوبه؟

دقت بالا (معمولاً تو ۱۰٪ برتر Kaggle)
-مقاوم به Overfitting (حتی با درخت عمیق)
-اهمیت ویژگی (Feature Importance) می‌ده
با داده گمشده کار می‌کنه
نیازی به نرمال‌سازی نداره

اهمیت ویژگی چطور حساب می‌شه؟
با کاهش میانگین ناخالصی (مثل Gini) در گره‌هایی که از اون ویژگی استفاده شده.
روش دقیق‌ترش: Permutation Importance
ویژگی رو به هم می‌ریزیم و افت دقت رو اندازه می‌گیریم.

کاربردهای واقعی:
تشخیص سرطان (دقت ۹۹٪)
تشخیص تقلب بانکی
سیستم پیشنهاد Netflix
پیش‌بینی قیمت خانه
و...

نقل قول بریمن (۲۰۰۱):
"Random forests does not overfit. As you add more trees, the test error keeps decreasing."

*منبع: Breiman, L. (2001). Random Forests*

#️⃣ #ai #programming

 
🥷🏻 CHANNEL | GROUP
Forwarded from Gopher Academy
🔵 عنوان مقاله
their favorite Go related blog posts of all time.

🟢 خلاصه مقاله:
این شماره جدید از خبرنامه Golang Weekly فهرستی منتخب از «بهترین پست‌های وبلاگی مرتبط با Go» را گرد آورده است؛ مجموعه‌ای منسجم که به‌جای فهرست صرفِ لینک‌ها، مسیر مطالعه‌ای ارائه می‌دهد برای درک اصول ماندگار Go. موضوعات کلیدی مانند همروندی با goroutine و channel، خطاپرداری شفاف، استفاده از interface و ترکیب‌پذیری، آزمون‌نویسی و ابزارها، همچنین بهینه‌سازی کارایی، پروفایلینگ و مدیریت حافظه پوشش داده می‌شوند. هر انتخاب با توضیحی کوتاه درباره ارزش ماندگارش و اینکه به درد چه کسی و چه مسئله‌ای می‌خورد همراه است؛ نوآموزان می‌توانند آن را نقشه راه یادگیری بدانند و باتجربه‌ها نیز برای بازبینی مبانی و دیدگاه‌های عمیق‌تر از آن بهره ببرند. این گردآوری تصویری از مسیر بلوغ جامعه Go نیز ارائه می‌کند؛ از نوشته‌های اولیه که روحیه طراحی زبان را شکل دادند تا جمع‌بندی‌های اخیر که بر تجربه‌های تولیدی تکیه دارند—مجموعه‌ای برای نشان‌گذاری، اشتراک با تیم و رجوع‌های مکرر.

#Go #Golang #GolangWeekly #Programming #SoftwareEngineering #Concurrency #GoTips #DevCommunity

🟣لینک مقاله:
https://golangweekly.com/link/176329/web


👑 @gopher_academy
Forwarded from Gopher Academy
🔵 عنوان مقاله
switch Statements in Go

🟢 خلاصه مقاله:
این مطلب از Golang Weekly به‌صورت عملی سراغ عبارت‌های switch در Go می‌رود و نشان می‌دهد چگونه می‌توان به‌جای زنجیره‌های if/else طولانی، کدی خواناتر نوشت. ابتدا نحو و قواعد ارزیابی switch، استفاده از چند مقدار در یک case، نقش default، و این نکته که در Go سقوط خودکار بین caseها وجود ندارد و فقط با fallthrough فعال می‌شود، توضیح داده می‌شود. سپس فرم بدون تگِ switch { ... } برای نگارش نگهبان‌های منطقیِ مرتب معرفی می‌شود.

بخش بعدی به type switch اختصاص دارد: وقتی با interface سروکار دارید، switch روی v.(type) اجازه می‌دهد بر اساس نوع واقعی تصمیم بگیرید، از nil به‌درستی عبور کنید و محدوده متغیرها در سربرگ switch و داخل caseها را مدیریت کنید. مقاله الگوهای کاربردی مثل مسیردهی بر اساس روش HTTP، دسته‌بندی خطاها برحسب نوع، شاخه‌بندی زمان‌محور و استفاده از ثابت‌ها را مرور می‌کند و در کنار آن به نکات سبک و کارایی اشاره دارد. جمع‌بندی این است که با رعایت چند قاعده ساده و پرهیز از دام‌های متداول، switch در Go ابزاری شفاف، قابل نگهداری و گاه سریع‌تر از شرط‌های زنجیره‌ای خواهد بود.

#Go #Golang #GolangWeekly #switch #TypeSwitch #GoTips #Programming #Backend

🟣لینک مقاله:
https://golangweekly.com/link/176626/web


👑 @gopher_academy