<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Ali Zeiynali</title>
        <link>https://virgool.io/feed/@Ali_Z</link>
        <description>یک برنامه نویس (نه چندان) نویسنده؟

https://coffeete.ir/Azeiynali</description>
        <language>fa</language>
        <pubDate>2026-04-14 19:15:25</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/2477282/avatar/9Yk9Sl.png?height=120&amp;width=120</url>
            <title>Ali Zeiynali</title>
            <link>https://virgool.io/@Ali_Z</link>
        </image>

                    <item>
                <title>چطور در 5 روز 1000 فالور ویراستی گرفتم؟</title>
                <link>https://virgool.io/@Ali_Z/%DA%86%D8%B7%D9%88%D8%B1-%D8%AF%D8%B1-5-%D8%B1%D9%88%D8%B2-1000-%D9%81%D8%A7%D9%84%D9%88%D8%B1-%D9%88%DB%8C%D8%B1%D8%A7%D8%B3%D8%AA%DB%8C-%DA%AF%D8%B1%D9%81%D8%AA%D9%85-dispj7pphvy6</link>
                <description>اول از همه بگم که می خواستم اسم این پست رو &quot;آموزش نوشتن کد های نمی دونم چی&quot; بذارم و فنی اش کنم، ولی نظرم عوض شد، پس خوب با چشم هاتون گوش بدین!توضیحات کسل نکنندهاز وقتی ویراستی اومد بهش علاقه مند شدم و چند هفته پیش، بالاخره یک حساب ویراستی ساختم، توی ویراستی می چرخیدم و آدم ها رو نگاه می کردم تا اینکه متوجه چیزی شدم... - چیزی که دارم بهت میگم یه رازه، پس با دقت گوش کنتوی ویراستی، کسانی که حساب بزرگ و بیش از 700، 800 فالورر داشتن، یا از عهد بوق فعالیت می کردن، یا 4 برابر دنبال کننده هاشون، دنبال شونده داشتن!ولی چرا؟ توی ویراستی - و اکثر پبتفرم های دیگه - هنگام دنبال کردن مردم یه نوتیفیکشن برات میاد که به اکانت طرف لینک شده، ولی این نوتیف میاد، خیلی از مردم ناخوداگاه به اکانت طرف جذب میشن و حداقل چند پست اول + بیو اون رو می خونن، همین میشه که اگه خوششون اومد، طرف رو دنبال می کنن!البته جدای اون هایی که توی بیوشون می زنن &quot; فالو = فالوبک&quot; اونا هم هستن ولی ممکنه اصلا اکانت تو رو نگاه نکننپس راه خوب دنبال شدن چیه؟ باید خوب دنبال کنی!میانگینی که من به دست آوردم، نسبت چهار به یک برای دنبال کردن و دنبال شدن بود، که البته با بهتر بودن محتوا و بیو و - این خیلی مهمه - پست سنجاق شده، این مقدار قطعا بیشتر میشه.بخش مهم ماجرا - دست کد نویسکی حال داشت این همه آدم دنبال کنه؟ اینجاست که بخش مهم ماجرا شروع میشه....شروع کردم با پایتون، یه ربات بسازم که آدم های مختلف رو فالو کنه، اولین چالش این بود که یه محلی برای دیدن مردم پیدا کنم، نمی خواستم از پیشنهادات خود ویراستی بردارم چون اکثرا آدم های سرشناس بودن که الکی فالوبک نمی دادن، پس به سراغ کسانی رفتم که دنبال کننده/شونده های زیاد داشتن و برنامه رو بر اساس دنبال کننده/شونده های اونا - هرکدوم بیشتر بود - نوشتم، اول می خواستم با فقط با کتابخانه requests و bs4 پیش برم، اما کار سخت می شد.بحث های فنی منیپس به سراغ کتابخانه محبوب selenium رفتم، کتابخانه selenium یکی از محبوب ترین crawler نویس های دنیای برنامه نویس هاست! فکر کنم حتی نسخه ای از این کتابخانه برای کسانی که کدنویسی بلد نیستند هست.سلنیوم از نحوه بات نویسی استفاده می کند، یعنی شما باید بات کنترلر (یا به اصطلاح وب درایور) مخصوص مرورگر خود را دانلود کنید تا selenium رفتار شما را شبیه سازی کند. ( خیلی نمی خواستم فنی اش کنم ولی چه میشه کرد D: )خلاصه یه مدت با مشکلاتش دست و پنجه نرم کردم و ربات رو نوشتم، همون موقع بود که به یه نتیجه رسیدم، پیج آقا توی ویراستی 85 هزار دنبال کننده داشت! بیشترین دنبال کننده همین جا بود....ربات تموم شد و اجراش کردم، اما دو تا مشکل از طرف ویراستی وجود داشت، اول اینکه محدودیت تعداد دنبال کردن روزانه وجود داشت که حدود 300، 400 تا در روز بود - دقیق نمی دونم - پس مجبور بودم هر روز ربات رو اجرا کنم. دوم اینکه ویراستی تمام 85 هزاردنبال کننده را نمایش نمی داد! و به 300، 400 شایدم 500 تا می رسید صفحه تموم می شد و فقط یه نقطه تهش بود.همین باعث شد که مجبور بشم از صفحات مختلفی کاربر ماین - استخراج! - کنم و دنبال کنم.-- اما نکته مهم اینجاست --فعالیت در صفحه من بسیار پایین بود، پیج هایی که در 5 دقیقه 3 ری پست و 100 تا ری اکشن می خوردن، بدون داشتن محتوای خیلی خاص و فقط با 200 دنبال کننده، این شد که به این نتیجه رسیدم که دنبال کننده های اینطوری بدرد نمی خورن و از آدم حمایت نمی کنن، کسی که با جون و دل با صفحه تو باشه به یه جایی می رسه.پس این ربات رو متوقف کردم، و یه ربات دیگه برعکسش نوشتم و 3500 تا از دنبال شونده هامو حذف کردم، فعالیتم رو بالا بردم و فقط 150 تا ریزش داشتم، البته خیلی مونده بود تا به حد پیج های دیگه برسم، اما اینجا بود که به نتیجه اصلی رسیدم....پیام اخلاقی ماجرا، یا شایدم...پیام اخلاقی ماجرا، یا شایدم &quot;پیام اخلاقی از نظر من از ماجرای من&quot; - که با توجه به این که این ماجرای منه، پس نظر منم پیام اخلاقیشه - دنبال کننده های فیک یا حتی اینجوری به درد نمی خورن :D❤️💬</description>
                <category>Ali Zeiynali</category>
                <author>Ali Zeiynali</author>
                <pubDate>Fri, 10 May 2024 19:00:46 +0330</pubDate>
            </item>
                    <item>
                <title>وب سایت crazy games، دوست اوقات فراغت شما</title>
                <link>https://virgool.io/@Ali_Z/%D9%88%D8%A8-%D8%B3%D8%A7%DB%8C%D8%AA-crazy-games-%D8%AF%D9%88%D8%B3%D8%AA-%D8%A7%D9%88%D9%82%D8%A7%D8%AA-%D9%81%D8%B1%D8%A7%D8%BA%D8%AA-%D8%B4%D9%85%D8%A7-g9ekru0symmc</link>
                <description>مدتی بود به دنبال وب سایتی برای بازی های آنلاین می گشتم، به وب سایت هایی مانند ev.io، gulper.io و.... برخوردم و همه آنها بد نبودند، اما خیلی به دلم نشستند و مسلما باید بیشتر هم می بودند.با کمی پرس و جو و بررسی، به وب سایت crazy games برخوردم، این وب سایت منبع بزرگی از بازی های آنلاین، تفننی، 2048 ها، بازی های FPS و هزاران بازی &quot;بدون نصب&quot; و رایگان دیگراین وب سایت هنگام باز بود اتصال یک دسته PS4, PS5, XBOX و...را به رایانه شما تشخیص داده و بازی های قابل اجرا با دسته را به شما نمایش خواهد داد. همچنین help اختصاصی </description>
                <category>Ali Zeiynali</category>
                <author>Ali Zeiynali</author>
                <pubDate>Fri, 10 May 2024 17:20:53 +0330</pubDate>
            </item>
                    <item>
                <title>در باب فریلنسری - از 0 تا 5 به درآمد رسیدن</title>
                <link>https://virgool.io/@Ali_Z/%D8%AF%D8%B1-%D8%A8%D8%A7%D8%A8-%D9%81%D8%B1%DB%8C%D9%84%D9%86%D8%B3%D8%B1%DB%8C-%D8%A7%D8%B2-0-%D8%AA%D8%A7-5-%D8%A8%D9%87-%D8%AF%D8%B1%D8%A2%D9%85%D8%AF-%D8%B1%D8%B3%DB%8C%D8%AF%D9%86-mnqlnp57fnrz</link>
                <description>توی این پست از 0 تا 5 فریلنسر شدن رو برات توضیح می دم، از وب سایت هایی که می تونی توشون کار کنی و از رزومه هایی که باید ایجاد کنی.اول از همه فریلنسری، پلتفرم های مختلفی داره که باید توی یک یا چند تا از اونا مشغول به کار بشین تا به درآمد مطلوب برسین. توی بخش اول پست در این مورد صحبت می کنیم.بعد در مورد رزومه شما، بهتره چه نمونه کار هایی داشته باشین، توی چه شبکه هایی پروفایل داشته باشین و چطور رزومه خوبی ایجاد کنینتوی بخش بعد در مورد پیشنهاد دادن، تعیین قیمت و نوشتن توضیحات پیشنهاد صحبت می کنیم تا بتونین زودتر پروژه دلخواهتون رو بگیرین.0. انتخاب پلتفرماول از همه باید پلتفرم های فریلنسری رو بشناسین، در زمینه فریلنسری 4 وب سایت هستن که به ترتیب قدرتمندی صعودی اونا رو عرض می کنم: parscodersanjammidamkarlancerponishaاولین وب سایت پارسکدرز هست، وب سایت پارسکدرز قابلیت های خوبی از جمله ثبت نمونه کار، ثبت امتیاز دقیق(در دسترس بودن مجری، کیفیت کار، تیک آبی احراز هویت و...) ارائه می ده و متاسفانه 15 درصد کارمزد در طرح عادی می گیرد، برای کاهش این به ده درصد باید حساب رو به نقره ای یا بالاتر ارتقاء داد.همچنین این وب سایت در طرح رایگانش محدودیت یک درخواست در روز و در بقیه طرح ها نامحدود دارد.دومین وب سایت انجام می دم هست، این وب سایت برعکس بقیه وب سایت های فریلنسری این لیست، فریلنسر محور هست، یعنی کاربران پروژه تعریف نمی کنند، بلکه فریلنسر ها توانایی های خودشون رو عرضه می کنند تا کارفرمایان از بین اونها انتخاب بکنند.این وب سایت بخش پروژه اختصاصی نیز دارد، برای پروژه های خاصوب سایت بعدی وب سایت کارلنسر است، کار در این وب سایت به دلیل فریلنسر های زیاد و کارفرما هایی به دنبال کیفیت عالی، نیازمند رزومه خیلی خوب و سرمایه کم اولیه است، این وب سایت محدودیت 10 درخواست در ماه را برای طرح عادی خود قرار داده است، همچنین برای بالا بردن سطح خود باید در آزمون های این وب سایت شرکت کرده که هر کدام نیز پولی هستند.همچنین این وب سایت قابلیت خوب ساخت آموزش را داراست، شما می توانید به صورت اختصاصی به دیگران آموزش دهید.وب سایت آخر وب سایت پونیشا است، این وب سایت نیز مانند وب سایت کارلنسر نیازمند رزومه قوی است، این وب سایت محدودیت 5 درخواست در ماه برای پلن عادی را دارد، همچنین در گذشته امکان ایجاد مسابقه برای این وب سایت موجود بود که در بروزرسانی های فعلی حذف گردیده است.1. رزومه سازیبرای رزومه سازی در وب سایت های فریلنسری چند نکته وجود دارد:سابقه کار خود را به صورت کامل و جامع شرح دهید و اطلاعات تماس شرکت را برای اطمینان کارفرما درج کنید (در صورتی که وب سایت محدودیت ارسال لینک و... نداشته باشد)حتما یک تصویر پرتره واضح و حرفه ای از خود داشته باشید، طوری که از دور خوب به نظر برسد.اکثر وب سایت های فریلنسری بخشی برای نمونه کار دارند، نمونه کار های خود را در این وب سایت ها  درج کنید و از چندین حالت آن عکس بگذارید تا کارفرما مطمئن باشد. برای تمام مهارت های خود حداقل یک نموننه کار مربوط داشته باشید.در صورتی که گرفتن تیک آبی احراز هویت اختیاری است، این کار را انجام دهید، کارفرما با دیدن تیک آبی حتی اگر دلیلش را هم نداند به شما اعتماد بیشتری می کند و شما حواس او را بیشتر جلب می کنید.حتما تمام مهارت های خود را درج کنید و در صورت وجود محدودیت، مهمترین های آنها را درج کنید.در بخش معرفی خود، مهارت های فرعی خود را نیز برای ارتباط بیشتر درج کنید.2. قیمت گذاریهنگام قیمت گذاری پروژه در پیشنهاد، چندین چیز را لحاظ کنید:در صورتی که تازه کار هستید و پروژه زیادی انجام نداده اید، قیمت را تا حد ممکن پایین اعلام کنید و &quot;حتما&quot; در توضیحات پروژه دلیلش را ذکر کنید تا کارفرما به اشتباه، کیفیت کم را مقصر نداند.قیمت هایی که کارفرما بیش از حد پایین تعریف کرده است، در صورت ثبت پیشنهاد با قیمت بالاتر این را  به او تذکد دهید و ذکر کنید این قیمت، کیفیت خوبی به همراه ندارد.فکر نکنید همیشه باید برای رزومه سازی قیمت را پایین اعلام کنید، سعی کنید میانگین اعلام کنید و دلیل این قیمت را در توضیحات ذکر کنید تا کارفرما شما را انتخاب کند.3. توضیحات پیشنهادهنگام نوشتن توضیات یک پیشنهاد، نکات زیر را در نظر داشته باشید: تمامی حالات ممکن را توضیح دهید تا در صورت بروز مشکل قابل استناد باشد.همانظور که گفته شد، دلیل قیمت را توضیح دهیدنمونه کار های خود را اعلام کنید و یا بگویید می توانند با مراجعه به پروفایل شما نمونه کارهایتان را ببینند.4. زمان پیشنهادحتما زمان پروژه را 1 الی 5 رزو بیشتر از آنچه نیاز است ذکر کنید تا در صورتی که کارفرما خوشش نیامد و نیاز به چندین بار تغییرات شد، یا برای شما مشکلی ایجاد شد، در روند پروژه اختلالی ایجاد نشود.5. پردرآمد ترین مشاغل فریلنسریپر درآمد ترین مشاغل فریلنسری به ترتیب صعودی عبارنتد از:طراحی و برنامه نویسی وب سایتطراحی و برنامه نویسی اپلیکیشن موبایل و دسکتاپدیجیتال مارکتینگ و سئوطراحی گرافیکاگر خوشتون اومد ❤️و💬 فراموش نشه</description>
                <category>Ali Zeiynali</category>
                <author>Ali Zeiynali</author>
                <pubDate>Mon, 01 Apr 2024 04:07:40 +0330</pubDate>
            </item>
                    <item>
                <title>هر آنچه باید در مورد دیتابیس الاستیک سرچ بدانید - قسمت آخر</title>
                <link>https://virgool.io/@Ali_Z/%D9%87%D8%B1-%D8%A2%D9%86%DA%86%D9%87-%D8%A8%D8%A7%DB%8C%D8%AF-%D8%AF%D8%B1-%D9%85%D9%88%D8%B1%D8%AF-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%DB%8C%DA%A9-%D8%B3%D8%B1%DA%86-%D8%A8%D8%AF%D8%A7%D9%86%DB%8C%D8%AF-%D9%82%D8%B3%D9%85%D8%AA-%D8%A2%D8%AE%D8%B1-z1qkhawvbo3n</link>
                <description>elasticsearch DATABASEخب، چیز مهم دیگری نمونده که بهتون بگم، بقیه اش همش اضافاته و می تونین از خود داکیومنت  elastic بخونین، توی این دوره کلی چیز با هم یاد گرفتیم، می خواهم توی این قسمت آخر یه کم در مورد اینکه خودم چطوری الاستیک رو یاد گرفتم صحبت کنم.یه مدتی توی یه شرکتی مشغول به کار بودم، شرکت هوش مصنوعی بود و من بیشتر به عنوان کارآموز رفته بودم تا برنامه نویس واقعیمدیر پروژه، خیلی باهام راه اومد، خیلی چیز ها بهم یاد داد و دسترسی سرورش رو هم داد تا بتونم اونجا هم تمرین کنم هم بهشون کمک کنم، منم تازه یک کم توی پایتون حرفه ای شده بودم و خیلی تجربه ای نداشتم، وقت هایی که وقتش خالی بود، منو صدا می کرد و میومدم کنارش، اونم نحوه کار دیتابیس رو برام توضیح می داد، می خواست بعد از اینکه من یاد گرفتم، یه مخزن توی gitea خودشون(روی سرور خودشون) بزنم و داکیومنت elastic رو آماده کنم، تا برای کارآموز ها و برنامه نویس های بعدی، دیگه نیازی به آموزش مستقیم نباشه.مخزن رو زدم و داکیومنت رو تموم کردم، یه مدت که گذشت به خاطر مدارس دیگه خیلی نتوستم برم شرکت، تصمیم گرفتم با یه زبون ساده تر و روون تر، دیتابیس الاستیک رو آموزش بدم تا هم بقیه، هم کارآموز های اون شرکت بتونن ازش استفاده کنن، این شد که این مجموعه مقاله را آماده کردم...❤️💬</description>
                <category>Ali Zeiynali</category>
                <author>Ali Zeiynali</author>
                <pubDate>Thu, 29 Feb 2024 08:28:41 +0330</pubDate>
            </item>
                    <item>
                <title>مرور کتاب &quot;هر بار که معنی زندگی را فهمیدم، عوضش کردند!&quot; - چالش طاقچه</title>
                <link>https://virgool.io/@Ali_Z/%D9%85%D8%B1%D9%88%D8%B1-%DA%A9%D8%AA%D8%A7%D8%A8-%D9%87%D8%B1-%D8%A8%D8%A7%D8%B1-%DA%A9%D9%87-%D9%85%D8%B9%D9%86%DB%8C-%D8%B2%D9%86%D8%AF%DA%AF%DB%8C-%D8%B1%D8%A7-%D9%81%D9%87%D9%85%DB%8C%D8%AF%D9%85-%D8%B9%D9%88%D8%B6%D8%B4-%DA%A9%D8%B1%D8%AF%D9%86%D8%AF-%DA%86%D8%A7%D9%84%D8%B4-%D8%B7%D8%A7%D9%82%DA%86%D9%87-vklmns5utv0m</link>
                <description>هر بار که معنی زندگی را فهمیدم، عوضش کردند: سفری طنزآمیز در جستجوی معنای زندگیکتاب &quot;هر بار که معنی زندگی را فهمیدم، عوضش کردند&quot; اثر دانیل ام. کلاین، خواننده را به سفری طنزآمیز و جذاب در دنیای فلسفه و جستجوی معنای زندگی می‌برد. کلاین با لحنی طنز و گاه گزنده، به بررسی دیدگاه‌های مختلف فلاسفه درباره‌ی معنای زندگی می‌پردازد و نشان می‌دهد که چگونه هیچ پاسخ قطعی و مطلقی برای این پرسش اساسی وجود ندارد.نقاط قوت کتاب:لحن طنز و گیرا: کلاین با لحنی طنز و گاه گزنده، مباحث فلسفی پیچیده را به زبانی ساده و قابل فهم بیان می‌کند. این لحن طنز، خواندن کتاب را به تجربه‌ای لذت‌بخش تبدیل می‌کند و از خسته‌کننده شدن مباحث فلسفی جلوگیری می‌کند.در اینجا چند نمونه از لحن طنز کلاین در کتاب آورده شده است:&quot;معنای زندگی مثل یک جعبه شکلات است. هیچ‌وقت نمی‌دانی چه چیزی نصیبت می‌شود.&quot;&quot;زندگی مثل یک بازی پوچ است که هیچ برنده‌ای ندارد.&quot;&quot;ما مثل مورچه‌هایی هستیم که روی کره‌ای در حال چرخش زندگی می‌کنیم و به دنبال معنای زندگی هستیم.&quot;ارائه دیدگاه‌های مختلف: کلاین در این کتاب به بررسی دیدگاه‌های مختلف فلاسفه درباره‌ی معنای زندگی می‌پردازد. از دیدگاه اپیکور که معتقد است لذت بردن از لحظه مهم‌ترین هدف زندگی است تا دیدگاه ارسطو که معتقد است هدف زندگی سعادت است. این تنوع دیدگاه، خواننده را با طیف وسیعی از ایده‌ها و نظرات آشنا می‌کند و به او کمک می‌کند تا به درک عمیق‌تری از این پرسش اساسی دست پیدا کند.برخی از دیدگاه‌های فلسفی که در کتاب بررسی شده‌اند عبارتند از:دیدگاه اپیکور: لذت بردن از لحظهدیدگاه ارسطو: سعادتدیدگاه نیچه: اراده‌ی معطوف به قدرتدیدگاه سارتر: آزادی و مسئولیتدیدگاه کامو: پوچی زندگیرویکرد انتقادی: کلاین به صرف بیان دیدگاه‌های مختلف اکتفا نمی‌کند، بلکه با نگاهی انتقادی به آن‌ها می‌پردازد و نقاط قوت و ضعف هر دیدگاه را به بحث می‌گذارد. این رویکرد انتقادی، خواننده را به تفکر و تأمل بیشتر درباره‌ی این پرسش اساسی تشویق می‌کند.به عنوان مثال، کلاین در مورد دیدگاه اپیکور می‌گوید:&quot;دیدگاه اپیکور جذاب است، اما مشکل این است که لذت‌های زودگذر نمی‌توانند رضایت دائمی را به ارمغان بیاورند.&quot;تمرکز بر زندگی روزمره: کلاین در این کتاب، فلسفه را از برج عاج به زندگی روزمره می‌آورد و نشان می‌دهد که چگونه می‌توان از آموزه‌های فلسفی برای زندگی بهتر و شادتر استفاده کرد.برخی از آموزه‌های فلسفی که در کتاب برای زندگی روزمره ارائه شده‌اند عبارتند از:اهمیت لحظه حال: تمرکز بر لذت بردن از لحظه حال به جای نگرانی در مورد آینده یا غصه خوردن برای گذشته.اهمیت روابط: ایجاد روابط سالم و معنادار با دیگران.اهمیت خودشناسی: شناخت نقاط قوت و ضعف خود و تلاش برای ارتقای خود.اهمیت پذیرش: پذیرش اینکه زندگی پر از چالش و سختی است و تلاش برای مقابله با آنها.نقاط ضعف کتاب:فقدان عمق: کلاین در این کتاب بیشتر به ارائه‌ی دیدگاه‌های مختلف درباره‌ی معنای زندگی می‌پردازد و کمتر به تحلیل و بررسی عمیق این دیدگاه‌ها می‌پردازد.</description>
                <category>Ali Zeiynali</category>
                <author>Ali Zeiynali</author>
                <pubDate>Fri, 23 Feb 2024 04:40:01 +0330</pubDate>
            </item>
                    <item>
                <title>چطور پولدار شویم؟ (5 راه برای کسب درآمد از کامپیوتر)</title>
                <link>https://virgool.io/@Ali_Z/%DA%86%D8%B7%D9%88%D8%B1-%D9%BE%D9%88%D9%84%D8%AF%D8%A7%D8%B1-%D8%B4%D9%88%DB%8C%D9%85-5-%D8%B1%D8%A7%D9%87-%D8%A8%D8%B1%D8%A7%DB%8C-%DA%A9%D8%B3%D8%A8-%D8%AF%D8%B1%D8%A2%D9%85%D8%AF-%D8%A7%D8%B2-%DA%A9%D8%A7%D9%85%D9%BE%DB%8C%D9%88%D8%AA%D8%B1-woqv2dhsn1oc</link>
                <description>خب خب، بالاخره یک پست باحال منتشر کردیم، اینجا قراره 5 راه برای کسب درآمد از کامپیوتر معرفی کنیم!بریم که شروع کنیم.قبل از شروع هم یه نکته بگم، اول اینکه برای استفاده از وب سایت های خارجی این مقاله، باید حساب paypal و احتمالا برای خیلی هاشون قند شکن داشته باشین1. فریلنسریاین که خیلی راحته و احتمالا همتون بدونین چجوری کار می کنه، ولی یه توضیح مختصر می دم:برای فریلنسری، شما باید در یک سایت، مهارت های خودتونو نشون بدین و بعد از کارفرما ها، پروژه تحویل بگیرید.برای مثال من در یک وب سایت و در مهارت های خودم برنامه نویسی پایتون را اضافه می کنم، سپس در بخش پروژه ها، یک پروژه که به مهارت من می خورد را انتخاب و برای آن پیشنهاد ارسال می کنم، سپس کارفرما با صحبت کردن با من، دیدن نمونه کار هایم و... من را برای این پروژه انتخاب می کند، حالا باید در یک مدت زمان، پروژه را انجام داده و برای کارفرما بفرستم.شما می تونین با هر مهارتی (ویراستاری، ترجمه، طراحی گرافیک، نقاشی و....) توی این وب سایت ها کار کنین.لینک وب سایت ایرانی و لینک وب سایت خارجیاین ها دو وب سایت خوب برای این کار هستند.چرا freelancer.com رو انتخاب نکردم؟چون upwork محیط بهتری داره و کار باهاش راحت تره، freelancer.com خیلی به دلم ننشست2. فروش کالای الکترونیکیبرای مثال شما می توانید قالب های وب سایت، قالب پوستر و بنر، پلاگین ها و... ای را که توسط مهارت های خودتون ایجاد کردین، بفروشین!این کار خیلی راحته، فقط کافیه توی وب سایت های مربوطه ثبت نام کنین و فایل های خودتون رو به صورت ZIP براشون ارسال کنین.اینم چند تا وب سایت ایرانی:AfrafileRTL ThemePikFreeو این خارجیه3. تولید محتوای ویدیوییتوی این کار، شما با تولید محتوای ویدیویی کسب درآمد می کنین، کافیه مهارتی که بلدین رو آموزش بدین، چالش اجرا کنین یا...همچنین می تونین با دیدن کانال های معروف در این زمینه و خواندن مقالات، تولید محتوا رو یاد بگیرین.سایت هاشو هم که همه می شناسن و نیازی به لینک نیست، اولیش آپاراته و دومیش یوتیوبدرآمد یوتیوب خیلی بیشتره ولی کار توش خیلی سخت تره و قوانین سفت و سختی داره.درآمد آپارات کمتره اما کار کردن توش راحت تره.اینم یه مقاله برای آشنا شدن بیشتر با تولید محتوای ویدیویی4. فعالیت اجتماعیشما می تونین با داشتن فعالیت توی شبکه هایی مثل ایتا و اینستا و تلگرام و... کسب درآمد کنین، کافیه وقتی دنبال کننده هاتون زیاد شدن، ثبت تبلیغ رو فعال کنین و از بقیه بخواهین با یک مقدار تعرفه در کانال شما تبلیغ بذارن.لینک ها هم که نیازی به گفتن ندارن، شبکه های اجتماعی زیادی هم هستن که می تونین به دلخواه انتخابشون کنین.5. فروش اشتراک برای کالا های الکرتونیکیدر این روش، شما باید بعد از تولید یک سری کالای الکترونیکی: آلبوم موسیقی، پادکست و...، یک اشتراک برای دسترسی عموم مردم به کالا های شما ارائه بدین.سرویس خارجیمتاسفانه برای این مورد سرویس ایرانی خوبی پیدا نکردماگر از پست خوشتون اومد لایکش کنین و اگر راه دیگه یا سرویس های دیگه ای می شناسین، حتما توی کامنت ها به ما اطلاع بدین تا هم ما هم دیگران ازشون استفاده کنیم.💬❤️</description>
                <category>Ali Zeiynali</category>
                <author>Ali Zeiynali</author>
                <pubDate>Tue, 13 Feb 2024 19:07:50 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش فلسک پیشرفته - قسمت سوم</title>
                <link>https://virgool.io/@Ali_Z/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%81%D9%84%D8%B3%DA%A9-%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%87-%D9%82%D8%B3%D9%85%D8%AA-%D8%B3%D9%88%D9%85-hi2pjwgnnmsi</link>
                <description>💬توی این قسمت، می خوایم model ها رو در Flask بررسی کنیم و بعد سراغ Flask Login برای احراز هویت بریم.برای ساختن مدل ها، فلسک یک ORM خوب و فابل اعتماد در اختیارمون قرار داده.این ORM به صورت خودکار جلوی تزریق ها، باگ های SQL و SQLite و... رو می گیره و از SQLite استفاده می کنه.برای استفاده از این ORM اول باید اونو نصب کنید:pip install Flask-SQLAlchemyبعد باید اونو به پروژه وارد کنید و یک نمونه ازش بسازین:from flask_sqlalchemy import SQLAlchemy

app.config[&amp;quotSQLALCHEMY_DATABASE_URI&amp;quot] = &amp;quotsqlite:///base.db&amp;quot
db = SQLAlchemy(app)این کد( به غیر از بخش ایمپورت) باید زیر تعریف متغییر app در کد های پست های قبلی قرار بگیره.app.config[&quot;SQLALCHEMY_DATABASE_URI&quot;] یک config رو برای app تنظیم می کنه که محل database رو نمایش می ده، با این محل دیتابیس در پوشه instance قرار می گیرههر model در SQLAlchemy یک Table در Database هست، و هر متغییر در اون model یک ستون در اون جدولبرای مثال این model کاربر ها هست:class User(db.Model):    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String, unique=True, nullable=False)
    password = db.Column(db.String, unique=False)حالا می توانید با استفاده از این کلاس، از این مدل استفاده کنید.افزودن به دیتابیسبرای افزودن مقادیر به دیتابیس، باید یک مدل از کلاس را ایجاد کنین و بعد اونو توی دیتابیس اضافه کنین.برای این کار:u = User(username=&lt;Ali&gt;, password=&lt;123&gt;)
db.session.add(u)
db.sessin.commit()اینجا، بعد از ساختن مدل، اونو با استفاده از db به session اضافه کردیم.(ر)session چیه؟سشن یه بخشی از SQLAlchemy هست، اگه با git آشنا باشین، session یه چی مثل همونه، اول توی استوریج ذخیره می شه و بعد به دیتابیس اصلی commit میشه.اینم همونه، شما می تونین هر چند تا تغییر رو ایجاد کنین، و بعد از همه ی اونا برای اینکه دیتابیس تغییر کنه، باید اونا رو توش کامیت کنین.حالا باید به اون دسترسی پیدا کنیمدسترسی به مقادیر دیتابیسبرای گرفتن مقادیر باید از query که مدلمون از SQLAlchemy ارث برده استفاده کنیم، چند راه برای این کار وجود دارد که الان می گیم:u = User.quey.filter_by(username=&lt;ali&gt;).first()
u = User.query.get(1)
u = User.query.get_or_404(1)توی کد اول، اولین کاربری که نام کاربری اش ali باشه رو میگیریم، در مقابل اون .all وجود داره که یک نوع لیست از تمامی مقادیر پیدا شده می ده، چند تا دیگه هم برای گرفتن آخری و... هست.کد دوم، با استفاده از آی دی یک کاربر رو می گیره، که در این کد اولین کاربر هست، از اونجا که آی دی ها unique هستن نیازی به .first نیست. ولی توجه داشته باشین که حتی اگر فیلد های دیگه هم Unique باشن، بازم نیاز به .first دارن.کد سوم در صورتی که در یک route استفاده بشه، در صورت وجود نداشتن آی دی، خطای 404 می ده، با استفاده از کد دوم، در صورت وجود نداشتن خطای 500 داده می شه.حالا....حذف مقادیر از دیتابیسهمونطور که شاید خودتون حدس زده باشید، برای حدس مقادیر باید از session.delete استفاده کنیم، دیگه کدش رو نمی نویسم.تغییر مقادیر در دیتابیسبرای تغییر مقادیر، کافیه اون مدلی که از کلاس ساختیم رو تغییر بدیم و بعد هم commit کنیم.برای مثال:u = User.query.get(1)
u.password = &lt;321&gt;

db.commit()با اینکار مقادیر داخل دیتابیس تغییر می کنناستفاده از Flask Loginفلسک لاگین، یکی از کتابخانه های مربوط به فلسک است که برای توسعه احراز هویت ها و مدیریت کاربران استفاده می شود، برای استفاده از این کتابخانه باید اول آن را نصب کنید.pip install Flask-loginبعد از نصب این کتابخانه، باید اول یک مدل از manager اش ایجاد کنیم و بعد یک فانکشن برای احراز هویت بنویسیم تا بتونیم توی route ها ازش استفاده کنیم.Login_mg = LoginManager(app)این کد رو زیر بخش کانفیگ های app بنویسین، حالا باید مدل کاربر رو به این لینک کنیم.حالا این کد رو بالای بخش model ها قرار بدین@Login_mg.user_loader
def load_user(user_id):
    return User.query.get(int(user_id))حالا می تونیم با ایمپورت کردن چند تا چیز، از این کتابخانه استفاده کنیم، ولی اول باید توی مدل user ها یه تغییر ایجاد کنیم.from flask_login import UserMixin
class User(db.Model, UserMixin):
....
# ----------------------------------------------------------------from flask_login import login_user, login_requiredlogin_required, current_user, logout_userکلاس user رو مثل بخش اول تغییر بدین.(ر) logjn_user یک مدل از کلاس user ها می گیره و اونو login می کنه، حالا می تونین از current_user برای دسترسی به کاربر لاگین شده استفاده کنین.دقت کنین که current_user دقیقا مثل مدلی هست که از کلاس کاربران می گیرین، مثلا برای تغییر مقادیر، به جای گرفتن مدل از داخل دیتابیس، می تونین از همین current_user استفاده کنین و بعدم commit کنین.یه نکته دیگه هم اینه که برای فهمیدن این که الان کاربری login کرده یا نه، میتونین از current_user.is_authenticated که یک متغییر بولین هست استفاده کنین، اما برای قطع کردن دسترسی کابران وارد نشده به صفحات، نیازی به این کار نیست...برای جلوگیری از ورود کاربران لاگین نشده، باید اول چند تا کانفیگ انجام بدین.این کد رو زیر کد loginmanager قرار بدین:Login_mg.login_view = &amp;quot/login&amp;quot
Login_mg.login_message = &amp;quot&amp;quotبخش اول کانفیگ، میگه که اگر کاربری وارد یک صفحه شد، و باید بعد از لاگین به آن وارد می شد، به صفحه /login منتقل شود.کد دوم پیامی که نمایش داده می شود را می گوید، ما هنوز به بخش پیام ها نرسیده ایم، پس این بخش را خالی میگذاریم.حالا کافی است در هر route، علاوه بر استفاده از دکوریتور app.route، از دکوریتور login_required هم استفاده کنین.برای مثال@login_required
@app.route(&#039;/settings&#039;)
def settings():
...برای این پست بسه، بقیه مباحث بمونه برای پست بعدی..❤️💬</description>
                <category>Ali Zeiynali</category>
                <author>Ali Zeiynali</author>
                <pubDate>Fri, 09 Feb 2024 15:01:02 +0330</pubDate>
            </item>
                    <item>
                <title>مرور کتاب &quot;دختری که رهایش کردی&quot; - چالش طاقچه</title>
                <link>https://virgool.io/@Ali_Z/%D9%85%D8%B1%D9%88%D8%B1-%DA%A9%D8%AA%D8%A7%D8%A8-%D8%AF%D8%AE%D8%AA%D8%B1%DB%8C-%DA%A9%D9%87-%D8%B1%D9%87%D8%A7%DB%8C%D8%B4-%DA%A9%D8%B1%D8%AF%DB%8C-%DA%86%D8%A7%D9%84%D8%B4-%D8%B7%D8%A7%D9%82%DA%86%D9%87-mfipcpbgviiz</link>
                <description>این مقاله، دومین مقاله ی من در چالش طاقچه است، اولین مقاله در مورد کتاب &quot;کتابخانه نیمه شب&quot; و این یکی در مورد کتاب دختری که رهایش کردی است.کتاب &quot;دختری که رهایش کردی&quot;، یک کتاب زیبا در ژانر عاشقانه است که با نویسندگی &quot;جوجو مویز&quot; به چاپ رسیده است، این کتاب در چند زمان مختلف به صورت همزمان اتفاق می افتد.اولین زمان، هنگام جنگ جهانی اول است، دومی، تقریبا در زمان حال است، این داستان، داستان یک نقاشی به نام &quot;دختری که رهایش کردی&quot; است، این نقاشی، یک نقاشی است که نقاشی به نام ادوارد برای همسرش در جنگ جهانی اول کشیده است، ادوارد مجبور شده است به جنگ برود و به همین دلیل همسرش را رها کرده است، اما برای اینکه یادگاری از خود جا بگذارد، یک نقاشی از همسرش سوفی، می کشد، او نام این نقاشی را &quot;دختری که رهایش کردی&quot; می گذارد و آن را به سوفی هدیه میکند.مدت ها می گذرد و سوفی نقاشی را نزد خود نگاه می دارد، تا زمانی که آلمانی ها شهر آنها را نیز تصرف می کنند، خانواده سوفی یک هتل را صاحب هستند، این هتل به سوفی رسیده است، هنگامی که آلمانی ها شهر را تصرف میکنند، از سوفی می خواهند هتل را به محلی برای زندگی آلمانی ها تبدیل کند.سوفی که در ته دل از این حرکت ناراحت است، از سر ناچاری این کار را انجام می دهد، اما مردم دهکده کم کم از او بدشان می آید، چون او با آلمانی ها می گردد.مدتی میگذرد و بالاخره سوفی خبری از ادوارد به دست می آورد، ادوارد در یکی از بدترین اردوگاه های آلمانی ها است و دارند او را به صعب ترین کار ها وادار می کنند، سوفی که این را می شنود، دست به هر کاری می زند تا ادوارد را نجات داده و پیش او برود، دست به هر کاری....ادامه داستان، در مورد زنی در زمان حال است، او مدت ها بعد از اینکه آن اتفاق ها می افتد، نقاشی سوفی را به دست آورده است، این نقاشی از هزاران جا گذشته و به دست هزاران آدم افتاده است،اما بعد از آن، به دست این زن رسیده.نقاشی نیز هدیه ای از شوهر او است، شوهری که معمار بوده و حالا مرده است، این نقاشی یکی از ارزشمند ترین دارایی های زن است، تا اینکه مردی ادعا می کند از خانواده سوفی است و می خواهد نقاشی را که مال خودشان بوده پس بگیرد....بخشی از کتاب:امروز اونا سوفی لفیور رو گرفتن، به طرز بدی بردنش، صحنه ای که ممکن نیست فراموش کنم، مشغول کارای خودش توی زیرزمین لوکاگ روژ بود که دو تا آلمانی از اون طرف میدون اومدن و از پله ها آوردنش بالا و مثل یه مجرم هلش دادن بیرون، خواهرش گریه کنان التماس می کرد. طفل یتیم لیلیان بثیون هم گریه می کرد. خیلیا جمع شدنو شروع کردن با صصدای بلند اعتراض کردن، اما اونا به آسونی مگس پروندن اونا رو کنار زدن. دو سالخورده وسط اون شلوغی روی زمین افتاده بودن، قسم می خورم، وای خدایا، اگر قرار بود برای کشتن ما جایزه ای در کار باشه، آلمانی ها مشتاقانه آماده ی گرفتنش بودن. با ارابه ی دستی اون دختر رو بردن توی ماشین حمل حیوانات، شهردار سعی کرد اونا رو قانع کنه که نبرنش، اما این روزا شهردار با از دست دادن دخترش خیلی حساس شده بود و چیزی نمونده بود که جلوی آلمانیا زمین بیفته</description>
                <category>Ali Zeiynali</category>
                <author>Ali Zeiynali</author>
                <pubDate>Tue, 30 Jan 2024 21:04:32 +0330</pubDate>
            </item>
                    <item>
                <title>چطور یک هکر شویم؟ | راهنمای کامل برای هکر شدن - قسمت اول</title>
                <link>https://virgool.io/@Ali_Z/%DA%86%D8%B7%D9%88%D8%B1-%DB%8C%DA%A9-%D9%87%DA%A9%D8%B1-%D8%B4%D9%88%DB%8C%D9%85-%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%DA%A9%D8%A7%D9%85%D9%84-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%87%DA%A9%D8%B1-%D8%B4%D8%AF%D9%86-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-p1xtgwfgwgon</link>
                <description>اول، باید ببینیم هک یعنی چی؟ هک که می گیم، دقیقا منظورمون چیه؟هر کاری که باعث اختلال در کار یک سیستم، یک وبسایت، نرم‌افزار و .... بشه، هک نامیده می شه.برای مثال، شخصی ۹۹ گوشی را با google map در یک خیابان خالی کشید. گوگل مپ آن خیابان را قرمز نشان داد و تمام مسیر ها را به مسیری غیر از آنجا تغییر داد، اون کاری نکرد که به سرور های گوگل یا ... آسیب بزنه یا بهشون دسترسی پیدا کنه، اما باعث اختلال در سیستم گوگل مپ شد و این یک هک نامیده شد.مطمئنا این هک، اون هکی نیست که شما انتظارش رو دارین، هکی که ما معمولا ازش نام می بریم و میگوییم من هکرم، هک به معنای دسترسی به یک سرور، سیستم، نرم افزار و... است.اول از همه، می خوایم چند تا اصطلاح هکری رو با هم بررسی کنیم.۱. سرور: اینو که همتون می دونین، سایت روش سوار می شه و یک نگهدارنده فایل ها است و....۲. کلاینت: اینم تقریبا معلومه، کلاینت به هر دستگاهی گفته می‌شه که به سرور وصل می‌شه۳. زیرو دی (zero day) : به یک آسیب پذیری کشف نشده در بک سیسم می‌گن، مثلا یک مشکلی که توی ویندوز هست و میشه باهاش هر ویندوزی رو هک کرد، اما ویندوز هنوز اون آسیب پذیری رو پیدا و رفع نکرده.۴. وان دی (one day): به آسیب پذیری کشف نشده ای می گن که حالا کشف شده! بعد از کشف شدنش این اسم رو روش میذارن.۵. هکر کلاه سیاه: هکری که برای دزدی و ... دست به هک میزنه۵. هکر کلاه سفید: هکری که برای سازمان های دولتی و پلیس و... یا برای تست آسیب پذیری هک میکنه۶. هکر کلاه خاکستری: هکری که صرفا نمی خواد هک رو به صورت یک حرفه انجام بده و هک رو فقط برای یادگیری و پز دادن و... می خواد.۷. کیلاگر: نرم افزار، یا قطعه سخت افزاری، که هر دکمه ای که روی کیبورد فشرده می شه رو ذخیره می‌کنه.۸. ویروس: فایلی که دچار اختلال در سیستم می شه و مشکلاتی به وجود میاره.۹. باج افزار: یک نوع ویروس که تمام دسترسی های سیستم رو از شما می گیره (فایل ها رو قفل می‌کنه و...) و بابت باز گرداندن اون، از شما پول زیادی می خواد.۱۰. بد یو اس بی (bad USB): یک یو اس بی که معمولا توسط برد های آردوینو و رزبری پای نوشته می شه و با اتصال به سیستم، اختیار اونو در دست می گیره یا یک فایل اجرایی رو اون اجرا می کنه.۱۱. هش: هش ها رمز گذاری های خاصی هستند، که با الگوریتم های ریاضی قوی یک متن رو، هر تعداد کاراکتر هم که باشه، به یک عبارت یکتا می رسونند، بعدا بیشتر در مورد هش ها صحبت می کنیماینا چند تا از اصطلاحات مهم هکری بودن، نکته بعدی که هر هکری باید بلد باشه، حملات مختلف به سیستم هستن، انواع جملات مختلف برای ورود به سیستم های وبسایت، نرم افزار ها و... وجود داره، می خوایم چندتا از اونا رو با هم بررسی کنیم.1.  حمله بروت فورس: در این نوع حمله، هکر با تست کردن رمز عبور های معروف، یا با تست کردن تمام حالات مختلف برای یک رمز عبور، اون رمز رو هک می کنه، هکر در این روش می تونه خیلی از هش ها، رمز عبور سرور، رمز عبور کاربر، رمز وای فای، رمز عبور فایل های زیپ و... رو هک کنه۲. حمله دام(Dom): در این حمله، یک کاربر با یک نرم افزار یا کد، درخواست های بسیار زیادی را در کسری از ثانیه به یک وب‌سایت می فرستد، در این حمله، سرور به خاطر درخواست های زیاد مختل شده و نمی تواند به درخواست های عادی کاربران جواب دهد. در این روش هکر می تواند یک سرور را از دسترس خارج کند، این حمله معمولا به سرعت سرکوب می شود و آی پی هکر سریعا بلاک می شود، این یکی از معروف ترین انواع هک است و تقریبا تمام وب‌سایت ها در برابر آن ایمن هستند.۳. حملات دی‌دام (DDom): در این حملات، چند نفر که یک گروه هکری هستند، با آی پی های متفاوت و دستگاه های متفاوت از نقاط مختلف کشور حمله دام را در یک زمان انجام می‌دهند، سرور نمی تواند همه این افراد را با هم سرکوب کند، این حمله نیز بعد از مدتی معمولا سرکوب خواهد شد، اما طول مدت آن و اثر گذاری آن بیشتر از حمله دام است.۴.  حمله تزریق SQL: در این حمله، هکر به یک وب‌سایت کد های اس کیو ال تزریق می کند، این در صورتی است که وب سایت آسیب پذیریSQL injection داشته باشد که معمولا سایت های قدیمی یا ضعیف که توسط php و sql نوشته شده اند از آن ایمن نیستند. در این حمله، سایت های آسیب پذیر معمولا در بعضی صفحاتشان، یک ورودی یا ... دارند که به فایل های اس کیو ال آنها وصل است، برای مثال، اینپوت جستجو در وبسایت، در این اینپوت با جستجوی متن نوشته شده در اینپوت در فایل های اس کیو ال، نتایج را پیدا می کنند، حال هکر ها به جای متن جستجو یک کد اس کیو ال می نویسند و این کد در sql اجرا می‌شود. این نوع حملات ها معمولا با ابزار انجام می شوند و کاملا دسترسی به داده های وب‌سایت را به دست می‌آورند.۵. حملات شخص ثالث: در این نوع حملات، هکر بین مودمِ کلاینت و سرور قرار می‌گیرد و اطلاعات ارسالی آن را می گیرد، برای مثال هنگامی که کلاینت به اینستاگرام درخواستی با نام کاربری و رمز عبور می‌فرستد، هکر می تواند این پیام را ببیند و نام کاربری و رمز عبور را بخواند و یا حتی آن ها را تغییر دهد. این هک یکی از حملات بسیار سخت است، چون پیام های  بین کلاینت و سرور کاملا و بل انواع روش ها رمزگذاری می شوند و ورود به آنها سخت است.این پنج حمله، پنج تا از رایج ترین حملات هک بودند، همانطور که بالاتر گفتم، می خواهیم کمی در مورد هش ها صحبت کنیم.هش ها دقیقا چه هستند؟هش ها، رمزگذاری های صعب الهکی(سخت نگیرین دیگه!) هستند که توسط یک سری الگوریتم های ریاضی انجام می‌شوند، هر متنی با هر تعداد کاراکتری که به یک هش بدهید، او آن را به یک رشته با طول مشخص تبدیل می‌کند، فایل های زیپ هم به همین صورت کار می‌کنند.هش ها چند نوع دارند، اولین نوع آنها غیر قابل آن هش(unhash) یعنی غیر قابل برگرداندن به حالت عادی هستند، مگر اینکه یک فرد بتواند در مثلا ۳ سال این کار را انجام دهد.البته راه های دیگری هم برای آنهش هستند و یکی از آنها این است که الگوریتم هش کردن را برعکس کنند، این روش در بسیاری از موارد ممکن نیست و بسیار سخت است، برای مثال هش MD5 یکی از روش های هش مطمئن بود، اما حالا، این هش سست شده و با توجه به کشف شدن الگوریتم آنهش کردن این هش، می‌توان آن را شکست.بسیار دیگری از هش ها که خیلی مطمئن تر هستند، مانند هش های sha، که شامل شا۱، شا ... می شوند بسیار مطمئن تر هستند.نوع دوم هش ها، هش های کلیدی قرینه هستند، هش های کلیدی قرینه، به هش هایی گفته می‌شود که با یک کلید هش و با همان کلید آنهش می‌شوند، الگوریتم های واقعی این هش ها بسیار پیچیده اند، اما مثلا یک رمزگذاری ساده با کلید وجود دارد و آن هم این است که کلید را بدون حروف تکراری می‌نویسند و بعد حروف الفبا را با ترتیب، بدون احتساب آنهایی که در کلید بودند بعد از آن می‌نویسند، سپس زیر هر حرف، حروف الفبا را به ترتیب می‌نویسند.چیزی مانند این:س ل ا م خ و ب ی پ ت ث ج چ ح د ذ ر ز ژ ش ص ض ط ظ ع غ ف ک گ ن ها ب پ ت ث ج چ ح خ د ذ ر ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن و ه یکلید این هش &quot;سلام خوبی&quot; هست که اول حروف نوشته می شه.اگر حروف رو استباه نوشتم به بزرگی خودتون ببخشید (:حالا هر حرف در سطر پایین، جایگزین حرف بالایی‌اش می شود، الف، سین می شود و...به همین روش می‌توان یک هش گذاری قرینه انجام داد.نوع دیگر هش، هش کلیدی نامتقارن است، این نوع هش با یک کلید رمزگذاری و با یک کلید دیگر رمزگشایی می‌شود، نمی‌توان از کلید رمزگذاری به کلید رمزگشایی دست پیدا کرد (یا سخت است و زمان می‌برد) اما می‌توان از کلید رمزگشایی به کلید رمزگذاری دست پیدا کرد.این سه تا، روش های هش کردن یک متن بودند، برای این پست بسه، توی پست بعد بیشتر در این مورد صحبت می‌کنیم.💬❤️</description>
                <category>Ali Zeiynali</category>
                <author>Ali Zeiynali</author>
                <pubDate>Sun, 21 Jan 2024 16:31:08 +0330</pubDate>
            </item>
                    <item>
                <title>مرور کتاب &quot;کتابخانه نیمه شب&quot; - چالش طاقچه</title>
                <link>https://virgool.io/@Ali_Z/%D9%85%D8%B1%D9%88%D8%B1-%DA%A9%D8%AA%D8%A7%D8%A8-%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-%D9%86%DB%8C%D9%85%D9%87-%D8%B4%D8%A8-%DA%86%D8%A7%D9%84%D8%B4-%D8%B7%D8%A7%D9%82%DA%86%D9%87-dg0gebamo0ip</link>
                <description>مدت زیادی بود طاقچه داشتم، اما هیچوقت توی چالش اون شرکت نکردم، تصمیم گرفتم این اولین بار باشه، لذت ببرین!نورا، دختری نوزده ساله است، او یک زندگی ناراحت کننده و غم انگیز را همراه با گربه اش تجربه می کند، مدتی که می گذرد، گربه او می میرد و  او از محل کارش اخراج می شود، کم کم، خلاء تنهایی، وجود نورا را پر می کند. قرص های افسردگی دیگر جواب نمی دهند، نورا تصمیم خود را می گیرد، زندگی به نورا پشت کرده است، حالا نوبت نورا است تا به زندگی پشت کند.کتاب کتابخانه نیمه شب، یک کتاب بسیار زیبا و فلسفی است، که داستان دختری در میان مرگ و زندگی را روایت می کند، این داستان، با نثر زیبا و روان خود، مخاطب را کاملا جذب کرده و احساسات شخصیت اصلی را برای او نیز تداعی می کند.کتابخانه نیمه شب، احساس افسردگی را به تصویر می کشد، این کتاب به خوبی افسردگ را توصیف کرده و راهی برای آن پیدا می کند، شخصیت اصلی کتاب که او نیز افسرده است، با پشت سر گذاشتن چالش های زیادی، توانسته است به زندگی خود با بینشی دیگر بنگرد.در داستان، نورا که افسرده است، پس از خودکشی، به یک کتابخانه می رود و در آنجا تمامی حالات زندگی خود را با تمامی امکانات و تصمیم هایی که می توانسته بگیرد تجربه می کند، هر کتاب پنجره ای به دنیای دیگری است، یک دنیای موازی که نورا نیز در آنجا وجود دارد. کتابخانه، یک کتابدار نیز دارد، کتابدار که کتابدار مدرسه  اصلی نورا  و یکی از بهترین همدمان نورا در زندگی اصلی بوده، نقش یک موجود مهربان را ایفا می کند، نورا به دلیل مهربانی او، او را مهربان ترین فرد زندگی اش می بیند.پس از مدتی نورا با یکی دیگر که او نیز بین دو زندگی گیر کرده است ملاقات می کند، آنها با هم دوست می شوند و مدتی با هم صحبت می کنند، این خودش یک محرک برای اشتیاق نورا به زندگی می شود.پس از مدت زیادی، نورا یک زندگی خوب برای خود انتخاب می کند، یک زندگی که در آن زن و بچه دارد و بسیار خوشحال است، دوست دارد در آن زندگی بماند و لحظات خوش بیشتری را سپری کند، اما در پس دریای ناخودآگاه ذهنش، مانعی بر این کار وجود دارد، نورا خود را متعلق به این زندگی نمی داند و می خواهد از آن جدا شود.نورا برخلاف میل باطنی اش به کتابخانه باز می گردد و آن را در حال نابودی می بیند، کتابدار خوشحال است، او می گوید که نورا به زندگی علاقه مند شده است و می خواهد به زندگی اصلی خود بازگردد.کتابخانه نیمه شب به ما لذت زندگی را یاد می دهد، اینکه برای فهمیدن باید زندگی کرد. اینکه هرگز نباید خسته و ناامید شد و همیشه باید به دنبال هدف ها رفت.بخشی از کتاب:حسرت خوردن برای زندگی هایی که تجربه شان نکرده ایم، ساده است. گفتن اینکه کاش مهارت های متفاوتی به دست آورده بودیم یا به پیشنهاد های دیگری جواب مثبت داده بودیم آسان است.راحت است که آرزو کنیم کاش قبلا بیشتر تلاش می کردیم، اطرافیانمان را بیشتر دوست می داشتیم، در مسائل مالی دقت بیشتری به خرج می دادیم، محبوب تر می شدیم، در گروه موسیقی مان می ماندیم، به استرالیا می رفتیم، به پیشنهاد قهوه خوردن با کسی جواب مثبت می دادیم یا بیشتر یوگا کار می کردیم.دل تنگی برای دوستانی که نداشتیم و کار هایی که نکرده ایم و کسی که با او ازدواج نکرده ایم و فرزندی که به دنیا نیاورده ایم تلاش زیادی نمی خواهد.خیلی سخت نیست که خودمان را از دریچه چشم دیگران ببینیم و آرزو کنیم به همان شکلی بودیم که آنها ما را می بینند. حسرت خوردن و تا ابد در حسرت غرق شدن آسان است.مشکل اصلی حسرت زندگی هایی نیست که تجربه نکرده ایم، مشکل اصلی خود حسرت است، حسرت است که باعث میشود در خود چروکیده و پژمرده شویم و حس کنیم بزرگ ترین دشمن خودمان و دیگران هستیم.</description>
                <category>Ali Zeiynali</category>
                <author>Ali Zeiynali</author>
                <pubDate>Tue, 16 Jan 2024 19:12:28 +0330</pubDate>
            </item>
                    <item>
                <title>فلسک پیشرفته، قسمت دوم</title>
                <link>https://virgool.io/@Ali_Z/%D9%81%D9%84%D8%A7%D8%B3%DA%A9-%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%87-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%85-csewdfq0v4mi</link>
                <description>توی این پست، می ریم سراغ jinja, و static ها و بعد از اون هم model ها رو با هم بررسی می کنیم.توی پست قبل، چیزی شبیه به این ساختیم:حالا باید توی فایل index.html مون، کد هایی رو بنویسیم.فلاسک، از یک موتور template استفاده می کنه به نام Jinja, جینجا به شما قابلیت ها و کد های جدیدی می دهد و شما می توانید از کد های پایتون درون HTML, CSS, و JS استفاده کنید.دقت کنید که تمامی کد های Jinja باید در فایل اصلی HTML نوشته شوند.برای مثال، شما می توانید از کد زیر در فایل HTML خود استفاده کنید تا یک حلقه for را ایجاد کنید.این کد، Hello! را ده بار برای شما پرینت می کند، دقت کنید که تمامی کد های jinja، نیاز به تگ بسته شدن هم دارند.اما حالا چطور از متغییر های برنامه درون فایل HTML مون استفاده کنیم؟اولین قدم، اینه که اون هارو به render_template پاس بدیم، اینجوری:render_template(&lt;index.html&gt;, text=&lt;hello!&gt;)&lt; &gt; رو که از پست های قبلی یادتون هست؟حالا کافیه اونو به صورت زیر استفاده کنیم:همونطور که احتمالا متوجه شدین، برای نوشتن کامند از کد {% command %} و برای متغییر ها از کد {{ variable }} استفاده می کنیمکد بعدی jinja که می خواهیم با هم بررسی کنیم، کد {% raw %} است، این کد ( که با {% endraw %} هم بسته می شود) باعث می شود که تمام متن های بین کد باز و بسته آن، جزو کد های jinja محسوب نشود. این مخصوصا برای برنامه نویس های Vue و امثال آن ها بسیار مورد استفاده قرار می گیرد.و آخرین کد، کد include است، کد include تگ بسته ندارد و به صورت زیر استفاده می شود.{% include &lt;navbar.html&gt; %}این کد، فایل دیگری را وسط فایل شما قرار می دهد، برای مثال، شما می توانید کد های مربوط به navbar خود را در یک فایل html در همان مسیر بریزید و سپس آن را در اول پروژه خود اضافه کنید.همچنین می توانید با .. به پوشه های قبلی، مراجه کنیدحالا اگر بخواهیم فایل عکسی، فیلمی و... ای را در پروژه مان اضافه، و از آن استفاده کنیم، باید چه کار کنیم؟کافی است در پوشه استاتیک(در پست قبل با کامند ها آن را ساختیم) فایل خود را قرار داده و در HTMl با لینک /static/.... از آن استفاده کند.شما می توانید پوشه static را پوشه بندی کرده و فایل های خود را در قسمت های مختلف آن قرار دهید.در پست بعدی، محث model ها را داریم.❤️💬</description>
                <category>Ali Zeiynali</category>
                <author>Ali Zeiynali</author>
                <pubDate>Tue, 09 Jan 2024 11:03:46 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش فلسک پیشرفته، قسمت اول</title>
                <link>https://virgool.io/@Ali_Z/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%81%D9%84%D8%A7%D8%B3%DA%A9-%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%87-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-gajapxu3rvnw</link>
                <description>قبلا توی پست https://virgool.io/@Ali_Z/%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D9%88-%D8%A8%DA%A9-%D8%A7%D9%86%D8%AF-3-%D9%81%D9%84%D8%A7%D8%B3%DA%A9-ae37dqfsnaps در مورد فلاسک کمی صحبت کردیم، تصمیم گرفتم یکم این دوره رو ادامه بدم و به جاهای خوبی برسونم.اول از همه، چرا فلاسک؟یک مدت به دنبال یک اند نویسی با پایتون بودم، طبیعتا جنگو اولین چیزی بود که پیدا کردم، دوره های جنگو رو دیدم و دیدم و سخت تلاش کردم تا اینکه متوجه شدم یادگیری جنگو بدون پیش آمادگی کار حضرت فیل هم نیست!پس رفتم سراغ چیزای دیگه، یه چند تا فریمورک دیگه رو تست زدم، مقاله های مختلف خوندم و به فلاسک رسیدم، فلاسک یک میکروفریمورک بود که قابلیت های جالبی ارائه می داد، می تونست توی پروژه های کوچک به جنگو برسه و حسابی هم راحت و آسون بود.بعد از یادگیری فلاسک هم، یه آمادگی خوب برای یادگیری جنگو داشتم و کارم حسابی راحت تر شد.کمی در مورد معماری فلاسکفلاسک از معماری خاصی استفاده نمی کنه!برعکس جنگو که شما باید حتما ( و 2 تا حتما دیگه ) از معماری MVC (model view control) استفاده بکنین، توی فلاسک شما کاملا آزادین و می تونین هر جوری که دلتون خواست، معماری تون رو بچینین.سه نوع معماری مرسوم توی فلاسک وجود دارهنوع اول به این صورته که شما فقط یک فایل می سازین و تمام کد های برنامه رو توی اون می چینین و درواقع اصلا یک معماری نیست و برای پروژه های خیلی کوچیک به کار میره!نوع دوم به این صورته که شما یک پوشه درون پروژه می سازین و درون اون پوشه فایل های مربوط به model ها و route ها و.... می ریزین و در پروژه یک فایل run برای اون ایجاد می کنین.نوع سوم به این صورته که شما برای هور بخش از برنامه یک پوشه جدا می سازین و کد های مربوط به route ها و... اون بخش رو درون اون پوشه می ریزین، مثلا یک پوشه برای کاربر ها، یک پوشه برای پست ها و.... و برای برنامه های بزرگ کاربرد دارهبریم برای شروعاول از همه pip install Flaskفلاسک رو نصب می کنیم.حالا با دستورات زیر، پروژه رو ایجاد می کنیم (دستورات برای لینوکس هستن)mkdir project
cd project
mkdir templates
mkdir static
touch app.pyحالا app.py رو باز می کنیم و کد های زیر رو توش می نویسیم.from flask import Flask, render_template

app = Flask(__name__)

if __name__ == &#039;__main__&#039;:
    app.run(debug=True)این کد برنامه فلاسک ما رو اجرا خواهد کرد، اما هنوز هیچ route ای به آن اضافه نکرده ایم، پس هنگام اجرا و باز کردن آن، با یک صفحه 404 مواجه خواهیم شد.کد های بعدی را بین app= و if ... بنویسید.app.route(&lt;/&gt;)
def index():
    render_template(&lt;index.html&gt;)ویرگول علامت نقل قول را درست نمایش نمی دهد، پس به جای آن از &lt; و &gt; استفاده می کنمحالا به پوشه templates بروید و فایل index.html را ایجاد کرده و کد هایی درون آن بنویسید.بعد از اجرای پروژه، به لینک داده شده بروید و از اولین پروژه فلاسک خود خوشحال شوید!فعالسازی git روی پروژه را یادتان نرود!لینک پروژه ها را در GitHub زیر همین پست کامنت کنید تا با هم پی برویم.💬❤️</description>
                <category>Ali Zeiynali</category>
                <author>Ali Zeiynali</author>
                <pubDate>Sun, 07 Jan 2024 13:59:45 +0330</pubDate>
            </item>
                    <item>
                <title>10 سایت برای برنامه نویسان</title>
                <link>https://virgool.io/@Ali_Z/10-%D8%B3%D8%A7%DB%8C%D8%AA-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%D8%A7%D9%86-gfu4gulsndj8</link>
                <description>1. Figmaاین وب سایت یک وب سایت حرفه ای برای طراحی UI,UX یا پست های اینستاگرام یا تخته های برنامه و plan و... است که میتوان پروژه های روی آن را با دیگران اشتراک گذاری کرد و دسترسی برای edit یا دیدن ارائه داد.این سایت همچنین یک نسخه pro نیز دارد که میتوان با آن از AI, پست های نامحدود و... بهره مند شد.این سایت بخش پلاگین های حرفه ایی هم دارد که میتوانید از آنها استفاده کنید، این پلاگین ها شامل پلاگین هایی برای تبدیل طرح به کد Vue, React, HTML, CSS و... دارد، یا پلاگین هایی برای آیکون و عکس و AI و ...همچنین میتوانید با نصب نرم افزار این سایت، از قابلیت استفاده در دسکتاپ نیز بهره مند شوید که البته نیاز به آنلاین بودن دارد.2. Canvaاین وبسایت نیز یک وبسایت مانند وبسایت بالا است، با قابلیت ساخت ویدیو، پست های اینستاگرام، فیسبوک، کاور پروفایل شبکه های اجتماعی مختلف و...این وب سایت تکنولوژی های AI بسیار پیشرفته ای برای ویرایش عکس، ویرایش متن، ساخت فیلم با هوش مصنوعی و... نیز دارد که با خرید نسخه pro میتوانید از امکانات بیشتری بهره مند شوید.این وب سایت طرح ها و تمپلیت های زیادی نیز دارد که میتوانید از آنها در پروژه های خود استفاده کنید، همچنین کتابخانه های بزرگ رنگ، فونت، عکس، گرافیک، طرح و پلاگین های زیادی نیز دارد که کار استفاده از این سایت را ساده تر میکند.همچنین این سایت به نرم افزار های اندروید و دسکتاپ نیز مجهز است و میتوانید از آنها استفاده کنید.مزیت بزرگ این سایت نیز زبان فارسی آن است.شما بعد از اتمام پروژه خود در این سایت میتوانید آن را با یک کلیک در هزاران شبکه اجتماعی منتشر کنید، همچنین این وبسایت به youtube, Google Drive, One drive و... نیز مجهز است.3. Flaticonفلت آیکون یک وبسایت آنلاین است که زیر نظر فری پیک است و دارای بیش از 12 میلیون آیکون است، هر آیکون به صورت PNG و SVG در دسترس است، شما میتوانید به صورت رایگان 100 آیکون PNG را در ماه و با خرید اشتراک، تمامی آیکون ها به صورت SVG , PNG را دانلود کنید، این وب سایت منبع بسیار خوبی برای آیکون ها است.همچنین این سایت مجهز به یک سری آیکون های متحرک Gif و هزاران فونت آیکون رایگان اینتر فیس در شکل های مختلف است.شما میتوانید از API این وبسایت نیز در app های خود استفاده کنید.4. rayاین وبسایت یک وبسایت عالی در زمینه ساخت کدعکس است، شما میتوانید رنگ ها، سایز عکس، تم، بکگراند داشتن یا نداشتن و... را تعریف کنید و یک کدعکس عالی بسازید5. replitرپلیت یک وبسایت مخصوص انتشار پروژه های انواع زبان ها است، در این وبسایت شما تقریبا هر پروژه ای در هر framework ای را میتوانید منتشر کنید و یک لینک به آن ارائه دهید.سایت relpit یک سایت پروژه  است، شما میتوانید در این سایت پروژه های django, Flask, Socket, FastAPI و  ده ها کتابخانه پایتونی دیگر را منتشر کنید، حتی در این سایت میتوانید  پروژه های tkinter, pygame و پروژه های هزاران کتابخانه ی GUI پایتونی و  جاوا اسکریپتی و هزار زبان برنامه نویسی دیگر را نیز منتشر کنید و علاوه بر  اضافه شدن پروژه های شما به replit، بتوانید یک لینک را برای share کردن  با دیگران نیز بردارید.لازم  به گفتن است که این سایت محدودیت استفاده از ram, CPU و disk دارد و البته  میتوانید با upgrade کردن این محدودیت ها را بسیار کم کنید.سایت  replit دارای محیط بسیار خوبی برای توسعه و دیپلوی است، شما مانند یک vps  به سرور خود دسترسی دارید و حتی یک bash با دسترسی کامل نیز در اختیار شما  قرار دارد، ابزار های زیادی نیز مانند database Tools و... هم برای استفاده  شما در دسترسند.البته دقت  داشته باشید که این سایت تحریم است و علاوه بر تحریم بودن خود سایت، لینک  های پروژه نیز تحریم است و شما حتما باید با فیل.تر شکن یا تحریم شکن وارد  این سایت شوید.شما میتوانید با upgrade کردن یک deploy کامل و همیشگی نیز انجام دهید، تا دسترسی کامل داشته باشید.در ضمن، لینک هر پروژه {project_name}--{username}.repl.co است که با باز کردن آن میتوانید صفحه پروژه را مشاهده کنید.همچنین  این سایت مجهز به قابلیت های AI خوبی نیز هست که شامل کمک در مورد پروژه،  در مورد سایت و... میشوند، و شما با upgrade کردن میتوانید حتی از ویرایش  های AI بهره مند شوید.6. geeks for geeksاصطلاح گیک(geek)، معنا های متفاوتی دارد و در طول زمان استفاده های مختلفی از آن شده، اما معنی آن خرخوان و شبیه به آن می شود، شاید شبیه به کسی که کل عمرش را روی چیزی گذاشته(مثل خر :دی) و روی آن چیز تعصب دارد، یک گیک به حساب بیاید.وبسایت گیکس فور گیکس، یک وب سایت وبلاگ محور، برای زبان های برنامه نویسی مختلف است، در آن، حرفه ای ها دانش خود را به اشتراک گذاشته اند تا دیگران هم از آن استفاده کنند.در این وب سایت، تمارین، راه های پیشرفت، مسیر های یادگیری یک حوزه، framework های مختلف، پروژه های بزرگ و... آموزش داده می شود، این وب سایت یکی از شبکه های بزرگ برای برنامه نویسان است.7. Gitاشتباه نکنید! این وبسایت، گیت نیست، این وبسایت یک وبسایت ایرانی در زمینه آموزش است، این وبسایت بیش از سی هزار آموزش دارد که نیمی از آنها رایگان و بقیه آنها فقط 24  هزار تومان هستند، تمام آموزش های این وبسایت انگلیسی بوده و آموزش های لیندکدین، اینستاگرام، یودمی و... را راسگان یا با قیمت بسیار کم در اختیار ما قرار داده.این وبسایت زیرنویس هوش مصنوعی به زبان های انگلیسی، ترکی، فارسی و... دارد و میتوان از آنها بهره برد.این وبسایت نه تنها آموزش های برنامه نویسی، بلکه بسیاری از زمینه های آموزشی دیگر را نیز پوشش می دهد.همچنین یک کتابخانه بزرگ موزیک، کتاب صوتی، پروژه افتر افکت و چند نرم افزار دیگر و... نیز دارد.8. vscodeنرم افزار vscode یکی از بهترین ویرایشگر های کد جهان است و استفاده از آن بسیار در بین برنامه نویسان رایج است، اما ممکن است کسی نتواند از vscode استفاده کنید یا به دلایلی استفاده آن در مرورگر برایش راحت تر باشد، این وبسایت این کار را ممکن کرده و عینا محیطی شبیه به محیط vscode دسکتاپ است(البته دقیقا همان است، کد های vscode دسکتاپ نیز با html, css, js نوشته شده است)شما می توانید مانند نرم افزار نیز از تمامی افزونه های marketplace استفاده کنید.9. diagramاین وبسایت یکی از بهترین ابزار ها برای کشیدن دیاگرام ها است، این وبسایت از انواع دایاگرام ها پشتیبانی می کند و میتوانید از المان های بسیار زیادی در آن استفاده کنید، همچنین این وبسایت انواع تم ها را برای دیاگرام شما دارد و میتوانید با تم های مورد نظر طراحی خود را انجام دهید.همچنین این وبسایت به گوگل درایو، وان درایو و.... نیز متصل است و میتوانید پروژه خود را در آنها ذخیره کنید.10. Regex 101این وبسایت یک وبسایت بسیار عالی در زمینه ساخت رگولار اکسپرشن است، در این وبسایت شما میتوانید regex های خود را ایجاد کنید و آنها را تست کنید، همچنین این وبسایت به شما نمونه کد Python, Java, Javascript, PHP و... نیز برای regex تان می دهد.این وبسایت یک لرن خوب هم دارد و خودش علاوه بر گفتن ارور ها، regex شما را بخش به بخش توضیح می دهد.قابلیت بسیار خوب این وبسایت، دیباگر آن است که regex شما را به حالت های مختلف در میاورد و میتوان مشکلات آن را حل کرد.❤️💬</description>
                <category>Ali Zeiynali</category>
                <author>Ali Zeiynali</author>
                <pubDate>Fri, 01 Dec 2023 13:18:47 +0330</pubDate>
            </item>
                    <item>
                <title>هر آنچه باید در مورد دیتابیس الاستیک سرچ بدانید - 5</title>
                <link>https://virgool.io/@Ali_Z/%D9%87%D8%B1-%D8%A2%D9%86%DA%86%D9%87-%D8%A8%D8%A7%DB%8C%D8%AF-%D8%AF%D8%B1-%D9%85%D9%88%D8%B1%D8%AF-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%DB%8C%DA%A9-%D8%B3%D8%B1%DA%86-%D8%A8%D8%AF%D8%A7%D9%86%DB%8C%D8%AF-5-szbgqiw7rcpd</link>
                <description>در این پست کمی دیگر به مبحث اسکریپت ها می پردازیم و Update ها، متغییر ها و...را تعریف میکنیم.آپدیتفیلدبرای آپدیت کردن یک doc توسط اسکریپت ها از این کد استفاده می شود.PUT my-index/_doc/1	{ &amp;quotcounter&amp;quot: 1,  &amp;quottags&amp;quot: [	   &amp;quotred&amp;quot ]}	POST my-index/_update/1	{	    &amp;quotscript&amp;quot: {	        &amp;quotsource&amp;quot: &amp;quotctx._source.counter += params.count&amp;quot,	        &amp;quotlang&amp;quot: &amp;quotpainless&amp;quot,	        &amp;quotparams&amp;quot: {	            &amp;quotcount&amp;quot: 4	        }	    }	}در این کد یک doc با id 1  و با یک لیست color و یک counter 1 میسازیم.در کد Update با زبان پینلس یک اسکریپت میزنیم و یک پارامتر کانت 4 به آن می پاسیم : دیدر کد، ctx به معنای کل doc است، _source فیلد های درون است و counter هم که فیلد است.در اینجا پارامتر کانت را به کانتر در داک اضافه کردیم.نتیجه: کانتر برابر 5 می شود.آرایه 	POST my-index/_update/1	{ &amp;quotscript&amp;quot: {	        &amp;quotsource&amp;quot: &amp;quotctx._source.tags.add(params[&#039;tag&#039;])&amp;quot,	        &amp;quotlang&amp;quot: &amp;quotpainless&amp;quot,	        &amp;quotparams&amp;quot: {	            &amp;quottag&amp;quot: &amp;quotblue&amp;quot	        }}}در این کد به آرایه colors مقدار blue اضافه می شود، add برای افزودن مقدار به آرایه در java و painless استفاده می شود.برای حذف تگ نیز از این کد استفاده کنید:ctx._source.tags.remove(ctx._source.tags.indexOf(params[&#x27;tag&#x27;]))برای دیگر کد ها میتوانید سرچ کنید یا به داکیومنت java و painless مراجعه کنیدبرای افزودن یک فیلد به داک نیز از اسکریپت زیر استفاده کنید.POST my-index/_update/1{ &amp;quotscript&amp;quot : &amp;quotctx._source.new_field = &#039;value_of_new_field&#039;&amp;quot}در اینجا یک فیلد new_field با مقدار value_of_new_field افزوده شده است.برای حذف هم: &quot;ctx._source.remove(&#x27;new_field&#x27;)و یک کد پیشرفته تر:if (ctx._source.tags.contains(params[&#039;tag&#039;])) { ctx.op = &#039;delete&#039; } else { ctx.op = &#039;none&#039; }در این کد در صورتی که tag ها شامل پارامتر تگ بشوند، ctx.op که مخفف oprationاست، را به delete تغییر می دهیم، یعنی عملیات دیلیت را بر روی آن چیز انجام میدهیم.یا در غیر این صورت هیچ کاری نمی کنیم.متغیر هابرای تعریف یک متغیر در painless به این صورت عمل کنید.POST my-index/_update/1{ &amp;quotscript&amp;quot: {	        &amp;quotsource&amp;quot: &amp;quotString newVar = &#039;HI!&#039;; ctx._source.message = newVar + params[tag]&amp;quot,	        &amp;quotlang&amp;quot: &amp;quotpainless&amp;quot,	        &amp;quotparams&amp;quot: {
                &amp;quottag&amp;quot: &amp;quotblue&amp;quot 
}}}اول dataType را مینویسیم و سپس مقدار را به آن می دهیم.بررسی چند اسکریپتاسکریپت اول 	POST mainindex/_update_by_query	{	    &amp;quotscript&amp;quot: {	        &amp;quotsource&amp;quot: &amp;quotctx._source.allwords = ctx._source.allwords.replace(&#039;–&#039;, &#039;;&#039;);ctx._source.allwords = ctx._source.allwords.replace(&#039;–&#039;, &#039;;&#039;);ctx._source.allwords = ctx._source.allwords.replace(&#039;،&#039;, &#039;;&#039;);ctx._source.allwords = ctx._source.allwords.replace(&#039;,&#039;, &#039;;&#039;);&amp;quot,	        &amp;quotlang&amp;quot: &amp;quotpainless&amp;quot	   },	   &amp;quotquery&amp;quot: {	     &amp;quotbool&amp;quot: {	        &amp;quotmust&amp;quot: [{	          &amp;quotexists&amp;quot: {	            &amp;quotfield&amp;quot:&amp;quotallwords&amp;quot}}],	      &amp;quotmust_not&amp;quot: [	         {	          &amp;quotbool&amp;quot: {	            &amp;quotshould&amp;quot: [	              {	                &amp;quotterm&amp;quot: {	                  &amp;quotallwords.keyword&amp;quot: {	                    &amp;quotvalue&amp;quot: &amp;quot&amp;quot }}},{	                &amp;quotterm&amp;quot: {	                  &amp;quotallwords.keyword&amp;quot: {	                    &amp;quotvalue&amp;quot: &amp;quot&amp;quot }}}]}}]}}}ممکن است درک این کد کمی سخت باشد، اما با چند بار خواندن و بررسی کردن، میتوان به خوبی آن را درک کرد.اول:کوئری میگوید هر جا که فیلد allwords خالی نباشد و allwords.keyword نیز وجود داشته باشد و مساوی با ; نباشد، این کد یک کد مخصوص برنامه نویسی داده است، در این کد هدف ما جایگزینی ویرگول، کاما و خط فاصله با ویرگول است تا هنگام پردازش دچار مشکل نشویم.در این پروژه قبلا پردازش هایی صورت گرفته بود و ممکن بود فیلد allword.keyword مساوی با ; شده باشداسکریپت دومPOST my-index/_update_by_query	{	    &amp;quotscript&amp;quot: {	        &amp;quotsource&amp;quot: &amp;quotctx._source.color.add(&#039;pink&#039;) &amp;quot,	        &amp;quotlang&amp;quot: &amp;quotpainless&amp;quot	    },	    &amp;quotquery&amp;quot: {	        &amp;quotbool&amp;quot: {	            &amp;quotmust&amp;quot: [	                {	                    &amp;quotexists&amp;quot: {	                        &amp;quotfield&amp;quot: &amp;quotcolor&amp;quot }}]}}}اسکریپت سوم 	POST my-index/1/_update_by_query	{	    &amp;quotscript&amp;quot: {	        &amp;quotsource&amp;quot: &amp;quotctx._source.array.add([&#039;entity_id&#039; :1, &#039;entity_title&#039; : &#039;Title,&#039;realation_type&#039; : &#039;realation_type&#039;]); &amp;quot,	        &amp;quotlang&amp;quot: &amp;quotpainless&amp;quot	    }	}این هم یک آرایه از آبجکت ها ایجاد میکند.اسکریپت چهارمPOST my-index/1/_update_by_query	{	    &amp;quotscript&amp;quot: {	        &amp;quotsource&amp;quot: &amp;quottry {String year = &#039;&#039;; if(ctx._source.eb_year != null) year =ctx._source.eb_year.trim().replace(&#039;/&#039;, &#039;&#039;).replace(&#039;هـ&#039;, &#039;&#039;); int d = Integer.parseInt(year);ctx._source.eb_year = d;} catch (NumberFormatException nfe) {ctx._source.remove(&#039;eb_year&#039;);        }&amp;quot,	        &amp;quotlang&amp;quot: &amp;quotpainless&amp;quot }}این اسکریپت در صورتی که فیلد eb_year int نباشد آن را حذف میکند.و آخرین اسکریپت 	POST mainindex/_update_by_query	{	  &amp;quotscript&amp;quot: {	    &amp;quotsource&amp;quot: &amp;quot    String allwords = ctx._source.allwords;    def a_chars = allwords.toCharArray();    int chars_len = a_chars.length;    ArrayList result = new ArrayList();    int last_dot = chars_len;    for(int i = chars_len -1; i&gt;=-1; i--) {      if (i == -1 || a_chars[i] == (char) &#039;;&#039; ){          String t1 = allwords.substring(i+ 1, last_dot).trim();          if(t1 != &#039;&#039;)            result.add(t1);        last_dot = i;              }    }             ctx._source.tags = result;    &amp;quot,	    &amp;quotlang&amp;quot: &amp;quotpainless&amp;quot	  },	   &amp;quotquery&amp;quot: {	     &amp;quotbool&amp;quot: {	        &amp;quotmust&amp;quot: [	        {	          &amp;quotexists&amp;quot: {	            &amp;quotfield&amp;quot:&amp;quotallwords&amp;quot }}],	      &amp;quotmust_not&amp;quot: [	         {	          &amp;quotbool&amp;quot: {	            &amp;quotshould&amp;quot: [	              {	                &amp;quotterm&amp;quot: {	                  &amp;quotallwords.keyword&amp;quot: {	                    &amp;quotvalue&amp;quot: &amp;quot&amp;quot }}},{	                &amp;quotterm&amp;quot: {	                  &amp;quotallwords.keyword&amp;quot: {	                    &amp;quotvalue&amp;quot: &amp;quot&amp;quot }}}]}}]}}}اگر فیلد allword (دوباره :دی) وجود داشته باشد این کد اجرا می شود.String allwords = ctx._source.allwords; def a_chars = allwords.toCharArray(); int chars_len = a_chars.length;این کد chars_len را برابر با تعداد کاراکتر های allwords میکند، دیگر آن را توضیح نمیدهم، میتوانید به داکیومنت آن مراجعه کنید.کل این کد allwords را میخواند و با ; اسپلیت می کند و در آرایه result ذخیره میکند.جلسه ی بعد https://virgool.io/@Ali_Z/%D9%87%D8%B1-%D8%A2%D9%86%DA%86%D9%87-%D8%A8%D8%A7%DB%8C%D8%AF-%D8%AF%D8%B1-%D9%85%D9%88%D8%B1%D8%AF-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%DB%8C%DA%A9-%D8%B3%D8%B1%DA%86-%D8%A8%D8%AF%D8%A7%D9%86%DB%8C%D8%AF-%D9%82%D8%B3%D9%85%D8%AA-%D8%A2%D8%AE%D8%B1-z1qkhawvbo3n ❤️💬پ.ن: اگر کد ها اذیتتون کردن واقعا عذر می خوام، نحوه نمایش کد ها اصلا درست نیست - البته تقصیر منم نیست و تقصیر ویرگوله!</description>
                <category>Ali Zeiynali</category>
                <author>Ali Zeiynali</author>
                <pubDate>Fri, 24 Nov 2023 14:05:08 +0330</pubDate>
            </item>
                    <item>
                <title>هر آنچه باید در مورد دیتابیس الاستیک سرچ بدانید - 4</title>
                <link>https://virgool.io/@Ali_Z/%D9%87%D8%B1-%D8%A2%D9%86%DA%86%D9%87-%D8%A8%D8%A7%DB%8C%D8%AF-%D8%AF%D8%B1-%D9%85%D9%88%D8%B1%D8%AF-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%DB%8C%DA%A9-%D8%B3%D8%B1%DA%86-%D8%A8%D8%AF%D8%A7%D9%86%DB%8C%D8%AF-4-ksxa27rqych0</link>
                <description>elsticsearch DATABASEتصمیم گرفتم مبحث آنالایزر ها را برای بعد بذارم، در این پست هایلایت، چند ریزه کاری و کمی اسکریپت نویسی یاد خواهیم گرفت.highlight اولین مبحثی که در مورد آن صحبت میکنیم  highlight است، هایلایت، در سرچ مورد استفاده قرار می گیرد، حتما در سایت های مختلف دیده اید که هنگامی که یک متن را جستجو میکنید، متن هایی که در رابطه با آن پیدا شدند رنگ خاصی پیدا میکنند.برای هایلایت میتوانید بعد از زدن search query هایلایت را نیز تعریف کنید.به عنوان مثال:GET qanonindex-v03/_search	{	    &amp;quotsize&amp;quot: 4,	    &amp;quotfrom&amp;quot: 0,	    &amp;quot_source&amp;quot: [	        &amp;quotref_con&amp;quot	    ],	    &amp;quotquery&amp;quot: {	        &amp;quotbool&amp;quot: {	            &amp;quotshould&amp;quot: [	                {	                    &amp;quotmatch_phrase&amp;quot: {	                        &amp;quotcontent&amp;quot: {	                            &amp;quotquery&amp;quot: &amp;quotسبک زندگی اسلامی&amp;quot,	                            &amp;quotboost&amp;quot: 10	                        }	                    }	                },	                {	                    &amp;quotmatch&amp;quot: {	                        &amp;quotcontent&amp;quot: &amp;quotسبک زندگی اسلامی&amp;quot	                    }	                }	            ]	        }	    },	    &amp;quothighlight&amp;quot: {	        &amp;quotfields&amp;quot: {	            &amp;quotcontent&amp;quot: {}	        }	    }	}این کد یک نمونه کد نیست و یک کد واقعی است که در یکی از پروژه هایم استفاده کرده بودمهمه رو توضیح دادیم ولی باز یک مروری می کنیم.در این کد 4 تا match اول برای فیلد ref_con که در کانتنتش اگر دقیقا &quot;سبک زندگی اسلامی&quot; بود، 10 امتیاز و اگر کلا سبک زندگی اسلامی بود 1 امتیاز به هر کدام بدهد.و اما هایلایتیک فیچر هایلایت داریم که تنظیمات خاصی ندارد، این به صورت پیشفرض (میخواستم بگم دیفالت) هر متنی که در  ref_con باشد و Match باشد را بین دو تگ html em قرار میدهد (یک تگ باز و یک بسته)و در fields, content نیز مشخص شده است تا highlight در content انجام شود.    &amp;quothighlight&amp;quot: {	        &amp;quotpre_tags&amp;quot: [	            &amp;quot&lt;span class=&#039;text__orange&#039;&gt;&amp;quot	        ],	        &amp;quotpost_tags&amp;quot: [	            &amp;quot&lt;/span&gt;&amp;quot	        ],	        &amp;quotfields&amp;quot: {	            &amp;quotcontent&amp;quot: {}	        },	    }احتمالا خودتان pre_tags , post_tags را حدس زده اید، تگ قبل از متن و تگ بعد از متن، شما میتوانید به دلخواه این را تغییر دهید.و حالا به مبحث اسکریپت نویسی در elasticsearch میرسیم، میتوان گفت این مبحث بزرگترین مبحث الاستیک سرچ است و قابلیت های بسیار بسیار زیادی در اختیار ما قرار می دهد.اسکریپت نویسی - آمادگیزبان اسکریپت نویسی الاستیکزبان اسکریپت نویسی الاستیک سرچ painless است، پین لس یک زبان برنامه نویسی مخصوص دیتابیس الاستیک سرچ است، این زبان بر پایه زبان برنامه نویسی Java نوشته شده و تقریبا از بسیاری از توابع Java استفاده میکند، برای یادگیری این زبان نیازی به یادگیری java نیست و در صورت نیاز به توابع Java میتوانید با یک سرچ، آن ها را پیدا کنید.زبان Painless مستقیماً در بایت کد JVM کامپایل می شود تا از تمام بهینه  سازی های ممکن که JVM ارائه می دهد، استفاده کند.  همچنین، Painless  معمولاً از ویژگی‌هایی که به بررسی‌های کندتر اضافی در زمان اجرا نیاز  دارند، اجتناب می‌کند.پینلس یک سینتکس را با آشنایی طبیعی برای هر کسی که تجربه اولیه کدنویسی  دارد پیاده سازی می کند.  Painless از زیرمجموعه ای از نحو جاوا با برخی  بهبودهای اضافی برای افزایش خوانایی و حذف واضحات استفاده می کند.امنیتامنیت ایندکس شما از مهم ترین مسائل مورد نظر الاستیک است، به این منظور،  Painless از یک لیست سفید مجاز با دقت بالا استفاده می‌کند که تا اعضای یک  کلاس و توابع نیز به صورت دقیق در آن قرار گرفته اند. هر چیزی که جزء لیست مجاز نباشد، منجر به خطای کامپایل می‌شود. برای مشاهده لیست کاملی از  کلاس‌ها، متدها و فیلدهای قابل دسترس در هر متن اسکریپتی، به مرجع API  Painless مراجع کنید.نحوه استفادهپینلس در بخش source در بخش script نوشته می شود و میتوان یک سری متغیر ها را از doc به آن منتقل کرد.استفادهجستجودر این کد اول یک my-index ساخته شده و در doc با id 1 یک my_field با مقدا 5 تعریف شده است.اسکریپت نوشته شده در اینجا یک اسکریپت سرچ است، به این معنا که در راه سرچ استفاده می شود. :دیاول از همه، گفته ایم که میخواهیم فیلد های اسکریپتی بنویسیم.و بعد یک فیلد مجازی (به پست های قبل رجوع کنید) با نام my_doubled_fiel ایجاد کرده ایم و در آن یک اسکریپت زدیم.اول از همه، در doc[&#x27;my_field&#x27;]داک به doc ای که گرفتیمش اشاره دارد، که اینجا تمامی داک ها را شامل می شود.مای فیلد نیز همان فیلد تعریف شده است، اماparams[&#x27;multiplier&#x27;] چیست؟پارامس به مقادیری اشاره دارد که به script توسط params پاس داده شده است.در اینجا ما multiplier را 2 قرار دادیم، و نتیجه 10 می شود.ذخیره اسکریپتPOST _scripts/calculate-score{    &amp;quotscript&amp;quot: {        &amp;quotlang&amp;quot: &amp;quotpainless&amp;quot,        &amp;quotsource&amp;quot: &amp;quotMath.log(_score * 2) + params[&#039;my_modifier&#039;]&amp;quot    }}الاستیک یک ایندکس پیشفرض برای اسکریپت ها دارد، این اییندکس را نباید delete کنید.این ایندکس برای ذخیره اسکریپت ها برای استفاده های بعدی استفاده می شود، این یک ایندکس کاربردی است و الان کار با آن را یاد خواهیم گرفت.در اینجا ما یک اسکریپت به نام calculate-score ذخیره کرده ایم.این اسکریپت در زبان painless نوشته شده و و یک پارامتر و امتیاز یک سرچ را می گیرد و لوگاریتم امتیاز ضرب بر 2 بعلاوه پارامتر my_modifier را برمی گرداند.برای دیدن اسکریپت میتوانید از کد زیر استفاده کنید.GET _scripts/calculate-scoreاز این اسکریپت میتوان به این صورت استفاده کرد:GET my-index/_search{  &amp;quotquery&amp;quot: {    &amp;quotscript_score&amp;quot: {      &amp;quotquery&amp;quot: {        &amp;quotmatch&amp;quot: {            &amp;quotmy_field&amp;quot: 5        }      },      &amp;quotscript&amp;quot: {        &amp;quotid&amp;quot: &amp;quotcalculate-score&amp;quot, // id of saved script        &amp;quotparams&amp;quot: {          &amp;quotmy_modifier&amp;quot: 2        }      }    }  }}در این کد ما اسکریپت ذخیره شده را روی score اجرا کرده ایم(script_score) اجرا کردیم و اسکور را به نتیجه این اسکریپت تغییر دادیم.و به  به عنوان پارامتر my_modifier دو را به آن داده ایم.حذف اسکریپتبرای حذف اسکریپت هم از این کد استفاده کنید.DELETE _scripts/calculate-scoreافزودن آرایهتا یادم نرفته این را هم بگویم که برای افزودن آرایه به یک ایندکس از این راه استفاده کنید:POST my-index/_doc/1{    &amp;quotcolors&amp;quot: [        &amp;quotblue&amp;quot,        &amp;quotred&amp;quot,        &amp;quotgreen&amp;quot,        &amp;quotyellow&amp;quot    ]}خودم میدونم که این هیچ ربطی نداشت ولی یادم رفته بود بگم : دیجلسه ی بعد https://virgool.io/@Ali_Z/%D9%87%D8%B1-%D8%A2%D9%86%DA%86%D9%87-%D8%A8%D8%A7%DB%8C%D8%AF-%D8%AF%D8%B1-%D9%85%D9%88%D8%B1%D8%AF-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%DB%8C%DA%A9-%D8%B3%D8%B1%DA%86-%D8%A8%D8%AF%D8%A7%D9%86%DB%8C%D8%AF-5-szbgqiw7rcpd ❤️💬</description>
                <category>Ali Zeiynali</category>
                <author>Ali Zeiynali</author>
                <pubDate>Fri, 24 Nov 2023 12:58:16 +0330</pubDate>
            </item>
                    <item>
                <title>پایتون و بک اند - 3: فلاسک</title>
                <link>https://virgool.io/@Ali_Z/%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D9%88-%D8%A8%DA%A9-%D8%A7%D9%86%D8%AF-3-%D9%81%D9%84%D8%A7%D8%B3%DA%A9-ae37dqfsnaps</link>
                <description>pyhton and bakcendدر این پست میخواهیم کمی flask را یاد بدهیم و در پست های بعد به بقیه فریمورک ها بپردازیم.اول باید Flask رو نصب کنیماگر  پکیج هاتون خیلی زیاد نیست، نیازی به نصب فلاسک توی venv نیست، چون کدهای  فلاسک خیلی زیاد نیست، ولی اگر پکیج هاتون خیلی زیاده و نگران تداخل هستین،  میتونین یک venv بسازینخب بریم سراغ نصبpip install Flaskبرای اطمینان از نصب کامل&gt;&gt; Flask --version
Python 3.11.2
Flask 2.3.2
Werkzeug 2.3.6خب بریم که یک برنامه رو با فلاسک استارت بزنیم.خب ما توی این قسمت از معماری خاصی استفاده نمیکنیم و کل کد هامونو توی یک فایل مینویسیمپس اول باید یه دایرکتوری به صورت زیر بسازیدWebSite
|_Tempaltes
|_static
	|_css
	|_js
	|_images
|_app.pyفایل App.py فایل اصلی پروژه ما هست پس بازش کنین و کد هاتونو بنویسین(معمولا اسم این فایل رو App میذارن ولی محدودیت اسم ندارین)اول از همه ایمپورتش میکنیم و یک آبجکت ازش میسازیم و __name__ رو بهش پاس میدیمfrom flask import Flask

app = Flask(__name__)میرسیم به ساخت اولین url-مونهنگام ساخت یک وبسایت، به صفحاتش url نمیگن، میگن route : دیبرای  ساخت یک route باید از متغییر اپ به صورت دکوریتور استفاده کنیم@app.route(&#039;/&#039;)
def one():
    passمتد route  آرگومان ریکوایرد rule رو میگیره که متن url هست، یعنی اگر میخواین صفحه  هوم رو بسازین باید یه / و مثلا گر صفحه example.com/Test رو میخواین  بسازین باید یه /Test وارد کنین/ رو باید قبل از متن بذارین، توی جنگو باید بعد از متن میذاشتین ولی توی فلاسک قبل متن هستخب، حالا اگر بخواین یک صفحه html رو نشون بدین باید چی کار کنین؟باید  صفحه html رو در پوشه templates بسازین(اینجا اسم پوشه ی templates دست خودتون نیست و باید حتما templates باشه - اون s آخرش هم فراموش نشه!)حالا کافیه از فلاسک، فانشکن render_template رو وارد کنین.بعد توی render_template اسم فایل توی پوشه ی templates رو میدین(دقت کنین باید return-ش کنین)@app.route(&#039;/&#039;)
def one():
    return render_template(&#039;index.html&#039;)اگر  میخواستین یه متنو پرینت کنین فقط کافیه اون متن رو ریترن کنین، حتی  میتونین فایل html رو به صورت متنی هم ریترن کنین، پس چرا از رندر تمپلیت  استفاده میکنیم؟Flask از یک موتور تمپلیت استفاده میکنه به اسم jinja این فانکشن رندر تمپلیت کد های جینجا رو ترجمه میکنه که به اونم میرسیم کد های جینجا برای فلاسک، عین خود تمپلیت انجین django هست و تفاوت های بسیار ریزی دارندخب حالا باید برنامه رو ران کنیم2 تا راه داریم، کد Flask run رو بزنیم. که بعد از هر تغییر، باید دوباره سرور رو ریستارت کنیمیا این کارو کنیم.from flask import Flask, render_template

app = Flask(__name__)

@app.route(&#039;/&#039;)
def one():
    return render_template(&#039;Home.html&#039;)

if __name__ == &#039;__main__&#039;:
    app.run(debug=True, port=4005)مقادیری که به run دادم اختیاری هستن، پورت که معلومه چیه، دیباگ هم حالت دیباگ رو فعال میکنه و با تغییر در فایل ها، سرور ری استارت میشهمنتظر قسمت بعد این مجموعه باشین❤️💬</description>
                <category>Ali Zeiynali</category>
                <author>Ali Zeiynali</author>
                <pubDate>Thu, 23 Nov 2023 16:03:15 +0330</pubDate>
            </item>
                    <item>
                <title>زمپ در مقابل لاراگون - کدام را انتخاب کنیم؟</title>
                <link>https://virgool.io/@Ali_Z/%D8%B2%D9%85%D9%BE-%D8%AF%D8%B1-%D9%85%D9%82%D8%A7%D8%A8%D9%84-%D9%84%D8%A7%D8%B1%D8%A7%DA%AF%D9%88%D9%86-%DA%A9%D8%AF%D8%A7%D9%85-%D8%B1%D8%A7-%D8%A7%D9%86%D8%AA%D8%AE%D8%A7%D8%A8-%DA%A9%D9%86%DB%8C%D9%85-ztfwjmvwv6x1</link>
                <description>هر طراح وب (back-end یا Full stack)ی که در حال یادگیری یا آزمایش باشه،  نیاز به یک شبیه ساز سرور داره(مگه اینکه برای آزمایش یه سرور و دامنه  بخره!) 2 تا از بهترین نرم افزار های شبیه ساز سرور Xampp و Laragon هستن،  توی این مقاله میخوایم این 2 نرم افزار رو با هم بررسی کنیم...اول از همه باید قابلیت های این دو نرم افزار در زمینه وب رو بررسی کنیم.هر  دوی این نرم افزار ها قابلیت های نسبتا یکسانی در زمینه سرور دارند،  phpMyAdmin, MySQL, PHP و غیره را پشتیبانی کرده و میتوان گفت که این دو  نرم افزار در این زمینه با هم مشابه و نسبتا شبیه هستند.و اما رابط کاربریXampp  نسبت به Laragon رابط کاربری ساده تر و البته غیر حرفه ای تری دارد،  Laragon یک رابط کاربری را با استفاده از سیستم context menu استفاده میکند  که باعث استفاده راحت تر و احساس بهتری می شود.خبره تر بودن سازندگان Laragon نسبت به Xampp در طراحی رابط کاربری نیز به وفور در سایت هایشان دیده میشود.پروژه Xampp متن باز است، اما پروژه ی Lragaon اجازه ی استفاده یک سری افزونه ها را هم میدهدهمچنین Laragon فقط در سیستم عامل ویندوز اجرا شده، اما Xampp در MacOS, Linux و ویندوز پشتیبانی می شود.و البته Laragon قابلیت ساخت URL سفارشی را میدهد.ودر  انتها انتخاب این 2 نرم افزار بستگی به سیستم عامل شما، طرز استفاده و مهم  بودن یا نبودن رابط کاربری دارد، در هر حال این 2 نرم افزار هر دو نرم  افزار های خوبی هستند.❤️💬</description>
                <category>Ali Zeiynali</category>
                <author>Ali Zeiynali</author>
                <pubDate>Thu, 23 Nov 2023 15:56:15 +0330</pubDate>
            </item>
                    <item>
                <title>چگونه با پایتون زبان برنامه نویسی خودمان را ایجاد کنیم؟</title>
                <link>https://virgool.io/@Ali_Z/%DA%86%DA%AF%D9%88%D9%86%D9%87-%D8%A8%D8%A7-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%B2%D8%A8%D8%A7%D9%86-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%AE%D9%88%D8%AF%D9%85%D8%A7%D9%86-%D8%B1%D8%A7-%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF-%DA%A9%D9%86%DB%8C%D9%85-h4liz5ganl0c</link>
                <description>در این مقاله قصد داریم یاد بگیریم چگونه با استفاده از SLY (Sly Lex  Yacc) و پایتون زبان برنامه‌نویسی خود را ایجاد کنیم. قبل از اینکه به طور  عمیقتر به این موضوع بپردازیم، باید توجه داشته باشیم که این یک آموزش  مبتدی نیست و شما باید اطلاعاتی از پیش‌نیازهای زیر را داشته باشید.مقدمه‌ای درباره طراحی کامپایلر.درک اولیه از تجزیه و تحلیل لغوی (lexical analysis)، تجزیه و تحلیل نحوی (parsing) و سایر جنبه‌های طراحی کامپایلر.درکی از عبارات منظم (regular expressions).آشنایی با زبان برنامه‌نویسی پایتون.(برای درک بهتر واژگان این مقاله به https://fa.wikipedia.org/wiki/%D8%AA%D8%AD%D9%84%DB%8C%D9%84_%D9%88%D8%A7%DA%98%DA%AF%D8%A7%D9%86%DB%8C مراجعه کنید)شروع کردن1.  نصب SLY برای پایتون: SLY یک ابزار لکسینگ و پارسینگ است که فرایند را  برای ما آسان می‌کند. برای نصب SLY، می‌توانید از pip، نصب‌کننده‌ی بسته‌ها  برای پایتون استفاده کنید. ترمینال یا پنجره‌ی دستورات خود را باز کنید و  دستور زیر را اجرا کنید:pip install slyایجاد یک لکسرفاز اول یک کامپایلر تبدیل تمام جریان‌های  کاراکتر (برنامه‌ی سطح بالا که نوشته شده است) به جریان‌های توکن است. این  کار با استفاده از فرایندی به نام تجزیه و تحلیل لغوی (lexical analysis)  انجام می‌شود. با این حال، با استفاده از SLY این فرآیند ساده‌تر می‌شود.ابتدا بیایید همهٔ ماژول‌های لازم را وارد کنیم.from sly import Lexerحالا بیایید یک کلاس با نام BasicLexer بسازیم که از کلاس Lexer در SLY  گسترش می‌دهد. بیایید یک کامپایلر بسازیم که عملیات حسابی ساده را انجام  می‌دهد. بنابراین برخی از توکن‌های اصلی مانند NAME، NUMBER، STRING نیاز  داریم. در هر زبان برنامه‌نویسی، بین دو کاراکتر فاصله وجود دارد. بنابراین  یک ignore literal ایجاد می‌کنیم. سپس literal‌های اصلی مانند &#x27;=&#x27;, &#x27;+&#x27; و  غیره را نیز ایجاد می‌کنیم. توکن‌های NAME در واقع نام متغیرها هستند که با  عبارت منظم [a-zA-Z_][a-zA-Z0-9_]* قابل تعریف هستند. توکن‌های STRING  مقادیر رشته‌ای هستند و با علامت نقل قول (&quot; &quot;) محصور می‌شوند. این مورد  می‌تواند با عبارت منظم \&quot;.*?\&quot; تعریف شود.هرگاه رشته‌ای از ارقام  پیدا کنیم، باید آن را به توکن NUMBER اختصاص دهیم و عدد باید به عنوان یک  عدد صحیح ذخیره شود. ما در حال ساختن یک اسکریپت برنامه‌نویسی ساده هستیم،  بنابراین فقط با اعداد صحیح آن را انجام می‌دهیم، اما برای اعداد اعشاری،  اعداد طولانی و غیره احساس راحتی کنید که همان راه حل را گسترش دهید. ما  همچنین می‌توانیم توضیحات بدهیم. هرگاه &quot; //&quot; را بیابیم، هر چیزی که در خط  بعدی از آن آمده را نادیده می‌گیریم. همین کار را با کاراکتر خط جدید نیز  انجام می‌دهیم. بنابراین یک لکسر ابتدایی را ساختیم که جریان کاراکتر را به  جریان توکن تبدیل می‌کند.و همچنین کد:class BasicLexer(Lexer):
	tokens = { NAME, NUMBER, STRING }
	ignore = &#039;\t &#039;
	literals = { &#039;=&#039;, &#039;+&#039;, &#039;-&#039;, &#039;/&#039;,
				&#039;*&#039;, &#039;(&#039;, &#039;)&#039;, &#039;,&#039;, &#039;;&#039;}


	# Define tokens as regular expressions
	# (stored as raw strings)
	NAME = r&#039;[a-zA-Z_][a-zA-Z0-9_]*&#039;
	STRING = r&#039;\&amp;quot.*?\&amp;quot&#039;

	# Number token
	@_(r&#039;\d+&#039;)
	def NUMBER(self, t):
		
		# convert it into a python integer
		t.value = int(t.value)
		return t

	# Comment token
	@_(r&#039;//.*&#039;)
	def COMMENT(self, t):
		pass

	# Newline token(used only for showing
	# errors in new line)
	@_(r&#039;\n+&#039;)
	def newline(self, t):
		self.lineno = t.value.count(&#039;\n&#039;)ابتدا تمام ماژول های لازم را وارد میکنیم.from sly import Parserحالا  بیایید یک کلاس با نام BasicParser بسازیم که از کلاس Lexer گسترش می‌دهد.  جریان توکن از BasicLexer به یک متغیر با نام tokens منتقل می‌شود.  اولویت‌ها تعریف شده است که برای اکثر زبان‌های برنامه‌نویسی یکسان است.  بیشتر پارسینگ‌های نوشته شده در برنامه زیر بسیار ساده است. وقتی چیزی وجود  ندارد، عبارت چیزی را منتقل نمی‌کند. به طور اصولی می‌توانید دکمه Enter  را در صفحه کلید خود فشار دهید (بدون تایپ هیچ چیزی) و به خط بعدی بروید.  سپس زبان شما باید قادر باشد با استفاده از &quot;=&quot; تخصیص داده شود. این در خط  18 برنامه زیر بررسی می‌شود. همین کار را می‌توان برای تخصیص به رشته نیز  انجام داد.class BasicParser(Parser):
	#tokens are passed from lexer to parser
	tokens = BasicLexer.tokens

	precedence = (
		(&#039;left&#039;, &#039;+&#039;, &#039;-&#039;),
		(&#039;left&#039;, &#039;*&#039;, &#039;/&#039;),
		(&#039;right&#039;, &#039;UMINUS&#039;),
	)

	def __init__(self):
		self.env = { }

	@_(&#039;&#039;)
	def statement(self, p):
		pass

	@_(&#039;var_assign&#039;)
	def statement(self, p):
		return p.var_assign

	@_(&#039;NAME &amp;quot=&amp;quot expr&#039;)
	def var_assign(self, p):
		return (&#039;var_assign&#039;, p.NAME, p.expr)

	@_(&#039;NAME &amp;quot=&amp;quot STRING&#039;)
	def var_assign(self, p):
		return (&#039;var_assign&#039;, p.NAME, p.STRING)

	@_(&#039;expr&#039;)
	def statement(self, p):
		return (p.expr)

	@_(&#039;expr &amp;quot+&amp;quot expr&#039;)
	def expr(self, p):
		return (&#039;add&#039;, p.expr0, p.expr1)

	@_(&#039;expr &amp;quot-&amp;quot expr&#039;)
	def expr(self, p):
		return (&#039;sub&#039;, p.expr0, p.expr1)

	@_(&#039;expr &amp;quot*&amp;quot expr&#039;)
	def expr(self, p):
		return (&#039;mul&#039;, p.expr0, p.expr1)

	@_(&#039;expr &amp;quot/&amp;quot expr&#039;)
	def expr(self, p):
		return (&#039;div&#039;, p.expr0, p.expr1)

	@_(&#039;&amp;quot-&amp;quot expr %prec UMINUS&#039;)
	def expr(self, p):
		return p.expr

	@_(&#039;NAME&#039;)
	def expr(self, p):
		return (&#039;var&#039;, p.NAME)

	@_(&#039;NUMBER&#039;)
	def expr(self, p):
		return (&#039;num&#039;, p.NUMBER)پارسر  نیز باید عملیات‌های حسابی را پارس کند، که این کار با استفاده از عبارات  انجام می‌شود. فرض کنید می‌خواهید چیزی مانند زیر داشته باشید. همه آنها به  صورت خط به خط به جریان توکن تبدیل شده و خط به خط پارس می‌شوند.  بنابراین، طبق برنامه بالا، a = 10 شبیه خط 22 است. همین کار برای b = 20  نیز صدق می‌کند. a + b شبیه خط 34 است که یک درخت تجزیه‌ای (parse tree) به  نمایش می‌گذارد (&#x27;add&#x27;، (&#x27;var&#x27;، &#x27;a&#x27;)، (&#x27;var&#x27;، &#x27;b&#x27;)).GFG Language &gt; a = 10GFG Language &gt; b = 20GFG Language &gt; a + b 30اکنون جریان های توکن را به درخت تجزیه تبدیل کرده ایم. مرحله بعدی تفسیر آن است.اجراتفسیر  (Interpreting) یک روش ساده است. ایده اصلی این است که درخت را طی کرده و  عملیات حسابی را سلسله مراتبی ارزیابی کنیم. این فرایند به صورت بازگشتی  تکرار می‌شود تا کل درخت ارزیابی شده و پاسخ به دست آید. برای مثال، فرض  کنید 5 + 7 + 4. این جریان کاراکتری ابتدا در یک لکسر به جریان توکن‌ها  تبدیل می‌شود. سپس جریان توکن به یک درخت تجزیه می‌شود. درخت تجزیه به طور  اساسی (‘add’، (‘add’، (‘num’، 5)، (‘num’، 7))، (‘num’، 4)) را  برمی‌گرداند. (تصویر زیر را ببینید)تفسیرگر ابتدا ۵ و ۷ را جمع می‌کند و سپس به صورت بازگشتی تابع walkTree  را فراخوانی کرده و ۴ را به نتیجه جمع ۵ و ۷ اضافه می‌کند. بنابراین، ما  عدد ۱۶ را دریافت می‌کنیم. کد زیر همین فرآیند را انجام می‌دهد.class BasicExecute:
	
	def __init__(self, tree, env):
		self.env = env
		result = self.walkTree(tree)
		if result is not None and isinstance(result, int):
			print(result)
		if isinstance(result, str) and result[0] == &#039;&amp;quot&#039;:
			print(result)

	def walkTree(self, node):

		if isinstance(node, int):
			return node
		if isinstance(node, str):
			return node

		if node is None:
			return None

		if node[0] == &#039;program&#039;:
			if node[1] == None:
				self.walkTree(node[2])
			else:
				self.walkTree(node[1])
				self.walkTree(node[2])

		if node[0] == &#039;num&#039;:
			return node[1]

		if node[0] == &#039;str&#039;:
			return node[1]

		if node[0] == &#039;add&#039;:
			return self.walkTree(node[1]) + self.walkTree(node[2])
		elif node[0] == &#039;sub&#039;:
			return self.walkTree(node[1]) - self.walkTree(node[2])
		elif node[0] == &#039;mul&#039;:
			return self.walkTree(node[1]) * self.walkTree(node[2])
		elif node[0] == &#039;div&#039;:
			return self.walkTree(node[1]) / self.walkTree(node[2])

		if node[0] == &#039;var_assign&#039;:
			self.env[node[1]] = self.walkTree(node[2])
			return node[1]

		if node[0] == &#039;var&#039;:
			try:
				return self.env[node[1]]
			except LookupError:
				print(&amp;quotUndefined variable &#039;&amp;quot+node[1]+&amp;quot&#039; found!&amp;quot)
				return 0نمایش خروجیبرای  نمایش خروجی توسط تفسیرگر، باید چند کد بنویسیم. کد باید ابتدا لکسر را  فراخوانی کند، سپس پارسر و سپس تفسیرگر و در نهایت خروجی را دریافت کند.  سپس خروجی را در شل نمایش دهد.if __name__ == &#039;__main__&#039;:
	lexer = BasicLexer()
	parser = BasicParser()
	print(&#039;GFG Language&#039;)
	env = {}
	
	while True:
		
		try:
			text = input(&#039;GFG Language &gt; &#039;)
		
		except EOFError:
			break
		
		if text:
			tree = parser.parse(lexer.tokenize(text))
			BasicExecute(tree, env)لازم به ذکر است که ما  هیچ خطاهایی را مدیریت نکرده‌ایم. بنابراین SLY هنگامی که شما چیزی را  انجام می‌دهید که توسط قوانینی که نوشته‌اید مشخص نشده است، پیام خطای خود  را نشان خواهد داد.زبانی که نوشته‌اید را با استفاده از دستور زیر اجرا کنید:py language.pyتفسیرگری  که ساختیم بسیار پایه است. البته، این می‌تواند برای انجام بسیاری از  کارها گسترش یابد. حلقه‌ها و شرط‌ها می‌توانند اضافه شوند. قابلیت‌های  طراحی ماژولار یا شی‌گرا قابل اجرا است. ادغام ماژول، تعریف متد، پارامترها  در متدها برخی از ویژگی‌هایی هستند که می‌توانند به آن اضافه شوند.این پست ترجمه تغییر یافته بخشی از داکیومنت پایتون بود.💬❤️</description>
                <category>Ali Zeiynali</category>
                <author>Ali Zeiynali</author>
                <pubDate>Thu, 23 Nov 2023 15:49:46 +0330</pubDate>
            </item>
                    <item>
                <title>کیلاگر - از صفر تا ساخت</title>
                <link>https://virgool.io/@Ali_Z/%DA%A9%DB%8C%D9%84%D8%A7%DA%AF%D8%B1-%D8%A7%D8%B2-%D8%B5%D9%81%D8%B1-%D8%AA%D8%A7-%D8%B3%D8%A7%D8%AE%D8%AA-foezfvsmlfhu</link>
                <description>خب، اول از همه کیلاگر چیه؟از اسمش هم معلومه، وسیله ای برای  ذخیره کردن کلید های فشرده شده در کیبورده، یعنی به  صورتی کار میکنه که با  فشرده شدن یک کلید در کیبرد (یا کیبورد؟) اون کلید رو ذخیره میکنه در یک  فایل تا بعدا برای سرور ارسالش کنه - البته مگه مرض داره خب همون موقع  ارسال میکنه - ولی چه نوع هایی داره و چطور میشه یکی نوشت؟کیلاگر ها 2 نوع هستنددیجیتالی:  این کیلاگر ها با زبان های برنامه نویسی نوشته میشن و نیاز به دانش در  زمینه الکترونیک ندارن، به کیبورد هم دسترسی ندارن، بلکه اگر دکمه فشرده  بشه با نرم افزار میفهمننوع دوم به صورت سخت افزاری هستن، به صوری که در کیبورد جای گذاری میشن یا در فلش پنهان، و مستقیم از خود کیبورد جاسوسی میکنن.نوع اول از نظری بهتره، چون میتونه با کیبرد های لیزری و... هم جاسوسی کنه.نوع دوم از نظر آنتی ویروس محفوظه اما نوشتنش کمی سخته(اگر نگیم غیرممکنه!)البته قبل از آموزش آنتی ویروس ویندوز یا خودتون رو غیرفعال کنید، من یک کیلاگر نوشتم زد پاکش کرد.خب، بریم که باهم یکی بسازیم.از زبان شیرین پایتون استفاده میکنیم.اول از همه کتابخانه ی pynputpip install pynpuو بعد واردش میکنیم.from pynput.keyboard import Listenerحالا  نیاز داریم که یک تابع برای انجام کاری با اون کلید بنویسیم: تابع کلید رو  دریافت میکنه و کاری که میخوایم رو انجام میده باهاش(ارسال به سرور و از  این داستانا)def key_log(key):
    try:
        print(key.char)
    except:
        print(key)
# اینجا ما پرینتش میکنیمحالا نوبت pynput -ه باید به تابعی که نوشتیم وصلش کنیم.def keyboard():
    with Listener(on_press=key_log) as lstn:
        lstn.join()

keyboard()و تمام!حالا شما یک کیلاگر دیجیتالی دارید!</description>
                <category>Ali Zeiynali</category>
                <author>Ali Zeiynali</author>
                <pubDate>Thu, 23 Nov 2023 15:44:20 +0330</pubDate>
            </item>
                    <item>
                <title>9 افزونه کاربردی VSCode برای برنامه نویسان</title>
                <link>https://virgool.io/@Ali_Z/9-%D8%A7%D9%81%D8%B2%D9%88%D9%86%D9%87-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF%DB%8C-vscode-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%D8%A7%D9%86-x4tuo05wghds</link>
                <description>در این پست میخواهیم 9 افزونه کاربردی vscode برای برنامه نویسان را معرفی کنیم، اگر لایک نکردید لایک کنید تا انگیزه بیشتری برای پست های بعدی داشته باشم.بریم برای معرفی این 9 تا: 1. Live Serverلایو سرور یک افزونه کاربردی برای برنامه نویسان فرانت اند هست، این افزونه به شما قابلیت باز کردن فایل های html را در localHost میدهد و با هر save کردنی که در VSCode اتفاق می افتد، یکبار project page را reload میکند تا همیشه با باز کردن browser به آخرین نسخه ویرایش شده فایل html ای خود دسترسی پیدا کنید.این افزونه نیازمندی ندارد و برای استفاده از آن، کافی است بعد از نصب روی فایل موردنظر راست کلیک کرده و گزینه open with liveserver را بزنید.این افزونه 41,858,985 نصب و 4.5 ستاره از 446 نظر دارد.2. material icon themeاین افزونه یکی از بهترین افزونه های icon theme برای vscode است که بسیاری از برنامه نویسان حرفه ای از آن استفاده میکنند، این افزونه تقریبا برای تمامی فایل ها icon در نظر گرفته است.علاوه بر آن، برای پوشه هایی با نام های خاص نیز لوگو های مختلف در نظر گرفته، مثلا برای پوشه ای با نام app رنگ پوشه قرمز میشود و سه مربع در پایین سمت راست آن ظاهر میشوند، همچنین این آیکون ها برای پوشه های دیگر و پوشه هایی که مربوط به نرم افزار های خاص هستند نیز صدق میکند.مانند پوشه __pycach__ که یک پوشه سیستمی برای پایتون است.3. One Dark Proوان دارک پرو نیز یکی از بهترین color theme ها برای vscode است که تم مورد استفاده بسیاری از برنامه نویسان است، این تم تمی خاکستری است که رنگ هایی زیبا در آن استفاده شده و انواع نیز دارد.این تم در نرم افزار Atom که یک ویرایشگر متن خوب است استفاده شده و میتوان با نصب آن نرم افزار نیز از این تم در آن استفاده کنید.برای تغییر تم، أکمه تنظیمات در پایین سمت راست را بفشارید و از بخش theme, color theme را انتخاب کرده و بعد یکی از گزینه های one dark pro را انتخاب نمایید.4. Postmanپستمن یک افزونه حرفه ای برای ایجاد request ها است، شما میتوانید هنگام توسعه وب، از این افزونه برای امتحان کردن API های خود استفاده کنید.استفاده از این افزونه رایگان است و فقط نیازمند ثبت نام در سایت آن و ورود با vscode می باشد، همچنین این افزونه یک نرم افزار نیز دارد که استفاده از آن بهتر است.پستمن یکی از پرکاربرد ترین ابزار های توسعه دهندگان وب است.5. Prettierاین افزونه که احتمالا همه آن را میشناسید، یک افزونه مرتب کن (واژه بهتر نبود؟) برای وی اس کد است، برای استفاده از آن کافی است بعد از نصب Alt + shift + F را بزنید تا فایل html, css, js, vue, json و... شما مرتب شود، همچنین میتوانید از این افزونه در فایل های دیگری نیز با config کردن آن استفاده کنید.این افزونه مورد استفاده شرکت های بزرگ است تا بتوانند کد های کامل و مرتبی ارائه دهند.6. Remote SSHریموت اس اس اچ یک افزونه حرفه ای و قدرتمند برای اتصال به سرور است، در صورتی که شما یک سرور لینوکس یا ویندوز داشته باشید، با این افزونه میتوانید به فایل های آن ها وصل شوید و از shell، قابلیت ویرایش فایل و... نیز استفاده کنید.برای استفاده از این افزونه، پس از نصب یک آیکون در نوار پایین سمت چپ نرم افزار ظاهر میشود، بعد از فشردن آن، دکمه connect to host... و بعد از آن configure SSH Host... را انتخاب کنید و یکی از مسیر ها باز کنید.توی یکی از فایل های ssh متنی مشابه این را بنویسید:Host alias    HostName hostname    User userمتن alias را با یک نام دلخواه جایگزین کنید، HostName و User را نیز تعریف کنید.برای اطلاعات بیشتر به داکیومنت این افزونه مراجعه کنید.7. Tabnin AIاین افزونه یک افزونه کامل کننده توسط هوش مصنوعی است که دو نسخه دارد: نسخه رایگاناین نسخه هر کدی را که بنویسید به صورت کم رنگ حداقل 5 پیشنهاد میدهد، برای استفاده بعد از نصب ثبت نام کنید و استفاده کنید.نسخه پولیاین نسخه بسیار حرفه ای است و کافی است یک کامنت بنویسید و کد ها را توی آن توضیح دهید، او خودش علاوه بر کامل کردن کامنت، کد های آن کامنت را هم مینویسد و همچنین یادگیری خودکار دارد، یادگیری خودکار آن پس از مدتی نحوه کد نوشتن شما را یاد میگیرد و حتی اگر کامنت های فارسی بنویسید پس از مدتی او هم فارسی کمک میکند.8. Vue Languageاین افزونه یک افزونه کاربردی و حرفه ای برای برنامه نویسان Vue است، این افزونه رنگ های فایل Vue، پیشنهادات فایل Vue و... را در مورد فایل های Vue ارائه میدهد، همچنین شما میتوانید با رفتن به صفحه افزونه، قابلیت ها و config های آن را نیز یاد بگیرید.9. WSLاحتمالا همه شما wsl را میشناسید، wsl یا windows subsystem for linux یک نرم افزار است که که قابلیت استفاده از shell linux را در ویندوز برای همه فراهم میسازد و کافی است با این دو دستور توزیع ubuntu را روی آن نصب کنید:wsl --install
wsl --install -d Ubuntuبعد از آن، که ی پروسه ی کمی زمان بری است، لینوکس روی سیستم شما نصب میشود و از طریق drive Linux/Ubuntu قابل دسترسی است.بعد از آن با نصب این افزونه، میتوانید به linux خود وصل بشوید و کاملا محیط آن را داشته باشید، همچنین این افزونه از Remote SSH برای ارتباط با linux شما استفاده میکند.برای استفاده کافی است Path پروژه Linux خود را وارد کنید و بعد از open شدن پروژه، در پیامی که نمایش داده میشود، open with WSL را بزنید.اینم 10 افزونه ی کاربردی vscode❤️💬</description>
                <category>Ali Zeiynali</category>
                <author>Ali Zeiynali</author>
                <pubDate>Thu, 23 Nov 2023 15:42:14 +0330</pubDate>
            </item>
            </channel>
</rss>