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

پست پین رو بخونید
https://news.1rj.ru/str/dev_perfects/455


ارتباط:
https://news.1rj.ru/str/HidenChat_Bot?start=936082426
Download Telegram
اگر دات‌نت کار هستی و علاقه داری هوش مصنوعی رو تو پروژه‌هات استفاده کنی، این پست مال توعه!
همه می‌دونیم که هوش مصنوعی داره با سرعت وارد همه حوزه‌ها میشه، اما ترکیبش با توسعه Backend در دات‌نت واقعا یه سطح بالاتر از کار روزمره‌ست.
یکی از ابزارهایی که حتما باید بشناسید، MCP یا Model Context Protocol هست.
پروتکل MCP یه پروتکل استاندارد برای ارتباط بین مدل‌های زبانی (LLM) و ابزارها یا منابع خارجیه.
با MCP می‌تونیم:
مدل‌های زبانی رو به APIها، دیتابیس‌ها یا ابزارهای دلخواه وصل کنیم.
چند ابزار مختلف رو با هم چین کنیم و فرآیندهای پیچیده بسازیم.
مطمئن باشیم که ارتباط بین Agent و ابزارها استاندارد، قابل اطمینان و قابل توسعه هست.
به زبان ساده:
پروتکل MCP پلیه بین هوش مصنوعی و دنیای واقعی داده‌ها.

چرا تو دات‌نت کاربردیه؟
با Microsoft Agent Framework در دات‌نت، شما می‌تونید:
- ایجنت‌های هوشمند بسازید که قادرن چندمرحله‌ای تصمیم بگیرن.
- ابزارهای خارجی (Tools) رو به Agent اضافه کنید، مثل جستجوی اطلاعات شرکت‌ها، گرفتن جزئیات، تحلیل و جمع‌بندی.
- با MCP، Agent رو مستقل از API خاص بسازید، فقط با رعایت پروتکل JSON-RPC.
- فرآیندهای پیچیده هوشمندانه بسازید: جستجو → تحلیل → پاسخ به کاربر.
مثال کاربردی

فرض کنید می‌خواید یه چت‌بات تجاری هوشمند بسازید که اطلاعات شرکت‌های ایرانی رو از Rasmio بگیره و تحلیل کنه، کد نوشته شده در عکس با Microsoft Agent Framework و MCP.
جمع‌بندی
ابزار MCP یه ابزار فوق‌العاده برای هر کسیه که می‌خواد:
- هوش مصنوعی رو به پروژه‌های واقعی دات‌نت بیاره
- ایجنت‌های چندمرحله‌ای و هوشمند بسازه
- داده‌ها و ابزارهای خارجی رو به راحتی با AI ترکیب کنه

نکته نهایی:
اگه دنبال یه راهکار مدرن، استاندارد و قدرتمند برای AI در .NET هستید، MCP بهترین گزینه‌ست.
با همین ابزار می‌تونید از یک CLI ساده تا یک سیستم هوشمند تجاری واقعی بسازید.

@DevTwitter | <nahid moradi/>
Forwarded from 🎄 یک برنامه نویس تنبل (Lazy 🌱)
🔶 به تازگی برای جامعه لاراول کاران وب سایت Laramap رونمایی شده که محل استقرار برنامه نویسان لاراول در کشورها رو نشان می دهد.

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

https://laramap.dev

#لاراول

@TheRaymondDev
Forwarded from Linuxor ?
بابا انقدر کار کار نکنید من خودم بیکارم، چهار تا از این پستای لینوکسورو ببرین توی لینکدین کپی کنید چهار نفر لایک و کامنتتون می‌کنن و شبکه ارتباطیتون گسترش پیدا می‌کنه و در های بسته به روتون باز می‌شه.

(من که مشکلی ندارم با کپی)


@Linuxor
Forwarded from 🎄 یک برنامه نویس تنبل (Lazy 🌱)
🔶 با اینکه افزونه WP Statistics ایرانی هست و خیلی معروفه اما با این حجم بازدیدی که ثبت میشه در واقعیت سایت وردپرس که روی هاست اشتراکی رو نابود می کند.

۱ میلیون بازدید ثبت بشه که ۱۸۰ مگ 💀 حجم دیتابیس برای افزونه WP Statistics تولید می کند و به دلیل اینکه جدول های زیادی برای ثبت چنین داده های اضافی وجود دارد.

#وردپرس

@TheRaymondDev
Forwarded from AiSegaro 👾
Media is too big
VIEW IN TELEGRAM
⚠️این یک پادکست عادی نیست، یک جلسه سه ساعته برای کشف نقشه‌ راه آینده است!🚨

این ویدیو از پادکست "تجربه جو روگان" (Joe Rogan Experience) است که با حضور ایلان ماسک ضبط شده است.با توجه به طولانی بودن ویدیو (بیش از ۳ ساعت) در سه قسمت قرار داده میشود.

🎥 قسمت سوم - آخرین قسمت

🚀 شهر جدید ماسک
👽 پیمان محرمانه: ماسک به جو روگان قول می‌دهد که اگر اسپیس‌ایکس از وجود هرگونه شواهد فضایی یا بیگانگان مطلع شود، قبل از هر کس دیگری، آن را در این پادکست فاش خواهد کرد! و ...

〰️〰️〰️〰️〰️〰️
برای ترجمه این ویدیو زمان و دقت و وسواس زیادی به کار گرفته شده , در صورتی که مایل بودید میتونید از لینک زیر دونیت کنیدتا قسمت های بعدی و موضوعات بیشتری پوشش داده شود.
🌎 donate.isega.ro
〰️〰️〰️〰️〰️〰️

📽 زیرنویس فارسی
🧠 مناسب برای همه، چه مبتدی چه حرفه‌ای
🌐 ترجمه این ویدیو با وب‌سایت isega.ro انجام شده — حتماً سر بزن!
📌 برای دیدن قسمت‌های بعدی کانال رو دنبال کن:
📺🌐 @AiSegaro
🚀 هر روز یک قدم نزدیک‌تر به آینده‌ای هوشمند!
📤 بازنشر آزاد با ذکر منبع 🙏❤️
نسخه ۶ از #فیلترشکن رایگان بگذر برای گوشی‌های اندروید در دسترس قرار گرفت.
افزایش عملکرد برنامه و بهبود فرایند اتصال، اضافه‌شدن قابلیت تست سرعت و بازطراحی رابط کاربری، تغییرات نسخه جدید این‌برنامه هستند.

👉 github.com/Begzar/BegzarApp/releases/latest

🔍 ircf.space/software
@ircfspace
Forwarded from یه شعر (Poem Bot)
مولانا | دیوان شمس | رباعیات | رباعی شمارهٔ ۱۳۹

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

#مولانا | گنجور
📍@iipoem
Forwarded from Gopher Academy
🔵 عنوان مقاله
Revisiting Interface Segregation in Go

🟢 خلاصه مقاله:
این مطلب «Interface Segregation Principle (ISP)» را از منظر Go مرور می‌کند: مشتری نباید به متدهایی وابسته شود که از آن‌ها استفاده نمی‌کند. در Go، راهکارهای رایج شامل ساختن رابط‌های کوچک و رفتاری، تعریف رابط‌ها در محل استفاده، «پذیرفتن interface و برگرداندن نوع‌های concrete»، و الهام گرفتن از نمونه‌های استاندارد مثل io.Reader و io.Writer است.

مشکل وقتی پیش می‌آید که یک پکیج، رابط‌های چاق و همه‌چیزدار صادر می‌کند؛ این کار تغییرات را سخت و پیاده‌سازی‌ها را پر از متدهای بی‌مصرف می‌کند. بهتر است رابط‌های کوچک را ترکیب یا embed کنیم، فقط وقتی واقعاً لازم است سراغ رابط‌های بزرگ برویم، و از میان‌افزارها/adapterها برای سازگاری در مسیر ریفکتور کمک بگیریم.

راهبرد عملی: ابتدا پیاده‌سازی‌های concrete بسازید، بعد بر اساس نیاز واقعی رابط استخراج کنید؛ مجموعه‌متدها را کوچک نگه دارید، برای تست از فیک/ماک بهره ببرید، و APIها را تدریجی تکامل دهید. با وجود generics هم باید از تعمیم بی‌جا پرهیز کرد و رابط‌های runtime را بر رفتار متمرکز نگه داشت. نتیجه پایبندی به ISP در Go، کدی ساده‌تر برای تست، نگهداشت و توسعه است؛ نکاتی که در تازه‌ترین مطلب معرفی‌شده توسط Golang Weekly نیز برجسته شده‌اند.

#Go #Golang #InterfaceSegregation #ISP #GoInterfaces #SoftwareDesign #Refactoring #GolangWeekly

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


👑 @gopher_academy
اگر مثل من حوصله ندارید که فرانت بزنید

برید
https://stitch.withgoogle.com

یه سری توضیحات بدید براتون UI طراحی میکنه که هم فیگما میده و هم html

بعد html صفحات رو دانلود کنید.
حالا Vue, React... هرچی که میخواید رو init کنید.

به واسطه‌ی cursor, Cline,Kilo... بگید که تبدیل کنه براتون

@DevTwitter | <Mahmoud Eskandari/>
Forwarded from Meitix
دو نوع استراتژی برای کش cdn داریم: پول بیس و پوش بیس

توی push-based cdn خودت مسئول فرستادن محتوا به سرورهای cdn هستی. یعنی برعکس pull که cdn خودش موقع درخواست می‌ره فایل رو از origin می‌کشه، اینجا باید تو موقع deploy فایل‌هارو “push” کنی داخل شبکه‌ی cdn. معمولا با یه پایپ لاین انجام میشه: build می‌سازی، فشرده می‌کنی، بعد با api یا cli فایل‌هارو می‌فرستی cdn اونارو بین سرورها پخش می‌کنه تا همیشه آماده‌ی سرو باشن. اینطوری اولین درخواست سریع‌تره چون همه چیز از قبل روی edge نشسته، ولی مسئولیت sync و invalidate نسخه‌های جدید با خودته.

و pull based هم اینجوریه اولین نفری که درخواست میکنه میره از سرور میگیره و کش میکنه برا بعدیا
با این ریپو می‌تونید داکر ایمیج رو به فایل اجرایی ویندوز تبدیل کنید
https://github.com/rzane/docker2exe

@DevTwitter
🚀داخل مرورگر، کدهای اسمبلی x86-64 بنویس، اجرا و دیباگ کن
سایت x86-64 Playground یک ویرایشگر، شبیه‌ساز و دیباگر آنلاین برای معماری x86-64 است. می‌توانی مستقیماً در مرورگر بنویسی، کامپایل کنی، اجرا کنی، و حتی فایل‌های ELF لینوکسی را آپلود و تحلیل کنی


🎯ویژگی‌ها:
🔹پشتیبانی از اسمبلرهایی مثل GNU AS، FASM، NASM.
🔹رابط دیباگر شبیه GDB: می‌توانی کنترل مرحله‌به‌مرحله (step)، مشاهده رجیسترها، حافظه، و disassembly را انجام دهی.
🔹اجرای کل محیط x86-64-Linux در داخل مرورگر: همهٔ کدها و ابزارها سمت کلاینت اجرا می‌شوند و نیاز به سرور نیست

🧩 برای چه کسانی مناسبه؟
دانشجویان امنیت، مهندسی معکوس، یا کسانی که می‌خواهند معماری و اسمبلی را “از نزدیک” ببینند😎
مربیان و آموزشگران (مثل خود مهرداد😁) که می‌خواهند مفاهیم معماری، حافظه، رِجیسترها را به صورت تعاملی به دانش‌آموزانشان آموزش دهند.

✔️ مزایای اصلی
بدون نصب: فقط مرورگر، اینجا کلیک کن
تقریبا آفلاین: پس از لود اولیه، ممکنه بدون اتصال اینترنت هم کار کند.
کد خودت را آپلود کن: فایل ELF لینوکسی را اپلود و در محیط اجرا کن.
منبع باز پروژه در GitHub
@MehrdadLinuxchannel
اینترنت طبقاتی = اینترنت تخصصی

@DevTwitter
Forwarded from linuxtnt(linux tips and tricks) (hosein seilany https://seilany.ir/)
⭐️اگر می‌خواهید:
🔹دمای CPU پایین‌تر و پایداری بیشتر داشته باشی
🔹زمان Context Switch بین threadها کاهش پیدا کنه
🔹فقط از هسته‌های فیزیکی واقعی استفاده بشه
🔹هسته‌های منطقی (Hyper-Threading/SMT) خاموش بشود
🔹هر فرآیند منابع کامل یک core را در اختیار داشته باشه
🔹 کارایی بهتر در پردازش‌های real-time، بازی‌ها یا سیستم‌های کم‌تأخیر داشته باشی

کافیست Hyper-Threading (Intel) یا SMT (AMD) رو غیرفعال کنی با اضافه کردن یک پارامتر ساده به GRUB:
مراحل سریع:
فایل GRUB رو باز کن با ویرایشگر مورد علاقه‌ات:
sudo nano /etc/default/grub

خط زیر رو پیدا و یا اضافه کن:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nosmt"

فایل رو ذخیره کن و خارج شو.
دستور زیر رو اجرا کن تا تغییرات اعمال بشه:
sudo update-grub
سیستم رو ریستارت کن تا تغییرات فعال بشه.

🔻پست و آموزش بیشتر در وبلاگ آکادمی:
https://learninghive.ir/linux-blogs/
Forwarded from محتوای آزاد سهراب (Sohrab)
فقط برای تفریح!


خب این فیلم رو گرفتم و همون کارهایی رو انجام میدم که توی بلاگ گفتم، یعنی با یک کرنل لینوکس و بیزی‌باکس یک نیمچه توزیع مینیمال می‌سازیم!



تماشا از یوتوب

تماشا از پیرتوب

تماشا از آپارات 🥴

@SohrabContents
Forwarded from Gopher Academy
💋چی کار می‌کنه sync.Once

تضمین می‌کنه یک تابع دقیقاً یک‌بار اجرا بشه حتی اگر چندین goroutine هم‌زمان تلاش کنن اون رو اجرا کنن. متد اصلیش Do(f func()) هست: اولین فراخوانی Do تابع f را اجرا می‌کنه و فراخوانی‌های بعدی هیچ کاری نمی‌کنن (بلوک نمی‌شن؛ فقط بازمی‌گردن).

💋موارد متداول استفاده

* پیاده‌سازی Singleton (یک‌بار ساختن نمونهٔ مشترک).
* بارگذاری تنبل (lazy load) کانفیگ یا منابع سنگین فقط وقتی لازم شدن.
* عمل‌هایی که باید فقط یک‌بار انجام بشن (مثلاً ثبت یک handler، close ای که نباید دوباره انجام بشه، و غیره).

مثال ساده (Singleton)

var instance *MyType
var once sync.Once

func GetInstance() *MyType {
once.Do(func() {
instance = &MyType{ /* init */ }
})
return instance
}


مثال: امن کردن close یک channel`

var once sync.Once
var ch = make(chan struct{})

func safeClose() {
once.Do(func() { close(ch) })
}


💋 نکات و خطرات (خیلی مهم)

1. اگر تابعِ داخل `Do` پانیک کند: در نسخهٔ فعلیِ استاندارد، Do آن فراخوانی را «تمام‌شده» در نظر می‌گیرد — یعنی بعد از پانیک، فراخوانی‌های بعدی Do دیگر f را اجرا نخواهند کرد. (در عمل پانیک به caller برمی‌گردد ولی Once وضعیتِ «انجام‌شده» را علامت می‌زند). پس اگر f ممکن است پانیک کند یا نیاز به retry دارید، sync.Once ممکن است مناسبِ کامل نباشد.

> (نکته: در Go 1.21 به‌علاوه توابعی مثل OnceFunc / OnceValue اضافه شدند که رفتار پانیک/بازگردانی را متفاوت ارائه می‌دهند؛ خوب است اگر از این ورژن‌ها استفاده می‌کنید نگاهی به مستندات بیندازید).

2.ا `Once` را بعد از استفاده کپی نکنید — کپی کردن یک Once بعد از اولین استفاده خطا/رفتار غیرمنتظره ایجاد می‌کند.
3. تابعِ داخل `Do` نباید خودش `Do` را صدا بزند (یا باعث قفل/deadlock شود). اگر f در همان Once دوباره Do را فراخوانی کند، قفل/deadlock یا رفتار نامناسب ممکن است رخ دهد. (به‌صورت کلی از بلوک‌های طولانی یا عملیات که ممکن است بلوکه شوند داخل f خودداری کنید).

4. ا`Do` مقدار/خطا برنمی‌گرداند — اگر تابع شما ممکن است خطا داشته باشد و بخواهید آن را به callerها برگردانید، معمولاً از pattern زیر استفاده می‌کنند:

var once sync.Once
var cfg Config
var cfgErr error

func LoadConfig() error {
once.Do(func() {
cfg, cfgErr = loadFromDisk()
})
return cfgErr
}


اما دقت کنید: اگر loadFromDisk پانیک کند یا با خطاهای خاصی مواجه شود و شما نیاز به retry داشته باشید، این الگو کافی نیست چون Do بعد از اولین اجرا (حتی اگر پانیک شد) اجازهٔ تکرار نمی‌دهد.

💋 پیشنهاد وقتی می‌خواهید retry یا مقدار/خطای دقیق داشته باشید

اگر نیاز دارید تابع مقدار برگردونه و رفتارِ retry داشته باشید، باید از الگوهای دیگری استفاده کنید (مثلاً mutex + state machine، یا کانال‌ها، یا بسته‌های ثالث که این الگو رو پیاده‌سازی می‌کنن). در Go 1.21 توابعی مثل OnceValue هم اضافه شدند که کمک می‌کنند مقدار بازگردونده و رفتار پانیک مشخص‌تر بشه
Forwarded from Gopher Academy
بیایید هر دو حالت را ببینیم:
۱️⃣ نمونهٔ Retry‌دار (برای مواقعی که تابع ممکن است خطا بدهد)
۲️⃣ نمونهٔ واقعی‌تر (مثلاً بارگذاری فایل کانفیگ فقط یک‌بار)

---
🧩 مثال ۱: sync.Once با قابلیت Retry

sync.Once به‌صورت پیش‌فرض فقط یک‌بار اجرا می‌شود — حتی اگر اون اجرا شکست بخوره.
اما گاهی می‌خواهیم تابع فقط *در صورت موفقیت* «once» باشد، وگرنه دفعهٔ بعدی دوباره تلاش کند.
برای این کار، باید رفتار خودمان را روی Once شبیه‌سازی کنیم:

package main

import (
"errors"
"fmt"
"sync"
)

type OnceRetry struct {
mu sync.Mutex
done bool
}

func (o *OnceRetry) Do(f func() error) error {
o.mu.Lock()
defer o.mu.Unlock()

if o.done {
return nil
}

err := f()
if err != nil {
return err
}

o.done = true
return nil
}

func main() {
var once OnceRetry
counter := 0

task := func() error {
counter++
if counter < 3 {
fmt.Println(" Failed attempt", counter)
return errors.New("temporary error")
}
fmt.Println(" Success on attempt", counter)
return nil
}

for i := 0; i < 5; i++ {
err := once.Do(task)
if err != nil {
fmt.Println("Error:", err)
}
}

fmt.Println("Final counter =", counter)
}


🟢 نتیجه خروجی:

 Failed attempt 1
Error: temporary error
Failed attempt 2
Error: temporary error
Success on attempt 3
Final counter = 3


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

🧱 مثال ۲: بارگذاری فایل کانفیگ فقط یک‌بار (Real-world)

package main

import (
"encoding/json"
"fmt"
"os"
"sync"
)

type Config struct {
Port int `json:"port"`
Mode string `json:"mode"`
}

var (
cfg Config
cfgErr error
cfgOnce sync.Once
)

func LoadConfig() (Config, error) {
cfgOnce.Do(func() {
fmt.Println("📁 Reading config.json only once...")
data, err := os.ReadFile("config.json")
if err != nil {
cfgErr = err
return
}
cfgErr = json.Unmarshal(data, &cfg)
})
return cfg, cfgErr
}

func main() {
for i := 0; i < 3; i++ {
c, err := LoadConfig()
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Loaded config:", c)
}
}
}


🔹 حتی اگر LoadConfig() چندبار فراخوانی شود، فایل فقط یک‌بار خوانده می‌شود.
🔹 در برنامه‌های بزرگ (microserviceها، سرورها، یا SDKها) این pattern خیلی رایج است.
Forwarded from محتوای آزاد سهراب (Sohrab)
این ویدئو چون محتوای ارائه دانشگاهم بود زیاد چیزی رو پوشش ندادم داخلش.


یک ویدئو دیگه ضبط می‌کنم و یک توزیع می‌سازیم با این استک:

musl, dinit, busybox

حالا بجای dinit احتمالا از runit استفاده کنم ولی از اونجایی که dinit رو خیلی وقته می‌خوام امتحان کنم احتمالا اون رو استفاده کنم.


اگر بتونم مشکل استک‌نتورک بیزی‌باکس رو هم حل کنم از brew به عنوان مدیربسته استفاده می‌کنیم.


اگر هم پیشنهادی دارید توی کامنت‌ها بگید.

@SohrabContents