tech-afternoon
1.25K subscribers
174 photos
6 videos
6 files
169 links
تِک‌افترنون، رویدادی گاه‌به‌گاه است با موضوعات حول معماری و توسعه نرم‌افزار، این کانال هم برای اشتراک اخبار، آموزش، نکاتی حول مهندسی نرم‌افزار، دیتابیس‌، تکنولوژی و مدیریت تولید محصولات نر‌م‌افزاری خواهد بود.
youtube.com/@AminTechTalks/videos
امین مصباحی
Download Telegram
🧐 ورودی GenAI چجوری پردازش می‌شه؟ توی وکتور دیتابیس چی قرار می‌گیره؟

هر ورودی‌ ای که ما به مدل زبانی یا هوش مصنوعی مولد بدیم، از دل یک embedded model عبور می‌کنه، با یک semantic search پردازش می‌شه. پرداختن به محاسبات ریاضی‌اش از حوصله این مطلب فراتره و توی لایه‌ی کاربری هم کاربردی نداره ولی مباحث جالبی هستن که اگر کسی دوست داشت بگه تا مقاله یا کتاب‌های خوبی که می‌تونه کمک کنه معرفی کنم. برای همین توی این پست، به جای رفتن سراغ «مار» بیایم بریم سراغ 🐍
موافقین؟

فرض کنین به یه مدل زبانی، یک عبارت خیلی ساده رو بدیم؛ چی میشه؟ اول باید تبدیل به یه سری عدد اعشاری بشه بعد دیگه هر چی هست تا قبل از مرحله خروجی، عمدتا جبر خطیه! علت اینکه می‌گیم این مدل‌ها واقعا هوشمند نیستن، اینه که فقط یَک‌عالمه مشابهت رو بررسی می‌کنن و شبیه‌ها رو کنار هم می‌چینن. اعجازشون اینه که این یَک‌عالمه یعنی مثلا توی چت‌جی‌پی‌تی ۷۰۰ میلیارد! یعنی نمی‌فهمه سیب احتمال اینکه سرخ یا زرد با سبز باشه کمتر از اینه که بنفش باشه، و اینکه بنفش باشه کمتر از اینه که پشمالو باشه!

یه کد کوچولو نوشتم برای توضیح این داستان:
۲ تا کلمه + یه کاما + علامت تعجب میشه ۱۰۲۴ تا عدد:
Embedding for 'Hello, world!':
Embedding Length: '1024'!


0.017290225, 0.04488248, 0.00056118704, -0.009004725, -0.045384012, 0.008568012, 0.07241785, 0.04243991, 0.047746666, 0.0021948903, 0.007101463,...


از خوبی‌های semantic kernel به جز اینکه نسخه‌های سی‌شارپ، پایتون و جاوا داره اینه که خیلی کنترل خوبی روی فرایند داخلی بهمون می‌ده و فقط یه rest client برای صدا زدن سرویس‌ها نیست. به سادگی می‌شه امبدینگ‌مدل رو دید... این یه مقدمه ساده بود از اینکه درک کنیم چرا باید از وکتور دیتابیس استفاده کرد. توی وکتور دیتابیس ما کلی عدد داریم، این اعداد از کجا میان؟ بله، از همین امبدینگ‌مدل. پس دلیل اینکه ما برای RAG نیاز به وکتوردیتابیس به جای دیتابیس کلاسیک (مثل RDBMS) داریم.

این کد خیلی کوچیک که نوشتم رو نگاه کنید یا اگر دوست داشتید اجرا کنید. از ollama + یک مدل کوچیک با ۳۳۵ میلیون پارامتر + semantic kernel استفاده کردم، برای دیدن اینکه با یه مدل کوچیک، عبارت Hello World تبدیل به چی می‌شه!

💬 سوال؟ نظر؟
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍2👏2
🤖 مثال RAG با استفاده از Qdrant

وکتور دیتابیس Qdrant یک پایگاه داده برداری (Vector Database) و موتور جستجوی برداری کدبازه که برای ذخیره و جستجوی بردارهای High-dimensional Embeddings طراحی شده. یک ابزار با قابلیت مدیریت حجم بالای داده‌های برداری و با ارائه API ساده ولی در عین حال قدرتمند (مثل gRPC و REST)، ما رو توی پیاده‌سازی سرویس‌های هوشمند و مبتنی بر جستجوی برداری کمک می‌کنن. کارهایی مثل RAG که توی پست‌های قبلی توضیح دادم... البته یه محیط گرافیکی تحت وب خوب هم همراه خودش داره.

حالا برگردیم به مثالی که چند پست قبل توضیح دادم و نمونه ساده‌اش رو توی مموری موقت دیدیم. یعنی RAG قیمت ارز (بهترین مثال برای ما ایرانی‌ها چون به‌روزترین مدل‌های هوش مصنوعی هم داده‌هاشون از نرخ ارز ما خاطرات دوردسته و پیش‌بینی‌اش هم محال؛ پس یقینا فقط RAG باید داشته باشیم براش 😁 )

همون مثال رو با Qdrant نوشتم. البته با PostgreSQL و pgvector هم نوشتم که هنوز فایل راهنماش کامل نشده... (به زودی ایشالا)

📱 📔 کد روی گیت‌هاب

خروجی اینطوریه که اول با داده‌های خام llama 3.2 (نسخه ۳ میلیارد پارامتر) مزخرف می‌نویسه، بعد میریم از bonbast.org نرخ ارز رو آنلاین می‌گیریم، توی وکتور دیتابیس ذخیره می‌کنیم و بعد دوباره همون سوال رو می‌پرسیم، ولی دیگه مزخرف نمی‌نویسه...)

به راحتی Qdrant رو با داکر می‌تونید روی ماشین خودتون اجرا کنید، ollama و مدل llama 3.2 (3b) هم همینطور.

💬 سوال؟ نظر؟ بحث؟
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍3
این روزها که خبر تغییر لایسنس AutoMapper و MediatR و MassTransit به جمع قبلی‌ها یعنی ImageSharp, IdentityServer, Fluent Assertions پیوست که تازه اینا اکوسیستم دات‌نت بودن، و اگر فارغ از اکوسیستم نگاه کنیم Redis و Elastic و... هم اضافه می‌شن؛ خوبه تا فرایند انتخاب تکنولوژی، مدیریت فنی محصول، بودجه‌بندی و... رو مرور کنیم.

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

لذا خوبه تا مسیر اصولی رو یاد بگیریم، کاری که توی تیم‌های بزرگ عموما توسط technology manager هدایت می‌شه. با یه مثال انترپرایز بزنم تا بعدن نسبت به سایز کوچک‌تر بریم جلو:
شما می‌خواهید از کتابخونه A استفاده کنید، اول چک می‌کنید ببینید آیا توی green book سازمان لیست شده یا نه. اگر نشده باشه، جک می‌کنید ببینید کاری که اون کتابخونه قراره انجام بده، در دنیای محصولات تجاری، چقدر هزینه داره؟! و اگر کدباز است، نوع لایسنسش چیه؟ چند نفر توسعه‌دهنده فعال داره؟ کامیونیتی‌اش چقدر بزرگه؟ بنیه مالی این پروژه چجوریه؟ آیا جایگزین کدباز یا تجاری با امکانات مشابه یا حداقل نیاز ما وجود داره؟ و سوالات دیگه‌ای که بهمون کمک کنه تا چیزی رو انتخاب کنیم که آینده محصول تحت تاثیر عمیق قرار نگیره. بعد، موضوع پیاده‌سازی پیش میاد که کد ما چقدر قابلیت تعویض قطعات پازلش رو داره؟ (وابستگی‌ها با چقدر تغییر قابل تغییر هستن؟)

خلاصه اینکه توسعه محصول فقط استفاده از کتابخونه‌ها نیست، انتخاب ابزار هم بخشی از مسیر و نیازمندی‌های دانش و تجربه است. توسعه خیلی از محصولات «غلط اضافی» شرکت‌ها هستند!! (با توجه به استعداد مالی و بنیه فنی و...) کما اینکه تاسیس شرکت و استقلال هم «غلط اضافی» برخی علاقه‌مندانِ پوزیشن مدیرعاملیه....
👍1542
اگر حضرت سعدی در زمانه‌ی ما زیست می‌کرد، احتمالا علاوه بر «دم فرو بستن به وقت گفتن، و گفتن به وقت خاموشی» دو چیز دیگه رو هم طَیرهٔ عقل اعلام می‌فرمود:

۱: ست کردن جلسه بدون ذکر رئوس مطالب توی ایمیل دعوت
۲: ساختن تیکتی که توضیح و acceptance criteria دقیق نداره

* طَیرهٔ عقل: سبک‌ مغزی
** این لیست مستعد کامل شدن تا ده‌ها مورد طَیرهٔ عقل است، توی کامنت بنویسید، حضرت سعدی حتمن مطالعه خواهند کرد و در نسخ جدید گلستان اعمال خواهند کرد 🤓
😁14👍3👏2
🚀 تبدیل ریپازیتوری GitHub به MCP!

یه پروژه جذاب و کاربردی برای اتصال AI Assistentها...

هم‌زمان با دسترسی عمومی Agent mode و پشتیبانی از MCP روی VSCode
Please open Telegram to view this post
VIEW IN TELEGRAM
👍63🔥2
🎂 تولد ۲۰ سالگی git مبارک!

پروژه شخصی (بخوانید دلی) لینوس توروالدز که تبدیل به ابزار روزمره ما شد...

اگر دوست دارید بدونید نبوغ و پشتکار این مرد چقدره، همین بس که اولین نسخه‌ی کار بکن git طی ۵ روز نوشته شد!

پیشنهاد می‌کنم خوب یاد بگیرید، در مورد معماری و فایل‌سیستم git و VFSForGit بخونید که بسی جذابه!

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

💬 شما گیت رو خام خام استفاده می‌کنید یا با کلاینت‌های GUI؟؟
Please open Telegram to view this post
VIEW IN TELEGRAM
👍127
🔄 معرفی Agent2Agent Protocol (A2A) از گوگل!

امروز گوگل توی کنفرانس Cloud Next پروتکل جدید Agent2Agent (A2A) رو معرفی کرد. این پروتکل باعث می‌شه تا AI‌ها بدون توجه به این‌که با چه فریم‌ورکی ساخته شدن، بتونن با هم ارتباط برقرار کنن. یعنی دیگه مثل این نیست که هر مدل باید به مدل خودش حرف بزنه؛ حالا همه می‌تونن با هم گپ بزنن! A2A تکمیل‌کننده مسیر Model Context Protocol (MCP) از آنتروپیک است (شرکت خالق Claude.ai)

تو این سیستم، یه تقسیم‌بندی ساده داریم: یه جوری AI‌ها به دو دسته تقسیم می‌شن؛ یه دسته که "کلاینت" هستن و درخواست‌ها رو می‌دن و دسته‌ی دیگه که "ریموت"، یعنی درخواست‌ها رو انجام می‌دن. این یه جور «قرارداد ارتباطی» به وسیله استانداردهای HTTP, SSE, و JSON-RPC فراهم می‌کنه و حتی از احراز هویت و سطح دسترسی هم پشتیبانی می‌کنه. پروتکل از قابلیت‌های مورد نیاز برای کارهای طولانی مدت هم پشتیبانی می‌کنه، یعنی می‌تونه بازخوردها، اعلان‌ها و وضعیت روز رو به صورت لحظه‌ای به شما گزارش بده.

همچنین لازم بدونید که گوگل تاکید می‌کنه این پروتکل، Agent2Agent، قرار نیست جایگزین Model Context Protocol (MCP) بشه؛ بلکه یک مکمل برای اون محسوب می‌شه. در واقع MCP برای دسترسی به داده‌ها به صورت استاندارد استفاده می‌شه و Agent2Agent هم برای ارتباط مستقیم بین مدل‌ها به کار میره. در کنار همکاری بیش از ۵۰ شریک فناوری معروف مثل Atlassian, Box, MongoDB, Salesforce و ...، این نوآوری گام مهمی توی تقویت همکاری هوش مصنوعی‌ها بین خودشونه.
👍10🔥211
مسعود دانش‌پور عزیز، برای تیمش توی دیجیکالا دنبال چند مهندس نرم‌افزار خبره می گرده که از پس تراکنش های بسیار بالا مثل بلک فرایدی بر بیان، طبیعتا افرادی که خودشون رو واجد شرایط بدونن اپلای می‌کنن و براشون آرزوی موفقیت دارم.

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

اگر جلسه آنلاین با محوریت بررسی این شرح شغلی و موارد مشابه براتون جالبه لطفا با ایموجی بگید تا اگر حدنصابی مناسبی داشت، برای روز یکشنبه یه دورهمی آنلاین داشته باشیم 😊

اگر حتمن شرکت می‌کنید: ⚙️
اگر شاید شرکت می‌کنید: 🤓
Please open Telegram to view this post
VIEW IN TELEGRAM
40🤓18
📔 قابلیت Extension members در سی‌شارپ ۱۴

بالاخره بعد از کش‌وقوس‌های فراوون (شروع جدی‌اش از سال ۲۰۲۱ بود) بالاخره امکان Extension members به سی‌شارپ ۱۴ (نسخه پیش‌نمایش ۳) اومد.

از سی‌شارپ ۳ می‌تونیم اکستنشن‌متد برای تایپ‌ها بنویسیم. ولی حالا دیگه محدود به متد نیستیم و property و static method هم پشتیبانی می‌شه.

توی سی‌شارپ ۱۴ یه بلاک جدید به نام extension داریم:

public static class Extensions
{
extension(IEnumerable<int> source)
{
public IEnumerable<int> WhereGreaterThan(int threshold)
=> source.Where(x => x > threshold);

public bool IsEmpty
=> !source.Any();
}
}

توی مثال بالا، عملا دیگه از this استفاده نشده، قبلا همین رو باید اینجوری می‌نوشتیم:
WhereGreaterThan(this IEnumerable<int> source, int threshold)

در حالیکه:

*️⃣بخش extension(IEnumerable<int> source): اینجا نشون می‌ده که بلاک اکستنشن با یک receiver از نوع IEnumerable<int> شروع شده.

*️⃣متد WhereGreaterThan: بدون نیاز به استفاده از this، چون receiver به صورت ضمنی تو بلاک extenstion در دسترسه.

*️⃣پراپرتی IsEmpty: هم به راحتی بر اساس receiver تعریف شده که چک می‌کنه آیا لیست خالی هست یا نه.

حتی اینو می‌تونید به صورت جنریک هم بنویسید:
extension<T>(IEnumerable<T> source)
where T : INumber<T>
{
public IEnumerable<T> WhereGreaterThan(T threshold)
=> source.Where(x => x > threshold);

public bool IsEmpty
=> !source.Any();
}

🔗 رفرنس
🔗 مباحثات اولیه

💬 به نظرتون چقدر کاربردیه؟
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍6👏1
ارزش «باور به توانایی»، اعتبار فردی...

احتمالا با خانم یعنی میرا موراتی، CTO سابق OpenAI که از ابتدای طراحی ChatGPT نقش داشت و چند وقت پیش استعفا داد تا دنبال رویای خودش بره آشنایی دارین.

استارتاپ ایشون که الان تعداد انگشت‌شمار! کارمند داره و هنوز محصولی بیرون نداده، یعنی Thinking Machines Lab الان ۲ میلیارد دلار جذب سرمایه (خطرپذیر) داشته.

این نمونه واقعی اینه که اعتبار و باوری که آدم‌ها از خودشون می‌سازن، چقدر می‌تونه ارزشمند باشه.

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

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

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

فقط هم محدود به نرم‌افزار نیست، «گاها» حتی اون آدم‌ها وارد حوزه جدیدی شدن که هم‌پوشانی کاملی با تجربیات قبلی‌شون نداشته.

یه سری مهارت‌های نَرم (soft skills) وجود داره که می‌تونه کمک کنه تا hard skills ما طوری پرورش پیدا کنه که صاحب «اعتبار و اعتماد» اجرایی بشیم، و شاید این یکی از مهم‌ترین دستاوردهای کاری یک فرد بتونه باشه، یعنی دیگرانی باشن که باور و اعتماد داشته باشن به توانایی به انجام رسوندن کارهای دشوار یا جدید...

💬 تجربه‌ای داشتید؟ نظری دارین؟
Please open Telegram to view this post
VIEW IN TELEGRAM
💯7👍5👏4
tech-afternoon
مسعود دانش‌پور عزیز، برای تیمش توی دیجیکالا دنبال چند مهندس نرم‌افزار خبره می گرده که از پس تراکنش های بسیار بالا مثل بلک فرایدی بر بیان، طبیعتا افرادی که خودشون رو واجد شرایط بدونن اپلای می‌کنن و براشون آرزوی موفقیت دارم. به نظرم اومد شاید دوستانی باشن که…
🔔 جلسه مرور مهارت‌ها و مسیر رسیدن به موقعیت‌های شغلی که بتونه از پس چالش‌های پلتفرم‌های با تعداد درخواست بالای هم‌زمان و پیچیدگی‌های سیستمی بر بیاد...

(⚠️ زمان جلسه تغییر کرده است!️) یکشنبه ۳۱ فروردین (۲۰ اپریل)؛ ساعت ۱۹:۰۰ تا ۲۰:۰۰ ۱۷:۳۰ - ۱۸:۳۰ (به وقت تهران)
لینک ثبت‌نام

* «اگر و اگر» تعداد افراد زیاد باشه «و» تنوع بین «جونیور به مدیور» و «مدیور به سنیور» به حد خوبی برسه، شاید همون یکشنبه ولی دو جلسه متناسب با سطوح مختلف برگزار شه.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🙏4🔥2
📱 ویدیو جلسه مرور مهارت‌های مورد نیاز و مسیر رسیدن به مهندس ارشد نرم‌افزار - بخش ۱

🔄 فایل اسلایدها رو هم در بخش کامنت قرار دادم

ممنون از همه دوستانی که تشریف آوردن، امیدوارم هر چه زودتر توی جلسه دوم ببینمتون 😊🌱

لینک یوتیوب
Please open Telegram to view this post
VIEW IN TELEGRAM
24🔥4
📝 روش‌هایی برای اولویت‌بندی نیازمندی‌ها


جلسه «مرور مهارت‌های مورد نیاز و مسیر رسیدن به مهندس ارشد نرم‌افزار» رو بر اساس چرخه توسعه نرم‌افزار (SDLC) طرح کردم، و بخش اولش «نیازمندی‌ها و تحلیل (Requirements & Analysis)» بود. چون از روش‌های MoSCoW و Kano Model برای اولویت‌بندی نیازمندی‌ها (Prioritization Techniques) اسم بردم، گفتم شاید بد نباشه برای دوستانی که آشنایی ندارن، کمی توضیح بدم.



وقتی یه تیم محصول یا توسعه تصمیم می‌گیره یه چیزی بسازه یا بهبود بده، معمولاً با کلی پیشنهاد و نیازمندی (requirement) مواجه میشه: از باگ‌های کوچیک گرفته تا فیچرهای کوچیک و بزرگ.
ولی واقعیت اینه که زمان، نیرو و بودجه محدوده (منابع محدود، در مقایسه با نیازهای نامحدود!). پس مهمه بدونیم چی رو باید اول انجام بدیم، چی رو می‌تونیم بذاریم برای بعد، و چی رو فعلاً انجام ندیم.

اینجاست که تکنیک‌های اولویت‌بندی میان وسط. اینا ابزارهایی هستن که کمک می‌کنن:

*️⃣خواسته‌های کاربر، کسب‌وکار و تیم توسعه رو دسته‌بندی کنیم.
*️⃣تصمیم‌های درست‌تری بگیریم.
*️⃣روی چیزهایی تمرکز کنیم که بیشترین تأثیر رو دارن.

دو تا روش محبوب رو اینجا معرفی می‌کنم که می‌تونن کمک کنن. Kano Model و MoSCoW

🔍 مدل اول: Kano – وقتی رضایت کاربر مهمه
مدل Kano از اسم یه پروفسور ژاپنی به اسم «نوری‌آکی کانو» الهام گرفته شده. ایده اصلی اینه که همه فیچرها تأثیر یکسانی روی رضایت کاربر ندارن. بعضیاشون اگه نباشن، کاربر عصبانی میشه. بعضیا اگه باشن، خیلی خوشحال میشه. بعضیا هم بودن یا نبودنش براش فرقی نداره! (کاربر رو ذینفع (stakeholder) هم تعبیر می‌کنیم)

دسته‌بندی ویژگی‌ها توی Kano:
*️⃣گروه Basic Needs (Must-be): چیزایی که انتظار می‌ره حتماً باشن. نبودش فاجعه‌ست ولی بودنش کسی رو شگفت‌زده نمی‌کنه.

*️⃣گروه Performance Needs: هرچی بهترش کنی، رضایت بیشتر میشه (مثلاً سرعت سایت یا دقت جستجو).

*️⃣گروه Excitement Needs (Delighters): قابلیت‌هایی که کاربر انتظار نداره، ولی وقتی می‌بینه خوشحال میشه. (مثل auto-save هوشمند یا تم تیره پیش‌فرض)

*️⃣گروه Indifferent: بودن یا نبودنش خیلی فرقی نمی‌کنه.

*️⃣گروه Reverse: بعضیا ممکنه یه فیچر رو نخوان!

🔧 کاربرد: این مدل خیلی برای مصاحبه با کاربر و طراحی تجربه کاربری خوبه. کمک می‌کنه روی فیچرهایی تمرکز کنی که "دل کاربر رو می‌بره"، نه فقط اونایی که لازمه.
——————————————————-

📦 مدل دوم: MoSCoW – برای اولویت‌بندی سریع و پروژه‌محور
اشتباه نشه؛ MoSCoW یه مخففه و ربطی به شهر مسکو نداره! 😄:

*️⃣گروه Must have: اگه اینا نباشن، محصول کار نمی‌کنه.

*️⃣گروه Should have: مهمن، ولی می‌تونن تاخیر بخورن.

*️⃣گروه Could have: اگه وقت شد اضافه‌شون می‌کنیم.

*️⃣گروه Won’t have (this time): الان انجامش نمی‌دیم، شاید بعداً.

🔧 کاربرد: MoSCoW بیشتر توی مدیریت پروژه و جلسه‌های برنامه‌ریزی اسپرینت استفاده میشه. وقتی می‌خوای با تیم تصمیم بگیری که توی این بازه زمانی رو چی تمرکز کنید.

🧠 اگه خواستی بیشتر بدونی...
اولا هر کاری رو اگر «روشمند» یعنی بر اساس یک مدل بریم جلو، ولو کارهایی که بدیهی به نظر میان، عموما شانس موفقیت بالاتری داریم.

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

روش RICE Scoring – برای اولویت‌بندی عددی و داده‌محور
روش WSJF – مخصوص تیم‌های اجایل و SAFe
روش Opportunity Scoring – مبتنی بر نیازهای پنهان کاربر
روش Feature Buckets – دسته‌بندی فیچرها براساس تأثیر و استراتژی
روش Eisenhower Matrix – ساده ولی کاربردی برای تصمیم‌گیری‌های روزمره



💬 شما از چه روشی برای اولویت دادن به نیازها و کارها استفاده می‌کنی؟
Please open Telegram to view this post
VIEW IN TELEGRAM
12
tech-afternoon
🔔 جلسه مرور مهارت‌ها و مسیر رسیدن به موقعیت‌های شغلی که بتونه از پس چالش‌های پلتفرم‌های با تعداد درخواست بالای هم‌زمان و پیچیدگی‌های سیستمی بر بیاد... (⚠️ زمان جلسه تغییر کرده است!️) یکشنبه ۳۱ فروردین (۲۰ اپریل)؛ ساعت ۱۹:۰۰ تا ۲۰:۰۰ ۱۷:۳۰ - ۱۸:۳۰ (به وقت…
2️⃣ جلسه دوم مرور مهارت‌های مورد نیاز و مسیر رسیدن به مهندس ارشد نرم‌افزا

اگر نظر مثبتی نسبت به جلسه اول «مرور مهارت‌های مورد نیاز و مسیر رسیدن به مهندس ارشد نرم‌افزار» داشتید و فکر می‌کنید ادامه بحث می‌تونه براتون جالب باشه، لطفا از طریق فرم زیر بگید 😊

🗓 برای روز یکشنبه ۷ اردیبهشت (۲۷ اپریل) ساعت ۱۸:۳۰ به وقت تهران

https://forms.gle/ayy2Q3MESKnhrNt3A
Please open Telegram to view this post
VIEW IN TELEGRAM
25
دیدید بعضی‌ها هر کاری میگی نکن، می‌کنن و بالعکس...؟

حالا این ریپو برای همین‌جور آدم‌هاست...
اسمش هم state-of-the-art Shitcode است 😂

فکر کنم نوادگان لقمان حکیم روش contribute می‌کنن 😂

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

پینوشت ۲: لطفا اگر موضوعی هست که فکر می‌کنید بهش بپردازیم می‌تونه مفید باشه، حتمن کامنت کنین 😉
🤣12😁21
🤔 فارغ از هیجان‌زدگی و تحلیل‌های مبتنی بر گمان، خوبه فکر کنیم در فاجعه‌ی بندرعباس، نقش نرم‌افزار و تکنولوژی چی بود؟ نقش مدیرمحصول‌ها تا مدیر تکنولوژی چی بود؟

چیزی که محرز است اینه که کانتینر(ها)ی با محتویاتی مستعد اشتعال یا انفجار در جای نامناسب و بدون مراقبت قرار گرفته. آیا جابجایی و چیدمان کانتینر، در یک اسکله بزرگ، بدون حضور نرم‌افزار ممکنه؟ آیا یک نرم‌افزار بد می‌تونه مسبب تخلف، سوءاستفاده، فساد، یا اهمال‌کاری و چنین فاجعه‌هایی بشه؟ آیا یک مدیر تکنولوژی ناشایست، یک مدیرمحصول بی‌کفایت، یک بیزنس‌آنالیست ابله، می‌تونن جزو متهمین این داغ بزرگ باشن؟

من صحبت از سیستم‌های اتوماسیون بندرگاهی و... که گرون‌قیمت و مشمول تحریم هستن نمی‌کنم. در مورد نرم‌افزار و تکنولوژی‌های ساده‌تری صحبت می‌کنم که «کفایت و دانش» نیاز دارن و «مسئولیت‌پذیری». این اخیر رو اطلاع ندارم ولی با همون اندک تعاملاتی که سال‌ها پیش با افراد، شرکت‌ها، و سازمان‌های مرتبط داشتم؛ نمی‌تونم نقش مدیران بی‌کفایت تکنولوژی و نرم‌افزار، یا حتی توسعه‌دهنده‌ها و تحلیل‌گرهای کم‌دانش و بی‌تفاوت به کم‌دانشی‌شون رو کمرنگ بدونم...

مشکل اینجاست که اینقدر «جان» و «اعداد» تهی از معنی شده که ۷۰ نفر (تا این ساعت) برامون ساده شده و ته تهش ختم می‌شه به یک بنر یا متن رمانتیک توی اینستاگرام و تمام...

خوشحال می‌شم نظر شما رو بدونم... آیا نرم‌افزار و تکنولوژی‌های در دسترس، و افراد مرتبط با تکنولوژی سهمی ولو اندک داشتند؟
👍11👌4🤔2
📱 معماری سلولی چیه، لزوم توجه بهش؛ و چرا slack رفت دنبالش؟

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

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

مشکل slack از کجا شروع شد؟
یه روز توی اسلک، نمودارهای مانیتورینگ نشون دادن که یکی از Availability Zone (AZ) های AWS در منطقه us-east-1 داره پکت‌های زیادی رو از دست میده. این باعث خطا و کندی سرویس برای کاربرها شده بود.
مشکل اصلی اینجا بود که با وجود اینکه اسلک از چند AZ استفاده می‌کرد، وقتی یک AZ دچار مشکل می‌شد، کل سرویس تحت تأثیر قرار می‌گرفت! خب این اصلاً منطقی نیست! مگه نه اینکه هدف استفاده از چند AZ همین هست که اگه یکی به مشکل خورد، بقیه کار رو پیش ببرن؟

در مورد اسلک، هر AZ تبدیل به یک سلول شد. یعنی مجموعه‌ای از سرویس‌هایی که در یک AZ هستن و می‌تونن به عنوان یک واحد از سرویس خارج بشن یا به سرویس برگردن.

🎯 اسلک چهار هدف اصلی داشت:

- حذف ترافیک از یک AZ در کمتر از ۵ دقیقه (سرعت)
- حذف ترافیک نباید باعث خطای قابل مشاهده برای کاربر بشه
- خروج و بازگشت ترافیک یک AZ باید تدریجی باشه (مثلاً ۱٪ یا ۱۰٪)
- مکانیزم Drain نباید به AZ مشکل‌دار وابسته باشه

🧠 استراتژی‌های پیاده‌سازی در اسلک

*️⃣منزوی‌سازی (Siloing): سرویس‌ها در یک AZ فقط با سرویس‌های همون AZ ارتباط داشته باشن. ساده‌ترین روش، اما برای همه سرویس‌ها امکان‌پذیر نیست.

*️⃣مدیریت سرویس‌های با consistency قوی: سرویس‌هایی مثل Vitess (لایه شاردینگ روی MySQL) نیاز به مدیریت failover دارن.

*️⃣تقسیم‌بندی براساس CAP: سرویس‌ها براساس نیازشون به Consistency یا Availability دسته‌بندی شدن:
🔤سرویس‌های Stateless مثل webapp ها (راحت‌ترین)
🔤سرویس‌های Eventually Consistent مثل Memcache (نسبتاً راحت)
🔤سرویس‌های Strongly Consistent مثل Vitess (سخت‌ترین)


*️⃣کنترل ترافیک با Envoy و xDS: استفاده از traffic weighting برای هدایت تدریجی ترافیک

چرا این بار موفق شدن؟
اسلک قبلاً یک بار تلاش کرده بود این کار رو انجام بده و شکست خورده بود. این بار چند اصل مهم رو رعایت کردن:

- تدریجی بودن (Incrementality): به جای ساخت یک سیستم کاملاً جدید و تغییر یکباره، هر سرویس رو جداگانه و تدریجی تغییر دادن.
- نگاه از پایین به بالا (Bottom-up): با هر تیم سرویس جداگانه کار کردن و راهکار مخصوص اون سرویس رو پیدا کردن.
- به اندازه کافی خوب (Good Enough): پذیرفتن اینکه لازم نیست همه سرویس‌ها یکجا و کامل تغییر کنن.
- رویکرد Roofshot به جای Moonshot: به جای یک حرکت مستقیم و بلندپروازانه، مجموعه‌ای از قدم‌های کوچکتر که در هر مرحله ارزش ایجاد می‌کنه.
- تست‌های منظم: هر هفته یک AZ رو drain می‌کردن و پیشرفت رو اندازه می‌گرفتن.

⛳️ نتایج:

- الان می‌تونن یک AZ رو در ۶۰ ثانیه از سرویس خارج کنن
- هزینه‌های انتقال داده بین AZ کاهش پیدا کرده
- یک مکانیزم blue-green deployment جدید به دست آوردن
- راهکار عمومی برای مقابله با مشکلات محدود به یک AZ دارن

📝 نکته‌های کلیدی برای پروژه‌های زیرساختی بزرگ

*️⃣تدریجی ولی مداوم کار کنید: پروژه‌های بزرگ زیرساختی باید گام به گام پیش برن
*️⃣در نظر بگیرید هر سرویس دلیلی برای وضعیت فعلیش داره: تصور نکنید که افراد دیگه اشتباه کردن
*️⃣ارزش رو در هر مرحله قفل کنید: پروژه باید در هر مرحله ارزش ایجاد کنه، نه فقط در پایان
*️⃣کارآیی رو برای کاهش ریسک فدا کنید: گاهی راه مستقیم، بهترین راه نیست

🔔 اگر سرویسی دارین که مردم بهش وابسته هستن یا با از دسترس خارج شدنش کار مردم می‌خوابه، لطفا قبل از وقوع حادثه، به فکر علاج باشین... تابستان در پیش است و قطعی برق نزدیک. دیتاسنترهای مختلف (ترجیحا پراکندگی شهری/استانی) می‌تونه در کنار معماری سلولی کمک کنه، هم به اعتبار و درآمد سازمان شما و مهم‌تر به کار مردم...

💬 اگر دوست داشتید در موردش صحبت کنیم، حتمن بگید، سوال و پیشنهاد هم مثل همیشه باعث خوشحالی...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16
عموما انتخاب معماری، تکنولوژی یا ابزار، از بین ابزارهای موجود و شناخته‌شده انجام می‌شه و به ندرت تیم‌ها نیاز یا حتی توانایی خلق معماری جدید رو دارن. توی چنین شرایطی شناخت معماری و زمینه‌ی پیدایشش کمک بزرگی به پیشگیری از انتخاب اشتباه می‌کنه. یعنی وقتی می‌دونیم یک معماری در چه شرایطی و برای تأمین چه نیازی به وجود اومده، می‌تونیم فکر کنیم آیا شرایط و نیاز و مسئله‌ی فعلی ما هم راستا با شرایط و نیاز ما هست یا نه!

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

- مایکروسرویس
- متدولوژی Domain-Driven Design
- معماری‌ها Clean / Hexagonal / Onion

اگر فکر می‌کنید موضوع جذابیه: ⚙️
اگر هم پیشنهادی براش دارید حتمن بنویسید 😊
Please open Telegram to view this post
VIEW IN TELEGRAM
54🔥32👍1