<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های علی پوربازرگان</title><link>https://virgool.ir/feed/@apb</link><description>Just another developer!</description><language>fa</language><pubDate>2026-11-11 22:21:59</pubDate><image><url>https://files.virgool.ir/upload/users/20888/avatar/wTAd7C.png</url><title>علی پوربازرگان</title><link>https://virgool.ir/@apb</link></image><item><title>چگونه یک فاجعه، شرکت ما را نجات داد؟ داستان از دست رفتن ۲۰٪ از محتوای گاما</title><link>https://virgool.ir/@apb/چگونه-یک-فاجعه-شرکت-ما-را-نجات-داد-داستان-از-دست-رفتن-۲۰٪-از-محتوای-گاما-z8v27tlnhkum</link><description>در اکتبر ۲۰۱۹، در عرض یک شب، ۱۰٬۰۰۰ فایل مهم و منحصربه‌فرد را به خاطر یک اشتباه ساده از دست دادیم. این اتفاق می‌توانست پایان کسب‌وکار ما باشد، اما در کمال تعجب، همین حادثه در سال ۲۰۲۵ کسب‌وکار جدید ما را نجات داد!معرفی گاما و گاماترینگاما یک پلتفرم اشتراک محتوای آموزشی برای دانش‌آموزان K-12 است که از سال ۲۰۱۴ در ایران راه‌اندازی شد. این پلتفرم بیش از ۱۰ میلیون کاربر در سراسر دنیا دارد و سرویس‌هایی مانند نمونه سوالات، آموزش‌های چندرسانه‌ای، آزمون‌های آنلاین، سامانه مدارس، استریم زنده، انجمن پرسش و پاسخ، تدریس خصوصی و موارد دیگر را ارائه می‌دهد.گاماترین محصول جدید ما در بریتانیاست که تمرکز آن بر سیستم‌های آموزشی بین‌المللی مانند CIE (Cambridge International Education)، AQA، Edexcel و سایر مدارک معتبر جهانی است.آغاز فاجعهدر اوج رشد کسب‌وکارمان بودیم و به عنوان یک شرکت تولید و فروش محتوای آموزشی، بخش بزرگی از درآمد ما وابسته به محتواهای ذخیره‌شده روی پلتفرم بود. از آنجا که محتوای ما فقط توسط تیم داخلی تولید نمی‌شد، بلکه کاربران هم محتوای خود را آپلود می‌کردند، حفظ امنیت فایل‌ها از اولویت‌های اصلی ما بود.ما از MooseFS، یک سیستم فایل توزیع‌شده، برای ذخیره‌سازی استفاده می‌کردیم که پنج نود و سه نسخه کپی از هر فایل را نگهداری می‌کرد. در کنار آن، برای بکاپ‌گیری هم یک هارد دیسک جداگانه و ایزوله داشتیم.✅ همه‌چیز عالی کار می‌کرد!⛔ تا اینکه تصمیم گرفتیم سیستم ذخیره‌سازی را به GlusterFS تغییر دهیم …یکی از مهندسان تیم ما GlusterFS را پیشنهاد داد که به نظر پایدارتر و معروف‌تر از MooseFS بود. پس از بررسی، تیم تصمیم گرفت به Gluster مهاجرت کند. دو ماه بعد، انتقال انجام شد و تیم بسیار خوشحال بود.اما یک مشکل داشتیم:📌 هارد بکاپ ما به ۹۰٪ ظرفیت رسیده بود و باید تصمیمی می‌گرفتیم.📌 ما فرض کردیم که GlusterFS قابل‌اعتمادتر از MooseFS است و به همین دلیل، تصمیم احمقانه‌ای گرفتیم: بکاپ را حذف کردیم و فقط به Gluster اعتماد کردیم!روز فاجعه: وقتی همه‌چیز از بین رفتدو ماه بعد، یک روز صبح متوجه شدیم که برخی صفحات سایت با خطای عدم وجود فایل‌ها مواجه شده‌اند. در ابتدا فکر کردیم مشکل شبکه است، اما بررسی‌ها نشان داد که GlusterFS دچار خطاهای همگام‌سازی شده و برخی بخش‌های فایل‌ها گم شده‌اند!📉 هر لحظه تعداد خطاها بیشتر می‌شد.📉 نهایتاً تصمیم گرفتیم کلاستر Gluster را ری‌استارت کنیم.⏰ ساعت ۳:۳۰ صبح – پس از ری‌استارت، همه‌چیز دوباره درست شد! 😌🎉 نفس راحت کشیدیم…اما چند دقیقه بعد، یک پیام از تیم محتوا دریافت کردیم:🔴 &#34;فایل‌ها خالی هستند!&#34;⛔ چی؟ چطور ممکنه؟⛔ فایل‌ها در سرور حجم داشتند، اما وقتی باز می‌کردیم، هیچ محتوایی در آنها نبود!نتیجه؟🚨 ما ۱۰٬۰۰۰ فایل از ۵۰٬۰۰۰ فایل را برای همیشه از دست داده بودیم!و بدتر از همه:🔹 فقط فایل‌های شرکت خودمان نبودند، فایل‌های کاربران هم از بین رفته بود!🔹 هیچ راهی برای بازیابی آنها نداشتیم!چرا بکاپ‌ها بی‌استفاده بودند؟ما بکاپ هارددیسک را داشتیم، اما به دلیل اینکه پس از مهاجرت سیستم نام‌گذاری فایل‌ها و مسیر هارا همزمان بهبود داده بودیم اسم همه فایل ها که هش بودند هم تغییر کرده بود و نمی‌توانستیم فایل‌های بکاپ را با پست‌های اصلی مطابقت دهیم.🔍 هر راهی را امتحان کردیم، اما هیچ فایلی با نام اصلی بازیابی نشد.📧 در نهایت، مجبور شدیم به کاربران ایمیل بدهیم و از آنها بخواهیم فایل‌های خود را مجدداً آپلود کنند!چگونه این فاجعه، شرکت ما را نجات داد؟بعد از این بحران، ما سیستم ذخیره‌سازی و بکاپ خود را از صفر بازطراحی کردیم:تولد سیستم GFK - Gama File Keeper📌 هر فایل دارای یک شناسه یکتا (Checksum) شد، بنابراین حتی اگر نام آن تغییر کند، همچنان می‌توان آن را شناسایی و بازیابی کرد.📌 فایل‌ها دیگر به‌صورت سخت حذف نمی‌شوند. ابتدا Soft Delete شده و پس از ۳ ماه اگر بازیابی نشدند، حذف دائمی صورت می‌گیرد.تولد سیستم Gama Backapp:1️⃣ بکاپ گرم (Warm Backup) – هر ۲ ساعت، یک کپی در همان دیتاسنتر گرفته می‌شود.2️⃣ بکاپ سرد (Cold Backup) – هر ۶ ساعت، بکاپی در دیتاسنتری دیگر ذخیره می‌شود.3️⃣ بکاپ آفلاین (Offline Backup) – هفته‌ای یک بار، یک کپی روی هارددیسک ذخیره‌شده در دفتر ما نگهداری می‌شود.✅ بکاپ‌های پایگاه داده:📌 هر ۲۴ ساعت، یک نسخه کامل از پایگاه داده ذخیره می‌شود.📌 ۱۲ نسخه بکاپ از ۱۲ ماه اخیر آرشیو می‌شود.نتیجه نهایی؟پنج سال بعد، این سیستم جدید توانست محصول جدید ما را از یک فاجعه نجات دهد!اما این یک درس بسیار مهم بود:📌 هرگز به یک تکنولوژی به‌تنهایی اعتماد نکنید.📌 بکاپ‌ها باید مستقل، متنوع و در چندین مکان ذخیره شوند.📌 هیچ‌گاه فکر نکنید که &#34;این اتفاق برای ما نخواهد افتاد&#34;!این ماجرا نشان داد که گاهی اوقات، بدترین اتفاقات می‌توانند بهترین درس‌ها را به ما بدهند.شما تا به حال تجربه از دست دادن اطلاعات مهم را داشته‌اید؟ چگونه آن را مدیریت کردید؟ تجربیات خود را با ما به اشتراک بگذارید!</description><category>علی پوربازرگان</category><author>علی پوربازرگان</author><pubDate>Thu, 27 Feb 2025 20:53:00 +0330</pubDate></item><item><title>چرا به عنوان یک توسعه‌دهنده نگران ابزارهای بدون کد و هوش مصنوعی نیستم</title><link>https://virgool.ir/@apb/چرا-به-عنوان-یک-توسعه-دهنده-نگران-ابزارهای-بدون-کد-و-هوش-مصنوعی-نیستم-e2ynbbydxayr</link><description>نردبان - با رشد تکنولوژی رشد فردی هم الزامی استبا پیشرفت تکنولوژی، طبیعیه که ببینیم اوضاع چطور تغییر می‌کنه. آنچه که روزگاری پیچیده و مختص متخصصان بود، به تدریج برای طیف وسیع‌تری از افراد قابل دسترس می‌شود. نمونه‌ای بارز از این تغییرات، توسعه‌ی وبسایت‌ها است. سال‌ها پیش، ایجاد یک وبسایت یک کار بسیار فنی بود که نیاز به دانش عمیق برنامه‌نویسی و زیرساخت داشت. سپس پلتفرم‌هایی مانند وردپرس، دروپال و جوملا وارد شدند و این صنعت را متحول کردند. ناگهان، کسب‌وکارها و افراد می‌توانستند وبسایت‌های  داینامیک را با حداقل دانش فنی ایجاد کنند. مهارتی که زمانی یک توانایی پیشرفته محسوب می‌شد، به یک کار معمولی تر تبدیل شد.امروز ما شاهد یک تحول دیگر با ابزارهای بدون کد و هوش مصنوعی هستیم. ویژگی‌هایی مانند انجمن‌های آنلاین، ساختارهای داده‌ی پیشرفته، سازندگان فرم و صفحه، اتوماسیون گردش کار، تولید محتوای مبتنی بر هوش مصنوعی، سازندگان وبسایت کشیدنی و رها کردنی مانند Wix، و یکپارچه‌سازی‌های ساده از طریق ابزارهایی مانند n8n، Make، و Zapier که پیش‌تر نیاز به مهارت یک مهندس نرم‌افزار داشت، اکنون توسط یک وب مستر با آموزش مناسب قابل مدیریت هستند. این ابزارها جریان‌های کاری را ساده‌تر کرده‌اند و امکان مشارکت افراد بیشتری در ایجاد محتوای دیجیتال بدون نیاز به کدنویسی را فراهم می‌کنند.ولی یعنی این یعنی برنامه‌نویسا قراره حذف بشن؟ نه، اصلاً این‌طور نیست!نوآوری در اینجا کلیدی است. تاکنون می‌دانیم که نوآوری و تخیل چیزهایی نیستند که بتوان آن‌ها را خودکار کرد (حداقل هنوز اینطور است). به عنوان یک انسان، شما می‌توانید در ذهن خود پرواز کنید و هر چیزی را تصور کنید—مثلاً استفاده از یک دستگاه اسپرسوساز به عنوان یک سیستم ذخیره‌سازی توزیع‌شده! تصور کنید یک شبکه از دستگاه‌های هوشمند اسپرسوساز که هرکدام دارای حافظه‌ی امن محلی هستند و به یک شبکه‌ی غیرمتمرکز متصل شده‌اند، به عنوان یک زیرساخت ذخیره‌سازی داده‌ی نوآورانه و کم‌مصرف عمل کنند. هیچ‌کس روی چنین ایده‌ای سرمایه‌گذاری نمی‌کند، مگر اینکه ثابت کنید که واقعاً کار می‌کند و زندگی مردم را آسان‌تر می‌سازد!به همین ترتیب، تصور کنید یک کتابخانه‌ی جاوااسکریپت ایجاد کنید که ارتباط یکپارچه با زیردریایی‌ها را امکان‌پذیر کند. این کتابخانه می‌تواند یک API استاندارد برای ارسال و دریافت پیام‌های رمزگذاری‌شده از طریق پالس‌های سونار فراهم کند و به توسعه‌دهندگان اجازه دهد ابزارهای نظارت و اتوماسیون در زمان واقعی برای اکتشافات عمیق دریایی بسازند. در ابتدا ممکن است این موضوع غیرعادی به نظر برسد، اما بسیاری از ایده‌های نوآورانه از آزمایش‌های عجیب شروع می‌شوند و سپس جایگاه خود را پیدا می‌کنند.در حقیقت، این توسعه‌دهندگان هستند که این ابزارها را می‌سازند، آن‌ها را می‌فروشند و به کاربران آموزش می‌دهند که چگونه از آن‌ها به درستی استفاده کنند. هنگامی که این راهکارها فراگیر شدند، توسعه‌دهندگان به سراغ چالش بعدی می‌روند—نوآوری در فناوری‌های جدید یا ساخت خدمات پیشرفته‌تر بر روی این پلتفرم‌ها.واقعیت این است که صنعت فناوری در حال بلوغ است. ما در حال گذر از هیاهوی ابتدای قرن بیست و یکم هستیم که همه چیز در انحصار برنامه‌نویسان به نظر می‌رسید.اکنون بازار در حال تثبیت است و تقاضا برای راهکارهای نرم‌افزاری شکل واقعی خود را پیدا می‌کند. توسعه‌دهندگان باید مسیر خود را انتخاب کنند: یا در استفاده از ابزارها استاد شوند و به تکنسین‌های ماهری در پیاده‌سازی راهکارها تبدیل شوند، یا مهارت‌های خود را ارتقا دهند تا همچنان در صف اول توسعه‌ی نرم‌افزار باقی بمانند. اگر به عنوان یک توسعه‌دهنده روی اصول و مبانی تمرکز کرده باشید، جایگزینی شما بسیار دشوارتر خواهد بود. به عنوان مثال، یک توسعه‌دهنده‌ی کرنل لینوکس باید آخرین توسعه‌دهنده‌ای باشد که یک ماشین یا ابزار می‌تواند جایگزین او شود.نگران نباشید! این تنها روند طبیعی پیشرفت است. نکته‌ی کلیدی، آگاهی و درک تغییراتی است که در اطراف ما رخ می‌دهند و سازگاری با آن‌ها. اگه می‌خوای سطح خودتو بالا ببری، به جای اینکه فقط مصرف‌کننده باشی، سعی کن بفهمی پشت پرده چی می‌گذره. به جای اینکه فقط از آنچه دیگران ساخته‌اند استفاده کنید، سعی کنید بفهمید که این چیزها چگونه کار می‌کنند. مشکلات پروژه‌های متن‌باز را برطرف کنید، در راهکارهای موجود مشارکت کنید و حتی راهکارهای جدیدی بسازید. نیازی نیست که این راهکارها منحصر‌به‌فرد باشند—بسیاری از کتابخانه‌ها با عنوان &#34;yet another ...&#34; شروع می‌شوند، زیرا بهبود راهکارهای موجود به همان اندازه‌ی ابداع چیزهای جدید ارزشمند است. حتی اگه فقط طرز فکرتو عوض کنی، با این تغییرات همراه بمونی، همیشه یه جای خوب تو دنیای فناوری خواهی داشت.</description><category>علی پوربازرگان</category><author>علی پوربازرگان</author><pubDate>Fri, 07 Feb 2025 19:42:27 +0330</pubDate></item><item><title>آماده کردن timezone سرورهای لینوکسی برای تغییرات قانون ساعت کشور ۱۴۰۰</title><link>https://virgool.ir/@apb/آماده-کردن-timezone-سرورهای-لینوکسی-برای-تغییرات-قانون-ساعت-کشور-۱۴۰۰-s4x1wffpwoc5</link><description>physicalgeography.netاگه مدیر سیستم هستین و قبلا با موضوع timezone درگیر نشدین این مطلب احتمالا مناسب شماست.لطفا موارد رو با مسئولیت خودتون انجام بدین البته که چیز خطرناکی هم نیست ولی بهتره قبل از اعمال روی سرور پروداکشن یکبار تست کنید همه چیز رو.همچنین اگر مشکلی دیدین بگین تا اصلاح کنم یا اگه راه ساده تری سراغ داشتین کامنت کنین شاید بقیه استفاده کنند.امسال چون قانون ساعت تغییر کرده باید مراقب سرورها باشیم چون طبق آخرین آپدیت در زمان نوشتن این پست هنوز سیستم ها از این موضوع با خبر نشده اند.از اونجایی که این مطلب برای عموم کاربران نیست توضیح اضافی هم نمیدم.احتمالا در این زمان باقی مونده آپدیتی برای tzdata که مسئول کنترل این تغییرات هست نمیاد بنابراین باید خیلی ساده خودمون یک نسخه کاستوم بسازیم و مشکل رو حل کنیم.برای این کار در سیستم های Unix مثل Linux و BSD و Mac و ... کافیه یک فایل Zone data با مشخصات مورد نظر خودمون ایجاد کنیم.فایل های رسمی از این آدرس  قابل دسترسی هستند.  من فقط یک خط به آخرین ردیف اضافه کردم و مقدار DST در تاریخ ۲۰ مارچ رو به صفر تغییر دادم.پس فایل اصلی:# Rule  NAME    FROM    TO      TYPE    IN      ON      AT         SAVE    LETTER/S&#xA;Rule      Iran        2088&#x9;    max&#x9;-&#x9;    Mar    20&#x9;  24:00&#x9;1:00      -&#xA;Rule      Iran        2088&#x9;    max&#x9;-&#x9;    Sep     20      24:00&#x9;0&#x9;      -# Zone&#x9;NAME&#x9;&#x9;STDOFF&#x9;   RULES&#x9;     FORMAT&#x9;      [UNTIL]&#xA;Zone&#x9;Asia/Tehran&#x9;3:25:44&#x9;    -&#x9;             LMT                 1916&#xA;                                        3:25:44&#x9;    -&#x9;             TMT&#x9;              1946             # Tehran Mean Time&#xA;                                        3:30&#x9;    -&#x9;             +0330&#x9;      1977 Nov&#xA;                                        4:00&#x9;    Iran&#x9;     +04/+05&#x9;      1979&#xA;                                        3:30&#x9;    Iran&#x9;     +0330/+0430فایل کاستوم شده:# Rule  NAME    FROM    TO      TYPE    IN      ON      AT         SAVE    LETTER/S&#xA;Rule      Iran        2088&#x9;    max&#x9;-&#x9;    Mar    20&#x9;  24:00&#x9;0            -&#xA;Rule      Iran        2088&#x9;    max&#x9;-&#x9;    Sep     20      24:00&#x9;0&#x9;      -# Zone&#x9;NAME&#x9;&#x9;STDOFF&#x9;   RULES&#x9;     FORMAT&#x9;        [UNTIL]&#xA;Zone&#x9;Asia/Tehran&#x9;3:25:44&#x9;    -&#x9;             LMT                   1916&#xA;                                        3:25:44&#x9;    -&#x9;             TMT&#x9;                1946             # Tehran Mean Time&#xA;                                        3:30&#x9;    -&#x9;             +0330&#x9;        1977 Nov&#xA;                                        4:00&#x9;    Iran&#x9;     +04/+05&#x9;        1979&#xA;                                        3:30&#x9;    Iran&#x9;     +0330/+0430   2022 &#xA;                                        3:30            Iran          +0330این فایل را با یک نام دلخواه مثل Tehran2022 ذخیره می کنیم.حالا ابتدا فایل مسیر /etc/localtime که یک لینک به فایل اصلی هست رو پاک می کنیم.با دستور zic  فایل timezone جدید را جایگزین می کنیم.zic Tehran2022سپس لینک را مجددا برقرار می کنیم. معمولا مسیر همین هست ولی اگر نبود حتما شما میدونید OS خودتون فایل های  timezone ش کجاست دیگه!ln -s /usr/share/zoneinfo/Asia/Tehran /etc/localtimeبعد از این باید ساعت سیستم به درستی تنظیم شده باشه و البته در روز ۱ فروردین ۱ ساعت جلو نمیره دیگه.در طی این مراحل اگر جایی احساس کردین نیاز به تنظیمات پیش فرض هست یک بکاپ از آخرین آپدیت دارین که به این شکل برگردونده میشه. ممکنه بعدش ساعت سیستم به درستی اصلاح نشه که باید لینک رو پاک کنید و مجددا لینک کنین. (معمولا بلافاصله میشه)zic /usr/share/zoneinfo/tzdata.ziاگر کانتینرها یا دیتابیس یا هرچیز دیگه ای از تنظیمات زمان OS استفاده نمی کرد حواستون به اونها هم باشه.گودلاک گایز</description><category>علی پوربازرگان</category><author>علی پوربازرگان</author><pubDate>Thu, 17 Mar 2022 14:57:52 +0330</pubDate></item></channel></rss>