در حال بارگزاری

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

اوایل تنها از i3 به همراه i3bar و dmenu استفاده می‌کردم اما بعدا زوبونتو را نصب کرده و مدیر پنجره پیشفرضش که xfwm باشد را با i3 جایگزین کردم. و به این ترتیب دردسر پیکره‌بندی هزار و یک چیز دیگر را نداشتم و در عین حال از i3 استفاده می‌کردم.

محیط کار فعلی فاروق به در حال نوشتن پست وبلاگ

فاروق کریمی‌زاده02-09-1400 تخصصی

خب فرض کنید می‌خواهید یک فایل حجیم(مثلا ۲.۶ گیگابایت مثل من)‌ را منتقل کنید. مثلا در بستر اینترنت یا اینکه میخواهید از طریق چند حافظه ذخیره‌سازی مختلف فایل را جابجا کنید. برای من با اینترنت ADSL حداکثر سرعت آپلود ۵۰ کیلوبایت بر ثانیه هست و علاوه بر‌آن اگر اینترنت ناگهان قطع و وصل شود مجبورم از اول شروع کنم!

راه حلی که برای این موضوع پیدا کردم قطعه قطعه کردن فایل حجیم با split و آپلود قطعات فایل به یک سرور واسط هست. و از سرور واسط به سرور اصلی آپلود می‌کنم. با اینکار میتوانم از چند دستگاه و با چند ارتباط اینترنت قطعات را آپلود کنم و به نوعی از پهنای‌باند همه کانکشن‌های اینترنت همزمان استفاده کنم تا فایل حجیمی که دارم سریع‌تر به دست سرور اصلی برسد.

help(int)

کلاس int در پایتون که بعضا آن را با تابع اشتباه می‌گیرند،برای تبدیل یک متغیر با نوعی جز نوع عدد صحیح به عدد صحیح کاربرد دارد. شما می‌توانید با استفاده از int در پایتون یک رشته(string) یا یک عدد اعشاری(float) را به عدد صحیح تبدیل کنید.

تقریبا در تمام زبان‌های برنامه‌نویسی از نسل سی، چیزی به اسم آرایه وجود دارد.در زبان سی یک آرایه را می‌توان یک فهرست از متغیر‌های هم‌نوع در نظر گرفت که خانه‌های مجاور حافظه به آن تخصیص داده شده هست. به عنوان یک نمونه، در زبان سی یک آرایه از ۳ عدد صحیح تعریف کرده‌ام:

int my_cool_array[3] = {1, 2, 3};

در پایتون چیزی به اسم آرایه نداریم. خود زبان به صورت ذاتی(منظورم builtin یا توکار هست) چند نوع مخزن دارد که این‌جا من در مورد دو مورد از آن‌ها برایتان می‌نویسم.

بر خلاف آرایه‌ها در سی که تنها می‌توانند داده‌هایی از یک نوع را در خود نگه دارند، لیست، توپل(تاپل)، دیکشنری(جدول هش) و مجموعه در پایتون هر کدام می‌توانند هم‌زمان داده‌هایی با نوع‌هایی مختلف را درون خود داشته باشند.

فاروق کریمی‌زاده15-08-1400

بنده دیروز در اتاق ماتریکس هش‌بنگ یک پرسش مطرح کردم:‌ «عقیده شما در مورد پایتون چیست؟» یکی گفت زبان «چندش‌آور» و «احمقانه‌ای» است اما دیگری جواب بهتری داد:

آسان برای یادگیری، عالی برای درست کردن پیش‌نمونه یا prototype و یادگیری تئوری مهندسی کامپیوتر، عالی برای اسکریپت‌هایی که میخواهی قابل پیش‌بینی باشند. [اما] افتضاح برای سرعت یا مقیاس‌پذیری.

Lance R. Vick

بله! پایتون واقعا برای یادگیری آسان است و می‌توانید با آن سریع و طی مثلا چند ساعت(یا بیشتر یا کمتر که البته به اندازه و نوع پروژه بستگی دارد) یک پیش‌نمونه بسازید. علاوه بر این‌ها شما را با چیزی مثل مدیریت دستی حافظه درگیر نمی‌کند. در نتیجه کاندیدای خوبی برای یادگیری مهندسی کامپیوتر و شروع برنامه‌نویسی هست. اما خب همه خوبی‌ها در این زبان برنامه‌نویسی جمع نشده‌اند. پایتون با پیاده‌سازی پیش‌فرضش،که تقریبا همه‌جا استفاده می‌شود، «کند» است(می‌توانید مطلب پیاده‌سازی الگوریتم وارشال در پایتون و راست را ببینید)

لنس ادامه داد:

اگر نیاز داری چیزی را یک بار در ثانیه روی یک پردازنده تک هسته‌ای اجرا کنی، پایتون برای هک کردن(در اینجا نه به معنی نفوذ و خرابکاری –فاروق) چیزی که کار را انجام دهد،‌ آسان خواهد بود. اگر به سرعت و امنیت نیاز داری، بهتر است به سراغ راست(Rust) یا گو(Go) بروی. اما آن دو سرمایه‌گذاری اولیه بیش‌تری را برای برنامه‌نویسی طلب می‌کنند. من ترجیح می‌دهم برای چیزی که تنها یک‌بار قرار است انجام شود و سرعت مهم نیست به سراغ پایتون بروم تا طی مدت زمان کوتاهی، مثلا چند ساعت آینده، شروع به کار کند. اما اگر مقیاس‌پذیری می‌خواهم یا قرار است با بار‌های سنگین شبکه دست و پنجه نرم کنم و غیره، در آن صورت به سراغ گو می‌روم.

Lance R. Vick

لنس در اینجا به ضعف امنیتی پایتون در برنامه‌های چند ریسمانی(multi thread) اشاره می‌کند(به نظر من). البته خود در مورد آن چیزی نمی‌دانم و لیکن در موردش شنیده‌ام. سپس می‌گوید به سرمایه‌گذاری اولیه بیشتری نیاز داریم تا گو یا راست یا یاد بگیریم که جز این نیست مخصوصا که راست(و احتمالا گو) مقداری تفکر جدید می‌طلبد. و این تفکر جدید باید ساخته شود که زمان و انرژی می‌برد.

نهایتا به عنوان یک خلاصه، اگر برای استفاده کوتاه مدت زبانی نیاز دارید یا برای شروع برنامه‌نویسی، پایتون گزینه بسیار خوبیست اما برای یک کار طولانی مدت بهتر است به سراغ گو یا راست بروید.

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

هشدار! کد راست با اینکه به درستی کار می‌کند اما ممکن است به روش خود راست نوشته نشده باشد و در آن عادت‌های خوب برنامه‌نویسی رعایت نشده باشد!

// Code by Rust beginner, Farooq Karimi Zadeh
// Under CC0 1.0
// Warning! Code might not be idiomatic

fn main() {
    let mut bin_matrix = [
        [0, 1, 0, 0],
        [1, 0, 1, 0],
        [0, 0, 0, 1],
        [0, 0, 0, 0]
    ];
    const N:u32 = 300_000;
    for _dummy in 0..N { 
        for k in 0..bin_matrix.len() {
            let the_clone = bin_matrix;
            for (i, row) in bin_matrix.iter_mut().enumerate() {
                for (j, value) in row.iter_mut().enumerate() {
                    if *value == 0 {
                        *value = the_clone[i][k] & the_clone[k][j];
                    }
                }
            }
        }
    }
    println!("{:?}", bin_matrix);
}

پیوند کد راست در گیت‌هاب گیست(به همراه زمان اجرا روی لپ‌تاپ بنده)

"""
Warshall algorithm
This calculates transitive closure for a given binary matrix
Author: Farooq Karimi Zadeh
Code is under CC0 1.0
"""

from pprint import pprint

def pretty_print_matrix(matrix):
    pprint(matrix, width=len(matrix[0]) * 3 + 2)


n = int(3e5)  # calculate n times
bin_matrix = [[0, 1, 0, 0], [1, 0, 1, 0], [0, 0, 0, 1], [0, 0, 0, 0]]
for dummy in range(n):
    for k, _ in enumerate(bin_matrix):
        for i, row in enumerate(bin_matrix):
            for j, value in enumerate(row):
                if not value:
                    bin_matrix[i][j] = bin_matrix[i][k] and bin_matrix[k][j]

if n == 1:
    pretty_print_matrix(bin_matrix)
else:
    pass  # then we are benchmarking

پیوند کد پایتون در گیت‌هاب گیست(به همراه زمان اجرا روی لپ‌تاپ بنده)

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

کاملا اتفاقی متوجه شدم که ویندوز 10 به نام هایی مانند aux گیر میده و این گیر ربطی به پسوند فایل هم نداره؛ یعنی چه فایل aux.txt باشه و چه aux.png شما مجاز به استفاده از چنین نامی در ویندوز نیستید! کنجکاو شدم ببینم جریان چیه؟ پس تو اینترنت گشتم و جواب رو پیدا کردم و فهمیدم این مسئله خیلی قدیمی و تاریخی هست. به نوعی میراثی هست که دست به دست شده و الان به ویندوز ۱۰ رسیده!

مایکروسافت رسما اعلام کرده که نام های زیر در ویندوز ممنوع هستند:

بهنام سیم‌جو20-07-1400 عمومی

گیت چیست؟

گیت یا git یک برنامه آزاد و متن‌باز برای مدیریت پروژه‌های برنامه‌نویسی هست که بسیار سریع و موثر می تواند به برنامه‌نویسان برای مدیریت پروژه‌های کوچک تا بزرگ کمک کند. یادگیری و استفاده از گیت بسیار ساده است و امکانات بسیار قابل توجهی در اختیار برنامه‌نویسان قرار می‌دهد.

از توانایی‌های این نرم افزار می‌توان به نمونه‌های زیر اشاره کرد:

  • به شما امکان مدیریت پروژه‌های چند نفره را می‌دهد
  • به سادگی می توان تغییرات را ثبت، دنبال، و بازگردانی کرد
  • می تواند به یک سرور وصل شود تا علاوه بر داشتن یک بکاپ از کل پروژه آن را با دیگران به اشتراک بگذارید
  • امکان استفاده از چند شاخه، ادغام و مدیریت شاخه‌ها
  • و …

بهنام سیم‌جو19-07-1400 تخصصی

استان از جایی شروع شد که در مقاله چطور کاری کنیم لیسپ سریع‌تر از سی اجرا شود؟ خواندم که کامن لیسپ بنا به خواست برنامه‌نویس می‌تواند «زبانی با تعیین نوع پویا(dynamic) ویا ایستا(static) باشد» که کنجکاوی بنده برانگیخته شد(بخوانید فضولی‌ام گل کرد!) و در کانال #clschool روی شبکه‌ی آی‌آر‌سی فری‌نود پرسیدم که در ادامه نتیجه بحث خدمتتون عرض خواهد شد. توجه کنید که ممکن است جدیدا این کانال مانند بسیاری از دیگر کانال‌ها به شبکه لیبراچت منتقل شده باشد.