Mahi in Tech – Telegram
Mahi in Tech
308 subscribers
195 photos
17 videos
8 files
251 links
Download Telegram
گوگل طی هفته‌ی اخیر نسخه‌ی CLI ایجنت Jules رو معرفی کرد.

این ایجنت به اکانت گیت‌هاب شما متصل می‌شه و می‌تونید ازش بخواید تا توی ریپوهاتون مشارکت کنه، اونم به‌طور خودکار تغییرات لازم رو انجام می‌ده و کامیت‌شون می‌کنه، که حالا برای مثال می‌تونه مستقیم مرج‌شون کنه یا PR ایجاد کنه.
و خب اون پشت به‌صورت پیش‌فرض از Gemini 2.5 Pro استفاده می‌کنه. (آخرین مدل)

یک‌سری قابلیت‌های دیگه هم داره که خوندنشون خالی از لطف نیست:

jules.google
1👍4🙊1
Forwarded from Easy Microservices (Mahdi)
سرچ فازی Fuzzy Search
یکی از رفتارهای پرتکرار کاربران در اپلیکیشن‌ها و سیستم‌های جستجو، اینه که خیلی وقت‌ها کل عبارتی که دنبالش هستند تایپ نمیکنند، یا کلمه‌ای رو اشتباه تایپ می‌کنن. اما نتیجه؟
صفحه‌ای خالی از داده، یا پیشنهادهایی که ربطی به نیت واقعی کاربر ندارن.

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

از همین نگاه، پروژه‌ی Fuzzy Search متولد شد.

برای مطالعه بیشتر و ریپو گیت هاب لینک زیر ببینید
https://www.linkedin.com/feed/update/urn:li:activity:7383751931095232512/?commentUrn=urn%3Ali%3Acomment%3A(activity%3A7383751931095232512%2C7383772897057734657)&dashCommentUrn=urn%3Ali%3Afsd_comment%3A(7383772897057734657%2Curn%3Ali%3Aactivity%3A7383751931095232512)#
2🙊1
سرویس agentrouter فقط با ثبت‌نام بهتون مقدار قابل توجهی کردیت می‌ده که خب دسترسی به api مدل‌هایی مثل Claude 4.5 و GPT 5 رو مهیا می‌کنه.
حالا درسته که چینی هست ولی خب به دو کلیک می‌ارزه.

https://agentrouter.org/
1👻2🙊1
Forwarded from Agora (Alireza)
فرض کنید که می‌خوایید عبارتی رو گوگل کنید ولی گوگل نه بدونه چی ازش پرسیدین و نه بدونه چه جوابی به شما داده ولی با این حال جوابش به شما متناسب بوده.

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

یا بذارید یک کم عمیق تری بشیم. فرض کنید شما یک password manager دارید که رمز‌هاتون رو encrypt شده نگه‌داری کرده. می‌خوایید وقتی که برنامه لود شد و پیچیدگی‌های رمز‌هاتون رو بررسی می‌کرد، حتی دامپ مموری و یا دامپ جیستر‌های CPU هیچ کدوم از اطلاعات شما رو لو نده و همچنان اون‌ها encrypted باقی‌ بمونند و در عین‌حال فیچر بررسی پیچیدگی پسورد منیجیرتون به درستی عمل کرده باشه.

ما می‌دونیم که بالاخره در یک مرحله‌ای دیتا باید توی RAM لود بشه یا وقتی CPU می‌خواد که روی داده‌ها insturctionهاش رو اجرا کنه، باید خود دیتا (و نه encryptشده‌ش) رو روی رجیستر‌هاش Fetch کنه. پس نمیشه که ما بدون رمزگشایی داده و در اختیار قرار دادن کلید روی داده‌ها پردازش کنیم. درسته؟ نه!

خیلی جالبه که رمز‌گذاری وجود داره که این امکان رو میده تا بدون این که داده رو decrypt کنیم روی اون پردازش کنیم یا دقیق‌تر، اون رو به یک تابع بدیم و خروجی اون تابع عیناً مشابه خروجی تابع بر روی دیتای رمز نشده باشه :

Fully Homomorphic Encryption
Homomorphic encryption is a form of encryption that allows computations to be performed on encrypted data without first having to decrypt it.[1] The resulting computations are left in an encrypted form which, when decrypted, result in an output that is identical to that of the operations performed on the unencrypted data. Homomorphic encryption can be used for privacy-preserving outsourced storage and computation. This allows data to be encrypted and outsourced to commercial cloud environments for processing, all while encrypted.



علارغم این که با این روش میشه چرخه‌ی حریم‌شخصی و محرمانگی رو کامل برقرار کرد و الگوریتم رمزگذاری جدیدی نیست، با این‌حال استفاده ازش چندان همه‌گیر نشده. یکی از اشکالات اساسی‌ش هزینه‌ی پردازشی بالای اونه. با تمام این‌ها، پیشرفت‌های زیادی کرده و هر چند سال نسل‌های جدید از اون منتشر میشه که مشکلات نسل‌های قبلی رو به شکلی مرتفع کردن و از طرفی سرعت پردازش روی داده‌های رمز‌شده سالانه ۸ برابر بیشتر میشه و کم کم داره داره جای خودش رو روی سیستم‌های real-world پیدا می‌کنه. مثلا اپل پستی روی ۲۰۱۴ منتشر کرده که از دیتاست‌های رمز شده در مسئله‌های Nearest Neighbor Searchش برای حفظ حریم خصوصی کاربر‌هاش استفاده میکنه:
Combining Machine Learning and Homomorphic Encryption in the Apple Ecosystem


توی این ترد Hackernews نظر بقیه رو راجع‌بهش بخونید.
اگر به جزئیات پیاده‌سازی و ریاضی پشتش بیشتر علاقه دارید این تکست‌بوک میتونه بدرد بخوره. (همون منبع ولی به صورت HTML)
پیاده‌سازی اوپن‌سورسی هم از این الگوریتم وجود داره که از اینجا می‌تونید بررسی کنید.
👍2🙊2
یکی از الگوریتم‌های پراستفاده برای Load Balancing, الگوریتم Round-Robin هست. همون‌طور که از اسم‌ش پیداست، خیلی ساده میاد و درخواست‌ها رو بین سرورها تقسیم می‌کنه تا فشار روی مقصد خاصی نیفته:

Request 1 -> Server A  
Request 2 -> Server B
Request 3 -> Server C
Request 4 -> Server A
Request 5 -> Server B
Request 6 -> Server C
...


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

برای حل این مشکل، از روشی به‌نام Weighted Round-Robin استفاده می‌کنیم. این روش خیلی ساده به هر مقصد یک وزن ثابت اختصاص می‌ده.
مثلاً اگه سرور A وزنش ۳ باشه و سرور B با منابع بیشتر وزنش ۵، در این صورت از هر ۸ درخواست، ۵‌ تا به سرور B و ۳ ‌تا به سرور A می‌رن.
از نظر پیاده‌سازی هم تفاوت خاصی از لحاظ پیچیدگی یا پرفورمنس نداره.

خب، به‌نظر میاد مشکل حل شد، نه؟ آره، ولی هنوز یه مسئله هست 😄
تعیین این وزن‌ها خودش کار سختیه،‌ هم از نظر پیدا کردن مقدار مناسب، هم به خاطر ایستا بودنشون. در عمل، به‌سختی می‌شه به نسبت بهینه رسید.

اینجا روش Dynamic Weighted Round-Robin وارد می‌شه.
این روش همون Weighted Round-Robin هست، با این تفاوت که وزن‌ها به‌صورت داینامیک و (مثلا) براساس سلامت سرورها (مثل response time، error rate و CPU load) به‌صورت تنظیم می‌شن.
در نتیجه، توزیع ترافیک به‌شکل adaptive و کارآمدتری انجام می‌گیره. مثلاً وزن هر سرور می‌تونه بین 0.2x تا 2x مقدار اولیه‌ش تغییر کنه و به‌صورت تدریجی در بک‌گراند با توجه به health score به‌روزرسانی بشه.
که خب، گزینه‌ی خیلی خوبی برای محیط‌های پویا و در حال تغییره.

نمونه‌ی عملی با CSharp:
یک نمونه‌ی واقعی از این روش رو اینجا سعی کردم پیاده‌سازی کنم، بر بستر YARP.
github.com/MahdiyarGHD/dwrr-loadbalancer
اگر هم مشکلی دیدید می‌تونید PR/Issue ایجاد کنید، باقی توضیحات توی readme پروژه هست.
1🔥8👍3🕊1🙊1
طبق روال هرسال، NET Conf. از امروز شروع شده و تا سه روز دیگه ادامه داره. بریم برای 10 NET. 😄

https://www.dotnetconf.net
🎉4🙊1
یکی از مواردی که توی EF 10 برام جالب بوده، قابلیت استفاده و تعریف چندین query filter هست.
همون‌طور که توی تصویر مشخص هست، می‌تونیم یک‌سری filterـهای همگانی تعریف کنیم و هرجا نیاز بود نادیده‌شون بگیریم.
🙊1
وقتی صحبت از سیستم‌های رزرو می‌شه، اولین چالشی که به ذهن میاد Race Condition هست. فرض کن دو نفر همزمان می‌خوان آخرین صندلی یک پرواز رو رزرو کنن، اگه سیستم درست طراحی نشده باشه، ممکنه هر دو رزرو ثبت بشه و بعد دردسر پیش بیاد.

برای همین، طی این پروژه (رزرو پرواز) سعی کردم با استفاده از Distributed Lock روی Redis جلوی این مشکل رو بگیرم. از طرف دیگه، معماری به شکل Vertical Slice و Feature-based طراحی شده تا هر فیچر مستقل و قابل توسعه باشه. روتینگ با Minimal API و Carter انجام شده، ولیدیشن‌ها با FluentValidation، و کل پروژه هم داکرایز شده هست تا راحت بالا بیاد. برای اطمینان از درست کار کردن بخش‌ها هم Integration Test و Unit Test نوشته شده.

سورس کامل این نمونه رو می‌تونید اینجا ببینید:
github.com/MahdiyarGHD/TravelBookingSystem

🌟 اگر هم ایرادی دیدید خوشحال می‌شم PR/Issue ایجاد کنید.
2🙊9🔥1
Forwarded from Akbari’s Channel
خب گوگل وی اس کد رو فورک کرده و اینو ساخته:

https://antigravity.google/
🙊9❤‍🔥1
ظاهراً مایکروسافت بالاخره تصمیم گرفته روند انتشار ویژوال استودیو رو عوض کنه. از این به بعد به‌جای این‌که هر دو سه سال یه نسخه‌ی جدید بده بیرون، قراره سالانه یه ریلیز جدید از این IDE منتشر کنه.

https://learn.microsoft.com/en-us/visualstudio/releases/2026/release-rhythm
👍4👎1🙊1
net-interview-questions_copy.pdf
3.9 MB
۱۵۰ سوال مصاحبه‌ی فنی دات‌نت از antondevtips.com

پاسخ ندارند ولی خب فقط کافیه سوال رو کپی/پیست کنید برای هر LLM ای.
👍2🙊1
عجیب‌ترین مصاحبه‌‌ی فنی‌ای که تا حالا داشتم برای پوزیشن بک‌اند دولوپر |:
یک برگه A4 شامل تمام تکنولوژی‌هایی که می‌تونید تصورش رو کنید گذاشتن جلوم و گفتن بر حسب درصد بنویس به هرکدوم چقدر تسلط داری :)) حالا تکنولوژی‌ها چی‌ها بودن مثلا؟
PowerPoint, ASP.NET, Word, ASP.NET Core, ... :)))

داشتم خودم رو قانع می‌کردم که دیگه از این بدتر نمی‌شه که، و منتظر مصاحبه‌کننده بودم که بیاد مصاحبه‌ی اصلی رو انجام بده، دیدم یک نفر اومد ۵ صفحه A4 (هرکدوم ۵۰ سوال تشریحی) از تکنولوژی‌ها و لایبرری‌های مرتبط گذاشت جلوم و گفت ۴۰ دقیقه فرصت داری با خودکار و روی کاغذ این‌ها رو به انگلیسی (همین که نگفتند فارسی بی‌نظیره) جواب بدی 🥹 زیاد تلاش خاصی نکردم ولی حتی ۴۰ دقیقه هم فرصت ندادن و سر ۳۰ دقیقه برگشت 😂.
و دیگه احتمالا تا اینجا حدس زده باشید که کل زیرساخت‌شون روی net. framework و asp classic بود 😄

نمی‌دونم والا، شاید مشکل از ما هست و اون درصد تسلط به تکنولوژی‌ها رو ۱۰۰٪ نیستیم 😆.
💔15🤣52🙊1
👨‍💻 در پروژه‌های سی‌شارپی، برای دسترسی به تنظیمات (configuration) به‌صورت strongly-typed، می‌تونیم از سه نوع interface استفاده کنیم (معمولاً از طریق DI)، که هرکدوم کاربرد خاص خودشون رو دارن:


IOptions<T> 
🔹 تنظیمات فقط یک‌بار در زمان راه‌اندازی برنامه خونده و کش می‌شن. 
🔹 مناسب برای تنظیماتی که در زمان اجرا تغییر نمی‌کنن (مثل کلیدهای API یا مقادیر ثابت).


IOptionsSnapshot<T> 
🔹 تنظیمات رو به‌صورت scoped دریافت می‌کنه (مثلاً در هر درخواست HTTP جدید). 
🔹 مناسب برای پروژه‌های وب که نیاز دارن در هر درخواست، آخرین تغییرات تنظیمات رو دریافت کنن.


IOptionsMonitor<T> 
🔹 تنظیمات رو به‌صورت singleton اما real-time ارائه می‌ده. 
🔹 امکان ثبت event برای زمانی که تنظیمات تغییر می‌کنن (OnChange) رو فراهم می‌کنه. 
🔹 مناسب برای سرویس‌های background یا سناریوهایی که نیاز به واکنش به تغییرات تنظیمات در لحظه دارن.

اطلاعات بیشتر:
learn.microsoft.com/en-us/dotnet/core/extensions/options
Please open Telegram to view this post
VIEW IN TELEGRAM
532👌1
👀 چطور توی apiـهامون از درخواست‌های تکراری جلوگیری کنیم؟

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

راه حل: کلید Idempotency
به زبان ساده، Idempotency یعنی «مهم نیست یک درخواست چندبار به سمت سرور ارسال می‌شه، نتیجه‌ی نهایی باید همیشه یکسان باشه و تغییر اضافه در سیستم ایجاد نکنه»

برای پیاده‌سازی این مورد در متدهای POST یا PATCH، می‌تونیم از یک شناسه‌ی یکتا و Idempotency Key استفاده کنیم.

⚙️ پیاده‌سازی: این فرآیند نیاز به همکاری بین کلاینت و بک‌اند داره؛ به عنوان مثال هر زمان که کاربر فرم‌ای رو پر می‌کنه، کلاینت باید یک UUID یا شناسه‌ی یکتا تولید کنه و اون رو در هدر درخواست قرار بده.
X-Idempotency-Key: 123e4567-e89b-12d3-a456-426614174020

نکته‌ی مهم این هست که اگر درخواست به هردلیلی fail شد و کلاینت خواست retry انجام بده، باید همون کلید قبلی ارسال شه.

در سمت سرور هم، باید ‌یک middleware یا مکانیزمی طراحی شه که قبل از رسیدن درخواست به Controller، وجود اون کلید رو چک کنه و درصورت وجود، ریسپانس اون رو مستقیما از Redis برگردونه و کدهای اصلی بیزنس رو اجرا نکنه.
اگر هم وجود نداشت که خب اجازه می‌ده کد اجرا شه و سپس نتیجه‌ی اون رو توی Redis یا هر مکانیزم کش دیگه‌ای ذخیره می‌کنه.
Please open Telegram to view this post
VIEW IN TELEGRAM
19👍4