<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های پوریا ماندی‌صنم</title><link>https://virgool.ir/feed/@pourya2374</link><description>یه برنامه‌نویس که همیشه دوست داره بین دو تا چیز، دومی رو اول بگه! در حال حاضر مدیرفنی تیم تیکا و علاقه‌مند به مباحث زیرساخت و امنیت.</description><language>fa</language><pubDate>2026-11-12 02:11:48</pubDate><image><url>https://files.virgool.ir/upload/users/1001/avatar/avatar.png</url><title>پوریا ماندی‌صنم</title><link>https://virgool.ir/@pourya2374</link></image><item><title>مهیا کردن بساط لهو و لعب با برنامه‌نویسی!</title><link>https://virgool.ir/@pourya2374/مهیا-کردن-بساط-لهو-و-لعب-با-برنامهنویسی-bxibdpopywqg</link><description> مسیر تهران - تبریز به کمک دوست همیشگی.خب طبق معمول اولش می‌خوام بگم که ماجرا از کجا شروع شده. اگر خدا بخواد هفته آینده داریم می‌ریم تبریز که یه بادی به سرمون بخوره بعد از این چند وقت شلوغی کاروزندگی. از تهران تا تبریز حدودا ۶، ۷ ساعت راهه. معمولا وقتی خودمون مسافرت می‌ریم، تو راه پادکست گوش می‌دیم. ماشااله پادکست‌های فارسی هم تو چند وقت اخیر رشد چشم‌گیری داشتند و الآن پادکست‌های خیلی‌خوبی تو موضوعات مختلف داریم.بی‌پلاسکیبورد آزادو ...یه ریپو روی github هم هست که تقریبا هرچی هست رو لیست کرده:https://github.com/ashkanRmk/awesome-persian-podcastsخب بریم سر ادامه داستان. تو این سفر مهمون داریم و متاسفانه خیلی اهل پادکست و این جینگولک بازی‌ها نیستند. از طرفی هم ما خیلی اهل آهنگ گوش دادن نیستیم و در نتیجه ضبط ماشین کلا چیز خاصی نداره برای اینکه خودی نشون بده. :)این شد که تصمیم گرفتیم یذره مواد اولیه برای قر دادن آماده کنیم. در همین راستا سری به گوگل زدیم و گفتیم بریم سراغ سایت‌های دانلود آهنگ. تهش چند تا لینک انتخاب شد که ما رو ببره به فضای «همایون ولش کن» دوست عزیزمون! یکی از لینک‌ها به عنوان مثال اینه:http://blogmusic.ir/خاطره-انگیز-قدیمی/این دوستمون یذره حرکت عجیبی زده و جایی تو سایتش پیدا نمی‌شه که کل این پکیج رو بشه دانلود کرد و باید برای هر آهنگ روی گزینه دانلود کلیک کنید. حالا این یکی از مثال‌ها بود و تقریبا بیست‌تا از این سایت‌ها رو انتخاب کرده بودیم که این کارشون مشابه بوده. احتمالا هم به دلیل داستان‌های ‌SEO این کار رو کردند تا کاربر مجبور بشه زمان بیشتری رو روی سایتشون بمونه. ولی خب یه برنامه‌نویس هیچوقت نمی‌ره این کار رو بکنه، چون کار حوصله‌سر‌بری هست. برای همین سعی می‌کنم یذره گیک‌بازی قاطیش کنم تا بشه انجامش داد!خب پس صورت مسئله مشخص شد. نیاز به یه برنامه‌ای داریم تا بره صفحه مورد نظر ما رو بخونه و هر چی آهنگ تو اون صفحه هست رو برامون دانلود کنه. به این کار تو زمینه برنامه‌نویسی می‌گن crawl کردن. مشابه کاری که ربات‌های گوگل برای index کردن صفحات وب انجام می‌دن. در واقع گوگل کلی از این خزنده‌ها داره که میرن صفحات مختلف سایت‌ها رو می‌خونن و محتواشون رو بررسی می‌کنن و در نهایت با یه سری الگوریتم بین محتوا‌یی که بات‌ها خوندن سرچ می‌کنه و نتایج رو به شما نشون می‌ده.عکس از سایت state of digital خب دیگه بریم سراغ اصل مطلب. من برای این کار طبق معمول از پایتون استفاده کردم. یکی از فواید بزرگ این زبون اینه که آدم‌های زیادی تو دنیا دارن باهاش کار می‌کنن و نتیجش می‌شه اینکه تقریبا هرکاری بخواین انجام بدید یکی قبلا مشابهش رو انجام داده و کلی کتابخونه براش وجود داره که باعث می‌شه روی کار اصلیتون تمرکز کنید. کتابخونه‌ای که من برای اینکار انتخاب کردم BeautifulSoup هست که ترجمش می‌شه «سوپ زیبا»! تو ادامه کار من فرض رو بر این گذاشتم که با پایتون آشنایی دارید، اگر اینطور نیست می‌تونید یدوری تو اینترنت بزنید و در موردش بخونید یا اینکه از این دوره جادی استفاده کنید تا کلیات قضیه دستتون بیاد.من تو پایتون عادت دارم که هروقت می‌خوام یه پروژه‌ای رو شروع کنم براش یه محیط مجازی (virtual environment) درست می‌کنم. بعد از این‌ کار باید package مورد نظرمون رو نصب کنیم.pip install beautifulsoup4۲. برای اینکه یچیزی رو خوب یاد بگیرید، بهترین کار اینه که برید داکیومنتش رو بخونید. اینجا من فقط استفاده‌ای که قرار هست ازش بکنم رو توضیح می‌دم و وارد جزئیاتش نمی‌شم. همونطور که در جریان هستید صفحات وب در نهایت یسری html و css و js هستند که روی browser ما داره نمایش داده می‌شه. امکانی که این کتابخونه به ما می‌ده این هست که بتونیم روی html یا همون ساختار صفحه دنبال چیزایی که نیاز داریم بگردیم. پس کاری که من می‌کنم اینه که html صفحه‌ای که دارم می‌بینم رو دانلود می‌کنم و سعی ‌‌می‌کنم با پایتون برم دنبال آهنگ‌ها. اگر به سورس صفحه نگاه کنید، لینک آهنگ‌ها همچین شکلی داره:&lt;a href=&#34;http://sv.blogmusic.ir/myahang/Morteza-Ahmadi.mp3&#34; class=&#34;small otw-aqua radius otw-button&#34; target=&#34;_blank&#34;&gt;DOWNLOAD&lt;/a&gt;تا اینجا میشه گفت ویژگی مشترک لینک‌های دانلود همچین چیزیه:داخل تگ a قرار گرفتند.متن لینک DOWNLOAD هست.پس من کافیه تو صفحه دنبال این ویژگی‌ها بگردم و تمام تگ‌های a با ویژگی‌های بالا رو پیدا کنم.۳. برای شروع اول باید متن صفحه رو که دانلود کردم بدم به کتابخونه‌ای که صحبتش شد. بعد از یکی از متدهاش برای پیداکردن هدف استفاده کنم!from bs4 import BeautifulSoup&#xA;&#xA;source = str(open(&#39;page_source.html&#39;, &#39;r&#39;).readlines())&#xA;soup = BeautifulSoup(source, &#39;html.parser&#39;)&#xA;&#xA;for a_tag in soup.find_all(&#39;a&#39;, string=&#34;DOWNLOAD&#34;):&#xA;    print(a_tag)تا این مرحله همه تگ‌های a ای که می‌خواستیم پیدا شدند و خروجی اینه:&lt;a class=&#34;small otw-aqua radius otw-button&#34; href=&#34;http://sv.blogmusic.ir/myahang/Mix-Ghadimi.mp3&#34; target=&#34;_blank&#34;&gt;DOWNLOAD&lt;/a&gt;&lt;a class=&#34;small otw-aqua radius otw-button&#34; href=&#34;http://sv.blogmusic.ir/myahang/Mix-Ghadimi-shad.mp3&#34; target=&#34;_blank&#34;&gt;DOWNLOAD&lt;/a&gt;و ...۴. حالا کافیه مقدار href هارو دانلود کنیم. من معمولا برای دانلود از wget تو لینوکس استفاده می‌کنم. اگر با لینوکس خیلی آشنایی ندارید، فکر کنم تو پست قبلیم یسری لینک دادم برای نصب و این داستان‌هاش. البته کاملا مشخصه که با پایتون هم می‌تونید دانلود رو انجام بدید، صرفا من اینجوری بیشتر خوشم اومد. :) https://gist.github.com/pourya2374/87fb661a12c210bd604519c98b11f4ef خب همونطور که تو کد بالا می‌بینید لینک‌ها تو فایلی به اسم links.txt ذخیره می‌شن. تو مرحله بعدی کافیه با wget فایل‌ها رو دانلود کنیم. یکی از امکاناتی که wget داره اینه که می‌تونید بهش یه لیستی از لینک‌ها بدید تا براتون بقیه کارها رو انجام بده و این یعنی دقیقا چیزی که الآن نیاز داریم.wget -i links.txtخروجی:Resolving sv.blogmusic.ir (sv.blogmusic.ir)... 185.49.85.151Connecting to sv.blogmusic.ir (sv.blogmusic.ir)|185.49.85.151|:80... connected.HTTP request sent, awaiting response... 200 OKLength: 111917 (11M) [application/octet-stream]Saving to: ‘Mix-Ghadimi.mp3’Mix-Ghadimi.mp3   96%[===============&gt;   ]  11.19M  4.73MB/s    eta 1sحالا دیگه می‌تونیم بریم یکم استراحت کنیم تا فایل‌ها آماده بشه برای گوش دادن و ...امیدوارم مطالبی که با هم مرور کردیم براتون مفید بوده باشه. هدف از این پست‌ها اینه با دانشی که تو حوزه‌ی برنامه‌نویسی داریم یسری از مسئل روزانه‌مون رو باحال‌تر حلشون کنیم و ازشون لذت ببریم! :)حالا که تا اینجا اومدیم یذره هم در مورد خود عمل کرال کردن صحبت کنیم. این کار امروزه زیاد داره استفاده می‌شه که چند تا از ابزارهایی که دارن از همین مکانیزم استفاده می‌کنند رو معرفی می‌کنیم.همین سرچ گوگل خودمون که هر روز باهاش سر و کار داریم. تو متن سعی کردم کلیش رو توضیح بدم.ابزارهایی که قرار هست تغییرات رو دنبال کنند. مثلا فکر کنید که می‌خواید یه کالایی رو از دیجی‌کالا بخرید ولی قیمتش خیلی رفته بالا و شما امید دارید که بیاد پایین! می‌تونید یه کرالری بنویسید که هر ساعت قیمتش رو چک کنه و اگه اوضاع مساعد بود خبرتون کنه! یا مثلا یه الگوریتم برای خرید سهام دارید و می‌خواید هر موقع که یه الگوی مشخصی رو تو قیمت‌ها دیدید یه سهمی رو بخرید، اینجا هم خیلی می‌تونه کمکتون کنه.برای کارهای ماشین‌لرنینگ مهم‌ترین چیزی که بهش نیاز دارید داده هست. خیلی جاها با این ابزارها می‌تونید داده‌هاتون رو جمع کنید. مثلا فرض کنید میخواید ابزاری رو توسعه بدید که قیمت مسکن رو توی تهران با توجه به ویژگی‌های مورد نظرتون تخمین بزنه. کاری که میشه کرد اینه که با یه ابزار کرالر بیفتید به جون دیوار و داده‌های بخش مسکنش رو در بیارید و کار یادگیری ماشین رو باهاش شروع کنید.و ...اگر می‌خواید جدی‌تر از این مسئله دانلود آهنگ که با هم انجامش دادیم، کار کرال انجام بدید حتما فریم‌ورک scrapy رو چک کنید. گرفتن داده تو حجم بالا چالش‌های جالبی داره که بخش عمده‌ای از اون تو ‌scrapy حل شده.اگر پیشنهاد یا انتقادی داشتید خوشحال می‌شم نظر بدید. آدرس ایمیل من:pourya.2374@gmail.comتا پست بعدی، یا حق</description><category>پوریا ماندی‌صنم</category><author>پوریا ماندی‌صنم</author><pubDate>Thu, 31 Oct 2019 23:44:24 +0330</pubDate></item><item><title>استفاده از اینترنت شبانه ایرانسل با یکم گیک بازی!</title><link>https://virgool.ir/@pourya2374/استفاده-از-اینترنت-شبانه-ایرانسل-با-یکم-گیک-بازی-o8mujjqq2qy9</link><description>ماجرا از اینجا شروع شد که تو خونه پدری، یه کامپیوتر خیلی خسته قدیمی وجود داشت که بعد از اینکه لپ‌تاپ خریدن داشت گوشه خونه خاک می‌خورد و کسی ازش استفاده نمی‌کرد. منم که سرم درد می‌کنه برای ور رفتن با این چیزا، تصمیم گرفتم بیارمش خونه تا بعدا فکر کنم ببینم باهاش چیکارا می‌شه کرد.. عکس واقعی نیست :) صرفا خواستم قدیمی بودن رو برسونمیه مدتی که گذشت فرصت شد در موردش فکر کنم، دیدم چون قدرت پردازشی خاصی نداره، تقریبا هیچ‌ کار جدی‌‌ای نمیشه باهاش کرد. تنها چیزی که توجهم رو جلب کرد، هارد ۵۱۲ گیگابایتی بود که تا حد خوبی، خالی بود. بعد از اون هم نگاهم افتاد به این:مودم TD-lte ایرانسلاگر از TD-Lte استفاده کرده باشید، متوجه شدید که اپراتور محترم ایرانسل به هر نحوی هست می‌خواد یه اینترنت شبانه بکنه تو پاچتون تا نونی که می‌بره سر سفره زن و بچه حلال باشه و قیمت بسته‌هاش منطقی بشه. خب دیگه بقیه ماجرا قابل حدس هست. حالا نیاز هست که یه اسکریپت ساده بنویسیم. نتیجه اسکریپت هم باید این باشه: شب‌ها که ما می‌خوابیم، این سیستم بیدار باشه (بشه!) و تا جایی که می‌تونه دانلود کنه.در ادامه‌ی این پست قصد دارم نحوه کانفیگ کردن یک سیستم رو برای اینکار توضیح بدم. قبل از شروع این رو بگم که قرار نیست خیلی فنی باشه این پست و صرفا جنبه‌ی گیک‌بازی داره و می‌خوایم باهم یذره تفریح فنی کنیم :) علاوه بر این، راهی که انتخاب شده قطعا بهترین راه نیست و صرفا خواستم در خلال این کارا یذره چیز میز هم یاد بگیریم. (راه ساده استفاده از یک برنامه دانلود منیجر به همراه schedular هست)خب دیگه، بریم سراغ کار اصلی: اول از همه باید چیکار کنیم؟! به نظرم باید بریم یه چرخی تو سیستم بزنیم که با خیال راحت بتونیم همه چیز رو پاک کنیم و os جدید رو نصب کنیم. برای من اینطوری بود که کلی عکس قدیمی رو سیستم پیدا کردم! بین خودمون بمونه، خیلی‌هاش رو هم نباید می‌دیدم فکر کنم :) خلاصش اینکه یه بک‌آپ گرفتم از سیستم و تقدیم خانواده کردم که البته خودشون هم یادشون نبود که این فایل‌ها روی سیستم هست.بعد از این می‌ریم که یکی از distribution های لینوکس رو روش نصب کنیم. اگه نمی‌دونید لینوکس چیه، panic نکنید، چیز خاصی نیست! اگه دولپر هستید و باهاش آشنا نیستید توصیه می‌شه هرچه سریع‌تر برید دنبالش. من برای سیستم خودم از اوبونتو استفاده کردم، نسخه ۱۸.۱۰. اگر هم با نصبش آشنایی ندارید می‌تونید به اینجا مراجعه کنید (برای این نسخه خاصی که گفتم نیست، ولی کلیت ماجرا تفاوت چندانی نداره) https://tml-manager.ir/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%86%D8%B5%D8%A8-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D8%B9%D8%A7%D9%85%D9%84-ubuntu-14-04/ ۳. بعد از این مرحله باید یکاری کنیم که این سیستم سر ساعتی که ما می‌خوایم بیدار بشه! برای اینکار باید وارد تنظیمات ‌BIOS بشیم. اگه os عوض کرده باشید قبلا، برای تغییر اولویت بوت شدن سیستم، حتما یه سری بهش زدید. در واقع همون جایی هست که برای وارد شدن بهش، هر کلیدی دم دست هست رو کی‌بورد رو می‌زنیم تا واردش بشیم :)هرکلید که برای شوخی بود، ولی رو سیستم‌‌های مختلف، با فشردن کلید‌های متفاوتی می‌تونید واردش بشید:https://www.tomshardware.com/ سایت بعد از اینکه وارد شدید، دنبال تنظیمات power بگردید. معمولا اسمش هست power management setup. بعدش هم یجایی وجود داره به اسم resume time، اینجا همون‌جایی هست که میشه تنظیم کرد سیستم خسته ما چه ساعتی از خواب بیدار بشه.۴. حالا باید به این فکر کرد که خیلی هم بیدار نباشه! در واقع باید تو انتهای بازه، خاموش بشه که از حجم عادی مصرف نکنه. ساعتی که نت شبانه ایرانسل کار می‌کنه بین بازه‌ی ۲ تا ۷ صبح هست، پس در واقع، بعد از روشن شدن، حدود ۵ ساعت باید سیستم کار کنه و بعدش بره برای لالا.  برای این بخش هم راه حل‌های مختلفی وجود داره، که من از crontab استفاده کردم و کامند زیر رو تو کانفیگش قرار دادم.@reboot /bin/sleep 5h; /sbin/poweroffخط بالا داره می‌گه بعد هر بار روشن شدن، با یک تاخیر ۵ ساعته سیستم رو خاموش کن.۵. در مرحله آخر هم باید فایل‌ها رو تو زمانی که سیستم روشنه منتقل کنیم بهش. از بخت خوب، یکی دو تا از سرورهایی که دستم هست، ترافیکشون جز ترافیک داخلی محسوب می‌شه و همونطور که می‌دونید از نظر هزینه‌ای نصف قیمت هست، در نتیجه در طول روز، فایل‌هایی که می‌خوام بهشون رو سیستم خونه دسترسی داشته باشم رو روی سرور دانلود می‌کنم و شبانه باید سرور با سیستم خسته‌ی خونه sync بشه.برای این‌ کار از زبان اسکریپتی پایتون استفاده کردم، کد نهایی رو می‌تونید تو این repo ببینید: https://github.com/pourya2374/file_syncer کد تا حد خوبی خواناست و ساده، اینجا فقط سعی می‌کنم ایده‌های کلی که استفاده شده رو توضیح بدم:فایل configs.py: تو این فایل تنظیمات اصلی پروژه مثل آدرس فولدر دانلودها روی سرور، آدرس فولدر دانلود روی سیستم‌ خسته، ساعت‌هایی که اسکریپت می‌تونه کار کنه و ... قرار داده شده.فایل sample_secrets.py: این فایل بعد clone کردن پروژه باید به اسم secrets.py تغییر کنه، اطلاعات یه ایمیل رو می‌تونید توش قرار بدید تا وقتی کار اسکریپت تموم شد، بهتون ایمیل بزنه و خبر بده چیا دانلود شده و حجمشون چقدر بوده.فایل utils.py: توی این فایل functionality های اصلی قرار گرفته که تو کد اصلی ازشون استفاده شده. مثلا این توابع: چک کنه چیز جدیدی دانلود شده که بهتون خبر بده یا نه، لیست فایل‌ها و حجمشون رو در بیاره، انتقال فایل‌ها رو انجام بده (برای انتقال فایل هم از rsync استفاده شده) و ...فایل main.py: این هم فایل اصلی پروژه است که تو cron قرار می‌گیره و هر ۵ دقیقه یک‌بار ران می‌شه.تقریبا یکی دو ماهی هست که دارم با این روش فیلم و آموزش و برنامه و ... دانلود می‌کنم و حقیقتا وقتی ایمیل اتمام دانلود میاد خیلی حس خوبی به آدم منتقل می‌کنه :) امیدوارم براتون مفید بوده باشه و کلیت قضیه منتقل شده باشه. همونطور که اول متن هم گفتم، خیلی راحت میشه با یک برنامه دانلود منیجر همه این داستان‌ها رو انجام داد، تو این متن هدف این بوده با چیزایی که بلدیم یه چیزی بسازیم که از استفادش خوشحال بشیم.در آخر ممنون از وقتی که گذاشتید برای مطالعه متن. این اولین پستی بوده که گذاشتم و امیدوارم بتونم ادامه بدم. ممنون می‌شم نظراتتون رو برام بنویسید تا مطالب بعدی بهتر باشند.موفق باشید :)</description><category>پوریا ماندی‌صنم</category><author>پوریا ماندی‌صنم</author><pubDate>Wed, 28 Aug 2019 00:56:55 +0430</pubDate></item></channel></rss>