<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های ABOBAKR MOSTAFANEJAD</title>
        <link>https://virgool.io/feed/@alfaar7</link>
        <description>یک کامپیوتری در جستجوی معنا و فهم ساختارها</description>
        <language>fa</language>
        <pubDate>2026-06-10 16:07:22</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/147317/avatar/l5nHCW.jpg?height=120&amp;width=120</url>
            <title>ABOBAKR MOSTAFANEJAD</title>
            <link>https://virgool.io/@alfaar7</link>
        </image>

                    <item>
                <title>Linux permissions: Sticky bit</title>
                <link>https://virgool.io/@alfaar7/linux-permissions-sticky-bit-qhn3bttup1ru</link>
                <description>permissions in Linuxمقدمهدر سیستم عامل های تحت شبکە، سطح دسترسی به فایل و دایرکتوری ها جزء موارد حساس و صد البتە بدیهی است. سیستم عامل ها به عنوان بزرگترین نرم افزار های مدیریت سخت افزار کامپیوتری، نقش چند کاربری و شبکەای ان در روزگار فعلی بسیار پر رنگ شده است. در مقاله امروز قصد داریم sticky bit را معرفی کنیم کە یک بیت برای ماندگاری دادەهای کاربری شما در محیط های لینوکسی در اشتراکی ترین دایرکتوری ها می باشد.permissionsمدیران سرور یا کاربران لینوکسی کم تا بیش با سیستم تعیین دسترسی فایل/دایرکتوری در لینوکس آشنا هستند در نتیجه بسیار سریع و مختصر این مورد را بحث خواهیم کرد.به دستور زیر دقت کنید:[alfa@server ~]$ chmod WhoWhatWhich file | directoryدستور فوق نحوه ایجاد سطح دسترسی در لینوکس را معرف می کند. با chmod شما قادر خواهید بود برای چە کسی، چە چیزی را چگونه تعیین کنید.چەکسی: گروه، کاربر، دیگران، همهچە چیزی: اضافه، حذف، اجراچگونه: خواندن، نوشتن، اجرابرای مثال chmod +x virgool.txt به فایل virgool.txt اجازە اجرا شدن در محیط user فعلی را صادر می کند.فایل پس از این دستور به عنوان یک executable در نظرگرفتە خواهد شد.سطح دسترسی با اعدادشما می توانید از اعداد برای اجرای این دستور نیز استفادە کنید، کە این مدل بر اساس نحو زیر است:[tcarrigan@server ~]$ chmod ### file | directoryدر اینجا، از چپ به راست، کاراکتر # یک سطح دسترسی را نشان می دهد. سه سطح دسترسی وجود دارد - کاربر، گروه و دیگران. برای تعیین اینکه هر رقم چقدر است، از موارد زیر استفاده می کنیم:کاربر --- = ١ + ٢ + ٤گروه --- = ١ + ٢ + ٤دیگران --- = ١ + ٢ + ٤اگر بخواهیم کە به یک فایل سطح دسترسی کاربر برای خواندن و نوشتن، گروه خواندن و نوشتن دیگران هیچ را بدهیم عدد باید ٦٦٠ باشد، خواندن ٤ نوشتن ٢ و اجرا ١ می باشد.[tcarrigan@server ~]$ chmod 660 virgool.txtسطح دسترسی های مخصوص ( special user permission ) معمولاً به عنوان SUID ذکر می شود، مجوز ویژه برای سطح دسترسی کاربر دارای یک عملکرد واحد است: یک فایل با SUID همیشه به عنوان کاربری که مالک فایل است، بدون توجه به اینکه کاربر دستور را اجرایی می کند، در نظر گرفتە خواهد شد. اگر مالک فایل مجوزهای اجرایی را ندارد، در اینجا از S بزرگ استفاده کنید.این مورد برای گروه ها نیز با SGID ذکر می شود. به معنی اینکە یک گروه مالک فایل هستند اما امکان اجرایی ندارند و در قسمت گروه بە جای X از علامت S استفادە می شود.برای مشاهده مثال می توانید به فایل های داخل /etc دقت بفرمایید.تا به اینجا شما با سطح دسترس ها و انواع مخصوص ان نیز اشنا شدید. اکنون می خواهیم کە یکی دیگر از سطح دسترسی های مخصوص را کە اصل مقاله برای این مورد بود را معرفی کنیم.Sticky bitتا به حال به دایرکتوری /tmp دقت کردە اید. در محیط های چند کاربری تمامی کاربران امکان دسترسی به این پوشە را دارند. امکان خواندن/ نوشتن/ حذف/اضافە به این پوشە برای همە مقدور است، چطور می توانیم چنین پوشە ای در سایر location های سیستم عامل ایجاد کنیم ؟آخرین مجوز ویژه &quot;بیت چسبنده&quot; نامگذاری شده است. این مجوز روی فایل های فردی تأثیر نمی گذارد. با این حال، در سطح دایرکتوری، حذف فایل را محدود می کند. فقط مالک (و ریشه) یک فایل می تواند فایل را در آن دایرکتوری حذف کند. با sticky bit شما قادر خواهید بود کە فایل های خود را در یک دایرکتوری اشتراکی ایجاد کنید بدون ان کە کسی بتواند ان را حذف کند.به مثال زیر دقت کنید:[alfa@server]$ ls -ld /tmp/drwxrwxrwt. 15 root root 4096 Sep 22 15:28 /tmp/اگر از پوشە tmp دستور ls بگیرید با نتیجه فوق رو بە رو خواهید شد. مجموعه مجوز با حروف کوچک t مشخص می شود، جایی که x معمولاً امتیاز اجرا را نشان می دهد.برای تنظیم مجوزهای ویژه روی یک فایل یا دایرکتوری، می توانید از یکی از دو روشی که برای مجوزهای استاندارد در بالا ذکر شده است استفاده کنید: نمادی یا عددی.بیایید فرض کنیم که می خواهیم SGID را در پوشه Community_content تنظیم کنیم.برای انجام این کار با استفاده از روش نمادین، موارد زیر را انجام می دهیم:با استفاده از روش عددی، باید چهارمین رقم قبلی را در دستور chmod خود پاس کنیم. رقم استفاده شده مشابه ارقام مجوز استاندارد محاسبه می شود:[alfa@server]$ chmod g+s community_content/    شروع با 0  سطح دسترسی  SUID = 4 سطح دسترسی   SGID = 2سطح دسترسی sticky bit = 1در پایان، مجوزها برای اینکه یک مدیر مؤثر لینوکس باشید اساساً مهم هستند. دو روش تعریف شده برای تنظیم مجوزها با استفاده از دستور chmod وجود دارد: نمادین و عددی. ما نحو و محاسبات مورد نیاز برای هر دو روش را بررسی کردیم. همچنین مجوزهای ویژه و نقش آنها در سیستم را در نظر گرفتیم. اکنون که مجوزها و مفاهیم زیربنایی را درک کرده‌اید، می‌توانید خطای همیشه آزاردهنده Permission denied را هنگامی که سعی می‌کند مانع کار شما شود را حل کنید. همچنین از sticky bit نیز غافل نباشید تا در محیط های شبکەای اشخاص فایل ها یا دایرکتورهای شما را حذف نکنند.</description>
                <category>ABOBAKR MOSTAFANEJAD</category>
                <author>ABOBAKR MOSTAFANEJAD</author>
                <pubDate>Sun, 07 Jul 2024 12:50:08 +0330</pubDate>
            </item>
                    <item>
                <title>Docker inspector</title>
                <link>https://virgool.io/@alfaar7/docker-inspector-bgw4fjvthhuu</link>
                <description>چطوری نگاه ساده ای به کانفیگ کانتینر هایمان بر روی سرور،(بدون login) بیاندازیم ؟!!!همگی تقریبا با دنیای virtualization آشنایی داریم و حال نیز با لایه دوم، یا containerize کردن application های سمت سرور کار کرده ایم. docker امکان isolate کردن یک برنامه را در محیط سرویس دهنده به ما می دهد. و ما نیز از آن بهره می بریم.اما همانطور که مستحضر هستید، docker در محیط ترمینال اجرا شده و اگر قرار باشد شما به کانتینرهای اجرا شده تان دسترسی داشته باشید حتما باید قبل از آن، وارد سرور شده و از طریق cli خود docker از اوضاع آن با خبر شوید. خیلی از اوقات ما این شرایط برایمان فراهم نیست. یا به عنوان یک developer از environment variable های خود بر روی سرور آگاه نیستیم. همچنین دسترسی سرور به developer حتما باید از طریق تیم زیرساخت یا sysadmin ها باشد. سناریوی زیر ملموس تر است:فرض کنید شما یک برنامه نویس، ـــ در شرکتی با دارای اجزاء مختلف ـــ هستید. چندین پروژه در شرکت شما در حال توسعه است. شما تنها عضوی از توسعه دهندگان یکی از پروژه ها هستید و طبیعتا دارای چند stage بر روی git. در هنگام توسعه، پروژه شما توسط اتوماسیون زیرساخت (git lab) پس از commit و merge بر روی سرور به کانتینر تبدیل شده و به تناسب stage بر روی یکی از سرورهای شرکت قرار می گیرد. اما شما می خواهید از اطلاعات آن با خبر شوید، این درحالیست که باید حتما از طریق زیرساخت مراجعه کنید به log ها و environment هایتان، چون شما حتی از محیط سرور ها نیز آگاه نیستید.برای رفع چنین مشکلی ما یک پروژه بسیار کوچک و ناچیز برای docker توسعه دادیم. که در فاز اول بتواند فقط config کانتینرهای اجرا شده بر روی سرور را برای developerها سهل کند. زیرا مشکل مورد بحث یکی از چالش های developer های ما بود. شما می توانید با این پروژه به راحتی لیست کانتینر های اجرا شده بر روی سرور را داشته باشید و توسط id هر کدام از سایر اطلاعات آن با خبر شوید.پروژه به تازگی در Github انتشار داده شده است، و نحوه اجرا و استفاده از آن نیز در همانجا توضیح داده شده است. امیدواریم که دوستان و همراهان در توسعه آن خلاقیت داشته باشند و ما را از الطاف خود منع نکنند. بسیار خوشحال می شویم اگر در صورت نقد یا پیشنهاد حتما ما را باخبر کنند.لینک repo پروژه: https://github.com/ALFAar7/dockerinspectorمی توانید برای ارتباط بیشتر به ایمیل زیر نیز مطالب مورد پیشنهاد را بفرستید. ALFAar7@gmail.comبا تشکر از همراهیتان :-)</description>
                <category>ABOBAKR MOSTAFANEJAD</category>
                <author>ABOBAKR MOSTAFANEJAD</author>
                <pubDate>Sat, 18 Sep 2021 09:36:49 +0430</pubDate>
            </item>
                    <item>
                <title>بیاید راحت تر Virtual Machine درست بکنیم. اونم لینوکسی :)</title>
                <link>https://virgool.io/@alfaar7/%D8%A8%DB%8C%D8%A7%DB%8C%D8%AF-%D8%B1%D8%A7%D8%AD%D8%AA-%D8%AA%D8%B1-virtual-machine-%D8%AF%D8%B1%D8%B3%D8%AA-%D8%A8%DA%A9%D9%86%DB%8C%D9%85-%D8%A7%D9%88%D9%86%D9%85-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3%DB%8C-ljoemnnfsawb</link>
                <description>استفاده کردن از امکان مجازی سازی برای مهندسین نرم افزار، برنامه نویسان یا جامعه IT جزء واجبات است. تقریبا کمتر کسی پیدا می شود که از این ویژگی برای انجام کاری های آزمایشی خود و جلوبردن سناریو های آموزشی استفاده نکند.در این مقاله کوچک می خواهیم از سرویس Virtualization شرکت Canonical به نام Multipass رونمایی بکنیم و خیلی خلاصه وار نحوه اجرا کردن ماشین های مجازی با base image سیستم عامل Ubuntu را آموزش بدهیم.قبل از هر چیزی ما به نصب این سرویس در سیستم خود نیازمندیم. پس بریم که نصب کنیم.1) اگر از سیستم عامل ویندوز استفاده می کنید، می توانید اینجا نسخه ویندوزی را دانلود کنید.2) اگر از سیستم عامل مک استفاده می کنید، می توانید اینجا دانلود کنید.اما اگر مثل ما لینوکسی هستید می توانید به روش زیر آنرا نصب کنید:اگر distro هایی استفاده می کنید که package manager پیش فرض snap را دارا هستند. با دستور زیر Multipass نصب می شود:snap install multipassاگر snap  را ندارید آنرا به صورت زیر نصب کنید و پس از آن دستور بالا را اجرا نمایید.apt udpateapt install snapdحالا شما multipass را نصب نمودید. تبریک.اولین ماشین مجازی خود را بسازیمبا دستور زیر اولین ماشین مجازی شما ساخته خواهد شد:multipass launchتبریک عرض می کنیم شما به همین راحتی اولین ماشین مجازی خود را ساختید. اگر از دستور :multipass lsاستفاده کنید تصویر زیر را مشاهده خواهید کرد.با دستور زیر شما وارد ماشین مجازیتان خواهید شد:multipass shell &lt;name of your VM&gt;به همین سادگی، حال شما می توانید هنگام اجرای VM خود نام، آدرس آی پی و ... را تعین کنید که همگی پارامتر هایی هستند که بر روی سویچ های mutipass قابل استفاده هستند.سویچ های بالا، به شما در مدیریت ماشین های مجازیتان کمک خواهدن کرد. برای آموزش بیشتر و جزئیات آن می توانید به اینجا مراجعه کنید.امیدوارم که این مقاله مفید بوده باشد.</description>
                <category>ABOBAKR MOSTAFANEJAD</category>
                <author>ABOBAKR MOSTAFANEJAD</author>
                <pubDate>Tue, 22 Jun 2021 12:41:50 +0430</pubDate>
            </item>
                    <item>
                <title>Ansible with Virtualenv</title>
                <link>https://virgool.io/@alfaar7/ansible-with-virtualenv-zatmsj2pubkd</link>
                <description>مقدمهکسانی که در لایه Platform شرکت های IT قرار دارند، با نرم افزارهای automation آشنایی دارند. ansible یک ابزار automation برای manage کردن زیرساخت هایی با تعداد موارد مشابه بالاست (environment مشابه). مدل های زیادی برای setup کردن این نرم افزار بسیار قدرتمند وجود دارد. در این مقاله می خواهیم کوتاه و مختصر اجرای آن با virtualenv پایتون را شرح دهیم.ansibleVirtualenvبرای نصب، اگر لینوکسی هستید می توانید با package manager های خود لینوکس می توانید آن را نصب کنید:Debian/Ubuntu$ sudo apt install python3-pip$ pip install virtualenvRHEL/CentOS$ sudo yum install python3-pip$ pip install virtualenvپس از نصب برای اجرای آن با دستور زیر می توان، نسخه پایتون خود را به صورت isolate در پوشه خود اجرا کنید:$ virtualenv &lt;folder name&gt; -p &lt;python version&gt;در جایگاه &lt;folder name&gt; نام پوشه ای را که می خواهید compiler در آن قرار بگیرد خواهید نوشد.در جایگاه &lt;python version&gt; نام نسخه ای از پایتون که می خواهید با آن کار کنید را خواهید نوشد.برای مثال:$ virtualenv venv -p python3.8پس از ایجاد پوشه venv کامپایلر شما حاضر است. برای استفاده از آن از دستور زیر استفاده می کنیم:$ source venv/bin/activateحال شما در حال استفاده از پایتون نسخه ٣.٨ می باشید و هر moduleــی که با pip نصب خواهید کرد در آن پوشه قرار خواهد گرفت.Ansibleبرای نصب ansible از package manager خود پایتون استفاده می کنیم. با دستور زیر، ansible نسخه مورد نظر خود را نصب می کنیم:(venv)$ pip install ansible==2.10تبریک شما ansible خود را نصب نمودید. :)اما دلیل این کار چیست؟ شما با این روش می توانید cross platform در محیط های مختلف یا host های متفاوت، دقیقا همین ansible را استفاده کنید و تمامی playbook ها و role هایی که خواهید نوشت را صرفا با یک کپی ساده داشته باشید. با freeze کردن package ها توسط خود pip، تنها یک requirement.txt  و playbook های خود را حمل خواهید کرد.برای مطلاعه بیشتر این نرم افزار می توانید به سایت خود ansible مراجعه نمایید.امیدوارم این مطلب مفید واقع شده باشد و با نظرهاتون خوشحال میشم به بهتر شدن مطلب کمک کنید.</description>
                <category>ABOBAKR MOSTAFANEJAD</category>
                <author>ABOBAKR MOSTAFANEJAD</author>
                <pubDate>Sun, 14 Mar 2021 17:15:00 +0330</pubDate>
            </item>
                    <item>
                <title>Programmer&#039;s Vs Coder&#039;s</title>
                <link>https://virgool.io/@alfaar7/programmers-vs-coders-exth5jjzuxae</link>
                <description>تفاوت برنامەنویس ها و کدنویس هامقدمه پس از مدت های زیادی توجه به ساختار نقش ها در دنیای نرم افزار، به یک تفاوت در میان دو نقش رسیدم که اگر در دو طبقه بندی جدا از هم قرار گرفته می شد و نسبت به این دو نقش تصمیماتی برای انتخاب افراد-در شرکت های نرم افزاری - گرفته می شد، در اجرایی کردن پروژه های نرم افزاری تاثیر بسیاری در به وجود آمدن کیفیت حس می شد.در این نوشته می خواهیم از تفاوت میان برنامه نویس ها و کد نویس ها بنویسیم و با توجه به این دو نقش متفاوت، خودمان را با آن مقایسه کرده و در صورت قرار گرفتن در هر کدام از این دسته ها به تقویت تخصص خود بپردازیم و انتخاب و ادامه مسیرمان آگاهانه تر باشد. یک سوال مهم مطرح می شود که : دانستن این تفاوت چه کمکی به ما خواهد کرد ؟همانطور که مستحضر هستید، اگر دنیای علوم پزشکی را نگاهی بکنیم می بینیم که در ابتدا دکترهای چشم پزشک به صورت عمومی می توانستند در تمامی بیماری های مربوط به چشم نظراتی ارائه دهند و معالجه انجام بدهند فارغ از موفقیت آمیز بودن یا نبودن آن. اما در روزگار امروز ما متخصصانی ریزبین تر در همان حوزه داریم و با نام هایی چون متخصص قرنیه و متخصص شبکیه و امثال هم، آشنا هستیم. در این که این تفکیک ها و تخصص ها باعث بالا رفتن کیفیت کار شده است هیچ شکی نیست اما چندان برابر پیش عمق پیدا کرده است. حال در حوزه تکنولوژی و IT، نقش ها نیز به همین صورت هستند و هر چقدر که تفکیک های اساسی ایجاد بشود و دامنه تخصص ها بیشتر بشود باعث پیشرفت کار و بالا رفتن سطح کیفیت خواهد شد. برای همین خواستم که به نوبت خود این قدم کوچک را بردارم و کمکی به دانش آزاد کرده باشم. امیدوارم که نقص یا کوتاهی اگر در کلام بود با سعه صدر آن را ببخشید و در صورت ارائه نظر بر کمال این متن بیفزایید.در اصل این دو نقش برای ما، تنها دو انتخاب هستند و افضل بودن یکی از این نقش ها بر دیگری نیست و هدف مقایسه برای انتخاب بهترین، ما بین آن دو نیست. بلکه همانطور که تمامی انتخاب های ما صرفا انتخاب بوده و در صورت گذاشتن وقت و دادن بها و ارزش به آن، مثمر ثمر خواهد بود. این نوشته نیز در همین راستا است.برنامه نویس ها (Programmers)پس از ایجاد سخت افزارها مهندسان به فکر ایجاد ارتباط آسانتر میان خودشان و سخت افزار بودند به همین دلیل زبان های برنامه نویسی و برنامه های واسط مانند operating system ها به وجود آمد. زبان های برنامه نویسی دارای الگوریتم و ساختارهای بسیار حساب شده بود که خلق چهار چوب برای سخت افزار و کاربر را انجام می داد. برنامه نویس ها کسانی بودند که بسیار با ریاضیات آشنا بوده و الگوریتم ها و ساختارها را بسیار عمیق بلد بودند و سعی در رام کردن منطق دیجیتالی سخت افزار کاملا فیزیکی، به مفاهیم انتزاعی و برآورد کردن تمامی خواسته های فکری بودند. این رام کردن حتی به حوزه مکانیک نیز سرایت کرد و کسی چون آلن تورینگ با ماشینی مکانیکی توانست خواسته های ذهنی خود را برآورد سازد. همانطور که همه می دانیم خلق کامپیوتر برای حل مسئله بود و چگونگی آن میراثی ماند برای برنامه نویس ها. یعنی در اصل برنامه نویسان کسانی هستند که می توانند تجزیه و تحلیل بکنند و خالق ساختارها هستند.برنامه نویسان کسانی هستند که ساختار ها را برنامه ریزی کرده و برای مسئله ها راه حلی قابل اجرا دارند.فرایند حل مسئله برای برنامه نویس ها یعنی ایجاد راه حل حتی قبل از تهیه کردن keyboard برای نوشتن یک خط کد.برنامه نویس کسی است که یک زبان برنامه نویسی را مختص خود نمی داند و به یک زبان خاص وابسته نیست و نسبت به موقعیت راه حل،  یک زبان برنامه نویسی انتخاب می کند.لزوما برنامه نویس ها کسانی نیستند که در نوشتن کدها تبحر داشته باشند و با تمامی امکانات آن زبان آشنا باشند.برنامه نویس ها، بخش اعظم کار خویش را بهروری و performance بیشتر solution خود می دانند.مطالعه و تحقیق در مورد ساختار ها می تواند زمان زیادی از وقت یک برنامه نویس را به خود اختصاص دهد.ایجاد یک زبان برنامه نویسی می تواند خاتمه کار آنها و همچنین مدال طلای زمان خداحافظی آنها از دوران حرفه ای گریشان باشد.کدنویسان (Coders)بوی چوب و صدای اره بر آن، کسانی را سوق داده تا از آنها ساز سازانی معروف با سازهایی مهر خورده و تاریخ ساز بسازد، اما این هنرمندان لزوما نوازندگانی مشهور نیستند. نوازندگانی که آلبوم سه تار آنها، برایمان خاطره ساز بوده و آرامش شبهای ما را سازخته اند. یک نجار و اره به دست حرفه ای نیستند.یک راننده حرفه ای نیز یک مکانیک نیست و بلعکس. اوج اختلاف یک برنامه نویس و یک کدنویس را حال با این مثال ها می توان درک کرد. کدنویسان کسانی هستند که زبان برنامه نویسی حکم ابزار را داشته و تسلط بر آن تمام کار آنهاست. شناخت زبان، شناخت تمامی ماژول ها، کتابخانه ها و کاربرد های آن، کار یک کد نویس است.کد نویسان در زبانی انتخابیشان حقیقتا خوره هستند. تحلیل های دریافت کرده را با خلاقیت و قابلیت های زبانشان به صورتی کاملا بهینه پیاده سازی می کنند. آنها همانطور که از نقاط قوت و پیاده سازی آسان یک تحلیل آگاه هستند، از ضعف های زبان منتخبشان نیز آگاه هستند.سرفصل ها و فهرست و همچنین هدف یک کتاب را اگر برنامه نویسان در نظر بگیریم، متن بخش ها و توضیحات و نوشته ها را می توانیم کدنویسان بدانیم.تعصب بر یک زبان برنامه نویسی از ویژگی های بارز این افراد است. تغییر زبان و یادگیری یک زبان مانند یادگیری یک ابزار به آنها قدرت می دهد.و Syntax برای آنها تقریبا همه چیز است.همانطور که عرض کردیم هدف شناخت بهتر کاری است که می کنیم و تخصص یافتن در کارمان. اگر شما یک برنامه نویس هستید زبان های برنامه نویسی را صرفا برای فهم خود یادبگیرید در عوض تحلیل و سرعت پیدا کردن راه حل درست را در خودتان تقویت کنید و پیداه سازی کد و نوشتن آن و همچنین قابلیت ها و ویژگی های زبان ها را به کدنویسان و خوره های زبان ها بسپارید.به پایان آمد این دفتر حکایت همچنان باقیست                    به صد دفتر نشاید گفت حسب الحال مشتاقی؛سعدیابوبکر مصطفی نژاد مهندس نرم افزار و عضو زیرساخت کوباکبسیار خوشحال خواهم شد نظراتتان و نقدهای بسیار زیبایتان را با من به اشتراک بگذاریدAlfaar7@gmail.com</description>
                <category>ABOBAKR MOSTAFANEJAD</category>
                <author>ABOBAKR MOSTAFANEJAD</author>
                <pubDate>Fri, 20 Mar 2020 22:13:26 +0330</pubDate>
            </item>
            </channel>
</rss>