DevTwitter | توییت برنامه نویسی
23.5K subscribers
4.44K photos
363 videos
6 files
4.18K links
توییت های برنامه نویسی و طراحی وب :)

@dvtwi

Hashtags:
devtwitter.t.iss.one/5

DevBooks Channel:
https://t.iss.one/+AYbOl75CLNYxY2U0

Github:
https://github.com/DevTwitter

X:
https://x.com/devtwittir
Download Telegram
سیستم کند است؟ این ۴ عدد دروغ نمی‌گویند

کند شدن API یکی از رایج‌ترین چالش‌ها در سیستم‌های نرم‌افزاری است.
اما تشخیص اینکه دقیقاً چه چیزی کند شده بدون داده و متریک، عملاً غیرممکن است.
تحلیل عملکرد سیستم نیازمند اعداد واقعی و قابل اندازه‌گیری است؛ متریک‌هایی که بتوانند محل گلوگاه‌ها و نقاط ضعف را به‌درستی مشخص کنند.

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

1- معیار Queries Per Second (QPS)
این معیار نشان می‌دهد سیستم شما در هر ثانیه چند درخواست ورودی دریافت می‌کند.
برای مثال، اگر سرور در یک ثانیه ۱۰۰۰ درخواست دریافت کند، مقدار QPS برابر با ۱۰۰۰ خواهد بود.
در نگاه اول، QPS متریکی ساده به نظر می‌رسد، اما چالش اصلی در پایداری آن نهفته است. بسیاری از سیستم‌ها قادر به حفظ QPS بالا در بازه‌های زمانی طولانی نیستند و در شرایط فشار، به‌تدریج دچار افت عملکرد می‌شوند.

2- معیار Transactions Per Second (TPS)
این معیار تعداد تراکنش‌های کاملاً انجام‌شده در هر ثانیه را نشان می‌دهد.
یک تراکنش شامل کل مسیر پردازش درخواست است؛ از دریافت درخواست تا تعامل با دیتابیس و بازگشت پاسخ نهایی.
برخلاف QPS که صرفاً تعداد درخواست‌های ورودی را نشان می‌دهد، TPS بیانگر میزان کار واقعی انجام‌شده است و معمولاً مهم‌ترین متریک از دیدگاه کسب‌وکار محسوب می‌شود.

3- معیار Concurrency (همزمانی)
این معیار تعداد درخواست‌های فعالی است که سیستم در یک لحظه در حال پردازش آن‌هاست.
برای مثال، ممکن است سیستم ۱۰۰ درخواست در ثانیه دریافت کند، اما اگر پردازش هر درخواست ۵ ثانیه طول بکشد، در عمل با ۵۰۰ درخواست همزمان مواجه خواهیم بود.
همزمانی بالا به معنای نیاز به مدیریت بهینه‌تر منابع، connection pool مناسب و کنترل دقیق‌تر threadها است.

4- معیار Response Time
این معیار مدت زمانی است که از آغاز یک درخواست تا دریافت پاسخ نهایی سپری می‌شود.
این متریک هم در سطح کلاینت و هم در سطح سرور اندازه‌گیری می‌شود و نقش کلیدی در تجربه کاربری و توان پردازشی سیستم دارد.

رابطه بین متریک‌ها:
این چهار متریک به‌طور مستقل عمل نمی‌کنند و رابطه‌ی مشخصی میان آن‌ها وجود دارد:
QPS = Concurrency ÷ Average Response Time
بر اساس این رابطه، افزایش همزمانی یا کاهش میانگین زمان پاسخ، منجر به افزایش توان پردازشی (Throughput) سیستم می‌شود.

تحلیل صحیح عملکرد سیستم بدون درک دقیق این متریک‌ها ممکن نیست.

@DevTwitter | <Amir Rahimi Nejad/>
19👍6🔥2
میدونستید چرا Nginx همه‌جا هست؟

سال‌ها Apache بازیگر بی‌رقیبِ دنیای وب‌سرورها بود.
تقریباً ۲۰ سال تمام.
تا اینکه Nginx اومد و بدون سر و صدا، بازی رو عوض کرد.

امروز Nginx پشت صحنه‌ی خیلی از غول‌های اینترنت نشسته:
Netflix، Airbnb، Dropbox
نه به‌خاطر اینکه جدیدتر یا مد روزه،
بلکه چون مشکلاتی رو حل کرد که توی ترافیک بالا، Apache به‌سختی از پسشون برمی‌اومد.

اما چرا Nginx اینقدر محبوب شد؟
- همزمان هزاران کانکشن رو راحت هندل می‌کنه
- به‌عنوان Reverse Proxy فوق‌العاده عمل می‌کنه
- به‌عنوان Load Balancing ساده و قدرتمند
- دارای Cache داخلی برای سرعت بیشتر
ب-ه عهده گرفتن SSL Termination و سبک‌تر کردن اپلیکیشن‌ها

توی خیلی از معماری‌های مدرن، Nginx دیگه فقط «وب‌سرور» نیست؛
عملاً مغز هدایت ترافیک و خط اول امنیت سیستم حساب می‌شه.

@DevTwitter | <Amir Rahimi Nejad/>
👍6316🍌3🔥1
پلتفرم codewars فقط حل مسئله نیست، یاد گرفتن طرز فکره. Codewars یه پلتفرمه برای تمرین برنامه‌نویسی و حل مسئله با زبان‌های مختلف؛
جایی که می‌تونی چالش‌های کوچیک الگوریتمی حل کنی و مهارتت رو کم‌کم تقویت کنی.
چیزی که برای من Codewars رو واقعاً ارزشمند کرده، فقط حل کردن کاتاها نیست؛
بعد از حل مسئله، دیدن راه‌حل بقیه‌ست.
مثلاً امروز روی یه چالش کار می‌کردم که در ظاهر ساده بود،
ولی تا زمانی که الگوی مسئله رو درست نفهمیدم، پیاده‌سازیش گیج‌کننده می‌شد.
بعد از اینکه خودم حلش کردم و رفتم سراغ solutions:
دیدم بعضی‌ها همون مسئله رو با چند خط ساده‌تر حل کرده بودن
بعضی‌ها از نگاه کاملاً متفاوتی استفاده کرده بودن
و بعضی راه‌حل‌ها واقعاً طرز فکرم رو نسبت به مسئله عوض کرد
برای من این بخش دقیقاً مثل یه code review واقعی و رایگان عمل می‌کنه.
یه پیشنهاد ساده:
فرقی نمی‌کنه برنامه‌نویس باشی یا تو هر زمینه‌ی دیگه‌ای کار کنی—
اگر روزی فقط یک چالش کوچیک حل کنی:
توی یک ماه -> حدود ۳۰ تمرین
توی یک سال -> بیشتر از ۳۶۰ بار فکر کردن، تحلیل کردن و حل مسئله
این حجم تمرین، بدون اغراق:
طرز فکرت رو قوی‌تر می‌کنه
حل مسئله‌ت رو بهتر می‌کنه
و تأثیرش رو مستقیم توی کارت می‌بینی
برای من Codewars فقط تمرین برنامه‌نویسی نیست؛
یه عادت خوبه برای رشد مداوم.

@DevTwitter | <Ahmad Aghazade/>
👍4112
بعضی وقتا گلوگاه performance دیتابیس از query یا infra نیست، از primary key میاد.

اUUID چون randomه، هر insert رو می‌فرسته یه جای متفاوت از B-treeی که برای ایندکس ها ساخته شده و ممکنه باعث شه درخت دوباره ساخت بشه؛ نتیجه‌اش cache miss، page split و write cost بالاتره. زیر بار دیتابیس زود به سقف CPU می‌رسه.

در مقابل، bigint auto-increment همیشه آخر index می‌نویسه و رفتار دیتابیس قابل پیش‌بینی میشه. تو تست‌های واقعی، فقط با عوض کردن UUID به bigserial، throughput چند برابر بهتر شده بدون اینکه data model یا business logic تغییر کنه.
اprimary key تصادفی یعنی مالیات دائمی روی هر write

راه بهتر اینه که primary key داخلی bigint باشه و یه public UUID برای بیرون سیستم داشته باشی. اگه client-generated id لازم داری، می‌تونی از time-orderd مثله Snowflake استفاده کنی تا keyها تقریبا ترتیبی باشن و توی سیستم های توزیع شده هم یکتا باشن و هم index اذیت نشه.


@DevTwitter | <Go Talk | گو تاک/>
👍2212🍌6👎2
از اونجایی که من کلا همیشه به دنبال حداکثر سرعت، بهینه بودن و عملکرد هستم و همیشه اینارو یه جا می‌خوام،
مجبور‌ میشم از کتابخونه‌های آماده استفاده نکنم و بشینم یه چیزی بهتر از اونارو طراحی کنم.

حالا ایندفعه fasthttp رو برای پایتون طراحی کردم، یه کتابخونه‌ی ساده، سبک، مینیمال و زیبا برای ارسال درخواست های HTTP با حداکثر سرعت ممکن.

این کتابخونه از aiohttp، httpx و requests هم سریع‌تره و سینتکس مشابه‌ای به هر سه داره و به راحتی میشه ازش استفاده کرد. کدنویسی sync و async رو همزمان پشتیبانی می‌کنه.

میتونید با دستور زیر کتابخونه رو نصب کنید:
pip3 install -U pyfasthttp


یه مثال از کتابخونه:
from fasthttp import Client

with Client() as client:
resp = client.get("https://httpbin.org/get")
print(resp.status_code)
print(resp.json())


گیت هاب پروژه:
https://github.com/shayanheidari01/fasthttp


@DevTwitter | <ShythonX/>
34🍌28👎8👍4
حضور zod-ir در داکیومنت رسمی Zod + انتشار نسخه v1.5.4

از زمان انتشار نسخه 1.2 که فقط روی "ولیدیشن" تمرکز داشتم و در پست قبلی معرفی کردم، هدفم حل چالش‌های دیتای ایرانی در Zod بود. اما در مسیر توسعه، نیاز به چیزی فراتر از true/false حس می‌شد. امروز نسخه v1.5.4 با رویکرد جدید Data Extraction (استخراج دیتا) منتشر شد.

خبر ویژه: پول‌ریکوست پروژه در ریپوی اصلی Zod مرج شد و اکنون zod-ir رسماً به عنوان ابزار استاندارد ولیدیشن ایرانی در بخش Ecosystem داکیومنت Zod معرفی شده است و می‌تونید با خیال راحت توی پروژه‌های بزرگ ازش استفاده کنید.

تغییرات کلیدی نسبت به نسخه‌های قبل: در این نسخه، پکیج علاوه بر بررسی صحت داده، متادیتای کاربردی را برای UI استخراج می‌کند:
۱. خدمات شهری و خودرو (Vehicle & Bills):
- پلاک: استخراج استان و شهر محل پلاک خودرو.
- قبض: استخراج مبلغ، نوع قبض (آب، برق،...) و شناسه پرداخت از روی شناسه قبض (محاسبه خودکار).

۲. امور مالی (Financial):
- ورودی مالی ترکیبی (zFinancial): دیگه فرقی نمی‌کنه کاربر کارت بزنه یا شبا. سیستم خودش تشخیص می‌ده و آبجکت کامل (شامل لوگو، رنگ و نام بانک) رو برمی‌گردونه.
- بانکی: تشخیص نام بانک، رنگ سازمانی و لوگو (SVG) از روی شماره کارت یا شبا.
- کریپتو: ولیدیشن Native آدرس‌های TRC20 ،BTC و ETH (بدون وابستگی سنگین).

۳. تماس و مکان (Contact & Location):
- تلفن ثابت (جدید): استخراج نام استان و شهر (فارسی/EN) از روی پیش‌شماره.
- کد پستی (بهبود یافته): بازنویسی الگوریتم تشخیص شهر با متد Best Match (رفع تداخل رنج‌های پستی).
- موبایل: تشخیص اپراتور (همراه اول، ایرانسل و...) و ارائه لوگوی اپراتور.

تشکر از شایان زمانی عزیز (Shayan Zamani) بابت مشارکت در مدرن‌سازی زیرساخت و بیلد سیستم این نسخه.

الان zod-ir یک ابزار کامل برای تیم‌های فرانت‌اند است که هم دیتای ورودی را چک می‌کند و هم دیتای خروجی را فرمت‌شده تحویل می‌دهد.

نصب: npm i zod-ir

https://www.npmjs.com/package/zod-ir

https://github.com/Reza-kh80/zod-ir

@DevTwitter | <Reza Kheradmandi/>
🔥515
اگه با Cloud Storageها کار می‌کنی، احتمالاً به rclone نیاز داری.
ابزاری برای بکاپ، سینک و مایگریشن که به‌صورت rsync-like بین کلود استوریج‌ها کار می‌کنه.

ریپو گیت هاب: https://github.com/rclone/rclone

@DevTwitter | <Mohammad/>
👍10🍌64👎1
This media is not supported in your browser
VIEW IN TELEGRAM
الان داشتن رزومه شخصی سازی شده برای هر شغل خیلی ضروریه!
اگر می‌خواهید رزومه‌ای داشته باشید که هم ساختار مهندسی داشته باشد و هم چشم‌نواز باشد، حتما به ریپوزیتوری RenderCV سر بزنید.

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

چه ویژگی هایی داره؟
- مدیریت ورژن‌کنترل: می‌توانید رزومه‌تان را در گیت‌هاب قرار دهید و تمام تغییرات آن را در طول زمان ردیابی کنید.

- ظاهر بی‌نقص: دیگر نیازی نیست ساعت‌ها وقت صرف تنظیم فاصله‌ها و فونت‌ها کنید؛ همه‌چیز طبق استانداردهای حرفه‌ای چیده می‌شود.

- خروجی‌های متنوع: علاوه بر نسخه PDF، به شما فایل‌های Markdown و LaTeX هم می‌دهد که برای پلتفرم‌های مختلف عالی است.

- تمرکز روی محتوا: شما فقط روی نوشتن تجربیاتتان تمرکز می‌کنید و اجازه می‌دهید ابزار، کارِ طراحی را برایتان انجام دهد.
Github: https://github.com/rendercv/rendercv

@DevTwitter | <Mehdi Allahyari/>
🔥249👍4👎1
اولین تجربه اتصال به Remote MCP Server با استفاده از MS Agent Framework با دات نت:
امروز در مورد Official Microsoft Learn MCP Server میخوندم، گفتم یه تست بنویسم که با AI Agent بتونم به Remote MCP Server وصل بشم، خیلی چسبید!
اینجا گذاشتم (مثال 9):

https://github.com/pournasserian/agent-framework-sample

مثال 8 هم کار با تصویر بود که امروز اضافه کردم.

@DevTwitter | <Amir Pournasserian/>
🍌127👍1👎1
یه ابزار/ریپوی خیلی کاربردی از مایکروسافت: Microsoft Learn MCP Server
اگه از Claude / Cursor / Copilot / Codex و… استفاده می‌کنید و «hallucination» و یا کدهای غیرقابل‌کامپایل (قدیمی) اذیتتون میکنه، این MCP Server، ایجنتتون رو مستقیم وصل می‌کنه به
آخرین داکیومنت رسمی Microsoft
نمونه‌کدهای Microsoft Learn

نصب سریع، رایگان، و بدون API Key.

https://github.com/microsoftdocs/mcp

@DevTwitter | <Amir Pournasserian/>
12👍3👎2
بهترین اتفاق سال من میرسه به این که جنرال رو open-source کردن.
یعنی میشه هررکجا بگی نصبش کردی، linux, macos و ....

https://github.com/TheSuperHackers/GeneralsGameCode

@DevTwitter | <Sadegh/>
🔥39🍌71
این برنامه رو خیلی تایم پیش نوشتم،
خیلی ساده با یک فایل yml می‌تونید بات تلگرامی درست کنید که بتونه هر نوع دیتا یا مسیجی رو با توجه به کامند هایی که توی yml تعریف کردین ارسال کنه.

امشب آپدیتش کردم و کاری کردم که plugins بشه بهش اضافه کرد، و کد هم ران کنه

https://github.com/shabane/commodore

@DevTwitter | <Arya Shabane/>
🔥29🍌106
اگه مثل من از obsidian برای جزوه نویسی و یادداشت استفاده می کنید و می خواید یه چارت ساده برای گزارش نویسی کارای روزانتون و یا هرچیزی دیگه داشته باشید یه سر به این ریپو بزنید.

https://github.com/amirow-unknown/obsidian_simplechart

@DevTwitter | <Amir/>
23🍌6👍3🎄1
ابزارSnitch پروژه اوپن‌سورس برای دیدن کانکشن‌های شبکه به صورت تمیز و زیبا توی ترمیناله شبیه ss/netstat اما با رابط جذاب و جدول‌های قابل‌خونده بیشتر که نصبش راحت و مفیده برای بررسی سریع اتصالات شبکه روی لینوکس و macOS
لینک گیتهاب:
https://github.com/karol-broda/snitch

@DevTwitter | <Shayan GeeDook/>
🔥143👍1
این qwen code cli رو امتحان کردید تاحالا؟ بینظیره بنظرم (مخصوصا اگه لینوکس استفاده میکنید ولی اولاتونه و زیاد دستورات رو بلد نیستید، صد برابر عالی تره برای شما)!
برای نصبش باید رو سیستم عاملتون Node.js نصب شده باشه( اگه نبودم دانلود و نصبش راحته و کافیه سرچ کنید)
node -v
npm -v
با این دوتا میتونید چک کنید که نصبه یا نه.
بعد تو ترمینالتون npm install -g @qwen-code/qwen رو تایپ کنید که خودش نصب میکنتش و بعد اینکه تموم شد همونجا qwen رو تایپ کنید و اگه ترمينالتون شبیه عکس زیر شد ینی همه چی اوکیه! اگه تا حالا مدل های زبانی رو توی ترمینالتون استفاده نکردید، حتما یه امتحان کنید که پشیمون نمیشید.

@DevTwitter | <Mohammad Seyfi/>
👍336🍌5
یه ابزار کوچیک ولی قوی دیدم که واقعاً کارِ پردازش داده برای AI رو ساده می‌کنه:
اسمش CocoIndex یه data transformation framework سریع که روی مدل dataflow programming ساخته شده و برای کسانی که دیگه از ETLهای قدیمی خسته شدن مناسبه.

https://github.com/cocoindex-io/cocoindex

@DevTwitter | <پروفشیونال/>
13👍1👎1🔥1
دیگه نیازی نیست کاربران رو مجبور کنیم مسیرِ طراحی‌شدهٔ ما رو طی کنن.

با Tambo، یک Generative UI SDK برای React، رابط کاربری واقعاً تطبیق‌پذیر می‌شه:
کاربر می‌گه چی می‌خواد و AI، با تکیه بر Zod schemas، دقیقاً همون کامپوننت رو رندر می‌کنه.

https://github.com/tambo-ai/tambo

@DevTwitter | <پروفشیونال/>
🎄233👍2🔥2
https://youtu.be/HfJwezWWu08?t=426
یعنی این تیکه از صحبت های The PrimeTime انقدر دارک بود که دارم ناامید میشم به گیتهاب
اینکه CEO کل سازمان گیتهاب داره با AI میره جلو
حتی پالمر نقش پایین تری داره و این موضوع خیلی عجیبه
یعنی کل گیتهاب داره با هدایت هوش مصنوعی میره جلو؟
شهر عجیبیه

@DevTwitter | <Shayan GeeDook/>
👍28🎄6🔥4👎3
دو تا سایت خیلی کاربردی برای JavaScript که همیشه موقع کدنویسی بهشون سر می‌زنم :
سایت DevHints – خلاصه، سریع و مناسب مرور مفاهیم JS
سایت OverAPI – چیت‌شیت‌های تمیز و جمع‌وجور برای JavaScript
اگه فرانت‌اند کار می‌کنی، اینا واقعاً نجات‌دهنده‌ان

https://devhints.io/
https://overapi.com/javascript

@DevTwitter | <Sadaf Amininia/>
22🍌7
ارائه Critical Path Analysis: تکنیکی از پروژه منهتن برای دیباگ Latency در Go!

یکی از ارائه های جذاب GopherCon 2025 ارائه Felix Geisendörfer از Datadog بود درباره پروفایلینگ request latency با استفاده از Critical Path Analysis.

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

حالا Felix این رو آورده روی Go و goroutine ها.

مشکلی که حل می‌کنه اینه که پروفایلینگ سنتی بهت میگه mutex contention داری، ولی نمیگه این چقدر روی latency کاربر تأثیر گذاشته. مثلاً یه پروفایل نشون میده ۴۳۹ ثانیه contention تو ۶۰ ثانیه داشتی. خب این خیلی بده، ولی سوال اصلی اینه: کدوم بخشش واقعاً روی request های کاربر تأثیر گذاشته؟

اینجاست که execution tracer میاد وسط. برخلاف CPU profiling که فقط on-CPU رو نشون میده، execution tracer همه state transition ها رو ثبت می‌کنه: کی goroutine داشت run می‌شد، کی منتظر mutex بود، کی منتظر channel بود، کی scheduling latency داشت. یه تصویر کامل از زندگی goroutine هات.

راه‌حل اینه که از آخر request بری عقب و ببینی کدوم goroutine ها واقعاً سر راه بودن. اگه G1 منتظر G2 و G3 باشه و G3 دیرتر تموم بشه، سریع‌تر کردن G2 هیچ فایده‌ای نداره. این همون critical path هست.

یه کار خفن دیگه که تیم Datadog کرده اینه که overhead اجرای execution tracer رو از ۱۰-۲۰ درصد به ۱-۲ درصد رسوندن. یعنی الان میشه تو production ازش استفاده کرد.

این ارائه خیلی ارزشمنده چون نشون میده پروفایلینگ می‌تونه خیلی دقیق‌تر از چیزی باشه که عادت کردیم. به جای اینکه بگیم mutex contention داریم، بیاید همه جا رو optimize کنیم، می‌تونیم دقیقاً بفهمیم کجا واقعاً مهمه.

آقای Felix امیدواره این کار رو open source کنه.

اگه با Go کار می‌کنید و tail latency براتون مهمه، پیشنهاد می‌کنم این ارائه رو ببینید.

https://www.youtube.com/watch?v=BayZ3k-QkFw

@DevTwitter | <Hasan Nazari/>
15🍌3👍2👎1
یکی از کاربرد های خفن الگوریتم Binary Search میشه فیچر Bisect گیت در ورژن کنترل، در این ویدیو جادی خیلی خفن توضیح و آموزش میده:
https://www.youtube.com/watch?v=V89oD_HgSbE

@DevTwitter | <Max Shahdoost/>
43👎8👍2🔥1