وبلاگ محسن

فقط برای تفریح :-)

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

Just For Fun کتابیِ که سالها پیش لینوس توروالدز اونو نوشت تا گیک های دنیا رو از جزئیات تولد و توسعه سیستم عامل و فرهنگ محبوبشون با خبر کنه .

باید ببخشید؛ چون هنوز خودم کتابو نخوندم بیشتر از این نمی‌تونم توضیح بدم.

 

اما می‌تونم بگم اگر گیک هستید؛ اگر هکر هستید؛ اگر به دنیای گنولینوکس تعلق دارید؛ اگر این سیستم عامل و فرهنگش جزئی از وجودتونِ؛ خوندنش یه جورایی براتون واجبِ. چون علاوه بر اینکه کلی به اطلاعاتمون اضافه می کنه، می‌تونه یه محرک قوی و وسیله ایی برای انگیزه دادن بهمون باشه.

 

حالا اگر مثل من مشتاق هر چه زودتر خوندن کتاب شدید، خوشحال باشید. چون با تلاش جادی Just For Fun ترجمه شده و می‌تونیم خیلی راحت تر با کتاب ارتباط برقرار کنیم.

 

LinuxStory.ir

چطور از عمر سیستم عامل با خبر بشیم؟

| جمعه, ۲۴ مرداد ۱۳۹۳، ۰۸:۰۴ ق.ظ

خیلی راحت. اگر فدورایی هستید کافیِ دستور زیر رو اجرا کنید:

 

$ ls -l /var/log/anaconda/anaconda.log

چیزی که واسم برگشت، نشونم داد که فدورا 20 رو دقیقا یه روز بعد از فاینال رلیز نصب کردم؛ یعنی دویست و سی و نُه روز پیش.

 

 

 

اگر هم یوزر اوبونتو هستید آموزش دیجیاتو رو بخونید.

تنظیم نور مانیتور در لینوکس

| جمعه, ۳ مرداد ۱۳۹۳، ۰۱:۰۲ ق.ظ

بُریده ی زیر از وبلاگ سالار مقدم یه تیپِ (tip) خوب بهمون یاد میده:

 

اندروید آثوریتی می گه یه روز یه دزد به یه خانوم اهل هیوستن آمریکا گفت لطفا گوشیِ سامسونگ گلکسی تون رو بدین به من و برای اینکه مطمئن بشه اون خانوم اینکار رو می‌کنه یه اسلحه به طرف سرش نشونه می گیره. اما جوابی که می‌شنوه تنها چیزیِ که انتظار شو نداریم:

 

 

بعد خانوم آماده تیر خوردن میشه و تیر هم می‌خوره!‌ خوشبختانه دوستش که خونش اون نزدیکیا بوده میاد و کشون کشون دوستشو می‌بره خونش؛ اما داستان همین جا تموم نمیشه و دزده می‌خواد هر جوری شده وارد خونه بشه اما با تمام قدرتی که داشتن درو فشار دادن و بعد از اینکه بسته شد هر چی قفل پیدا کردن به در زدن. آقا دزده هم که دیده نمی‌تونه بره تو یواش یواش صحنه رو ترک می‌کنه.

اگر در مورد حال اون خانوم کنجکاوید خوشبختانه گلوله آسیب جدی بهش نزده و فقط باعث خراشیدن سرش شده.

 

نتیجه اخلاقی:   

درسته اسمارتفون هامون خیلی دوست داشتنین، خیلی خوبن، خیلی سرگرم کنندن، از خیلی آدما بهترن اما چیزای خیلی کمی تو دنیا هست که ارزش جون ما رو داره و مطمئنا یه گوشی پلاستیکی نهایتا دو میلیونی جزو اونا نیستsmiley

 

ضمنا یکی از خواننده ها هم یه کامنت خیلی باحال داده:

 

یک octet دقیقا 8 بیت است!

| سه شنبه, ۲۴ تیر ۱۳۹۳، ۱۱:۰۳ ب.ظ

تو پست قبلی اشاره کردم که تابع ()getheader. سایز فایل رو به یه واحد کمتر شناخته شده به اسم octet بر میگردونه. اگر دوست دارید بدونید اوکتت دقیقا چیه، با من همراه باشید.


چیزی که کتابها و کلاس ها تو مغز ما فرو کردن اینه که بیت 8 = بایت 1؛ ولی خب حقیقت چیز دیگست. واقعیت اینه که یک بایت می تونه ۸ بیت باشه و می تونه نباشه. مقدار بایت همیشه در طول تاریخ کامپیوتر بین 7 تا 36 بیت در رفت و آمد بوده و اگر امروز معتقدیم که قطعا یک بایت هشت بیتِ به این خاطره که سازنده های معماری های کامپیوتری تصمیم گرفتن که اینطور باشه. اما octet بر خلاف بایت همیشه هشت بیتِ که نشون دهنده استاندارد بودن این واحد از حافظه ست.


از octet وقتی استفاده میشه که بایت باعث ابهام بشه، مثلا در IPv4. استفاده از octet در IPv4 باعث شده که ما هیچ وقت انتظار عددی بالاتر از 255 نداشته باشیم و همین به تنهایی دنیا رو خیلی راحتتر کرده.

 

 


ضمنا جالبه که بدونید تو فرانسه،‌ کانادا و رومانیا از octet به جای بایت برای کارای روزمره استفاده می کنن.

خب اینم از  octet. جام جهانی هم با همه داد و بیدادی که تو دنیا راه انداخته بود تموم شد و رفت تا چهار سال دیگه. و خدا می دونه تو این مدت چقدر تغییر می کنیم. امیدوارم چهار سال آینده بهترین سال های عمرمون تا اون موقع باشهwink

دیروز بود که به طور کاملا اتفاقی به یه مقاله مفید در انجمن فارسی اوبونتو راجع به دانلود منیجر aria2c برخوردم که طرز استفاده بهینه ش رو آموزش میداد.

 

من از همون ماه های اول ورودم به دنیای گنولینوکس با aria2c آشنا بودم اما هیچ وقت کار باهاش رو یاد نگرفتم(البته بالاخره دیروز یاد گرفتم yes ) و دیشب وقتی که یه فایل نهصد مگی رو زود تر از انتظار برام دانلود کردم به قدرتش پی بردم و راستشو بخواین الآن خیلی خوشحالم. چون یکی دیگه از معدود وابستگیای من به ویندوز کم شد.

 

اگر به لینک بالا مراجعه کرده باشین و آموزش رو خونده باشین و اگر مثل من به تنبلی مفرط دچار باشین حتما درک کردید که تنظیمش یه کوچولو زمانبره. برای همین باید اسکریپتی بنویسیم که کار رو واسمون آسون کنه. اسکریپتی که فقط url بهش بدیم و فایل تحویل بگیریم.

 

 

مشکلترین قسمت ماجرا اونجایی که ما باید حجم فایلی رو که می خوایم دانلود کنیم بدست بیاریم و باور کنید اون لحظه کوچکترین ایده برای حلش نداشتم. اما میدونستم که کتابخونه پایتون ماژولی داره به اسم urllib.request که یه ربطی به مسئله ما داره. با رفتن به کانال آی آر سی python# و چند بار پرسش و پاسخ متوجه شدم که هر فایل موجود در اینترنت خاصیتی به نام header داره که خصوصیات فایل رو که شامل سایز فایل هم میشه اونجا دخیره می کنن و با یه متد ساده از کلاس urllib.request میشه بهش دسترسی پیدا کرد.

 

با این اطلاعات اسکریپت زیر رو نوشتم:

#!/usr/bin/python3
import urllib.request
import os
import sys
def get(url):
    file_url = urllib.request.urlopen(url)
    size = int(file_url.getheader("Content-Length"))
    conn = (size / 1000000) / 16
    if conn < 1:
        conn = 1
    os.system('aria2c -s16 -x16 -k' + str(round(conn)) + 'M \"' + url + '\"')
if len(sys.argv) > 1:
    get(url=sys.argv[1])
else:
    print('Usage: download FileUrl')
در مورد خط شیشم باید بگم برای کار با url ها در پایتون باید اول به وسیله این متد بازش کنید.
متغییر conn هم سایز فایل رو که مقدارش به octet! هست رو  به مگ تبدیل می کنه و بقیه چیزا هم که واضحه :)
(اگر نمی دونید octet چیه غصه نخورید چون منم تازه فهمیدم همچین واحد حافظه ایی هست!)

اگر فکر می‌کنید این اسکریپت به دردتون می‌خوره، اونو تو یه فایل متنی ذخیره کنید و  به یکی از دایرکتوری هایی که خروجی زیر تولید می‌کنه منتقل کنید:

 

echo $PATH

توصیه میشه اسکریپت هایی که خودتون می‌نویسید رو به local/bin./~ منتقل کنید.

پ.ن: می‌دونید که؛ ~ یا همون تیلدا به معنی home/ 

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

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



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

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

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

| چهارشنبه, ۲۸ خرداد ۱۳۹۳، ۱۰:۲۰ ق.ظ
تقریبا دوازده سال پیش من اولین اکانت ایمیلمو تو سایت یاهو باز کردم و بعد از یه مدت استفاده رهاش کردم. حالا بعد از این همه سال به یه اکانت یاهو احنیاج دارم و وقتی به اینباکسم نگاه می‌کنم، می‌بینم که پر شده از ایمیل های مزخرف و تبلیغاتی. اونم نه یکی دوتا،‌ یازده هزار!
 
 
مشخصه که با این اینباکس شلوغ نمی تونم کار کنم. از طرفی دوست ندارم یه اکانت جدید باز کنم پس تنها راهی که باقی میمونه پاک کردنِ. در پاک کردن دستی، سرویس یاهو اجازه حذف فقط پنجاه ایمیل رو میده که با یه حساب کوچیک معلوم میشه باید بیش از ۴۴۰ کلیک موس کنم تا همه ی ایمیل ها پاک بشن و امکان نداره من همچین کار احمقانه ی انجام بدم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

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

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

خانوم روبین برگرون، راهبر قبلی پروژه فدورا، در تاریخ ۵ ژوئن ۲۰۱۴ جای خودش رو به متیو میلر داد.
یه خبر بزرگ برای جامعه فدورا!
روبین در سال ۲۰۰۹ به عنوان راهبر پروژه فدورا منصوب شد و امروز بعد از پنج سال زحمتی که برای این سیستم عامل محبوب و مقتدر کشید از این سمت کناره گرفت.
متیو میلر جوان که از همون روز های اول شروع پروژه، در کنار فدورا بود و این اواخر مسئول بخش کلاود بود، عهده دار این مهم شد.
برای روبین، متیو و تمام جامعه بزرگ گنولینوکس  آرزوی موفقیت می کنم.