وقتی با دادههای بزرگ سر و کار داریم، نمایش اطلاعات به صورت صفحهبندی شده خیلی مهمتر از حالت عادیه که دریافت داده از سمت سرور بار قابل توجهی نداره (چه سمت واکشی داده، چه سمت ارسال به سمت کلاینت)
و این خیلی مهم میشه که روش استاندارد و یکسانی داشته باشیم تا یکی شماره صفحه و تعداد رو توی GET نگیره یکی توی POST تا بتونیم هم جلو بار اضافی به سرور رو بگیریم هم کاربری یا توسعهدهندهای که با API سر و کار داره دیوانه نشه!
GET /users?limit=10&offset=20
این روش ساده و سرراسته، و امکان دسترسی مستقیم به صفحه دلخواه رو فراهم میکنه. ولی وقتی دیتاست خیلی بزرگ شه، مستعد درخواستهای عمدی یا سهوی کند کننده است! یا اگر دادهها مرتب تغییر کنن، شما یا یه چیزی از قلم میندازی یا تا بری صفحه ۲، دیتای صفحه ۱ افتاده توی صفحه ۲! (نرخ بالای تغییرات) کوئریاش هم اینجوریه:
-- SQL Server:
SELECT * FROM users
ORDER BY id
OFFSET 20 ROWS
FETCH NEXT 10 ROWS ONLY;
-- PostgreSQL:
SELECT * FROM users
ORDER BY id
LIMIT 10 OFFSET 20;
-- MongoDB:
db.users.find()
.sort({ id: 1 })
.skip(20)
.limit(10);
توی این روش به جای استفاده از offset، از یک نشانگر (cursor) استفاده میکنیم که به عنوان مرجع برای ادامهی دادهها عمل میکنه. معمولاً این cursor میتونه آخرین مقدار یک فیلد کلیدی مثل id یا تاریخ ایجاد باشه.
GET /users?limit=10&cursor=eyJpZCI6IDIwMH0=
این روش کارایی بهتری توی دادههای بزرگ داره، یکی از دلایلش اینه که نیازی سورت کردن داده و بعدش رد کردن تعدادی رکورد نداره! بلکه مستقیم (با کمک ایندکس البته) میره سراغ رکورد مورد نظر و تامام. اگر دادهها مرتب تغییر کنن، باز کاربر مسیر خودش رو پیمایش میکنه و دادههای تکراری نمیبینه یا دادههایی رو از دست نمیده.
ولی: پیچیدگی پیادهسازیش بیشتره. صفحه ۵ الزامان برای همه و در همه زمانها یک داده رو نشون نمیده.
برای مقیاس بزرگ این روش مناسبتره، اون بار تحمیلی سورت و skip توی مقیاس بزرگ کمرشکنه!
روش seek-pagination یا keyset pagination به روش cursor-based شباهت داره، ولی به صورت صریح از شرایط WHERE استفاده میکنه تا رکوردهایی که بعد از آخرین مقدار دیده شده قرار دارن رو برگردونه.
GET /orders?limit=10&last_id=1000
در اینجا فرض میکنیم که
last_id نشاندهندهی آخرین id دیده شده در صفحه قبلی هست. سرور از شرط WHERE id > 1000 استفاده میکنه تا رکوردهای بعدی رو برگردونه.بهرهوری بالایی توی کوئریهای حجیم داره چون از ایندکسها و شرایط ساده استفاده میکنه توی کوئریسازی. مضاف بر اینکه اطلاعات به صورت پیوسته و بدون تداخل برگردونده میشن. ولی: اگر بخوای رکوردها رو براساس چند فیلد مرتب کنی، ممکنه نیاز به تغییراتی در کوئری داشته باشی و توی کوئریهای چندشرطی پیچیدگی دارن.
GET /events?since=2023-10-01&until=2023-10-08
Link: </items?cursor=def456>; rel="next", </items?cursor=abc123>; rel="prev"
{
"data": [...],
"pagination": {
"total": 1000,
"next_cursor": "def456",
"has_more": true
}
}#API_Design
Please open Telegram to view this post
VIEW IN TELEGRAM
tech-afternoon
وقتی دادههامون به ترتیب زمان ثبت میشن (مثلاً رویدادهای یک سیستم لاگ یا خبرنامههای زنده)، میتونیم با استفاده از پارامترهایی مثل since و until بازهی زمانی دلخواهمون رو مشخص کنیم.
مثال:
GET /events?since=2025-01-01&until=2025-01-10
اینجا API رو طوری طراحی میکنیم که همهی رویدادهایی که بین اول تا دهم ژانویه اتفاق افتاده رو برگردونه.
وقتی دادهها به ترتیب زمان ثبت میشن، این روش خیلی منطقی و طبیعیه؛ و برای استفاده، فهم سادهای داره؛ ولی اگه چند رویداد دقیقا در یک بازه زمانی یکسان ثبت بشن، ممکنه با ترتیب دقیق برگردونده نشه. همچنین اگر بازهی زمانی خیلی گسترده باشه، ممکنه تعداد زیادی رکورد برگرده که میتونه روی پرفرمنس تاثیر منفی بذاره.
روش HATEOAS (Hypermedia As The Engine Of Application State) یکی از اصول کلیدی REST هست. توی این روش، پاسخهای API شامل لینکهایی به صفحات بعدی یا قبلی هستند. این لینکها معمولاً در هدر یا بدنهی پاسخ قرار میگیرند و به کلاینت میگن «برای ادامه اینجا رو ببین» یا «صفحه قبلی اینجاست».
مثال:
Link: </items?cursor=def456>; rel="next", </items?cursor=abc123>; rel="prev"
توی این مثال، لینکهای next و prev به کلاینت کمک میکنن بدون اینکه خودشون URL ها رو بسازن، به صفحات بعدی یا قبلی دسترسی پیدا کنن.
بزرگترین مزیتش علاوه بر استاندارد بودن، اینه که کلاینتها نیازی به دونستن ساختار URLها ندارن؛ API خودش مسیر بعدی رو بهشون میگه. در ضمن به راحتی میشه لینکهای مختلف (مثلاً first، last، یا حتی لینکهای مرتبط) رو اضافه کرد.از طرفی مدیریت و تولید این لینکها به دقت نیاز داره تا همهی روابط درست تعریف بشه؛ و استفاده از هدرهای HTTP اضافی ممکنه برای برخی کلاینتها و ابزارها پیچیده باشه.
توی این روش، به جای ارسال اطلاعات صفحهبندی در هدر، کل متادیتا (مثل تعداد کل رکوردها، cursor بعدی، و وضعیت وجود صفحهی بعدی) رو توی بدنهی پاسخ JSON میگنجونیم. این کار باعث میشه کلاینت به راحتی اطلاعات لازم رو از یک جا دریافت کنه.
{
"data": [...],
"pagination": {
"total": 1000,
"next_cursor": "def456",
"has_more": true
}
}اینجا کلاینت علاوه بر دادههای اصلی، اطلاعات کاملی از وضعیت صفحهبندی دریافت میکنه. خوبیش اینه که همهی اطلاعات مورد نیاز برای صفحهبندی توی یک JSON مشخص هستن و خوانایی بالایی هم داره چون ساختار JSON معمولاً برای توسعهدهندهها آشنا و راحته. ولی از اون سمت اضافه کردن متادیتا ممکنه حجم پاسخ رو کمی بیشتر کنه. همچنین با استانداردهای هدر HTTP در تضاده؛ یعنی برخی استانداردهای REST ترجیح میدن اطلاعات مربوط به ناوبری در هدر قرار بگیره، اگرچه این موضوع بیشتر یک نکته سبکسازیه تا یک مشکل جدی.
یا روی API Design ادامه بدیم:
اگر روی API Design بمونیم:
- موضوع API Documentation و Discoverability
- استراتژیهای مدیریت نسخهبندی API در طول زمان (API Evolution)
Please open Telegram to view this post
VIEW IN TELEGRAM
بیاین فرض کنیم REST API ماه مثل منو رستورانه؛ API Documentation همون فهرستیه که جزئیات هر غذا (یا توی این مورد، هر endpoint) رو شرح میده، مثلاً ورودیها، خروجیها، خطاهای احتمالی و ...
از طرفی، Discoverability یعنی این که چطور میتونیم به راحتی بفهمیم کدوم endpoint ها وجود دارن و چه امکاناتی رو فراهم میکنن. این باعث میشه که توسعهدهنده سریعتر بتونه از API استفاده کنه و به روزرسانیها رو در زمان مناسب متوجه بشه. این روزها هم که به جز توی پروژهها و تیمهای کوچیک، افراد و حتی تیمهایی که API رو توسعه میدن و API رو مصرف میکنن؛ از هم جداست. پس باید به فکر اون بیچارهای که میخواد API رو سمت خودش استفاده کنه هم باشیم؛ هم Documentation و هم Discoverability رو پاس بداریم (به فکر اعصاب افراد و وقت خودمون باشیم)
- راهنمای ورودی و خروجی: چه پارامترهایی نیاز دارین و خروجی چجوری خواهد بود. خصوصا وقتی آبجکتهای پیجیده و بزرگ تبادل میشه، این موضوع مهم خواهد بود.
- مثالهای کاربردی: نشون دادن نمونه درخواست و پاسخ.
- خطاها: توضیح اینکه چه خطاهایی ممکنه پیش بیاد و چطور میتونین اونا رو مدیریت کنین.
وقتی از Discoverability صحبت میکنیم، منظورمون اینه که API هایمون به راحتی قابل دسترسی و شناسایی باشه. این یعنی:
- سازماندهی مناسب: ساختار واضح و منظم برای endpointها.
- استفاده از استانداردها: مثل OpenAPI Specification که باعث میشه ابزارهای مختلف بتونن مستندات شما رو بخونن و حتی تست کنند.
- امکانات جستجو: مثلاً داشبوردهایی که امکان فیلتر کردن و جستجو در مستندات رو فراهم میکنن.
نگاهی به اکوسیستم:
استاندارد OpenAPI Specification: یه استاندارد باز برای توصیف APIها که اکثر ابزارهای مدرن از اون استفاده میکنن. و تقریبا مهمترین استاندارد این حوزه است.
ابزارهای Swagger UI / Swagger Editor: ابزاری برای نمایش مستندات API به صورت تعاملی (از OpenAPI به خوبی پشتیبانی میکنه)
ابزار Redoc: یه ابزار خوب برای ارائه مستندات API سازگار با OpenAPI به صورت آنلاین.
پلتفرم Postman: علاوه بر تست API، مستندات خوبی از APIها ایجاد میکنه، فضای مناسبی برای اشتراک API + Doc + Test + ... برای تیمها و شرکتها داره و کلا یک پلتفرم برای API سازمان است و محدود به یه تولز برای GET و POST نیست... پیشرو این داستانه و بعدتر Insomnia و ابزارهای مشابه هم با قوت و کاستیهای خاص خودشون اومدن
* ابزارهایی مثل API Blueprint هم بودن که اهمیت یا استقبال زیادی نداشتن و به حاشیه رونده شدن.
برای گو: swaggo و go-swagger
برای پایتون: خود FastAPI به صورت ضمنی
برای داتنت: دقت کنید که داتنت در نسخه ۹ به بعد هم کمافیالسابق OpenAPI رو پشتیبانی میکنه، بحثها سر جایگزینی اون UI سابقی است که Swagger UI تولید میکرد. و جایگزینهایی برای تولید Swagger UI و Redoc و Scaler ارائه شده.
📌 درضمن، بهزودی شیوه ارائه مطالب تغییر میکنه، توی وبلاگ خواهم نوشت که امکانات بهتری برای پیدا کردن مطالب و دستهبندیها و تجربه مطالعه داره و اینجا اعلانش رو قرار خواهم داد. برای همین هم این کد کوچیک رو نوشتم تا از مطالب کانال تلگرامی خروجی Markdown بگیرم که سریعتر مطالب فعلی رو منتقل کنم... اگر ایده یا پیشنهاد یا نقدی دارید خوشحال میشم.
Please open Telegram to view this post
VIEW IN TELEGRAM
swagger.io
OpenAPI Specification - Version 3.1.0 | Swagger
The OpenAPI Specification defines a standard interface to RESTful APIs which allows both humans and computers to understand service capabilities without access to source code, documentation, or network traffic inspection.
👍11 3
GET /v1/products HTTP/1.1
Host: api.example.com
GET /products HTTP/1.1
Host: api.example.com
X-API-Version: 1
GET /products HTTP/1.1
Host: api.example.com
Accept: application/vnd.myapi.v1+json
=======================
۱. روش Feature Flags
استفاده از feature flags این امکان رو میده که ویژگیهای جدید رو به صورت تدریجی به کاربران عرضه کنیم و در صورت بروز مشکل، به سرعت اونها رو غیرفعال کنیم (توی محصولات بزرگ این روش خیلی مرسومه).
مثال:
زمان توسعه یک endpoint جدید، میتونید با اضافه کردن یک feature flag، به صورت تدریجی این ویژگی رو برای گروههای خاصی فعال کنید.
۲. روش API Gateway Transformations
با API Gateway میشه درخواستها و پاسخها رو بین نسخههای مختلف API تغییر داد و این امکان رو میده که نسخههای قدیمی API رو بدون مشکل پشتیبانی کنیم.
مثال:
فرض کنین نسخهی جدید API ساختار پاسخها رو تغییر داده؛ با استفاده از API Gateway میتونیم دادههای نسخه قدیمی رو به فرمت نسخه جدید تبدیل کنیم بدون اینکه نیاز به تغییر کدهای کلاینت داشته باشیم (البته خوبه این کار رو تا زمان ارتقاء نسخههای کلاینت دنبال کنیم و دایمی نباشه).
۳. روش Backward Compatibility
توسعه API به شیوهای که تغییرات جدید باعث breaking change نسخههای قبلی نشه. برای این کار، معمولا:
- اضافه کردن فیلدهای جدید به دادههای خروجی به جای تغییر یا حذف فیلدهای قدیمی.
- استفاده از ورژنبندی تدریجی (rollout) برای نسخههای جدید.
=======================
آقا/خانم... این داستان API یه موضوع حیاتیه. با استفاده از روشهایی مثل URL versioning، Header versioning و Media Type versioning میتونیم ساختار API رو بهینه کنیم. همچنین، به کمک تکنیکهایی مثل feature flags، API gateway transformations و حفظ backward compatibility، میتونیم تغییرات رو به صورت تدریجی اعمال کنیم بدون اینکه کاربران موجود با خطا مواجه بشن.
و یک موضوع مهم، شیوه ارتباط و اطلاع تغییرات به تیمها و توسعهدهندههای دیگهایه که از API استفاده میکنن... خصوصا اگر سازمان بزرگ باشه، قشنگ مستعد به گند کشیده شدنه!
اگر موافقید تا اینجا API Design بس باشه، یه مدت تنوع بدیم...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10 6
This media is not supported in your browser
VIEW IN TELEGRAM
موضوع پستهای بعدی رو حدس بزنید 😁
😁11🤣3
رویکرد جدید تست نرمافزار با ACH
متا یک رویکرد جدید (از جنبههایی جدید) نسبت به تولید خودکار تستهای نرمافزار اتخاذ کرده با ابزاری به اسم ACH.
🌱 این ACH چیه؟
توی متا، ابزاری به اسم Automated Compliance Hardening (ACH) داریم که توی تست نرمافزار کلی تحول ایجاد کرده. این سیستم، از مدلهای زبان بزرگ (LLM) استفاده میکنه تا به روش «mutation-guided» تستهایی تولید کنه. به عبارت دیگه، ACH با وارد کردن خطاهای عمدی (که بهشون «mutants» میگیم) توی کد، دنبال این میگرده که آیا تستهای موجود اون خطاها رو پیدا میکنن یا نه. مثلا، توی حوزه حریم خصوصی، ACH به صورت خودکار به دنبال اشکالات مرتبط با حریم خصوصی میگرده و مطمئن میشه که این خطاها به سیستمهای ما راه پیدا نکنن. نتیجه؟ کدهای ما محکمتر میشن و ریسک حریم خصوصی کمتر میشه.
همچنین ACH تستهای واحد (unit tests) میسازه که هدفشون شکار اون خطاهای مشخصه. جالبتر اینکه، ما فقط نیاز داریم به صورت متنی و ساده توضیح بدیم که دنبال چه نوع خطاهایی هستیم؛ حتی اگه توضیحاتمون ناقص یا حتی یه کم متناقض باشه، ACH باز هم تستهایی تولید میکنه که تضمین میکنه اون خطاها رو پیدا میکنن.
در گذشته، بیشتر روشهای تست اتوماتیک فقط روی افزایش پوشش کد متمرکز بودن، ولی افزایش پوشش کد همیشه تضمین نمیکنه که خطاها رو پیدا کنیم. ACH از این سنت فاصله میگیره و بهطور خاص خطاها رو هدف قرار میده، البته غالباً باعث افزایش پوشش هم میشه. یه نکته خوب اینه که ACH بر پایه اصول Assured LLM-based Software Engineering ساخته شده، به این معنا که تضمین داره تستهای تولید شده واقعاً اون خطاها رو شکار میکنن.
❓ چطوری کار میکنه؟
تکنیکهای mutation testing مدتهاست که استفاده میشدن؛ یعنی با ایجاد خطاهای عمدی (mutants) توی کد (البته به نحوی که از تولید نهایی دور بمونن) میخوایم ببینیم که آیا تستها این تغییرات رو میگیرن یا نه. مشکل این روشها این بود که این mutants اغلب واقعگرایانه نبودن و کماکان نیاز به نوشتن دستی تستها توسط انسان وجود داشت.
ACH با استفاده از قابلیتهای مدلهای زبان بزرگ (LLM) به دو مشکل اصلی پایان میده:
- تولید mutantsهایی که واقعاً نمایانگر خطاهای واقعی باشن.
- تولید خودکار تستها برای شکار اون خطاها.
مراحل کار ACH:
۱: توضیح خطا: شما توضیح میدی که دنبال چه نوع خطاهایی هستی.
۲: تولید خطاها: ACH براساس توضیحات، تعداد زیادی خطا تولید میکنه.
۳: تولید تستها: سپس این خطاها رو به عنوان ورودی میگیره و تستهایی میسازه که مطمئن بشیم اون خطاها رو پیدا میکنن.
👁 چرا مهمه؟
فکر کنید متا با اون همه برنامهنویس و سیستمهای مختلف، چطور باید مطمئن بشه که همه چیز درست کار میکنه و مخصوصاً مسائل مربوط به حریم خصوصی کاربرها رعایت میشه؟ (منظور از حریم خصوصی همونه که شما راجع به یه کوفتی حرف میزنید، ۲ دقیقه بعدش اینستاگرام، پست و تبلیغ در مورد اون کوفت نمایش میده 😁) اینجاست که ACH میاد به کمک!!:
- با استفاده از LLMها، میتونه خیلی سریع و دقیق باگ تولید کنه
- تستهای متناسب با اون باگها رو مینویسه
- تضمین میکنه که تستها واقعاً اون باگها رو پیدا میکنن
🥸 کجا استفاده شده؟
متا این سیستم رو روی پلتفرمهای مختلفش مثل:
- فیسبوک
- اینستاگرام🤬
- واتساپ
- مسنجر
تست کرده و نتایج خیلی خوبی گرفته.
🚀 آینده چی میشه؟
تیم متا میخواد این تکنولوژی رو گسترش بده و به جاهای بیشتری ببره. هدفشون اینه که:
- ارزیابی ریسکها رو سادهتر کنن
- فشار ذهنی روی برنامهنویسها رو کم کنن
- یه اکوسیستم امنتر برای همه بسازن
خلاصه اینکه ACH نشون میده چطور هوش مصنوعی میتونه به کمک برنامهنویسها بیاد و کارهای سخت و وقتگیر رو براشون آسونتر کنه. مقاله هم روش دادن که میتونید عمیقتر مطالعه کنید...
به صورت کلی داستان تست نرمافزار داره تغییرات بزرگی میکنه. استارتاپها و شرکتهای متعددی دارن روش کار میکنن. خصوصا الان که توضیح و توصیف عملکرد کدهای ساده و متوسط رو با درصد خوبی از پسش برمیان...
با اینکه ۲ تا موضوع توی همین کانال و کلا دنیای توسعه نرمافزار فارسی زبان، خیلی نامحبوبه، یکی مستندسازی یکی تست، ولی اگر موافق باشین چند تا پست در موردش گپ بزنیم؟ (بزنیم:⚙️ | نزنیم: 🤪 ، اگر نزنیم، شما بگید تا اگر بلد بودم بریم سراغش... 😉)
متا یک رویکرد جدید (از جنبههایی جدید) نسبت به تولید خودکار تستهای نرمافزار اتخاذ کرده با ابزاری به اسم ACH.
🌱 این ACH چیه؟
توی متا، ابزاری به اسم Automated Compliance Hardening (ACH) داریم که توی تست نرمافزار کلی تحول ایجاد کرده. این سیستم، از مدلهای زبان بزرگ (LLM) استفاده میکنه تا به روش «mutation-guided» تستهایی تولید کنه. به عبارت دیگه، ACH با وارد کردن خطاهای عمدی (که بهشون «mutants» میگیم) توی کد، دنبال این میگرده که آیا تستهای موجود اون خطاها رو پیدا میکنن یا نه. مثلا، توی حوزه حریم خصوصی، ACH به صورت خودکار به دنبال اشکالات مرتبط با حریم خصوصی میگرده و مطمئن میشه که این خطاها به سیستمهای ما راه پیدا نکنن. نتیجه؟ کدهای ما محکمتر میشن و ریسک حریم خصوصی کمتر میشه.
همچنین ACH تستهای واحد (unit tests) میسازه که هدفشون شکار اون خطاهای مشخصه. جالبتر اینکه، ما فقط نیاز داریم به صورت متنی و ساده توضیح بدیم که دنبال چه نوع خطاهایی هستیم؛ حتی اگه توضیحاتمون ناقص یا حتی یه کم متناقض باشه، ACH باز هم تستهایی تولید میکنه که تضمین میکنه اون خطاها رو پیدا میکنن.
در گذشته، بیشتر روشهای تست اتوماتیک فقط روی افزایش پوشش کد متمرکز بودن، ولی افزایش پوشش کد همیشه تضمین نمیکنه که خطاها رو پیدا کنیم. ACH از این سنت فاصله میگیره و بهطور خاص خطاها رو هدف قرار میده، البته غالباً باعث افزایش پوشش هم میشه. یه نکته خوب اینه که ACH بر پایه اصول Assured LLM-based Software Engineering ساخته شده، به این معنا که تضمین داره تستهای تولید شده واقعاً اون خطاها رو شکار میکنن.
تکنیکهای mutation testing مدتهاست که استفاده میشدن؛ یعنی با ایجاد خطاهای عمدی (mutants) توی کد (البته به نحوی که از تولید نهایی دور بمونن) میخوایم ببینیم که آیا تستها این تغییرات رو میگیرن یا نه. مشکل این روشها این بود که این mutants اغلب واقعگرایانه نبودن و کماکان نیاز به نوشتن دستی تستها توسط انسان وجود داشت.
ACH با استفاده از قابلیتهای مدلهای زبان بزرگ (LLM) به دو مشکل اصلی پایان میده:
- تولید mutantsهایی که واقعاً نمایانگر خطاهای واقعی باشن.
- تولید خودکار تستها برای شکار اون خطاها.
مراحل کار ACH:
۱: توضیح خطا: شما توضیح میدی که دنبال چه نوع خطاهایی هستی.
۲: تولید خطاها: ACH براساس توضیحات، تعداد زیادی خطا تولید میکنه.
۳: تولید تستها: سپس این خطاها رو به عنوان ورودی میگیره و تستهایی میسازه که مطمئن بشیم اون خطاها رو پیدا میکنن.
فکر کنید متا با اون همه برنامهنویس و سیستمهای مختلف، چطور باید مطمئن بشه که همه چیز درست کار میکنه و مخصوصاً مسائل مربوط به حریم خصوصی کاربرها رعایت میشه؟ (منظور از حریم خصوصی همونه که شما راجع به یه کوفتی حرف میزنید، ۲ دقیقه بعدش اینستاگرام، پست و تبلیغ در مورد اون کوفت نمایش میده 😁) اینجاست که ACH میاد به کمک!!:
- با استفاده از LLMها، میتونه خیلی سریع و دقیق باگ تولید کنه
- تستهای متناسب با اون باگها رو مینویسه
- تضمین میکنه که تستها واقعاً اون باگها رو پیدا میکنن
🥸 کجا استفاده شده؟
متا این سیستم رو روی پلتفرمهای مختلفش مثل:
- فیسبوک
- اینستاگرام
- واتساپ
- مسنجر
تست کرده و نتایج خیلی خوبی گرفته.
تیم متا میخواد این تکنولوژی رو گسترش بده و به جاهای بیشتری ببره. هدفشون اینه که:
- ارزیابی ریسکها رو سادهتر کنن
- فشار ذهنی روی برنامهنویسها رو کم کنن
- یه اکوسیستم امنتر برای همه بسازن
خلاصه اینکه ACH نشون میده چطور هوش مصنوعی میتونه به کمک برنامهنویسها بیاد و کارهای سخت و وقتگیر رو براشون آسونتر کنه. مقاله هم روش دادن که میتونید عمیقتر مطالعه کنید...
به صورت کلی داستان تست نرمافزار داره تغییرات بزرگی میکنه. استارتاپها و شرکتهای متعددی دارن روش کار میکنن. خصوصا الان که توضیح و توصیف عملکرد کدهای ساده و متوسط رو با درصد خوبی از پسش برمیان...
با اینکه ۲ تا موضوع توی همین کانال و کلا دنیای توسعه نرمافزار فارسی زبان، خیلی نامحبوبه، یکی مستندسازی یکی تست، ولی اگر موافق باشین چند تا پست در موردش گپ بزنیم؟ (بزنیم:
Please open Telegram to view this post
VIEW IN TELEGRAM
شاید هر کسی که توسعه نرمافزار رو به عنوان شغلش عنوان میکنه، در مورد تستنویسی شنیده باشه، و خونده باشه، تمریناتی رو نوشته باشه و حتی بارها با خودش تصمیم یا آرزو کرده باشه که دیگه تست خواهم نوشت یا خدا کنه شرکتمون به تستنویسی رو بیاره! یا این کد رو بنویسیم، دیگه از کد بعدی فقط تست، تست، تست...
ولی در عمل چی میشه؟
عهد کردم که دگر می نخورم در همه عمر
بجز از امشب و فردا شب و شبهای دگر
من سالها چه در قالب تدریس یا مشاوره یا تکلید یا توسعهدهنده تلاش کردم تست رو توی تیمهای نرمافزاری شرکتهای مختلف جا بندازم... اون سالهایی مو داشتم و جوان بودم، فکر میکردم موضوع اصلی بلد نبودنه، و سعی میکردم با آموزش و مثال و... موضوع رو پیش ببرم... بعدتر که یه خورده بیشتر تجربه کسب کردم و موهام شروع کردن به کم شدن، یاد گرفتم که:
این رو دقیقا از زمانیکه ALM رو شروع به تدریس کردم هم به عنوان اولین جمله هر بار صحبت در موردش ذکر کردم...
یعنی چی که تست یک فرهنگه؟
با مثال میگم: تا حالا شده یه مکانیک یا لولهکش یا برقکار، کاری رو براتون انجام بدن ولی بعد از رفتنشون ببینید مشکل حل نشده؟ تا حالا دیدید بعضی از همین مشاغل، قبل از اینکه کار رو بهتون تحویل بدن ده جور وارسی و تستش میکنن؟ (که احتمالا از این دست استادکارها کم دیدیم و همیشه از دیگران در مورد چنین افرادی پرسوجو میکنیم)
تا حالا چقدر در مورد ساختمان، خودرو، پروژه سدسازی! ریلی، جاده و... دیدیم و شنیدیم و خوندیم که بدون تست کامل و بر اساس اینکه ظاهر اون چیز به گمانشون درست بوده، رونمایی یا عرضه کردن و بعد داد همه دراومده یا حتی مصیبت به وجود آورده؟
نرمافزار هم فراتر از اینها نیست! ما هم بخشی از همین جامعه هستیم... بنا به «هر» دلیلی، امروز ما ایرانیها، کمتر به کنترل کیفیت بها میدیم... چون برامون پیشفرض شده که عقوبتی نداره که... فوقش باگ پیدا میشه میریم حلش میکنیم... همین نگاه همه جا هست و فقط به خودمون نگیریم. مثلا فوقش این سیاست مالی در سطح کشور موجب دلار ۹۴ هزار تومنی میشه! فوقش این پراید کلی آدم رو به کشتن میده... اساسا در فرهنگ ما بازبینی و تست کردن طرح، تست کردن اجرا، خالی از اهمیته.
من اگر برگردم ایران و بخوام تیمی رو تشکیل بدم، مدتها روی فرهنگ اون تیم و محصول کار میکنم، چون با اجبار و توصیه و تشویق و... نمیتونم تست ساختارمند و اصولی رو توی فرایند توسعه محصول جا بندازم!
اولین باری که جرقه «فرهنگ» توی ذهنم شکل گرفت، سال ۲۰۰۹ بود که برای یک دوره آموزشی و امتحاناتش مدتی رفتم تایوان، روز اول، قبل از شروع دورهها یه بازدید از فرایند توسعه توی بخشهای مختلف کارخونه دیدیم، یعنی از تیمهای نرمافزار و فرمور تا خط تولید محصول و شگفتانگیزترینش برای من دقت و وسواس روی تست بود... با چیزی که ما در ایران انجام میدادیم زمین تا آسمون فرق داشت، کد رو از صد جور تست رد میکردن، تازه وقتی نرمافزار روی سختافزار پیاده میشد، «هر قطعه» دونه به دونه، ساعتها در شرایط مختلف تست میشد... و نهایتا فرایند tracing به طرز تحسینبرانگیزی انجام میشد. اون مدت حضور بین جماعت تایوانی که خیلی تکیه داشتن چینی نیستن، به من فهموند این دقت فراتر از اون شرکت خاصه. بیشتر چیزیه که در فرهنگ مردم تایوان نهادینه شده...
بعد از مهاجرت، همین رو بین همکارهای آلمانی و هلندی دیدم، یعنی تفاوت زیاد دقتشون با هندیها یا... (هرچند با هندیهایی کار کردم که خیلی فنی رو خوب بلد بودن و حتی دانش و تسلط توسعهشون بیشتر آلمانیه بود، ولی آلمانیه قبل از اینکه بگی چیزی آماده است، با وسواس و دقت متفاوتی بررسی میکرد.
اینها رو گفتم تا به عنوان بخش نخست چند پستی که در مورد تست خواهم نوشت، متذکر شم، عادات و فرهنگی ما در زندگی روزمره، در جامعه خیلی روی رفتارهای کاری و تخصصی ما اثرگذاره. من تلاش خواهم کرد پیشنهاداتم رو قبل از اینکه در مورد Fact و Theory نویسی و E2E و Cucumber در BDD بنویسم، در مورد چگونگی ایجاد فرهنگ و عادتسازی تست بنویسم... اگر با این رویه موافق بودید:
عکس هم مربوط به سال ۲۰۰۹ و در میان تایوانیهاست...
Please open Telegram to view this post
VIEW IN TELEGRAM
توی پست مقدمه گفتم که چرا تست نرمافزار بیشتر از اینکه تکنیک و دانش باشه، فرهنگ و عادت افراد و تیمهاست. خیلیها هستن که میتونن ده ساعت در مورد ریز و بم تست صحبت کنند؛ با اسم تمام لایبریهای این حوزه جمله بسازند و حتی نقاشیاش رو بکشن بدون اینکه از خط بیرون بزنن. ولی وقتی پای عمل میاد: «حالا الان که شرایطش نیست... انشالله از اسپرینت بعدی...»
🤓 چطوری شروع کنیم؟
آیا کسی که عادت به ورزش نداره، ولو اینکه دانشآموختهی رشته تربیتبدنی باشه، میتونه با روزی ۵ کیلومتر دویدن شروع کنه؟ خیر. تستنویسی هم نیاز به مقدمات و آمادگی داره. خود تستنویسی، مقدمات و آمادگی، نیست! بلکه فکر کردن به چگونه تست کردن، مقدمه است.
خیلی از تستها الزاما کمکی به آزمودن نرمافزار برای دنیای واقعی نمیکنه، شاید تعدادشون هم زیاد باشه، ولی کیفیت ندارن. یعنی واضحات رو تست میکنن. یا در شرایط ایدهآل و دور از واقعیات تست میکنن و همه چیز گُل و بلبل در میاد!
لذا قبل از اینکه چیزی رو تولید کنیم اول فکر کنیم که چه احتمالاتی برای اون بخشی که میخوایم توسعه بدیم مترتبه؟ بعد از اینکه یک لیست تهیه کردیم (حالا توی ذهنمون یا به شکل بهترش روی کاغذ یه شکل باز هم بهترش روی نرمافزار) بشینیم اولویت بدیم که کدوم احتمال رخداد و سطح اثرگذاری بالاتری داره؛ و فرض کنیم قراره فقط ۳ یا ۵ تست بنویسیم و بابت هر ایرادی که پیدا بشه پولی بپردازیم یا سوزنی پشت دستمون بخوره یا فلفلی توی دهنمون بریزن یا بیحیثیتمون کنن (منظورم اینه که جدی بگیریمش 😁)
با تعداد تست کم، ولی مهم تمرین کنیم! بله؛ با ۱ یا ۳ یا ۵ تست نوشتن، درسته که شما به coverage متوسط هم نمیرسید، ولی درست مثل با یک بارفیکس شروع کردنه... اگه عادت شه، اون وقت به ۳ تا و ۵ تا و ۱۰ تا و... هم میرسه. دقت کنید دوباره میگم، خودمون رو گول نزنیم، تست مزخرف و بدیهی نوشتن نه یکیش ارزشمنده نه میلیانها میلیانش... این دورهای که قراره خودتون رو عادت بدید و فرهنگسازی کنید، مهمترین چیز، تمرین و ممارست است، سر جدتون شوآف و توهم TDD و... ۴۰ روز به تعویق بندازین.
تعداد تست کم، ولی با اهمیت و اولویت بالا (اگر بلدید ولی عادت به تستنویسی ندارید، پیشنهاد من بین ۳ تا ۵ تا است و بس. اگر علاوه بر عادت نداشتن، دانش هم ندارید، فقط ۱) سنگ بزرگ نشونه نزدنه.
تویوتا سال در دهه ۱۹۳۰ و ۱۹۴۰ با تولیدات ساده، بعضا الهامگرفته یا مهندسی معکوس و... از فورد و شورولت شروع کرد تا بتونه ۱۹۵۰ کار طراحی اولین خودرو تماما تویوتا رو ادامه بده و تا امروز دست از ممارست و بهبود «تدریجی، ولی مداوم» برنداشته. هر اصلاحی منجمله «تستمحور نوشتن نرمافزار» از این قاعده خارج نیست...
* عکس: میز آقای Shoichiro Toyoda در موزه لومن، در شهر لاهه، هلند
مطلب بعدی: TDD چیه و چجوری شروع کنیم و ترمینولوژیاش؟
مطالب بعدترش: روشهای شبیهسازی وابستگیها؛ جاسازی تست در CI/CD، تستهای E2E و ، Integration، تستهای Behavior و کاربرد ابزارهای هوشمصنوعی در تست...
Please open Telegram to view this post
VIEW IN TELEGRAM
👏13 6❤2
شاید با دیدن این تیتر بگید: «چه سوال بدیهی و سادهای؟! چرا داره بدیهیات رو توضیح میده!»
ولی برای برخی که با تست آشنایی کافی ندارن، مفاهیم پایه ولی مهم، تاثیر پررنگی در ادامه راه وشیوه فکر کردن در مورد تست و طراحی صحیحش داره.
تست، یعنی «در صورت وقوع الف، حتما نتیجهی ب باید حاصل بشه؛ نه یک کلمه بیشتر نه یک کلمه کمتر»
- اینکه کد رو اجرا کنیم و خطا نده؛ تست نیست.
- اینکه دیتا بفرستیم سمت دیتابیس و ذخیره بشه، باز هم تست نیست!
بیاید همینو تدقیق کنیم:
۱: من جدول دانشآموزان رو در دیتابیس دارم که ۱۰ عدد رکورد دارد.
۲: رکوردی با مقادیر [امین، مصباحی، ۱۰ ساله] درج میکنم.
۳: چک میکنم تا تعداد رکوردها حتما برابر با ۱۱ باشه، تعداد دانشآموزانی که امین مصباحی و ۱۰ ساله باشن حتما برابر با ۱ باشد.
توی تست ما میگیم، دقیقا چه نتایجی باید محقق شده باشن، در صورتیکه چه کاری کرده باشیم. این شامل خطا هم میشه؛ یعنی میگیم اگر فلان کار رو کنیم، حتما باید خطای بهمان برگردد. هر خطایی جر خطای بهمان، یعنی تست پاس نشده است.
تست نوشتن الزاما به معنی TDD یا Test Driven Development نیست! حالا بگیم TDD چیه تا بگیم چرا الزامی نیست.
وقتی قبل از اینکه خود کد نوشته بشه، اول تستش رو بنویسیم و بعد مراحلی رو طی کنیم، میشه TDD. اولین سوال: وقتی کد رو ننوشتم، تست چی؟ کشک چی؟ آها. یه مثال ساده، قراره تا متد CreateUser رو بنویسیم:
۱: میریم توی تستدونی، یه تست مینویسیم به اسم CreateUser_ShouldCreateUser_WhenDataIsValid.
۲: داخل این تست مشخص میکنیم که اگه ورودیهای معتبر داده بشه، خروجی باید یه آبجکت کاربر با اطلاعات دقیق ورودی باشه.
۳: حالا وقتی تست رو اجرا میکنیم، چون کد رو ننوشتهایم، تست شکست میخوره؛ این دقیقاً نشونه اینه که باید برگردیم و کد رو بنویسیم.
اینجاست که مفهوم TDD شکل میگیره: یعنی اول شکست، بعد کد رو مینویسیم تا اون تست شکستخورده پاس بشه، بعد توی گام سوم بهینهاش میکنیم. هدف از نوشتن تست قبل از کد اینه که به ما کمک کنه دقیقاً مشخص کنیم «انتظارمون» از عملکرد متد چیه. وقتی تست پاس بشه، دیگه مطمئنیم که کدمون دقیقاً همون رفتاری رو داره که میخوایم.
حالا برگردیم سر داستان اول، مگه ما همیشه از زمین خالی شروع میکنیم که اول تستش رو بنویسیم بعد کد رو؟ اصلا مگه TDD روش مناسب همه تیمهاست؟
جواب: TDD خیلی خوبه، ولی الزامی نیست، برای همه تیمها هم شدنی نیست. تست نوشتن به معنی الزما TDD بودن نیست. یعنی شما میتونید اول کد نوشته باشید بعد تستش رو بنویسید، یا برای کدهایی که در گذشته نوشته شده تست بنویسید، حتی نه الزاما برای همه کدها، بلکه برای جاهایی که «مهم و مستعد رفتار غیر مطلوب» است (الزاما نباید خطا یا Exception/Error رخ بده، بلگه «هر» رفتاری به جز «اونچه که ما انتظار داریم» یعنی مستعد رفتار نامطلوب؛ مثلا محاسبه فاکتور با ارقام اشتباه، Error نیست، بلکه رفتاری است که مطلوب ما نیست)
در پست بعد اصطلاحات تست رو توضیح میدم و بعدش میریم سراغ کد.
اگر دوست داشتید تا کمی بیشتر بدونید شاید خوندن این مطلب بد نباشه تا تفاوت انواع رویهها رو آشنا شید.
* ایمان عزیز محبت داشت و پیام داد تا توی تولید محتوای بخش تست مشارکت کنه، و من هم خیلی خوشحال شدم که بشه با مشارکت ایمان، موضوع تست رو بهتر پیش ببریم. لذا به گزینههایی مثل جلسه ویدیویی مشترک، نوشتار پستهای مربوط به تست و شاید منتورشیپ ۳ تا ۵ نفر به مدت یک ماه تا رسیدن به مهارت نسبی روی unit test و end-to-end test و... فکر کنیم 🥳
در ضمن توی کامنت بگید چه زبانی براتون کاربردیتره برای مثالهای تست؟ (#C یا پایتون یا گو؟)
Please open Telegram to view this post
VIEW IN TELEGRAM
BrowserStack
TDD vs BDD vs ATDD : Key Differences | BrowserStack
Understand the key differences in testing techniques between TDD, BDD, & ATDD. Learn how these techniques fit into your test methodology with example.
روز مهندس….pdf
80.2 KB
چند خطی رو در مورد روز مهندس نوشتم، اگر دوست داشتید بخونید 😊🙏🌱
این پست هم شاید بیربط به امروز نباشه.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14👍2
#موقت
ترمینولوژی تست که توی پست قبل قولش رو داده بودم در حال انجامه. شکل نهایی دو پوستر فارسی خواهد بود+ فرمت مارکدان بهصورت کدباز؛ اولی ترمینولوژی عام تست، شامل توضیح کوتاه و یکی دو خطی هر مفهوم. دومی هم کاغذ تقلب برای xunit.
با اینکه به صورت کلی، نوشتن مطالب کانال، همیشه tech-midnight یا tech-before-sleep بوده🌛 (و schedule میشه که صبح منتشر شه) ولی هم انجامش کمی زمانبره و هم من این شبها کمتر فرصت دارم برای پرداختن بهش، که امیدوارم به زودی فرصت بشه.
علیالحساب شاید برای مدتی، مطالب کوتاهتر و با تناوب کمتر داشته باشیم... 😉
ارادتمند
ترمینولوژی تست که توی پست قبل قولش رو داده بودم در حال انجامه. شکل نهایی دو پوستر فارسی خواهد بود+ فرمت مارکدان بهصورت کدباز؛ اولی ترمینولوژی عام تست، شامل توضیح کوتاه و یکی دو خطی هر مفهوم. دومی هم کاغذ تقلب برای xunit.
با اینکه به صورت کلی، نوشتن مطالب کانال، همیشه tech-midnight یا tech-before-sleep بوده
علیالحساب شاید برای مدتی، مطالب کوتاهتر و با تناوب کمتر داشته باشیم... 😉
ارادتمند
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍4❤3 2
This media is not supported in your browser
VIEW IN TELEGRAM
چند روزی بیشتر از عرضه نسخه نهایی Aspire 9.1 نمیگذره، حالا بیاین ببینیم قراره توی vNext چی اضافه بشه 🚀😍
قابلیت جدید resource graph قراره بیاد که نقشه ارتباطات رو ببینیم و قطعا توی پروژههای بزرگ و مایکروسرویسی خیلی کمک میکنه...
قابلیت جدید resource graph قراره بیاد که نقشه ارتباطات رو ببینیم و قطعا توی پروژههای بزرگ و مایکروسرویسی خیلی کمک میکنه...
😍6❤2
شنبه ظهر ساعت ۱۲ در این کانال یک پوستر شامل ۷۰ مفهوم پرکابرد تست (فارغ از زبان و تکنولوژی) منتشر میشود.
کاربرد این پوستر چیست؟
کاربرد این پوستر چیست؟
Anonymous Quiz
5%
روی کاغذ سایز A2 پرینت، و جهت تمیز کردن شیشه در ایام خانهتکانی استفاده میکنیم.
3%
به درک اسفلالسافلین که در ساعت ۱۲ پوستر منتشر میشود
8%
روی مقوا پرینت و سپس لوله میکنیم، توی سر تیم QA میکوبیم
8%
چند اصطلاح کمتر شنیده شدهاش رو حفظ و با لهجه غلیظ نیویورکی توی هرجمع باربط و بیربطه بهکار میبریم
61%
میخوانیم، اگر نکته جدیدی داشت، سرچ میکنیم و تست را جدیتر میگیریم
2%
به تست باور ندارم، همهاش دروغ و خرافاته.
13%
ای کاش پوسترش عکس و جدول هم داشته باشه.
🤣12❤3👍2👀1
🚀 🧪 ترمینولوژی تست نرمافزار - ویراست ۰.۵
این پوستر تعریف ۷۰ عبارت مورد استفاده در تست نرمافزاره که قول داده بودم (مستقل از زبان و تکنولوژی توسعه)
سعی کردم چیز از قلم نیوفته ولی با توجه به مشغلههای کاری و گسست زمانی در نوشتنش، احتمال داره عباراتی جا مونده باشن، که امیدوارم توی نسخههای بعدی اضافه و تکمیل بشه.
پیشاپیش از هر نقد و پیشنهاد و تذکری که موجب بهبودش بشه سپاسگزارم.
سعی کردم تا فایل PDF کیفیت مطلوبی داشته باشه تا برای مطالعه و زوم یا حتی پرینت مناسب باشه.
⬇️ دانلود نسخه PDF
⬇️دانلود فایل JPEG
💬 مثل همیشه؛ نظر ؟ پیشنهاد ؟ نقد ؟ 😉
این پوستر تعریف ۷۰ عبارت مورد استفاده در تست نرمافزاره که قول داده بودم (مستقل از زبان و تکنولوژی توسعه)
سعی کردم چیز از قلم نیوفته ولی با توجه به مشغلههای کاری و گسست زمانی در نوشتنش، احتمال داره عباراتی جا مونده باشن، که امیدوارم توی نسخههای بعدی اضافه و تکمیل بشه.
پیشاپیش از هر نقد و پیشنهاد و تذکری که موجب بهبودش بشه سپاسگزارم.
سعی کردم تا فایل PDF کیفیت مطلوبی داشته باشه تا برای مطالعه و زوم یا حتی پرینت مناسب باشه.
⬇️ دانلود نسخه PDF
⬇️دانلود فایل JPEG
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13 6❤2
⚠️ این یک تبلیغ نیست.
هدف این کانال چیزی جز بیشتر یاد گرفتنمون نیست، دلیل معرفی این فرصت شغلی هم دقیقن همینه که فکر میکنم فرصتی برای یاد گرفتن بیشتره...
اگر خودتون یا از دوستانتون کسی back-end کار با گرایش به📱 است که API نویسی رو خوب بلده، دو تا از دوستان قدیمی و نزدیک من که سالها تجربه کار توی شرکتهایی مثل ING, Nike و... در حوزه هوشمصنوعی و دیتاساینس دارن، برگشتن ایران و تلاش میکنن به دور از هیاهو سرویسها و ابزارهای هوشمصنوعی درستوحسابی برای کسبوکارهای کوچیک توسعه بدن. لذا فرصت خوبی برای یادگیری و رشد فردی و کار خوب کردن محیا کردن.
📱 🤝 اگر تمایل داشتید بیشتر بدونید یا به دوستانتون معرفی کنید این شرح شغلیشون است. اینم آدرس سایتشون است!
هدف این کانال چیزی جز بیشتر یاد گرفتنمون نیست، دلیل معرفی این فرصت شغلی هم دقیقن همینه که فکر میکنم فرصتی برای یاد گرفتن بیشتره...
اگر خودتون یا از دوستانتون کسی back-end کار با گرایش به
Please open Telegram to view this post
VIEW IN TELEGRAM
جابینجا، شغلی رویایی خود را پیدا کنید
استخدام Python) Back-End Developer) در نوروتک | جابینجا
استخدام برای فرصت شغلی Python) Back-End Developer) در Neurotex,
2+ years of professional experience in Python development. BSc or above in Computer Science or a relat...
2+ years of professional experience in Python development. BSc or above in Computer Science or a relat...
🤝5❤2
tech-afternoon
درضمن، بهزودی شیوه ارائه مطالب تغییر میکنه، توی وبلاگ خواهم نوشت که امکانات بهتری برای پیدا کردن مطالب و دستهبندیها و تجربه مطالعه داره و اینجا اعلانش رو قرار خواهم داد. برای همین هم این کد کوچیک رو نوشتم تا از مطالب کانال تلگرامی خروجی Markdown بگیرم که سریعتر مطالب فعلی رو منتقل کنم... اگر ایده یا پیشنهاد یا نقدی دارید خوشحال میشم.
دو سه بار دوستان پیشنهاد دادن که از هشتگ استفاده کنم برای راحتتر پیدا کردن مطالب. با اینکه کمتر از ۷ ماه از ایجاد این کانال گذشته و تعداد پستها اونقدر نیست که بگیم هشتگگذاری عملی نشدنی است، ولی انجام این کار به صورت دستی، عملا با ماهیت پیدایش کامپیوتر که یکی از کارهاش انجام کارهای تکراری است در تضاده!
پس:
بریم برای اینکه کدی که تا حالا فقط پستها رو میخوند و ازشون فایل مارکدان استخراج میکرد رو یه خورده کامل کنیم. یعنی پُست رو بدیم به یه سرویس AI لوکال مثل ollama با مدلهای SLM، یا ریموت، مثل DeepSeek یا ChatGPT تا زحمت هشتگها رو بکشه و پُست رو هم با درج هشتگ آپدیت کنه!
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - aminmesbahi/telegram-channel2markdown: Python noscript to extract markdown files, from a Telegram channel's posts
Python noscript to extract markdown files, from a Telegram channel's posts - aminmesbahi/telegram-channel2markdown
🔥12 3❤1
یکشنبه ۱۹ اسفند (۹ مارچ) ساعت ۱۶:۳۰ به وقت تهران
اگر تمایل به شرکت دارید، لطفا فرم رو پر کنید تا لینک گوگلمیت براتون ارسال بشه؛ همچنین اگر موضوع خاصی مدنظر دارید تا در موردش صحبت کنیم، حتما بنویسید 😊
هزینه این جلسه «« کمک غیر الزامی »»» به یکی از موسسات زیر میباشد و ««« به هیچ وجه نیازی به اطلاع دادنش به من نیست»»»:
- مجتمع آموزشی نیکوکاری رعد: این موسسه از اوایل دهه ۶۰ تا امروز آموزشهای رایگانِ فنی و حرفهای تخصصی با هدف توانمندسازی توانیابان ارائه میکنه
- مدرسه کودکان کار صبح رویش: ویژه کودکان کار است و علاوه بر امکان تحصیل، به این بچهها خدمات روانشناسی و درمان آسیبهای روانی ارائه میکنه.
- قصه، رنگ، توپ: پویشی برای آموزش، کتابخوانی، توانمندسازی و پرورش استعدادهای کودکان استان کهگیلویه و بویر احمد (اطلاعات بیشتر در پادکست دغدغه ایران)
شادی، خوشبختی و پیشرفت، مفاهیمی جمعی هستند، نه فردی... 🌱♻️
برای دوستان خارج از ایران که دسترسی به پرداخت ریالی ندارند، ۱۰ تا ۳۰ دلار به هرجا که در خدمت «آموزش» خصوصا به «کودکان» باشه (مثل children.org) 😉🙏
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
تکاسپاگتی ۱
تِکاپاگتی اول - ۳۰ دی ۱۴۰۳ / ۱۹ ژانویه ۲۰۲۵
مقدمه: (0:00)
خبر اول، تغییرات Fluent Assertions : (0:02:10)
خبر دوم، Cloudy (0:09:49)
خبر سوم، نتفلیکس و مقیاسپذیری (0:14:20)
خبر چهارم، دعوا سر مشارکت در کدبازها! (0:25:30)
خبر پنجم، رایدر و تغییرات ۲۰۲۵.۱…
مقدمه: (0:00)
خبر اول، تغییرات Fluent Assertions : (0:02:10)
خبر دوم، Cloudy (0:09:49)
خبر سوم، نتفلیکس و مقیاسپذیری (0:14:20)
خبر چهارم، دعوا سر مشارکت در کدبازها! (0:25:30)
خبر پنجم، رایدر و تغییرات ۲۰۲۵.۱…
❤14
۲ خبر مهم از چین!
دیروز بایتدنس (شرکت توسعهدهنده تیکتاک) که طی ماههای گذشته احتمالا جدلهای آمریکا باهاش رو شنیدید، ۲ میلیارد کاربر داره، و فارغ از اینکه چه قضاوتی در مورد مسایل محتوا و سیاست داشته باشیم؛ از نظر مهندسی چه زیرساخت چه توسعه، مورد خیلی جذابیه 🤩
اولا بایتدنس تعداد پروژهها کدباز زیادی داره، کلی چیز برای یادگیر توی پروژههاش هست که شاید یا بار چند تاش رو که میشناسم، مرور کردیم.
✅ ولی خبر اصلی اینه که محصول جدیدش رو دیروز به نام LYNX معرفی کرد که احتمالا برای react و angular بتونه دردسرساز بشه، چرا؟ چون یه محصول experimental نیست که بگیم شاید بگیره، شاید نه! با اینکه بایتدنس عموم اپلیکیشنهاش رو نیتیو (swift و kotlin) توسعه میده ولی یه جاهایی از اپلیکیشنهاش از Lynx استفاده کرده. و به طور خلاصه توی پروداکشنه!
در ضمن ادعا میکنه که توی مدیریت ترد سعی کرده خیلی بهینه باشه و یکی از تصمیمات معماری مهمش، تقسیمبندی اجباری اسکریپتهای کاربر به دو محیط اجرایی مجزاست که به صورت استاتیک اعمال میشه:
*️⃣ محیط اجرایی «main-thread» که توسط PrimJS (که برای لینکس بهینهشده) پشتیبانی میشه و Sync UI رو مدیریت میکنه و دارای دسترسی ویژهای برای اجرای اولیه و پردازش ایونتها با اولویت بالاتره.
*️⃣ محیط اجرایی «background» که به عنوان پیشفرض برای کدهای کاربر استفاده میشود و تضمین میکند main-thread همیشه حجم کاری کمی داشته و مسدود نشه.
صفحه اصلی لینکس
بحث و گفتگو ذیل خبر Hacker News
متن مقاله اصلی
✅ خبر دوم: اگر به حوزه زیرساخت سختافزاری خصوصا سرورها علاقهمند باشید، امروز یه GPU عجیب با معماری نوآورانه توسط شرکت bolt graphics به اسم zeus معرفی شده که اگر طبق برنامه پیش بره، آخر سال دیگه عرضه میشه و اگر در واقعیت هم مثل توضیحات این مقاله باشه، احتمالا با یه تکنولوژی انقلابی روبرو خواهیم شد. البته در مورد GenAI ادعایی نکرده، ولی توی رندر و شبیهسازی فیزیک ادعای بزرگی داره. البته سازگاری با کتابخونهها و SDKها فعلا NVIDIA رو توی صدر نگه خواهد داشت...
خلاصه اینکه هر از گاهی به ریپوهای کدباز شرکتهایی مثل tencent یا bytedance یا شرکتهایی که ۱۰ سال پیش میگفتیم «بابا اینا که چینیان و...» بزنیم، پروژههای خفنی برای استفاده و یاد گرفتن دارن که شاید بهتر باشه چین رو از زاویه لایه اپلیکیشن کاربردی فقط نبینیم و توی کتابخونهها و ابزارها و لایه تکنولوژی خیلی جدیتر نگاه کنیم...
دیروز بایتدنس (شرکت توسعهدهنده تیکتاک) که طی ماههای گذشته احتمالا جدلهای آمریکا باهاش رو شنیدید، ۲ میلیارد کاربر داره، و فارغ از اینکه چه قضاوتی در مورد مسایل محتوا و سیاست داشته باشیم؛ از نظر مهندسی چه زیرساخت چه توسعه، مورد خیلی جذابیه 🤩
اولا بایتدنس تعداد پروژهها کدباز زیادی داره، کلی چیز برای یادگیر توی پروژههاش هست که شاید یا بار چند تاش رو که میشناسم، مرور کردیم.
در ضمن ادعا میکنه که توی مدیریت ترد سعی کرده خیلی بهینه باشه و یکی از تصمیمات معماری مهمش، تقسیمبندی اجباری اسکریپتهای کاربر به دو محیط اجرایی مجزاست که به صورت استاتیک اعمال میشه:
صفحه اصلی لینکس
بحث و گفتگو ذیل خبر Hacker News
متن مقاله اصلی
خلاصه اینکه هر از گاهی به ریپوهای کدباز شرکتهایی مثل tencent یا bytedance یا شرکتهایی که ۱۰ سال پیش میگفتیم «بابا اینا که چینیان و...» بزنیم، پروژههای خفنی برای استفاده و یاد گرفتن دارن که شاید بهتر باشه چین رو از زاویه لایه اپلیکیشن کاربردی فقط نبینیم و توی کتابخونهها و ابزارها و لایه تکنولوژی خیلی جدیتر نگاه کنیم...
Please open Telegram to view this post
VIEW IN TELEGRAM
lynxjs.org
Empower the web community and invite more to build cross-platform apps
👍11❤3 1
کنفرانس DeveloperWeek 2025 یه فرق بزرگ با دورههای قبل داشت، اونم حضور پررنگ AI در روند کار تیمهای مهندسی نرمافزار. هوش مصنوعی رو دیگه نباید یه ابزار تولید کد یا تکمیل دستورات دونست؛ بلکه به عنوان یک همراه عینی در فرایند توسعه نرمافزار حضور داره. مثلا:
ابزارهای هوش مصنوعی دیگه بهینهسازی تستها، تسهیل مهاجرت کد قدیمی و پاسخگویی سریع به رخدادها رو هم میتونن انجام بدن. این یعنی صرفهجویی چشمگیر برای وظایف تکراری... یعنی اجازه میدن تا روی مسایل پیچیدهتر و طراحیهای استراتژیک تمرکز کنیم.
مثلا: آمازون اعلام کرده که با کمک AI تونسته ۳۰,۰۰۰ برنامه رو به نسخه جدید جاوا منتقل کنن و از ۴,۵۰۰ ساعت کار دستی صرفهجویی بشه!
آنوپ دیوراس (Amazon):
"این سیستمهای AI توانایی تسریع ۸۰٪ وظایف توسعه نرمافزار رو دارن. اونها فقط کد تولید نمیکنن؛ بلکه کل جریان کاری، از مستندسازی تا وظایف پیچیده مهندسی، رو تغییر میدن."
با وجود پیشرفتهای اخیر AI، بازبینی انسانی همچنان حیاتیه. مهارت در نظارت کیفی کدها، رعایت استانداردهای امنیتی و جلوگیری از خطاهای احتمالی کماکان وظیفه مهندسهاست (یعنی فعلا کسی بیکار میشه که یا از AI فقط copy/paste میکنه و درک نمیکنه، یا کسی که تواناییش اندازه ممیزی کدهای AI نیست). هوش مصنوعی به عنوان یک تقویتکننده عمل میکند، نه جایگزین!
مثلا: مایکروسافت و گوگل تأکید میکنن که استفاده از یادگیری تقویتی با نظارت انسانی (Human-in-the-Loop) برای جلوگیری از "هالوسینیشن"های AI ضرورین.
مدیر ارشد و مدیر محصول AI مایکروسافت، Nilo Dutta Roy:
"تفاوت بین هوشمندی مدلها و کاربردی بودن اونها در دنیای واقعی به بازخورد انسانی بستگی داره."
آینده مهندسی نرمافزار به مهندسهایی تعلق داره که بتونن AI رو هدایت و کنترل کنن. تسلط به طراحی سیستم، معماری نرمافزار و درک نقاط قوت و ضعف AI از ضروریات این حرفه توی دنیای مدرن محسوب خواهد شد. مهارتهایی کمک کنه تا ابزار جدید (AI) در ترکیب با تجربههای سنتی، ارزش افزوده بالایی ایجاد کنه.
آنوپ دیوراس (Amazon):
"توسعهدهندهها باید پشت فرمون AI باشن؛ اهداف رو مشخص کنن و AI رو به سمت دستیابی به بهترین نتایج هدایت کنن."
ادامه توی بخش دوم 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
💪 ۸ مارس، و آنانکه فقط باید باور کنن چقدر توانمند هستند...
سالها پیش یه تحقیقی خوندم در مورد اینکه چرا دختربچهها کمتر سراغ شغلهای مهندسی میرن و بیشتر متمایل به معلمی و پرستاری و... میشن. این تحقیق ریشه این رفتار رو در باورها، و تشکیل این باورها رو در کودکی، اساببازیها، باورهای محیط پیرامون، و فضای بچهها دیده بود...
نتیجه این تحقیق منجر به شخصیتهای لگو شد که اون آچار به دستها و... خانم باشن، اسباببازیهای دخترونه تغییر کنه و فقط کاراکتر باربی و پرستار و... نباشه. با دخترهای فضانورد و مهندس و... مصاحبههای مفصلی شده بود و فصل مشترک علاقه همهشون، باور اطرافیانشون به تواناییشون برای این شغلها، انگیزه، اسباببازی و نوع بازیهای کودکی و... بود.
یکی از اولین تکافترنونها سال ۲۰۱۵، به مناسبت روز ICT و دختران بود و فقط خانمها توش دعوت بودن! ماگ با طرح🤪 صورتی با پاپیون هم چاپ کردم براش. ۲ سال هم برگزار شد.
منظورم اینه که اگر کودک یا نوجوان دختر دور و برمون داریم، کمکشون کنیم و فضایی محیا کنیم تا باور کنه میتونه... فضایی محیا کنیم که «اگر» به حوزه تکنولوژی علاقه داره، بتونه راحت راهشو «پیدا» کنه و «ادامه» بده. متاسفانه فضای جهان برای خانمها خصوصا توی ایران، در حوزه تکنولوژی بدجوری مسموم و بده! یعنی تعداد show womanهای توخالی که عملا استند تبلیغاتی شدن با لباس تکنولوژی زیاد و زیاد شده. و فضا برای نمایش توانمندیهای دختران و زنان خفن جامعه که کم هم نیستن، کمتره...
اولش میخواستم توی این پست، زنان هیولایی که توی حوزه توسعه نرمافزار میشناسم معرفی کنم، ولی دیدم بهتره تا فقط بگم «به نیمی از جامعه باور داشته باشیم و سنگ جلو پاشون نندازیم، هیچ نیازی به کمک و پروموت شدن توسط اون نیمه دیگه جامعه ندارن، خودشون بلدن، توانمندن، و راهشونو پیدا میکنن؛»
اگر دختر دارید: کتاب زنان پیشرو (چند جلد است) که توسط خانم الهام نظری نوشته شده، داستان هموناییه که فقط «خواستن» و پیشرو بودن...
اینم فایل پیدیاف که خود انتشارات هوپا گذاشته
سالها پیش یه تحقیقی خوندم در مورد اینکه چرا دختربچهها کمتر سراغ شغلهای مهندسی میرن و بیشتر متمایل به معلمی و پرستاری و... میشن. این تحقیق ریشه این رفتار رو در باورها، و تشکیل این باورها رو در کودکی، اساببازیها، باورهای محیط پیرامون، و فضای بچهها دیده بود...
نتیجه این تحقیق منجر به شخصیتهای لگو شد که اون آچار به دستها و... خانم باشن، اسباببازیهای دخترونه تغییر کنه و فقط کاراکتر باربی و پرستار و... نباشه. با دخترهای فضانورد و مهندس و... مصاحبههای مفصلی شده بود و فصل مشترک علاقه همهشون، باور اطرافیانشون به تواناییشون برای این شغلها، انگیزه، اسباببازی و نوع بازیهای کودکی و... بود.
یکی از اولین تکافترنونها سال ۲۰۱۵، به مناسبت روز ICT و دختران بود و فقط خانمها توش دعوت بودن! ماگ با طرح
منظورم اینه که اگر کودک یا نوجوان دختر دور و برمون داریم، کمکشون کنیم و فضایی محیا کنیم تا باور کنه میتونه... فضایی محیا کنیم که «اگر» به حوزه تکنولوژی علاقه داره، بتونه راحت راهشو «پیدا» کنه و «ادامه» بده. متاسفانه فضای جهان برای خانمها خصوصا توی ایران، در حوزه تکنولوژی بدجوری مسموم و بده! یعنی تعداد show womanهای توخالی که عملا استند تبلیغاتی شدن با لباس تکنولوژی زیاد و زیاد شده. و فضا برای نمایش توانمندیهای دختران و زنان خفن جامعه که کم هم نیستن، کمتره...
اولش میخواستم توی این پست، زنان هیولایی که توی حوزه توسعه نرمافزار میشناسم معرفی کنم، ولی دیدم بهتره تا فقط بگم «به نیمی از جامعه باور داشته باشیم و سنگ جلو پاشون نندازیم، هیچ نیازی به کمک و پروموت شدن توسط اون نیمه دیگه جامعه ندارن، خودشون بلدن، توانمندن، و راهشونو پیدا میکنن؛»
اگر دختر دارید: کتاب زنان پیشرو (چند جلد است) که توسط خانم الهام نظری نوشته شده، داستان هموناییه که فقط «خواستن» و پیشرو بودن...
اینم فایل پیدیاف که خود انتشارات هوپا گذاشته
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍2 2