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)
این نمایش به ابزارهای تحلیل کمک میکنه تا بتونن دقیقتر بررسی کنن که مقادیر متغیرها از کجا میان و کجا استفاده میشن.
🔴 این کار باعث میشه ردیابی جریان دادهها (مثل اینکه یک متغیر کجا تعریف و کجا استفاده شده) سادهتر بشه. این روش بهخصوص برای ابزارهایی مثل بررسی باگها، بهینهسازی کد، یا تحلیل وابستگیها خیلی مفیده.
Forwarded from Gopher Academy
🎯 تفاوت بین Heap و Stack به زبان ساده:
Stack:
- چیست؟
حافظهای با دسترسی سریع و مدیریت خودکار که برای ذخیره متغیرهای محلی و موقت (مثل متغیرهای داخل تابع) استفاده میشه.
- ویژگیها:
- تخصیص و آزادسازی حافظه به صورت LIFO (Last In, First Out) انجام میشه.
- اندازهاش معمولاً محدود و ثابت است.
- سریعتره چون مدیریتش سادهست.
- متغیرهای محلی (مثل
Heap:
- چیست؟
حافظهای پویا برای ذخیره دادههایی که عمر طولانیتری دارن یا اندازهشون در زمان اجرا مشخص میشه (مثل اشیاء یا آرایههای پویا).
- ویژگیها:
- تخصیص و آزادسازی حافظه به صورت دستی یا توسط Garbage Collector (در گولنگ به صورت خودکار).
- کندتر از Stack چون مدیریتش پیچیدهست.
- برای دادههای بزرگ یا اشتراکگذاری بین توابع استفاده میشه.
تفاوت کلیدی:
- سرعت: Stack سریعتره چون مدیریتش سادهست.
- مدیریت: Stack خودکار مدیریت میشه، اما Heap نیاز به Garbage Collector داره (در گولنگ).
- عمر داده: Stack برای دادههای موقت (محدوده تابع)، Heap برای دادههای با عمر طولانیتر.
- اندازه: Stack محدودتره، Heap بزرگتر و پویاست.
در گولنگ:
گولنگ با Escape Analysis تصمیم میگیره که یک متغیر در Stack یا Heap ذخیره بشه. مثلاً اگر متغیر از تابع خارج بشه (مثل برگرداندن اشارهگر)، به Heap میره.
Stack:
- چیست؟
حافظهای با دسترسی سریع و مدیریت خودکار که برای ذخیره متغیرهای محلی و موقت (مثل متغیرهای داخل تابع) استفاده میشه.
- ویژگیها:
- تخصیص و آزادسازی حافظه به صورت LIFO (Last In, First Out) انجام میشه.
- اندازهاش معمولاً محدود و ثابت است.
- سریعتره چون مدیریتش سادهست.
- متغیرهای محلی (مثل
int x = 5) و ارجاعات تابع در Stack ذخیره میشن.Heap:
- چیست؟
حافظهای پویا برای ذخیره دادههایی که عمر طولانیتری دارن یا اندازهشون در زمان اجرا مشخص میشه (مثل اشیاء یا آرایههای پویا).
- ویژگیها:
- تخصیص و آزادسازی حافظه به صورت دستی یا توسط Garbage Collector (در گولنگ به صورت خودکار).
- کندتر از Stack چون مدیریتش پیچیدهست.
- برای دادههای بزرگ یا اشتراکگذاری بین توابع استفاده میشه.
تفاوت کلیدی:
- سرعت: Stack سریعتره چون مدیریتش سادهست.
- مدیریت: Stack خودکار مدیریت میشه، اما Heap نیاز به Garbage Collector داره (در گولنگ).
- عمر داده: Stack برای دادههای موقت (محدوده تابع)، Heap برای دادههای با عمر طولانیتر.
- اندازه: Stack محدودتره، Heap بزرگتر و پویاست.
در گولنگ:
گولنگ با Escape Analysis تصمیم میگیره که یک متغیر در Stack یا Heap ذخیره بشه. مثلاً اگر متغیر از تابع خارج بشه (مثل برگرداندن اشارهگر)، به Heap میره.
Forwarded from Laravel News
Simplified Batch Job Creation with Laravel's Enhanced Artisan Command https://laravel-news.com/batch-job-creation
Laravel News
Simplified Batch Job Creation with Laravel's Enhanced Artisan Command - Laravel News
Accelerate Laravel batch job development with the enhanced make:job command that automatically generates complete batch-ready classes. This streamlined approach eliminates manual trait configuration while ensuring proper cancellation handling from project…
Forwarded from Linuxor ?
حذف 4 صفر از پولا گفتنش خیلی راحته ولی از لحاظ نرم افزاری بسیار کار پیچیده ایه؛ باید نرم افزار ها همگی بروزرسانی بشن؛ حتی اگه یه وبسرویس با قیمت قدیم کار کنه یکی با جدید ممکنه یه فاجعه رخ بده؛ از طرف دیگه داده های تاریخی و لاگ ها خوندنشون نیاز به یه لایه اضافی داره؛ و از همه مهم تر بعضی نرم افزار ها پشتیبانی برای بروزرسانی دیگه نمیشن !
این نوع ریفکتور ها توی نرم افزار همیشه منع میشه بهترین راه اینه یه واحد پول جدید بسازن و مثلا اسمشو بزارن مجید. قیمت این چنده؟ 20 مجید
@Linuxor
این نوع ریفکتور ها توی نرم افزار همیشه منع میشه بهترین راه اینه یه واحد پول جدید بسازن و مثلا اسمشو بزارن مجید. قیمت این چنده؟ 20 مجید
@Linuxor
Forwarded from Laravel News
Send Notifications in Laravel with Firebase Cloud Messaging and Notifire https://laravel-news.com/notifire
Laravel News
Send Notifications in Laravel with Firebase Cloud Messaging and Notifire - Laravel News
A Laravel package for sending Firebase Cloud Messaging (FCM) notifications with support for Laravel's notification system.