<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های گیکی</title>
        <link>https://virgool.io/feed/@geeky</link>
        <description>یک کنجکاو و علاقه مند به علوم کامپیوتر از برنامه نویسی تا سخت افزار و شبکه و...</description>
        <language>fa</language>
        <pubDate>2026-06-18 07:04:12</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/2963759/avatar/sEPNVt.png?height=120&amp;width=120</url>
            <title>گیکی</title>
            <link>https://virgool.io/@geeky</link>
        </image>

                    <item>
                <title>مبارزه با کامنت اول؛ ماجرای یه یوزربات سرسخت که قرار نبود ساخته بشه!</title>
                <link>https://virgool.io/@geeky/%D9%85%D8%A8%D8%A7%D8%B1%D8%B2%D9%87-%D8%A8%D8%A7-%DA%A9%D8%A7%D9%85%D9%86%D8%AA-%D8%A7%D9%88%D9%84-%D9%85%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C-%DB%8C%D9%87-%DB%8C%D9%88%D8%B2%D8%B1%D8%A8%D8%A7%D8%AA-%D8%B3%D8%B1%D8%B3%D8%AE%D8%AA-%DA%A9%D9%87-%D9%82%D8%B1%D8%A7%D8%B1-%D9%86%D8%A8%D9%88%D8%AF-%D8%B3%D8%A7%D8%AE%D8%AA%D9%87-%D8%A8%D8%B4%D9%87-tmwilc86tm5h</link>
                <description>چند ماه پیش بود که بعد از مدت‌ها دوباره برگشتم به پایتون تا یه برنامه بنویسم. ولی خب، همون‌طور که انتظار می‌رفت، دیدم هیچی یادم نیست! 🤦‍♂️ با خودم گفتم: &quot;بیخیال، این کارِ من نیست&quot; و کلاً کنار کشیدم...تا اینکه چند هفته بعد، یکی از دوستام یه پیام برام فرستاد! 😏اون موقع داشتم به این فکر می‌کردم که چون قبلاً یه ربات ساختم، پس دوباره می‌تونم انجامش بدم. ولی نمی‌دونستم که دوستم یه &quot;یوزربات&quot; می‌خواد، نه یه &quot;ربات&quot;! 😐هیچ ایده‌ای نداشتم! اولین فکری که به ذهنم رسید، استفاده از Pyautogui بود، ولی کلی مشکل داشت. بعدش به Selenium فکر کردم، اما در نهایت دوستم یه کتابخونه‌ی مخصوص این کار معرفی کرد: Telethon! 🤩از اونجایی که به نظرم کار خفنی می‌اومد و کلی چیز می‌شد ازش یاد گرفت، قبول کردم!فرداش دست به کار شدم. رفتم توی سایت MyTelegram، اطلاعات رو کپی کردم، وارد Colab شدم و با کمک دوستای قدیمی‌مون (هوش مصنوعی + سرچ‌های گوگل 😆) تونستم کد اولیه رو بنویسم.یکی از دوستام که این اواخر خیلی صمیمی شده بودنتیجه محشر بود! 🤯 کد انقدر خفن شد که رسماً مغزمون سوت کشید! 🚀🔥توی تست هایی که از ربات گرفتیم، خوش درخشید!توی تست واقعی هم درخشید!برنامه چی بود؟ ارسال اولین کامنت! 🎯شاید فکر کنید واسه قدرت‌نمایی این کارو کردیم، ولی نه! یه دلیل تبلیغاتی پشتش بود.کد اولیه خیلی ساده بود؛ باید گروه‌ها و کانال‌ها رو دستی بهش معرفی می‌کردیم و فقط یه پیام می‌فرستاد. کم‌کم با همفکری دوستم بهش قابلیت اسپویل اضافه کردیم، بعدش لیست متن‌های ارسالی رو بیشتر کردیم و یه تایمر هم بهش زدیم! ⏳ولی یه مشکل بزرگ داشتیم! از اونجایی که ران‌تایم‌های Colab فقط یه ساعته هستن، برای هر بار اجرا و مقداردهی مجدد، باید دستی این کارو انجام می‌دادیم، که واقعاً اعصاب‌خردکن بود! 😵‍💫 دوستم هم اصلاً حال نمی‌کرد با این وضعیت!تا اینکه یه ایده به ذهنم رسید! وصل کردنش به یه ربات تلگرام! 🤖البته بعداً از این تصمیم پشیمون شدم، چون می‌شد راه‌حل‌های بهتری پیدا کرد، ولی خب اون موقع این ایده برام هیجان‌انگیز بود! 😅خلاصه ربات رو نوشتیم، قابلیت تغییر متن و لیست کانال‌ها رو بهش اضافه کردیم، و انصافاً خیلی خفن شد! 🤩 برای ذخیره اطلاعات هم به Google Drive وصلش کردیم.چندین بار نزدیک بود با مشت بکوبم روی کیبورد و برم بخوابم! 😤💤 ولی درست همون لحظه، یه ایده‌ی ناب به ذهنم می‌رسید و باگ رو می‌ترکوندم! 💡🔥نمایی از رباتاز اینجا به بعد، دیگه دوستم زیاد با نسخه‌های جدید حال نمی‌کرد و ترجیح می‌داد همون ورژن‌های قدیمی رو استفاده کنه! ولی خب، من همچنان فیچرهای جدید اضافه می‌کردم و چیز باحالی ازش دراومد.اما یه مشکل مونده بود... سرور! 😑اگه می‌خواستیم سرور داخلی بخریم، باید IP رو تغییر می‌دادیم تا بتونه با تلگرام ارتباط بگیره. اگه سرور خارجی می‌خواستیم، بحث پرداخت پیش می‌اومد، که خب دردسرهای خودش رو داشت!دقیقاً توی همین گیر و دار، ابرآروان سرورهای خارجی‌شو معرفی کرد... ولی فعلاً کاری بهش نداریم!از اونجایی که قبلاً یه WebApp روی Replit راه انداخته بودم، فکر کردم شاید بشه ازش به‌عنوان سرور هم استفاده کرد. کد رو با کلی زحمت (و البته کمک دوستای همیشگی، یعنی گوگل و هوش مصنوعی 😜) برای Replit بهینه کردیم. ولی یه مشکل عجیب پیش اومد...حتی وقتی یه اپ جنگو کنارش اجرا می‌کردیم و هر ۵ دقیقه Ping می‌فرستادیم، باز هم برنامه بعد از ۱ دقیقه آف می‌شد! 😵‍💫خیلی تلاش کردیم که این روش جواب بده. آخرین امیدم گول زدن Replit با Flet بود، ولی اونم فکر نکنم جواب بده... 🤷‍♂️خلاصه این روزا کد رو به حال خودش رها کردیم، تا وقتی که یه سرور درست‌وحسابی براش پیدا کنیم...🔥 اگه خوشتون اومد، حتماً لایک کنید و اگه کامنت هم بذارید که دیگه نور علی نوره! 😉❤️(این متن با کمک هوش مصنوعی نوشته شده 😁)</description>
                <category>گیکی</category>
                <author>گیکی</author>
                <pubDate>Wed, 05 Mar 2025 21:24:41 +0330</pubDate>
            </item>
                    <item>
                <title>اسکریپت دانلود ویدیو یوتیوب به گوگل درایو | دانلود از یوتیوب به گوگل درایو</title>
                <link>https://virgool.io/@geeky/%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%BE%D8%AA-%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%D9%88%DB%8C%D8%AF%DB%8C%D9%88-%DB%8C%D9%88%D8%AA%DB%8C%D9%88%D8%A8-%D8%A8%D9%87-%DA%AF%D9%88%DA%AF%D9%84-%D8%AF%D8%B1%D8%A7%DB%8C%D9%88-bery1nqqkdfq</link>
                <description>خب، خیلی وقتا پیش یک برنامه نوشتم که بهش لینک ویدیو یوتیوب رو میدی و اون رو وارد  گوگل درایو میکنه. البته دلیلش هم این بود که بعضی اوقات پیش میومد که میخواستم یک ویدیو از توی یوتیوب رو به دوستام نشون بدم و با این کار فقط لینک گوگل درایو رو براشون میفرستادم. خوبیش اینه که توی Colab نوشته شده و برای دانلود و آپلود ویدیو، هیچ اینترنتی از شما کسر نمیشه!یکمی گذشت و یک برنامه نوشتم که کل پلی لیست رو دانلود میکرد.بعد از گذشت مدت زیادی که برگشتم به اسکریپت، دیدم یکسری مشکل هایی با کتابخونه ای که باهاش ویدیو هارو دانلود میکردم (Pytube) به وجود اومده و دیگه کار نمیکنه.یکمی گشتم و دیدم یک فرد خوبی یک نسخه اصلاح شده از اون رو توی گیتهاب گذاشته و من، از اون استفاده کردم.چند وقت پیش دوستم ازم خواست لینک برنامه که روی کولب نوشته بودم رو براش بفرستم و متوجه شدیم اون هم کار نمیکنه، فهمیدم طرف کلا برنامه رو از روی گیتهاب برداشته بود. یکمی سرچ کردم و یک کتابخونه پیدا کردم بنام pytubefix و خب ازش استفاده کردم.این کتابخونه قابلیت های زیادی داشت مثلا دانلود ویدیو و پلی لیست و کل ویدیو های چنل و دانلود mp3 اونها و...اما ازونجایی که بیشتر نیازم به دانلود ویدیو بود، اون اسکریپت رو نوشتم. شما اگه میخواهید میتونید به راحتی اونو به دانلود پلی لیست تغییر بدید با توجه به چیزی که توی داکیومنت های گیتهابش گفته.خب بدون معطلی برم که اسکریپت رو باهاتون به اشتراک بزارم.!pip install pytubefixfrom google.colab import drivefrom pytubefix import YouTubefrom pytubefix.cli import on_progressurl = input(&#039;Enter your youtube url : &#039;)print()yt = YouTube(url, on_progress_callback = on_progress)print(yt.title)print()print(&#039;Downloading With Max Quality...&#039;)print()drive.mount(&#039;/content/drive&#039;)ys = yt.streams.get_highest_resolution()ys.download(&#039;/content/drive/My Drive/Youtube/&#039;)print()
print(&amp;quotDownload Completed!&amp;quot) چند تا نکته:این اسکریپت برای اجرا روی Colab نوشته شده و با استفاده از این اسکریپت در محیط کولب، اینترنت دانلود و آپلود ویدیو از شما حساب نمیشه.ممکنه گاهی اوقات یکمی دیرتر آپلود انجام بشه حتی بعد از تموم شدن برنامه که عادیه.این ویدیو رو با حداکثر کیفیت دانلود میکنه و در فولدر YouTube درایوتون قرار میده.قبلش یک صفحه براتون باز میشه و ازتون اجازه دسترسی به درایو رو میخواد که باید تایید کنید.این برنامه، اشتباه وارد کردن لینک را بررسی نمیکند پس اگه لینک اشتباهی بهش بدید برنامه خراب اجرا میشه.قابل استفاده برای ویدیو های short هم هست.میتونید یک پروژه کولب بسازید و اونو پابلیک کنید تا همه بتونن ازش استفاده کنن(من این کارو کردم ولی به دلایلی لینک پروژه رو نمیفرستم(اسکریپت ها همینا هستند) ولی شما میتونید اینکارو کنید)طبیعتا چون روی کولب اجرا میشه هیچ دغده ای جهت روشن کردن ابزار های رفع تحریم ندارید.آپدیت:اینم دانلود پلی لیست!pip install pytubefixfrom google.colab import drivefrom pytubefix import Playlistfrom pytubefix.cli import on_progressurl = input(&#039;Enter your PlayList url : &#039;)print()pl = Playlist(url)print(pl.title)print()print(&#039;Downloading With Max Quality...&#039;)print()drive.mount(&#039;/content/drive&#039;)for video in pl.videos:ys = video.streams.get_highest_resolution()ys.download(f&#039;/content/drive/My Drive/Youtube/{pl.title}&#039;)print(f&#039;Downloaded {ys.title}&#039;)print()print()print(&#039;Download Completed!&#039;)لذت ببرید :)احتمالا بعدا اگه حال داشتم یکسری تغییرات روی اسکریپت میدم و قابلیت هاشو اضافه میکنم ولی فعلا همین خوبه.راستی ای کاش ویرگول این قابلیت رو اضافه کنه که تصاویری که در کلیپ برد هستند به راحتی به داخل نوشته پیست بشن.</description>
                <category>گیکی</category>
                <author>گیکی</author>
                <pubDate>Thu, 19 Sep 2024 21:32:09 +0330</pubDate>
            </item>
                    <item>
                <title>نحوه تشخیص صحت کد ملی</title>
                <link>https://virgool.io/@geeky/%D9%86%D8%AD%D9%88%D9%87-%D8%AA%D8%B4%D8%AE%DB%8C%D8%B5-%D8%B5%D8%AD%D8%AA-%DA%A9%D8%AF-%D9%85%D9%84%DB%8C-tsuiniszfpt4</link>
                <description>خبچند وقت پیش داشتم یک وبسایتی رو اسنیف میکردم که متوجه شدم یک بخشی داره که وقتی کد ملی وارد میکنی، به نحوه خیلی عجیبی میگه که آیا این کد ملی معتبره یا نه! اولش فکر کردم احتمالا به سیستم ثبت احوالی یا جایی وصله ولی اینکه مشخصات فرد رو نمیگفت و بلافاصله نتیجه رو اعلام میکرد باعث شد شک کنم و یکمی راجبش سرچ کنم. در نهایت متوجه شدم یک الگوریتمی وجود داره که بهتون اعلام میکنه کد ملی ای که بهش دادید معتبره یا نه!هنوز هم خیلی دوست دارم بدونم چطوری این الگوریتمو کشف کردن. امروز توی این پست قراره کد پایتون این الگوریتم و خود الگوریتمو توضیح بدم و در نهایت قراره دوتا باگی که این الگوریتم داره رو مطرح کنم.نحوه کارکرداین مطلب حاصل بازنگری سایت های مختلف هست که در این مورد مطلب نوشته بودند.عکس بالا بیانگر همه چیز هست.ما به هر رقم در کد ملی یک ارزش مکانی میدهیم که در ردیف سوم نوشته شده.هر کد ملی از 10 رقم تشکیل شده که ما از رقم سمت راست برای بررسی صحت باقی ارقام استفاده میکنیم.ابتدا یک کد ملی دلخواه رو در ردیف &quot;کد ملی نمونه&quot; مینویسیم. برای مثال ما اینجا از یک کد ملی کاملا شانسی استفاده کردیم : 0218674719حالا بیاید ببینم معتبره یا نه.بعد ازینه کد ملی رو توی جدول نوشتیم، میایم و ضربدر ارزش مکانیش که پایینش نوشته شده میکنیم و جواب رو در ردیف آخر مینویسیم. لازم نیست حاصل ضرب رقم کنترل رو بنویسید چون اولا ضربدر 1 میشه دوما ما از این رقم برای بررسی سایر ارقام استفاده میکنیم. چطور؟بعد از اینکه حاصل ضرب هارو نوشتید، بیاید و اعداد داخل باکس خاکستری رو باهم جمع کنید. یعنی 0+18+8+56+36+35+16+21+2که حاصل هرچی شد برابر Y قرار میدیم. در اینجا Y شده 192.حالا میایم و یک تقسیم انجام میدیم. توی این تقسیم ما با خارج قسمت کار داریم که اونو X مینامیم.بعد ازینکه X بدست اومد دوتا حالت داره، یا کمتر از 2 هست یا بیشتر از 2. اگه کمتر از 2 بود، اونوقت رقم کنترل باید برابر X باشه در غیر این صورت رقم کنترل باید برابر یازده - X باشه.اگه اینطوری نبود یعنی کد ملی نا معتبره.پس نتیجه میگیرم این کد ملی معتبر استکد پایتون این الگوریتمdef check_id(id):
  def devide(x,y):
    a = 0
    for i in range(x):
      if y*i &lt;= x:
        a = i
      else:
        return a,x-(a*y)
        break


  lst = []

  for i in range(9):
    lst.append(int(id[i]) * int(10-i))


  if (devide(sum(lst),11)[1]) &lt; 2:
    if int(id[-1]) ==devide(sum(lst),11)[1]:
      return True
    else:
      return False

  else:
    if int(id[-1]) ==(11-(devide(sum(lst),11)[1])):
      return True
    else:
      return False


print(check_id(&amp;quot0218676719&amp;quot))چند تا نکتهاین الگوریتم برای محاسبه معتبر بودن کد ملی هست نه اینکه اطلاعات فرد رو بهتون بده!با استفاده از این الگوریتم ممکنه کد ملی یکی که هنوز به دنیا نیومده رو پیدا کنید و ممکنه اینجوری کد ملی نامعتبر دریافت کنید.سه رقم سمت چپ کد ملی بیانگر محل تولد هست که ممکنه دارای 0 باشه و کاربر اونارو وارد نکنه که نیازه به همون تعداد، 0 به سمت چپ اضافه بشه.ممکنه 3 رقم سمت چپ، اصلا مربوط به هیچ جایی نباشه.و در نهایت کد پایتون من میتونه کلی بهینه بشه. مثلا من بجای استفاده از %، یک تابع نوشتم!</description>
                <category>گیکی</category>
                <author>گیکی</author>
                <pubDate>Wed, 17 Jul 2024 18:40:30 +0330</pubDate>
            </item>
                    <item>
                <title>چطوری با Postman میشه حس هکر بودن گرفت؟</title>
                <link>https://virgool.io/@geeky/%DA%86%D8%B7%D9%88%D8%B1%DB%8C-%D8%A8%D8%A7-postman-%D9%85%DB%8C%D8%B4%D9%87-%D8%AD%D8%B3-%D9%87%DA%A9%D8%B1-%D8%A8%D9%88%D8%AF%D9%86-%DA%AF%D8%B1%D9%81%D8%AA-zffacpfdpxbv</link>
                <description>آره این لوگوی پستمنهخب! داستان از جایی شروع شد که حدود 6-7 ماه پیش، با دوستم و تشویق معاون فناوریمون، تصمیم گرفتیم بشینیم و یک PWA بزنیم! قرار شد من قسمتی که متنفرم رو انجام بدم(فرانت اِند) و دوستم بک اند رو انجام بده(به فرانت علاقه نداشتم، از روی داکیومنت های کتابخونه ای بنام FLET توی پایتون اینکارو میکردم). خلاصه اونجا بود که به درک عمیق تری از API رسیدم چون لازم داشتم لینکش کنم به فرانت. با کلی علاقه هم نشستیم و پروژمونو کامل کردیم ولی فهمیدیم زمانی که استارت کردیم، باید پروژه رو تحویل میدادیم😐(خیلی ناراحت شدیم).خلاصه تا قبل از پروژه، درک من از API ها به این ختم میشد که به یک جایی با یسری متد یه چیزیو میگی(و حتما هم اون چیز باید توی لینک باشه) و اونم یک چیزیو بهت میگه. این کار هم با فقط پایتون انجام میدادم و اتفاقا یسری کار هم مثل Track کردن ایستگاه فضایی هم انجام داده بودم. تا اینکه با چیزی بنام postman آشنا شدم و خب ازون لحظه شروع کردم چیز های جدید آموختن! خلاصه گذشت و گذشت و من هر روز با اشتیاق تر دنبال API های سایت های مختلف میگشتم و اونارو سیخ میکردم. مثلا توی شهر ما، احتمالا شهرداری یک سیستمیو درست کرده که بهت میگه فلان اتوبوس چقدر دیگه میرسه به فلان ایستگاه(گرچه هنوز کلی مشکل داره و بعضی وقتا که یک راننده فراموش میکنه خط مسیرشو عوض کنه، کل ایستگاه هارو میزنه نامشخص!) و من API ایستگاه رفتن به مدرسه ام رو برداشته بودم و مستقیم از اون نگاه میکردم(حتی تو ذهنم بود با آردینو ترکیبش کنم و یک چیز جالب بسازم).تا اینکه نیاز من به جایی رسید که از اسنیفر استفاده کنم. تا قبل از اون، اسنیفر من تب Network توی قسمت Developer toolsمرورگرها بود.یکمی سرچ کردم و به نرم افزار هایی مثل wire shark و Fiddler و burp suite و... رسیدم. تا وقتی که فهمیدم خود postman این قابلیتو داره و این چیزی بود که میخواستم!چطوری؟ فقط کافیه افزونه اش رو نصب کنید و توی پستمن اون پایین روی start proxy کلیک کنید.روی استارت بزنید. یا اگه با افزونه هستید میتونید از توی افزونه استارت کنیدو بعدش با صفحه زیر مواجه میشید که همه APIهارو میگهحالا خیلی راحت میتونید هر درخواست رو کلیک کنید و دوباره بفرستید، جعلش کنید یا کارایی که میتونید یکمی راجبش فکر کنید. در ادامه یک مثال میارم.خب. شما با این کارای خیلی جالب و بزرگتری میتونید کنید. فقط برای باز کردن ذهنتون میتونم به API ارسال پیامک کد تایید اشاره کنم.در اینجا ما از یک مثال دیگه استفاده میکنیم. یک سایتی هست که ذکر شماره(باور کنید! فکر نکنید همستری چیزیه). نحوه کارکرد این سایت اینجوریه که دوتا دکمه وسط صفحه هست که هرکدوم مربوط به یک ذکره و با فشردن اون، به سرور یک API میفرسته که یک ذکر به تعداد اونا اضافه کنه. و در این حین دائما از سرور تعداد ذکرا رو میگیره.یک شات از ذکرشماراینم ریکوعستا توی تب نتورک(با پستمن هم میشه دید)همون طور که میدونید، اضافه کردن ذکر رو با AddZekr انجام میشه و استعلام تعداد ذکرا با GetZekrTotal.خب حالا میریم توی پستمن و برای دیدن جرئیات، یک استعلام ذکر و یک اضافه کردن ذکر رو باز میکنیم.اضافه کردن ذکراستعلام ذکرخب میبینید؟ خیلی سادست و با زدن اون دکمه send میتونید دوباره APIرو بفرستید!نحوه کارکردش هم خیلی سادست و با یک نگاه کلی به ریسپانس میشه فهمید.خب حالا جایی داستان جذاب میشه که بفهمید میشه با زدن یک گزینه که داخل پستمنه، کد اون رو به هر زبان و حالتی که میخواید بگیرید(توی نوار سمت راستی پستمنه دکمه). بعدش میتونید روی یک دور تکرار بندازید و یسری کارایی ازین قبیل انجام بدید.خب. شما خواننده عزیز که ممکنه ازون هکرایی باشی که شکست نفسی میکنی که داری با خودت میگی &quot;این یارو رفته یک صلوت شمارو اینجوری کرده و اینکه کاری نداره&quot;، در جواب میگم این مثالی که گفتم صرفا جنبه آموزشی داره و میشه کلی API دیگه رو درآورد و کارای خیلی جالب تر کرد.توی این مطلب میخواستم صرفا قابلیت اسنیفینگ پستمن رو نشونتون بدم که احتمالا یسریا نمیدونن.سعی کردم خیلی هم وارد جزئیات نشم که چطوری کد رو میگیری و این داستانا. بقیه اش با کسی که علاقه داره!محرم رو تسلیت عرض میکنم.فعلا خدانگهدار.</description>
                <category>گیکی</category>
                <author>گیکی</author>
                <pubDate>Sun, 14 Jul 2024 00:11:46 +0330</pubDate>
            </item>
                    <item>
                <title>جوری پایتون بنویسید که آدمایی که کنجکاو نیستن و پیگیر نیستن نفهمن!</title>
                <link>https://virgool.io/@geeky/%D8%AC%D9%88%D8%B1%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%A8%D9%86%D9%88%DB%8C%D8%B3%DB%8C%D8%AF-%DA%A9%D9%87-%D8%A2%D8%AF%D9%85%D8%A7%DB%8C%DB%8C-%DA%A9%D9%87-%DA%A9%D9%86%D8%AC%DA%A9%D8%A7%D9%88-%D9%86%DB%8C%D8%B3%D8%AA%D9%86-%D9%88-%D9%BE%DB%8C%DA%AF%DB%8C%D8%B1-%D9%86%DB%8C%D8%B3%D8%AA%D9%86-%D9%86%D9%81%D9%87%D9%85%D9%86-zcg8r8rf0aql</link>
                <description>اونهمه کد توی یک خطچند وقت پیش داشتم توی اینترنت میگشتم که با یک پروژه توی گیتهاب آشنا شدم و وقتی سر به کد هایی که داشته بود زدم، برام خیلی عجیب بود! اونهمه برنامه رو فقط توی یک خط کد نوشته بود! منم گفتم حتما اشتباهی شده و گیتهاب خراب شده و رفتم بیرون. اما شب نتونستم بخوابم و رفتم یکمی با دقت کد رو گشتم و فهمیدم چی به چیه!درواقع کد رو base64 کرده بود و بعدش با دستور exec، معمولی شده اونو اجرا میکرد.در ادامه با من همراه باشید تا یک نمونه ساده تر رو بهتون نشون بدم.بسیار خب.اول از همه باید بدونیم چطور کار میکنه؟بیاین با base64 کردن یک متن شروع کنیم(اگه راجب base64 نمیدونید خب برید بدونید!).برای این کار از ماژول base64 پایتون به نحو زیر کمک میگیریم:c2FsYW0=ونطور که مشاهده میکنید، salam شده یک نکته ای بگم. حتما باید قبل کوتیشن، یدونه b بزارید.(چرا؟)خب ادامه میدیم با معرفی یک دستور دیگه در پایتوناین شما و این execتاجایی که میدونم، میاد و دستورای پایتونی داخلشو که به صورت string هست، اجرا میکنه!همونطور که میبینید استرینگ حاوی پرینت یک عبارت رو از طریق exec اجرا کردیمخب ادامه میدیم.در بالا یاد گرفتیم چطور یک متن رو به base64 تبدیل کنیم. حالا وقتشه برعکسشو یاد بگیریم!یک base64 تبدیل شد به یک متنخب حالا بنظرم فهمیدید قراره چه اتفاقی رخ بده.با ترکیب این دوتا مثلا میتونید یک برنامه بنویسید که دوتا عدد رو بگیره و باهم جمعشون کنه و نتیجه رو بگه.کد های برنامه اصلی به این قراره:print(int(input(&amp;quotEnter first : &amp;quot))+int(input(&amp;quotEnter first : &amp;quot)))کد رو همینطوری توی یک خط نوشتم(میتونید هرچند تا خط که میخواید بنویسید.)حالا وقت base64 کردن برناممونه:دقت کنید کوتیشن اینکد کردن رو تریبل بزارید که با کوتیشن های داخل کد اشتباه نکنه که ببندهخب حالا آخرین قدم رو انجام میدیمخروجی رو کپی میکنیم. اون رو دیکُد میکنیم و بلافاصله اجرا میکنیم.این هم پایان کارفقط یک نکته دیگهکد شما لزوما نباید یک خطی باشه. بزارید یک مثال بزنم:اینجا مثلا ی کد 3 خطی داریمحالا میریم و base64 میکنیم:و خروجی کد باز هم base64 هست.خب این هم تموم شد. محیطی که کد هامونو روش اجرا کردیم colab بود(حوصله بالا آوردن vs نبود).میدونم بد توضیح دادم به همین علت اگه سوالی داشتید در قسمت کامنت ها آزاد باشید برای پرسیدنش :)</description>
                <category>گیکی</category>
                <author>گیکی</author>
                <pubDate>Wed, 14 Feb 2024 21:03:51 +0330</pubDate>
            </item>
                    <item>
                <title>نحوه دیپلوی(Deploy) وب اپ(web app)پروژه فِلِت(flet) در کلود فلر(cloudflare)</title>
                <link>https://virgool.io/@geeky/%D9%86%D8%AD%D9%88%D9%87-%D8%AF%DB%8C%D9%BE%D9%84%D9%88%DB%8Cdeploy-%D9%88%D8%A8-%D8%A7%D9%BEweb-app%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D9%81%D9%90%D9%84%D9%90%D8%AAflet-%D8%AF%D8%B1-%DA%A9%D9%84%D9%88%D8%AF-%D9%81%D9%84%D8%B1cloudflare-mvl12pww911h</link>
                <description>درود بر همراهان و برنامه نویسان عزیزی که درحال مطالعه این نوشته هستند.در این نوشته، بنده سعی کرده ام تا نحوه دیپلوی کردن وب اپ پروژه فلت را در کلود فلر توضیح بدهم.فلت(flet) چیست؟آیا تا به حال شده که قصد نوشتن برنامه ای را در پایتون داشته باشید، و برای آن نیاز به رابط گرافیکی پیدا کنید؟کتابخانه های مختلفی به این منظور موجود هستند برای مثال QT،Kivy و Tkinter. اما اگر به دنبال استفاده از فلاتر در پایتون هستید، میتوانید از کتابخانه فلت استفاده کنید.نحوه نصبفقط کافیه در محیط cmd تون، این رو وارد کنید: pip install fletوب اپ؟یکی از قابلیت های جالب فلت، این است که میتوانید پروژه خود را در محیط مرورگر مشاهده کنید و میتوانید پروژه خودتان را به صورت PWA، در دسترس دوستان خویش و در یک لینک اینترنتی قرار دهید.فقط کافیست خط آخر کد خودتان را به این سان، تغییر بدهید:ft.app(target=main, view=ft.AppView.WEB_BROWSER)اما چگونه؟در وبسایت فلت، در مورد این موضوع راهکار های متفاوتی عنوان شده است; در واقع ارائه دهنده های هاست مختلفی که به صورت رایگان عمل میکنند را معرفی کرده. فلای دات آیو و رپلیت، مواردی هستند که در این وبسایت معرفی شده است اما هرکدام، در شرایط فعلی ایران، مشکلاتی دارندمشکل fly.io درخواست ورود شماره کارت برای اجازه میزبانی رایگان پروژه هست که با توجه به شرایط کنونی، امکانش وجود ندارد. بنده قصد خرید پریپید کارت از ایرانیکارت را داشتم که قیمتی حدود 400 هزار تومان دارد. اما ممکن است fly.io پریپید کارت هارا قبول نکند و 400 هزار تومان شما به باد فنا برود، پس روش مطمئنی نیست اما اگر دسترسی دارید، پیشنهاد بنده انجام این کار است.اما replit هیچ مشکلی ندارد. درواقع اگر طبق دستوری که داده شده پیش بروید، میتوانید سایت خودتان را بصورت رایگان دپلوی کنید. اما مشکل وقتی شروع میشود که قصد ورود به سایت را دارید. این کار شدنی نیست مگر با ابزار های ضد تحریم و ضد فیلتر که بنظر کمی دشوار می آیدچاره چیست؟اینجاست که کلود فلر میتواند کمک شایانی بکند.برای دپلوی کردن پروژه فلت خود در کلود فلر، مراحل زیر را طی کنید:ساخت اکانت گیتهابساخت اکانت کلود فلرآپلود پروژه به همراه فایل های مورد نیاز در گیتهابدادن گیتهاب به کلود فلرساخت اکانت ها:ساخت اکانت کلود فلر و گیتهاب یکی از آسون ترین کارهای موجود در جهان هست. نه نیاز به شماره تلفن داره نه آدرس نه هیچی. فقط کافیه جیمیلتون رو بدید و اکانت هاتون رو تحویل بگیرید. اگه اکانت دارید که نیازی به ساخت مجدد آن نیست.آپلود پروژه به همراه فایل های مورد نیاز در گیتهابخب. تا الان ما فایل پروژمون رو داریم و اکانتهامون هم ساختیم.قدم بعدی ایجاد دوتا فایل هستrequirements.txtruntime.txtساختید؟حالا اسم پروژه فلت که با پایتون نوشتید رو به main.py تغییر بدید چون ما طبق این اسم فایل پیش میریم.حالا دوتا فایل txt رو که ساختید باز کنید. در فایل ها باید محتوا های زیر رو قرار بدید:requirements.txt : کتابخانه های مورد نیازruntime.txt : نسخه پایتوندر پروژه این که ساختم، فقط از flet استفاده کردم پس در فایل requirements.txt، فقط این رو وارد میکنم:fletپایتونی که استفاده میکنم نسخه 3.11 هست. پس داخل فایل runtime ، همین رو مینویسم3.11آپلود پروژه بر روی گیتهاباینم قدم خیلی راجتی است.(بین خودمون بمونه من یکمی روش گیر کرده بودم پس آموزشش میدم)الان ما 3 تا فایل داریم.باید اونارو روی گیتهاب آپلود کنیم. پس وارد گیتهاب میشیم و از گزیه + بالا سمت راست، یک ریپوزتوری جدیدی درست میکنیم(new repository)(ببخشید اگه کلمات خارجی، فارسی نوشته میشوند)بر روی new repository کلید کنیدبعدش یک صفحه براتون باز میشه که در کل چیز خاصی نداره. یک اسم انتخاب میکنید و میزنید بعدی(این کار رو برای نشون دادن محل ورود اسم کردم)مثل من اسم فارسی انتخاب نکنیدادامش رو فعلا حوصله ندارم بگم!(خودتون میتونید سرچ کنید)(فقط بگم باید روی اون نوشته آپلود پروجکت کلیک کنید و پروژتونو آپلود کنید)خب.حالا که ریپوزتوریتون ساخته شد، اون 3 تا فایل رو آپلود کنید در آن.مرحله نهایی!الان وارد سایت کلود فلر میشیم و از قبل لاگین کردیم.از منوی سمت چپ، یکمی به پایین اسکرول میکنیم و روی گزینه Workers &amp; Pages کلید میکنید:workers &amp; Pagesبعدش یک صفحه براتون باز میشه که باید روی گزینه Create application کلیک کنید تا به صفحه دیگری هدایت شوید:روی اون دکمه آبیه سمت راست کلیک کنید(این نمای بالای بخش workers &amp; pages هست)با صفحه زیر روبرو خواهید شد. باید به تب Pages بریدروی اون تبی که فلش زده شده کلیک کنیدوارد تب که شدید وسط صفحه روی کانکت تو گیت کلیک کنیدآره همون دکمه آبی وسط صفحهبعدش به اکانت گیتهابتون وصل میشید و باید یکی از ریپوزتوریهاتون رو انتخاب کنید که پروژه از اون تو، دیپلوی بشهاز اسمش تعجب نکنید. میفهمید چیه دیگهبعدش روی دکمه آبیه کلیک میکنیم تا به صفحه بعدیش برسیم.توی صفحه بعدی که اومد، طبق زیر چیزایی که هست رو تغییر بدیداول که اسم پروژه هست. دوتا کادر آبی آخر مهمهچیزای که توی دوتا کادر آبی پایین نوشتمflet publish main.pydistاین چیزی که دارم میگم رو چند ماه بعد از نوشتن پست به عنوان ویرایش میخوام اضافه بکنم. توی خود وبسایت فلت گفته بجای این کامند، از این کامند flet build web استفاده کنید که مزایای بهتری و سرعت بیشتری دارهالبته توجه داشته باشید که اسم پروژه من main.py هست و شما هم اینو بزارید اسمشو.سپس روی دکمه save &amp; deploy کلیک میکنیمبعدش یکم صبر میکنیم تا مراحل کامل بشودشکیبا باشیددر مجموع 2 دقیقه و 20 ثانیه شکیبا بودم!خب بعدش یکمی اسکرول میکنیم و میبینیم عه دوباره دکمه آبیه پیداش شد! روش کلیک میکنیمCountinue to projectکلیک کردید؟مبارکه پروژه شما اماده ارسال لینکش به دوستاتون هستشما الان یک PWA رو با استفاده از فلت ساختیدروی دکمه visit site بزنید تا سایتتون براتون باز بشهسایتی که ساختیم این بود: https://clothes-calculato.pages.dev/ اینم لینکش اگه باز نشد : https://clothes-calculato.pages.dev/شما میتونید کلی کار دیگه کنید، دامین خودتون رو ست کنید و غیره.اگه یوقت گمراه شدید، سری به ریپوزتوری گیتهاب این پروژه بیاندازید  : https://github.com/Amitrix-bit/clothes_calculatorنوشتن این مطلب یکمی ازم زمان برد. اگه یوقت تونستم کمکی بهتون کنم خیییلی خوشحال میشم اگه بهم بگیدبدرود</description>
                <category>گیکی</category>
                <author>گیکی</author>
                <pubDate>Tue, 14 Nov 2023 17:30:30 +0330</pubDate>
            </item>
            </channel>
</rss>