<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های علی مرادی</title>
        <link>https://virgool.io/feed/@m_98154509</link>
        <description>یه برنامه‌نویس ساده که رو اورده به سیب‌زمینی فروشی ؛)</description>
        <language>fa</language>
        <pubDate>2026-06-16 11:19:55</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/4820617/avatar/uX27Ts.jpg?height=120&amp;width=120</url>
            <title>علی مرادی</title>
            <link>https://virgool.io/@m_98154509</link>
        </image>

                    <item>
                <title>هییییییییی… روزگار ؛)</title>
                <link>https://virgool.io/@m_98154509/%D9%87%DB%8C%DB%8C%DB%8C%DB%8C%DB%8C%DB%8C%DB%8C%DB%8C%DB%8C-%D8%B1%D9%88%D8%B2%DA%AF%D8%A7%D8%B1-zp3gcmmoeudl</link>
                <description>بیش از ۲ ماه میشه که در شبکه ملی اطلاعات گیر افتادیم…بیش از ۶۰ روز.بیش از ۱۴۴۰ ساعت.بیش از ۸۶۴۰۰ دقیقه.نا‌امیدی، بی‌حوصلگی، خشم، اضطراب، استرس، افسردگی و… دیگه این روزا حس‌های ناآشنایی نیستن که اگه برای شما هستن واقعا خوش‌به‌حالتون ؛)حس بلاتکلیفی و اینکه نمیدونی دقیقا باید چیکار کنی، واقعا آدمو دیوونه میکنه. حضرت ایوب هم با اون همه صبر، بلاخره یه روزی از صبر کردن خسته شد… ما که دیگه جای خود داریمواقعا بعضی وقتا که با خودم فکر می‌کنم می‌بینم ظاهرا ما محکوم به این شکستیم، ما بودیم و هستیم که بازنده باشیم. شکستی که دلیلش کم‌کاری و یا کار اشتباه خودمون نبوده، بلکه تصمیم‌های تعصبی و بی‌علتی هستن که مجبور به تن دادن به اونها هستیم. انگار از اول قرار بوده ما هزینه تصمیم‌هایی را بدهیم که نه سهمی در ساختن‌شان داشتیم، نه راهی برای نپذیرفتن‌شان. اما با این حال به خودمون افتخار می‌کنم، که با این همه مشکل و سختی که خیلی وقته مثل وزنه به بالون آرزو‌هامون چسبیدن بازم ادامه دادیم و الان جایی هستیم که یه روز توی بچگی آرزوشو داشتیم ؛)اما از اینجا به بعد مشکل فقط وزنه‌های چسبیده به بالون آرزوها نیست، مشکل تیر زدن به بالونه!متاسفانه نمیدونستیم که پرواز در این مملکت حدی داره، و بیشتر از اون محکوم به سقوطه…  </description>
                <category>علی مرادی</category>
                <author>علی مرادی</author>
                <pubDate>Tue, 05 May 2026 11:10:41 +0330</pubDate>
            </item>
                    <item>
                <title>صبر بی صبر! میریم اگه اشتباه شد برمیگردیم!</title>
                <link>https://virgool.io/@m_98154509/%D8%B5%D8%A8%D8%B1-%D8%A8%DB%8C-%D8%B5%D8%A8%D8%B1-%D9%85%DB%8C%D8%B1%DB%8C%D9%85-%D8%A7%DA%AF%D9%87-%D8%A7%D8%B4%D8%AA%D8%A8%D8%A7%D9%87-%D8%B4%D8%AF-%D8%A8%D8%B1%D9%85%DB%8C%DA%AF%D8%B1%D8%AF%DB%8C%D9%85-eflaih5nkfpr</link>
                <description>‌عنوان مقاله اشاره بسیار کوتاه و مختصری به نحوه کار cpu میکنه. بریم که موشکافانه بررسی‌ش کنیم.خب همونطور که میدونید (یا نمیدونید) کلا cpu ها عجول هستن و مثل خیلی از ماها از صبر کردن متنفرن، این موضوع باعث یک موضوع دیگه میشه که قراره در این نوشته دقیق بهش بپردازیم.بطور کلی عملکرد و سرعت cpu به شدت سریعه و پردازنده های امروزی میتونن در هر ثانیه چندین میلیارد چرخه انجام بدن. در هر چرخه هم ممکنه که چندین دستور با هم در حال اجرا شدن باشن. دقیقا مثل خط تولید یک کارخونه. یعنی در یک لحظه قطعه یک در حال تراشکاری هست، قطعه دو در حال رنگ شدن، قطعه سه در حال بسته‌بندی و… تا به اینجا که همچی خوب پیش رفته، ولی دقیقا نقطه‌ایه که به یک مشکل اساسی میخوریم، یعنی Branch Hazard.اینجاست که می‌رسیم به یکی از مهم‌ترین چالش‌های طراحی پردازنده‌ها: Branch Hazard یا همون «خطر انشعاب».این مشکل دقیقاً زمانی رخ می‌ده که CPU مجبور بشه تصمیم بگیره در ادامهٔ pipeline چه دستوری رو اجرا کنه، اما نتیجهٔ یک شرط یا مقایسه که به اون وابسته هستیم هنوز آماده نیست.به مثال زیر نگاه کنید:load x;

if x &gt; 10:
  jump to A;

else:
  jump to B;

A: DoA();
B: DoB();اینجا CPU یک دردسر جدی داره.چرا؟چون تا زمانی که مقدار x از حافظه خونده نشده باشه و مقایسهٔ x &gt; 10 انجام نشه، CPU نمی‌دونه مسیر A اجرا میشه یا B.حالا تصور کنید CPU بخواد صبر کنه تا نتیجهٔ load آماده بشه.چی میشه؟کل مسیر Fetchکل مسیر Decodeکل مسیر Executeو تمام stageهای بعدیهمگی باید خالی بمونن تا این شرط مشخص بشه.این یعنی توقف کامل خط تولید؛ درست مثل اینکه کارخونه ناگهان دست از کار بکشه چون نمی‌دونه قطعه باید به کدوم بخش بره.و این توقف دقیقاً همون Pipeline Stall معروفه.چرا این خیلی بده؟چون هر stall به معنای از دست رفتن ۱۰ تا ۲۰ چرخهٔ پردازنده است.و پردازنده‌ها عاشق این‌اند که هیچ‌وقت بیکار نشن.تصور کن یه CPU مدرن با ۵ گیگاهرتز فرکانس = پنج میلیارد چرخه در ثانیه.از دست دادن فقط 20 چرخه = تقریباً 4ns هدر رفتاما در یک حلقهٔ سنگین این اتفاق بارها و بارها رخ می‌دهد و می‌تونه performance رو نصف کنه.CPU چیکار میکنه؟اینجاست که پردازنده‌ها یک رفتار فوق‌العاده هوشمندانه نشون میدن:حدس می‌زنن!قبل از اینکه نتیجهٔ واقعی آماده بشه، CPU تصمیم می‌گیره:احتمالاً مسیر A اجرا میشه یا B؟اگر حدس درست باشه → همه‌چیز بدون هیچ توقفی جلو میره.اگر اشتباه باشه → کل pipeline باید flush بشه و دوباره با مسیر درست پر بشه.این اشتباه رو بهش می‌گن:Branch Mispredictionو هزینه‌اش ممکنه 15 تا 30 cycle باشه.خب حالا ما باید چیکار کنیم؟خب علاوه بر هوشمندی cpu ما هم میتونیم کمکش کنیم تا تصمیمات بهتری بگیره، در‌اینجا چندین پیشنهاد و اصل مطرح میشه که خیلی میتونه کمک کننده باشه:۱. مسیر رایج باید ا‌ول نوشته بشهبد:if unlikelyCondition {
    slowPath()
} else {
    fastPath()
}خوب:if likelyCondition {
    fastPath()
} else {
    slowPath()
}۲. پرهیز از شرط های تودرتواین کد به شدت کند خواهد بود:if a {
    if b {
        if c {
            ...
        }
    }
}ولی این کد مناسب است:if !a || !b || !c {
    return
}۳. استفاده از map بجای switch در شرایط خاصبجای:switch opcode {
case 1:
    f1()
case 2:
    f2()
case 3:
    f3()
...
}از:handlers := [...]func(){f0, f1, f2, f3}
handlers[opcode]()استفاده کنید.۴. شرط های وابسته به یک مقدار رو پشت سر هم بررسی کنیدبد:if x &gt; 0 {
   if x &lt; 10 {
      ...
   }
}خوب:if x &gt; 0 &amp;&amp; x &lt; 10 {
    ...
}۵. پرهیز از ایجاد branching در‌حلقه هایی که زیاد اجرا میشنوقتی حلقه خیلی تکرار می‌شه، branching داخل اون دشمن Performance هست.بد:for i := 0; i &lt; n; i++ {
    if arr[i] &gt; 10 {
        ...
    }
}خوب: پیش‌فیلتر کردن یا pre-computationfiltered := make([]int, 0, n)
for _, v := range arr {
    if v &gt; 10 { filtered = append(filtered, v) }
}

for _, v := range filtered {
    ...
}ممنون که تا اینجا همراه بودید :)</description>
                <category>علی مرادی</category>
                <author>علی مرادی</author>
                <pubDate>Sat, 25 Apr 2026 12:16:01 +0330</pubDate>
            </item>
                    <item>
                <title>چرا از برنامه نویسی رو اوردم به سیب زمینی فروشی؟</title>
                <link>https://virgool.io/@m_98154509/why-mkqoikfvjyel</link>
                <description>سلام. من علی هستم. برنامه نویس فول استکی که تقریبا ۴ ساله که داره با صفحه مشکی و کلی کلمات نامفهوم رنگی رنگی میجنگه :)خب حقیقتا داستان من از جایی شروع شد که در ۱۴ سالگی در یک استارتاپ کوچیک مشغول به نوشتن و ویرایش کردن مقالات پزشکی برای بهبود SEO سایت بودیم. اوایل کار بودیم که متوجه شدم دو نفر در اتاق بغلی با بهترین امکانات در حال کار کردن هستن که خب با خودم که سنجیدمشون اونا تو بهشت بودن زیر باد کولر ما توی جهنم تو وسط تابستون! کنجکاو شدم که دقیقا دارن چیکار میکنن و از مدیر خودمون پرسیدم که خب در نهایت فهمیدم یکیشون توسعه دهنده بک اند و دیگری توسعه دهنده فرانته. هر روز که باید برای توضیح خروجی کار اون روز به اون اتاق میرفتیم تمام نگاهم به صفحه مانیتور این دو نفر بود و حسی که داشتم این بود که واقعا منم میتونم اینکار ها رو انجام بدم؟اون روزا گذشت و استارتاپ شکست خورد. ولی من همچنان به اون صفحه سیاه با کلی نوشته های رنگی رنگی نامفهوم فکر میکردم و به وجد میومدم از اینکه یه انسان میتونه با کامپیوتر صحبت کنه و چیزی که می‌خواد رو بهش بگه و کامپیوتر براش انجام بده. از این بهتر این بود که کامپیوتر اصلا غر نمیزنه، از زیر کار در نمیره. فقط کافیه بهش دقیقا بگی که چی میخوای. روز هام با این فکرا میگذشت که بلاخره تصمیم گرفتم شروع کنم. میترسیدم و نگران بودم که واقعا از پسش بر میام یا نه. شروع کردم به سرچ کردن اینکه کدوم زبان برنامه نویسی بهترینه :)بلاخره تصمیم گرفتم برم سراغ جاوا، صرفا چون تو ویدیویی که دیدم گفته بود جاوا از پایتون سریع تره. یه دوره رایگان ۶ جلسه‌ای جاوا مقدماتی پیدا کردم و شروع کردم. اولین برنامه زندگیم رو که همون Hello World معروف هست رو وسط پارک محلمون نوشتم و در اون زمان دقیقا یادمه که حس قدرت عجیبی بهم دست داد، خیلی حس عجیبی بود، به آدمای داخل پارک نگاه میکردم و حس میکردم چیزی رو بلدم که هیچ کس بلد نیست. برای یه بچه ۱۴ ساله حس فوق العاده ای بود :)گذشت و گذشت تا یه کتاب برنامه نویسی اندروید خریدم، برنامه نویسی اندرپید به زبان آدمیزاد. خوندمش، هیچی نفهمیدم، دوباره خوندمش و دوباره هیچی نفهمیدم… دیدم اینطوری نمیشه، و پایه‌ام کاملا ضعیف و مشکل داره. مادرمو با هزار بدبختی راضی کردم که کتاب ۱۰۰۰ صفحه ای معروف چگونه با جاوا ۹ برنامه بنویسیم رو برام بخره. شروع کردم به خوندمش تا کم کم دستم اومد که چه خبره. تا یه جاهایی خوندم و دوباره حس کردم که عجب آدم خفنی هستم. با همینطوری پیش رفت تا کلاس نهم که بودم با مدرسه رفتیم نمایشگاه کتاب تهران. اونجا یه غرفه بود که دی وی دی های آموزش برنامه نویسی اندروید رو میفروخت. خریدمش و شروع کردم به نگاه کردن. تا یه جایی پیش رفتم و چون رفته رفته پیچیده تر می‌شد و منم رفته رفته هیچی نمیفهمیدم گذاشتمش کنار. حدودا ۱ سال شده بود که من برنامه‌نویسی رو گذاشته بودم کنار. بلاخره تصمیم گرفتم دوباره شروع کنم، عید بود و عیدی هامو جمع کرده بودم و یه دوره آموزش جامع برنامه نویسی‌وردپرس خریدم و شروع کردم به دیدنش. اینجا جایی بود که با html css php آشنا شدم و اصلا فهمیدم که داستان پشت این سایتا چیه. ولی حقیقتا نگاه که میکردم میدیدم که کافی نیست و صرفا الان یه آماتور هستم که فقط بلده توی داشبورد وردپرس رنگ هدر و فوتر‌سایت رو عوض کنه! رفتم سرچ کردم و فهمیدم باید جاوا اسکریپت یاد بگیرم. شروع کردم به یاد گیری و رفتم سراغ ریکت و بعدش نودجی‌اس و بعدش NextJs و در نهایت NestJs. این دوره خیلی سریع برام گذشت با اینکه حدودا ۲ سال زمان برد، ولی چون ۲۴ ساعته چسبیده بودم به کامپیوتر‌ و دوره هام و درس و مدرسه اینارم کلا تعطیل کرده بودم سریع گذشت. اون لا به لا‌ چند تا پروژه هم انجام دادم و با پولشون مانیتور بزرگ‌تر خریدم، سیستم رو ارتقا دادم و… اولین پروژمو هیچ وقت یادم نمیره، اینکه اولین باری بود که یکی بهم اعتماد کرد و بهم کار سپرد :)بلاخره اون روز ها گذشت و من بلاخره اینجام، علی مرادی برنامه نویس فول استکی که به سیب زمینی فروشی رو آورده. ممکنه بپرسید چرا! حقیقتا تو این شرایط هیچ امیدی برای ادامه این مسیر ندارم، از اون روز اول حدودا ۶ ۷ سال میگذره. هیچ وقت فکر نمیکردم به جایی برسیم که ۲ ماه تمام اینترنت نداشته باشیم! اینترنتی که حداقل برای من به عنوان یک نیمچه برنامه نویس تمام زندگیمه، کارم، تفریحم، درس خوندنم و…و الانم دنبال یه وانتم. چون فهمیدم توی این مملکت، پهنای باندِ جاده‌های خاکی برای انتقال سیب‌زمینی، خیلی پایدارتر از پهنای باند اینترنت برای انتقال کد شده. حداقل اونجا وقتی وانت استارت نمی‌خوره، یه ارورِ فیزیکی داری که با آچار درست می‌شه، نه با فیلترشکن! خلاصه که فعلاً در حال Refactor کردن زندگی از کد به کشاورزی هستم؛ هرچند که می‌دونم تهش باز برمی‌گردم پای همون صفحه سیاه… اگه بزارن ؛)</description>
                <category>علی مرادی</category>
                <author>علی مرادی</author>
                <pubDate>Fri, 17 Apr 2026 21:59:33 +0330</pubDate>
            </item>
            </channel>
</rss>