سلام، من روهام هستم 👋

مهندس نرم‌افزار ارشد با Go و Node.js. به معماری تمیز و APIهای کارآمد اهمیت می‌دهم و از چیزهایی که یاد می‌گیرم می‌نویسم.
شروع کار با Go: نصب، ماژول و ابزارها

شروع کار با Go: نصب، ماژول و ابزارها

این اولین پست از یک سری مقدماتی به اسم Go Fundamentals است. برنامه این است که اول مبانی زبان را مرور کنیم و بعد برویم سراغ یک سری دوم با تمرکز بر بک‌اند: سرویس‌های HTTP، دیتابیس و هم‌روندی در سیستم‌های واقعی. قبلاً در پستی درباره‌ی NATS JetStream از Go استفاده کرده بودم، ولی آن پست فرض می‌کرد که کد Go می‌خوانید. این سری از صفر شروع می‌شود. امروز Go را نصب می‌کنیم، یک ماژول می‌سازیم و چند دستوری را یاد می‌گیریم که هر روز تایپ خواهید کرد. همه‌چیز با Go 1.26.0 روی macOS (معماری arm64) اجرا شده است. ...

27 اکتبر 2026 · 4 دقیقه · Roham
Go هشت گواهی میانی eMudhra را مسدود کرد: CVE-2026-111943 و ضرورت build دوباره

Go هشت گواهی میانی eMudhra را مسدود کرد: CVE-2026-111943 و ضرورت build دوباره

در ۱۹ و ۲۰ اکتبر ۲۰۲۶ تیم Go نسخه‌های Go 1.27.3 و 1.26.10 را منتشر کرد. این نسخه‌ها فقط یک اصلاح امنیتی دارند: CVE-2026-111943 (مسئله‌ی ۸۲۳۴۵ در Go). از این پس crypto/x509 زنجیره‌هایی را که شامل مجموعه‌ی کوچکی از گواهی‌های میانی CA به نام eMudhra (emSign) باشند رد می‌کند، چون کلید خصوصی آن‌ها لو رفته است. اعلامیه نمی‌گوید کدام گواهی‌ها، برای همین خودم سراغش رفتم. اگر باینری Go تحویل می‌دهید، آپدیت کردن Go روی سیستم خودتان کافی نیست. هر باینری باید با toolchain اصلاح‌شده دوباره build شود. ...

26 اکتبر 2026 · 4 دقیقه · Roham
چند Worker روی یک Consumer و مانیتورینگ lag در JetStream

چند Worker روی یک Consumer و مانیتورینگ lag در JetStream

آخر مقاله‌ی قبل دو موضوع را وعده داده بودم: اجرای بیش از یک Worker و زیر نظر گرفتن میزان عقب‌ماندگی. تا وقتی پیام‌ها کندتر از توان یک Worker می‌رسند همه‌چیز خوب است، اما بعدش دو سؤال پیش می‌آید: چطور Worker اضافه کنیم بدون اینکه چیزی دوبار پردازش شود، و از کجا بفهمیم صف دارد انباشته می‌شود؟ همه‌ی مثال‌های زیر را با یک nats-server تعبیه‌شده (با JetStream و یک پوشه‌ی موقت برای ذخیره‌سازی) و nats.go نسخه‌ی v1.54.0 روی Go 1.26 اجرا کرده‌ام و خروجی‌ها از همان اجراها هستند. ...

25 اکتبر 2026 · 5 دقیقه · Roham
آسیب‌پذیری بحرانی GitLab با امتیاز CVSS 10

آسیب‌پذیری بحرانی GitLab با CVSS 10: اجرای کد از راه دور (CVE-2026-110264)

در ۲۱ اکتبر ۲۰۲۶ GitLab یک patch release بحرانی منتشر کرد که یکی از موارد آن CVE-2026-110264 است، با امتیاز CVSS 10.0 که بالاترین مقدار ممکن است. این ضعف در GitLab CE و EE وجود دارد و در شرایطی خاص به یک کاربر بدون احراز هویت اجازه می‌دهد روی سرور GitLab کد دلخواه اجرا کند. گزارش The Hacker News هم همین را پوشش داده است. اگر GitLab را خودتان نصب و نگهداری می‌کنید (self-managed)، اول آپدیت کنید و بعد این مقاله را بخوانید. ...

23 اکتبر 2026 · 3 دقیقه · Roham
آسیب‌پذیری بحرانی PHP: اجرای کد از راه دور

آسیب‌پذیری بحرانی PHP: اجرای کد از راه دور (CVE-2026-109618)

در ۲۱ اکتبر ۲۰۲۶ مرکز ملی امنیت سایبری بریتانیا (NCSC) هشداری با عنوان «Critical security issue affecting PHP» منتشر کرد. دو آسیب‌پذیری در خودِ PHP می‌تواند به مهاجم بدون احراز هویت اجازه‌ی اجرای کد از راه دور (RCE) روی وب‌سروری بدهد که PHP اجرا می‌کند. هر دو مورد در نسخه‌های جدید رفع شده‌اند. اگر روی سرورهایتان PHP دارید، اول نسخه را آپدیت کنید و بعد این مقاله را بخوانید. خلاصه CVE-2026-109618 CVE-2026-109619 عنوان RCE via OOM corruption RCE via stale global state امتیاز CVSS v4.0 ۹٫۲ (Critical) ۹٫۲ (Critical) بردار AV:N/AC:H/AT:P/PR:N/UI:N AV:N/AC:H/AT:P/PR:N/UI:N نوع ضعف use-after-free، مدیریت نادرست خطا use-after-free، وضعیت global باقی‌مانده هر دو آسیب‌پذیری از راه شبکه، بدون نیاز به لاگین و بدون تعامل کاربر قابل بهره‌برداری‌اند. ...

22 اکتبر 2026 · 3 دقیقه · Roham
Retry و Dead-Letter Queue در NATS JetStream با Go

Retry و Dead-Letter Queue در NATS JetStream با Go

در مقاله‌ی قبل یک Publisher و Worker ساده روی JetStream ساختیم. اما Workerِ آن مقاله فرض می‌کرد پردازش همیشه موفق است. در عمل پیام‌هایی هستند که هر بار fail می‌شوند. اگر کاری نکنیم، یا بی‌نهایت تکرار می‌شوند یا گم می‌شوند. در این مقاله سه چیز را اضافه می‌کنیم: محدود کردن تعداد تلاش‌ها با MaxDeliver فاصله‌ی بین تلاش‌ها با BackOff و NakWithDelay فرستادن پیام «سوخته» به یک صف dead-letter همه‌ی رفتارهای زیر را با یک سرور NATS تعبیه‌شده در Go (با JetStream) و کتابخانه‌ی nats.go آزمایش کرده‌ام و خروجی‌ها از همان آزمایش‌اند. ...

18 اکتبر 2026 · 4 دقیقه · Roham
یک Publisher و Worker ساده با NATS JetStream در Go

یک Publisher و Worker ساده با NATS JetStream در Go

وقتی می‌خواهم یک مفهوم را واقعاً بفهمم، کوچک‌ترین نمونه‌ی قابل‌اجرا از آن را می‌سازم. این‌بار نوبت NATS JetStream بود. نتیجه، پروژه‌ی go-nats-demo است: یک Publisher، یک Worker و خود NATS، همه با Docker Compose. چرا JetStream؟ NATS معمولی پیام‌ها را فقط به مشترک‌هایی می‌رساند که همان لحظه متصل‌اند. اگر Worker پایین باشد، پیام از دست می‌رود. JetStream لایه‌ی پایداری روی NATS است: پیام‌ها در یک Stream ذخیره می‌شوند و Consumerها می‌توانند بعداً و با ack دریافتشان کنند. ...

18 اکتبر 2026 · 3 دقیقه · Roham
اولین مقاله من

اولین مقاله من

خوش آمدید به وبلاگ من! این اولین مقاله‌ای است که در وبسایت شخصی خودم منتشر می‌کنم. چرا این سایت را ساختم؟ برای به اشتراک گذاشتن تجربیات و دانش خودم برای یادگیری بیشتر برای ارتباط با افراد علاقه‌مند به موضوعات مشابه ادامه دارد… به زودی مقالات بیشتری منتشر خواهم کرد. منتظر باشید!

29 دسامبر 2025 · ۱ دقیقه · Roham