<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های محمد شاهملکی</title>
        <link>https://virgool.io/feed/@mshahmalaki</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-16 10:10:37</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/157274/avatar/gEk6sT.jpg?height=120&amp;width=120</url>
            <title>محمد شاهملکی</title>
            <link>https://virgool.io/@mshahmalaki</link>
        </image>

                    <item>
                <title>به من نگاه کن واسه‌ی ی لحظه</title>
                <link>https://virgool.io/@mshahmalaki/%D8%A8%D9%87-%D9%85%D9%86-%D9%86%DA%AF%D8%A7%D9%87-%DA%A9%D9%86-%D9%88%D8%A7%D8%B3%D9%87-%DB%8C-%DB%8C-%D9%84%D8%AD%D8%B8%D9%87-nzzhkzhg6yry</link>
                <description>قرار نیست این پست مرور خاطرات و خوندن شعر و ترانه باشه. شاید اولین عنوانی که به ذهنم رسید که مسیر این چند روزه‌مو در دنیای دواپس بخوام در ی عبارت بگم این بود.شاید عجیب باشه. این عنوان و دواپس، مگه داریم مگه میشه؟مسیر این هفته‌ی من با ی تسک R &amp; D شروع شد (عاشق این جور تسک‌ها هستم). سرتون رو درد نیارم، وسط سرچ‌ها و چت جی پی تی و Perplexity و ... رسیدم به ویدئو دموی کاربردی، ترکیب چند راهکار و ارائه اون.نکته‌ای که در ابتدای ویدئو توجه من رو به خودش جلب کرد، نحوه‌ی ارائه بود که در محیط Terminal انجام میشد. خیلی جالب بود برام. اینقدر که ویدئو رو pause کردم و ی سرچ زدم ببینم با کلید واژه Presentation.md چه راهکاری بهم پیشنهاد میشه. در اولین جستجو با ابزار به نام Marp آشنا شدم. جالب بود، تقریبا همون چیزی بود که در ویدئو نشون داده شده بود. ولی ی سری تفاوت‌های ریزی هم داشت. خب Extension برای VSCode هم داشت و ی سری ابزار دیگه. به ویدئو برگشتم و از اونجایی که ارائه‌دهنده تمامی منابع لازم برای اجرای اون استک رو روی گیت‌هاب گذاشته بود ی سری به پروفایل ایشون در گیت‌هاب زدم. خوشبختانه علاوه بر منابع، فایل ارائه هم در ی ریپو دیگه به اشتراک گذاشته بود.Slidesاینجا بود که با ابزاری که ارائه جالب و جذابشو باهاش ساخته و ارائه داده بود، آشنا شدم. به زبان Go و نکته جالب‌تر بخش آخر README ریپوی Sildes بود که Alternativeهای این ابزار هم معرفی کرده بود. ای وای من، پنجره‌ای به جهان ارائه‌های جذابLookatmeبه من نگاه کن، ی پکیج پایتونی جالب و جذاب (چرا تا الان باهاش آشنا نشده بودم) که علاوه بر Slides و دیگر راهکارهای مشابه، امکانات جالبی داره (ماژولار بودنش برام خیلی جذاب بود)ولی حیف که نزدیک به ۲ سال هست که Maintain نمیشه و به گفته توسعه‌دهنده‌ی اصلیش، قراره در نسخه 3 سوپرایز بشیم. من که منتظرم ...بماند نصب نسخه stable که در حال حاضر v2.5.5 هست به وسیله pip به سختی و با مشقت و مشکلات dependency پکیج‌ها انجام شد، ولی اگه بخواهید میتونید در توزیع‌های Debian-based با مدیر بسته‌ی (همون پکیج منیجر خودمون) APT نصبش کنید. باحاله.Sli.dev و Sentخیلی نظرمو در مقایسه با دو راهکار قبلی جلب نکرد. پس میگذریم.Presentermی ابزار جالب که با زبان Rust توسعه داده شده و خوب هم Maintain میشه با امکاناتی بس جذاب. نگم براتون. جوری که غم قدیمی بودن lookatme رو شست برد. البته بماند که منتظر خبری از lookatme هستم و خواهم موند. سخن آخرهمه‌ی این ابزارها و ابزارهای مشابه اینها که بعضا با nodejs هم نوشته شدند، امکانات مشابه‌ای دارند و در نوع خودشون جالب هستند. ولی نیازمندی من برای کامل بودن (البته به نظر من) این موارد بود:سادگی نصب امکان Syntax Highlighting برای کدها به زبان‌های مختلف (بیشتر Python, Bash script و Go مدنظرم بود)امکان اجرای کد در درون ارائهامکان اجرای ترمینال درون ارائه (آخ که چه امکان جذابیه که در حال حاضر فقط lookatme داره)سادگی اجرا و استفاده (میانبرهای صفحه کلید یکسانی داشتند که کار رو راحت میکرد)امکان ثبت Speaker note (آخ آخ این امکان رو Presenterm داره که تست زدم، خیلی باحال بود)ی سری امکانات مشابه هم دارند که با کنکاش در هر ابزار بهش میرسید.شما چه پیشنهادی دارید؟</description>
                <category>محمد شاهملکی</category>
                <author>محمد شاهملکی</author>
                <pubDate>Mon, 17 Mar 2025 20:09:35 +0330</pubDate>
            </item>
                    <item>
                <title>چرا من علاقه‌مند به نوشتن Ansible role هستم؟</title>
                <link>https://virgool.io/@mshahmalaki/%DA%86%D8%B1%D8%A7-%D9%85%D9%86-%D8%B9%D9%84%D8%A7%D9%82%D9%87-%D9%85%D9%86%D8%AF-%D8%A8%D9%87-%D9%86%D9%88%D8%B4%D8%AA%D9%86-ansible-role-%D9%87%D8%B3%D8%AA%D9%85-j1natbhqbgg1</link>
                <description>همیشه بهم میگن چرا چرخ رو دوباره میخوای اختراع کنی؟چرا سری که درد نمیکنه رو میبندی؟چرا اینقدر وقت برای R&amp;D میذاری؟چرا ...چرا ...و چراهای گوناگون دیگه ...در مورد این سوالات هم بگم که معمولا دوستان و همکاران دلواپس من (همون دواپس DevOps خودمون، به این خاطر که اعتقاد دارم در درجه‌ی اول دلواپس زیرساخت‌هاست) بهم این خرده رو میگیرند که آقا وقتی helm chart, Kubernetes operator, Kubernetes CRD, ... هست و میشه سر سه سوت روی کلاسترت دیپلوی کنی و استفاده کنی، چرا میری دوباره چرخ اختراع میکنی و Ansible-role براش مینویسی. خب اول در مورد اعتقاداتم بگم (نه، نگران نباشید از اون دست آدماش نیستم که بخوام بگم این درسته یا این درست نیست. اعتقادمه، اینجا جایی است برای بیان و البته نقدش).البته اعتقاداتم در مورد دلواپس بودنم (اینجا فرض کنید ی استیکر هست دیگه)از نظر من: (همیشه به دوست گرام و رو اعصابم کیوان میگم) 1- کاری رو اگه بار اول دستی انجام دادی، بار دوم لطف کن اتوماتیکش کن (حالا میخوای bash script, ansible, python script, ... بنویس براش)2- دواپس خوب، دواپس بیکاره (اینقدر همه چی گل و بلبل راه افتاده و داره کار میکنه که نیازی نیست کاری انجام بده). البته این موضوع به تجربه و دانش فراوان برمیگرده. پس تا زمانی به اون نقطه برسیم، تلاش و کوشش و پشتکار فراوان نیاز است.3- و ما ادراک anisble-role: توی ی مصاحبه، یکی از مواردی که به عنوان مصاحبه‌گر از مصاحبه شونده درخواست شد که در موردش توضیح بده بحث داغ مستندسازی (Documentation) بود که در کمال ناباوری ایشون عنوان کردند که به هیچ وجه اهل مستندسازی نیستند !!!. البته در ادامه دلیل میشه گفت منطقی برای این کار داشتند و اون هم ترافیک کاری و اینکه معمولا تسکها رو به صورت IaC انجام میدن و به قول خود ایشون ی نوع داکیومنت حساب میشه !!!بماند که از نظر من README.md و یا ابزارهایی مثل Confluence مختص این کار هست و میبایست جهت تجمیع مستندات، بهتره از ابزارهای مستندسازی استفاده کرد تا اینکه به طرف که تازه داره on-board میشه بگی برو فلان ansible-role یا بهمان terraform manifest رو بخون، خودت میفهمی داستان از چه قراره.ولی همین اعتقاد ایشون (هنوز میگم اعتقاد، شاید بگی چرا نمیگه تفکر، بینش، روش و ...) منجر به ایده‌ای شد در ذهن من که خب به دید مستند بهش نگاه نکن، ولی راهیه برای عمیق شدن در نصب و کانفیگ ابزارهای مختلف. بهتره بگیم نسخه‌ی کاملتری از مستندات نحوه نصب و کانفیگ. چون توی Ansible-role باید حواست به همه حالات باشه تا بتونی با اطمینان اعلام کنی مناسب برای Platformهای مختلف.در این زمینه هم آقای Geerling (https://github.com/geerlingguy) الگوی من در نوشتن Ansible-role است. اصلا تو ببین و بخون ansible-role-docker ش رو (https://github.com/geerlingguy/ansible-role-docker). لذت میبری. برای تقریبا تمامی حالات شرط و متغیر تعریف کرده. دستت بازه.خب تا اینجا ممد آقا حرف زدی، چی خودت تو چنته داری؟ (شما بخون ولی باور نکن، این سوالاتی است که ممد درونم ازم همیشه میپرسه و خیلی جاها بازخواستم میکنه، البته خودسرزنشگر نیستم خدا رو شکر. ولی ی ممد درون اینطوری باید باشه که بی خیالی طی نکنیم)تجربه‌های مختلفی در نوشتن Ansible-role داشتم که آخریش Redis Cluster بود باز نمیگم کامله ولی سعی‌ام رو کردم که کامل باشه. همین امروز هم ی کامیت روش زدم.نوشتن این رول‌ها بهم این دید رو نسبت به اون ابزار میده که وقتی میخوام به صورت هلو برو تو گلو برم با helm chart اون هم نوع bitnami یا هر نوعی دیگری (البته نوشتن helm chart هم خیلی دوست دارم و عاشقشم) دیپلوی کنم، بدونم داستان از چه قراره. اون فایل values.yaml رو راحت‌تر ویرایشش کنم.یا در مورد تجربه نوشتن رول مربوط به کلاستر RabbitMQ (چالش‌های عجیبی در مورد تست رول باهاش داشتم  )، وقتی خواستم روی کلاستر Kubernetes دیپلویش کنم، با RabbitMQ Cluster Operator آشنا شدم که چقدر هم جذاب نوشته شده بود. در حالت عادی اگر میرفتم سراغش چیزی ازش نمیفهمیدم ولی نوشتن رول براش خیلی بهم کمک کرد و راحت‌تر مفاهیمش رو درک و بررسی کنم. (برگردیم به حرف دوستمون که نوشتن رول میتونه ی مستندسازی حساب بشه).گفتم تست رول که اون هم خودش دنیاییه برای خودش. استفاده از Molecule و Vagrant. قول میدم در آینده‌ای نه چندان دور در موردش بنویسم خب سرتون رو درد نیارم. این تلاشی بود در جهت بیان عقاید و اعتقاداتم، و اینکه ی مقدار هم در جهت تولید محتوا قدمی برداشته باشم و از خداوند متعال تداوم این راه را برای خودم و دوستان خواستارم.</description>
                <category>محمد شاهملکی</category>
                <author>محمد شاهملکی</author>
                <pubDate>Sun, 12 Nov 2023 14:31:49 +0330</pubDate>
            </item>
                    <item>
                <title>حذف فایل در فولدرهای مختلف از طریق find و regex</title>
                <link>https://virgool.io/@mshahmalaki/%D8%AD%D8%B0%D9%81-%D9%81%D8%A7%DB%8C%D9%84-%D8%AF%D8%B1-%D9%81%D9%88%D9%84%D8%AF%D8%B1%D9%87%D8%A7%DB%8C-%D9%85%D8%AE%D8%AA%D9%84%D9%81-%D8%A7%D8%B2-%D8%B7%D8%B1%DB%8C%D9%82-find-%D9%88-regex-h5nwxv189hrg</link>
                <description>مقدمه، پیشگفتار، چکیده، چی چی میخوام بگم، از کجا شروع کنم!!!بعضا برای همه ما اتفاق میوفته بخواهیم فایلهایی رو با مشخصه خاص و مشترکی اعم پسوند و نام مشخص پیدا و یا حذف کنیم. خیلی سرتون رو درد نیارم. مخلص کلام آقا ما روی ی سرور لینوکسی قصد پاک کردن ی سری فایل بکاپ دیتابیس داشتم. (اوه وایسا وایسا، مگه فایل بکاپ اون هم دیتابیس رو هم پاک میکنند آخه. آره جوووووون دل!!! اگه تستی بوده باشه و یا بخوایم قدیمیا رو پاک کنیم آره)چالش، چاله، چاه (صرف کردن چال)نگم براتون که چالش رو تو همون از کجا شروع کنم گفتم براتون. این هم نوشتم برای خالی نبودن عریضهفرض کنید ی ساختاری شبیه تصویر (سرویس جذاب asciinema) دارید و میخواید فایلهایی که تاریخ درست درمونی ندارند (که از بابت تست bash script ایجاد شده) حذف بشه.دیگه ببخشید دیگه نشد که بشه embed طوری توی ویرگول بذارم. گیف طوری نشون دادمقصدم پاک کردن بکاپ های تستی بود که در این جا فایلهای backup-10.sql.gz و backup-11.sql.gz می‌باشد (نقطه سر خط)عمق فاجعهچی کارا کردم تا رسیدم به نتیجهتیتر وار بگم:گشتم، گشتی، گشت (صرف فعل گشت در باب گوگل)گشتمبه خودم گفتم گشتم نبود نگرد نیستمورد ۳ رو بی خیال شدم دوباره گشتیدمرسیدن به این که با کامند find میشه ی حرکتهایی زد خوندن manual کامند findگشتمبه خودم گفتم گشتم نبود نگرد نیستدوباره صرف فعل گشتهمی یافتمیچی شد!!!چی چی شد!!!یافتم دیگه. اول فقط تست کوچیک بابت اینکه بتونم الگوی خاصی برای نوشتن regex پیدا کنم:find . -type fدوم تست regex: (البت‍ه با توجه به بخش چی کارا کردم تا رسیدم به نتیجه خیلی طول کشید تا برسم به نتیجه)find . -type f -regex &#039;.*/*[1][10].sql.gz&#039;و در نهایت تیر خِلاص:find . -type f -regex &#039;.*/*[1][10].sql.gz&#039; -delete‍و باز هم سرویس جذاب asciinema کمک کرد که نشون بدم چیکارا کردم. کاملش رو اینجا ببینید:  https://asciinema.org/a/XHQewmUGP2j1kNvL6BoIe5e4x نتیجه‌گیری اخلاقی !!!‍نتیجه گرایی ؟؟؟ اومدیمو این چالش به شکست منجر میشد اون وقت چی!!! پس نتیجه گرا نباشیم. هر شکستی پلی است به سوی پیروزی (الکی ادای حال بدا رو درنیار عزیزززززز!!!)فقط نکاتی از این چالش یاد گرفتم این بود که:اول بدون آرگومان delete- اقدام به یافتن و تست regex میکنیمهیچ وقت دست از کوشش برنمیداریم. (چی کو!!!، آها همان سعی و تلاش. به نظرم هی باید به خودت بگی کو کو کوشش تا پیداش کنی‍) </description>
                <category>محمد شاهملکی</category>
                <author>محمد شاهملکی</author>
                <pubDate>Fri, 12 Feb 2021 15:08:15 +0330</pubDate>
            </item>
            </channel>
</rss>