علی ثابت

مهندس نرم‌افزار، توسعه‌دهنده‌ی دات‌نت، دوست‌دارِ AI

راه‌اندازی پیام‌رسان Mattermost

ماجرا چیه؟ می‌خواهیم Mattermost را طوری آماده کنیم که اگر سرور داخل ایران به اینترنت بین‌المللی وصل نبود، باز هم بتوانیم آن را راه بیندازیم. ایده ساده است: روی لپتاپ، داخل WSL، یک باندل کامل می‌سازیم. داخل باندل، پکیج‌های deb لازم، ایمیج‌های Docker، فایل compose و اسکریپت نصب را می‌گذاریم. باندل را با scp می‌بریم روی سرور ایران. روی سرور ایران، بدون نیاز به Docker Hub و بدون نیاز به repoهای اینترنتی، Mattermost را اجرا می‌کنیم. در این آموزش فرض می‌کنیم لپتاپ به اینترنت بین‌المللی دسترسی دارد، ولی سرور ایران ممکن است نداشته باشد. ...

2026-02-13 · 7 دقیقه

سینک کردن Obsidian با Github

هدف این پست اینه که نوت‌هات (مثلا Obsidian) هر ۱۵ دقیقه بررسی بشن و اگر تغییری داشتند، خودکار commit و push بشن توی یک ریپازیتوری Private در GitHub. این کار عملا دو تا نتیجه‌ی مهم داره: بکاپ امن و نسخه‌بندی‌شده داری (هر تغییر تاریخچه داره) لازم نیست هر بار دستی push کنی قبل از شروع، خیلی کوتاه فرض‌های این آموزش: سیستم عامل: Windows 10 یا Windows 11 نوت‌ها داخل یک فولدر مشخص هستند (مثلا D:\Obsidian) اکانت GitHub داری Git روی ویندوز نصب میشه و از خط فرمان قابل استفاده‌ست ساخت ریپازیتوری در GitHub وارد GitHub شو روی New repository بزن یک اسم برای repo بده (مثلا obsidian-notes یا هر چی دوست داری) گزینه‌ی Private رو انتخاب کن Create repository رو بزن (GitHub Docs) نکته مهم: ...

2026-02-13 · 9 دقیقه

حل سوال 1 لیت‌کد

برای دسترسی به سوال 1 لیت‌کد میتونید از این لینک استفاده کنید. سطح این سوال Easy است. شرایط مسئله در این مرحله، شرایط خاص مسئله و حالت‌های edge case رو بررسی می‌کنیم. این شرایط باید در توضیحات سوال یا مثال‌ها مشخص شده باشن یا اینکه از پاسخ‌های پیش فرض استفاده کنیم. آیا همه اعداد مثبت هستن یا میتونن صفر و منفی هم باشن؟ همه اعداد مثبت هستن. آیا اعداد تکراری هم داریم یا همه یونیک هستن؟ همه اعداد یونیک هستن. آیا همواره جوابی با شرایط خواسته شده داریم یا ممکنه مسئله بی جواب باشه؟ ممکنه مسئله جواب نداشته باشه. این موضوع از چند جهت مهمه، مثلا ممکنه دو عدد با شرط خواسته شده در آرایه پیدا نشه، یا ممکنه آرایه اصلا عضوی نداشته باشه، یا ممکنه آرایه تک عضوی باشه. ما حتما دو عضو میخوایم که مجموعشون برابر target بشه. اگه مسئله جواب نداشت چی برگردونیم؟ null، عدد -1، آرایه خالی یا …؟ اگه جواب وجود نداشت null برگردون. آیا ممکنه چند جفت عدد وجود داشته باشن که مجموعشون برابر تارگت بشه؟ خیر، حداکثر یک جفت عدد با شرط گفته شده خواهیم داشت. نوشتن test case در این مرحله، چند مثال می‌نویسیم که هم شرایط خواسته شده و هم edge case هایی که بالاتر اشاره کردیم رو pass کنه. ...

2025-04-30 · 6 دقیقه

حل سوال 746 لیت‌کد

برای دسترسی به سوال 746 لیت‌کد میتونید از این لینک استفاده کنید. سطح این سوال Easy است. فهم مسئله آرایه‌ای از اعداد نامنفی بهمون داده می‌شه. پلکانی رو در نظر بگیرید که هزینه‌ی رفتن به هر پله، در این آرایه اومده. در ابتدا، در کف هستیم (start) و روی پله‌ها نرفته‌ایم. در هر بار حرکت اجازه داریم یک یا دو پله جلو بریم. هزینه‌ی رفتن به پله i ام، برابر cost[i] است، یعنی مثلا عنصر یکم آرایه، هزینه‌ی رفتن به پله یکم رو نشون می‌ده. بعد از همه‌ی این پله‌ها، پله‌ای هست که قراره اونجا توقف کنیم (end). به دنبال راهی هستیم که هزینه رفتن از start به end، کمترین مقدار ممکن بشه. مثلا برای آرایه [10,15,20] توضیح به این شکل است. روی کف زمین هستیم. چهار پله داریم. هزینه قرارگیری روی پله اول 10، هزینه قرارگیری روی پله دوم 15، هزینه قرارگیری روی پله سوم 20 و هزینه قرارگیری روی پله آخر که مقصد نهایی است، 0 است. ...

2025-03-06 · 9 دقیقه

کار با RabbitMQ

مفاهیم پایه به نرم افزارهایی مثل RabbitMQ میگن message broker یا queue manager. اینکه RabbitMQ یه پیام‌رسانه یعنی چی؟ یعنی پیام‌هایی که از ارسال‌کننده‌ها می‌گیره رو دریافت می‌کنه و تا زمانی که به دریافت‌کننده‌ها تحویل داده بشن، نگهشون میداره. البته نحوه ارسال، نگهداری و دریافت، همگی جزئیاتی دارن که باعث شده یک نرم افزار مجزا برای این مسئله ساخته بشه! پیام چیه؟ پیام میتونه یه متن ساده، دستورِ شروع یه پردازش یا هر چیز دیگه ای باشه. ...

2025-02-12 · 8 دقیقه

حل سوال 125 لیت‌کد

برای دسترسی به سوال 125 لیت‌کد میتونید از این لینک استفاده کنید. سطح این سوال Easy است. پالیندروم پالیندروم (Palindrome) از مفاهیم پرکاربرد و از sub-problem های پرتکرار در سوالات الگوریتمی است. به واژه، جمله، عدد، شعر یا هر چیز دیگری گفته می‌شود که خواندن آن از چپ به راست یا از راست به چپ کاملاً یکسان باشد، مثلا عدد “42324” و کلمه‌ی “نادان”. عبارتی مثل “race car” هم با حذف فاصله، پالیندروم خواهد بود. معمولا فرض بر این است که فاصله‌ها، ویرگول‌ها و هر کاراکتری غیر از الفبا و اعداد را نادیده می‌گیریم. همچنین کوچک یا بزرگ بودن حروف مهم نیست. ...

2025-01-22 · 3 دقیقه

سوالات مصاحبه asp dotnet core

Common Intermediate Language (CIL) چیه؟ یه زبان میانی که همه‌ی زبون‌های .NET مثل C# و F# به اون کامپایل می‌شن، قبل از اینکه تبدیل به کد ماشین بشن. Common Intermediate Language یا به اختصار CIL (یا گاهی IL) یه زبان برنامه‌نویسیه که کدهایی که با زبون‌های دات‌نت مثل #C یا VB می‌نویسی، اول به این زبان تبدیل می‌شن. وقتی یه برنامه‌ی دات‌نتی می‌سازی، مثلا یه اپ با C#، اول کدت به CIL تبدیل می‌شه. بعد وقتی برنامه رو اجرا می‌کنی، کامپایلر JIT (Just-In-Time) که مال CLR هست، این CIL رو در لحظه به کد ماشین (binary) تبدیل می‌کنه که توسط سیستم‌عامل قابل اجرا باشه. ...

2025-01-11 · 7 دقیقه

حل سوال 3 لیت‌کد

برای دسترسی به سوال 3 لیت‌کد میتونید از این لینک استفاده کنید. سطح این سوال Medium است. شرایط مسئله در این مرحله، شرایط خاص مسئله و حالت‌های edge case رو بررسی می‌کنیم. این شرایط باید در توضیحات سوال یا مثال‌ها مشخص شده باشن یا اینکه از پاسخ‌های پیش فرض استفاده کنیم. در این سوال ممکنه substringها متفاوت باشن و مثلا چند substring با طول n و شرایط خواسته شده داشته باشیم، اما مهم، برگرداندن طول substring با شرایط خواسته شده است، حتی اگه چند تا باشن. مثلا در abccabb دو سابسترینگ abc و cab بلندترین substringها با کاراکترهای غیر تکراری هستن، هر دو هم طول 3 دارن، پس 3 رو به عنوان جواب برمیگردونیم. آیا substringها باید contiguous باشن؟ بله. ما دنبال substring هستیم، نه subsequence. فرق substring و subsequence چیه؟ مثلا در رشته abcbbd اگه بخوایم یه substring مثال بزنیم میشه سه حرف اولش یعنی abc که contiguous هم هستن. اما اگه بخوایم یه subsequence مثال بزنیم، میشه abcd که شامل سه حرف اول، دو break و حرف آخر است. نکته مهم اینه که این سابیسکوئنس، contiguous نیست. آیا کوچک و بزرگ بودن حروف مهمه؟ خیر، فرض بر اینه که stringها فقط حروف کوچک دارن. نوشتن test case در این مرحله، چند مثال می‌نویسیم که هم شرایط خواسته شده و هم edge case هایی که بالاتر اشاره کردیم رو pass کنه. ...

2024-09-17 · 8 دقیقه

حل سوال 1249 لیت‌کد

برای دسترسی به سوال 1249 لیت‌کد میتونید از این لینک استفاده کنید. سطح این سوال Medium است. شرایط مسئله در این مرحله، شرایط خاص مسئله و حالت‌های edge case رو بررسی می‌کنیم. این شرایط باید در توضیحات سوال یا مثال‌ها مشخص شده باشن یا اینکه از پاسخ‌های پیش فرض استفاده کنیم. یک string در چه حالتی معتبره؟ یا خالی باشه یا پرانتزها در اون به شکل درستی باز و بسته شده باشن. ...

2024-08-28 · 6 دقیقه

حل سوال 104 لیت‌کد

برای دسترسی به سوال 104 لیت‌کد میتونید از این لینک استفاده کنید. سطح این سوال Easy است. شرایط مسئله در این مرحله، شرایط خاص مسئله و حالت‌های edge case رو بررسی می‌کنیم. این شرایط باید در توضیحات سوال یا مثال‌ها مشخص شده باشن یا اینکه از پاسخ‌های پیش فرض استفاده کنیم. اگر درخت empty باشد، 0 را به عنوان جواب مسئله برمی‌گردانیم. اگر درخت فقط شامل ریشه (root) باشد، 1 را به عنوان جواب مسئله برمی‌گردانیم. اگر چند عدد به عنوان maximum depth وجود داشته باشند، یکی از اونها رو برمی‌گردانیم، چون در این سوال، خودِ مسیر مهم نیست. راه حل منطقی در این مرحله به دنبال working solution هستیم، یعنی راه حلی منطقی که بتونه مسئله رو حل کنه. به راه حل بهینه فکر نمی‌کنیم. درگیر زبان برنامه نویسی و محدودیت‌های اون هم نخواهیم بود. منظور از maximum depth طبق گفته‌ی سوال، تعداد nodeهایی است که در طولانی‌ترین مسیر از ریشه (root) تا دورترین برگ (leaf) وجود دارند. یک مورد مهم که باید دقت کنیم، اینه که در این سوال، به مقادیرِ درون nodeها کاری نداریم، فقط طول مسیر برامون مهمه. ...

2024-07-20 · 5 دقیقه