وبلاگ محسن

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

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

 

 

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

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

 

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

درسته اسمارتفون هامون خیلی دوست داشتنین، خیلی خوبن، خیلی سرگرم کنندن، از خیلی آدما بهترن اما چیزای خیلی کمی تو دنیا هست که ارزش جون ما رو داره و مطمئنا یه گوشی پلاستیکی نهایتا دو میلیونی جزو اونا نیست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/