<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های ابوالفضل رمضانی</title>
        <link>https://virgool.io/feed/@abolfazlramazani86</link>
        <description>فعلا دانش آموز!!!? و همینطور برنامه نویس :)?</description>
        <language>fa</language>
        <pubDate>2026-06-07 17:15:10</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/1685684/avatar/ZbvAvt.png?height=120&amp;width=120</url>
            <title>ابوالفضل رمضانی</title>
            <link>https://virgool.io/@abolfazlramazani86</link>
        </image>

                    <item>
                <title>اوبونتو 22.04.... ســــــــــــــــــــــــــــــــــــــــــــــلام</title>
                <link>https://virgool.io/@abolfazlramazani86/%D8%A7%D9%88%D8%A8%D9%88%D9%86%D8%AA%D9%88-2204-%D8%B3%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%80%D9%84%D8%A7%D9%85-dt8efqlbvck7</link>
                <description>سلام به همگی!امروز بعد از چندین روز دوری از کیبورد در ویرگول اومدم تا احساسات خودم همین الان یهویی باهاتون به اشتراک بذارم!اول این عکس پایینو ببینین!?خب قضیه آشنایی با گنو/لینوکس از تقریبا یه سال پیش شروع شد! ?میدیدم که دوستان نادیده ام همش دارن از لینوکس و این چیز میزا حرف میزدن(منم که کنجکاو) رفتم ببینم که چی و طبق معمول مثل همه اعضای کهکشان لینوکس از اوبونتو شروع کردم!برای اولین بار رفتم که روی سیاره اوبونتو پا بذارم... ?و البته چون هنوز دستگاه تنفسی ام با هوای اونجا سازگار نبود مجبور بودم هر از چند گاهی برای تجدید قوا برگردم به ویندوز ?  یه روز که داشتم ویژگی های جدیدی از این سیاره رو کشف می کردم یهو صفحه پر از نوشته های عجیب اندر غریبی شد و بعدشم بوم... باید با اوبونتو خداحافظی می کردم! ? بعد از اون تلاش ناموفق دوباره برگشتم به زندگی روزمره توی ویندوز... گذشت و گذشت و گذشت(نه دیگه اینقد هام نگذشت!) که دوباره فیلمون یاد اوبونتو کرد ?این بار بیشتر مراقب بودم و به هر چیز و به هر جایی ناخونک نمی زدم ? کم کم وابستگی ام به ویندوز کم شد و الان هم تنها چیزی که هنوز هر از چندگاهی به ویندوز میکشونه نرم افزار های ادوبی هست!نسخه اوبونتوی که استفاده می کردم 20.04 بود و نسخه گنوم هم فکر می کنم 39تا وقتی که فیلم های معرفی اوبونتو 22.04 و گنوم 42 رو میدیدم و هر روز حسرت و حسرت و حسرت! ☹️ آمـــــا چند روز پیش وقتی سیستم رو روشن کردم دیدم که بعـــــــــــله بالاخره آپدیت اوبونتو واسه ما هم اومد و منم که از خدا خواسته گفتم برو که بریم!وستای آپدیت بعضی جاها همش به ارور میخورد و ... تا اینکه دیشب بالاخره بعد از 3 ساعت!!!چیه نکنه فکر کردین دیشب خواب راحت داشتم?!؟نه بابا آخرشم ارور داد و منم خسته و درمانده بی خیال آپدیت شدم و لپ تاپ رو خاموش کردم ⛔️ و امروز بعد از خوابی طولانی به صحنه ای عجیب مواجه شدم ?برخلاف تصورم اوبونتو 22.04 و گنوم 42 نصب شده بودند و آپدیت تکمیل شده بوده ?به محض دیدن صفحه لاگین و تغییرات گنوم اصلا در پوست خودم نمی گنجیدم و هر آن ممکن بود انفجاری درونی رخ بده! ? دوست داشتم از تک تک صفحات و امکانات و ریزه کاری های جدید عکس بگیرم و بفرستم برای کل عالم و بگم منم اینجام! ✋سلام اوبونتو 22.04</description>
                <category>ابوالفضل رمضانی</category>
                <author>ابوالفضل رمضانی</author>
                <pubDate>Sat, 10 Sep 2022 15:23:08 +0430</pubDate>
            </item>
                    <item>
                <title>سایت شخصی من و یه تشکر ویژه</title>
                <link>https://virgool.io/@abolfazlramazani86/%D8%B3%D8%A7%DB%8C%D8%AA-%D8%B4%D8%AE%D8%B5%DB%8C-%D9%85%D9%86-%D9%88-%DB%8C%D9%87-%D8%AA%D8%B4%DA%A9%D8%B1-%D9%88%DB%8C%DA%98%D9%87-l3wnn1cuc1dv</link>
                <description>سلام به همگی!!بالاخره بعد از سال ها تونستم سایت شخصی ام رو روی یه هاست رایگان آپلود کنم و این شما و این... https://abramazani.pythonanywhere.com/ باتشکر از AmirMohamd Poresmi بخاطر این پستشون(نجات دهنده بود!) https://virgool.io/captaincode/%DA%86%DA%AF%D9%88%D9%86%D9%87-%D9%87%D8%A7%D8%B3%D8%AA-%D8%B1%D8%A7%DB%8C%DA%AF%D8%A7%D9%86-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%A8%DA%AF%DB%8C%D8%B1%D9%85-d0xd1kt2dghx </description>
                <category>ابوالفضل رمضانی</category>
                <author>ابوالفضل رمضانی</author>
                <pubDate>Sat, 06 Aug 2022 21:02:23 +0430</pubDate>
            </item>
                    <item>
                <title>کتابخانه EEL - پایتون تنی به آب میزند!!</title>
                <link>https://virgool.io/@abolfazlramazani86/%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-eel-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%AA%D9%86%DB%8C-%D8%A8%D9%87-%D8%A2%D8%A8-%D9%85%DB%8C%D8%B2%D9%86%D8%AF-hygux0bvvygr</link>
                <description>سلام به همگی!امروز اومدیم با یه آموزش باحال و پایتونی...اول بریم سراغ معرفی این کتابخونه و بعدش هم بریم با یه پروژه باحال(اما ساده) اونو یاد بگیریم!!معرفی نامه:اگه فرانت کار باشین حتما در جاوا اسکریپت به الکترون برخوردید!!(شاید به نوترون و پروتون هم بربُخورید?)البته اگه سراغ ساخت اپ دسکتاپ رفته باشین!!خب الکترون چیه؟؟(ذره ای کوچک که در اطراف هسته اتم که در مدارهای خاصی می چرخد?)الکترون (جی اس) یه فریمورکه که میشه باهاش به کمک خانواده hcj(html , css , js) برنامه های دسکتاپ ساخت!!حالا یه عده بنده ی خدا اومدن شبیه این فریمورکو برای پایتون ساختند!!(با نام eel)به قول خودشون :A little Python library for making simple Electron-like HTML/JS GUI apps, with full access to Python capabilities and librariesاین کتابخونه میاد فایل های hcj شما رو در لوکال هاست اجرا می کنه...خب پس فرقش با سایت چیه؟میتونید بعد از پایان پروژه اون رو به صورت یک فایل اجرایی در بیاریدبه صورت لوکاله دیگه و نیاز به دسترسی به اینترنت نداره!!میتونید از پایتون در جاوا اسکریپت و از جاوا اسکریپت در پایتون استفاده کنیدمقدمه یا بهتره گفت دفاعیات سازنده از کتابخونه اش هم اینجا بخونید.خب توضیحات بسه بریم سراغ پروژه!!پروژه مون از این قراره که میخوایم از کاربر دو عدد بگیریم و بعد یه چنتا از اعمال ریاضی رو روشون انجام بدیم و روی صفحه نشون بدیم!!البته این اعمال ریاضی رو میشه داخل جاوا اسکریپت هم انجام داد اما ما میخوایم با پایتون انجام بدیم(در یه تابع) و ازش در جاوا اسکریپت استفاده کنیم!مرحله اول(نصب کتابخانه):آیا شما هم به آنچه می اندیشید که من می اندیشم؟؟pip install eelآما اگه میخواین از Jinja2 استفاده کنین باید کد زیر رو بزنین:pip install eel[jinja2]جناب Jinja2 یه کتابخونه است که میشه در HTML از پایتون استفاده کرد(اگه جنگو کار کرده باشین متوجه میشین چی میگم!!)مرحله دوم(ساخت فایل های لازم):خب ما به یه فایل پایتون احتیاج داریم و یه پوشه که داخل پوشه فایل های hcj قرار میگیره!!یعنی به این طور:نام ها اختیاری استمرحله سوم(نوشتن الزامات):الزامات یعنی همون چیزای اولیه ای که برای بالا اومدن یه صفحه سفید باید بنویسیم...الزامات پایتونی:توی پایتون باید کتابخونه رو بیاریم توی فایل و :import eel
eel.init(&amp;quotweb&amp;quot) # folder name
eel.start(&amp;quothome.html&amp;quot) # HTML file nameخب خط دوم اومدیم و نام پوشه ای که فایل هامون اونجاست رو دادیم بهش!!خط بعدی هم فایل اصلی(HTML)رو بهش میدیم!در اینجا میتونید اپشن هایی رو اضافه کنید که اینجا میتونید بخونید(چیزهایی مثل هاست و پورت و اندازه و ...)الزامات اچ تی ام الی:خب اینجا هم که تگ های پایه رو باید بنویسیم و دو سه فایلو وصل کنیم بهش:&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
    &lt;meta charset=&#039;utf-8&#039;&gt;
    &lt;title&gt;My app&lt;/title&gt;
    &lt;meta name=&#039;viewport&#039; content=&#039;width=device-width, initial-scale=1&#039;&gt;
    &lt;link rel=&#039;stylesheet&#039; type=&#039;text/css&#039; href=&#039;main.css&#039;&gt;
    &lt;script type=&amp;quottext/javascript&amp;quot src=&amp;quot/eel.js&amp;quot&gt;
&lt;/head&gt;
&lt;body&gt;
    
&lt;/body&gt;
&lt;script &gt;
&lt;/html&gt;خب اصل کاریا توی خطوط 7 و 8 و 13 هست:خط 7 که فایل css مون رو وصل کردیمخط 8 و 13 هم دو تا فایل js | خط 13 که فایل خودمونه اما خط 8 به قول خودشون:In addition to the files in the frontend folder, a Javascript library will be served at /eel.js.You should include this in any pagesمرحله چهارم(ساخت ویجت ها):خب  ما در صفحه مون یه h1 لازم داریم برای عنوان، دو تا input برای گرفتن ورودی و یه button و در نهایت یه p که نتیجه رو بندازیم اونجا&lt;h1&gt;New EEL app for mathematical actions&lt;/h1&gt;
&lt;div id=&amp;quotinputs&amp;quot&gt;
   First number : &lt;input type=&amp;quotnumber&amp;quot id=&amp;quotfn&amp;quot&gt;&lt;br&gt;
   Second number : &lt;input type=&amp;quotnumber&amp;quot id=&amp;quotsn&amp;quot&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;button id=&amp;quotbd&amp;quot&gt;Done&lt;/button&gt;
&lt;br&gt;
&lt;p id=&amp;quotresult&amp;quot&gt;&lt;/p&gt;(وسع ما در HTML در همین حده به بزرگیتون ببخشید??)(id ها رو برای این دادیم که در پشت صحنه باهاشون کار داریم =&gt; bd = button done و fn = first number و sn = second number)خب حالا هم یه چند تا خط css بهش اضافه می کنیم ببینیم چی میشه!!h1 {
    color: green;
    text-align: center;
}
button {
    display: block;
    margin: 0 auto;
}
hr {
    width: 30%;
}
#inputs {
    text-align: center;
}
#result {
    text-align: center;
}اینجا سعی مون بیشتر بر وسط چین کردن عناصر بود!!(hr رو درسته الان نداریم اما در ادامه می بینیم که داریم!!)مرحله پنجم(ساخت تابع و استفاده از آن در جاوا اسکریپت):خب ما اول به طور عادی تابع رو میسازیم:def action(fn, sn):
    fn, sn = int(fn), int(sn)
    result = f&amp;quot&amp;quot&amp;quot
    &lt;h4&gt;Result :&lt;/h4&gt;
    {fn} + {sn} = {fn+sn} &lt;br&gt;
    {fn} - {sn} = {fn-sn} &lt;br&gt;
    {sn} - {fn} = {sn-fn} &lt;br&gt;
    {fn} × {sn} = {fn*sn} &lt;br&gt;
    &lt;hr&gt;
    {fn} ÷ {sn} = {fn/sn} &lt;br&gt;
    Quotient of {fn} ÷ {sn} = {fn//sn} &lt;br&gt;
    Remainder of {fn} ÷ {sn} = {fn%sn} &lt;br&gt;
    &lt;hr&gt;
    {sn} ÷ {fn} = {sn/fn} &lt;br&gt;
    Quotient of {sn} ÷ {fn} = {sn//fn} &lt;br&gt;
    Remainder of {sn} ÷ {fn} = {sn%fn} &lt;br&gt;
    &lt;hr&gt;
    {fn}&lt;sup&gt;{sn}&lt;/sup&gt; = {fn**sn} &lt;br&gt;
    {sn}&lt;sup&gt;{fn}&lt;/sup&gt; = {sn**fn} &lt;br&gt;
    &amp;quot&amp;quot&amp;quot
    return resultاینجا خط دوم که اومدیم محض احتیاط ورودی ها رو int کردیم.بعد یه متغییر result تعریف  کردیم که متنمون داخلش نوشته شده(چون میخوایم اینو بندازیم توی صفحه نیازه  که به صورت HTML نوشته بشه البته اگه میخواین چیزی بهش اضافه کنین مثل : h4 یا br یا hr یا sup که sup بالانویس می کنه متن رو مثل توان)در نهایت هم اونو return کردیم!!حالا  که این تابع مون فقط در خود فایل پایتون قابل استفاده هست... برای اینکه بتونیم ازش در جاوا اسکریپت استفاده کنیم یه خط بالاش باید به صورت اضافه  کنیم:@eel.exposeاین یه تابعه که همونطور که از اسمش معلومه همه چیزو افشا می کنه!! برای کی؟؟ جاوا اسکریپت!!حالا میتونیم در فایل جاوا اسکریپتمون به صورت زیر ازش استفاده کنیم:eel.action(first value, second value)خب  حالا ما باید بگیم هر گاه روی دکمه کلیک شد مقادیر دو تا ورودی رو بگیره و  بده به این تابع و خروجی اش رو در صفحه نشون بدیم(همون تگ p)document.getElementById(&amp;quotbd&amp;quot). = function(){
    var fn = document.getElementById(&amp;quotfn&amp;quot).value;
    var sn = document.getElementById(&amp;quotsn&amp;quot).value;
    eel.action(fn, sn)(function(r){
        document.getElementById(&amp;quotresult&amp;quot) = r;
    })
}خب اینجا اومدیم خط اول برای دکمه یه رویداد در نظر گرفتیم که هر گاه کلیک شد مقدار روبه اش اجرا بشه!!در ادامه هم یه تابع تعریف کردیم که میاد مقدار ورودی اول و ورودی دوم رو میگیره!!حالا میرسیم به اصل کار!!اول اومدیم تابعی که در پایتون ساختیم رو اجرا صدا زدیم و بهش مقدار دادیم!! با این کار تابع اجرا میشه!!آمـــا وقتی که تابع خروجی داشته باشه(مثل تابع ما) چطور اونو بگیریم؟همونطور که می بینید بعد از صدا زدن تابع، یه تابع دیگه تعریف کردیم!این تابع کار گرفتن خروجی رو بر عهده داره و باز ورودی این تابع خروجی تابع پایتونی مون هست همون r بعدش هم innerHTML اون تگ p رو برابر با r گذاشتیم که اگه برنامه رو اجرا کنید:مرحله ششم(گذاشتن آیکون):خب برای گذاشتن آیکون برای برنامه فقط کافیه فایلی با نام favicon.ico در پوشه web بذارید!!با اجرا کردن فایل پایتون می بینید که عکس شما به عنوان آیکون قرار گرفته!مرحله هفتم(گرفتن خروجی exe):خب برای گرفتن فایل exe برای کتابخونه eel هم کم و بیش مثل tkinter هستابتدا:pip install pyinstallerو سپس به مکان فایل پایتون مراجعه کرده و کد زیر رو بزنید:python -m eel [file name] [folder name] --onefile --noconsole -i [icon]در قسمت [file name] نام فایل پایتون، در قسمت [folder name] نام پوشه ای که فایل های وب در آن قرار دارد و در قسمت [icon] هم آدرس آیکون را بدهید.اگر برنامه شما به کنسول نیاز ندارد noconsole-- را بزنید تا از شر کنسول راحت شوید...مثلا:python -m eel main.py web --onefile --noconsole -i c:\Users\username\Desktop\eel\web\favicon.icoپس از انجام کار ها توسط خود کتابخانه، فایل اجرایی صحیح و سالم در پوشه ای با نام dist قرار می گیرد!!کدهای پایتون:import eel

eel.init(&amp;quotweb&amp;quot)

@eel.expose
def action(fn, sn):
    fn, sn = int(fn), int(sn)
    result = f&amp;quot&amp;quot&amp;quot
    &lt;h4&gt;Result :&lt;/h4&gt;
    {fn} + {sn} = {fn+sn} &lt;br&gt;
    {fn} - {sn} = {fn-sn} &lt;br&gt;
    {sn} - {fn} = {sn-fn} &lt;br&gt;
    {fn} × {sn} = {fn*sn} &lt;br&gt;
    &lt;hr&gt;
    {fn} ÷ {sn} = {fn/sn} &lt;br&gt;
    Quotient of {fn} ÷ {sn} = {fn//sn} &lt;br&gt;
    Remainder of {fn} ÷ {sn} = {fn%sn} &lt;br&gt;
    &lt;hr&gt;
    {sn} ÷ {fn} = {sn/fn} &lt;br&gt;
    Quotient of {sn} ÷ {fn} = {sn//fn} &lt;br&gt;
    Remainder of {sn} ÷ {fn} = {sn%fn} &lt;br&gt;
    &lt;hr&gt;
    {fn}&lt;sup&gt;{sn}&lt;/sup&gt; = {fn**sn} &lt;br&gt;
    {sn}&lt;sup&gt;{fn}&lt;/sup&gt; = {sn**fn} &lt;br&gt;
    &amp;quot&amp;quot&amp;quot
    return result

eel.start(&amp;quothome.html&amp;quot)کد های HTML:&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
    &lt;meta charset=&#039;utf-8&#039;&gt;
    &lt;title&gt;My app&lt;/title&gt;
    &lt;meta name=&#039;viewport&#039; content=&#039;width=device-width, initial-scale=1&#039;&gt;
    &lt;link rel=&#039;stylesheet&#039; type=&#039;text/css&#039; media=&#039;screen&#039; href=&#039;main.css&#039;&gt;
    &lt;script type=&amp;quottext/javascript&amp;quot src=&amp;quot/eel.js&amp;quot&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;h1&gt;New EEL app for mathematical actions&lt;/h1&gt;
    &lt;div id=&amp;quotinputs&amp;quot&gt;
        First number : &lt;input type=&amp;quotnumber&amp;quot id=&amp;quotfn&amp;quot&gt;&lt;br&gt;
        Second number : &lt;input type=&amp;quotnumber&amp;quot id=&amp;quotsn&amp;quot&gt;
    &lt;/div&gt;
    &lt;br&gt;
    &lt;button id=&amp;quotbd&amp;quot&gt;Done&lt;/button&gt;
    &lt;br&gt;
    &lt;p id=&amp;quotresult&amp;quot&gt;&lt;/p&gt;
&lt;/body&gt;
&lt;script src=&amp;quotmain.js&amp;quot&gt;
&lt;/html&gt;کد های CSS:h1 {
    color: green;
    text-align: center;
}
button {
    display: block;
    margin: 0 auto;
}
hr{
    width: 30%;
}
#inputs {
    text-align: center;
}
#result {
    text-align: center;
}کد های JS:document.getElementById(&amp;quotbd&amp;quot). = function(){
    var fn = document.getElementById(&amp;quotfn&amp;quot).value;
    var sn = document.getElementById(&amp;quotsn&amp;quot).value;
    eel.action(fn, sn)(function(r){
        document.getElementById(&amp;quotresult&amp;quot) = r;
    })
}[منبع](واژه hcj یه سرواژه نویسی از HTML و CSS و JS بود!!)امیدوارم که این آموزش براتون مفید بوده باشه...لایک و کامنت یادتون نره!!تا کُدی دیگر خدانگهدار :)</description>
                <category>ابوالفضل رمضانی</category>
                <author>ابوالفضل رمضانی</author>
                <pubDate>Thu, 07 Jul 2022 11:13:07 +0430</pubDate>
            </item>
                    <item>
                <title>کتابخانه psutil در پایتون - دل و رودۀ رایانه رو بکش بیرون!!</title>
                <link>https://virgool.io/@abolfazlramazani86/%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-psutil-%D8%AF%D8%B1-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%AF%D9%84-%D9%88-%D8%B1%D9%88%D8%AF%DB%80-%D8%B1%D8%A7%DB%8C%D8%A7%D9%86%D9%87-%D8%B1%D9%88-%D8%A8%DA%A9%D8%B4-%D8%A8%DB%8C%D8%B1%D9%88%D9%86-xzkbs0xjih6a</link>
                <description>سلام به همگی!!در این پست میخوایم درباره کتابخونه ی psutil صحبت کنیم!(همونطور که در عنوان پست دیده میشه، کارایی اش مشخصه)یعنی از اطلاعات CPU و Memory تا اطلاعات Sensors رو بهتون میده!!اطلاعات کامل رو میتونید در اینجا(PyPI) و اینجا(Github) و اینجا(Read the Docs) ببینید!!خوبه بدونید این کتابخونه علاوه بر پایتون برای زبان های Go و C و Rust و Nim هم هست!!(حالا نمیدونم اونجا ها هم با نام کتابخونه می شناسن یا نه...)نکته خیلی جالب و باحال اینه که این کتابخونه(در پایتون) cross-platform هست یعنی میتونید در چندین سیستم عامل ازش استفاده کنید:LinuxWindowsmacOSFreeBSD, OpenBSD, NetBSDSun SolarisAIXخب از بحث معرفی بگذریم!!در این پست علاوه بر معرفی این کتابخونه باحال میخوایم یه کارایی کاربردی اش رو با هم ببینیم!!اونم چیزی نیست جز؟جز؟جز؟ نمایش اطلاعات باتری(میزان شارژ و ...)خب شروع می نماییمَش:مرحله اول(نصب کتابخانه):خب!! خب که خب؟؟pip install psutilمرحله دوم(وارد کردن کتابخانه و دریافت اطلاعات اولیه):خب پس از خان اول میرسیم به اینجا که کتابخونه رو بندازیم تو فایل خودمون:import psutilبعدش هم به دریافت اطلاعات می پردازیم!!(باتری یه نوع سنسور محسوب میشه در این کتابخونه)battery = psutil.sensors_battery()اینجا ما اومدیم اطلاعات باتری رو ریختیم داخل متغیر battery و حالا اگه اونو print کنیم چی می بینیم؟&gt;&gt;&gt; print(battery)
# output:
sbattery(percent=62, secsleft=&lt;BatteryTime.POWER_TIME_UNLIMITED: -2&gt;, power_plugged=True)در اینجا percent میزان شارژ، secsleft زمان تا پایان شارژ رایانه و power_plugged هم برای اینه که آیا رایانه توی شارژ هست یا نه!حالا زمانی که من این دستور رو زدم شارژم 62 درصد بوده و رایانه در حال شارژ هستش!!این نکته رو هم در نظر داشته باشین که وقتی رایانه به شارژ باشه زمان پایان شارژ رو نشون نمیده دیگه(آخه چطور رایانه در حال شارژ میخواد شارژش تموم شه!!)اگه رایانه در شارژ باشه &lt;BatteryTime.POWER_TIME_UNLIMITED: -2&gt; رو در خروجی می بینید!!حالا من شارژر رو جدا می کنم خروجی میشه اینجوری:&gt;&gt;&gt; print(battery)
# output:
sbattery(percent=68, secsleft=4294967295, power_plugged=False)این بار می بینید که secsleft عوض شد و تبدیل به یک عدد شد!!(در ادامه میگم چطور اینو مثل یه زمان درست حسابی کنین) و همینطور power_plugged هم شد Falseمرحله سوم(تمیز کردن کد):خب منظور از تمیز کردن، اینه که برای هر داده یک متغیر بذاریم و یکم کد رو زیباتر کنیم:import psutil
battery = psutil.sensors_battery()

Battery_percentage = &amp;quotBattery percentage : &amp;quot + str(battery.percent) + &amp;quot%&amp;quot
Power_plugged = &amp;quotPower plugged : &amp;quot + str(battery.power_plugged)
Battery_left = &amp;quotBattery left : &amp;quot + str(battery.secsleft)اینجا در متغیر Battery_percentage ابتدای میزان شارژ یه Battery percentage و آخرش هم یه علامت % اضافه کردیمبقیه هم که معلومه!!مرحله چهارم(تبدیل زمان داده شده به زمان معمولی):اگه دقت کرده باشین فرمت زمانی که خود کتابخونه بهمون میده به ثانیه است!!یعنی ساعت و دقیقه (+ثانیه) رو به ثانیه تبدیل میکنه!!پس ما باید اونو یه مرحله ببریم عقب(یعنی ساعت و دقیقه و ثانیه رو جدا کنیم)برای اینکه کد زیبا تری داشته باشیم این کار رو در یک تابع انجام میدیم:def convertTime(seconds):
    minutes, seconds = divmod(seconds, 60)
    hours, minutes = divmod(minutes, 60)
    return &amp;quot%d:%02d:%02d&amp;quot % (hours, minutes, seconds)اینجا تابع ما یه ورودی میگیره که اونم ثانیه است!!در خط بعدی ما اومدیم در یک خط دو متغیر رو مقدار دهی کردیم(این یکی از ویژگی های باحال پایتونه) و مقدارشون هم با divmod مشخص شده!!جناب divmod یک تابع خیلی باکلاس و شیکه که به صورت پیش فرض در خود پایتون هست!!این تابع دو ورودی میگیره که میاد ورودی اول رو بر ورودی دوم تقسیم می کنه و سپس در یک تاپل به ترتیب خارج قسمت و باقی مانده رو بر می گردونه یعنی اینجوری:# divmod output:
(Quotient, Remainder)حالا در خط اول کد خودمون، تابع، مقدار ثانیه(ورودی اول) رو تقسیم بر 60(ورودی دوم) می کنه و خارج قسمت رو به عنوان دقیقه و باقی مانده رو به عنوان ثانیه قرار میده!!(همونطور که همه ی ما در تبدیل ثانیه به دقیقه انجام میدیم)بعدش در خط دوم کد، تابع مقدار دقیقه(ورودی اول) رو تقسیم بر 60(ورودی دوم) می  کنه و خارج قسمت رو به عنوان ساعت و باقی مانده رو به عنوان دقیقه قرار میده!!(همونطور که همه ی ما در تبدیل دقیقه به ساعت انجام میدیم)در نهایت در خط اخر تابع خودمون، میایم با دستور return مقدار جلوشو بر می گردونیم که مقدار جلوش:&amp;quot%d:%02d:%02d&amp;quot % (hours, minutes, seconds)هست!!(این یه طریقه برای نوشتن ساعت:دقیقه:ثانیه هست)خب حالا این تابع رو خیلی ساده میندازیم توی کدمون:import psutil

def convertTime(seconds):
    minutes, seconds = divmod(seconds, 60)
    hours, minutes = divmod(minutes, 60)
    return &amp;quot%d:%02d:%02d&amp;quot % (hours, minutes, seconds)

battery = psutil.sensors_battery()

Battery_percentage = &amp;quotBattery_percentage : &amp;quot + str(battery.percent) + &amp;quot%&amp;quot
Power_plugged = &amp;quotPower_plugged : &amp;quot + str(battery.power_plugged)
Battery_left = &amp;quotBattery_left : &amp;quot + convertTime(battery.secsleft)اگه دقت کرده باشین خط اخر کد یه تکونی خورد:از:Battery_left = &amp;quotBattery left : &amp;quot + str(battery.secsleft)به:Battery_left = &amp;quotBattery left : &amp;quot + convertTime(battery.secsleft)تبدیل شد و دلیلش رو هم که قطعا می دونید!!خب این آموزشمون هم تموم شد...امیدوارم که براتون مفید بوده باشه!لایک و کامنت یادتون نره D:تا کُدی دیگر خدانگهدار :)</description>
                <category>ابوالفضل رمضانی</category>
                <author>ابوالفضل رمضانی</author>
                <pubDate>Tue, 05 Jul 2022 14:32:52 +0430</pubDate>
            </item>
                    <item>
                <title>معرفی چند افزونه برای PyCharm</title>
                <link>https://virgool.io/@abolfazlramazani86/%D9%85%D8%B9%D8%B1%D9%81%DB%8C-%DA%86%D9%86%D8%AF-%D8%A7%D9%81%D8%B2%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D8%A7%DB%8C-pycharm-t8so4tbtm3gd</link>
                <description>pycharmسلام به همگی!امروز اومدیم با معرفی چند افزونه باحال از پایچارم  که حداقل یکیشون به دردتون میخوره!(البته بیشتر افزونه ها با سایر محصولات JetBrains یکی هست)خب آماده اید؟اول میریم سراغ آموزش اینکه اصلا چطور در محصولات JetBrains افزونه نصب کنیم!خب این یک کار بسیار ساده هست!شما اول باید وارد تنظیمات IDE بشین که برای اینکار دو راه وجود داره!1-از منوی بالای صفحه گزینه File و سپس Settings رو انتخاب کنین!2-از کلید های ترکیبی Ctrl+Alt+S استفاده کنید.وقتی تنظیمات باز شد از گزینه های سمت چپ Plugins برین و در قسمت بالا در مکانی که نوشته:Type / to see optionsجستجو کنین(من در حال حاضر از نسخه 2022.1 استفاده می کنم)!!بعد از جستجو در پایین این قسمت لیست افزونه هایی رو که پیدا کرد رو میاره.شما می تونین با انتخاب هر افزونه در سمت راستش اطلاعاتی درباره اون(مثل حجمش و تعداد کاربرهایی که نصب کردند و ...)و تصاویر و گیف هایی از کاربردش و ... داشته باشین.شما  میتونین با زدن روی دکمه Install این افزونه رو نصب کنین و بعد ازتون  میخواد خارج و دوباره وارد بشین(همون Restart خودمون) که اگه اون دکمه رو  بزنین خودش می بنده و دوباره باز میشه و میبینین که چقدر ساده و راحت !!!توجه  کنین در سمت راست ،ابتدای توضیحات هر افزونه گزینه ای وجود داره با عنوان  Plugin homepage که با کلیک روی این گزینه هدایت میشین به صفحه مخصوص اون  افزونه در سایت جت برینز که میتونین اطلاعات دقیق تری رو داشته باشین!- به همراه نظرات کاربران...{{از من به شما نصیحت اول همه افزونه هایی که میخواین رو نصب کنین بعد ریستارت کنین در غیراین صورت مجبورین تک تک برای هر افزونه ریستارت کنین و خیلی روی مُخ میتونه باشه}}بریم سراغ معرفی...1-Material Theme UI:یکی  از معروفترین افزونه های جت‌برینز که شامل تم های متریال زیادی هست و  قابلیت‌های زیادی برای شخصی سازی محیط توسعه داره و حجمش هم 5/95 مگابایت هست!!وقتی پس از نصب این افزونه ریستارت کردین صفحه خوش آمدگویی این افزونه باز میشه!!(فقط برای اولین بار)و بعدش یک صفحه ای میاره که باید یک تم پیش فرض رو انتخاب کنین و بعضی ظرافت کاریای دیگه که میتونین تغییر بدین...همچنین در تسک باز نرم افزار گوشه سمت راست میتونین تم رو عوض کنین!(من خودم از تم گیت هاب دارک استفاده می کنم)پ.ن : {{توجه  کنید عددی که جلوی آیکون دانلود نوشته میزان کاربرانی است که این افزونه رو نصب کردند نه حجم اون!!مثلا اینجا 12 میلیون نفر تقریبا نصب کردند}}2-Rainbow Brackets:این افزونه هم به زیبایی کدتون کمک می کنه و هم کمک می کنه توی پرانتز های تو در تو گم نشین و حجم کمی داره فقط 244/26 کیلوبایت...در قسمت توضیحات این افزونه میتونین چندتا مثال از این رو ببینین!قابل ذکره که این افزونه علاوه بر پایتون چند زبان دیگه رو هم ساپورت می کنه!3-Atom Material Icon:اگه از آیکون های پیش فرض IDE خسته شدین این افزونه مخصوص شماست! با این افزونه میتونین آیکون های IDE رو شبیه به ادیتور Atom کنین!این افزونه از آیکون فایل هاتون گرفته تا سایر آیکون های به کار رفته در IDE رو عوض می کنه و نقش زیبایی به IDE تون میده!4-Background Image Plus:با این افزونه می تونین عکس پس زمینه برای محیط این IDE قرار بدین + حجم بسیار پایینی که داره 39/43 کیلوبایت!{{خب اینجا بد نیست به این سایت سر بزنین!! عکس های خوبی برای پس زمینه داره}}5-Grep Console:برای کاربرانی که روی اسکریپت های پایتون کار می کنند و خروجی زیادی تولید می  کنند ، فیلتر کردن خروجی مورد نیاز در کنسول آنها پیچیده می شود. از این رو ، Grep Console به شما کمک می کند تا نتایج آسانتر را بر اساس شرایط تعیین  شده فیلتر کنید تا اشکال زدایی آسان تر و بدون دردسر باشد.حجم این افزونه هم 4/77 مگابایت می باشد!از ویژگی های آن می توان به موارد زیر اشاره کرد:تغییر رنگ متن متناسب.خروجی تعیین شده را در یک تب کنسول جدید باز کنیدبا استفاده از هر پلاگین دیگری خروجی را تغییر دهیدکنسول را پاک کنیدهر قسمت از کد را که می خواهید برجسته کنیدخطوط ناخواسته کد را فیلتر کنیدصدها خط کد را از طریق فیلتر آسان و گزینه های برجسته سازماندهی کنید.6-Key Promoter X:برای توسعه دهندگان و برنامه نویسان ، استفاده از صفحه کلید بسیار قابل توجه  است. بعلاوه ، در بعضی مواقع ، استفاده از IDE از طریق ماوس کمی خسته کننده  می شود. این افزونه PyCharm میانبرهای مختلف صفحه کلید را برای ایجاد  کدگذاری سریع ، استرس کمتر و فاقد کار یکنواخت ماوس به ارمغان آورده است.  پس از بارگیری افزونه ، Key Promoter X لیستی از میانبرهای دکمه های صفحه  کلید را به شما نشان می دهد. جالب اینجاست که می توانید برای کلیدهایی که  فاقد کلیدهای میانبر هستند نیز میانبر ایجاد کنید.حجم این افزونه کاربردی تنها 51/47 کیلوبایت است.7-String Manipulation:دستکاری  متن در حین صف های طولانی کد ، گاهی بسیار گیج کننده می شود. برای این  منظور، این پلاگین، String Manipulation به تبدیل حروف کوچک به حروف بزرگ و بالعکس کمک می کند با آنکه فقط 1/47 مگابایت حجم دارد!علاوه بر این ، همچنین گزینه هایی برای دستکاری متن دیگر دارد ، از جمله:تغییر  حالت: camelCase و kebab-lowercase و KEBAB-UPPERCASE و dot case و words  lowercase و snake_case و SCREAMING_SNAKE_CASE و First-word  capitalization  و Words و Capitalizes  و Pascal Case.بزرگ کردنمورد وارونهاز پایین به بالا و بالعکس تغییر دهیدرمزگذاری و رمزگشایی به قالب های مختلفاعداد افزایش و کاهشمعکوسبر زدنموارد را مرتب کنید و متون زیر مجموعه را انتخاب کنیدمتن را تراز کنیدفضاها و متن ناخواسته را کوتاه کنیدموارد تکراری را حذف کنیدخطوط اضافی / خالی را حذف کنید8-Save Actions:نام همه چیز را می گوید. این افزونه باورنکردنی مسئولیت ذخیره پرونده ها را بر عهده دارد ، مجموعه ای از اقدامات مربوط به واردات و اصلاح آنها را برای سهولت کار برای آنها انجام دهید. از ویژگی های آن می توان به موارد زیر اشاره کرد:واردات خود را بهینه کنیدچندین فایل را اجرا کنیدتنظیم مجدد کدهااصلاح مجدد کدهابر روی ذخیره پرونده ها و میانبرها اجرا کنیدپرونده ها را با پشتیبانی regex تهیه کنیدروی هر نوع پرونده مانند Python ، Java و XML کار می کند.سازگار با IntelliJ IDEA ، PHPStorm ، Android Studio ، RubyMine و CLion غیر از PyCharm.همه این امکانات با 102/02 کیلوبایت!!9-Ace Jump:این یک افزونه عالی برای افزایش بهره وری شما در هنگام نوشتن ، اجرای و  رفع اشکال کدها در PyCharm است. این افزونه اجازه می دهد تا بدون استفاده از ماوس ، قفسه را به هر موقعیت خاص منتقل یا تغییر مکان دهید. می توانید آن را به  هر موقعیتی که در ویرایشگر کار می کنید ، هدایت کنید. فقط کلیدهای &#x27;ctrl  +؛&#x27; را فشار دهید و یک کاراکتر تایپ کنید و سپس هر کاراکتر منطبق را بر روی  Ace Jump تایپ کنید.این افزونه کاربردی با حجم 429/25 کیلوبایت!!10-Nyan Progress Bar:یک افزونه مفید که سابقه پیشرفت شما با گربه nyan را ثبت می کند تا IDE شما کمی جالب باشد.پایچارم خود را با 62/86 کیلوبایت جالب کنید...خب امیدوارم این مقاله براتون مفید بوده باشه!اگه از افزونه دیگه ای استفاده می کنین که در این مقاله نیست اما فکر می کنین مفیده حتما در کامنتا بیان کنین!لایک،کامنت و فالو!!{{منتظریم}}خدانگهدار :)</description>
                <category>ابوالفضل رمضانی</category>
                <author>ابوالفضل رمضانی</author>
                <pubDate>Sat, 02 Jul 2022 16:19:46 +0430</pubDate>
            </item>
                    <item>
                <title>اجرا شدن اسکریپت پایتون هنگام روشن شدن رایانه</title>
                <link>https://virgool.io/Rocket/%D8%A7%D8%AC%D8%B1%D8%A7-%D8%B4%D8%AF%D9%86-%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%BE%D8%AA-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D9%87%D9%86%DA%AF%D8%A7%D9%85-%D8%B1%D9%88%D8%B4%D9%86-%D8%B4%D8%AF%D9%86-%D8%B1%D8%A7%DB%8C%D8%A7%D9%86%D9%87-pcmb0j6w6b58</link>
                <description>سلام به همگی!!امروز اومدیم با یه اسکریپت باحال و در برخی موارد خطرناک⛔(ما از ازش استفاده خطرناک نمی کنیم!)میخوایم  یه کاری کنیم که زمانی که ویندوز بالا اومد این اسکریپتمون هم اجرا بشه یعنی خودش روش دابل کلیک کنه!!(توجه کنین در حالت های sleep و hibernate کار نمی کنه)خب بگذریم...برای اینکار دو راه هست:1-استفاده از پوشه Startup2-استفاده از Registry ویندوزروش اول ساده تر هست اما روش دوم باید با رجیستری آشنا باشین!قطعا راه سخت تر مطمئن تره!چون فکر کنم آدرس پوشه Startup در ویندوز های مختلف تفاوت داره و اینجوری شاید به هدفتون نرسین!مرحله اول(هدف):هدفمون اینه یه اسکریپتی بنویسیم که وقتی ویندوز بالا اومد یه بوق ممتد بزنه!برای زدن بوق هم به تابع Beep نیاز داریم که از winsound میاریمش داخل برنامه!from winsound import Beepمرحله دوم(نوشتن اسکریپت بوق زدن):خب این تابع Beep دو تا ورودی میگیره:1-فرکانسش(بین 37 تا 32767 هرتز)2-زمانش(بر حسب میلی ثانیه)خب میگیم در زمان 30 ثانیه یعنی 30000 میلی ثانیه یه صدایی با فرکانس 1500 رو پخش کن!این شکلی:from winsound import Beep
Beep(1500, 30000)مرحله سوم(استفاده از روش اول):خب در ویندوز یه پوشه ای هست به نام Startup که هر چی اونجا باشه رو خودکار باز می کنه!انگار داره روشون دابل کلیک می کنه!پس ما باید بیایم فایلمون رو بندازیم توی این پوشه!برای پیدا کردن این پوشه دکمه های Windows+R رو بگیرین و در پنجره ای که باز میشه عبارت shell:startup رو بزنین و ok:آدرس این پوشه در ویندوز های جدید معمولا اینه:C:\Users\USERNAME\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startupاینجا ویندوز در درایو C نصب شده و به جای USERNAME هم نام کاربری خودتون رو قرار میدین!خب ما باید فایلمون رو در این پوشه قرار بدیم یعنی کپی کنیم در این پوشه || چجوری؟با shutilimport shutilکتابخونه های دیگری برای کپی هستن ولی ما از همین shutil استفاده می کنیم!و برای گرفتن نام کاربری مخاطب از تابع getuser استفاده می کنیم:from getpass import getuserخب بریم برای کپی:username = getuser()
startup = f&amp;quotC:/Users/{username}/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup&amp;quot
shutil.copy(__file__, startup)خب در خط اول اومدیم نام کاربری رو گرفتیم!بعدش آدرس پوشه Startup رو ریختیم در متغیر startupاینجا از f string استفاده کردیم!در خط آخر هم از تابع copy در کتابخونه shutil استفاده کردیم.در ورودی اول ادرس فایل جاری رو دادیم!جناب __file__ زحمت دادن آدرس این این فایل رو میکشن و نیاز نیست با کارای دیگه خودمون آدرس فایل جاری رو بگیریم!در ورودی بعدی هم آدرس پوشه ای که فایل میخواد بره اون جا رو دادیم!الان شما هر وقت رایانه رو روشن کنین این صدای آزار دهنده رو میشنوید!{{درسته  این کد ضرر نرم افزاری نداره یعنی مثلا فایلی حذف نمی کنه یا ... ولی  مخاطب وقتی بخواد 30 ثانیه این صدای داغون کننده رو تحمل کنه میزنه کل  رایانه رو داغون میکنه تا قطع شه!?}}و کد نهایی این قسمت میشه این:from getpass import getuser
import shutil
from winsound import Beep

username = getuser()
startup = f&amp;quotC:/Users/{username}/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup&amp;quot
shutil.copy(__file__, startup)
Beep(1500, 30000)مرحله چهارم(استفاده از روش دوم):خب این روش نیاز داره که درباره رجیستری ویندوز بدونین!رجیستری یه پایگاه داده برای سیستم عامله!همه کانفیگ ها، تنظیمات، پسورد ها و ...... همه و همه اینجا هستن(از گنجم با ارزش تره)رجیستری بر اساس معماری Key/Value کار میکنه!یعنی چند کلید داره مثل چندین پوشه که توی دیسک هستن و هر کلید چند مقدار داره مثل فایل هایی که داخل پوشه هستن!باحال شد ! نه؟{{میخوام بخونم}}خب توی این دنیای رجیستری کلیدی هست با آدرس :HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Runکه هر مقداری توش اضافه کنیم با سطح دسترسی administrator اجرا میشه!پس ما باید یک مقدار در این کلید بسازیم و فایلمون رو بذاریم اونجا!برای اینکار به کتابخونه winreg نیاز داریم!import winreg as regو بریم سراغ گذاشتن فایلمون در این کلید:key = reg.OpenKey(reg.HKEY_CURRENT_USER, &amp;quotSoftware\Microsoft\Windows\CurrentVersion\Run&amp;quot, 0, reg.KEY_ALL_ACCESS)
reg.SetValueEx(key ,&amp;quotfile&amp;quot , 0 , reg.REG_SZ , __file__)
reg.CloseKey(key)خب این کدها برای کتابخونه winreg و رجیستری هست که برای خوندن درباره winreg بزنین اینجا!ولی اگه بخوام کلی توضیح بدم در خط اول کلید رو باز کردیم!بعدش گفتیم یه مقدار رو ست کن با اسم file و دیتای آدرس فایلمون!و در نهایت هم ببند!و اگه الان برین در منوی استارت جستجو کنین:Registry Editorو بازش کنین میتونین تمامی رجیستری و دیگه کُلُّهُم اَجمَعین ویندوز رو ببینین!در نوار بالا آدرس کلید موردنظر رو وارد کنین و در سمت راست می تونین لیست مقدار هاش رو ببینینما اینجا اومدیم یک مقدار با نام file ساختیم پس اگه آدرس کلیدمون رو بزنیم باید file رو ببینیم!کد نهایی این روش:import winreg as reg
from winsound import Beep

key = reg.OpenKey(reg.HKEY_CURRENT_USER, &amp;quotSoftware\Microsoft\Windows\CurrentVersion\Run&amp;quot, 0, reg.KEY_ALL_ACCESS)
reg.SetValueEx(key ,&amp;quotfile&amp;quot , 0 , reg.REG_SZ , __file__)
reg.CloseKey(key)

Beep(1500, 30000)خب اگه شما یک بار این اسکریپت ها رو اجرا کنین فایل میره در قسمت موردنظر و بعد از بالا آومدن ویندوز اجرا میشن!شاید برای این اسکریپت ذهنمون بره سمت ویروس نویسی و اسکریپت های مخرب اما میشه از این قابلیت استفاده های درست هم کرد!خب امیدوارم براتون مفید باشه!تا کُدی دیگر خدانگهدار :)</description>
                <category>ابوالفضل رمضانی</category>
                <author>ابوالفضل رمضانی</author>
                <pubDate>Thu, 23 Jun 2022 15:02:46 +0430</pubDate>
            </item>
                    <item>
                <title>سلام ویرگول!</title>
                <link>https://virgool.io/@abolfazlramazani86/%D8%B3%D9%84%D8%A7%D9%85-%D9%88%DB%8C%D8%B1%DA%AF%D9%88%D9%84-rbjmt4afk4eq</link>
                <description>بسم الله الرحمان الرحیممن ابوالفضل رمضانی هستم و این اولین نوشته ام توی ویرگوله!عاشق برنامه نویسی ام و پایتون کار می کنم! تو حوزه های بک اند و ساخت نرم افزار دسکتاپ!?شروع تعطیلات رو هم به دانش آموزان(مخصوصا برنامه نویساشون) تبریک میگم??اومدنم به ویرگول برای علاقه ام به نوشتن بود!!⌨گفتم بیام و چیزایی که میدونم رو به اشتراک بذارم!امام صادق(ع) فرموده اند : « إنَّ لِکُلِّ شَیءٍ زَکاةً ، وزَکاةُ العِلمِ أن  یُعَلِّمَهُ أهلَهُ . » (هرچیزى ‏زکاتى دارد و زکات دانش، آموختن آن است به اهلش)مطالبم بیشتر درباره کتابخونه ها و اسکریپت های باحال پایتونی خواهد بود...? البته شاید مابین به جاهای دیگه هم گریزی داشته باشم!امیدوارم مطالبم براتون مفید باشه!خدانگهدار تا یه پست باحال برنامه نویسی :)</description>
                <category>ابوالفضل رمضانی</category>
                <author>ابوالفضل رمضانی</author>
                <pubDate>Wed, 22 Jun 2022 16:15:58 +0430</pubDate>
            </item>
            </channel>
</rss>