tech-afternoon
1.25K subscribers
175 photos
6 videos
6 files
170 links
تِک‌افترنون، رویدادی گاه‌به‌گاه است با موضوعات حول معماری و توسعه نرم‌افزار، این کانال هم برای اشتراک اخبار، آموزش، نکاتی حول مهندسی نرم‌افزار، دیتابیس‌، تکنولوژی و مدیریت تولید محصولات نر‌م‌افزاری خواهد بود.
youtube.com/@AminTechTalks/videos
امین مصباحی
Download Telegram
اندر باب OpenTelemetry

از اونجایی که دورهمی بعدی‌مون در مورد سیستم‌های توزیع‌شده است، مطالب دیروز (workload) و این مطلب (OpenTelemetry) پیش‌درآمدی است برای دوستانی که آشنایی کمتری دارن ولی دوست دارن از دورهمی استفاده بیشتری ببرن.

به زبون ساده و تا حد امکان کوتاه، OpenTelemetry رو توضیح دادم و Log, Metric و Trace مرور کردم. اگر دوست داشتید مطالعه کنید (instant view تلگرام دسکتاپ مشکلاتی با فارسی داره که اگر روی دسکتاپ مطالعه می‌کنید بهتره تا لینک رو باز کنید)

📎 لینک مطلب

💬 نظر، سوال، گپ‌ و گفت؟ 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
103👍2🔥1
خودکار کردن کارها یه رکن اساسی مهندسی نرم‌افزاره. و عملا بخش مهمی از کار هر توسعه‌دهنده‌، DevOpsکار و Platform Engineer و... همین خودکار کردن فرایندهاست.

لذا طیف وسیعی از ابزارهای اتوماسیون برای کارهای مختلف وجود داره، یکی از مهم‌ترین‌هاش هم ابزارهای خودکارسازی بیلد و دپلوی است. ابزارهای Build Automation از فایل‌های XML که برای استفاده از MS Build سال‌ها پیش می‌ساختیم تا فایل‌های Yaml که برای GitHub یا GitLab می‌سازیم؛ وقتی مراحل بیلد، پیچیده و متعدد می‌شدن؛ نوشتن، ایرادیابی و مدیریت فایل Yaml سخت‌تر می‌شه.
حتی توی پروژه‌ها و تیم‌های کوچیک هم شاید یادگیریش برای دولوپر تازه‌کار دشوار باشه.

درسته که افزونه‌هایی بروی سهولت نوشتنشون در دسترس هست؛ ولی بیاین فکر کنیم اگر توی فایل #C با متدها و کلاس‌هایی که AutoComplete و... خیلی خوبی هم دارن، بهتر نیست؟ خوندن داینامیک مقادیر و تصمیم‌گیری راحت‌تر نیست؟ دیباگ کردن راحت‌تر نیست؟

پروژه Nuke.Build و Cake همینه! یه پروژه رایگان کدباز با لایسنس MIT که با همه CI/CDهای رایج GitHub GitLab CI, Azure Pipelines, Actions و... هم سازگاره.

🧐 حالا یه سوال جدی؟ آیا «امروزه، عصر، عصر مهاجرت به Nuke است و با مهاجرت به آن موفقیت را در دستان خود بگیریم و به پوست شفاف‌تر، زندگی شاداب‌تر و گوارش بهتر دست یابیم!» است؟

خیر! nuke با ۳۱۰۰ ستاره در گیت‌هاب و cake با ۳۹۰۰ ستاره، پروژه‌های بدی نیستن، برای پروژه‌های کوچک، و یا جایی که دانش یا نیروی کافی برای DevOps نداریم، و یا نیازهای خاصی داریم که با Yamlنویسی نگهداری و توسعه‌اش سخت می‌شه (پایپ‌لاین‌های خیلی پویا)، باز هم خوبن. ولی اینکه از فردا روش‌های native رو بگذاریم کنار و بدون دلیل منطقی و حساب‌شده بیوفتیم دنبال اینا هم کار ابلهانه‌ای است 😁 خودکارسازی خوبه، آشنایی با ابزارها خوبه، انتخاب با آگاهی و بجا از جفتش بهتره 😉

💬 تجربه شما چیه؟ با چه روش یا ابزاری build automation می‌کنین؟
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1033
🧠 مروری بر Semantic Kernel، نرم‌افزار، ولی باهوش!

شاید شوخی دور از واقعیتی نباشه که طی این چند سال، اینقدر که همه روی AI تمرکز کردن یا باهاش شوآف کردن، اگر روی پیدا کردن قاتل بروسلی وقت گذاشته بودن حتمن اون نامرد رو دستگیر کرده بودن!

مایکروسافت هم که به لطف سرمایه‌گذاری‌های هوشمندانه‌ای که روی استارتاپ‌ها و شرکت‌های مستعد داشته، اوضاع خیلی خوبی داره. یادمون نره همون‌طور که برنامه‌نویسی وب یا معماری سرویس‌گرا، ۲۵ سال پیش چیزهای مدرنی بودن ولی الان بدیهی و پیش‌پا افتاده به شمار میان؛ استفاده از AI توی نرم‌افزارها هم تا چند وقت دیگه (خیلی خیلی کمتر از ۲۵ سال، حتی کمتر از ۵ سال دیگه) یه موضوع بدیهی خواهد بود.

🎅 دو تا خاطره توی کامنت این مطلب می‌گذارم (خاطره است و اگر نخونید چیزی از مطلب رو از دست ندادید)

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

کتابخونه‌ Semantic Kernel که فقط هم برای دات‌نتی‌ها نیست و پایتون و جاوا رو هم پشتیبانی می‌کنه؛ یک کتابخونه‌ی متن‌بازه که به عنوان میان‌افزار (middleware) عمل می‌کند.

یعنی چی؟ یعنی این کتابخونه به توسعه‌دهنده کمک می‌کنه تا به سادگی مدل‌های هوش مصنوعی مختلف رو با کدهای موجودش ترکیب کنه و عامل‌های هوشمند (AI agents) بسازه، (بدون داشتن درک عمیق از دل و روده‌ی AI یا LLM)

یکم بیشتر؟ چشم. مثلا شما می‌خواهید از مدلی که یه بابایی یا یه شرکتی، رایگان یا پولی، روی کامپیوتر خودتون یا روی کلاد، وجود داره و مثلا بهش یه متن می‌دید و می‌گید با صدای فلان خواننده بخونه؛ یا یه متن می‌دید می‌گید یه عکس بر اساسش بسازه؛ یا سوال و جواب عادی؛ یا سوال و جوابی که مبنای پاسخش دیتای توی دیتابیس شماست؛
مثلا شما یه نرم‌افزار سنتی فروشگاه آنلاین لباس داری؛ کاربر می‌گه برام یه ست لباس مهمونی برای فصل پاییز و سقف قیمت فلان، برای یک خانم ۳۰ ساله با سایز M پیشنهاد کن، این یه متنه، ولی Semantic Kernel این امکان رو می‌ده به راحتی از دل دیتای ساختار یافته دیتابیس، فرض کنید جدولی که نام کالا، قیمت، رنگ و سایز رو داره، کوئری مورد نیاز رو بسازه. چجوری؟ با دیتایی که توی مدل زبانی داره می‌فهمه رنگ‌های مناسب با پاییز، یا نوع لباس‌های مورد نیاز برای یک مهمانی (شلوار، پیراهن، پالتو، کفش، شال‌گردن برای پاییز و یک خانم نیازه) اینا رو از دل دیتابیس می‌کشه بیرون و متن هم از نتیج خروجی که احتمالا یه لیست از آبجکت کالا است بسازه که: فلانی‌جون اگر اینو اونو اون‌یکی رو ست کنی برای پاییز خوبه و به بودجه‌ات هم می‌خوره!

🧞‍♂️ این یه روزی جادو بود، یه روز رویا بود، یه روز محال بود؛ الان با وجود امکانات ساختاری وکتورها و کتابخونه‌ها به راحتی شدنیه، حتی با تغییرات کم در کدهای فعلی!

این Semantic Kernel در حقیقت یه پُله بین دنیای برنامه‌نویسی سنتی و مدل‌های زبانی بزرگ (LLM).
فعلا هم با زبون‌های C#، Python و Java قابل استفاده است. یه لایه‌ی میانی که درخواست‌های مدل‌های AI رو به توابع تعریف‌شده توی کد ترجمه می‌کنه و پاسخ‌ها را مدیریت می‌کنه (تبدیل متن به یه کلاس، و ساخت متن با استفاده از دیتای ساختاریافته).

مدل‌های هوش مصنوعی مثل GPT و DALL-E و… تحول بزرگی توی نحوه تعامل ما با نرم‌افزار ایجاد کردن. اما استفاده از این مدل‌ها توی محیط‌های واقعی چالش‌هایی هم داره:
🔤 مدیریت درخواست‌ها: چجوری درخواست‌های پیچیده کاربر رو به توابع کدنویسی ترجمه کنیم؟ (مثلا ورودی‌های متد GetProductsByDescription)

🔤 اتصال به سیستم‌های موجود: چجوری هوش مصنوعی با APIها، دیتابیس‌ها، یا فرآیندهای کسب‌وکاری تعامل داشته باشه؟

🔤 امنیت و مقیاس‌پذیری: چجوری میشه این قابلیت‌ها رو به‌صورت ایمن (جلوگیری از نشت اطلاعات یا دسترسی به داده‌هایی که نباید بهش دسترسی داشته باشع) و توی مقیاس بزرگ ارائه کرد؟

و Semantic Kernel برای پاسخ به این چالش‌ها طراحی شد؛ و هدفش ساده‌سازی یکپارچه‌سازی هوش مصنوعی در پروژه‌های واقعیه.

👀 چی کار می‌شه باهاش کرد حالا؟
- ایجاد ربات‌ها و عامل‌های هوشمند: مثل چت‌بات‌هایی که به‌صورت پویا تصمیم می‌گیرن یا فرآیندها رو خودکار می‌کنن.

- یکپارچه‌سازی آسون با کد موجود: با استفاده از قابلیت Function Calling، می‌شه مدل‌های AI رو به کدهای موجود متصل کرد.

- اتوماسیون فرآیندهای کسب‌وکار: مثل پردازش خودکار درخواست‌های مشتری‌ها یا مدیریت منابع سازمانی.

- مدیریت آسون هوش مصنوعی: فراهم کردن قابلیت مشاهده و نظارت بر عملکرد مدل‌های مختلف.

- اتصال به مدل‌های مختلف AI (مثل OpenAI، یا مدل‌هایی که روی ماشین خودتون دارید)

- پشتیبانی از Vector Store‌ها


اگر دوست دارید این موضوع ادامه بدم:
ری‌اکشن 🤓
Please open Telegram to view this post
VIEW IN TELEGRAM
🤓174👍1🤔11
اجرای مدل‌های هوش‌مصنوعی به‌صورت آفلاین
پیش‌درآمد شروع کار با Semantic Kernel

‌‌‎—————————————————
پیش‌نوشت:
مسعود دانش‌پور عزیز، در صدد تهیه ویدیو و مثال آموزشی از Semantic Kernel با استفاده از APIهای AvvalAI است. در نتیجه من پُست‌های این موضوع رو طوری تنظیم می‌کنم که هم‌پوشانی نداشته باشه، و دوستان بتونن با دنبال کردن مطالب دو کانال، طیف وسیع‌تری از نکات رو در اختیار داشته باشن.
‎—————————————————

چت‌جی‌پی‌تی، جمینای، Claude یا سرویس‌های مشابه، که به صورت بسته ارائه می‌شن و امکان اجرای مدل به‌صورت لوکال رو نداریم. و نهایتا می‌تونیم با استفاده از API شون بهشون دسترسی داشته باشیم.

🗜 محدودیت‌ها:

*️⃣در هر حال درخواست‌های شما و داده‌هایی که لابلای تعامل با API رد و بدل می‌کنید عملا در اختیار شرکت OpenAI یا Microsoft یا AvvalAI یا... قرار می‌گیره، و حتی اگر به امنیت اونا اطمینان داشته باشیم، ولی استفاده‌شون از داده‌های شما برای آموزش مدل‌هاشون محتمله. این برای بعضی سازمان‌ها و صنایع غیر مجاز است.

*️⃣محدودیت ویژه ایران: تحریم، فیلتر، اینترنت، دشواری پرداخت و قص علی هذا 😡


💡 راهکار جایگزین:
اگر دنبال راهکار جایگزین باشیم که مدل رو خودمون هاست کنیم، باید سراغ مدل‌های باز بریم، مثل لاما (Llama) از شرکت متا یا خانواده مدل‌های فای (Phi) که مایکروسافت ارائه کرده.

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

۱: نرم‌افزار Ollama رو روی Mac، Linux، Windows نصب کنید.
۲: حالا توی ترمینال دستور ollama رو دارید:

برای مشاهده لیست مدل‌هایی که روی ماشینتون دارید:
ollama list


برای دانلود و نصب مدل. (اینجا مدل Phi3.5 (۳.۸۲ میلیارد پارامتر))
ollama pull phi3.5


برای اجرای مدل. (اینجا مدل Phi3.5 (۳.۸۲ میلیارد پارامتر))
ollama run phi3.5


برای حذف مدل.
ollama rm phi3.5


🌡دمای مدل (Temperature) یکی از مهم‌ترین پارامترهای کنترل خروجی مدل‌های زبانیه. بذارید ساده توضیح بدم:
محدوده‌ی مجاز Temperature بین 0 تا 1 تنظیم میشه:

کاربرد temperature = 0.0
- خروجی کاملاً قطعی و تکرارپذیر
- همیشه محتمل‌ترین کلمات رو انتخاب می‌کنه
- مناسب برای: محاسبات، کدنویسی، پاسخ‌های دقیق و تکنیکی


کاربرد temperature = 0.7 (معمولاً مقدار پیش‌فرض)
- تعادل خوبی بین خلاقیت و ثبات
- مناسب برای: چت عمومی، نوشتن متن، اکثر کاربردها


کاربرد temperature = 1.0
- خروجی کاملاً تصادفی و خلاقانه
- هر بار ممکنه پاسخ متفاوتی بده
- مناسب برای: داستان‌نویسی، شعر، ایده‌پردازی خلاقانه

# output:  دقیق و تکرارپذیر
ollama run phi --temperature 0.1 "یک برنامه ساده پایتون بنویس"

# output: متعادل (پیش‌فرض)
ollama run phi --temperature 0.7 "یک داستان کوتاه بنویس"

# output: خلاقانه و متنوع
ollama run phi --temperature 1.0 "یک شعر در مورد بهار بنویس"


برای نمایش منابع مورد مصرف
ollama stats



⚙️ علاوه بر امکان کار با کامندلاین، Ollama بهمون REST API هم می‌ده که به راحتی می‌تونیم باهاش کار کنیم. مثال ساده:
curl http://localhost:11434/api/generate -d'{
"model": "phi3.5",
"prompt": "suggest a city to travel"
}'



با همین API می‌شه چت هم کرد:
curl http://localhost:11434/api/chat -d '{
"model": "phi3.5",
"messages": [
{ "role": "user", "content": "lets chat about cooking recipes?" }
]
}'


شاید اولین آرزوتون این باشه که کاش یه یوزر اینترفیس تحت وب عینهو ChatGPT هم داشت! ولی این آرزو نیست. پاشید پروژه Open WebUI رو استفاده کنید.

📎خوبی Ollama اینکه مدل API که ارائه میده استاندارده و به راحتی می‌تونید بین مثلا Phi و Llama یا هر مدل دیگه‌ای که اینجا می‌بینید به راحتی سوییچ کنید (در این ساعت ۱۴۵ مدل مختلف)

⚡️ این مقدمه اولیه اجرای مدل روی ماشین‌شخصی یا سرور بود. بعدن می‌تونید با Semantic Kernel از مدل لوکال خودتون استفاده کنید...

💬 نظرتون رو بگید لطفا، اگر دوست دارید این موضوع رو ادامه بدیم لطفا اول خودتون همین مثال‌ها رو اجرا کنید و ری‌اکشن 🤓 بگذارید.

♻️🌱 نکته محیط زیستی: همه ما در قبال زمین مسئولیم استفاده از مدل‌های کوچک زبانی (SLM)ها مثل همین Phi3.5 مصرف انرژی و طبیعتا ردپای کربن بسیار کمتری نسبت به مدل‌های بزرگ داره. اگر نیاز به مدل خیلی بزرگ نداریم، حواسمون به نسل‌های بعدی باشه 😊

توضیح: مدل Phi4 روی Ollama هست ولی هنوز اکانت رسمی مایکروسافت ارائه نکرده، مایکروسافت فعلا روی Azure اون نسخه رو گذاشته و به‌زودی روی Ollama هم میاد.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤓136👍1
🎅 چند پیشنهاد برای ۲۰۲۵
این ۵ روز باقیمانده از ۲۰۲۴، هر روز تعدادی پیشنهاد یا ایده، حول یک موضوع مشخص، به اشتراک می‌گذارم، امیدوارم مفید یا الهام‌بخش باشه.

5️⃣ روز تا ۲۰۲۵

⚙️ پیشنهادات شغلی:

*️⃣خوبه تا سالی یک‌بار، مسیر شغلی‌مون رو مرور کنیم. آیا هنوز خوشحالیم؟ هنوز روی همون مسیری هستیم که باید باشیم و دوست داشتیم باشیم؟ «حال خوب» داریم با کارهایی که هر روز انجام می‌دیم؟

*️⃣چه دنبال شغل جدید باشیم چه نباشیم، سالی یکبار یا دو سالی یکبار؛ ۳۰ تا ۵۰ شرح شغلی مشابه خودمون یا پوزیشنی که دوست داریم به دست بیاریم رو از لینکدین جمع کنیم، و چندین بار بخونیم… (یا از ChatGPT بخواهیم مشترکات و پرتکرارها رو بهمون بگه)؛ ناخودآگاه انتظارات «امروز» و «فردای نزدیک» از عنوان شغلیمون رو می‌فهمیم. (من این کار رو طی حداقل ۵ سال گذشته به تعداد زیادی از دوستانی که قصد اپلای کردن شغل (خصوصا وقتی قصد مهاجرت کاری داشتن) پیشنهاد کردم، و به نظرم از اونجایی که مسئله شغل، یه موضوع دو طرفه‌ی عرضه و تقاضا است، وقتی ما برایند انتظارات طرف «تقاضا» رو خوب بشناسیم، می‌تونیم خودمون رو با عنوان طرف «عَرضه»، با توانایی، تخصص متناسب، همسو و آماده کنیم. آیا داریم همسو و هم‌تراز با این صنعت حرکت می‌کنیم؟ یا یه چیز ایرانیزه یا شرکتمونیزه ساختیم؟ )

*️⃣نیم ساعت/یک ساعت وقت بگذاریم و یک تحلیل SWOT از شغلمون روی کاغذ پیاده کنیم (اگر نمی‌دونید SWOT چیه؟ ری‌اکشن ⚙️ تا توضیح بدم)

*️⃣فکر کنیم به جز کسب درآمد از شغلمون، چی کسب کردیم؟ به جز برآورده کردن انتظارات شغلی‌مون، چه ارزش افزوده یا کار جدیدی ما اضافه کردیم به شغلمون؟

موضوع فردا: رفتار فردی و کاری!

💬 نظرتون چیه؟ گپ بزنیم؟ ادامه بدم؟
Please open Telegram to view this post
VIEW IN TELEGRAM
34👍8
🎄 چند پیشنهاد برای ۲۰۲۵ - ۲

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

4️⃣ روز تا ۲۰۲۵؛ پیشنهادات رفتاری:

خود-مشاهده‌گری فعال: خوبه تا در سال آینده هر روز چند دقیقه برای خودمون وقت بذاریم و فکر کنیم امروز کجاها احساس یا رفتاری از خودم سر زد که می‌تونست بهتر باشه یا جایگزین بهتری براش وجود داشت؟ چه چیزی باعث تحریک اون احساس یا رفتار شد؟ به‌ مرور یاد می‌گیریم محرک‌ها رو بشناسیم و واکنش‌های جایگزین براشون داشته باشیم.

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

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

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

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

چند رفتار رایج که می‌تونیم به کم کردنشون یا تداوم نداشتنشون فکر کنیم:

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



موضوع فردا: برنامه‌ریزی یادگیری

💬 نظرتون چیه؟ ادامه بدیم؟
Please open Telegram to view this post
VIEW IN TELEGRAM
👍741
tech-afternoon
اگر نمی‌دونید SWOT چیه؟ ری‌اکشن ⚙️ تا توضیح بدم
📱 به احترام ۱۹ ری‌اکشن ⚙️ ویدیو SWOT ضبط و منتشر شد 🌱😊

اگر دوست داشتید ببینید و اگر هم که نظری داشتید، همینجا یا توی یوتیوب بنویسید 😉

🎬 مشاهده در یوتیوب
⌛️ مدت: ۱۴ دقیقه
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍11
📚 یکی از علایق من کتاب کادو دادنه. و به کسایی که خیلی برام عزیزن، کتابی هدیه می‌دم که خودم خوندمش (منظورم همونیه خوندم و عموما یه جاهاییش یادداشت نوشتم یا خط کشیدم) که عموما با کلی توضیح که طرف مقابل فکر نکنه کتاب مستعمل دارم هدیه می‌دم 😅.

کلاس‌های ایران یه رسمی داشتم که برخی دوره‌ها (حدود ۵۰٪ شون)، کتابی که مبنای سرفصل‌های دوره بود و خودم خونده بودم و خط کشیده بودم رو آخر کلاس می‌دادم به کسی که به نظرم بیشتر از بقیه تلاش کرده بود و انگیزه داشت. و با اینکه اون نسخه‌ها برام خیلی عزیز بودن با علاقه و رغبت تمام هدیه می‌دادم، و برای خودم هم مشوقی شده بود که هر دوره کتاب مرجع رو کامل مرور کنم دوباره.

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

📔 Continuous Delivery
📔 Clean Code
📔 The Pragmatic Programmer
📔 A Philosophy of Software Design
📔 کتاب‌های دوره‌های رسمی مایکروسافت خصوصا دات‌نت، اس‌کیوال سرور و بیزتاک (از ۲۰۰۵ به بعد)

کتاب‌های غیر فنی:
📗 Start with Why
📗 Skin in the Game
📗 The Black Swan
📗 سرگذشت پنجاه کنشگر اقتصادی ایران (فریدون شیرین‌کام، ایمان فرجام‎نیا)
📗 اراده‌های پولادین (سعید فتح‌اللهی‌راد، حسین شریفی)
📗 مفاهیم اخلاقی (توشیهیکو ایزوتسو)

💬 اگر تو این لیست کتاب مورد علاقه شما هم هست، خوشحال می‌شم بگید چه بخشیش به طور متمایز براتون جالب بوده 😉

اگر هم موردی جالب بود و مردد بودید در شروع کردنش، بگید تا یه خلاصه خیلی کوتاه در حدی که یادم مونده بنویسم
Please open Telegram to view this post
VIEW IN TELEGRAM
102👍1
🤩 چند پیشنهاد برای ۲۰۲۵ - ۳

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

3️⃣ روز تا ۲۰۲۵؛ پیشنهادات یادگیری:

خونه‌تکونی و نقشه‌راه: اگر توی دیسکتون میلیان میلیان گیگابایت ویدیو آموزشی و کتاب الکترونیکی دارین، اول با یک Shift-Delete یا Shift-Command-Delete رهسپار دیار باقی‌ کنیدشون. بعد برای ۶ ماه یا یکسال بعد، نهایتا ۲ یا ۳ عنوان رو که براساس 🔤نقشه‌راهی🔤 که برای خودتون ترسیم و انتخاب کردید نگه دارید. اونم توی یک فلدر روی دسکتاپ که جلو چشم باشه

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

ترکیب مهارت‌های رفتاری با یادگیری تخصصی: بخشی از نقشه‌راه یادگیری رو به مهارت‌های نرم و مهارت‌های رفتاری تخصیص بدین. خفن‌ترین کدنویس جهان اگر نتونه با ۴ نفر تعامل سازنده و هم‌افزا داشته باشه، نمی‌تونه جز اندکی، بضاعت تخصص خودش رو شکوفا کنه. لازم نیست مهارت‌ نرم رو «لیدرشیپ» و… ترجمه کنیم، «هم‌تیمی خوب»، «شنونده خوب»، و… بودن یعنی مهارت‌های نرم‌.

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

بازنگری و اعتراف به ندونستن: اگر فکر می‌کنم/می‌کنیم یه چیزی رو خیلی بلدیم، یه تحقیق «اصیل» کنیم که آیا این زنگ هشداریه که اتفاقا خوب بلد نیستیم؟ آماده باشیم چیزایی رو که بلدیم اگر دقیق یا صحیح نیستن، تدقیق یا حتی تدفین کنیم؛ بدون تعصب!

فردا: فراتر از صفر و یک‌ها
💬 ادامه بدیم؟ شما برای ۶ ماه یا یکسال آینده برنامه یادگیری‌تون رو ترسیم کردین؟
Please open Telegram to view this post
VIEW IN TELEGRAM
👍101🔥1
🥴 چند پیشنهاد برای ۲۰۲۵ - ۴

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

2️⃣ روز تا ۲۰۲۵؛ پیشنهاداتی فراتر از صفر و یک (مسئولیت اجتماعی):

🗣️ یه سری کارها هستن مثل یاد گرفتن یه مهارت، «اثر مستقیم» روی ما دارن، ولی بعضی کارها «اثر بازگشتی» دارن، نسبت انعکاسشون هم عموما ≥ ۱ است. خوبه تا ساعات آخر هر سال، یه چیزایی توی رزومه ذهنی‌مون داشته باشیم که تاریخ انقضاءش طولانی‌تر از کدهایی باشه که می‌نویسیم…

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

مشارکت در متن‌باز: اگر برنامه‌نویس هستیم، بخشی از وقت و مهارتمون رو به مشارکت در پروژه‌های اپن‌سورس اختصاص بدیم. حتی در حد به‌روز کردن لایبری‌ها، حتی در حد بهبود مستندات، این کار نه تنها به جامعه برنامه‌نویسی کمک می‌کنه، بلکه باعث رشد خودمون هم میشه. چرا سهیمه‌ی ۱۰ تا pull request برای یک سال رو که عدد بسیار دست‌یافتنی‌ای است برای خودمون هدف‌گذاری نکنیم؟؟

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

زمین: زمین مال همه ما و نسل‌های بعدی‌مون است، توی فرایند طراحی و توسعه محصولات، به مصرف انرژی و تاثیرات زیست‌محیطی توجه کنیم. مثلاً استفاده از تکنولوژی‌ها و الگوریتم‌های بهینه‌تر، کامپایل برای پلتفرم‌های بهینه مثل arm که مصرف انرژی کمتری دارند یا طراحی‌هایی که به سرورهای کمتری نیاز دارن. فکر کردن به رد پای کربنی که پروژه‌مون قراره به جا بگذاره…

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

فردا، روز آخر و خلاصی شما از این پست‌ها: خود!!
💬 دیگه تا اینجا که اومدیم، اگه اجازه بدین فردا رو هم بگیم 😅
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42
🧪تست end-to-end با Playwright

تست End-to-End (E2E) چیه؟
تست End-to-End یا E2E یه نوع تست نرم‌افزاریه که فرآیندهای واقعی کاربر رو از شروع تا پایان شبیه‌سازی می‌کنه تا مطمئن شیم تمام بخش‌های نرم‌افزار (شامل رابط کاربری، پایگاه داده، API‌ها و غیره) به درستی و بدون مشکل با هم کار می‌کنن.
هدف اصلی E2E اینه که رفتار سیستم رو از نگاه کاربر واقعی بررسی کنه و مطمئن بشیم که مسیرهای اصلی و بحرانی کسب‌وکار به درستی عمل می‌کنن.

حالا Microsoft Playwright چیه؟
مایکروسافت سال ۲۰۲۰ فریم‌ورک Playwright رو معرفی کرد که طی این سال‌ها خیلی با اقبال خوبی روبرو شده و به نظر من از Selenium و Cypress خیلی بهتر و سریع‌تره. Playwright این امکان رو می‌ده که اپلیکیشن‌های وب رو توی مرورگرهای مختلف (Chrome، Firefox، Safari و Edge) تست کنیم. از زبون‌های برنامه‌نویسی محبوب مثل JavaScript، TypeScript، Python، Java و NET. هم پشتیبانی می‌کنه.

به راحتی می‌شه براش تست نوشت که عین کاربر صفحات وب رو مرور کنه، نتایج رو بررسی کنه. APIها رو هم همینطور. و به راحتی توی پایپ‌لاین CI/CD تون قرار بدید.

یک مثال خیلی ساده (توی یک صفحه وب جستجو کنه و ببینه نتایج میاد یا نه)

test('search works', async ({ page }) => {
await page.goto('https://example.com');
await page.fill('#search', 'محصول');
await page.click('#submit');
await expect(page.locator('.results')).toBeVisible();
});


یه مثال دیگه ولی REST API به جای صفحه وب (از سرویس reqres که یه API مُفته برای تست، چک می‌کنه API کد ۲۰۰ بده و داده صحیح و کد ۴۰۴ برای آدرس غلط)
*
const { test, expect } = require("@playwright/test");

test.describe("API Testing with Playwright", () => {
const baseurl = "https://reqres.in/api";

test("GET API Request with - Valid 200 Response", async ({ request }) => {
const response = await request.get(`${baseurl}/users/10`);
expect(response.status()).toBe(200);
});

test("GET API Request with - Invalid 404 Response", async ({ request }) => {
const response = await request.get(`${baseurl}/usres/invalid-data`);
expect(response.status()).toBe(404);
});

test("GET Request - Verify User Details", async ({ request }) => {
const response = await request.get(`${baseurl}/users/10`);
const responseBody = JSON.parse(await response.text());
expect(response.status()).toBe(200);
expect(responseBody.data.id).toBe(10);
expect(responseBody.data.first_name).toBe("Byron");
expect(responseBody.data.last_name).toBe("Fields");
expect(responseBody.data.email).toBeTruthy();
});
});


معادل کد 📱:
using Microsoft.Playwright;
using System.Text.Json;

public class PlaywrightApiTests
{
private const string BaseUrl = "https://reqres.in/api";

[Fact]
public async Task GetApiRequest_Valid200Response()
{
using var playwright = await Playwright.CreateAsync();
var request = await playwright.APIRequest.NewContextAsync();

var response = await request.GetAsync($"{BaseUrl}/users/10");
Assert.Equal(200, response.Status);
}

[Fact]
public async Task GetApiRequest_Invalid404Response()
{
using var playwright = await Playwright.CreateAsync();
var request = await playwright.APIRequest.NewContextAsync();

var response = await request.GetAsync($"{BaseUrl}/usres/invalid-data");
Assert.Equal(404, response.Status);
}

[Fact]
public async Task GetRequest_VerifyUserDetails()
{
using var playwright = await Playwright.CreateAsync();
var request = await playwright.APIRequest.NewContextAsync();

var response = await request.GetAsync($"{BaseUrl}/users/10");
Assert.Equal(200, response.Status);

var responseBody = JsonSerializer.Deserialize<JsonDocument>(await response.TextAsync());
var userData = responseBody?.RootElement.GetProperty("data");

Assert.Equal(10, userData.Value.GetProperty("id").GetInt32());
Assert.Equal("Byron", userData.Value.GetProperty("first_name").GetString());
Assert.Equal("Fields", userData.Value.GetProperty("last_name").GetString());
Assert.False(string.IsNullOrEmpty(userData.Value.GetProperty("email").GetString()));
}
}


💬 نظر، سوال؟ E2E دارید؟
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍3
💵 حالا که رفهاب تخفیف ۴۰ درصدی گذاشته، اگر یک کتاب بخرید، اون کتاب چی خواهد بود؟ کامنت کنید 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 دورهمی آنلاین با موضوع NET Aspire.

یکی از دوستان که توی پروژه جدیدشون از Aspire استفاده کردن، دوست داشتن تا هم یه مروری روی پیاده‌سازی‌شون بشه، هم نکات پرداکشن رو بررسی کنیم. از اونجایی که مثال‌های ویدیو دوم و سوم Aspire مدت‌هاست آماده است ولی به دلیل مشغله‌های پایان سال، و زمانبر بودن ضبط و ادیت به تاخیر افتاده بود؛ تصمیم گرفتم با یه دورهمی این کار رو بکنیم. و بخشی از مطالب هم حول پروژه‌ی ایشون خواهد بود که نمونه واقعی‌تر از مثال‌هاست.

اگر شما هم دغدغه و نکته خاصی دارید لطفا بنویسید

🗓 هفته آینده یکشنبه (۵ ژانویه، ۱۶ دی‌ماه)؛ ساعت ۱۶:۳۰ (به وقت تهران؛ مدت ۱ ساعت)
✍️ ثبت‌نام (ایونت‌های تک‌افترنون هزینه‌ای ندارند)
Please open Telegram to view this post
VIEW IN TELEGRAM
9
tech-afternoon pinned «🚀 دورهمی آنلاین با موضوع NET Aspire. یکی از دوستان که توی پروژه جدیدشون از Aspire استفاده کردن، دوست داشتن تا هم یه مروری روی پیاده‌سازی‌شون بشه، هم نکات پرداکشن رو بررسی کنیم. از اونجایی که مثال‌های ویدیو دوم و سوم Aspire مدت‌هاست آماده است ولی به دلیل…»
🎄 چند پیشنهاد برای ۲۰۲۵ - پایانی

این پنجمین و آخرین سری پیشنهاداته، چند ساعت دیگه ۲۰۲۴ تموم می‌شه و امیدوارم این سری یادداشت‌ها ولو اندک، مفید یا الهام‌بخش بوده باشه.

1️⃣ روز (چند ساعت) تا ۲۰۲۵؛ پیشنهاداتی در مورد خودمون!:

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

تغییر از خودمون شروع می‌شه؛ «پرنسیپ» رکن اصلی پیشرفته.

عمل به جای انتظار.

تحمل و صبر نظرات متفاوت.

هیچ چیز ایده‌آل نیست، ایده‌آل هم نخواهد شد. «حرکت مداوم در مسیر بهبود» مهمه!

تا می‌تونیم گوش بدیم، فکر کنیم، در آینده وقت برای حرف زدن همیشه هست...

نکبتی بالاتر از تعصب نداریم، چون حتی جلو اصلاح ریشه بدی‌ها یعنی دروغ رو هم می‌گیره.

🌱 امیدوارم این ۵ روز و پیشنهادها، حمل بر نصیحت یا توهم و تکبر صلاحیت نصیحت، نشده باشه، و فقط پیشنهادات و یادآوری‌هایی که به خودم داشتم رو با شما هم اشتراک گذاشتم تا اگر نظر و اصلاحی دارید به خودم برای بهبود خودم کمک کنید.

ببخشید اگر از موضوعات مورد انتظار از این کانال دور بود.
سال ۲۰۲۵ رو برای همه سالی پر از پیشرفت و سلامتی و شادی آرزو می‌کنم...

🔔 در ضمن دورهمی یکشنبه رو هم اگر دوست داشتید شرکت کنید خوشحال می‌شم ببینمتون 😊
Please open Telegram to view this post
VIEW IN TELEGRAM
9
🧨 بمب‌های خفته در پکیج‌ها!

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

این موضوع در مورد پکیج‌های جاوا اسکریپت و پایتون و گو هم هست. اینو نوشتم تا کمی توجهتون رو به سمت آسیب‌های بالقوه‌ی این‌ها جلب کنم.

مثال دنیای واقعی:

سال ۲۰۲۴؛ XZ Utils Backdoor

نسخه‌های ۵.۶.۰ و ۵.۶.۱ کتابخونه فشرده‌سازی XZ Utils بالاترین درجه آسیب‌پذیری CVSS، یعنی ۱۰ رو به خاطر بکدور تعمدی دریافت کرد که به هکر اجازه می‌داد بدون مجوز به ماشین لینوکسی دسترسی پیدا کنن. با احراز هویت SSH تداخل داشت که باعث می‌شد هکر بتونه به سیستم‌ها نفوذ کنن. ☠️
توزیع‌های مهم لینوکس مثل فدورا، دبیان، اوپن‌سوزه و کالی لینوکس رو درگیر کرد.

فجایع Solarwinds و Log4Shell و MavenGate و... کلی اتفاق دیگه، نمونه‌های خوبی از آسیب خوردن یا آسیب زدن به پروژه‌ها بود.

طبق آمار، بیش از ۵۰ درصد پروژه‌های ما با کتابخونه‌ها و ابزارهای کدباز تولید می‌شه. لطفا بیشتر به این موضوع توجه کنید و اگر بسته‌ای نیاز به به‌روز رسانی داره، زحمتش رو بکشید 😊 اکثر این نمونه‌ها ساده است، سورس رو باز کنید، وابستگی‌ها رو لایه به لایه به‌روزرسانی کنید (شاید تغییرات کوچکی از جنس breaking change نیاز داشته باشه) بعد pull request.
چرا می‌گم آسونه؟ چون در مورد آسیب‌پذیری‌های شناخته شده صحبت می‌کنم. نه اینکه بگردید آسیب‌پذیری پیدا کنید، خود ویژوال استدیو یا SonarQube دقیقا می‌گن کدوم بسته آسیب‌پذیره.

تمرین خوبیه! اعتماد کنید... نمونه خواستید برای تمرین، بهم بگید 😉

#security
Please open Telegram to view this post
VIEW IN TELEGRAM
5
🚀 مقایسه انواع کانتینر ایمیج‌ها برای دات‌نت ۹.
یه مقایسه سریع! 🐳

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

💬 شما کدوم رو ترجیح می‌دین؟


#DotNet #DevOps
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍2
در رابطه با دورهمی یکشنبه و نزدیک بودن مثال‌ها به فضای کاری شرکت‌کننده‌ها؛ دوستانی که شرکت خواهید کرد عموما از کدوم مورد استفاده می‌کنید؟

* مانیتورینگ، OTel، Metrics, Traces 📌 اگر هنوز ثبت‌نام نکردید بشتابید و اگر صلاح دیدید به دوستانتون هم اطلاع بدید
Final Results
19%
Cloud: DataDog, Sentry, Azure Application Insights, AWS CloudWatch
6%
On-Premise Sentry
19%
On-Premise Grafana (Prometheus)
19%
On-Premise ELK Stack
19%
یک مرد از این قرطی‌بازی‌ها استفاده نمی‌کنه 😕
0%
بیا توی کامنت بگم
16%
یاد بده شاید طالب شدیم
tech-afternoon
در رابطه با دورهمی یکشنبه و نزدیک بودن مثال‌ها به فضای کاری شرکت‌کننده‌ها؛ دوستانی که شرکت خواهید کرد عموما از کدوم مورد استفاده می‌کنید؟

* مانیتورینگ، OTel، Metrics, Traces 📌 اگر هنوز ثبت‌نام نکردید بشتابید و اگر صلاح دیدید به دوستانتون هم اطلاع بدید
- ☁️ نزدیک ۲۰ درصد از شرکت‌کننده‌ها در نظرسنجی احتمالا خارج از ایران هستن که دسترسی به سرویس‌ها کلاد دارن

- 🤓 کمتر از یک‌پنجم دوست دارن بیشتر بدونن

- 😁 نزدیک یک‌پنجم، مثل یک سامورایی زندگی می‌کنن و ترجیح می‌دن حادثه غافلگیرشون کنه

- حدود ۶۴ درصد (چون هنوز از عدد ۶۳درصد بیزارم 😅) سروریس‌هاشون رو به نحوی (سرویس ابری یا غیرابری) مانیتور می‌کنن.

- من یه سرچ سریع کردم هیچ سرویس مدیریت شده‌ای بین سرویس‌دهنده‌های ایرانی پیدا نکردم. فقط آپداموس (از هم‌روش) بود که اونم Status Page بود عملا و خب قابل مقایسه نیست.

- پروژه کدبار Sentry، و نسخه Basic Self- managed از Elastic محدودیت‌هایی دارن که استفاده توی مقیاس بزرگ رو محدودی می‌کنن. از طرفی هم نگهداری Grafana در کنار Prometheus توی مقیاس بزرگ هزینه opex بالایی داره. ولی این محدودیت‌ها و هزینه‌ها هرچقدر باشه، ارزشش رو داره تا سرویس بهتری ارائه بدیم (با عرض احترام و شرمندگی خدمت سامورایی‌های عزیز جمع 😅)

- با اینکه مشارکت در نظرسنجی کمتر از ۱۰ درصد اعضاء کانال بود، ولی جالب بود. ممنون 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
سلام!
لینک گوگل میت جلسه امروز تغییر کرد، لینک جدید کیفیت HD و امکان ضبط خودکار جلسه رو داره.

🔗 گوگل میت: یکشنبه،۱۶ دی‌ماه و ۵ ژانویه؛ ساعت ۱۶:۳۰ به وقت تهران

من ۱۰ دقیقه قبل از شروع جلسه، برای سلام و احوال‌پرسی و شنیدن سوالات و... آنلاین خواهم بود.

امیدوارم جلسه خوبی داشته باشیم 😊🌱
Please open Telegram to view this post
VIEW IN TELEGRAM
9
⚡️📎 کاربرد و فرصت‌های Recognizers Text چیه و چرا باید بهش اهمیت بدیم؟

یه چالش جالب که پرداختن بهش می‌تونه تجربه کاربری بهتری برای مصرف‌کننده نهایی و تجربه بهتری سمت توسعه‌دهنده‌ها ایجاده کنه:
✍️ فهمیدن و پردازش متن‌هایی که آدم‌ها می‌نویسن.

حالا می‌تونه یه تاریخ باشه که تو یه فرم پر می‌کنن، یه عدد باشه که تو چت وارد می‌کنن یا یه عبارت مثل "یه هفته بعد" که قراره تبدیل به یه تاریخ واقعی بشه. اینجاست که ابزاری مثل Microsoft Recognizers Text میاد وسط و همه این کارا رو برامون ساده‌تر می‌کنه.

کتابخونه Microsoft Recognizers Text ابزاری قدرتمنده که وظیفه اصلیش اینه که متن ورودی رو بخونه و بفهمه. این یعنی چی؟ یعنی اگه کاربر شما بنویسه:
- "سه‌شنبه آینده"
- "۱۰۰ دلار"
- "۴۵ درصد"
- یا حتی یه شماره تلفن یا آدرس ایمیل

این ابزار می‌فهمه که با چه نوع داده‌ای سروکار داره و اون رو به یه فرمت ساخت‌یافته (Structured Format) تبدیل می‌کنه.

به چه دردی می‌خوره؟
فرض کن داری یه بات چت می‌سازی یا یه اپلیکیشن هوشمند که باید ورودی‌های کاربر رو تجزیه و تحلیل کنه. این ابزار می‌تونه بهت کمک کنه تا:
۱. زمان و تاریخ: هر نوع تاریخ یا زمانی که به زبان طبیعی نوشته شده (مثل "فردا ساعت ۳").
۲. اعداد و واحدها: درصدها، مقادیر پولی (مثل "۲۰۰ یورو") یا اندازه‌ها (مثل "۵ کیلو").
۳. ساختارهای متنی خاص: مثل ایمیل، شماره تلفن، آدرس IP، URL و غیره.

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

پلتفرم‌ها و زبان‌های پشتیبانی‌شده
کتابخونه Recognizers Text یه ابزار کراس‌پلتفرمه که فعلاً برای NET ،Python و JavaScript آماده استفاده‌ست. برای جاوا هم به زودی ریلیز خواهد شد. پس هرجایی که این زبان‌ها رو داریم، می‌تونیم راحت ازش استفاده کنیم.

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

چرا باید ازش استفاده کنیم؟
۱. سرعت توسعه بالا: به جای اینکه خودمون یه الگوریتم برای تشخیص این چیزا بنویسیم، یا توی regexهای ساده دست و پا بزنیم تا ایمیل و شماره تلفن بفهمیم، از یه ابزار آماده و غنی استفاده کنیم که کلی بهبود زمان و کیفیت رو تجربه کنیم.

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

۳. انعطاف‌پذیری: می‌تونیم به راحتی یه مدل جدید بسازیم یا یه زبانی که ساپورت نمی‌کنه رو بهش اضافه کنیم.

👀 چطوری استفاده کنیم؟
برای استفاده، باید یکی از پکیج‌های آماده‌شده رو نصب کنی:
- برای NET.: بسته Microsoft.Recognizers.Text

- برای پایتون:
pip install recognizers-text


- برای JavaScript:
npm install @microsoft/recognizers-text



🎮 مثال ساده:
فرض کن می‌خوایم یه تاریخ رو از متن کاربر استخراج کنی. کد زیر رو تو Python اجرا کن:

from recognizers_date_time import DateTimeRecognizer

recognizer = DateTimeRecognizer("en-us")
model = recognizer.get_date_time_model()
result = model.parse("I have a meeting tomorrow at 3 PM.")

print(result)


string inputText = "I have a meeting tomorrow at 3 PM.";

string culture = CultureInfo.GetCultureInfo("en-US").Name;

var model = DateTimeRecognizer.RecognizeDateTime(inputText, culture);

foreach(var result in model) {
Console.WriteLine($ "Text: {result.Text}");
Console.WriteLine($ "Type: {result.TypeName}");

foreach(var resolution in result.Resolution["values"]) {

Console.WriteLine($ "Resolution: {resolution}");

}
}


خروجی این می‌شه یه آبجکت که اطلاعات دقیق تاریخ و زمان رو در خودش داره. راحت‌تر از این هم داریم؟

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

💡 خود مایکروسافت هم ازش استفاده می‌کنه، مثلا توی ToDo یا ...
📱 گیت‌هاب Recognizers-Text
💬 نظرتون چیه؟ به درد می‌خوره؟
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥3😍2