۶۳ مطلب با کلمه‌ی کلیدی «آموزش» ثبت شده است

الگوریتم وارشال برای بدست آوردن بستار متعدی در زبان راست و پایتون

برای شخص بنده با خوندن کد پایتون خیلی راحت‌تر میتونم الگوریتم را بفهمم.اینجا به ترتیب کد راست و پایتون الگوریتم وارشال برای بدست آوردن بستار متعدی یک ماتریس باینری رابطه به همراه لینک کد در گیت‌هاب گیست قرار داده شده.ضمن اینکه زمان اجرا شدن این کد‌ها برای راست و پایتون در گیست مورد نظر به صورت کامنت قرار داده شده است.توجه کنید که در هر دو زبان با حلقه 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

لینک کد پایتون در گیست

مجوز مطالب و محتوا ۲۴ ارديبهشت ۰۰ ، ۱۴:۲۸ ۰ نظر موافقین ۱ مخالفین ۰
فاروق کریمی زاده

آموزش مقدماتی git

گیت چیست؟

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

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

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

من خودم به شخص قبلا فکر می کردم که گیت فقط برای پروژه های گروهی مناسب هست و زمانی از گیت و سایت هایی مانند گیتهاب و notabug استفاده کردم که برای اولین بار با فاروق کریمی زاده پروژه مشترک داشتیم؛ و از آن جا که شیوه یادگیری من و فاروق شبیه به پریدن وسط چهارمتری برای یادگیری شنا هست اول پروژه را آغاز و بعد به فکر یادگیری گیت افتادیم! برای همین گاها (دو سه باری) اشتباهاتی رخ می داد که برای جبران اون مجبور بودیم ساعت ها تو سایت های مختلف روش های مختلف رو امتحان کنیم و با پیغام خطا های مختلف روبرو بشیم! ولی به هر حال تونستیم تجربیات خوبی به دست بیاریم.

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

ادامه مطلب...
مجوز مطالب و محتوا ۰۱ ارديبهشت ۰۰ ، ۲۲:۲۰ ۰ نظر موافقین ۳ مخالفین ۰
BSimjoo

کامن لیسپ: یک زبان با تعیین نوع پویا یا ایستا؟

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

ادامه مطلب...
مجوز مطالب و محتوا ۱۴ دی ۹۹ ، ۲۳:۳۴ ۰ نظر موافقین ۱ مخالفین ۰
فاروق کریمی زاده

سیستم‌عامل کای‌او‌اس(KaiOS) و توسعه نرم‌افزار و هک آن

لوگوی کای‌او‌اس

اول از همه خدمت دوستانی که تا به الآن از کلمه «هک» در عنوان مطلب اشتباه برداشت کردند عرض کنم که معنی این کلمه در اینجا با معنی رایجش در عصر ما فرق میکنه.اینجا منظور از هک کردن پیدا کردن نقاط پنهان و فضولی و کنجکاوی و بهبود نرم‌افزار هست و نه نفوذ بهش و بعدش هم نابود کردنش!

داستان از کجا شروع شد؟

فاروق کلاس ۱۲ام دبیرستان هست و البته پشت کنکور و گوشیش یک عدد نوکیا ۱۱۲(از اون دکمه‌ای های جاوا) بود و باید یک تلفن همراه جدید تهیه می‌کرد. از اونجا که زیاد اهل شبکه‌های اجتماعی نبودم و نیستم و حتی مخالفشون هم هستم کمابیش و احساس نیاز به گوشی‌های «هوشمند» لمسی اندرویدی نمیکردم زیاد، اینطور نقشه‌ام رو ریختم: یک عدد کتاب‌خوان اندرویدی که باهاش بتونم مطالعه کنم و البته یکسری کار های دیگه و یک عدد گوشی که نیاز های پیامک و تماس و البته تامین اینترنت برای کتاب‌خوان رو برطرف کنه.

کتاب‌خوانی که نهایتا گرفتم Onyx Boox Poke Pro بود با مشخصات زیر:

  • ۱۶ گیگابایت حافظه داخلی
  • ۲ گیگابایت رم داره
  • پردازنده اون ۴ هسته‌ای با فرکانس ۱.۶ گیگاهرتز
  • سیستم‌عاملش اندروید ۶
  • وای‌فای
  • بلوتوث
  • چراغ مطالعه گرم و سرد قابل تنظیم که البته میتونه خاموش هم باشه کلا
  • صفحه لمسی خازنی ۶ اینچ

و علاوه بر این سخت‌افزار بسیار خوب(مخصوصا برای کتاب‌خوان) نرم‌افزار خوبی هم داره:

جدای از اینکه اندرویدش «خام» نیست و برای صفحه نمایش جوهر الکترونیکی،طراحی و بهینه‌سازی شده،نرم‌افزارش هم برای مطالعه بسیار بسیار خوب هست.ساده‌ترین امکانی که داره حذف خودکار حاشیه‌ها هست!

بگذریم چون دارم از موضوع اصلی خارج میشم.اون زمان بعد از یک مقدار جستجو،گوشی موزی(Nokia 8110 4G) رو پیدا کردم که با سیستم‌عامل کای‌او‌اس اون امکاناتی که من نیاز داشتم رو داشت.اگر بخوام دقیق‌تر از امکاناتش صحبت کنم،میتونم اینطور لیست کنم:

  • ۵۱۲ مگابایت رم
  • ۴ گیگابایت حافظه داخلی که البته میتونید با حافظه جانبی(microSD) افزایشش هم بدید
  • پردازنده ۲ هسته‌ای اسنپ‌دراگون
  • سیستم‌عامل کای‌او‌اس(KaiOS)
  • یک عدد صفحه ۲.۴ اینچی خیلی معمولی
  • بدنه‌انحنادار
  • اینترنت 4G
  • اشتراک اینترنت از طریق وای‌فای(هات‌اسپات) و کابل USB
  • دوربین ۲ مگاپیکسلی خیلی معمولی به همراه فلش
  • یک عدد کی‌پد بسیار مزخرف. شنیدم کی‌پد نوکیا فلیپ ۲۷۲۰ این مشکل رو نداره.
  • A-GPS
  • یک کشو که باز و بسته میشه و باهاش میتونید یکسری کار‌ها رو انجام بدید مثلا جواب دادن یا پایان تماس

از اونجا که گوشی موزی بود پس باید رنگش هم زرد می‌بود!در نتیجه گشتم تا رنگ زردش رو پیدا کردم!و البته دو سیم‌کارته هم میخواستم که کار رو برام یک مقدار سختتر می‌کرد اما بلاخره گیرش اوردم!

ادامه مطلب...
مجوز مطالب و محتوا ۲۱ آبان ۹۹ ، ۲۱:۳۰ ۱ نظر موافقین ۳ مخالفین ۰
فاروق کریمی زاده

نظرات (۱)

علیرضا آهنی

با پایتون یک ربات سخنگو بنویسید!

شاید در مورد ماژول chatterbot چیزی خوانده باشید یا شنیده باشید.این ماژول برای شما یک چت‌بات که میتواند یاد بگیرد را فراهم می‌سازد و از الگوریتم‌های یادگیری ماشینی استفاده میکند.

ادامه مطلب...
مجوز مطالب و محتوا ۱۰ مهر ۹۹ ، ۱۰:۵۲ ۳ نظر موافقین ۲ مخالفین ۰
فاروق کریمی زاده

نظرات (۳)

علیرضا آهنی
علیرضا آهنی

به اشتراک گذاشتن خط فرمان در لینوکس با استفاده از GNU Screen

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

ادامه مطلب...
مجوز مطالب و محتوا ۰۶ مهر ۹۹ ، ۰۹:۳۷ ۰ نظر موافقین ۳ مخالفین ۰
فاروق کریمی زاده

زمان اشکال‌یابی برنامه حواستون به بافر و فلاش کردنش باشه

تکه کد زیر که به زبان سی‌پلاس‌پلاس را در نظر بگیرید:

#include <iostream>
using namespace std;

int main() {
    char *s;
    s = NULL;
    cout << "Hello";
    *s = 'H';
    return 0;
}

انتظار داریم که اول Hello چاپ شود و سپس با توجه به اینکه میخواهیم قسمتی از حافظه که نامربوط به برنامه‌ی ماست دسترسی پیدا کنیم،باید خطای Segmentation fault داده شود و برنامه خاتمه پیدا کند.اما وقتی کد را کامپایل و اجرا می‌کنیم می‌بینیم که اینطور نیست

ادامه مطلب...
مجوز مطالب و محتوا ۱۳ مرداد ۹۹ ، ۱۱:۳۹ ۱ نظر موافقین ۳ مخالفین ۰
فاروق کریمی زاده

نظرات (۱)

علیرضا آهنی

چطور کاری کنیم لیسپ سریع‌تر از سی اجرا شود؟

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

دریافت با حجم ۹۰ کیلوبایت از بیتکوین‌شل

دریافت از وب‌سایت فاروق

دریافت از «سیب‌زمینی تخم‌مرغ» فاروق

مجوز مطالب و محتوا ۰۶ مرداد ۹۹ ، ۱۶:۵۰ ۰ نظر موافقین ۳ مخالفین ۰
فاروق کریمی زاده

کنترل از راه دور بلوتوثی برای لپ‌تاپ با استفاده از ریموت مونوپاد

ریموت بلوتوثی

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

ادامه مطلب...
مجوز مطالب و محتوا ۱۳ خرداد ۹۹ ، ۱۳:۱۲ ۸ نظر موافقین ۱ مخالفین ۰
فاروق کریمی زاده

نظرات (۸)

علیرضا آهنی
علیرضا آهنی
علیرضا آهنی
علیرضا آهنی
علیرضا آهنی
علیرضا آهنی

چند کلید میانبر ساده در بش و zsh و fish

رفتن به اول خط

هرچند که کلید Home همین کار را انجام می‌دهد اما معمولا این کلید در جای مناسبی قرار ندارد و علاوه بر آن در هر تخته کلید در مکان متفاوتی قرار دارد. Ctrl+A همین کار را برای شما انجام می‌دهد و در مکان مناسب و ثابتی قرار دارد.

رفتن به پایان خط

کلید End همین کار را می‌کند اما کلید Ctrl+E در مکان مناسبی می‌باشد.

حذف کل یا قسمتی از خط

کلید Ctrl+K هر چه در موقعیت فعلی تا پایان خط وجود دارد را حذف می‌میکند. میتوانید با Ctrl+A به اول خط بروید سپس با Ctrl+K کل خط را حذف کنید.

پاک کردن کل صفحه

دستور clear همین کار را انجام می‌دهد اما Ctrl+L همین کار را با تایپ کلید‌های کمتری انجام داده و حتی زمانی که دارید دستور دیگری نیز می‌نویسید نیز قابل استفاده است بدون آنکه چیزی که می‌نویسید پاک شود.

مجوز مطالب و محتوا ۲۲ ارديبهشت ۹۹ ، ۱۱:۰۵ ۳ نظر موافقین ۴ مخالفین ۰
فاروق کریمی زاده

پایتون ۳.۸ و عملگر :=

در پایتون ۳.۸ یک عملگر جدید برای انتصاب معرفی شده است.این عملگر جهت انتصاب در عبارات بزرگتر استفاده می‌شود. مثلا:

a = 10
if (b := a) == 10:
...

در تکه کد بالا هم‌زمان مقدار b برابر مقدار a می‌شود و هم مقایسه انجام می‌شود.

مجوز مطالب و محتوا ۱۳ آبان ۹۸ ، ۱۹:۱۵ ۰ نظر موافقین ۱ مخالفین ۰
فاروق کریمی زاده

تابع qsort برای مرتب کردن یک آرایه با الگوریتم مرتب‌سازی سریع در سی/سی‌پلاس‌پلاس

تابع qsort از کتاب‌خانه‌ی استاندارد(stdlib.h) از توابع مفید و البته استاندارد هست.این تابع با دادن آدرس آرایه، تعداد اعضا، اندازه‌ی هر عضو و یک تابع برای مقایسه‌ی دو عضو،آرایه  را بصورت صعودی مرتب میکند.

با اینکه این تابع استاندارد هست اما اجباری در پیاده‌سازی آن نیست، به این معنی که qsort ضرورتا همه‌جا(منظور از همه جا دقیقا همه‌جاست! این یعنی ابر‌رایانه‌ها،فبلت‌ها،رایانه‌های شخصی و همچنین میکروکنترلر‌ها مانند AVR و PIC را نیز حساب میکنیم) وجود ندارد.

void qsort(void *base, size_t nmemb, size_t size,
            int (*compar(const void *, const void *)))

ادامه مطلب...
مجوز مطالب و محتوا ۰۳ آبان ۹۷ ، ۱۶:۳۴ ۰ نظر موافقین ۰ مخالفین ۰
فاروق کریمی زاده

کلاس توکار complex برای کار با اعداد مختلط در پایتون

complex(real_part=0, imag_part=0)
complex(str)

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

ادامه مطلب...
مجوز مطالب و محتوا ۱۲ مهر ۹۷ ، ۱۹:۱۸ ۱ نظر موافقین ۰ مخالفین ۰
فاروق کریمی زاده

نظرات (۱)

چطور از طریق خط‌فرمان مکان جغرافیایی یک IP را پیدا کنیم؟

اگر بخواهید مکان فیزیکی یک IP را پیدا کنید، ابزار های آنلاینی برای اینکار وجود دارند اما شاید مثل من پیرو راه بزرگ یونیکس باشید و  خط‌فرمان سریغ‌تر و کم‌هزینه‌تر هم هست.
اینجا دو روش را معرفی میکنم که از طریق خط‌فرمان بتوانید مکان جغرافیایی یک IP را پیدا کنید. روش اول از یک برنامه استفاده میکند که بر اساس یک پایگاه داده و بصورت آفلاین کار میکند و برای شبه یونیکس‌ها شامل گنو/لینوکس،بی‌اس‌دی ها و ... در دسترس هست. روش دوم که از curl و یک API استفاده میکند، نیازمند دسترسی به اینترنت هست و روی اکثر سیستم‌عامل ها قابل استفاده در دسترس هست.
ادامه مطلب...
مجوز مطالب و محتوا ۲۹ شهریور ۹۷ ، ۱۲:۱۲ ۱ نظر موافقین ۲ مخالفین ۰
فاروق کریمی زاده

نظرات (۱)

فرهاد حسن پور

تابع os.urandom در پایتون

os.urandom(n)

تابع os.urandom تعداد n بایت تصادفی برمیگرداند که برای مصارف رمزنگاری و دیگر کاربرد‌ها که اعداد تصادفی با کیفیت‌تر نیاز دارند مناسب است

ادامه مطلب...
مجوز مطالب و محتوا ۱۸ مرداد ۹۷ ، ۱۹:۰۹ ۰ نظر موافقین ۰ مخالفین ۰
فاروق کریمی زاده