حدود ۴ سال پیش با پروژهٔ آواهای مشترک موزیلا آشنا شدم. آن زمان مجموعه داده‌ٔ (Dataset) فارسی پروژه تنها حدود ۲ گیگابایت بود. الآن زبان فارسی تقریبا ۱۰ گیگابایت مجموعه داده دارد. در این مطلب راجع به پروژه و اهمیت آن برای پروژه‌های یادگیری ماشینی و هوش مصنوعی توضیح می‌دهم. البته موضوع دورهمی نهم کرم‌های کامپیوتر هم در همین مورد بود.

فاروق کریمی‌زاده30-10-1402 عمومی

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

روبوکد یک بازی برنامه‌نویسی است که در آن با زبان جاوا، اقدام به برنامه‌نویسی کردن روبات‌های کوچکی می‌کنید که با بقیهٔ روبات‌ها باید بجنگند. مبارزه می‌تواند به صورت تک‌به‌تک با یک روبات دیگر یا به صورت گروهی با مثلاً ۹ روبات دیگر باشد. هرچند که باید روبات‌های خود را به زبان جاوا بنویسید، اما دانش عمیقی از این زبان مورد نیاز نیست و در صورتی برنامه‌نویس یکی از زبان‌ها از همین خانواده باشید، می‌توانید به‌راحتی یک روبات بسازید.

فاروق کریمی‌زاده31-06-1402 تخصصی

قبلاً راجع به کتاب‌خوان اونیکس بوکس پوک پرو صحبت کردم و راجع به این که چرا تصمیم گرفتم یک تبلت اندرویدی با صفحه‌نمایش جوهر الکترونیکی (E-ink) کاغذ الکترونیکی (e-paper) داشته باشم و این تصمیمم چه تأثیری در سلامت چشمانم دارد. متأسفانه تبلت قبلی از میکروفون پشتیبانی نمی‌کرد و با وجود اندروید ۶ نمی‌توانستم از نرم‌افزار‌های جدید‌تر روی تبلتم استفاده کنم. و البته از همه مهم‌تر خراب‌کاری بنده حین تعمیر کتاب‌خوان باعث آسیب به صفحه‌اش و در نتیجه غیرقابل استفاده شدنش شد و مجبور شدم آن را در ایسام با قیمتی بسیار پایین به عنوان معیوب به فروش برسانم!

به عنوان یک نتیجهٔ این خراب‌کاری، باید دنبال وسیله‌ای جدید به عنوان تبلت اندرویدی می‌بودم و این بار از همان شرکت قبلی تبلت Boox Leaf را خریداری کردم که با صفحه ۷ اینچ کمی بزرگ‌تر از پوک بود. البته در زمان تصمیم من برای خرید، یک سال از ورود لیف به بازار می‌گذشت و Leaf 2 جدید‌ترین محصول این شرکت با اندروید ۱۱ بود. اما به دلیل دو برابر بودن تعداد هسته‌های پردازندهٔ لیف، قید اندروید ۱۱ را زدم و نهایتاً Boox Leaf را خریدم.

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

فاروق کریمی‌زاده29-03-1402 عمومی

توضیح خاصی ندارم…

let father: &Individual = loop {
    i = rng.gen_range(0..pop_size);
    if rng.gen_bool(self.population[i].ft() / total_ft) as f64){
        break &self.population[i];
    }
}

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

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

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

فاروق کریمی‌زاده03-12-1401 عمومی

زبان‌ها معمولاً یا تعیین نوع پویا دارند؛ مانند کامن لیسپ، پایتون، جاوا اسکریپت یا دارای تعیین نوع ایستا هستند؛ مانند سی و سی‌پلاس‌پلاس، راست و دوباره کامن لیسپ (معمولاً پیاده‌سازی‌های مدرن کامن لیسپ، مانند SBCL، اجازه می‌دهند بنا به خواست برنامه‌نویس، قسمتی از کد، دارای تعیین نوع ایستا و قسمتی دارای تعیین نوع پویا باشد).

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

def f(x: int) - > int:
    return x * 2 + 1

با این که تعیین نوع آرگومان یا ورودی تابع f که x باشد و مقدار بازگشت آن یعنی x*2 + 1 در اجرا تأثیری ندارد، اما زمانی که بخواهم مقدار بازگشت تابع f را با یک رشته نویسه (کاراکتر) جمع کنم به من اخطار داده می‌شود:

بدیهی است که اجرای این برنامه به وسیلهٔ پایتون نیز باعث خطا می‌شود. در مقابل زمانی که نوع ورودی و خروجی تابع را مشخص نمی‌کنم اخطاری داده نمی‌شود:

در ادامه با تعیین نوع ورودی‌ها و خروجی توابع و متد‌ها و ویژگی‌های یک کلاس آشنا می‌شویم.

فاروق کریمی‌زاده30-08-1401 تخصصی

مسئلهٔ ۸ وزیر می‌پرسد که در یک صفحهٔ شطرنج چه‌طور می‌توانیم ۸ مهرهٔ وزیر را چنان قرار دهیم که هیچ‌کدام در معرض تهدید دیگری نباشد. در ریاضیات و علوم کامپیوتر، مسئلهٔ n وزیر یک نسخهٔ تعمیم‌یافته از ۸ وزیر می‌باشد که برای اکثر nهای صحیح مثبت (یا طبیعی) بیش‌تر از یک چینش وجود دارد.

قبلاً یک روش برای پیدا کردن راه حل برای مسئلهٔ ۸ وزیر با استفاده از الگوریتم ژنتیک ارائه دادم. حال می‌خواهم یک روش دیگر برای همین هدف اما به صورت یک الگوریتم قطعی و تصادفی به همراه کد پایتون ارائه دهم.

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

فاروق کریمی‌زاده16-08-1401 تخصصی

صدای بوق ممتد از لحاظ فنی همان موج سینوسی با فرکانسی (بسامد) ثابت است. در این مطلب یک کد ساده و کوتاه پایتون ارائه می‌دهم که بدون استفاده از کتاب‌خانه‌های اضافی، می‌تواند یک بوق را با هر فرکانسی تولید کند و در یک فایل صوتی wave ذخیره کند.

فاروق کریمی‌زاده07-08-1401 تخصصی

مسئلهٔ ۸ وزیر یک تمرین معروف در علوم کامپیوتر و ریاضیات می‌باشد. این مسئله در مورد یک صفحهٔ شطرنج رایج و مهرهٔ وزیر در این بازی فکری می‌باشد. در ریاضیات ثابت می‌شود که می‌توان ۸ وزیر را در یک صفحهٔ شطرنج چنان قرار داد که هیچ‌کدام از وزیر‌ها، دیگری را تهدید نکنند. با تعمیم این مسئله در ریاضیات، ثابت می‌شود که در یک صفحهٔ شطرنج به ضلع n، می‌توان تعداد n وزیر قرار داد؛ چنانچه هیچ‌کدام دیگری را تهدید نکنند. در علوم کامپیوتر می‌توان با روش‌های مختلفی این مسئله را حل کرد و به یک چینش از مهره‌های وزیر رسید که هیچ‌کدام دیگری را تهدید نکنند. یکی از این روش‌ها «الگوریتم ژنتیک» است.

تصویر از Encik Tekateki
تصویر تحت CC0

فاروق کریمی‌زاده17-07-1401 تخصصی

پیام‌رسان تلگرام، محبوبیت زیادی بین کشور‌هایی مانند ایران داشته و دارد. بسیاری آن را به واتس‌اپ ترجیح می‌دهند و بر این باورند که تلگرام از واتس‌اپ امن‌تر و آزاد‌تر است و همچنین فضای ابری برای ذخیرهٔ پیام‌ها و فایل‌های ارسالی ارائه می‌دهد برخلاف واتس‌اپ که به نظر می‌آید پرونده‌ها (فایل‌ها) و تصاویر را در سرورهایش (کارساز‌هایش) ذخیره نمی‌کند.

همچنین عده‌ای آزاد و متن‌باز بودن کلاینت‌های (کارخواه‌ها) تلگرام را دلیلی بر امن بودن آن می‌دانند. واتس‌اپ برخلاف تلگرام رمزگذاری سراسری دارد به این معنی که تنها فرستنده و گیرندهٔ پیام می‌توانند داده‌های ردّ و بدل شده را بخوانند و حتی خود واتس‌اپ که این داده‌ها را انتقال می‌دهد نمی‌تواند شنود کند. با این حال با توجه به این که کد منبع کلاینت‌های واتس‌اپ در دسترس نیست، نمی‌توان این مورد را مطمئن بود.

فاروق کریمی‌زاده14-07-1401 عمومی

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

طی دهه‌های گذشته بحث‌های زیادی راجع به این‌که مشخصات زبان‌های برنامه‌نویسی، به عنوان مثال تعیین نوعشان و مثلا ایستا(static) یا پویا(dynamic) بودن چه تاثیری روی روند توسعه نرم‌افزار‌ها دارد. یک مقاله علمی(paper) با مطالعه ۶۰۰ پروژه در گیت‌هاب شامل تقریبا ۷۰ میلیون خط کد و ۳ میلیون کامیت به نتایجی در این مورد رسیده‌است.