<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های محمد مهدی شاه محمدی</title>
        <link>https://virgool.io/feed/@mmshm</link>
        <description>یه برنامه نویس که درد دل هاش رو با سیستمش میکنه با زبان کد، و درد دلش با خودش رو بعضی وقت ها که حسش باشه با زبان شعر</description>
        <language>fa</language>
        <pubDate>2026-06-16 19:46:08</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/333006/avatar/ZFj03m.png?height=120&amp;width=120</url>
            <title>محمد مهدی شاه محمدی</title>
            <link>https://virgool.io/@mmshm</link>
        </image>

                    <item>
                <title>تفاوت برنامه‌نویسی imperative و declarative</title>
                <link>https://virgool.io/@mmshm/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-imperative-%D9%88-declarative-uezzcpd4ts9e</link>
                <description>سلام؛محمدمهدی هستم برنامه نویس موبایل.اما بعد...اگر بخوام مثل خارجی ها TL;DR طور برنامه نویسی imperative و declarative رو توضیح بدم: این دوتا paradigm یا الگوی زبان های برنامه‌نویسی هستند؛ در برنامه نویسی imperative یا دستوری ما در پروسه یا مراحل انجام کار و نحوۀ انجام کار می‌تونیم دخالت کنیم ولی در برنامه نویسی declarative یا اعلانی ما فقط می‌گیم چی می‌خوایم و با سیستم به صورت Black Box و هلو برو تو گلو رفتار می‌کنیم.در واقع در برنامه نویسی اعلانی ما فقط می‌گیم چی می‌خوایم ولی در برنامه نویسی دستوری  ما در چگونگی به دست اومدن نتایج هم می‌تونیم دخالت کنیم.اگر بخوام یه مثال بزنم که قابل لمس تر باشه مثال ساندویچی رو می‌زنم.بعضی ساندویچی ها هست که یه منو داره و از منو سفارش می‌دیم. ما در این نوع سفارش دادن در پروسۀ آماده سازی محصول نهایی خیلی دخل و تصرف نداریم.ولی بعضی ساندویچی ها سلف سرویس هستند. می‌تونیم نون رو بگیریم اول بعد برش بدیم نون رو بعد داخلش گوجه بذاریم بعد خیارشور بعد کاهو بعد سوسیس یا هر چیزی بعد سس بعد دور ساندویچ کاغذ می‌پیچیم و بعد و بعد و بعد...نوع اول که ما فقط درخواست می‌دیم و منتظر نتیجه می‌مونیم میشه مثل همون برنامه نویسی declarative و نوع دوم که آماده کردن ساندویچ با خودمونه میشه مثل برنامه نویسی imperative.همون‌طور که بدیهیه در برنامه نویسی دستوری ما آزادی عمل بیشتری داریم. در برنامه نویسی اعلانی ممکنه حصول نتیجه از راه خیلی بهینه‌ای انجام نشه. برای همین بهتره جاهایی که performance برامون مهمه از برنامه نویسی دستوری استفاده کنیم. هر چند ممکنه در برنامه نویسی دستوری زمان توسعه بیشتر طول بکشه به خاطر این که داریم کارایی که با یه Embedded function می‌شده و شاید با یه خط قابل انجام بوده رو با چندین خط انجام می‌دیم.در آخر با دو مثال از زبان dart تفاوت برنامه‌نویسی imperative و declarative رو نشون میدم.برنامه نویسی اعلانی یا declarative برنامه نویسی دستوری یا imperative</description>
                <category>محمد مهدی شاه محمدی</category>
                <author>محمد مهدی شاه محمدی</author>
                <pubDate>Sun, 05 Feb 2023 16:26:42 +0330</pubDate>
            </item>
                    <item>
                <title>سال(های) دوری از هم!</title>
                <link>https://virgool.io/@mmshm/%D8%B3%D8%A7%D9%84%D9%87%D8%A7%DB%8C-%D8%AF%D9%88%D8%B1%DB%8C-%D8%A7%D8%B2-%D9%87%D9%85-zwwszu05fzsw</link>
                <description>اوایل سال 2020 بود که فهمیدم این دنیا اگر بهت دوتا 20 همزمان بده جور دیگه ای برات جبران می کنه.خبرهایی از ووهانِ چین میومد که نشون از گسترش یه ویروس داشت که انسان ها بعد درگیری باهاش سخت نفس می کشن و حتی ممکنه دیگه برای همیشه نتونن نفس بکشن.خیالمون راحت بود چون با جمله &quot;مرگ فقط برای همسایه ست&quot; بزرگ شده بودیم.بدون توجه به این که ممکنه روزایی هم برسه که کل دنیا ووهان بشه، برای آینده ی نه چندان دورم برنامه هایی ریخته بودم، اما فهمیدم خیلی وقت ها ما تصمیم گیرنده نیستیم...خیلی نگذشت که بیشتر از همیشه به واژه ی &quot;قرنطینه&quot; برخوردیم و حتی مجبور شدیم این واژه رو در کنار &quot;پروتکلای بهداشتی&quot; که تکیه کلام اکثریت قریب به اتفاق شده بود، زندگی(بخوانید زندگانی) کنیم.شاید برای منی که کارم نشستن 7/24 (هفت روز هفته بیست و چهار ساعته) پشت سیستم و کد زدن بود این قرنطینه خیلی سبک زندگیم رو عوض نمی کرد، اما برام چندان راحت نبود که این سبک زندگی برام اجبار باشه و این باعث می شد آرامش قبل رو نداشته باشم.این اجبار بهم این رو فهموند که ما آدما به خاطر ذات آزادی که داریم اگر کاری که همیشه از روی اختیار و حتی علاقه انجام می دیم برامون اجبار بشه، اذیت کننده ست یا حداقل خوشایند نیست.قاعده و قانون نانوشته این بود( و هست):  همه #کرونا دارن مگر این که خلافش ثابت بشه.روزهایی اومد که بیشتر از همیشه می شد مصراع &quot;دلا خو کن به تنهایی که از تن ها بلا خیزد&quot; رو درک کرد.روزهایی که: گوشم باید علاوه بر دسته عینک و هندزفری، رنجِ کشِ ماسک رو هم به جون میخرید.راستش اون وقتی به حقیقت ضرب المثل &quot;با پنبه سر بریدن&quot; و دروغ جمله ی &quot;اگه پشت گوشِتو دیدی...&quot; رسیدم که صبحا پشت گوشم رو توی آیینه می دیدم که با کش پنبه ای پوست پوست شده.روزهایی که: کل زندگی ما جا گرفته بود فقط توی چند سانتیمتر:مدرسه، دانشگاه، شرکت، فروشگاه، جلسه، باشگاه ورزشی، مهمانی، تفریح، مطالعه و هرچه که به ذهن شما می رسد و به ذهن من نه.شاید بلندپرواز ترین افسانه نویس های قرون گذشته و حتی معاصر هم نمیتونستن این رو متصور بشن که زندگیمون تو چند اینچ  خلاصه بشه ولی دنیا افسانه وار تغییر می کنه بدون توجه به این که تو آمادگیشو داری یانه. این تو هستی که باید خودت رو با دنیا و اتفاقاتش تطبیق بدی نه برعکس.نقاشی پیش بینی کنندۀ تحصیل در آینده( پیش بینی های بیشتر)بیشتر از قبل با این جسمِ مستطیلیِ فلزی/پلاستیکی/شیشه ای دوست شده بودیم و فقط وسیله ای برای گذران وقت و تفریح نبود.انگار که جای مجاز و واقعیت عوض شده بود:مجازی می شد: کلاس رفت، سینما رفت، کنسرت رفت، مهمونی رفت، کتاب خواند، جنبش راه انداخت، جلوی جنبش ها را گرفت، ورزش کرد(به لطف مربی مجازی)، سرکار رفت، با غریبه ها آشنا شد، همونطور که اسپایک جونز توی فیلم Her نشون داده بود، عاشق شد( نگید نه! شما هم مثل من کم ندیدید عشق هایی که از پایه ی آن ها در واقعیت، از مجاز ساخته شده بود. به این که توی واقعیت هم شناخت آدم ها سخته دیگه چه برسه به مجاز، کاری ندارم؛فقط می دونم، حتی می شد عاشق هم شد. )، فارغ شد(در مقابل عاشق شدن :D )، قهر کرد، آشتی کرد، گریه کرد، خندید و ...دیالوگی از فیلم HER خطاب به معشوقه ی مجازیاتفاقی که برامون افتاد در کنار تاریکی ها، غم ها، دوری ها، فاصله های اجتماع، رنج گوش ها و فقدان آغوش ها خیلی چیزها هم بهمون یاد داد:مثلا این که می شد به جای غرق شدن توی فضای مجازی، توش شنا کرد تا خودمون رو به ساحل برسونیمیا این که همیشه باید با همۀ کاستی ها تو لحظه زندگی کنیم چون همیشه امکان داره اوضاع بدتر از چیزی که هست بشهیا این که...شما بگید...#روایتگرباش</description>
                <category>محمد مهدی شاه محمدی</category>
                <author>محمد مهدی شاه محمدی</author>
                <pubDate>Fri, 18 Dec 2020 21:48:56 +0330</pubDate>
            </item>
                    <item>
                <title>ساخت یوزر با دسترسی های sudo در اوبونتو 18.04</title>
                <link>https://virgool.io/@mmshm/%D8%B3%D8%A7%D8%AE%D8%AA-%DB%8C%D9%88%D8%B2%D8%B1-%D8%A8%D8%A7-%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C-%D9%87%D8%A7%DB%8C-sudo-%D8%AF%D8%B1-%D8%A7%D9%88%D8%A8%D9%88%D9%86%D8%AA%D9%88-1804-xuugtlof23al</link>
                <description>محمدمهدی شاه محمدی هستم با آموزش ساخت یوزر(non-root) در سرور اوبونتو با دسترسی sudoاول بگم که چرا نیاز داریم یک یوزر بسازیم که دسترسی یا بهتره بگم امتیازات sudo رو داشته باشه وقتی میتونیم از همون یوزر root استفاده کنیم.خب ببینید عزیزانم یوزر root خیلی دسترسی ها و امتیازات داره که برای کارهای معمولی بهتره ازش استفاده نکنید چون ممکنه تصادفی هم که شده اشتباهی کنید و سرور به فنا بره :))همچنین اینم بگم ممکنه بخواید به کسی امتیاز sudo بدید بدون این که بهش دسترسی root بدید؛باز اینجا باید یه یوزر با امتیازات sudo بسازید.قصه کوتاه کنم؛اول با یوزر root لاگین بشید(اگه داخل سرورید و روی یوزر روت نیستید با دستور sudo -i وارد یوزر root بشید.)تو سرور و بعدش یه یوزر بسازید:adduser mehdi(به جای mehdi اسم دلخواه کاربری که میخواید بسازید رو بذارید)بعد از این اگر کاربری با این اسم قبلا نساخته باشید از شما سوالاتی میپرسه به شکل زیر:Enter new UNIX password:یه رمز قوی برای کاربر انتخاب کنیدRetype new UNIX password:رمز رو دوباره تایپ کنیدبعد از انتخاب رمز اگر رمز به حد کافی قوی باشه و هر دو یکی باشن از شما سوالات امنیتی می کنه که پاسخش دلخواه هست و بهتره درست پاسخ بدید تا بعدها اگر رمز رو فراموش کردید بتونید با این سوالات رمز رو ریکاوری کنید.بعد از سوالات از شما تأیید میخواد که اطلاعات وارد شده صحیحه؟که شما اگر دیدید اطلاعات صحیحه y رو تایپ کنید و بعد اینتر.بعد از این مراحل باید به این یوزرمون امتیازات sudo بدیم.برای این کار با همون یوزر root دستور زیر رو وارد می کنیم.(یادتون نره به جای mehdi از اسمی که خودتون کردید استفاده کنید.)usermod -aG sudo mehdiدر آخر باید یوزرتون رو به لیست sudoers با اضافه کنید.برای این کار دستور زیرو وارد کنید:sudo nano /etc/sudoersو سپس این کد رو توی این فایل قرار بدید.(که میدونم حواستون هست یوزر خودتون رو جای mehdi جایگزین می کنید) mehdi ALL=(ALL)   ALLحالا میتونید با دستور پایین و بعدش وارد کردن رمزش وارد یوزرتون بشید و از sudo  استفاده کنید :)su - mehdi</description>
                <category>محمد مهدی شاه محمدی</category>
                <author>محمد مهدی شاه محمدی</author>
                <pubDate>Fri, 23 Oct 2020 22:12:21 +0330</pubDate>
            </item>
            </channel>
</rss>