وبلاگ محسن

۵ مطلب در خرداد ۱۳۹۳ ثبت شده است

ایران حیرت انگیز بود

| شنبه, ۳۱ خرداد ۱۳۹۳، ۱۱:۳۵ ب.ظ



یک کلام: تیم گمنام ایران در برابر خدایان فوتبال جهان از خوب هم خوبتر بود.

و امشب این تیم باعث افتخار شد.

یازده هزار ایمیل را با نُه خط کد پایتون پاک کنید!

| چهارشنبه, ۲۸ خرداد ۱۳۹۳، ۱۰:۲۰ ق.ظ
تقریبا دوازده سال پیش من اولین اکانت ایمیلمو تو سایت یاهو باز کردم و بعد از یه مدت استفاده رهاش کردم. حالا بعد از این همه سال به یه اکانت یاهو احنیاج دارم و وقتی به اینباکسم نگاه می‌کنم، می‌بینم که پر شده از ایمیل های مزخرف و تبلیغاتی. اونم نه یکی دوتا،‌ یازده هزار!
 
 
مشخصه که با این اینباکس شلوغ نمی تونم کار کنم. از طرفی دوست ندارم یه اکانت جدید باز کنم پس تنها راهی که باقی میمونه پاک کردنِ. در پاک کردن دستی، سرویس یاهو اجازه حذف فقط پنجاه ایمیل رو میده که با یه حساب کوچیک معلوم میشه باید بیش از ۴۴۰ کلیک موس کنم تا همه ی ایمیل ها پاک بشن و امکان نداره من همچین کار احمقانه ی انجام بدمangry
 
و خدا رو شکر که ما سیستم عاملی به نام گنو لینوکس داریم که پایتون out of the box روش نصبه و تمام این هرزنامه ها رو برامون پاک می کنه. اونم با نُه خط:
 
#!/usr/bin/python3 
import imaplib
connection = imaplib.IMAP4_SSL('imap.mail.yahoo.com')
connection.login('mohsen_rashidi2002@yahoo.com', 'password')
connection.select()
trash, emails = connection.search(None, 'all')
for i in emails[0].split():
    connection.store(i, '+FLAGS', '\\Deleted')
connection.expunge()

 

همون طور که می‌بینید، اسکریپت خیلی ساده ست و چیزی بیشتر از استفاده از چند تا متد ماژول imaplib نیست.

در خط سوم یه شیء به اسم connection از کلاس imaplib.IMAP4 درست کردیم و آدرس imap سرور یاهو رو بهش دادیم. در خط چهارم مشخصات اکانت رو برای لاگین وارد کردیم.

 

در توضیح پنجمین خط باید بگم هر اکانت ایمیل از تعدادی دایرکتوری تشکیل شده. مثل دایرکتوری inbox, sent, draft و ... . و کد ما در آن واحد میتونه رو یکی از اینا اجرا بشه. پس حالا که می خوایم با دایرکتوری اینباکس کار کنیم باید مسیرمون رو بهش تغییر بدیم و متد select همین کار رو انجام میده و اگر می‌بینید که بهش آرگومان ندادم به این خاطره که پارامتر پیشفرضش مقدار inbox رو داره.

 

تو خط بعدی دو تا متغیر به اسم trash و email می بینیم که به متد search نسبت داده شدن. متد سرچ کارش پیدا کردن ایمیل های موجود بر اساس الگوی داده شده ست که ما اینجا الگو رو None دادیم و آرگومان دوم مشخص می کنه که چه تعداد ایمیل رو بگرده که ما همه اونها رو خواستیم. مقداری که این متد بر می گردونه شامل یه لیست با دو عنصره که عنصر اول برابر رشته ok و عنصر دوم شماره و یا در اصل کد مربوط به هر ایمیل موجودِ. با استفاده از یه متغیر اضافی به اسم trash ما رشته ok رو از لیست جدا می کنیم و ادامه میدیم.

 

خط هفتم هم یه حلقه for برای پیمایش شماره ایمیل هاست که هر بار i رو به یکی از اونها نسبت میده. اما داخل حلقه از متد store استفاده کردم که کارش نشانه گذاری (flag) روی ایمیل هاست. و همون طور که می بینید نشانه delete رو روی تمام ایمیل ها قرار میده.

 

و خط آخر می گه همشون رو برای همیشه پاک کنlaugh

 

 

اجرای این اسکریپت حدود یک ساعت و نیم زمان برد که من به جای خیره شدن به مانیتور و ۴۴۰ بار کلیک روی چکباس و دکمه دیلیت یه فیلم خوب دیدم;-)

 

پ.ن: مستندات ماژول imaplib

Hello World در زبون های مختلف

| شنبه, ۲۴ خرداد ۱۳۹۳، ۰۹:۰۶ ب.ظ

 

ضمنا اگر فکر می‌کنید با تعداد زیادی از زبون های برنامه  سازی آشنایی دارید لازمه یه سر به این سایت بزنیدwink

تغییر راهبر پروژه فدورا

| دوشنبه, ۱۹ خرداد ۱۳۹۳، ۱۱:۴۷ ق.ظ

خانوم روبین برگرون، راهبر قبلی پروژه فدورا، در تاریخ ۵ ژوئن ۲۰۱۴ جای خودش رو به متیو میلر داد.
یه خبر بزرگ برای جامعه فدورا!
روبین در سال ۲۰۰۹ به عنوان راهبر پروژه فدورا منصوب شد و امروز بعد از پنج سال زحمتی که برای این سیستم عامل محبوب و مقتدر کشید از این سمت کناره گرفت.
متیو میلر جوان که از همون روز های اول شروع پروژه، در کنار فدورا بود و این اواخر مسئول بخش کلاود بود، عهده دار این مهم شد.
برای روبین، متیو و تمام جامعه بزرگ گنولینوکس  آرزوی موفقیت می کنم.
دیروز به ابزاری احتیاج داشتم که کل سیستم عامل رو برام بگرده و فایل های jpg رو تو یه دایرکتوری کپی کنه.
راستش برنامه خط فرمانی به خصوصی براش سراغ نداشتم، البته اگر یکم می گشتم حتما پیدا می کردم اما تصمیم گرفتم وقتی رو که برای پیدا کردن می خوام بذارم برای ساختن صرف کنم که نتیجش شد اسکریپت زیر:
#!/usr/bin/python3
import os, sys


def gather(src=None, dis=None, file_type=None):
    if not os.path.exists(dis):
        os.mkdir(dis)


    for i in os.popen('find ' + str(src) + ' -type f | grep '+ str(file_type) + '$'):
        os.system('cp  \"' + i.strip() + '\" ' + str(dis))


if len(sys.argv) > 1:
	gather(src=sys.argv[1], dis=sys.argv[2], file_type=sys.argv[3])
else:
    print('Usage: gather sourcepath destinationpath filetype')
    exit()


اسم اسکریپت رو gather می ذارم و با دستور chmod +x gather اگزکیوتیبلش میکنم و به دایرکتوری usr/bin/ منتقلش می کنم و از این به بعد هر وقت همچین چیزی خواستم فقط از ترمینال صداش می کنم.