Forwarded from IRCF | اینترنت آزاد برای همه
پنلهای X-UI و 3X-UI آپدیت شدن و از مهمترین تغییراتش میشه به بروزرسانی هسته به نسخه جدید، پشتیبانی از TLS ECH و اضافه شدن امکان فوروارد پورتها در dokodemo-door اشاره کرد.
👉 github.com/alireza0/x-ui/releases/latest
👉 github.com/MHSanaei/3x-ui/releases/latest
🔍 ircf.space
@ircfspace
👉 github.com/alireza0/x-ui/releases/latest
👉 github.com/MHSanaei/3x-ui/releases/latest
🔍 ircf.space
@ircfspace
Forwarded from IRCF | اینترنت آزاد برای همه
نسخه ۱.۳ از پنل S-UI با نسخه جدید و استیبل Sing-box (یعنی ۱.۱۲) هماهنگ شده.
توی این آپدیت، پشتیبانی از پروتکل جدید AnyTLS اضافه شده و حالا میشه از اندپوینتهای Tailscale هم استفاده کرد. تنظیمات DNS به یه صفحه جدا منتقل شده، پشتیبانی از لینکهای اشتراک Clash و Stash اضافه شده و لینکهای http، socks و mixed هم حالا قابل استفاده هستن.
پشتیبانی از APIهای V2Ray و Clash فعال شده و حالا تنظیمات Shadowsocks قابل مدیریت هست. یه گزینه برای اعمال اجباری تنظیمات اضافه شده، کدهای مربوط به Warp بهینهسازی شدن، قابلیت fragment برای TLS اضافه شده و Hysteria بهصورت inbound با پشتیبانی از Port hopping در سمت کلاینت کار میکنه.
👉 github.com/alireza0/s-ui/releases/latest
🔍 ircf.space
@ircfspace
توی این آپدیت، پشتیبانی از پروتکل جدید AnyTLS اضافه شده و حالا میشه از اندپوینتهای Tailscale هم استفاده کرد. تنظیمات DNS به یه صفحه جدا منتقل شده، پشتیبانی از لینکهای اشتراک Clash و Stash اضافه شده و لینکهای http، socks و mixed هم حالا قابل استفاده هستن.
پشتیبانی از APIهای V2Ray و Clash فعال شده و حالا تنظیمات Shadowsocks قابل مدیریت هست. یه گزینه برای اعمال اجباری تنظیمات اضافه شده، کدهای مربوط به Warp بهینهسازی شدن، قابلیت fragment برای TLS اضافه شده و Hysteria بهصورت inbound با پشتیبانی از Port hopping در سمت کلاینت کار میکنه.
👉 github.com/alireza0/s-ui/releases/latest
🔍 ircf.space
@ircfspace
Forwarded from Go Casts 🚀
ابزار VictoriaMetrics یه ابزار سریع و مقیاس پذیر برای مانیتورینگ و مدیریت time-series data هست که در توسعه ش خیلی به مساله performance و reliability اهمیت دادن.
حالا یکی از توسعه دهندگانش توصیه کرده که اگه میخواید بدونید سیستم های high performance چطوری با گولنگ توسعه داده میشن کد پروژه VictoriaLogs رو بخونید.
If you want to know how high performance systems written in Go were built, read VictoriaLogs.
1. Custom bloom filters to reduce disk I/O and CPU cycles for redundant logs.
2. Column-oriented block storage for better compression ratio and cache locality.
3. Memory-mapped files with automatic pread fallback for zero-copy reads.
4. Lock-free object pools and arena allocators to reduce heap allocations.
5. Reflection-free JSON parsers for streaming at hundreds of MB/s per core.
6. Compile-time templates replace text/html parsing with near-printf speed.
7. Dictionary-aware Zstd compression balancing CPU cost against bandwidth savings.
8. Multi-core parallelism everywhere with adaptive concurrency limits.
9. Scatter-gather fan-out writes with adaptive concurrency for network saturation.
10. Fast hashing and lock-free randomization for minimal contention.
VictoriaLogs
Fast and easy to use database for logs, which can efficiently handle terabytes of logs
https://github.com/VictoriaMetrics/VictoriaLogs
https://x.com/func25/status/1950115605484552333?t=nlInVX9hO2aYSQa_gRZoog&s=35
@gocasts
حالا یکی از توسعه دهندگانش توصیه کرده که اگه میخواید بدونید سیستم های high performance چطوری با گولنگ توسعه داده میشن کد پروژه VictoriaLogs رو بخونید.
If you want to know how high performance systems written in Go were built, read VictoriaLogs.
1. Custom bloom filters to reduce disk I/O and CPU cycles for redundant logs.
2. Column-oriented block storage for better compression ratio and cache locality.
3. Memory-mapped files with automatic pread fallback for zero-copy reads.
4. Lock-free object pools and arena allocators to reduce heap allocations.
5. Reflection-free JSON parsers for streaming at hundreds of MB/s per core.
6. Compile-time templates replace text/html parsing with near-printf speed.
7. Dictionary-aware Zstd compression balancing CPU cost against bandwidth savings.
8. Multi-core parallelism everywhere with adaptive concurrency limits.
9. Scatter-gather fan-out writes with adaptive concurrency for network saturation.
10. Fast hashing and lock-free randomization for minimal contention.
VictoriaLogs
Fast and easy to use database for logs, which can efficiently handle terabytes of logs
https://github.com/VictoriaMetrics/VictoriaLogs
https://x.com/func25/status/1950115605484552333?t=nlInVX9hO2aYSQa_gRZoog&s=35
@gocasts
GitHub
GitHub - VictoriaMetrics/VictoriaLogs: Fast and easy to use database for logs, which can efficiently handle terabytes of logs
Fast and easy to use database for logs, which can efficiently handle terabytes of logs - VictoriaMetrics/VictoriaLogs
Forwarded from DevTwitter | توییت برنامه نویسی
This media is not supported in your browser
VIEW IN TELEGRAM
یک دوره خیلی خوب از مایکروسافت راجع به Model Context Protocol (MCP) به اسم MCP for Beginners. اگه هنوز نمیدونید MCP چی هست یا اینکه چطور کار میکنه حتما این دوره را ببینید. به جز یک ویدیو ۱ ساعته باقی ویدیوها زیر ۵-۶ دقیقه هستند. MCP یکی از مهمترین مباحث برای درست کردن AI agents هست.
Youtube: https://youtube.com/watch?v=VfZlglOWWZw&list=PLlrxD0HtieHjYfVUpGl_-ai7D6FRBjV-d&index=1
@DevTwitter | <Mehdi Allahyari/>
Youtube: https://youtube.com/watch?v=VfZlglOWWZw&list=PLlrxD0HtieHjYfVUpGl_-ai7D6FRBjV-d&index=1
@DevTwitter | <Mehdi Allahyari/>
Forwarded from Mr Python | مستر پایتون (حسین)
چند وقت پیش مجبور شدم سیستم عاملم رو عوض کنم و یک لینوکس Ubuntu نصب کنم . همیشه پارتیشن ها و مسیر هایی داشتم که یادم میموند حتما ازشون بکاپ بگیرم و در سیستم عامل های جدید داشته باشمشون . مثلا مسیری که پروژه هامو ذخیره میکردم . مسیری که بکاپ های شرکت بود و ...
اتفاقی که افتاد این بود که به دلیل اینکه این مسیر ها زیاد شده بودن ، من فراموش کردم یکیشون رو بکاپ بگیرم و منتقل کنم به سیستم عامل جدید بنابراین تمام فایل پروژه هام و بکاپ های شرکت از بین رفت .
برای اینکه دیگه این اتفاق نیفته ، تصمیم گرفتم تمام مسیر هایی که از این به بعد مهم هستند و نیازه تا حین تعویض سیستم عامل ازشون بکاپ بگیرم رو یک فایل مخفی خالی به نام important. داخلشون ذخیره کنم :
حالا از این به بعد هرموقع میخوام سیستم عامل جدید نصب کنم کافیه یک بار دستور locate رو اجرا کنم تا تمام مسیر هایی که تگ important روشون زدم نمایان بشن و بکاپ بگیرم ازشون :
این روش مختص سیستم های لینوکسی بود . روشی مشابه همین میتونید در ویندوز پیاده سازی کنید . البته روش های دیگه ی خیلی زیادی هم هست که مطمئنن دارید بهش فکر میکنید . مثلا ساخت یک پارتیشن جدا برای فایل های مهم و حفظ اون پارتیشن و فرمت نکردنش حین تعویض سیستم عامل و ....
ولی خب این روشی بود که به ذهن من رسید از اونجایی که پارتیشن جدای اختصاصی ندارم .
🆔 : @MrPythonBlog | BOOST
اتفاقی که افتاد این بود که به دلیل اینکه این مسیر ها زیاد شده بودن ، من فراموش کردم یکیشون رو بکاپ بگیرم و منتقل کنم به سیستم عامل جدید بنابراین تمام فایل پروژه هام و بکاپ های شرکت از بین رفت .
برای اینکه دیگه این اتفاق نیفته ، تصمیم گرفتم تمام مسیر هایی که از این به بعد مهم هستند و نیازه تا حین تعویض سیستم عامل ازشون بکاپ بگیرم رو یک فایل مخفی خالی به نام important. داخلشون ذخیره کنم :
# in an important location :
$ touch .important
حالا از این به بعد هرموقع میخوام سیستم عامل جدید نصب کنم کافیه یک بار دستور locate رو اجرا کنم تا تمام مسیر هایی که تگ important روشون زدم نمایان بشن و بکاپ بگیرم ازشون :
$ locate .important
/home/hossein/Desktop/DB/.important
/home/hossein/MrPython/.important
/home/hossein/Projects/.important
/home/hossein/Backups/.important
این روش مختص سیستم های لینوکسی بود . روشی مشابه همین میتونید در ویندوز پیاده سازی کنید . البته روش های دیگه ی خیلی زیادی هم هست که مطمئنن دارید بهش فکر میکنید . مثلا ساخت یک پارتیشن جدا برای فایل های مهم و حفظ اون پارتیشن و فرمت نکردنش حین تعویض سیستم عامل و ....
ولی خب این روشی بود که به ذهن من رسید از اونجایی که پارتیشن جدای اختصاصی ندارم .
🆔 : @MrPythonBlog | BOOST
Forwarded from Shabake.dev
کلادفلر گفته باتهای پرپلکسیتی رو مسدود کرده، چون این شرکت اومده یه سیستم مخفیانه ساخته و خودش رو جای کاربر واقعی جا میزده و بدون رعایت قوانین robots.txt دیتای سایتهارو جمعآوری میکرده. در واقع پرپلکسیتی ۲ تا بات داشته که یکیش با اسم خودشون سایتهارو استخراج میکرده ولی یه بات مخفی هم داشتن برای سایتهایی که پرپلکسیتی یا باتهای AI رو مسدود کردن. این بات خودش رو یه کاربر عادی که مرورگر کروم داره معرفی کرده. [L]
@shabakedev
@shabakedev
Forwarded from Linuxor ?
فخر فروشی نرم افزاری
تو دانشگاه یه استاد داشتیم میگفت بعضی دیتابیس ها خیلی بهتر از SQL ان و خیلی راحت تر ولی چون مهندسا نمیتونن باهاش فخر بفروشن مثلا بگن من میتونم فلان Query سنگین رو بزنم تو نمیتونی ! پس سمتش نمیرن و تبلیغش نمیکنن؛ سازنده php هم یه حرف باحال زده بود میگفت که php یه ابزار pragmatistهاست: واسه انجام کار. نه واسه فخر فروختن بین مهندسا.
(منظور از pragmatist یعنی یه چیزی که کارتو راه بندازه نه صرفا یه چیز ایدهآل)
@Linuxor
تو دانشگاه یه استاد داشتیم میگفت بعضی دیتابیس ها خیلی بهتر از SQL ان و خیلی راحت تر ولی چون مهندسا نمیتونن باهاش فخر بفروشن مثلا بگن من میتونم فلان Query سنگین رو بزنم تو نمیتونی ! پس سمتش نمیرن و تبلیغش نمیکنن؛ سازنده php هم یه حرف باحال زده بود میگفت که php یه ابزار pragmatistهاست: واسه انجام کار. نه واسه فخر فروختن بین مهندسا.
(منظور از pragmatist یعنی یه چیزی که کارتو راه بندازه نه صرفا یه چیز ایدهآل)
@Linuxor
Forwarded from محتوای آزاد سهراب
خب اگر بخوایم دوباره یوتوب رو شروع کنیم میتونید اینجا پیشنهاداتتون رو بگید تا ببینم چه میشه کرد.
https://youtube.com/post/Ugkx-l0OE022xgdQvP8h7uS8Wi04tatEMdNy?si=0kTkWvtdWQODxx6C
@SohrabContents
https://youtube.com/post/Ugkx-l0OE022xgdQvP8h7uS8Wi04tatEMdNy?si=0kTkWvtdWQODxx6C
@SohrabContents
YouTube
Post from Sohrab Behdani
خب اگر بخوام تولید محتوا رو دوباره شروع کنم به صورت کاملاً جدی، دوست دارید چی رو ببینید اینجا؟ میتونید کامنت بذارید و بهم بگید. یک دوره گنو/لینوکس داریم که ...
Forwarded from DevTwitter | توییت برنامه نویسی
بالاخره معماری جدید واسه مدل های هوش مصنوعی که ظاهرا خیلی بهینه تر و بهتر از ترنسفورمرهاست. این مدل بیشتر از معماری مغز انسان الهام گرفته و با ۲۷میلیون پارامتر از دیپ سیک هم بهتر عمل کرده.
https://arxiv.org/pdf/2506.21734
@DevTwitter | <Nima/>
https://arxiv.org/pdf/2506.21734
@DevTwitter | <Nima/>
Forwarded from Geek Alerts
واتساپ داره یه بخش چت مهمان اضافه میکنه، اینجوری که یه لینک چت میسازید و برای کسی که میخواید باهاش چت کنید میفرستید، اون شخص بدون نیاز به عضویت در واتساپ میتونه وارد چت بشه. تو نسخه اولیه فقط میشه پیام داد و امکان تماس و ارسال مدیا فعلا نیست.
این ویژگی در نسخه آزمایشی دیده شده ولی میشه انتظار داشت بهزودی به واتساپ اضافه بشه. [L]
🤓 @geekalerts
این ویژگی در نسخه آزمایشی دیده شده ولی میشه انتظار داشت بهزودی به واتساپ اضافه بشه. [L]
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Linuxor ?
یه پیامک از سمت CRA برای مالک دامنه های IR اومده که دامنه شما توی اپراتور دانش های بنیادی-فیزیک نظری ثبت شده، چیز خاصی نیست برای همه اومده این سیستم همون سیستم رجیستری گوشی و مالکیت سیمکارته، احتمالا دارن برنامه ای درست میکنن که بعدا بتونید با کد ملی چک کنید مثلا چند تا دامنه به اسمتونه !
البته امیدوارم به سمتی نره که مثل رجیستری گوشی، دامنه های خارج رو فیلتر کنن و بگن اگه دامنه خارج میخواید بیاید توی این سیستم ثبتش کنید.
@Linuxor
البته امیدوارم به سمتی نره که مثل رجیستری گوشی، دامنه های خارج رو فیلتر کنن و بگن اگه دامنه خارج میخواید بیاید توی این سیستم ثبتش کنید.
@Linuxor
Forwarded from Linuxor ?
Forwarded from Geek Alerts
ماجرا داره پیچیده میشه، پرپلکسیتی جواب داده و گفته اینها بات نیستن که سایتهارو باز میکنن، agent هایی هستن که آدمها ازشون استفاده میکنن. میگه بین خزش خودکار و فرایندی که کاربر فعالش میکنه تفاوت هست. این صفحاتی که باز میشن فقط برای جواب دادن به سوال کاربر هستن و هیچوقت ذخیره یا استفاده نمیشن. در واقع به درخواست کاربر یک مرورگر باز میشه، دیتا برداشته میشه و برای جواب به سوال کاربر استفاده میشه.
بعد در ادامه میگه کلادفلر داره به صورت یک گیتکیپر عمل میکنه و هر کاری که دوست داره رو انجام میده. هر زمان بخواد دسترسیهارو میبنده. اونها در کلادفلر یک فرصت تبلیغاتی دیدن و از ما برای این فرصت استفاده کردن.
واکنشها زیاد بوده و بیشترشون طرفداری از کلادفلر داشتن، گفتن سایتها انتظار دارن کاربر واقعی وارد بشه، با صفحاتشون تعامل داشته باشه، پیشنهادات و تبلیغاتشون رو ببینه، اگه فقط محتوای صفحات سایتها بدون همه اینها استخراج بشه، سایتها در کنار نداشتن درآمد باید آخر ماه هزینههای بیشتری برای نگهداری سایت پرداخت کنن. [L]
🤓 @geekalerts
بعد در ادامه میگه کلادفلر داره به صورت یک گیتکیپر عمل میکنه و هر کاری که دوست داره رو انجام میده. هر زمان بخواد دسترسیهارو میبنده. اونها در کلادفلر یک فرصت تبلیغاتی دیدن و از ما برای این فرصت استفاده کردن.
واکنشها زیاد بوده و بیشترشون طرفداری از کلادفلر داشتن، گفتن سایتها انتظار دارن کاربر واقعی وارد بشه، با صفحاتشون تعامل داشته باشه، پیشنهادات و تبلیغاتشون رو ببینه، اگه فقط محتوای صفحات سایتها بدون همه اینها استخراج بشه، سایتها در کنار نداشتن درآمد باید آخر ماه هزینههای بیشتری برای نگهداری سایت پرداخت کنن. [L]
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Gopher Academy
چی هست fuzz testing؟
* در Go 1.18، fuzz testing بهصورت داخلی وارد stdlib شد**؛ ابزاری که بهطور خودکار ورودیهای تصادفی تولید کرده و تابع مورد نظر را تست میکند تا **Bugها و edge caseها را بیابد
* برخلاف تستهای واحد که ورودیهای مشخص دارند، fuzz با تکیه بر یک seed corpus (مثلاً تعدادی ورودی اولیه) شروع گرفته و بر اساس راهنمای پوشش کد تست را گسترش میدهد، مسیرهای جدید کد را کشف میکند و موارد جالبی تولید میکند که تستهای سنتی ممکن است پوشش ندهند
---
2. نحوه نوشتن fuzz test در Go
* تابع
*
*
---
3. مزایا و معایب
✅ مزایا:
* افزایش پوشش تست و کشف خطاهای نادیدهگرفتهشده: بهویژه برای parserها، handlers با JSON یا ورودی پیچیده
* سهولت استفاده: تست زیاد بدون نیاز به نوشتن دستی هزاران ورودی.
* هر بار موارد جالب کشفشده ذخیرهشده و قابل اجرای مجدد هستند
❌ معایب یا چالشها:
* نیاز به طراحی درست تابع تحت تست (مثلاً برگشت error برای ورودی نامعتبر مانند invalid UTF-8)
* زمانبر بودن تست: اجرای fuzz برای هزاران ورودی ممکن است زمان زیادی ببرد
* در مولفههای پیچیدهتر (مثلاً structهایی با فیلد private) ممکن است نیاز به ساخت custom generator باشد.
---
4. تجربه افراد و ابزارهای مکمل
* سیستمهایی مثل
* کتابخانههای property-based مانند
* جامعه توسعهدهندهها تجربههای بسیار مثبتی داشتهاند:
* در Go 1.18، fuzz testing بهصورت داخلی وارد stdlib شد**؛ ابزاری که بهطور خودکار ورودیهای تصادفی تولید کرده و تابع مورد نظر را تست میکند تا **Bugها و edge caseها را بیابد
* برخلاف تستهای واحد که ورودیهای مشخص دارند، fuzz با تکیه بر یک seed corpus (مثلاً تعدادی ورودی اولیه) شروع گرفته و بر اساس راهنمای پوشش کد تست را گسترش میدهد، مسیرهای جدید کد را کشف میکند و موارد جالبی تولید میکند که تستهای سنتی ممکن است پوشش ندهند
---
2. نحوه نوشتن fuzz test در Go
func FuzzReverse(f *testing.F) {
f.Add("abc") // seed اولیه
f.Add("bb")
f.Fuzz(func(t *testing.T, str string) {
rev1 := Reverse(str)
rev2 := Reverse(rev1)
if str != rev2 {
t.Errorf("fuzz test failed: %q became %q", str, rev1)
}
if utf8.ValidString(str) && !utf8.ValidString(rev1) {
t.Errorf("invalid utf-8 after reverse: %q", rev1)
}
})
}* تابع
FuzzXXX در فایل تست نوشته میشود؛*
f.Add(...) ورودیهای اولیه را مشخص میکند (seed corpus)؛*
f.Fuzz(...) تابع تست را با signature مشخص اجرا میکند و Go وظیفه دارد ورودیهای جدید را تولید و اجرا کند---
3. مزایا و معایب
✅ مزایا:
* افزایش پوشش تست و کشف خطاهای نادیدهگرفتهشده: بهویژه برای parserها، handlers با JSON یا ورودی پیچیده
* سهولت استفاده: تست زیاد بدون نیاز به نوشتن دستی هزاران ورودی.
* هر بار موارد جالب کشفشده ذخیرهشده و قابل اجرای مجدد هستند
❌ معایب یا چالشها:
* نیاز به طراحی درست تابع تحت تست (مثلاً برگشت error برای ورودی نامعتبر مانند invalid UTF-8)
* زمانبر بودن تست: اجرای fuzz برای هزاران ورودی ممکن است زمان زیادی ببرد
* در مولفههای پیچیدهتر (مثلاً structهایی با فیلد private) ممکن است نیاز به ساخت custom generator باشد.
---
4. تجربه افراد و ابزارهای مکمل
* سیستمهایی مثل
go-fuzz (پیش از نسخه رسمی Go) برای fuzz کردن بستههای Go استفاده میشد و بسیار موثر بود* کتابخانههای property-based مانند
pgregory.net/rapid گزینهی جایگزینی هستند که قابلیتهای پیشرفته توليد داده، مینیمالسازی خطاها و persistence را ارائه میدهند * جامعه توسعهدهندهها تجربههای بسیار مثبتی داشتهاند:
Forwarded from Software Engineer Labdon
🌟 ۵ استراتژی کلیدی برای دسترسی بالا (High Availability)
۱. 🍎 Load Balancing
توزیع هوشمند درخواستها به سرورهای مختلف با در نظر گرفتن معیارهایی مثل مصرف CPU، حافظه و زمان پاسخگویی. این کار از بارگذاری بیشازحد یک سرور جلوگیری کرده و تضمین دسترسی مناسب را فراهم میکند
۲. 🔁 Data Redundancy with Isolation
ایجاد نسخههای متعدد از دادهها در دیتاسنترها یا مناطق مختلف (AZ/Region) برای جلوگیری از توقف سرویس در صورت خرابی یک محل. تکنیکهایی مثل replication و توزیع داده استفاده میشود
۳. 🛠 Failover
راهاندازی خودکار سرویسهای پشتیبان (standby) که در صورت خرابی سرور اصلی، بدون وقفه بارکاری را ادامه دهند. این امکان از طریق load balancer، دیتابیس یا سرویسهای کاربردی قابل اجراست
۴. 📈 Auto Scaling
تنظیم خودکار مقیاس منابع در مواجهه با افزایش یا کاهش بار. منابع مانند VM، کانتینر یا فانکشن سرورلس به کلود یا سیستم مدیریت اختصاصی اضافه و حذف میشوند
۵. 🚦 Rate Limiting
اعمال محدودیت در تعداد درخواستهای دریافتی (مثلاً تعداد مشخص در هر ثانیه یا دقیقه) در لایههای مختلف مثل load balancer یا خود سرور. جلوگیری از overload سیستم و تضمین تجربه کاربری پایدار را ممکن میکند
---
🧭 چرا این روشها مهماند؟
* با ترکیب این استراتژیها میتونی سیستمت رو بهگونهای طراحی کنی که حتی در صورت خرابی یا حمله ناگهانی، ادامه بهکار دهد.
* هر مورد از این استراتژیها یک جنبهی خاص از پایداری مثل توزیع بار، حفاظت دادهها یا کنترل درخواست را پوشش میدهد.
* این اصول نمایانگر مفاهیمی مثل حذف Single Point of Failure، failover خودکار، کشش دینامیک و کنترل ترافیک هستند.
---
🧩 سایر رویکردها که ممکنه مفید باشن:
* Redundancy + Fault Tolerance: استفاده از سرورهای active-active یا active-passive در دادهسنترهای مختلف بههمراه clustering و heartbeat برای مانیتورینگ خودکار .
* Distributed Storage & Replication: برای پایداری داده و تحمل خرابی در نودهای جغرافیایی متعدد
* Monitoring, Health Checks, Graceful Degradation: پیادهسازی مانیتورینگ لحظهای، بررسی سلامت سرویس و ارائه fallback مناسب در شرایط بحرانی برای حفظ تجربه کاربری
---
✅ جمعبندی سریع
این پنج استراتژی (Load Balancing، Data Redundancy، Failover، Auto Scaling، Rate Limiting) پایهایترین اصول برای طراحی سیستمهای با High Availability هستند. با اجرای مناسب آنها میتونی سطح دسترسی بالا، مقاومت در برابر خطا و تجربهی بدون وقفهای برای کاربران فراهم کنی.
➖➖➖➖➖➖➖➖
https://t.iss.one/addlist/QtXiQlynEJwzODBk
۱. 🍎 Load Balancing
توزیع هوشمند درخواستها به سرورهای مختلف با در نظر گرفتن معیارهایی مثل مصرف CPU، حافظه و زمان پاسخگویی. این کار از بارگذاری بیشازحد یک سرور جلوگیری کرده و تضمین دسترسی مناسب را فراهم میکند
۲. 🔁 Data Redundancy with Isolation
ایجاد نسخههای متعدد از دادهها در دیتاسنترها یا مناطق مختلف (AZ/Region) برای جلوگیری از توقف سرویس در صورت خرابی یک محل. تکنیکهایی مثل replication و توزیع داده استفاده میشود
۳. 🛠 Failover
راهاندازی خودکار سرویسهای پشتیبان (standby) که در صورت خرابی سرور اصلی، بدون وقفه بارکاری را ادامه دهند. این امکان از طریق load balancer، دیتابیس یا سرویسهای کاربردی قابل اجراست
۴. 📈 Auto Scaling
تنظیم خودکار مقیاس منابع در مواجهه با افزایش یا کاهش بار. منابع مانند VM، کانتینر یا فانکشن سرورلس به کلود یا سیستم مدیریت اختصاصی اضافه و حذف میشوند
۵. 🚦 Rate Limiting
اعمال محدودیت در تعداد درخواستهای دریافتی (مثلاً تعداد مشخص در هر ثانیه یا دقیقه) در لایههای مختلف مثل load balancer یا خود سرور. جلوگیری از overload سیستم و تضمین تجربه کاربری پایدار را ممکن میکند
---
🧭 چرا این روشها مهماند؟
* با ترکیب این استراتژیها میتونی سیستمت رو بهگونهای طراحی کنی که حتی در صورت خرابی یا حمله ناگهانی، ادامه بهکار دهد.
* هر مورد از این استراتژیها یک جنبهی خاص از پایداری مثل توزیع بار، حفاظت دادهها یا کنترل درخواست را پوشش میدهد.
* این اصول نمایانگر مفاهیمی مثل حذف Single Point of Failure، failover خودکار، کشش دینامیک و کنترل ترافیک هستند.
---
🧩 سایر رویکردها که ممکنه مفید باشن:
* Redundancy + Fault Tolerance: استفاده از سرورهای active-active یا active-passive در دادهسنترهای مختلف بههمراه clustering و heartbeat برای مانیتورینگ خودکار .
* Distributed Storage & Replication: برای پایداری داده و تحمل خرابی در نودهای جغرافیایی متعدد
* Monitoring, Health Checks, Graceful Degradation: پیادهسازی مانیتورینگ لحظهای، بررسی سلامت سرویس و ارائه fallback مناسب در شرایط بحرانی برای حفظ تجربه کاربری
---
✅ جمعبندی سریع
این پنج استراتژی (Load Balancing، Data Redundancy، Failover، Auto Scaling، Rate Limiting) پایهایترین اصول برای طراحی سیستمهای با High Availability هستند. با اجرای مناسب آنها میتونی سطح دسترسی بالا، مقاومت در برابر خطا و تجربهی بدون وقفهای برای کاربران فراهم کنی.
➖➖➖➖➖➖➖➖
https://t.iss.one/addlist/QtXiQlynEJwzODBk
Forwarded from Gopher Academy
🏗 مراحل کامپایل در زبان Go
کامپایلر Go شامل مراحل زیر هست:
1. Tokenizing (Lexical Analysis)
کد به اجزای کوچکتر مثل if, for, x, +, 123 تجزیه میشه.
این کار توسط lexer انجام میشه.
2. Parsing (Syntax Analysis)
از توکنها یک درخت نحوی یا AST (Abstract Syntax Tree) ساخته میشه.
مثلاً a + b به شکل درختی با + به عنوان ریشه و a و b به عنوان فرزندها تحلیل میشه.
3. Type Checking
بررسی میکنه که همه چیز از نظر نوع (type) درسته یا نه:
آیا a + b مجازه؟ (آیا a و b عدد هستن؟)
آیا تابعی با امضای درست فراخوانی شده؟
4. Intermediate Representation (IR)
کد به فرم میانی ترجمه میشه که خواندن و بهینهسازی روش راحتتره.
Go از فرم SSA (Static Single Assignment) استفاده میکنه (در مرحله بعد توضیح داده میشه).
5. SSA (Static Single Assignment)
در این مدل، هر متغیر فقط یکبار مقداردهی میشه.
این به کامپایلر کمک میکنه که راحتتر بهینهسازی انجام بده، مثلاً:
حذف کدهای مرده
inline کردن توابع
بهینهسازی حلقهها
6. Code Generation
در نهایت، از SSA کد ماشین تولید میشه (برای لینوکس/ویندوز/مک، معماری x86/ARM و…).
کامپایلر Go شامل مراحل زیر هست:
Source Code → Tokenizing → Parsing → AST → Type Checking → IR → SSA → Machine Code
1. Tokenizing (Lexical Analysis)
کد به اجزای کوچکتر مثل if, for, x, +, 123 تجزیه میشه.
این کار توسط lexer انجام میشه.
2. Parsing (Syntax Analysis)
از توکنها یک درخت نحوی یا AST (Abstract Syntax Tree) ساخته میشه.
مثلاً a + b به شکل درختی با + به عنوان ریشه و a و b به عنوان فرزندها تحلیل میشه.
3. Type Checking
بررسی میکنه که همه چیز از نظر نوع (type) درسته یا نه:
آیا a + b مجازه؟ (آیا a و b عدد هستن؟)
آیا تابعی با امضای درست فراخوانی شده؟
4. Intermediate Representation (IR)
کد به فرم میانی ترجمه میشه که خواندن و بهینهسازی روش راحتتره.
Go از فرم SSA (Static Single Assignment) استفاده میکنه (در مرحله بعد توضیح داده میشه).
5. SSA (Static Single Assignment)
در این مدل، هر متغیر فقط یکبار مقداردهی میشه.
این به کامپایلر کمک میکنه که راحتتر بهینهسازی انجام بده، مثلاً:
حذف کدهای مرده
inline کردن توابع
بهینهسازی حلقهها
6. Code Generation
در نهایت، از SSA کد ماشین تولید میشه (برای لینوکس/ویندوز/مک، معماری x86/ARM و…).
Forwarded from Gopher Academy
🌀 چرا Go سریع کامپایل میکنه؟
* کامپایلر Go فایلها رو به صورت مستقل کامپایل میکنه (no header files مثل C/C++)
* importها فقط به شکل explicit مجاز هستن (هیچ چیزی مخفیانه load نمیشه)
* فرم SSA بسیار بهینه و کمحجم هست
* استفاده از حافظهی کم در زمان build
---
🧪 مثال عملی (build داخلی Go)
اگر این کد رو ذخیره کنی:
و بعد دستور زیر رو بزنی:
میبینی که این مراحل اتفاق میافته:
---
🧰 ابزار مفید:
اگه بخوای دقیقتر رفتار کامپایلر رو ببینی:
1. فقط کامپایل کن بدون لینک:
این دستور خروجی اسمبلی (Assembly) کد رو نشون میده.
2. آنالیز باینری نهایی:
➖➖➖➖➖➖➖➖
https://t.iss.one/addlist/QtXiQlynEJwzODBk
* کامپایلر Go فایلها رو به صورت مستقل کامپایل میکنه (no header files مثل C/C++)
* importها فقط به شکل explicit مجاز هستن (هیچ چیزی مخفیانه load نمیشه)
* فرم SSA بسیار بهینه و کمحجم هست
* استفاده از حافظهی کم در زمان build
---
🧪 مثال عملی (build داخلی Go)
اگر این کد رو ذخیره کنی:
package main
import "fmt"
func main() {
fmt.Println("Hello, Go!")
}
و بعد دستور زیر رو بزنی:
go build -x main.go
میبینی که این مراحل اتفاق میافته:
WORK=/tmp/go-build123456
mkdir -p $WORK/b001/
compile -> main.a
link -> main binary
---
🧰 ابزار مفید:
go tool compile و go tool objdumpاگه بخوای دقیقتر رفتار کامپایلر رو ببینی:
1. فقط کامپایل کن بدون لینک:
go tool compile -S main.go
این دستور خروجی اسمبلی (Assembly) کد رو نشون میده.
2. آنالیز باینری نهایی:
go tool objdump ./main
➖➖➖➖➖➖➖➖
https://t.iss.one/addlist/QtXiQlynEJwzODBk
Forwarded from DevTwitter | توییت برنامه نویسی
یه ایده پروژه جدید که به درد خیلی از تولیدکنندههای محتوا میخوره. مخصوصاً اگه ویدیوهای کوتاه تو اینستاگرام یا یوتیوب میذارید.
تو این پروژه میتونید ویدیوی کوتاه (زیر ۹۰ ثانیه) آپلود کنید، زبان رو انتخاب کنید (فارسی یا انگلیسی)، و چند دقیقه بعد فایل زیرنویس را بگیرید. یا اینکه یک مرحله بالا برید و نسخهای از همون ویدیو رو با زیرنویسِ چسبیده تحویل بگیرید.
ایدهی اصلیش اینه که:
۱. مخاطبای خیلیا تو سکوت اسکرول میکنن — زیرنویس واجبه.
۲. ساخت زیرنویس برای ویدیو به فارسی هنوز خیلی دردسر داره.
۳. ابزارهایی که هستن یا گرونن یا فارسی رو خوب پشتیبانی نمیکنن.
از نظر فنی، من با این تکنولوژیها شروع میکنم:
- React + TypeScript + TailwindCSS برای رابط کاربری
- Vite برای توسعه سریع و سبک
- Shadcn UI برای طراحی تمیز و مدرن
- Whisper یا هر سرویس دیگه ای برای تبدیل گفتار به متن
و ffmpeg برای چسبوندن زیرنویس روی ویدیو
میتونید از گوگل کلاد یا AWS هم برای ذخیره فایلهای ویدیویی استفاده کرد.
تصویر معماری سیستم هم بالا گذاشتم براتون
@DevTwitter | <Mehdi Allahyari/>
تو این پروژه میتونید ویدیوی کوتاه (زیر ۹۰ ثانیه) آپلود کنید، زبان رو انتخاب کنید (فارسی یا انگلیسی)، و چند دقیقه بعد فایل زیرنویس را بگیرید. یا اینکه یک مرحله بالا برید و نسخهای از همون ویدیو رو با زیرنویسِ چسبیده تحویل بگیرید.
ایدهی اصلیش اینه که:
۱. مخاطبای خیلیا تو سکوت اسکرول میکنن — زیرنویس واجبه.
۲. ساخت زیرنویس برای ویدیو به فارسی هنوز خیلی دردسر داره.
۳. ابزارهایی که هستن یا گرونن یا فارسی رو خوب پشتیبانی نمیکنن.
از نظر فنی، من با این تکنولوژیها شروع میکنم:
- React + TypeScript + TailwindCSS برای رابط کاربری
- Vite برای توسعه سریع و سبک
- Shadcn UI برای طراحی تمیز و مدرن
- Whisper یا هر سرویس دیگه ای برای تبدیل گفتار به متن
و ffmpeg برای چسبوندن زیرنویس روی ویدیو
میتونید از گوگل کلاد یا AWS هم برای ذخیره فایلهای ویدیویی استفاده کرد.
تصویر معماری سیستم هم بالا گذاشتم براتون
@DevTwitter | <Mehdi Allahyari/>
Forwarded from Gopher Academy
در طراحی کامپایلرها، Static Single Assignment (SSA) یک فرم نمایش میانی (Intermediate Representation یا IR) است که در آن هر متغیر تنها یکبار تعریف میشود. این روش برای بهینهسازی کد و سادهسازی تحلیلهایی مثل زنجیرههای استفاده-تعریف (use-define chains) استفاده میشود. کامپایلر گولنگ (مانند gc یا ابزارهای مرتبط با LLVM) ممکن است در مراحل بهینهسازی داخلی خود از مفاهیم مشابه SSA استفاده کند،
مثال ساده:
فرض کنید کدی مثل این دارید
در فرم SSA، متغیر x به نسخههای مختلفی (مثل x1 و x2) تقسیم میشود تا هر تخصیص یکتا باشد:
این نمایش به ابزارهای تحلیل کمک میکنه تا بتونن دقیقتر بررسی کنن که مقادیر متغیرها از کجا میان و کجا استفاده میشن.
مثال ساده:
فرض کنید کدی مثل این دارید
func main() {
x := 1
x = x + 2
fmt.Println(x)
}در فرم SSA، متغیر x به نسخههای مختلفی (مثل x1 و x2) تقسیم میشود تا هر تخصیص یکتا باشد:
x1 := 1
x2 := x1 + 2
fmt.Println(x2)
این نمایش به ابزارهای تحلیل کمک میکنه تا بتونن دقیقتر بررسی کنن که مقادیر متغیرها از کجا میان و کجا استفاده میشن.
🔴 این کار باعث میشه ردیابی جریان دادهها (مثل اینکه یک متغیر کجا تعریف و کجا استفاده شده) سادهتر بشه. این روش بهخصوص برای ابزارهایی مثل بررسی باگها، بهینهسازی کد، یا تحلیل وابستگیها خیلی مفیده.