<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های TechWithOmid</title>
        <link>https://virgool.io/feed/@omidmmadi</link>
        <description>برنامه نویس پایتون/جنگو و یک کاربر متعصب لینوکس</description>
        <language>fa</language>
        <pubDate>2026-06-16 21:57:15</pubDate>
        <image>
            <url>https://static.virgool.io/images/default-avatar.jpg</url>
            <title>TechWithOmid</title>
            <link>https://virgool.io/@omidmmadi</link>
        </image>

                    <item>
                <title>فعال کردن قابلیت tap to touch در i3</title>
                <link>https://virgool.io/@omidmmadi/%D9%81%D8%B9%D8%A7%D9%84-%DA%A9%D8%B1%D8%AF%D9%86-%D9%82%D8%A7%D8%A8%D9%84%DB%8C%D8%AA-tap-to-touch-%D8%AF%D8%B1-i3-ya7umqby8ngi</link>
                <description>میتونید با خوندن این پست در وبلاگم و کامنت گذاشتن منو خوشحال کنید.یکی از اولین کار هایی که وقتی یه لینوکس جدید نصب میکنم انجام میدم فعال کردن قابلیت tap to touch هستش، که بصورت پیشفرض ممکنه بسته به توزیعی که استفاده می‌کنید، فعال یا غیرفعال باشه. و از اونجایی که از آرچ استفاده می‌کنم این قابلیت بصورت پیشفرض فعال نیست. علاوه بر آرچ اگر از مدیریت پنجره‌هایی مثل i3, awesome, bspwm و... استفاده می‌کنید باید این قابلیت رو خودتون فعال  کنید. توی محیط های گرافیکی خیلی سادست از توی تنظیمات اینکار رو انجام میدی، ولی از اونجایی که من از محیط i3 استفاده میکنم مراحلش کمی متفاوت تره.دو روش برای اینکار وجود داره روش اول از طریق تنظیمات خود i3 هستش و روش دوم از طریق xorg هستش که من توی این پست روش اول رو که ساده تره رو میگم.استفاده از xinput برای فعال کردن tap to touchبراش شروع باید xinput رو توی ترمینال اجرا کنید که بفهمید که چه دیواس هایی دارید. اگه از آرچ استفاده می‌کنید می‌تونید دستور رو مستقیم در ترمینال اجرا کنید. اما اگه از فدورا اسفاده می‌کنید، باید اول از همه xinput رو با دستور زیر نصب کنید:sudo dnf install xinputخروجی این دستوری برای لپتاپ من شبیه به اینه.تاچ پد من توی این لیست دومین آیتمه. یعنی AlpsPS/2 ALPS GlidePoint. الان باید تمام پراپرتی هاش رو لیست کنیم برای اینکار دستور زیر رو میزنیم و بجای AlpsPS/2 ALPS GlidePoint اسم تاچ پدی که برای شما هست رو بزنید.xinput list-props &amp;quotAlpsPS/2 ALPS GlidePoint&amp;quotو خروجی این دستور برای من.چیزی که توی این خروجی برای ما مهمه اینه. درواقع این نشون میده که قابلیت tap to touch خاموشه.libinput Tapping Enabled (322):	0الان با اجرای دستور زیر این قابلیت میتونه فعال بشه.xinput set-prop &amp;quotAlpsPS/2 ALPS GlidePoint&amp;quot &amp;quotlibinput Tapping Enabled&amp;quot 1توجه کنید بجای AlpsPS/2 ALPS GlidePoint اسم تاچ پد خودتون رو بزارید.درسته که الان تاچ پد کار میکنه ولی اگه یبار سیستم رو ریستارت کنید باید همه‌ی این مراحل رو اجرا کنید. پس کاری که انجام میدیم اینکه کد زیر رو توی کانفیگ i3 میزارید (.config/i3/config):exec xinput set-prop &amp;quotAlpsPS/2 ALPS GlidePoint&amp;quot &amp;quotlibinput Tapping Enabled&amp;quot 1</description>
                <category>TechWithOmid</category>
                <author>TechWithOmid</author>
                <pubDate>Mon, 27 Jun 2022 17:12:16 +0430</pubDate>
            </item>
                    <item>
                <title>دیباگ کردن با روش اردک پلاستیکی(Rubber Duck)</title>
                <link>https://virgool.io/@omidmmadi/%D8%AF%DB%8C%D8%A8%D8%A7%DA%AF-%DA%A9%D8%B1%D8%AF%D9%86-%D8%A8%D8%A7-%D8%B1%D9%88%D8%B4-%D8%A7%D8%B1%D8%AF%DA%A9-%D9%BE%D9%84%D8%A7%D8%B3%D8%AA%DB%8C%DA%A9%DB%8Crubber-duck-k3geu9qdcu1i</link>
                <description>همچنین میتونید این پست رو در وبلاگ من بخونید.به عنوان یک برنامه نویسی مطمئناَ توی موقعیتی قرار گرفتین که برنامه‌ای که نوشتین اون شکلی که لازمه کار نمیکنه.که علتش میتونه یک اشتباه تایپی باشه، حواستون نبوده یا اطلاع کافی درمورد اینکه اون تکنولوژی یا اون بخش چطوری کار میکنه نداشتید.و وقتی که کدی که نوشتین کار نکنه از زمین و زمان طلب کارید و تنها کاری که میتونید بکیند اینکه باگ رو پیدا کنید و مشکلش رو حل کنید. باگ هایی که به وجود میان دلیلش اینکه باید با کامپیوتر به زبان خودش دقیق و با جزئیات کامل صحبت کنید.یکی از روش هایی که میشه باهاش باگ ها رو پیدا کنید و خیلی ها ازش استفاده می کنن روش Rubber Duck یا اردک پلاستیکی هستش.توی این پست میخوام درمورد روش دیباگ Rubber Duck صحبت کنیم که چیه و چطوری کار میکنه. و از این به بعد بهش روش اردک پلاستیکی میگیم.چرا برنامه نویسا از روش اردک پلاستیکی استفاده می کنن؟خیلیا که یه اردک پلاستیکی روی میز برنامه نویسا میبینن و فکر میکنن که فقط یک قسمتی از دکوره یا یه اسباب بازی سادست.در واقعیت اون اردک ساده که به اسم Rubber Duck می شناسنش یه ابزاره که به برنامه نویسا برای حل مسائل کمک میکنه. برنامه نویسا باگ ها و مشکلاتی که باهاش بر میخورن رو برای اردک پلاستیکی توضیح میدن که بهشون به شکل معجزه آسایی کمک میکنه که باگ رو پیدا کنن یا مشکل رو حل کنید.دلیل این کار اینکه وقتی شما یک مشکل و مسئله ای رو برای کسی دیگه ای توضیح میدید درک بهتری از اون مسئله پیدا می کنید. و بهتون اجازه میده که مسئله رو از دید دیگه ای ببینید و متوجه چیزایی که بار اول متوجهشون نشدید بشید.برای درک بهتر اینکه این روش چطوری کار میکنه این پست رو تا انتها بخونید.روش Rubber Duck چیه و چطوری استفاده میشهروش اردک پلاستیکی معروفیتش رو از یه داستان توی کتاب The Pragmatic Programmer که سال 1999 منتشر شد میگیره.داستان روایتی رو به تصویر میکشه که یه برنامه نویس یه اردک پلاستیکی رو همیشه همراه خودش داشت و هر بار که کدهاش به مشکل میخوره کدهاش رو خط به خط براش توضیح میده.صحبت کردن با یه اردک بی جون ممکنه در نگاه اول خیلی احمقانه به نظر برسه، ولی در بین برنامه نویسا این روش خیلی محبوبه چون واقعا کار میکنه.در روش اردک پلاستیکی شما علاوه بر اینکه کد ها رو خط به خط برای اردک توضیح میدیم، براش توضیح میدیم که چه کاری میخوایم انجام بدیم و هدفمون از اینکار چیه و میخوایم به چه هدفی برسیم. وقتی که همه چیز درمورد کد رو برای اردک پلاستیکیمون توضیح میدیم، احتمال اینکه باگ رو پیدا کنیم خیلی زیاده.خیلی وقتا هست خارج از دنیای برنامه نویسی که وقتی به مشکلی برمیخوریم، تصمیم میگیریم که اون مشکل رو برای دوستمون توضیح بدیم، و راه حلش رو قبل از تموم کردن صحبتمون پیدا می کنیم. همین موضوع رو با اردک پلاستیکی هم داریم.با توضیح دادن برای یه اردک پلاستیکی لازم نیست مزاحم کسی بشید، و حتما لازم نیست که اردک پلاستیکی باشه میتونه حیون خونگیتون یا یه جسم بی جون دیگه باشه.تئوری Rubber Duck چیست؟ایده ی پشت روش اردک پلاستیکی اینکه وقتی برنامه نویس به یه مشکلی یا باگی برمیخوره، کد هاش رو خط به خط برای یه اردک پلاستیکی توضیح بده.به این فکر کنید وقتی که یه کپشن برای پست اینستاگرامتون یا تویتی که میخواید بزنید رو یبار با صدای بلند بخونید، اینکار باعث میشه که غلط املایی یا گرامری که دارید رو پیدا کنید و تصحیحش کنید. همین موقعیت هم با توضیح دادن کدتون به اردک پلاستیکی صدق میکنه.وقتی که دارید کدهاتون رو به اردک پلاستیکی توضیح میدید راه حل مشکل همونجا خودش رو نشون میده.کلام آخربرای حل مشکلات و یادگرفتن به شکل موثر، باید درموردش با یکی حرف بزنید و برای یکی آموزشش بدی. و چه چیزی بهتر از یه جسم پلاستیکی بی جون که هر چقدرم باهاش درمورد مشکلات کدتون حرف بزنید نمیخواد کله تون رو بکنه.</description>
                <category>TechWithOmid</category>
                <author>TechWithOmid</author>
                <pubDate>Sat, 18 Jun 2022 22:55:28 +0430</pubDate>
            </item>
                    <item>
                <title>۴ شغلی که تا سال ۲۰۲۴ دیگر وجود نخواهند داشت.</title>
                <link>https://virgool.io/@omidmmadi/4jobs-which-will-disappear-by-2024-t1zwabhxb5ci</link>
                <description>می تونید این نوشته رو توی وبلاگم بخونید :)هر روزه تکنولوژی‌های جدیدی دارن به بازار عرضه میشن و روز به روز زندگی مارو دارن تحت تاثیر خودشون قرار میدن، البته و البته و البته این تاثیر در آینده بیشتر و بیشتر میشه.من توی این پست ۴ تا از شغل‌هایی رو که تا سال ۲۰۲۴ یا شاید هم زود دیگر ازشون اسمی نمی‌شنویم رو جمع کردم و اینجا گذاشتم.رانندگان کامیونجایگزینی با کامیون های خودران.به زودی هوش مصنوعی به اندازه‌ای پیشرفت خواهد کرد که برای جانشین شدن رانندگان کامیون کافی باشه. یکی از مشکلاتی که در حال حاضر وجود دارد که سد راه هوش مصنوعی برای جانشینی رانندگان کامیون شده اخلاق هستش مثلا کشتن یک نفر در ازای نجات دادن جان ۵ نفر یا کشتن ۵ نفر در ازای نجات دادن ۱ نفر. که درک کردن اون برای هوش مصنوعی و حتی آدم ها میتونه در بعضی مواقع سخت باشه.کارگان انبارجایگزینی با ربات‌های پیشرفته.در حال حاضر که من دارم این پست رو می‌نویسم تعداد زیادی انبار در چین وجود دارن که دیگه نیازی به کارگر های ساده ندارن. ربات ها محصولات رو از نقطه A به نقطه B منتقل می‌کنند، علاوه بر اون وقتی که لازم دارن به ایستگاه های شارژ میرن و تا زمان فول شدن اونجا می‌مونن و دوباره به کار بر میگردند.رانندگان تاکسیجایگزینی با خودرو های خودران.راننده‌های تاکسی ها همین الانم باید با Uber و Taxify یا اسنپ و امثال اونا بجنگن. راننده‌های تاکسی‌ها با همون مشکل راننده‌های کامیون دست و پنجه نرم می‌کنند یعنی خودروهای خودران. به محض اینکه خودروهای خودران آماده ورود به بازار بشن میلیون ها کار رو تحت تاثیر خودش قرار میده.کمپانی هایی مثل تسلا و هیوندای دارن باهمدیگه سر این موضوع رقابت می‌کنن و طبق اخبار قراره که اپل هم بزودی ماشین خودران خودش رو رونمایی کنه، که این تکنولوژی بازی رو برای همیشه عوض می‌کنه.آژانس‌های مسافرتیجایگزینی با وبسایت‌های رزرو بلیت.بیاین در این مورد هم رو راست باشیم که این بیزنس در حال حاضر مرده!الان تنها کسایی که برای مسافرت بخوان به آژانس های مسافرتی سر بزنن پدربزرگ مادربزرگامونن ?در آینده‌ای نه چندان دور آژانس‌های مسافرتی پایان کار خودشون رو میبینن.منبع: تک ویت امید</description>
                <category>TechWithOmid</category>
                <author>TechWithOmid</author>
                <pubDate>Mon, 23 May 2022 21:29:22 +0430</pubDate>
            </item>
                    <item>
                <title>چرا از vim استفاده می‌کنم؟</title>
                <link>https://virgool.io/@omidmmadi/%DA%86%D8%B1%D8%A7-%D8%A7%D8%B2-vim-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D9%85%DB%8C-%DA%A9%D9%86%D9%85-dwsmvdwe8ava</link>
                <description>چرا از vim استفاده می‌کنم؟همچنین خوشحال میشم که این مطلب رو توی وبلاگم بخونید :)هر وقت که اسم vim میاد یه محیط سیاه رو تصور می‌کنید که وقتی واردش بشی دیگه بیرون اومدن ازش غیر ممکنه.برای اینکه تصورتون از ویم عوض بشه که براتون یه محیط سیاست این کانفیگ ویم منه البته از نئوویم(neovim) استفاده میکنم که یه فورک از ویمه ولی همون ویم که یکم قابلیت‌های بیشتری داره مثل پشتیبانی از lua و async بودن و کامیونیتی محوره‌تره. البته میتونید توی reddit کانفیگ‌های خفن تری رو ببینید ولی من با نیاز‌های خودم کانفیگ کردم و ازش راضیم.من اوایل هیچ علاقه‌ای به ویم نداشتم و میگفتم تا vscode و pycharm هست چرا از ویم استفاده کنم اما وقتی که داشتم چالش ۹۰روز کد رو توی اینستاگرام انجام میدادم با خودم گفتم که بیام و از vim برای نوشتن اسکریپت‌های کوچیک ازشون استفاده کنم و به لطف کانفیگ‌هایی لینوکسی و نصب آرچ فقط استفاده بیسیک ازش رو میدونستم یعنی اینکه واردش بشم یه تکست رو بنویسم و خارج بشم ولی بعد از یکمی سرچ زدن توی گوگل و یوتوب فهمیدم که ویم خیلی بیشتر از این حرفاست و مهم نیست که چقدر با ویم کار کرده باشید و چقدر توش خفن باشید در نهایت یه چیز جدید ازش میفهمی که انگشت به دهنت می‌کنه.چرا ویم؟سادست چون از شر موس خلاص می‌شید و یکی از خصوصیات برنامه‌نویس خوب بودن گشاد بودنشه که همیشه دنبال ساده‌ترین راه برای یه کاری میگرده. و خب وقتی می‌خواید موس رو تکون بدید باید دست رو حدود ۲۰ سانتی‌متر تکون بدی و موس رو بگیری و تکون بدی و بعدش دوباره همون ۲۰ سانتی‌متر رو برگردی کار خیلی سختی ولی وقتی دستت روی کیبرده دیگه این وقت تلف نمیشه و راحت‌تر هستید البته کمی زمان میبره تا عضلاتتون یادبگیرن که چی به چیه(بعد از مدتی استفاده از ویم واقعا استفاده از ادیتور های معمولی براتون سخت میشه). چرای بعدی قابلیت شخصی سازی فوق‌علاده‌ی ویم هستش شما برای هر استفاده‌ای میتونید ویم رو به لطف وجود vimscript که یه زبان برنامه نویسی برای شخصی سازی و ساختن پلاگین برای ویمه شخصی سازی کنید. سبک بودن یکی دیگه از ویژگی های ویم هستش و برای کسایی که سخت افزار قویی ندادن انتخاب فوق علاده‌ای هستش. البته من دیگه از قابلیت هایی که ویم داره و نمیتونید توی ادیتور‌های دیگه بهشون دسترسی داشته باشین مثل register ها و macro ها رد میشم. نقطه‌ی قوت عجیبش اینکه وقتی وارد ویم میشید نمیتونید تایپ کردن رو شروع کنید باید اول i رو بزنید بعد شروع کنید علت اینکار وجود سه حالت کلی command mode که همونه که اول واردش میشید توش هستید که کارهایی مختلفی میتونید داخل این مود انجام بدید مثل حذف و بالا و پایین رفتن و کلی کار دیگه. حالت بعدی insert mode هست که میتونید توش تایپ کنید و حالت بعدی visual mode هست که میتونید متن رو انتخاب کنید.از کجا شروع کنم؟از اونجایی که ویم سال ۱۹۹۱ منتشر شد(البته خود ویم نسخه‌ی ارتقا یافته‌ی vi که یه ادیتور unix بوده) منابع زیادی برای استفاده وجود داره. بهترین نقطه شروع vimtutor که هم میتونید از سایتش استفاده کنید هم اگه ویم رو نصب داشته باشید توی ترمینال بزنید میتونید یه راهنمای جامع با تمرین داشته باشید که برای شروع خیلی خوبه یا اینکه از بازی vim adventure استفاده کنید که اونم برای شروع بدک نیست.اینا منابعی هستن که در طول زمان جمع آوری کردم (البته انگلیسین):Beginner guideOnline-version of the help pageCheatsheetTips WikiPlugin Databaseو میتونید از ویدیو های یوتوب ThePrimeagen و TJ DeVries و البته VimConf استفاده کنید و اگه انگلیسیتون خوب نیست میتونید از دوره‌ی ویم جادی استفاده کنید. شاید در آینده خودمم درمورد ویم ویدیو ساختم.همنطور که گفتم میتونید ویم رو شخصی سازی کنید میتونید از کانفیگ نئوویم من استفاده کنید.صحبت پایانیمن کسی نیستم که بخوام پند برنامه نویسی بدم ولی برنامه‌نویس باید چیز های جدید رو تجربه کنه و ابزارهایی که میتونن بهروری رو بیشتر کنن رو استفاده کنن و ویم یکی از این ابزار هاست. و مطمئن باشید از وقتی که برای ویم میزارید اصلا پیشمون نمی‌شید و لازم نیست حتما برای کارهای اصلیتون ازش استفاده کنید، برای اسکریپت‌های کوچیک ازش استفاده کنید و حتما لازم نیست بیایین و ادیتور تحت ترمینال ویم رو استفاده کنید!پلاگین ویم برای همه‌ی ادیتور های و IDE ها وجود داره میتونید نصب کنید و یه مدتی ازش استفاده کنید اگر فهمیدید واقعا کارکردن باهاش رو دوست ندارید میتونید بدون هیچ دردسری پلاگینش رو غیر فعال کنید و از ادیتور معمولیتون استفاده کنید.ولی اگه با ویم دستتون راه افتاد و دارید از توزیعات لینوکس استفاده می‌کنید پیشنهاد می‌کنم حتما از Tilling WM ها مثل i3 استفاده کنید چون بهره وریتون خیلی بیشتر از قبل میشه و tmux رو هم فراموش نکنید که درمورد همه‌ی این ابزار‌ها در آینده بیشتر براتون میگم.و در نهایت اینا ابزارن و فقط برای بیشتر کردن بهره وری و استفاده هستن و اگه وقتی ابزار بهتری بیاد(که فکر نمیکنم ?) از اونا استفاده میکنیم.</description>
                <category>TechWithOmid</category>
                <author>TechWithOmid</author>
                <pubDate>Tue, 01 Feb 2022 14:53:44 +0330</pubDate>
            </item>
                    <item>
                <title>حل مشکل نصب پکیج با npm بدون sudo</title>
                <link>https://virgool.io/@omidmmadi/%D8%AD%D9%84-%D9%85%D8%B4%DA%A9%D9%84-%D9%86%D8%B5%D8%A8-%D9%BE%DA%A9%DB%8C%D8%AC-%D8%A8%D8%A7-npm-%D8%A8%D8%AF%D9%88%D9%86-sudo-mnnniheddlas</link>
                <description>سلام!اگه با جاوااسکریپت کار کرده باشید اسم npm به گوشتون خورده که یه پکیج منیجر مثل pip پایتون هستش ولی حتی اگه با جاوااسکریپت هم کار نکرده باشید هم بازم اسمش به گوشتون خورده. به هر حال امروز می‌خوام درمورد یه مشکلی که شاید برای شما هم پیش اومده باشه بنویسم. این مشکل رو من چند بار داشتم (هرباری که نصب کردم) و توی اینترنت گشتم و راه حل هایی که براش پیدا می‌کردم پیچیده و اگه کم دقتی می‌کردید کل لینوکستون رو به هم میریخت که خودم ۳ بار این مشکل برام پیش اومد و مجبور شدم ۳ بار مجبور شدم آرچ خودم رو نصب کنم. اما امروز این مشکل رو با یه راه آسون‌تر و بدون دردسر تر از کارایی که من انجام دادم رو حل میکنیم.مشکل از این قراره که هر وقت بخواید با npm پکیجی رو نصب کنید باید دسترسی sudo به npm بدید که این روش اصلا پیشنهاد نمیشه و بهتره اصلا این کار رو انجام ندید.دیگه اضافه گویی کافیه بریم سر راه حل:اول از همه یه دایرکتوری میسازیم که npm اون رو به دیفالت خودش تغییر بعد باید اون رو به npm معرفی کنیم و همچنین لازمه که دایرکتوری bin که داخل .npm که ساختیم رو به PATH اضافه کنیم توی دایرکتوری bin فایل های اجرایی پکیج هایی که نصب می‌کنیم قرار داره. پس دستوری های زیر رو خط به خط توی ترمینال خودتون اجرا کنید:mkdir ~/.npm
npm config set prefix ~/.npm
echo export PATH=&amp;quot$PATH:$HOME/.npm/bin&amp;quot &gt;&gt; .bashrc
source ~/.bashrc خب باید الان مشکلتون حل شده باشه.سوال، مشکل یا پیشنهادی دارید بخش نظرات برام بنویسید:)</description>
                <category>TechWithOmid</category>
                <author>TechWithOmid</author>
                <pubDate>Thu, 12 Aug 2021 11:39:36 +0430</pubDate>
            </item>
                    <item>
                <title>فایل gitignore برای پروژه‌ی جنگو</title>
                <link>https://virgool.io/@omidmmadi/%D9%81%D8%A7%DB%8C%D9%84-gitignore-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%DB%8C-%D8%AC%D9%86%DA%AF%D9%88-gow5jt7a0foj</link>
                <description>اگه از گیت به عنوان ورژن کنترل استفاده می‌کنید، به فایلی به اسم .gitignore احتیاج دارید که فایل هایی که مهم نیستند و نباید داخل repository گیت باشند رو نادیده بگیره. به virtural environmet و فایل های .pyc فکر کنید. این فایل ها اهمیتی ندارند و هر وقت پروژه رو جایی بخواید اجرا کنید این فایل ها هم ایجاد میشه. برای همین لزومی نداره که داخل repository باشن.فایل‌ها و دایرکتوری‌های زیادی هستن که لازم نیستن. برای مثال تنظیمات vscode (البته اگه ازشون استفاده کنید) یا فایل env (برای ذخیره متغییر های محیطی که دارای اطلاعات حساسی هستن). من اینجا لیستی رو تهیه کردم که می‌تونید به فایل .gitignore خودتون اضافه کنید.# Django #
*.log
*.pot
*.pyc
__pycache__
db.sqlite3
media

# Backup files # 
*.bak 

# If you are using PyCharm # 
.idea/**/workspace.xml 
.idea/**/tasks.xml 
.idea/dictionaries 
.idea/**/dataSources/ 
.idea/**/dataSources.ids 
.idea/**/dataSources.xml 
.idea/**/dataSources.local.xml 
.idea/**/sqlDataSources.xml 
.idea/**/dynamic.xml 
.idea/**/uiDesigner.xml 
.idea/**/gradle.xml 
.idea/**/libraries 
*.iws /out/ 

# Python # 
*.py[cod] 
*$py.class 

# Distribution / packaging 
.Python build/ 
develop-eggs/ 
dist/ 
downloads/ 
eggs/ 
.eggs/ 
lib/ 
lib64/ 
parts/ 
sdist/ 
var/ 
wheels/ 
*.egg-info/ 
.installed.cfg 
*.egg 
*.manifest 
*.spec 

# Installer logs 
pip-log.txt 
pip-delete-this-directory.txt 

# Unit test / coverage reports 
htmlcov/ 
.tox/ 
.coverage 
.coverage.* 
.cache 
.pytest_cache/ 
nosetests.xml 
coverage.xml 
*.cover 
.hypothesis/ 

# Jupyter Notebook 
.ipynb_checkpoints 

# pyenv 
.python-version 

# celery 
celerybeat-schedule.* 

# SageMath parsed files 
*.sage.py 

# Environments 
.env 
.venv 
env/ 
venv/ 
ENV/ 
env.bak/ 
venv.bak/ 

# mkdocs documentation 
/site 

# mypy 
.mypy_cache/ 

# Sublime Text # 
*.tmlanguage.cache 
*.tmPreferences.cache 
*.stTheme.cache 
*.sublime-workspace 
*.sublime-project 

# sftp configuration file 
sftp-config.json 

# Package control specific files Package 
Control.last-run 
Control.ca-list 
Control.ca-bundle 
Control.system-ca-bundle 
GitHub.sublime-settings 

# Visual Studio Code # 
.vscode/* 
!.vscode/settings.json 
!.vscode/tasks.json 
!.vscode/launch.json 
!.vscode/extensions.json 
.historyانیجا متوجه میشید که migration هارو به این لیست اضافه نکردم چون معمولا میخوام migration هام با من باشن برای همین اینجا اونارو نذاشتم ولی میتونید که به انتهای لیست اونا رو اضافه کنید.ولی فایل هایی با پسوند .pyc که پایتون هربار کد شمارو به بایت کد تبدیل میکنه که خروجی اون فایل هایی با پسوند .pyc هستش. با اون فایل ها کار زیادی نمی‌تونید بکنید برای همین نیازی بهشون نیست(البته میشه اون هارو اجرا کرد چون همون فایل پایتونی شما هستن که کامپایل شدن)اگه سوالی داشتین توی کامنت ها بپرسید که باهم دیگه حل کنیم :)اگر هم نکته‌ای جا مونده یا جایی رو اشتباه گفتم بگید اصلاح میکنم.</description>
                <category>TechWithOmid</category>
                <author>TechWithOmid</author>
                <pubDate>Sun, 06 Jun 2021 01:41:30 +0430</pubDate>
            </item>
                    <item>
                <title>راست چین کردن کردن مارک‌داون</title>
                <link>https://virgool.io/@omidmmadi/%D8%B1%D8%A7%D8%B3%D8%AA-%DA%86%DB%8C%D9%86-%DA%A9%D8%B1%D8%AF%D9%86-%DA%A9%D8%B1%D8%AF%D9%86-%D9%85%D8%A7%D8%B1%DA%A9-%D8%AF%D8%A7%D9%88%D9%86-bzuerljvtwjk</link>
                <description>سلام.من یه مدت قبل که داشتم روی این پروژه کار می‌کردم که کارش حاضری زدن در برنامه‌ی شاد بود. پروژه رو روی گیت‌هاب آپلود کردم و براش یه فایل README.md درست کردم که توش توضیح نحوه‌ی استفاده از اسکریپت رو نوشته بودم اما مشکلی که وجود داشت این بود که نمی‌شد فارسی نوشتن البته میشه نوشت بلکه نمیشه راست چین نوشت که یه مدت همینجوری موند ولی بعد یه مدت که خواستم یه دستی به پروژه و کدهاش بکشم، و خواستم فایل توضیحات رو راستچین کنم بعد از چندتا سرچ و دیدن README های دیگه فهمیدم که میشه داخل فایل های مارک‌داون html نوشت !و خب منطقی هم هست چون جفتشون markup هستن. حالا تنها کاری که باید میکردم این بود که یه div با dir بهش بدم برای اینکه بیشتر متوجه بشید من پیشنهاد میکنم برید این فایل رو توی گیت‌هاب ببینید که هم از محتواش استفاده می‌کنید و هم می‌تونید نحوه‌ی استفاده رو ببینید.یه مثال کوچیک به این شکل میشه:# Shad Bot
&lt;div dir=&amp;quotrtl&amp;quot&gt;
&lt;br&gt;
این برنامه رو در وقت آزاد خودم نوشتم و چون صبح ها دیر بیدار میشم اومدم و پروسه ی حاضری زدن در شاد رو اتوماتیک کردم فقط لازمه که برنامه رو اجرا کنید در شاد لاگین کنید و برای انتخاب گروه بهتره که چت رو پین کنید که بتونید اون رو انتخاب کنید که بصورت عدد از سمت بالا به پایین میتونید چت رو انتخاب کنید و سعی میکنم که به مرور زمان برنامه رو بهبود بدم.
&lt;br&gt;&lt;br&gt;
&lt;strong&gt;توجه: هرگونه استفاده‌ی غیراخلاقی و غیر قانونی از برنامه بر عهده‌ی خود شخص می باشد و توسعه دهنده هیچگونه مسئولیتی ندارد.&lt;/strong&gt;
&lt;/div&gt;اگه سوالی بود در کامنت ها بنویسید که باهم دیگه حل کنیم و اگه جایی رو اشتباه گفتم بگید اصلاح کنم :)</description>
                <category>TechWithOmid</category>
                <author>TechWithOmid</author>
                <pubDate>Fri, 04 Jun 2021 23:59:21 +0430</pubDate>
            </item>
                    <item>
                <title>مدیریت درایور مرورگر برای استفاده در سلینیوم پایتون</title>
                <link>https://virgool.io/@omidmmadi/%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%D8%AF%D8%B1%D8%A7%DB%8C%D9%88%D8%B1-%D9%85%D8%B1%D9%88%D8%B1%DA%AF%D8%B1-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%AF%D8%B1-%D8%B3%D9%84%DB%8C%D9%86%DB%8C%D9%88%D9%85-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-g2j2moopqbgy</link>
                <description>سلام!من یه مدت پیش داشتم روی پروژه‌ی کوچیکی کار میکردم که یه بات بود که میتونست توی کلاس های شاد توی یه زمان مشخص یه پیغامی رو بفرسته میتونید از گیت‌هاب پروژه رو بصورت رایگان استفاده کنید و مشارکت کنید.https://github.com/techwithomid/shad-botشروع کردم به نوشتن پروژه و همچی خوب پیش میرفت و از اونجایی که سلینیوم لازم داره که درایور یکی از مرورگر ها رو داشته باشه بصورت دستی رفتم درایور کروم رو دانلود کردم و در مسیری از سیستم‌ عامل قرار دادم و اون رو به سلینیوم دادم. بعدش توی گیت‌هاب یه ‌issue گرفتم که مشکل این بود که درایور نبود و کاربر باید میرفت اون رو دستی دانلود میکرد خواستم و چون هیچ ایده‌ای نداشتم چه جوری این کار رو بصورت اتوماتیک انجام بدم خواستم یه اسکریپت دیگه بنویسم که بصورت خودکار بره و درایور رو دانلود کنه و خب برای اینکار لازم داشتم بگردم و مرورگری که رو سیستم کاربر نصب هست رو پیدا کنم بعد برم درایور رو دانلود کنم ولی فهمیدم که یه پکیج خیلی خوب و کاربردی برای اینکار وجود داره و منطقی نیست که دوباره چرخ رو اختراع کنیم. و از اونجایی که برای خودم مفید بود میخوام اونم اینجا بزارم و نحوه‌ی استفادش رو براتون توضیح بدم.در حالت عادی ما باید چنین کاری رو انجام بدیم:driver = webdriver.Chrome(executable_path=&amp;quot/path/to/binary/chromedriver&amp;quot)یا اگه از فایرفاکس استفاده می‌کنید:driver = webdriver.Firefox(executable_path=&amp;quot/path/to/binary/firefoxdriver&amp;quot)ولی اگه درایور وجود نداشته باشه و کاربر اطلاعی نداشته باشه ازش دردسر میشه و ارور میگره و برنامه کار نمیکنه برای همین از پکیجی به اسم webdriver_manager استفاده میکنیم.که کارش اینکه عملیات دانلود داریور و قابل استفاده کردن اون(executeable کردنش) رو اتوماتیک کنه.برای استفاده کافیه که با استفاده از دستور زیر اون رو نصب کنید:pip install webdriver_managerحالا که پکیج رو نصب کردیم کافیه که به باتوجه به مرورگر مورد استفاده از یکی از روش های زیر استفاده کنید.کروم:from webdriver_manager.chrome import ChromeDriverManager
from selenium import webdriver

driver = webdriver.Chrome(executable_path=ChromeDriverManager().install())
driver.get(&amp;quothttp://www.google.com/&amp;quot)
print(driver.title)
driver.quit()فایرفاکس:from webdriver_manager.firefox import GeckoDriverManager
from selenium import webdriver

driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())
driver.get(&amp;quothttp://www.google.com/&amp;quot)
print(driver.title)
driver.quit()مرورگر Edge:from webdriver_manager.firefox import GeckoDriverManager
from selenium import webdriver

driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())
driver.get(&amp;quothttp://www.google.com/&amp;quot)
print(driver.title)
driver.quit()مرورگر IE:from webdriver_manager.microsoft import IEDriverManager
from selenium import webdriver

driver = webdriver.Ie(executable_path=IEDriverManager().install())
driver.get(&amp;quothttp://www.google.com/&amp;quot)
print(driver.title)
driver.quit()الته باید به این نکته توجه کرد که پکیج webdriver_manager بصورت پیشفرض آخرین نسخه درایور رو دانلود میکنه و برای اینکه مشخص کنید که چه ورژنی رو دانلود کنه از روش زیر استفاده می‌کنیم:webdriver.Chrome(executable_path=ChromeDriverManager(&amp;quot2.42&amp;quot).install())و در آخر یک تشکر برای Sergey Pirogov برای نوشتن این پکیج کاربردی که این عملیات کسل کننده و بعضی اوقات دردسر ساز رو برامون حل کردن.اگر سوالی داشتید جایی رو درست توضیح ندادن بگید که بهم دیگه حلش کنیم :)</description>
                <category>TechWithOmid</category>
                <author>TechWithOmid</author>
                <pubDate>Thu, 13 May 2021 01:30:50 +0430</pubDate>
            </item>
                    <item>
                <title>متوقف کردن سرور جنگو در لینوکس</title>
                <link>https://virgool.io/@omidmmadi/%D9%85%D8%AA%D9%88%D9%82%D9%81-%DA%A9%D8%B1%D8%AF%D9%86-%D8%B3%D8%B1%D9%88%D8%B1-%D8%AC%D9%86%DA%AF%D9%88-%D8%AF%D8%B1-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-gju7z8x2uecj</link>
                <description>پست قبلی درمورد عوض کردن اسم پروژه‌ی جنگو نوشتم که میتونید اینجا بخونید. بعضی وقتا که سرور جنگو در حال اجراست من ترمینال رو میبندم و پورتی که جنگو داره روش اجرا میشه هنوز مشغوله و تا وقتی اون رو متوقف نکنی نمیتونی از اون پورت استفاده کنی که منطقیه و اکثر اوقات که این با این موضوع روبرو میشدم دو راه داشتم اولین راه این بود که سیستم رو ریستارت کنم! و دومین راه این بود که از یه پورت دیگه استفاده کنم که بصورت پیشفرض وقتی runserver رو بزنیم روی پورت ۸۰۰۰ اجرا میشه و میتونیم به شکل زیر پورت رو عوض کنیم:./manage.py runserver 8080اما میتونیم که پورتی که داره جنگو روش اجرا میشه رو متوقف کنیم و باز هم ازش استفاده کنیم که کار آسونیه و فقط روی توزیع های لینوکس کار میکنه این روش.در اینجا با fuser آشنا میشیم که کارش مانیتور کردن و کنترل کردن پردازش هاست. توی این پست نمیخوایم وارد این شیم که این ابزار میتونه چه کار هایی بکنه و فقط میخوایم که کارمون را بیوفته پس، فقط به فلگ k که همون kill هست نیاز داریم نحوه‌ی کار به این شکل خواهد بود که ما به دسترسی روت نیاز خواهیم داشت از فلگ k استفاده میکنیم و پورتی رو که میخوام ببندیم رو هم لازم داریم. لازم نیست درگیر بشید فقط دستور زیر رو توی ترمینالتون پیست کنید:sudo fuser -k 8000/tcp در اینجا tcp پروتوکل هست و ۸۰۰۰ پورت مورد نظرمون.اگرم این ابزار روی توزیعتون نصب نبود (برای من بود.) میتونید از روش زیر نصبش کنید:sudo apt install psmiscیا اگه از yum استفاده میکنید:sudo yum install psmiscاگه سوالی داشتید در قسمت نظرات بنویسید که باهم دیگه حلش کنیم. اگه در مطالبی که گفتم مشکلی وجود داره که نیاز به اصلاح داره بگید :)</description>
                <category>TechWithOmid</category>
                <author>TechWithOmid</author>
                <pubDate>Sat, 17 Apr 2021 02:11:18 +0430</pubDate>
            </item>
                    <item>
                <title>چگونه اسم پروژه جنگو را تغییر دهیم؟</title>
                <link>https://virgool.io/@omidmmadi/%DA%86%DA%AF%D9%88%D9%86%D9%87-%D8%A7%D8%B3%D9%85-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D8%AC%D9%86%DA%AF%D9%88-%D8%B1%D8%A7-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%D8%AF%D9%87%DB%8C%D9%85-ysxrayrtvivf</link>
                <description>همین چند روز پیش داشتم روی یه پروژه کار میکردم که لازم شد اسم پروژه رو عوض کنم. اولش با خودم گفتم که یه پروژه‌ی جدید بسازم بعد همه‌ی کدها رو اونجا پیست کنم ولی اصلا کار عاقلانه‌ای نبود و یادم افتاد که خیلی قبل تر توی یکی از آموزش‌های جنگویی که توی یوتوب دیده بودم مدرس گفت که میشه اسم پروژه رو تغییر داد. در ادامه با هم دیگر این کار را انجا میدهیم و کار سختی نیست.ساختار پروژه رو به شکل زیر در نظر بگیریم:خب اینجا اسم testVirgol رو در دوجا میبینم یکیش رو میشه به راحتی و بدون هیچ اضافه کاری عوض کرد (اولین testVirgol که می‌بینید. که در واقع دایرکتوری هست که شامل فایل‌های پروژست) و testVirgol دیگر شامل تنظیمات پروژه مثل فایل‌های settings ,init, urls و wsgi است که برای تغییر اسم این دایرکتوری لازمه چند خط کد رو تغییر بدیم. برای اینکه گیج نشید و رفع ابهام بشه testVirgol اول که گفتیم مشکلی پیش نمیاره عوض کردم و الان ساختار پروژه به این شکله:تنها کاری که انجام دادم عوض کردن اسم دایرکتوری بود که پروژه توش بود. حالا بیایم و اسم testVirgol رو تغییر بدیم اگه اسم دایرکتوری رو عوض کنیم با این خطا مواجه میشیم:ModuleNotFoundError: No module named &#039;testVirgol&#039;البته خلاصه‌ی خطا شده این:)تنها کاری که لازمه انجام بدیم تغییر ۴ خط کد توی فایل هایی هست که مشخص کردم و لازم نیست که داخل app هایی که داریم تغییری ایجاد کنیم.settings.py:ROOT_URLCONF = ‘virgool.urls’WSGI_APPLICATION = ‘virgool.wsgi.application’wsgi.py:os.environ.setdefault(“DJANGO_SETTINGS_MODULE”, “virgool.settings”)manage.py:os.environ.setdefault(“DJANGO_SETTINGS_MODULE”, “virgool.settings”)کار پیچیده‌ای انجام ندادیم در فایل settings.py مسیر فایل WSGI, URL پروژه رو مشخص کردیم.در فایل wsgi.py مسیر فایل settings را مشخص میکنیم.و در فایل manage.py نیز مسیر فایل settings را مشخص می‌کنیم.بعد از انجام این تغییرات با اجرا کردن سرور باید پیغام موفقیت زیر رو ببینیم:Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
April 06, 2021 - 19:16:10
Django version 2.2, using settings &#039;virgool.settings&#039;
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.و در نهایت ساختار پروژه به شکل زیر می‌آید:اگر مشکلی در هر یک از مراحل داشتید و یا نظری دارید در بخش نظرات بگید خوشحال میشم که بتونیم با کمک هم مشکل رو حل کنیم :)</description>
                <category>TechWithOmid</category>
                <author>TechWithOmid</author>
                <pubDate>Wed, 07 Apr 2021 00:07:08 +0430</pubDate>
            </item>
                    <item>
                <title>درباره‌ی من و داستان برنامه‌نویس شدن من :)</title>
                <link>https://virgool.io/@omidmmadi/%D8%AF%D8%B1%D8%A8%D8%A7%D8%B1%D9%87-%DB%8C-%D9%85%D9%86-%D9%88-%D8%AF%D8%A7%D8%B3%D8%AA%D8%A7%D9%86-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3-%D8%B4%D8%AF%D9%86-%D9%85%D9%86-strom50ebuwf</link>
                <description>سلام!من امید هستم. کار مورد علاقه‌ی من برنامه‌نویسی و انجام کارهای مربوط به تکنولوژیه. تقریباً ۳ سالی میشه که با برنامه نویسی آشنا شدم و بصورت تفریحی با زبان‌های مختلفی کار کردم و اولین زبانی که باهاش شروع کردم پایتون بود و بعد از پایتون سراغ سی شارپ و جاوا و… هم رفتم اما در نهایت تونستم با پایتون ارتباط خوبی برقرار کنم و زبان مورد علاقه‌م تا به الان بوده و جدیدا جاوااسکریپت هم به این لیستم اضافه شده.توی اینستاگرام به یه چالش برخوردم به اسم 90roozcode که به نظرم جالب اومد منم چالش رو شروع کردم و  در آینده‌ای نه چندان دور قراره حاصل این دوره یه وبلاگ خواهد بود و مطالبی رو که در وبلاگ میزارم رو قراره توی ویرگول هم بزارم و میتونید از این دو جا بخونید.تقریباً از وقتی که فهمیدم وبلاگ چیه دوست داشتم یکی داشته باشم و بنویسم که چندباری هم شروع کردم و اولین وبلاگی که داشتم روی بلاگفا بود و درمورد ورزش هندبال بود و از خودم چیزی نداشتم و فقط داشتم مطالب وبسایت های دیگه رو کپی میکردم. و چندبار دیگه هم وبلاگ نویسی رو شروع کردم ولی ادامه ندادم. این وبلاگ رو با جنگو نوشتم که کار عاقلانه‌ای نیست چون میتونستم با وردپرس توی یه روز کاراشو انجام بدم ولی اینکارو نکردم و با جنگو نوشتم چون جنگو رو هم دوست دارم. توی این وبلاگ از تجربیات خودم و البته بحث‌هایی که برای من جالب بوده  و ممکنه برای شما هم جالب باشه می‌نویسم. حدودا ۴ یا ۶ سالم بود که پدرم یه کامپیوتر خرید که در دوران خودش خیلی خفن بود تقریبا سال ۸۵ یا ۸۶ بود و هنوز هم این کامپیوتر هم داریم که برای کار حساب داری ازش استفاده میکنیم و تنها ویندوزی که دوس دارم روش نصبه یعنی xp خیلی دوست داشتم روی این کامپیوتر لینوکس داشته باشم ولی پدرم با کارکردن توی محیط لینوکس راحت نبود و گذاشتیم همون ویندوز بمونه. خب الان میخوام بگم از کجا برنامه‌نویسی رو شروع کردم و چطوری وارد این دنیا شدم. اوایل تنها استفاده‌ای که از کامپیوتر میکردم فقط بازی کردن بود که بازی هایی که اون زمان داشتم هنوزم نظیر ندارن مثل GTA: sa و این موضوع تا ۱۳ یا ۱۴ سالگی ادامه داشت بعدش خواستم خودم بازی بسازم و در این زمان بود که با یونیتی رو کلمه‌ی برنامه نویسی آشنا شدم و هیچ ایده‌ای نداشتم که برنامه نویسی چی هست و توی گوگل یه سرچ کردم برنامه نویسی چیست؟ و محتوای زبان فارسی الان خیلی خیلی بهتر از زمانی بود که من سرچ زدم و یکی از ویدیو های جادی رو توی سرچ دیدم که اسمش درک برنامه نویسی با جادی بود و گفتم چه خوب و بیشتر دنبال ویدیو فارسی بود که بدونم برنامه نویسی چیه و اون زمان فکر میکردم که جادی یه انگلیسی زبانه و اومدن ویدیوش رو توی آپارات گذاشتن بعد از یه مدت که به هیچی نرسیدم ویدیوش رو دیدم و با پایتون آشنا شدم و کارکردن رو باهاش شروع کردم و بعد از یه مدت با C# آشنا شدم و بازم با html آشنا شدم و رفتم یادش گرفتم بازم بازگشتم به C# ولی خب چیزی نبود که بخوام ازش استفاده کنم و رفتم دوباره یکی از ویدیو های جادی رو دیدم و با لینوکس آشنا شدم یه مدت زیادی دنبال نصب کردنش بودم و بعد از مدت ها تونستم نصبش کنم و چون یکی از نسخه های خیلی قدیمی رو از سایت های ایرانی گرفته بودم  نمیتونستم هیچ برنامه از رو نصب کنم (نمیدونستم) و با یکسری دیگه از منابع آشنا شدم و لینوکسم رو راه انداختم و خواستم C# رو روی لینوکس استفاده کنم و به در بسته خوردم. رفتم ویدیو های جادی رو کامل دیدم و پایتون رو جدی شروع کردم یادگیریش رو خلاصه جریان خیلی مفصل تر از اینه و نمیخوام سرتون رو درد بیارم پایتون رو یادگرفتم و رفتم سمت جنگو بهم گفتن که باید جاوااسکرپیتم یادبگیری منم یه دوره برداشتم و شروع کردم بعدشم یه دوره‌ی خیلی کوچیک جنگو از یودمی گرفتم که راه انداخت منو در این زمان بود که توی اینستاگرامم بصورت روزانه از پیشرفت و کارهایی که هر روز انجام میدادم پست میزاشتم و خب توی این راه دوستای خوبی پیدا کردم و الانم که در خدمت شما هستم. دیگه خیلی طولانی شد ولی احتمالا تا آخر فروردین ماه یا شاید یه مدت دیرتر وبلاگ رو روی یه سروری بالا بیارم و آدرس وبلاگ این خواهد بود.TechWithOmid.ir این لینک در حال حاضر یک تمپلیت ساده رو که یادم نیست از کجا کپی کردم رو از نویسندش هم اجازه گرفتم و بعد از بالا اومد بلاگ اینو برمیدارم که در حال حاضر داره روی گیتهاب خودم سرو میشه که بعدا در این مورد هم یه پست مینویسم.</description>
                <category>TechWithOmid</category>
                <author>TechWithOmid</author>
                <pubDate>Fri, 02 Apr 2021 00:51:48 +0430</pubDate>
            </item>
            </channel>
</rss>