Forwarded from DevTwitter | توییت برنامه نویسی
وقتشه که استفاده از Exception برای کنترل فلو (Control Flow) در لاراول را متوقف کنیم.
پترن Railway-Oriented Programming (ROP) یک شیوه مدرن برای مدیریت خطاهاست که از دنیای Functional Programming وارد شده. به جای پرتاب Exception و امیدوار بودن به اینکه یه جایی اون رو Catch کنیم، میتونیم عملیاتها را به صورت زنجیرهای از موفقیتها و شکستها مدل کنیم.
در این مقاله، ROP و طرز فکر پشت اون و نحوه پیادهسازی کاملش در لاراول را با استفاده از Result Types توضیح دادم.
مطالعه کامل مقاله
https://medium.com/@mmtaheri.dev/railway-oriented-programming-in-laravel-exceptions-are-not-your-business-3499a9feb790
@DevTwitter | <Mohammad Mahdi Taheri/>
پترن Railway-Oriented Programming (ROP) یک شیوه مدرن برای مدیریت خطاهاست که از دنیای Functional Programming وارد شده. به جای پرتاب Exception و امیدوار بودن به اینکه یه جایی اون رو Catch کنیم، میتونیم عملیاتها را به صورت زنجیرهای از موفقیتها و شکستها مدل کنیم.
در این مقاله، ROP و طرز فکر پشت اون و نحوه پیادهسازی کاملش در لاراول را با استفاده از Result Types توضیح دادم.
مطالعه کامل مقاله
https://medium.com/@mmtaheri.dev/railway-oriented-programming-in-laravel-exceptions-are-not-your-business-3499a9feb790
@DevTwitter | <Mohammad Mahdi Taheri/>
اینو خوندم جالب بود رفتم ی سمپل کد پیدا کردم براش از
https://blog.logrocket.com/what-is-railway-oriented-programming/
https://blog.logrocket.com/what-is-railway-oriented-programming/
const sendWayBillMail = async() => {
const data = await fs.readFile('emailContent.txt', 'binary')
if (!data){
return 'Empty content or invalid!'
}
const { emailAddress, firstName, lastName } = await User.findById(userId)
if (!emailAddress) {
return 'Email address not found!'
}
const isValidated = await validateEmail(emailAddress)
if (!isValidated) {
return 'Email address not valid!'
}
if (!lastName) {
return 'Last name not found!'
}
if (!firstName) {
return 'First name not found!'
}
sendMail(emailAddress, firstName, lastName, data)
return 'Done'
}LogRocket Blog
What is railway oriented programming? - LogRocket Blog
Check out this simple guide to railway oriented programming and learn a new approach to error handling that can improve your codebase.
و نکته جالب ماجرا اینجاست که همین الآنم کد هایی که با Django میزنم الان همین حالت ریلی رو داره
Forwarded from Linuxor ?
بیش از 200 تکنیک طراحی بصری
لیستی مفید از سبکها و تکنیکهای طراحی بصری به همراه مثالها و راهنماهایی در مورد نحوه و زمان استفاده از اونها:
anthonyhobday.com/sideprojects/visualtechniques
@Linuxor
لیستی مفید از سبکها و تکنیکهای طراحی بصری به همراه مثالها و راهنماهایی در مورد نحوه و زمان استفاده از اونها:
anthonyhobday.com/sideprojects/visualtechniques
@Linuxor
Forwarded from Armon technical logs (armon Taheri)
من حفظ کرده بودم که کانتینر از طریق دو فیچر c group و namespace ایزوله سازی میکنه ولی درک کاملی نداشتم که دقیقا معنیش چیه
این ویدیو پرکتیکال کانتینر رو با محوریت ایزوله سازی از اسکرچ پیاده سازی میکنه
https://youtu.be/MHv6cWjvQjM
این ویدیو پرکتیکال کانتینر رو با محوریت ایزوله سازی از اسکرچ پیاده سازی میکنه
https://youtu.be/MHv6cWjvQjM
YouTube
What Have Namespaces Done for You Lately?
Liz Rice - Technology Evangelist, Aqua Security
Containers are made with namespacing and cgroups, but what does that really mean? In this talk we'll write a container from scratch in Go, using bare system calls, and explore how the different namespaces affect…
Containers are made with namespacing and cgroups, but what does that really mean? In this talk we'll write a container from scratch in Go, using bare system calls, and explore how the different namespaces affect…
Forwarded from Milad Safaei | میلاد صفائی
♦️ محتوای برندساز با محتوای لیدساز چه فرقی داره؟
یه تصور رایج از پرسونال برندینگ اینه که: «محتوا تولید کن و توی سوشالمدیا منتشر کن تا دیده بشی و کسب درآمد کنی.»
ولی واقعیت اینه که اگر برای پرسونال برند خودت «استراتژی برندینگ» نداشته باشی، صرفاً با Content Marketing نمیتونی به یه برند موندگار تبدیل بشی. نهایتاً تبدیل میشی به یه «تولیدکنندهی محتوای خوب» که مخاطبها پستهاش رو لایک میکنن، اما کسی برای پروژههای بزرگ سراغش نمیاد.
من این دو تا رو از هم تفکیک میکنم:
1️⃣ محتوای لیدساز (Lead Generation Content)
هدفش «فروش» یا «جذب مشتری» در کوتاهمدته. این محتوا روی نیاز و درد لحظهای مخاطب تمرکز میکنه.
مثال: چکلیست سئوی تکنیکال، ۵ ترفند برای افزایش فروش، آموزش کار با سرچ کنسول.
نتیجه: مخاطب میگه «دمت گرم، چه نکتهی خوبی» و Save یا Share میکنه.
جایگاه شما: یک متخصص کاربلد یا یک مدرس خوب.
2️⃣ محتوای برندساز (Brand Building Content)
هدفش «هویتسازی»، «ایجاد تمایز» و «جایگاهسازی» (Positioning) در بلندمدته. این محتوا روی باورها، ارزشها، دیدگاه منحصربهفرد و داستان شما تمرکز داره.
مثال: چرا من معتقدم سئو بدون UX بیفایده است؟ تحلیل من از آیندهی بازار دیجیتال مارکتینگ ایران چیه؟ من چه درسی از شکست در فلان پروژه گرفتم؟
نتیجه: مخاطب میگه «من طرز تفکر این آدم رو قبول دارم و میخوام فقط با اون کار کنم.»
جایگاه شما: یک رهبر فکری (Thought Leader) و مشاور استراتژیک که ارتباطات بسیار ارزشمندتری نسبت به لیدهای خرید داره.
♦️ خطای استراتژیک کجاست؟
اکثر افراد تمام تمرکزشون رو میذارن روی محتوای آموزشی و لیدساز. در نتیجه مخاطب هم اونها رو به چشم یه «Wiki» یا دایرهالمعارف میبینه، نه یک «برند متمایز».
یه پرسونال برند، باید تفاوت جایگاه خودش رو با جایگاه افراد مشابه دیگه با دقت انتخاب کرده باشه و برای تثبیت اون جایگاه در ذهن مخاطبان هدف، برای خودش هویتسازی کنه.
اگر محتوای شما فقط «مشکل مخاطب» رو حل کنه، پول درمیارید. اما اگر محتوای شما «طرز فکر» مخاطب رو تغییر بده، برند میسازید.
به یه بیان دیگه میشه گفت کانتنت مارکتینگ فقط ابزاره. سوخت این ابزار باید «استراتژی برند» شما باشه.
🆔 @MiladSafaei_ir
.
یه تصور رایج از پرسونال برندینگ اینه که: «محتوا تولید کن و توی سوشالمدیا منتشر کن تا دیده بشی و کسب درآمد کنی.»
ولی واقعیت اینه که اگر برای پرسونال برند خودت «استراتژی برندینگ» نداشته باشی، صرفاً با Content Marketing نمیتونی به یه برند موندگار تبدیل بشی. نهایتاً تبدیل میشی به یه «تولیدکنندهی محتوای خوب» که مخاطبها پستهاش رو لایک میکنن، اما کسی برای پروژههای بزرگ سراغش نمیاد.
من این دو تا رو از هم تفکیک میکنم:
1️⃣ محتوای لیدساز (Lead Generation Content)
هدفش «فروش» یا «جذب مشتری» در کوتاهمدته. این محتوا روی نیاز و درد لحظهای مخاطب تمرکز میکنه.
مثال: چکلیست سئوی تکنیکال، ۵ ترفند برای افزایش فروش، آموزش کار با سرچ کنسول.
نتیجه: مخاطب میگه «دمت گرم، چه نکتهی خوبی» و Save یا Share میکنه.
جایگاه شما: یک متخصص کاربلد یا یک مدرس خوب.
2️⃣ محتوای برندساز (Brand Building Content)
هدفش «هویتسازی»، «ایجاد تمایز» و «جایگاهسازی» (Positioning) در بلندمدته. این محتوا روی باورها، ارزشها، دیدگاه منحصربهفرد و داستان شما تمرکز داره.
مثال: چرا من معتقدم سئو بدون UX بیفایده است؟ تحلیل من از آیندهی بازار دیجیتال مارکتینگ ایران چیه؟ من چه درسی از شکست در فلان پروژه گرفتم؟
نتیجه: مخاطب میگه «من طرز تفکر این آدم رو قبول دارم و میخوام فقط با اون کار کنم.»
جایگاه شما: یک رهبر فکری (Thought Leader) و مشاور استراتژیک که ارتباطات بسیار ارزشمندتری نسبت به لیدهای خرید داره.
♦️ خطای استراتژیک کجاست؟
اکثر افراد تمام تمرکزشون رو میذارن روی محتوای آموزشی و لیدساز. در نتیجه مخاطب هم اونها رو به چشم یه «Wiki» یا دایرهالمعارف میبینه، نه یک «برند متمایز».
یه پرسونال برند، باید تفاوت جایگاه خودش رو با جایگاه افراد مشابه دیگه با دقت انتخاب کرده باشه و برای تثبیت اون جایگاه در ذهن مخاطبان هدف، برای خودش هویتسازی کنه.
اگر محتوای شما فقط «مشکل مخاطب» رو حل کنه، پول درمیارید. اما اگر محتوای شما «طرز فکر» مخاطب رو تغییر بده، برند میسازید.
به یه بیان دیگه میشه گفت کانتنت مارکتینگ فقط ابزاره. سوخت این ابزار باید «استراتژی برند» شما باشه.
🆔 @MiladSafaei_ir
.
Forwarded from DevTwitter | توییت برنامه نویسی
بمب دیگه که Anthropic توی ۲۴ ساعت گذشته انداخته اینکه، Agent Skills از الان تبدیل شده به یه Open Standard
با ساپورت این همه شرکت و پروژه!
https://agentskills.io
@DevTwitter | <Von Datawarehausen/>
با ساپورت این همه شرکت و پروژه!
https://agentskills.io
@DevTwitter | <Von Datawarehausen/>
Forwarded from Syntax | سینتکس (Alireza F)
آیا یک جرقه کوچک، نرم افزار شما را به آتش میکشد؟ پتر Circuit Breaker
در روز های اول صنعت برق، خانه ها با یک خطر بزرگ رو به رو بودن. اگه جریان برق زیاد میشد، سیم ها داغ میشدن و کل خونه میسوخت.
راه حل اولیه فیوز بود که می سوخت و باید عوض میشد. اما مهندسان شاهکار بهتری ساختن. مدارشکن یا همون Circuit Breaker.
نحوه کارش ساده بود. اگه فشار زیاد شد، کلید میپره و جریان قطع میشه. وقتی سیستم خنک شد، دوباره کلید رو میزنیم. بدون نیاز به تعویض قطعه!
این مفهوم در دنیای نرم افزار تو سال 2007 در کتاب Release It به این شکل معرفی شد:
"چرا وقتی یک دیتابیس یا سرویس خارجی داره میمیره و خطا میده، ما همچنان بهش ریکوئست میفرستیم؟ این کار مثل لگد زدن به اسب مرده است! هم وقت ما تلف میشه، هم اون سرویس بیچاره فرصت پیدا نمیکنه بلند بشه."
چطور ازش استفاده کنیم؟
مدارشکن مثل یک پروکسی بین سرویس شما و یک سرویس خارجی مثل درگاه پرداخت، سرویس یوزر و ... قرار میگیره.
این پترن بر اساس state machine کار میکنه و سه تا حالت داره:
۱. حالت بسته:
همه چیز آرومه، ترافیک عبور میکنه.
۲. باز:
اگه تعداد خطاها از یه حد گذشت مثلا پنج خطا در ده ثانیه، مدار میپره! حالا هر چی درخواست بیاد، بدون اینکه به سرویس مقصد برسه درجا خطا برمیگردونیم. اینطوری دیگه منابع سرور درگیر انتظار نمیشه و سرویس مقصد هم فرصت نفس کشیدن و ریکاوری پیدا میکنه.
3. نیمه باز:
بعد از مدتی، یک یا چند تا درخواست آزمایشی رد میشه. اگه موفق بود، مدار دوباره وصل میشه.
با مدارشکن سیستم شما یاد میگیره که گاهی کار نکردن بهتر از تلاش کردن و سوختنه.
درباره circuit breaker در Azure Architecture Center:
https://learn.microsoft.com/en-us/azure/architecture/patterns/circuit-breaker
#pattern #circuit_breaker
@Syntax_fa
در روز های اول صنعت برق، خانه ها با یک خطر بزرگ رو به رو بودن. اگه جریان برق زیاد میشد، سیم ها داغ میشدن و کل خونه میسوخت.
راه حل اولیه فیوز بود که می سوخت و باید عوض میشد. اما مهندسان شاهکار بهتری ساختن. مدارشکن یا همون Circuit Breaker.
نحوه کارش ساده بود. اگه فشار زیاد شد، کلید میپره و جریان قطع میشه. وقتی سیستم خنک شد، دوباره کلید رو میزنیم. بدون نیاز به تعویض قطعه!
این مفهوم در دنیای نرم افزار تو سال 2007 در کتاب Release It به این شکل معرفی شد:
"چرا وقتی یک دیتابیس یا سرویس خارجی داره میمیره و خطا میده، ما همچنان بهش ریکوئست میفرستیم؟ این کار مثل لگد زدن به اسب مرده است! هم وقت ما تلف میشه، هم اون سرویس بیچاره فرصت پیدا نمیکنه بلند بشه."
چطور ازش استفاده کنیم؟
مدارشکن مثل یک پروکسی بین سرویس شما و یک سرویس خارجی مثل درگاه پرداخت، سرویس یوزر و ... قرار میگیره.
این پترن بر اساس state machine کار میکنه و سه تا حالت داره:
۱. حالت بسته:
همه چیز آرومه، ترافیک عبور میکنه.
۲. باز:
اگه تعداد خطاها از یه حد گذشت مثلا پنج خطا در ده ثانیه، مدار میپره! حالا هر چی درخواست بیاد، بدون اینکه به سرویس مقصد برسه درجا خطا برمیگردونیم. اینطوری دیگه منابع سرور درگیر انتظار نمیشه و سرویس مقصد هم فرصت نفس کشیدن و ریکاوری پیدا میکنه.
3. نیمه باز:
بعد از مدتی، یک یا چند تا درخواست آزمایشی رد میشه. اگه موفق بود، مدار دوباره وصل میشه.
با مدارشکن سیستم شما یاد میگیره که گاهی کار نکردن بهتر از تلاش کردن و سوختنه.
درباره circuit breaker در Azure Architecture Center:
https://learn.microsoft.com/en-us/azure/architecture/patterns/circuit-breaker
#pattern #circuit_breaker
@Syntax_fa
Forwarded from Daily articles | مقالات روزانه (Mohamad)
تمام تجربه شخصی خودم درباره نوشتن پستهام رو میخوام براتون توضیح بدم. اگه حرف اصلی رو درک کنید، مدل فعالیت شما برای 2026 تغییر میکنه.
ما میدونیم که روایتگری، کلید عملکرد بهتر محتواست. کلیت کار من روی همینه. یه مقاله پیچیده که شامل عدد و رقم هست رو یجوری تعریف میکنم که انگار مخاطبم، رفیق صمیمی منه!
درسته؟ روی این توافق داریم؟ سال 2025 من هرماه حداقل 2 یا 3 بار پست وایرال داشتم که هرکدوم صدها هزار ایمپرشن میگرفتن. هر روایت من از یه چارچوب ساده و یکسان تشکیل شده؛ حالا چه فیلمهای کریستوفر نولان باشه، چه قصههای مادربزرگ ما و چه پست من! تهش رو دربیاری همش یه اصل مشترک داره!
این چارچوب، روایت پست رو ده برابر بهتر میکنه. قوس سنتی روایت میشه: مقدمه، اوج و فرود ... اما این تاکتیک کلاسیک همیشه جواب نمیده و دیگه خیلی سخت میشه باهاش نتیجه گرفت. پس چکار کنیم؟
پردهبرداری پنج حالت داره: بدتر از انتظار (بلاک میشی)، برابر انتظار (لایک خالی میگیری)، بهتر از انتظار یا غیرمنتظره اما جذاب (دوپامین ترشح میشه و خواننده با پست درگیر میشه و علاوه بر لایک فورا کامنت مینویسه)، غیرمنتظره اما گیجکننده (خواننده یه فحش بهت میده و میره). حلقهها سریع باز و بسته میشن و با هم قوس بزرگ روایت رو میسازن.
برای نوشتن پست، اول همه واقعیتها یا نکات جالب رو لیست کنین، بعد جالبترینها رو انتخاب کنین و در همون پاراگراف اول چند تا سیلی توی گوش خواننده بزنید و با واقعیتها شوکهاش کنید. این باعث میشه که به بقیه مطلب بهتر توجه کنن. بهش چی میگن؟ قلاب!
بعد رو به عقب کار کنین و زمینه لازم رو بسازین تا پردهبرداری منطقی و جذاب بشه و آخرش حلقهها رو مرتب کنین تا روایت پست منسجم بشه. اگه پستهای منو همیشه میخونید، نشون میده که این روند جواب داده ...
متن باید خودمونی باشه. دوران خشک نوشتن تموم شده. فان، روان، صریح، رک و جسورانه. برای تمرین سیو مسیج تلگرام رو باز کنید و بدون وقفه و شبیه یک پیام کل متن پست رو بنویسید و خیال کنید رفیق صمیمی شما اونطرف خطه. بخدا همینو پکیج میکنن و میفروشن. لازمه با جزئیات بیشتری بگم؟ ادامه این پست رو بنویسم؟
⛓ @linkepin
ما میدونیم که روایتگری، کلید عملکرد بهتر محتواست. کلیت کار من روی همینه. یه مقاله پیچیده که شامل عدد و رقم هست رو یجوری تعریف میکنم که انگار مخاطبم، رفیق صمیمی منه!
درسته؟ روی این توافق داریم؟ سال 2025 من هرماه حداقل 2 یا 3 بار پست وایرال داشتم که هرکدوم صدها هزار ایمپرشن میگرفتن. هر روایت من از یه چارچوب ساده و یکسان تشکیل شده؛ حالا چه فیلمهای کریستوفر نولان باشه، چه قصههای مادربزرگ ما و چه پست من! تهش رو دربیاری همش یه اصل مشترک داره!
این چارچوب، روایت پست رو ده برابر بهتر میکنه. قوس سنتی روایت میشه: مقدمه، اوج و فرود ... اما این تاکتیک کلاسیک همیشه جواب نمیده و دیگه خیلی سخت میشه باهاش نتیجه گرفت. پس چکار کنیم؟
هر روایت من از حلقههای کوچکی ساخته شده و هر حلقه دو بخش داره: زمینه و پردهبرداری ... زمینه باید واضح باشه تا خواننده کنجکاو بشه و پیشبینی کنه که چه اتفاقی قراره بیفته. مغز انسان پازل رو دوست داره و میخواد کاملش کنه.
پردهبرداری پنج حالت داره: بدتر از انتظار (بلاک میشی)، برابر انتظار (لایک خالی میگیری)، بهتر از انتظار یا غیرمنتظره اما جذاب (دوپامین ترشح میشه و خواننده با پست درگیر میشه و علاوه بر لایک فورا کامنت مینویسه)، غیرمنتظره اما گیجکننده (خواننده یه فحش بهت میده و میره). حلقهها سریع باز و بسته میشن و با هم قوس بزرگ روایت رو میسازن.
برای نوشتن پست، اول همه واقعیتها یا نکات جالب رو لیست کنین، بعد جالبترینها رو انتخاب کنین و در همون پاراگراف اول چند تا سیلی توی گوش خواننده بزنید و با واقعیتها شوکهاش کنید. این باعث میشه که به بقیه مطلب بهتر توجه کنن. بهش چی میگن؟ قلاب!
بعد رو به عقب کار کنین و زمینه لازم رو بسازین تا پردهبرداری منطقی و جذاب بشه و آخرش حلقهها رو مرتب کنین تا روایت پست منسجم بشه. اگه پستهای منو همیشه میخونید، نشون میده که این روند جواب داده ...
متن باید خودمونی باشه. دوران خشک نوشتن تموم شده. فان، روان، صریح، رک و جسورانه. برای تمرین سیو مسیج تلگرام رو باز کنید و بدون وقفه و شبیه یک پیام کل متن پست رو بنویسید و خیال کنید رفیق صمیمی شما اونطرف خطه. بخدا همینو پکیج میکنن و میفروشن. لازمه با جزئیات بیشتری بگم؟ ادامه این پست رو بنویسم؟
⛓ @linkepin
Forwarded from Our Leaks (سید کریستوفر نولان)
زیبایی ببینیم:
با فریب کاربر کاری کنید که عکس رو تو مرورگر بازکنه و هش NTLM قربانی رو بگیرین
این آسیب پذیری به قدری جدید و داغ هست که هنوز ماکروسافت واسش CVE نداده🔥
OurLeaks | سید کریستوفر نولان
با فریب کاربر کاری کنید که عکس رو تو مرورگر بازکنه و هش NTLM قربانی رو بگیرین
آسیبپذیری جدید 0 day که امکان نشت هشهای NTLM از مرورگرها را با یک کلیک فراهم میکند.
نشت هش NTLMv2-SSP قربانی به سرور تحت کنترل مهاجم.
این مشکل امکان افشای اعتبارنامه را در محیطهای سازمانی فراهم میکند و تنها به حداقل تعامل کاربر (باز کردن برنامه) نیاز دارد.
این آسیب پذیری به قدری جدید و داغ هست که هنوز ماکروسافت واسش CVE نداده🔥
OurLeaks | سید کریستوفر نولان
This media is not supported in your browser
VIEW IN TELEGRAM
🔥2❤🔥1
Forwarded from DevTwitter | توییت برنامه نویسی
سیستم کند است؟ این ۴ عدد دروغ نمیگویند
کند شدن 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/>
کند شدن 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/>
Forwarded from ⚝ (امیرحسین پناهےفر)
بیشتر چیز هایی که امروز به اسم network programming میشناسیم، ریشه شون برمیگرده به 4.2BSD جایی که برای اولین بار شبکه به عنوان یک مفهوم خیلی آشنا دیده شد. ایده این بود که اگه بتونی با فایل حرف بزنی، باید بتونی با شبکه هم دقیقاً به همون شکل حرف بزنی. همین نگاه ساده باعث شد read و write بشن هسته ارتباطات شبکه ای در یونیکس.
همه چیز از ()socket شروع میشه این فراخوانی در واقع هیچ ارتباطی رو برقرار نمیکنه، فقط از کرنل میخوای یه اندپوینت خام بهت بده. چیزی شبیه باز کردن یک فایل، با این تفاوت که هنوز نه آدرسی داره و نه مقصدی. فقط یه فایل دیسکریپتور تحویل میگیری که قراره بعدا معنای شبکهای پیدا کنه.
بعد از اون باید به این اندپوینت هویت بدی. اینجاست که ساختار sockaddr_in میاد وسط وقتی میگی IPv4 هست، پورت 8081 رو میخوام و روی همه اینترفیس ها گوش بده، در واقع داری به کرنل میگی این فایل قراره نماینده کدوم نقطه از شبکه باشه. با ()bind این هویت به سوکت چسبونده میشه. هنوز هیچ ارتباطی وجود نداره، فقط آدرس رزرو شده.
تا اینجا سوکت فقط میدونه کیه، نه اینکه چه کاری باید بکنه. ()listen دقیقاً همین جا معنی پیدا میکنه با این فراخوانی، سوکت از حالت عادی خارج میشه و وارد حالت گوش دادن میشه. یعنی کرنل شروع میکنه به گرفتن SYN ها، صف اتصال درست میکنه و آماده میشه برای اینکه کسی واقعاً وصل بشه. این لحظه ایه که برنامه از «یه فایل معمولی» تبدیل میشه به «یه سرور»
وقتی کلاینتی وصل میشه، ()accept صدا زده میشه. نکته خیلی مهم اینه که ()accept همون سوکت قبلی رو برنمیگردونه. یک file descriptor جدید ساخته میشه که نمایندهی دقیقاً همون اتصال مشخصه. سوکت اصلی همچنان فقط گوش میده. این جدا شدن listening socket از connected socket یکی از پایهای ترین مفاهیم TCP server هاس و خیلی ها دقیقاً همین جا گیج میشن نمیدونن...
از این به بعد دیگه هیچ چیز خاصی وجود نداره. ارتباط برقرار شده و فقط با یک file descriptor در ارتباطی ()read میکنی دیتا میاد. ()write میکنی دیتا میره. نه تابع خاص شبکه، نه تفاوت مفهومی با فایل. همون چیزی که 4.2BSD کانسپتش رو از اول میخواست همینه
سمت کلاینت هم داستان کوتاه تره ولی همون استراکچر رو داره. ()socket ساخته میشه، با ()connect به یک آدرس مشخص وصل میشه، و بعدش همه چیز دوباره به read و write ختم میشه. ()connect در واقع فقط handshake TCP رو کامل میکنه و به اون file descriptor معنی اتصال میده همین.
جذابش رو ما تو لینوکس epoll رو داریم که حالا بماند برای بحث آینده. :)
⚝
همه چیز از ()socket شروع میشه این فراخوانی در واقع هیچ ارتباطی رو برقرار نمیکنه، فقط از کرنل میخوای یه اندپوینت خام بهت بده. چیزی شبیه باز کردن یک فایل، با این تفاوت که هنوز نه آدرسی داره و نه مقصدی. فقط یه فایل دیسکریپتور تحویل میگیری که قراره بعدا معنای شبکهای پیدا کنه.
بعد از اون باید به این اندپوینت هویت بدی. اینجاست که ساختار sockaddr_in میاد وسط وقتی میگی IPv4 هست، پورت 8081 رو میخوام و روی همه اینترفیس ها گوش بده، در واقع داری به کرنل میگی این فایل قراره نماینده کدوم نقطه از شبکه باشه. با ()bind این هویت به سوکت چسبونده میشه. هنوز هیچ ارتباطی وجود نداره، فقط آدرس رزرو شده.
تا اینجا سوکت فقط میدونه کیه، نه اینکه چه کاری باید بکنه. ()listen دقیقاً همین جا معنی پیدا میکنه با این فراخوانی، سوکت از حالت عادی خارج میشه و وارد حالت گوش دادن میشه. یعنی کرنل شروع میکنه به گرفتن SYN ها، صف اتصال درست میکنه و آماده میشه برای اینکه کسی واقعاً وصل بشه. این لحظه ایه که برنامه از «یه فایل معمولی» تبدیل میشه به «یه سرور»
وقتی کلاینتی وصل میشه، ()accept صدا زده میشه. نکته خیلی مهم اینه که ()accept همون سوکت قبلی رو برنمیگردونه. یک file descriptor جدید ساخته میشه که نمایندهی دقیقاً همون اتصال مشخصه. سوکت اصلی همچنان فقط گوش میده. این جدا شدن listening socket از connected socket یکی از پایهای ترین مفاهیم TCP server هاس و خیلی ها دقیقاً همین جا گیج میشن نمیدونن...
از این به بعد دیگه هیچ چیز خاصی وجود نداره. ارتباط برقرار شده و فقط با یک file descriptor در ارتباطی ()read میکنی دیتا میاد. ()write میکنی دیتا میره. نه تابع خاص شبکه، نه تفاوت مفهومی با فایل. همون چیزی که 4.2BSD کانسپتش رو از اول میخواست همینه
سمت کلاینت هم داستان کوتاه تره ولی همون استراکچر رو داره. ()socket ساخته میشه، با ()connect به یک آدرس مشخص وصل میشه، و بعدش همه چیز دوباره به read و write ختم میشه. ()connect در واقع فقط handshake TCP رو کامل میکنه و به اون file descriptor معنی اتصال میده همین.
جذابش رو ما تو لینوکس epoll رو داریم که حالا بماند برای بحث آینده. :)
⚝
Forwarded from یک برنامه نویس تنبل (Lazy 🌱)
🔶 ریال جدید و قران رسما به اقتصاد ایران آمد
درپی تصویب حذف صفر از پول ملی و لازمالاجرا شدن آن از اسفند ماه، لایحه بودجه ۱۴۰۵ نیز با ریال جدید بسته شده است.
انتظار میرود سال آینده بازارهای پولی و مالی وارد فضای جدیدی شوند و اسکناسهای چاپ جدید هم کمکم روانه بازار شود تا طی یک پروسه پنج ساله، واحد پولی جدید در اقتصاد کشور حاکم شود.
گفتنی است طبق روال قبلی(ریال قدیم) رقم بودجه ۱۴۴ هزار میلیارد و ۴۱۴ میلیون و ۱۷۵ هزار و ۵۶ ریال محاسبه خواهد شد، اما بر اساس لایحه بودجه ۱۴۰۵ که با ریال جدید (حذف چهار صفر) آمده ۱۴ هزار و ۴۴۱ میلیارد و ۴۱۷ میلیون و ۵۰۵ هزار و ۶۰۰ ریال است.
در سیستم جدید، هر یک ریال جدید برابر با هزار تومان و هر ۱۰۰ قِران برابر با یک ریال است. این در حالیست که پیشتر بودجه با ریال قدیم (هر ١٠ هزار ریال برابر با یک هزار تومان) نگاشته میشد.
#خبر
@TheRaymondDev
درپی تصویب حذف صفر از پول ملی و لازمالاجرا شدن آن از اسفند ماه، لایحه بودجه ۱۴۰۵ نیز با ریال جدید بسته شده است.
انتظار میرود سال آینده بازارهای پولی و مالی وارد فضای جدیدی شوند و اسکناسهای چاپ جدید هم کمکم روانه بازار شود تا طی یک پروسه پنج ساله، واحد پولی جدید در اقتصاد کشور حاکم شود.
گفتنی است طبق روال قبلی(ریال قدیم) رقم بودجه ۱۴۴ هزار میلیارد و ۴۱۴ میلیون و ۱۷۵ هزار و ۵۶ ریال محاسبه خواهد شد، اما بر اساس لایحه بودجه ۱۴۰۵ که با ریال جدید (حذف چهار صفر) آمده ۱۴ هزار و ۴۴۱ میلیارد و ۴۱۷ میلیون و ۵۰۵ هزار و ۶۰۰ ریال است.
در سیستم جدید، هر یک ریال جدید برابر با هزار تومان و هر ۱۰۰ قِران برابر با یک ریال است. این در حالیست که پیشتر بودجه با ریال قدیم (هر ١٠ هزار ریال برابر با یک هزار تومان) نگاشته میشد.
#خبر
@TheRaymondDev
ایسنا
ریال جدید و قِران رسماً به اقتصاد ایران آمد
در پی تصویب حذف صفر از پول ملی و لازمالاجرا شدن آن از اسفند ماه، لایحه بودجه ۱۴۰۵ نیز با ریال جدید بسته شده است؛ لذا انتظار میرود سال آینده بازارهای پولی و مالی وارد فضای جدیدی شوند و اسکناسهای چاپ جدید هم کمکم روانه بازار شود تا طی یک پروسه پنج ساله،…
👍1
Forwarded from DevTwitter | توییت برنامه نویسی
یه ابزار/ریپوی خیلی کاربردی از مایکروسافت: Microsoft Learn MCP Server
اگه از Claude / Cursor / Copilot / Codex و… استفاده میکنید و «hallucination» و یا کدهای غیرقابلکامپایل (قدیمی) اذیتتون میکنه، این MCP Server، ایجنتتون رو مستقیم وصل میکنه به
آخرین داکیومنت رسمی Microsoft
نمونهکدهای Microsoft Learn
نصب سریع، رایگان، و بدون API Key.
https://github.com/microsoftdocs/mcp
@DevTwitter | <Amir Pournasserian/>
اگه از Claude / Cursor / Copilot / Codex و… استفاده میکنید و «hallucination» و یا کدهای غیرقابلکامپایل (قدیمی) اذیتتون میکنه، این MCP Server، ایجنتتون رو مستقیم وصل میکنه به
آخرین داکیومنت رسمی Microsoft
نمونهکدهای Microsoft Learn
نصب سریع، رایگان، و بدون API Key.
https://github.com/microsoftdocs/mcp
@DevTwitter | <Amir Pournasserian/>
Forwarded from Linuxor ?
توی یه شرکت درست و حسابی، آیا پروداکت منیجر به تیم توسعه و برنامه نویسی نزدیک تره یا پروداکت اونر؟
Anonymous Quiz
44%
پروداکت منیجر
23%
پروداکت اونر
10%
پروداکت منیجر و پروداکت اونر در اصل یه نفرن
23%
برنامه نویسم حالم از هر کلمه ای که توش پروداکت داشته باشه به هم میخوره، توی کوییز شرکت نمیکنم.