🔵 عنوان مقاله
created an 'Advanced Go Driver' for Amazon RDS and Aurora
🟢 خلاصه مقاله:
این مقاله یک «درایور پیشرفتهی Go» برای Amazon RDS و Aurora معرفی میکند که بهجای تغییر پروتکلها، روی pgx (برای PostgreSQL) و درایور بومی MySQL سوار میشود و قابلیتهای عملیاتی مهمی اضافه میکند. مهمترین مزیتها شامل سادهسازی احراز هویت با پشتیبانی از IAM و توکنهای SigV4، مدیریت خودکار TLS و چرخش گواهیها/اسرار، و تابآوری در سوییچاوور/فِیلاوور با تشخیص تغییرات DNS، اتصال مجدد شفاف و تکرار تراکنش-آگاه است. این درایور توپولوژی Aurora/RDS (نویسنده/خواننده) را میشناسد، برای بارهای فقط-خواندنی از ریدرها استفاده میکند و در صورت نیاز به نویسنده مهاجرت میکند. همچنین قلابهای مشاهدهپذیری (لاگ/متریک/تریس)، پشتیبانی از context، سازگاری با database/sql و pgx، و پیکربندی ساده از طریق DSN/متغیرهای محیطی را ارائه میدهد. نتیجه، کاهش زحمت در تعمیرات، بهبود رفتار در رخدادها، و یکپارچهسازی مدیریت اتصال برای PostgreSQL و MySQL روی AWS است.
🟣لینک مقاله:
https://golangweekly.com/link/173079/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
created an 'Advanced Go Driver' for Amazon RDS and Aurora
🟢 خلاصه مقاله:
این مقاله یک «درایور پیشرفتهی Go» برای Amazon RDS و Aurora معرفی میکند که بهجای تغییر پروتکلها، روی pgx (برای PostgreSQL) و درایور بومی MySQL سوار میشود و قابلیتهای عملیاتی مهمی اضافه میکند. مهمترین مزیتها شامل سادهسازی احراز هویت با پشتیبانی از IAM و توکنهای SigV4، مدیریت خودکار TLS و چرخش گواهیها/اسرار، و تابآوری در سوییچاوور/فِیلاوور با تشخیص تغییرات DNS، اتصال مجدد شفاف و تکرار تراکنش-آگاه است. این درایور توپولوژی Aurora/RDS (نویسنده/خواننده) را میشناسد، برای بارهای فقط-خواندنی از ریدرها استفاده میکند و در صورت نیاز به نویسنده مهاجرت میکند. همچنین قلابهای مشاهدهپذیری (لاگ/متریک/تریس)، پشتیبانی از context، سازگاری با database/sql و pgx، و پیکربندی ساده از طریق DSN/متغیرهای محیطی را ارائه میدهد. نتیجه، کاهش زحمت در تعمیرات، بهبود رفتار در رخدادها، و یکپارچهسازی مدیریت اتصال برای PostgreSQL و MySQL روی AWS است.
🟣لینک مقاله:
https://golangweekly.com/link/173079/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
👍5
🔻 درود دوستان عزیز، لطفا توجه کنید.
❇️ از این به بعد برای تبلیغات فقط مستقیماً به خودم پیام بدید. 👇
✨ برای دریافت تعرفههای تبلیغاتی لطفاً در پیام خصوصی با من در ارتباط باشید.
🎯 @mrbardia72
❌ هیچ تبلیغی از سمت هشتگ یار دیگه پذیرفته نخواهد شد.
🌷 با سپاس
❇️ از این به بعد برای تبلیغات فقط مستقیماً به خودم پیام بدید. 👇
✨ برای دریافت تعرفههای تبلیغاتی لطفاً در پیام خصوصی با من در ارتباط باشید.
🎯 @mrbardia72
❌ هیچ تبلیغی از سمت هشتگ یار دیگه پذیرفته نخواهد شد.
🌷 با سپاس
🤝4
Gopher Academy pinned «🔻 درود دوستان عزیز، لطفا توجه کنید. ❇️ از این به بعد برای تبلیغات فقط مستقیماً به خودم پیام بدید. 👇 ✨ برای دریافت تعرفههای تبلیغاتی لطفاً در پیام خصوصی با من در ارتباط باشید. 🎯 @mrbardia72 ❌ هیچ تبلیغی از سمت هشتگ یار دیگه پذیرفته نخواهد شد. 🌷 با سپاس»
🔵 عنوان مقاله
how a malicious Go module was exfiltrating credentials via Telegram.
🟢 خلاصه مقاله:
در این یادداشت از Golang Weekly یک نمونه سوءاستفاده زنجیره تأمین در اکوسیستم Go شرح داده میشود: ماژولی که با اجرای پنهانی (مثلاً در init) اطلاعات حساسی مثل متغیرهای محیطی، کلیدهای ابری، اعتبارنامههای Git و SSH را جمعآوری و از طریق API ربات تلگرام بهصورت HTTPS ارسال میکرد. استفاده از تلگرام بهدلیل ترافیک قابلقبول و زیرساخت آماده، به مهاجم کمک میکند تا انتقال داده را پنهان کند. نشانههای کشف شامل ارجاع به api.telegram.org، رشتههای مبهمسازیشده حاوی توکن/Chat ID، و منطق غیرعادی هنگام ساخت یا تست است. برای مقابله: قفلکردن نسخه و checksum وابستگیها، استفاده از GOPROXY و پایگاه checksum، vendors کردن کتابخانههای حساس، بازبینی تغییرات، قطع دسترسی شبکه در محیط build/test، تحلیل ایستا برای آدرسهای مشکوک، اسکن اسرار، و بهکارگیری اعتبارنامههای کماختیار و کوتاهعمر توصیه میشود. پیام نهایی: پیامرسانها را بهعنوان کانالهای بالقوه خروج داده در نظر بگیرید و حتی وابستگیهای کوچک را با دقت بررسی کنید.
🟣لینک مقاله:
https://golangweekly.com/link/173335/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
how a malicious Go module was exfiltrating credentials via Telegram.
🟢 خلاصه مقاله:
در این یادداشت از Golang Weekly یک نمونه سوءاستفاده زنجیره تأمین در اکوسیستم Go شرح داده میشود: ماژولی که با اجرای پنهانی (مثلاً در init) اطلاعات حساسی مثل متغیرهای محیطی، کلیدهای ابری، اعتبارنامههای Git و SSH را جمعآوری و از طریق API ربات تلگرام بهصورت HTTPS ارسال میکرد. استفاده از تلگرام بهدلیل ترافیک قابلقبول و زیرساخت آماده، به مهاجم کمک میکند تا انتقال داده را پنهان کند. نشانههای کشف شامل ارجاع به api.telegram.org، رشتههای مبهمسازیشده حاوی توکن/Chat ID، و منطق غیرعادی هنگام ساخت یا تست است. برای مقابله: قفلکردن نسخه و checksum وابستگیها، استفاده از GOPROXY و پایگاه checksum، vendors کردن کتابخانههای حساس، بازبینی تغییرات، قطع دسترسی شبکه در محیط build/test، تحلیل ایستا برای آدرسهای مشکوک، اسکن اسرار، و بهکارگیری اعتبارنامههای کماختیار و کوتاهعمر توصیه میشود. پیام نهایی: پیامرسانها را بهعنوان کانالهای بالقوه خروج داده در نظر بگیرید و حتی وابستگیهای کوچک را با دقت بررسی کنید.
🟣لینک مقاله:
https://golangweekly.com/link/173335/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Socket
Malicious Go Module Disguised as SSH Brute Forcer Exfiltrate...
A malicious Go module posing as an SSH brute forcer exfiltrates stolen credentials to a Telegram bot controlled by a Russian-speaking threat actor.
❤2🔥2
🔵 عنوان مقاله
Building Ebitengine Games for Web Browsers
🟢 خلاصه مقاله:
این معرفی سهدقیقهای از تروِر اسلوکِم نشان میدهد چگونه بازیهای Ebitengine (موتور دوبعدی مبتنی بر Go) را برای مرورگر بسازیم. هسته کار این است: پروژه Go را با GOOS=js و GOARCH=wasm به WebAssembly کامپایل کنید، فایل wasm_exec.js را در صفحه HTML بگنجانید و بازی را روی یک canvas اجرا نمایید. در مرورگر باید به محدودیتهای فایلسیستم، بارگذاری ناهمزمان داراییها، نیاز شروع صدا با تعامل کاربر، همگامسازی رندر با requestAnimationFrame و تفاوتهای DPI و تغییر اندازه صفحه توجه کنید. برای داراییها از embed یا سرویسدهی مستقیم استفاده کرده و آنها را برای وب بهینه کنید؛ کنترلها را برای ماوس/کیبورد/تاچ طراحی و روی موبایل و مرورگرهای مختلف تست کنید. برای انتشار، یک میزبان استاتیک (مثل GitHub Pages/Netlify) کافی است، به شرط تنظیم MIME نوع application/wasm و HTTPS. نتیجه: مسیری سریع از ساخت دسکتاپ به وب با WebAssembly، یک HTML ساده و رعایت قیود مرورگر، مطابق راهنمای کوتاه و کاربردی نویسنده.
🟣لینک مقاله:
https://golangweekly.com/link/173337/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Building Ebitengine Games for Web Browsers
🟢 خلاصه مقاله:
این معرفی سهدقیقهای از تروِر اسلوکِم نشان میدهد چگونه بازیهای Ebitengine (موتور دوبعدی مبتنی بر Go) را برای مرورگر بسازیم. هسته کار این است: پروژه Go را با GOOS=js و GOARCH=wasm به WebAssembly کامپایل کنید، فایل wasm_exec.js را در صفحه HTML بگنجانید و بازی را روی یک canvas اجرا نمایید. در مرورگر باید به محدودیتهای فایلسیستم، بارگذاری ناهمزمان داراییها، نیاز شروع صدا با تعامل کاربر، همگامسازی رندر با requestAnimationFrame و تفاوتهای DPI و تغییر اندازه صفحه توجه کنید. برای داراییها از embed یا سرویسدهی مستقیم استفاده کرده و آنها را برای وب بهینه کنید؛ کنترلها را برای ماوس/کیبورد/تاچ طراحی و روی موبایل و مرورگرهای مختلف تست کنید. برای انتشار، یک میزبان استاتیک (مثل GitHub Pages/Netlify) کافی است، به شرط تنظیم MIME نوع application/wasm و HTTPS. نتیجه: مسیری سریع از ساخت دسکتاپ به وب با WebAssembly، یک HTML ساده و رعایت قیود مرورگر، مطابق راهنمای کوتاه و کاربردی نویسنده.
🟣لینک مقاله:
https://golangweekly.com/link/173337/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
YouTube
Building Ebitengine Games for Web Browsers
This video explains how to build Ebitengine applications (and other Go applications) for web browsers.
https://trevors-tutorials.com/0009-building-ebitengine-games-for-web-browsers/
https://ebitengine.org
0:00 Intro and Table of Contents
0:28 WebAssembly…
https://trevors-tutorials.com/0009-building-ebitengine-games-for-web-browsers/
https://ebitengine.org
0:00 Intro and Table of Contents
0:28 WebAssembly…
❤1
Forwarded from DevOps Labdon
رد پیشنهادهای چند میلیون دلاری؛ خالق VLC میخواهد نرمافزارش رایگان بماند
https://www.zoomit.ir/software-application/447008-skipping-multi-million-dollar-offer-vlc/
https://www.zoomit.ir/software-application/447008-skipping-multi-million-dollar-offer-vlc/
زومیت
رد پیشنهادهای چند میلیون دلاری؛ خالق VLC میخواهد نرمافزارش رایگان بماند
توسعهدهندهی ویالسی میگوید از پیشنهادهای چند میلیون دلاری شرکتهای مطرح چشمپوشی کرده است تا این نرمافزار رایگان بماند.
❤14 8
🔵 عنوان مقاله
has now released Omarchy 2.0
🟢 خلاصه مقاله:
**اومارچی ۲.۰ منتشر شده است و یک ویدئوی ۳۰ دقیقهای همراه آن ارائه شده که روند کار و ویژگیها را مرور میکند. این عرضه در روزهای اخیر با استقبال و توجه قابلتوجهی از سوی توسعهدهندگان در شبکههای اجتماعی روبهرو شده و بحثهای پررونقی را برانگیخته است.
🟣لینک مقاله:
https://golangweekly.com/link/173359/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
has now released Omarchy 2.0
🟢 خلاصه مقاله:
**اومارچی ۲.۰ منتشر شده است و یک ویدئوی ۳۰ دقیقهای همراه آن ارائه شده که روند کار و ویژگیها را مرور میکند. این عرضه در روزهای اخیر با استقبال و توجه قابلتوجهی از سوی توسعهدهندگان در شبکههای اجتماعی روبهرو شده و بحثهای پررونقی را برانگیخته است.
🟣لینک مقاله:
https://golangweekly.com/link/173359/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Hey
Omarchy 2.0
Omarchy 2.0 was released on Linux's 34th birthday as a gift to perhaps the greatest open-source project the world has ever known. Not only does Linux run 95% of all servers on the web, billions of devices as an embedded OS, but it also turns out to be an…
Forwarded from Bardia & Erfan
🚀 به دنیای توسعه و تکنولوژی خوش اومدی!
اگر به موضوعات زیر علاقهمندی:
🔹 Golang
🔹 Linux & DevOps
🔹 Software Engineering
🔹 AI & Machine Learning
🔹 فرصتهای شغلی ریموت (خارجی و داخلی)
ما برات یه مجموعه کانالهای تخصصی ساختیم تا همیشه بهروز، حرفهای و الهامبخش بمونی!
📚 یادگیری، فرصت، شبکهسازی و پیشرفت، همش اینجاست...
📌 از این لینک همه چنلهامونو یهجا ببین و جوین شو:
👉 https://t.iss.one/addlist/QtXiQlynEJwzODBk
اگر به موضوعات زیر علاقهمندی:
🔹 Golang
🔹 Linux & DevOps
🔹 Software Engineering
🔹 AI & Machine Learning
🔹 فرصتهای شغلی ریموت (خارجی و داخلی)
ما برات یه مجموعه کانالهای تخصصی ساختیم تا همیشه بهروز، حرفهای و الهامبخش بمونی!
📚 یادگیری، فرصت، شبکهسازی و پیشرفت، همش اینجاست...
📌 از این لینک همه چنلهامونو یهجا ببین و جوین شو:
👉 https://t.iss.one/addlist/QtXiQlynEJwzODBk
❤2
🔵 عنوان مقاله
html-to-markdown 2.4: Convert HTML to Markdown
🟢 خلاصه مقاله:
این ابزار با نام html-to-markdown 2.4 محتوای HTML را با پارسکردن واقعی ساختار آن به Markdown تبدیل میکند، نه با الگوهای regex؛ بنابراین در برابر موارد پیچیده و مرزی پایدارتر است. هم بهصورت ابزار خط فرمان و هم بهعنوان کتابخانه Go قابل استفاده است و برای سناریوهایی مثل مهاجرت محتوا و تولید وبسایتهای استاتیک مناسب است.
🟣لینک مقاله:
https://golangweekly.com/link/173347/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
html-to-markdown 2.4: Convert HTML to Markdown
🟢 خلاصه مقاله:
این ابزار با نام html-to-markdown 2.4 محتوای HTML را با پارسکردن واقعی ساختار آن به Markdown تبدیل میکند، نه با الگوهای regex؛ بنابراین در برابر موارد پیچیده و مرزی پایدارتر است. هم بهصورت ابزار خط فرمان و هم بهعنوان کتابخانه Go قابل استفاده است و برای سناریوهایی مثل مهاجرت محتوا و تولید وبسایتهای استاتیک مناسب است.
🟣لینک مقاله:
https://golangweekly.com/link/173347/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Html-To-Markdown
Convert entire websites to markdown | html-to-markdown
Accurate online converter. Convert any HTML input to Markdown output. Supports entire websites & emails. No invalid Markdown — it just works.
🤝2❤1
🔵 عنوان مقاله
his experiences at last week's GopherCon UK 2025.
🟢 خلاصه مقاله:
** این یادداشت در Golang Weekly گزارشی تأملمحور از تجربه نویسنده در GopherCon UK 2025 (هفته گذشته) است؛ بر بلوغ اکوسیستم Go، سادگی و قابلیت اتکا تأکید دارد و موضوعاتی مانند الگوهای همزمانیِ قابلفهم، بهینهسازی مبتنی بر پروفایلینگ، تست مقیاسپذیر، تجربه توسعهدهنده، و امنیت زنجیره تأمین را برجسته میکند. ارزش «hallway track» و گفتگوهای غیررسمی برای انتقال تجربههای عملی و اتخاذ تغییرات کوچک اما اثرگذار نیز پررنگ است. نویسنده با قدردانی از برگزارکنندگان، توصیههایی عملی مثل اولویت دادن به وضوح کد، شروع بهینهسازی با اندازهگیری، و سرمایهگذاری روی ابزارهای بازخورد سریع ارائه میکند و خوانندگان را به پیگیری منابع رسمی کنفرانس و آزمودن ایدهها در پروژههای خود تشویق میکند.
🟣لینک مقاله:
https://golangweekly.com/link/173082/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
his experiences at last week's GopherCon UK 2025.
🟢 خلاصه مقاله:
** این یادداشت در Golang Weekly گزارشی تأملمحور از تجربه نویسنده در GopherCon UK 2025 (هفته گذشته) است؛ بر بلوغ اکوسیستم Go، سادگی و قابلیت اتکا تأکید دارد و موضوعاتی مانند الگوهای همزمانیِ قابلفهم، بهینهسازی مبتنی بر پروفایلینگ، تست مقیاسپذیر، تجربه توسعهدهنده، و امنیت زنجیره تأمین را برجسته میکند. ارزش «hallway track» و گفتگوهای غیررسمی برای انتقال تجربههای عملی و اتخاذ تغییرات کوچک اما اثرگذار نیز پررنگ است. نویسنده با قدردانی از برگزارکنندگان، توصیههایی عملی مثل اولویت دادن به وضوح کد، شروع بهینهسازی با اندازهگیری، و سرمایهگذاری روی ابزارهای بازخورد سریع ارائه میکند و خوانندگان را به پیگیری منابع رسمی کنفرانس و آزمودن ایدهها در پروژههای خود تشویق میکند.
🟣لینک مقاله:
https://golangweekly.com/link/173082/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Jamie Tanna | Software Engineer
GopherCon UK 2025 · Jamie Tanna | Software Engineer
A writeup of the GopherCon UK 2025 conference.
❤2
🔵 عنوان مقاله
Josh W Comeau has a new, fantastic guide to SVG paths.
🟢 خلاصه مقاله:
**راهنمای تازهای از جاش دابلیو. کومو درباره مسیرهای SVG منتشر شده که درک نحو و ساخت مسیرها را ساده میکند و نشان میدهد چگونه با تغییرات کوچک میتوان گرافیکهای دقیق و کمحجم ساخت. همچنین جدیدترین مطلب معرفیشده در خبرنامه Golang Weekly مروری منتخب و کوتاه از تازههای دنیای Go، ابزارها و نکات کاربردی ارائه میدهد تا پیگیری اخبار و منابع پراکنده آسانتر شود.
🟣لینک مقاله:
https://golangweekly.com/link/173110/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Josh W Comeau has a new, fantastic guide to SVG paths.
🟢 خلاصه مقاله:
**راهنمای تازهای از جاش دابلیو. کومو درباره مسیرهای SVG منتشر شده که درک نحو و ساخت مسیرها را ساده میکند و نشان میدهد چگونه با تغییرات کوچک میتوان گرافیکهای دقیق و کمحجم ساخت. همچنین جدیدترین مطلب معرفیشده در خبرنامه Golang Weekly مروری منتخب و کوتاه از تازههای دنیای Go، ابزارها و نکات کاربردی ارائه میدهد تا پیگیری اخبار و منابع پراکنده آسانتر شود.
🟣لینک مقاله:
https://golangweekly.com/link/173110/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Joshwcomeau
An Interactive Guide to SVG Paths • Josh W. Comeau
SVG gives us many different primitives to work with, but by far the most powerful is the <path> element. Unfortunately, it’s also the most inscrutable, with its compact Regex-style syntax. In this tutorial, we’ll demystify this infamous element and see some…
Forwarded from Software Engineer Labdon
ا"Architecture Decision Record (ADR) Template" یعنی یک قالب (Template) برای ثبت و مستندسازی تصمیمهای معماری نرمافزار.
به طور ساده:
وقتی در طراحی یک سیستم نرمافزاری تصمیمهای مهمی مثل انتخاب دیتابیس، معماری میکروسرویسها، الگوی کشینگ، یا حتی انتخاب یک کتابخانه مهم گرفته میشود، این تصمیمها باید مستند شوند تا بعداً تیم یا افراد جدید بدانند چرا آن انتخاب انجام شده و چه گزینههایی رد شدهاند.
یک ADR Template کمک میکند این مستندسازی همیشه با یک ساختار مشخص و یکسان انجام شود.
---
### ساختار رایج یک ADR Template
معمولاً شامل بخشهای زیر است:
1. Title (عنوان تصمیم)
یک عنوان کوتاه و گویا.
2. Status (وضعیت)
مثلاً: Proposed, Accepted, Rejected, Superseded
3. Context (زمینه / دلیل نیاز به تصمیم)
توضیح اینکه چه مشکلی وجود داشته یا چه نیازی باعث شد که تصمیم گرفته شود.
4. Decision (تصمیم نهایی)
تصمیمی که گرفته شد (مثلاً "ما از PostgreSQL به جای MySQL استفاده میکنیم").
5. Consequences (پیامدها)
مزایا و معایب این تصمیم، و اثراتی که بر سیستم دارد.
---
### مثال ساده
➖➖➖➖➖➖➖➖
👑 @software_Labdon
به طور ساده:
وقتی در طراحی یک سیستم نرمافزاری تصمیمهای مهمی مثل انتخاب دیتابیس، معماری میکروسرویسها، الگوی کشینگ، یا حتی انتخاب یک کتابخانه مهم گرفته میشود، این تصمیمها باید مستند شوند تا بعداً تیم یا افراد جدید بدانند چرا آن انتخاب انجام شده و چه گزینههایی رد شدهاند.
یک ADR Template کمک میکند این مستندسازی همیشه با یک ساختار مشخص و یکسان انجام شود.
---
### ساختار رایج یک ADR Template
معمولاً شامل بخشهای زیر است:
1. Title (عنوان تصمیم)
یک عنوان کوتاه و گویا.
2. Status (وضعیت)
مثلاً: Proposed, Accepted, Rejected, Superseded
3. Context (زمینه / دلیل نیاز به تصمیم)
توضیح اینکه چه مشکلی وجود داشته یا چه نیازی باعث شد که تصمیم گرفته شود.
4. Decision (تصمیم نهایی)
تصمیمی که گرفته شد (مثلاً "ما از PostgreSQL به جای MySQL استفاده میکنیم").
5. Consequences (پیامدها)
مزایا و معایب این تصمیم، و اثراتی که بر سیستم دارد.
---
### مثال ساده
# ADR 001: انتخاب دیتابیس اصلی
## Status
Accepted
## Context
ما نیاز به یک دیتابیس داریم که قابلیت ذخیره دادههای ساختیافته و مقیاسپذیری داشته باشد. تیم تجربه خوبی با SQL دارد.
## Decision
انتخاب PostgreSQL به عنوان دیتابیس اصلی.
## Consequences
+ ویژگیهای پیشرفته (JSONB، Full-text search)
+ جامعه کاربری بزرگ
- یادگیری برخی قابلیتهای خاص برای اعضای تیم جدید
➖➖➖➖➖➖➖➖
👑 @software_Labdon
Forwarded from Gopher Job
🟢 اگر کارفرما یا کارجو هستی
و دنبال نیرو یا موقعیت شغلی توی حوزههای زیر هستی، به من پیام بده 👇
⚔️ DevOps Engineer
⚔️ Site Reliability Engineer (SRE)
⚔️ Linux SysAdmin
⚔️ Cloud Engineer (AWS/GCP/Azure)
⚔️ Infrastructure Engineer
⚔️ Security Engineer (DevSecOps/Linux)
⚔️ Automation Engineer
⚔️ Platform Engineer
⚔️ Software Security
⚔️ Software QA
⚔️ Backend
⚔️ AI Engineer / Machine Learning
⚔️ Database Engineer / DBA
📩 همین الان پیام بده و استارت بزن! تا هم بتونی نیروی خوب پیدا کنی و یا یتونی یه موقعیت شغلی مناسب پیدا کنی
به من پیام بده آگهی یا رزومه ات رو قرار بدم اینجا
@mrbardia72
و دنبال نیرو یا موقعیت شغلی توی حوزههای زیر هستی، به من پیام بده 👇
⚔️ DevOps Engineer
⚔️ Site Reliability Engineer (SRE)
⚔️ Linux SysAdmin
⚔️ Cloud Engineer (AWS/GCP/Azure)
⚔️ Infrastructure Engineer
⚔️ Security Engineer (DevSecOps/Linux)
⚔️ Automation Engineer
⚔️ Platform Engineer
⚔️ Software Security
⚔️ Software QA
⚔️ Backend
⚔️ AI Engineer / Machine Learning
⚔️ Database Engineer / DBA
📩 همین الان پیام بده و استارت بزن! تا هم بتونی نیروی خوب پیدا کنی و یا یتونی یه موقعیت شغلی مناسب پیدا کنی
به من پیام بده آگهی یا رزومه ات رو قرار بدم اینجا
@mrbardia72
🔵 عنوان مقاله
you can read it in article form.
🟢 خلاصه مقاله:
این نوشته دو مطلب فنی را معرفی میکند: نخست، ترور اسلاکِم به رفتاری ظریف در الحاق عناصر به اسلایسهای Go میپردازد؛ جایی که بهدلیل اشتراک آرایهٔ پشتیبان، append میتواند بهصورت غیرمنتظره دادهٔ اسلایسهای دیگر را تغییر دهد یا بسته به ظرفیت، باعث تخصیص جدید شود. نتیجه این است که باید حواسمان به ظرفیت، اشتراک حافظه و جداسازی داده با copy یا تخصیص هدفمند باشد. دوم، الی بندرسکی پیادهسازی یک مفسر کوچک Forth را در Go و C مقایسه میکند تا تفاوتهای عملی میان ایمنی و سهولت (در Go) و کنترل و سربار کم (در C) را نشان دهد. پیام کلی: با درک دقیق جزییات زبان و مدل حافظه، میتوان از خطاهای پنهان پرهیز کرد و انتخابهای بهینهتری انجام داد.
🟣لینک مقاله:
https://golangweekly.com/link/173338/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
you can read it in article form.
🟢 خلاصه مقاله:
این نوشته دو مطلب فنی را معرفی میکند: نخست، ترور اسلاکِم به رفتاری ظریف در الحاق عناصر به اسلایسهای Go میپردازد؛ جایی که بهدلیل اشتراک آرایهٔ پشتیبان، append میتواند بهصورت غیرمنتظره دادهٔ اسلایسهای دیگر را تغییر دهد یا بسته به ظرفیت، باعث تخصیص جدید شود. نتیجه این است که باید حواسمان به ظرفیت، اشتراک حافظه و جداسازی داده با copy یا تخصیص هدفمند باشد. دوم، الی بندرسکی پیادهسازی یک مفسر کوچک Forth را در Go و C مقایسه میکند تا تفاوتهای عملی میان ایمنی و سهولت (در Go) و کنترل و سربار کم (در C) را نشان دهد. پیام کلی: با درک دقیق جزییات زبان و مدل حافظه، میتوان از خطاهای پنهان پرهیز کرد و انتخابهای بهینهتری انجام داد.
🟣لینک مقاله:
https://golangweekly.com/link/173338/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Trevor's Tutorials
9. Building Ebitengine Games for Web Browsers
A guide on how to build Ebitengine games to run in web browsers.
❤3
🔵 عنوان مقاله
What is the Go Proxy Even Doing?
🟢 خلاصه مقاله:
گو برای پایداری و تکرارپذیری ساختها از یک پروکسی ماژول استفاده میکند که با کشکردن و سرویسدهی نسخهها، وابستگی توسعهدهندگان به مخازن مبدا را کاهش میدهد. اما همین طراحی میتواند باعث کلونهای تکراری و فشار اضافه بر سرورهای بالادستی شود؛ یعنی یک نسخه چندبار کلون میشود یا درخواستهای پشتسرهم برای همان تگها و کامیتها ثبت میگردد. تد با لاگهای واقعی نشان میدهد این الگو چگونه رخ میدهد و سپس توضیح میدهد برای محافظت از سرورش چه کرده است؛ از جمله گذاشتن محدودیت نرخ و فیلتر کردن ترافیک تکراری تا جلوی بار غیرضروری گرفته شود. جمعبندی: پروکسی به مصرفکنندگان بستهها کمک میکند، اما میتواند هزینه را به بالادست منتقل کند؛ بنابراین نگهدارندگان باید از این الگوها آگاه باشند و دفاعهای سبکوزنی برای پایداری سرویس خود در نظر بگیرند.
🟣لینک مقاله:
https://golangweekly.com/link/173087/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
What is the Go Proxy Even Doing?
🟢 خلاصه مقاله:
گو برای پایداری و تکرارپذیری ساختها از یک پروکسی ماژول استفاده میکند که با کشکردن و سرویسدهی نسخهها، وابستگی توسعهدهندگان به مخازن مبدا را کاهش میدهد. اما همین طراحی میتواند باعث کلونهای تکراری و فشار اضافه بر سرورهای بالادستی شود؛ یعنی یک نسخه چندبار کلون میشود یا درخواستهای پشتسرهم برای همان تگها و کامیتها ثبت میگردد. تد با لاگهای واقعی نشان میدهد این الگو چگونه رخ میدهد و سپس توضیح میدهد برای محافظت از سرورش چه کرده است؛ از جمله گذاشتن محدودیت نرخ و فیلتر کردن ترافیک تکراری تا جلوی بار غیرضروری گرفته شود. جمعبندی: پروکسی به مصرفکنندگان بستهها کمک میکند، اما میتواند هزینه را به بالادست منتقل کند؛ بنابراین نگهدارندگان باید از این الگوها آگاه باشند و دفاعهای سبکوزنی برای پایداری سرویس خود در نظر بگیرند.
🟣لینک مقاله:
https://golangweekly.com/link/173087/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
❤2
تابع
توضیح دقیقتر:
- پکیج: این تابع در پکیج
- کاربرد:
- ساختار:
-
-
مثال:
چرا از
- وقتی چندین گوروتین به یک متغیر مشترک دسترسی دارند، استفاده از عملیات معمولی (غیراتمیک) ممکن است به مشکلات همزمانی (concurrency issues) مثل race condition منجر شود.
-
نکات:
- این تابع فقط برای متغیرهای از نوع
- عملیات اتمیک معمولاً سریعتر از استفاده از قفلها (مثل
➖➖➖➖➖➖➖➖
👑 @gopher_academy
atomic.LoadInt32
در زبان برنامهنویسی Go (گولنگ) برای خواندن ایمن (safe) یک مقدار 32 بیتی از نوع int32
از حافظه به صورت اتمیک (atomic) استفاده میشود. عملیات اتمیک به این معناست که این عملیات به صورت کامل و بدون وقفه انجام میشود و از تداخل (race condition) بین گوروتینها (goroutines) جلوگیری میکند.توضیح دقیقتر:
- پکیج: این تابع در پکیج
sync/atomic
قرار دارد.- کاربرد:
atomic.LoadInt32
برای خواندن مقدار یک متغیر int32
از حافظه به صورت اتمیک استفاده میشود. این تابع تضمین میکند که مقدار خواندهشده دقیق و بدون تأثیر از تغییرات همزمان توسط گوروتینهای دیگر است.- ساختار:
func LoadInt32(addr *int32) (val int32)
-
addr
: اشارهگر به متغیر int32
که میخواهید مقدارش را بخوانید.-
val
: مقداری که از حافظه خوانده میشود و به عنوان خروجی برگردانده میشود.مثال:
package main
import (
"fmt"
"sync/atomic"
)
func main() {
var counter int32 = 42
// خواندن مقدار counter به صورت اتمیک
value := atomic.LoadInt32(&counter)
fmt.Println("Value:", value) // خروجی: Value: 42
}
چرا از
atomic.LoadInt32
استفاده کنیم؟- وقتی چندین گوروتین به یک متغیر مشترک دسترسی دارند، استفاده از عملیات معمولی (غیراتمیک) ممکن است به مشکلات همزمانی (concurrency issues) مثل race condition منجر شود.
-
atomic.LoadInt32
تضمین میکند که مقدار خواندهشده همیشه معتبر و بهروز است، بدون اینکه نیازی به قفل (lock) باشد.نکات:
- این تابع فقط برای متغیرهای از نوع
int32
کار میکند. برای انواع دیگر (مثل int64
یا uint32
) توابع مشابهی مثل atomic.LoadInt64
یا atomic.LoadUint32
وجود دارد.- عملیات اتمیک معمولاً سریعتر از استفاده از قفلها (مثل
sync.Mutex
) هستند، اما فقط برای عملیاتهای ساده مثل خواندن یا نوشتن مناسباند.➖➖➖➖➖➖➖➖
👑 @gopher_academy
کجا نباید از داداشمون RabbitMQ استفاده کنیم؟
1- وقتی نیاز به real-time response داریم.
چرا؟ چون RabbitMQ صف هست و ارسال/دریافت پیام ممکنه با تاخیر انجام شود.
پیشنهادم WebSocket، gRPC یا Redis Pub/Sub است.
2- وقتی به message replay یا history نیاز داریم
چرا؟ چون RabbitMQ پیامها رو بعد از مصرف حذف میکند. البته میشه کانفیگ کرد که نگه داره.
3- زمانی که پیامها حجمشون خیلی زیاد است.
چرا؟ چون در حجم بالا RabbitMQ دچار افت performance میشود. Kafka رو پیشنهاد میکنم برای اینجا.
4- وقتی ترتیب دقیق پردازش پیامها خیلی مهم است. چرا؟ چون RabbitMQ تضمین دقیقی برای ترتیب پیامها ندارد. اینجا هم پیشنهادم Kafka است.
<Amirhossein Dehghan/>
1- وقتی نیاز به real-time response داریم.
چرا؟ چون RabbitMQ صف هست و ارسال/دریافت پیام ممکنه با تاخیر انجام شود.
پیشنهادم WebSocket، gRPC یا Redis Pub/Sub است.
2- وقتی به message replay یا history نیاز داریم
چرا؟ چون RabbitMQ پیامها رو بعد از مصرف حذف میکند. البته میشه کانفیگ کرد که نگه داره.
3- زمانی که پیامها حجمشون خیلی زیاد است.
چرا؟ چون در حجم بالا RabbitMQ دچار افت performance میشود. Kafka رو پیشنهاد میکنم برای اینجا.
4- وقتی ترتیب دقیق پردازش پیامها خیلی مهم است. چرا؟ چون RabbitMQ تضمین دقیقی برای ترتیب پیامها ندارد. اینجا هم پیشنهادم Kafka است.
<Amirhossein Dehghan/>
👍4 3❤2🐳1
🔵 عنوان مقاله
GitHub MCP Server 0.13
🟢 خلاصه مقاله:
گیتهاب با انتشار GitHub MCP Server نسخهٔ 0.13 یک پیادهسازی رسمی و قابل اتکا از سرور MCP ارائه کرده است. این سرور با زبان Go نوشته شده تا کارایی، سادگی استقرار و قابلحمل بودن را فراهم کند. رسمی بودن آن، نقش مرجع را برای رفتار و سازگاری ایفا میکند و نسخهگذاری 0.13 نشاندهندهٔ توسعهٔ تدریجی و تمرکز بر بلوغ و پایداری است؛ بنابراین گزینهای مناسب برای تیمهایی است که به یک راهکار مطمئن و نگهداشتپذیر نیاز دارند.
🟣لینک مقاله:
https://golangweekly.com/link/173355/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GitHub MCP Server 0.13
🟢 خلاصه مقاله:
گیتهاب با انتشار GitHub MCP Server نسخهٔ 0.13 یک پیادهسازی رسمی و قابل اتکا از سرور MCP ارائه کرده است. این سرور با زبان Go نوشته شده تا کارایی، سادگی استقرار و قابلحمل بودن را فراهم کند. رسمی بودن آن، نقش مرجع را برای رفتار و سازگاری ایفا میکند و نسخهگذاری 0.13 نشاندهندهٔ توسعهٔ تدریجی و تمرکز بر بلوغ و پایداری است؛ بنابراین گزینهای مناسب برای تیمهایی است که به یک راهکار مطمئن و نگهداشتپذیر نیاز دارند.
🟣لینک مقاله:
https://golangweekly.com/link/173355/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GitHub
GitHub - github/github-mcp-server: GitHub's official MCP Server
GitHub's official MCP Server. Contribute to github/github-mcp-server development by creating an account on GitHub.
❤3
🔵 عنوان مقاله
Understanding Go Error Types: Pointer vs. Value
🟢 خلاصه مقاله:
تفاوت میان تعریف خطا با گیرنده مقداری و اشارهگری در Go میتواند به خطاهای پنهان منجر شود. اگر متد Error را با گیرنده مقداری تعریف کنید، هر دو T و *T اینترفیس error را پیادهسازی میکنند؛ اما با گیرنده اشارهگری فقط *T این کار را میکند. پیامدها: امکان ایجاد اینترفیس error غیرnil که حاوی اشارهگر nil است و بررسی err != nil را گمراه میکند، و شکست بیسروصدای errors.Is/As در صورت عدم تطابق نوع مقداری/اشارهگری. راهکارها: برای انواع کوچک و تغییرناپذیر از گیرنده مقداری استفاده کنید و فقط در صورت نیاز واقعی از گیرنده اشارهگری بهره ببرید؛ سازگاری در ساخت و بازگرداندن خطاها را رعایت کنید؛ با assertion کامپایلی اطمینان بگیرید نوع شما error را پیادهسازی میکند و تست رفتار nil را اضافه کنید.
🟣لینک مقاله:
https://golangweekly.com/link/173124/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Understanding Go Error Types: Pointer vs. Value
🟢 خلاصه مقاله:
تفاوت میان تعریف خطا با گیرنده مقداری و اشارهگری در Go میتواند به خطاهای پنهان منجر شود. اگر متد Error را با گیرنده مقداری تعریف کنید، هر دو T و *T اینترفیس error را پیادهسازی میکنند؛ اما با گیرنده اشارهگری فقط *T این کار را میکند. پیامدها: امکان ایجاد اینترفیس error غیرnil که حاوی اشارهگر nil است و بررسی err != nil را گمراه میکند، و شکست بیسروصدای errors.Is/As در صورت عدم تطابق نوع مقداری/اشارهگری. راهکارها: برای انواع کوچک و تغییرناپذیر از گیرنده مقداری استفاده کنید و فقط در صورت نیاز واقعی از گیرنده اشارهگری بهره ببرید؛ سازگاری در ساخت و بازگرداندن خطاها را رعایت کنید؛ با assertion کامپایلی اطمینان بگیرید نوع شما error را پیادهسازی میکند و تست رفتار nil را اضافه کنید.
🟣لینک مقاله:
https://golangweekly.com/link/173124/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
🔥2
Forwarded from Software Engineer Labdon
جدا از مهندسی پشت تلگرام که بهینه نوشته شده، تلگرام چیزی داره به اسم Update Queue. چیزی که ۱ سال از دوران جوونیم رو صرف مهندسی معکوسش کردم.
تلگرام برای پوش کردن تغییرات مثل پیام جدید، ادیت، ری اکشن، تایپینگ و… به کلاینتها از سرویس Updates تو پروتکل MTProto استفاده میکنه، ایده ی کلی و کلیدی خیلی ساده اس و اینه که کلاینت ها یه state محلی نگه میدارن و آپدیتارو دقیقا با ترتیب درست اعمال میکنن؛ اگه شکافی بینشون افتاد، Difference میگیرن و دوباره پرش میکنن.
چرا اینکارو کرده و کلا چالشا چیه؟
• ترتیبش مهمه چون ممکنه یه اپدیت وابسته به چیزی باشه که توی خود همون پچ میاد
• تحویل دقیق باید انجام بشه و هیچی گم نشه
• مقیاسش هم میلیونها کاربر همزمان باید بگیرنش، مثل کانال های بزرگ
از اونجایی که هر پیامرسان منبع عظیمی از اتفاقاتیه که هر لحظه میوفته ما میتونیم اسم این اتفاقات رو event بزاریم. تلگرام هم یه پیامرسان مولتی کلاینته، یعنی هر کاربر میتونه چندین دیوایس برای یه حساب داشته باشه، پس وقتی یه ایونت اتفاق میوفته که باید یه کاربر از اون خبردار بشه باید اون ایونت رو به دیوایس های دیگه ی کاربر هم بفرسته، حدودا با مرتبه زمانی On^2.
مکانیزم اینجوریه که وقتی دیوایسی انلاین باشه و سوکت همون سوکتی باشه که keep alive هست یا اخرین rpc رو کال کرده سرور ایونت رو توی queue برای اون دیوایس نگه نمیداره و مستقیم میفرسته به کلاینت، حالا از اونجایی که کلاینت های دیگه ممکنه افلاین باشن یا حتی توی بکگراند پروسسشون کیل شده باشه عقب میمونن. حالا وقتی اون دیوایسی که عقب مونده بود با باز شدن سوکتش درخواست گرفتن اپدیت هارو وقتی که افلاین بوده رو از سرور میکنه و اطلاعات لوکالش رو میفرسته به سرور، من برای ساده شدنش اینجوری میگم که دیوایس میاد به سرور میگه من تا این زمان t رو داشتم و بعد این رو بهم بده، سرور هم میاد حساب کتابش رو میکنه و جواب رو توی یه پچ میفرسته! حالا چی توی این پچ هست و چی رو میفرسته رو میتونم یه رشته توییت دیگه در موردش بزنم.
حالا اگه اعدادی که توی پچ میاد با اعداد توی کلاینت نخونه عملا میگیم گپ اتفاق افتاده، برای همین هم کلاینت باید رکویست getDiff رو بزنه.
رکویست updates.getDifference به کلاینت اجازه میده بگه:
من الان pts = X و seq = Y هستم و هر چی بین این و حالت جدید هست بهم بده.
• سرور ممکنه جواب بده:
difference: همه ی آپدیت های گمشده
differenceSlice: بخشی از آپدیت ها یعنی هنوز باید به فچ کردن ادامه بدی
differenceEmpty: چیزی تغییر نکرده
جالبترش اینه که توی نسخه های جدیدترش برای کانال ها مکانیسم جدا getChannelDifference هست، چون هر کانال pts مستقل داره و این باعث میشه شما فقط کانال هایی رو بگیری که تغییر کردن! برای سوپر گروه هم مکانیزم همینه.
این باعث میشه حتی اگر چند ساعت آفلاین باشی، بعد از اتصال دوباره دقیقاً همهچی رو بگیری و هیچ پیامی رو از دست ندی
حتی با packet loss یا reconnect، state کلاینت خراب نمیشه و سرور مجبور نیست برای هر کلاینت همه چی رو دوباره بفرسته. فقط gap ها sync میشن
<Abolfazl/>
تلگرام برای پوش کردن تغییرات مثل پیام جدید، ادیت، ری اکشن، تایپینگ و… به کلاینتها از سرویس Updates تو پروتکل MTProto استفاده میکنه، ایده ی کلی و کلیدی خیلی ساده اس و اینه که کلاینت ها یه state محلی نگه میدارن و آپدیتارو دقیقا با ترتیب درست اعمال میکنن؛ اگه شکافی بینشون افتاد، Difference میگیرن و دوباره پرش میکنن.
چرا اینکارو کرده و کلا چالشا چیه؟
• ترتیبش مهمه چون ممکنه یه اپدیت وابسته به چیزی باشه که توی خود همون پچ میاد
• تحویل دقیق باید انجام بشه و هیچی گم نشه
• مقیاسش هم میلیونها کاربر همزمان باید بگیرنش، مثل کانال های بزرگ
از اونجایی که هر پیامرسان منبع عظیمی از اتفاقاتیه که هر لحظه میوفته ما میتونیم اسم این اتفاقات رو event بزاریم. تلگرام هم یه پیامرسان مولتی کلاینته، یعنی هر کاربر میتونه چندین دیوایس برای یه حساب داشته باشه، پس وقتی یه ایونت اتفاق میوفته که باید یه کاربر از اون خبردار بشه باید اون ایونت رو به دیوایس های دیگه ی کاربر هم بفرسته، حدودا با مرتبه زمانی On^2.
مکانیزم اینجوریه که وقتی دیوایسی انلاین باشه و سوکت همون سوکتی باشه که keep alive هست یا اخرین rpc رو کال کرده سرور ایونت رو توی queue برای اون دیوایس نگه نمیداره و مستقیم میفرسته به کلاینت، حالا از اونجایی که کلاینت های دیگه ممکنه افلاین باشن یا حتی توی بکگراند پروسسشون کیل شده باشه عقب میمونن. حالا وقتی اون دیوایسی که عقب مونده بود با باز شدن سوکتش درخواست گرفتن اپدیت هارو وقتی که افلاین بوده رو از سرور میکنه و اطلاعات لوکالش رو میفرسته به سرور، من برای ساده شدنش اینجوری میگم که دیوایس میاد به سرور میگه من تا این زمان t رو داشتم و بعد این رو بهم بده، سرور هم میاد حساب کتابش رو میکنه و جواب رو توی یه پچ میفرسته! حالا چی توی این پچ هست و چی رو میفرسته رو میتونم یه رشته توییت دیگه در موردش بزنم.
حالا اگه اعدادی که توی پچ میاد با اعداد توی کلاینت نخونه عملا میگیم گپ اتفاق افتاده، برای همین هم کلاینت باید رکویست getDiff رو بزنه.
رکویست updates.getDifference به کلاینت اجازه میده بگه:
من الان pts = X و seq = Y هستم و هر چی بین این و حالت جدید هست بهم بده.
• سرور ممکنه جواب بده:
difference: همه ی آپدیت های گمشده
differenceSlice: بخشی از آپدیت ها یعنی هنوز باید به فچ کردن ادامه بدی
differenceEmpty: چیزی تغییر نکرده
جالبترش اینه که توی نسخه های جدیدترش برای کانال ها مکانیسم جدا getChannelDifference هست، چون هر کانال pts مستقل داره و این باعث میشه شما فقط کانال هایی رو بگیری که تغییر کردن! برای سوپر گروه هم مکانیزم همینه.
این باعث میشه حتی اگر چند ساعت آفلاین باشی، بعد از اتصال دوباره دقیقاً همهچی رو بگیری و هیچ پیامی رو از دست ندی
حتی با packet loss یا reconnect، state کلاینت خراب نمیشه و سرور مجبور نیست برای هر کلاینت همه چی رو دوباره بفرسته. فقط gap ها sync میشن
<Abolfazl/>
❤6🔥2👍1💯1 1