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

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

الان ممکنه با نوشتن این مطلب یک عده بیان و بخوان که براشون واتساپ و اینستا هک کنیم! این موضوع حتی از مسئله‌ای که بالا گفتم هم بدتر و کثیف‌تره! این مسئله رو برای همیشه روشن کنم که امتحان رمزهای مختلف و حمله با فهرست رمزعبور(Password list) و Brute Force هک حساب نمی‌شه! و دارای ارزش علمی خیلی اندکی هست! پس بدونید که اگر یک موقعی حساب تلگرام یا اینستاتون لو رفت، مشکل از خودتون بود که رمز ناایمن استفاده کردید و درواقع کرک شدید و کلمهٔ هک رو به کار نبرید!

بهنام سیم‌جو22-11-1402 عمومی

چند هفته پیش تولد ۹ سالگی وبلاگ‌مون بود و توی این مطلب می‌خوام از تاریخچه ۹ ساله وبلاگمون براتون بگم. من و فاروق از دوران راهنمایی(نسل‌های جدید بخوانند متوسطه اول) با هم دوستیم و جفتمون به کامپیوتر و الکترونیک علاقه داشتیم. اولین وبلاگمون رو به اسم pcdanesh روی سرویس بلاگفا ایجاد کردیم و کمی بعد به بلاگ از شرکت بیان منتقلش کردیم.

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

۱۶ دی ماه سال ۹۴ تاریخ اولین مطلبمون روی وبلاگ pcdanesh.blog.ir هست. کمی که مطلب نوشتیم متوجه شدم اسمی که انتخاب کرده بودیم (pcdanesh) به شدت تکراری هست. اینجا بود که تصمیم گرفتیم یه ایده نو بدیم که کسی تا به‌حال بهش نرسیده!

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

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

ما کرم‌های کامپیوتر هستیم و براتون از تجربیات خودمون می‌نویسیم

و به این ترتیب اسم کرم‌های کامپیوتر (pcworms) به وجود اومد. البته pc مخفف personal computer به معنی رایانه شخصی هست، ولی خب اسم کرم‌های کامپیوتر شخصی زیاد جالب نیست 😄

اسم و آدرس وبلاگ pcdanesh رو تغییر دادیم. در واقع تاریخ دقیق این جابه‌جایی مشخص نیست برامون، و یطورایی چون pcdanesh و pcworms از هم جدا نیستن و اولین مطلب هر دو ۱۶ دی ماه هست این تاریخ رو به عنوان تولد وبلاگمون در نظر می‌گیریم.

ما سال ها روی سرویس blog.ir مطلب نوشتیم و کلی خاطرات شیرین داریم. مثلا یکبار فاروق بعد از نوشتن مطلب توی وبلاگ از سیستم خارج نشد و برادرش که اون موقع سن زیادی نداشت اومد و از روی شیطنت یه مطلب نوشت و پست کرد و توش به یکی از هم‌کلاسی هاش که باهاش زیاد خوب نبود بد و بیراه گفته بود اون موقع ما یه ربات داشتیم که پست های جدید رو از روی RSS می‌خوند و تو تلگرام می‌فرستاد. من متوجه شدم که چنین مطلبی منتشر شده و سریع تمام دسترسی های حساب فاروق رو بستم، رمزش رو عوض کردم، مطلب رو پاک کردم و به فاروق زنگ زدم، فاروق که تازه رفته بود بیرون فهمید جریان چیه و برگشت و داداشش رو سرزنش کرد! 😂

سیر تکاملی چت ها هم جالب بود، خیلی وقت پیش‌ها فقط یک چت-روم IRC روی شبکه freenode داشتیم. الان دیگه حتی شبکه freenode هم مثل سابق دیگه نیست! من هم همونطور که گفتم یه بات تو تلگرام داشتم که مطالب رو می‌فرستاد. اون زمان تلگرام هنوز فیلتر یا سانسور نبود و یه طورایی پیام‌رسان رسمی بود! بعد‌ها فاروق یک سرور ماتریکس روی Nano Pi خودش اجرا کرد و عضویت در اون با محدودیت بود و برای گرفتن اکانت باید به فاروق ایمیل ارسال میشد. یه طورایی اون گروه فقط برای دنبال کننده های قدیمی وبلاگمون بود که از خیلی وقت پیش با نظراتشون رو وبلاگ بهمون دلگرمی می‌دادن! بعدا تصمیم گرفتیم که گروه رو بزرگ‌تر کنیم و به سرور های ماتریکس موزیلا رفتیم و علاوه بر اون توی تلگرام هم گروه ساختم و این دو تا رو بهم پل کردیم.

دانشجو شدیم و کلی اتفاقات رو تجربه کردیم! تا سال ۱۴۰۰ که تصمیم گرفتیم از بلاگ جدا بشیم و یک سایت وردپرس داشته باشیم. با بلاگ (بیان) خداحافظی کردیم، بار و بندیل رو جمع کردیم و اومدیم اینجا!

در حال حاضر هم دستاورد جدیدمون دورهمی‌های کرم‌های کامپیوتر هست که به صورت هفتگی با موضوعات مختلف برگذار میشه.

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

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

بهنام سیم‌جو13-11-1402 عمومی

الگوریتم کوله‌پشتی، یک الگوریتم از نوع حریصانه هست. در این مطلب در مورد الگوریتم کوله‌پشتی یک و صفر (0/1 knapsack algorithm) می‌نویسم. برای مثال فرض کنید یک کوله پشتی با حجم ۹۰ لیتر دارید؛ و وسایلی که دارید علاوه بر حجم برای شما یک ارزش یا اهمیت دارند و احتمالا همه آن‌ها جا نمی‌شوند. حال به چه صورت وسایل را انتخاب می‌کنید تا بیشترین ارزش را در کوله پشتی خود داشته باشید؟ در الگوریتم کوله‌پشتی یک و صفر یا یک شی انتخاب می‌شود و یا خیر! امکان برش و تکه کردن نیست.

بهنام سیم‌جو28-10-1402 تخصصی

سلام! به مسئله‌ای برخوردم که نیاز داشت یه آرایه با طول نامعلوم رو از کاربر بگیریم. اینطوری که کاربر شروع می‌کنه به وارد کردن ورودی‌ها تا زمانی که کلمه end رو بزنه و تموم کنه. مسئله ساده‌ای هست و در کل زیاد چیز شاخی نیست!!

چالشش اینه که ما تعداد اعضا رو نمی‌دونیم و طول آرایه هم ثابته کنه، پس در حالت عادی مجبوریم ورودی‌ها رو بریزیم تو یه لیست تا آخرش که کار کاربر تموم شد همه رو مثلا منتقل کنیم به یه آرایه با طول لیسته، یعنی داریم دو بار هر عضو رو بررسی می‌کنیم که هزینه زمانی اینجا میشه 2n(معادل O(n)) از طرفی توی زبانی مثل C که اصلا لیست نیست و باید مثلا از SLL(به انگلیسی: Singly Linked List و به فارسی: فهرست پیوندی یک‌طرفه) استفاده کرد.

#include <stdio.h>
#include <stdlib.h>

double* rec(int i) {
    char input[100];  // Adjust the input string size as needed
    fgets(input, sizeof(input), stdin);
    
    if (strcmp(input, "end\n") == 0) {
        double* result = (double*)malloc(i * sizeof(double));
        return result;
    }

    double* arr = rec(i + 1);
    sscanf(input, "%lf", &arr[i]);
    return arr;
}

int main() {
    double* result = rec(0);

    // Printing the result
    for (int i = 0; result[i] != 0.0; ++i) {
        printf("%lf ", result[i]);
    }

    free(result);    // Free the allocated memory

    return 0;
}

مشابه این کد در پایتون به این شکل نوشته می‌شود(برای آرایه از numpy استفاده شده).

from numpy import np


def rec(i=0):
    inp = input()
    if inp == "end":
        return np.zeros(i)
    arr = rec(i + 1)
    arr[i] = int(inp)
    return arr

در واقع این شیوه به شکلی هوشمندانه از پشته(به انگلیسی: stack) خود سیستم برای ذخیره موقتی اعضا و شمارش آن ها استفاده می‌کنه. اما باید دقت کنید که این روش نامحدود هم نیست چون به اندازه پشته محدود میشه.

کد این سیستم‌عامل را می‌توانید از اینجا دانلود کنید!

دانلود

بهنام سیم‌جو22-10-1402 عمومی

تصمیم گرفتیم که جمعه هر هفته ساعت ۱۸ یک دورهمی دوستانه داشته باشیم. در این دورهمی ها هر هفته یکی از اعضا داوطلب میشه در درمورد موضوعی صحبت کنن و اطلاعات‌مون رو رد و بدل کنیم. علاوه بر اون در انتهای هر دورهمی بحث آزاد داریم و کلی می‌خندیم!

هر هفته اطلاعیه دورهمی رو تو meet.pcworms.ir می‌زاریم و جمعه ها ساعت ۶ قبل از شروع لینک دورهمی رو توی گروه‌هامون می‌فرستیم.

تا الان که این مطلب رو می‌نویسم ۶ دورهمی برگزار شده که به ترتیب موضوعات زیر رو داشتن:

  1. معرفی دورهمی و این که می‌خواییم چیکار کنیم
  2. فاروق کریمی‌زاده: صفحه‌نمایش کاغذ الکترونیک
  3. فاروق کریمی‌زاده: سخت‌افزار‌های متن‌باز
  4. بهنام سیم‌جو: توصیه هایی برای برنامه‌نویسان تازه‌وارد
  5. جعفر فرقانلوژ: فراجستجوگر‌های سرکس و موآ + بحث راجع به معادل های فارسی در کامپیوتر!
  6. پرسش و پاسخ درمورد فراجستجوگر‌های سرکس و موآ و بحث گفت‌وگو راجع به مطلب حریم خصوصی و عصر اطلاعات

بهنام سیم‌جو27-08-1402 عمومی

من به عنوان یه متخصص کامپیوتر در پاسخ به هشدارم در مورد جمع‌آوری اطلاعات توسط شرکت‌هایی مثل گوگل و… همیشه یک پاسخ تکراری می‌شنوم: «من که هیچ اطلاعات مهم و سرّی‌ای ندارم!»

با توجه به این که امروزه در عصر ارتباطات و اطلاعات هستیم و استفاده از چنین خدماتی بسیار فراگیر شده، لازم می‌دونم در این مطلب بگم که «چرا اطلاعات شما مهم هستند؟» و «جامعهٔ نرم‌افزارهای آزاد چه تأثیری بر این مورد دارند؟»

اطلاعات شما مهم نیستند!

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

برای مثال خدمات گوگل می‌توانند حتی در صورت غیرفعال بودن GPS، موقعیت تقریبی شما را بدانند. این امکان چیزی مخفی و سری نیست، خود گوگل این مورد رو اعلام و در گوشی‌ها امکان استفاده از اون هست! در کل چیز بدی هم نیست، اگه جایی بودید که به ماهوارهٔ GPS دسترسی نبود، باز هم یه موقعیت تقریبی دارید، اما گذشته از این که می‌تونه برای یه‌سری افراد بد بشه، جالبه بدونید این امکان با پردازش داده‌هایی که از افراد عادی به دست اومده، فراهم شده.

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

از طرفی تا به حال متوجه شدید که گوگل می‌تونه حدس بزنه خونه‌تون کجاست؟! من متوجه چنین موردی شدم، اگه برید به نقشه google maps احتمالا یه جایی توی نقشه به عنوان خونهٔ شما مشخص شده. حدس من اینه که احتمالاً از مدت زمانی که در یک مکان هستم و هم جاهایی که می‌رم و برمی‌گردم به یک نقطهٔ ثابت متوجه این مسئله شده!

حمایت و گسترش

با استفاده از این خدمات، درواقع شما دارید از اون ها حمایت می‌کنید و بهشون خوراک اطلاعاتی می‌دید، اون‌ها با پردازش اطلاعاتی که شما بهشون دادید، آمارها و اطلاعات رو استخراج می‌کنن و اون‌ها رو می‌فروشن، البته همیشه این اطلاعات چیزهای شخصی نیستند، گاهی سلیقهٔ مصرف‌کننده‌های یه محصول و چیزهای این‌چنینی که ارزش تجاری دارند، هستند. این‌طوری قدرتشون بیشتر می‌شه. از طرفی خودبه‌خود به فراگیر شدن استفادهٔ دیگران از این خدمات کمک می‌کنید، افراد دیگه که قالباً از چیزهایی که تو این مطلب گفتیم بی اطلاع هستند، مجبور و یا ترغیب به استفاده از چنین خدماتی می‌شن، در نتیجه کم‌کم هم قدرت این خدمات و هم مصرف‌کننده‌های اون‌ها بیشتر می‌شه. مثلا نرم‌افزار Shareit که همه می‌شناسیمش، این نرم‌افزار به تمام پرونده‌ها دسترسی داره و به حریم خصوصی کاربران هم زیاد پایبند نیست، بعد اون وقت هر کسی که می‌خواد پرونده‌ای برای کسی بفرسته، اولین جمله‌ای که می‌گه اینه که «shareit نصب کن»!

تأثیرگذاری

از مواردی که گوگل به صورت شفاف گفته که نتایج و تبلیغات رو مطابق سلیقهٔ شما بهتون نشون می‌ده. این هم می‌تونه مفید و کمک‌کننده باشه و هم می‌تونه به هدایت شما به سمت یک هدف خاص منجر بشه. نمی‌خوام از توهم توطئه و کنترل شما توسط این خدمات بگم! ولی فیلتر نتایج یا نمایش هدفمند بعضی از اون‌ها زیاد چیز جالبی نیست! این کار برای این خدمات معمولاً سود تجاری به همراه داره.

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

برای مثال در زمان انتخابات در کشورهای بیگانهٔ غربی 😄 با کمک اینفواِنسرها (influencer: افرادی که قدرت تأثیر بر افکار مردم رو دارن، همون شاخ‌های مجازی!) می‌تونن تأثیراتی روی دیدگاه و طرز فکر مردم داشته باشن (تعجبی هم نداره؛ تعریف کلمه همینه!) یا مثلاً تأثیری که اون‌ها روی صنعت مد، پوشاک و صنایع آرایشی دارن کاملاً مشخصه.

علاوه بر اون، این روزها الگوریتم‌ها دارن تمام تلاششون رو می‌کنن که شما رو هر چه بیشتر پای این پلتفرم‌ها نگه دارن که این عوارض بدی براتون به همراه داره.

پ.ن: مواردی که در مورد «تأثیرگذاری» گفته شده تا حدود زیادی مربوط به سواد رسانه‌ای هستن. دانشی که برای هر کسی لازمه که بدونه هر رسانه‌ای چه هدفی داره و برای رسیدن به اون هدفش از چه تکنیک‌ها و ترفندهایی استفاده می‌کنه

شناخت ارتباطات

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

اعتماد کاذب!

شما (یا خیلی‌های دیگه) شاید به نصب یه نرم‌افزار از یه شرکت ناشناس مثلاً روسی یا چینی مخصوصاً متن‌بسته شک می‌کنید ولی خیلی ها به شرکت‌هایی مثل گوگل یا مایکروسافت اعتماد دارن. اما اگر از مرورگر کروم استفاده می‌کنید و اون رو به عنوان یه مرورگر امن می‌شناسید باید بگم که گوگل کروم در ابتدا یک نرم افزار متن‌باز بود تا زمانی که گوگل تصمیم گرفت یه‌سری اطلاعات نامعلوم (که شاید چیزهایی نباشن که دوست داشته باشیم!) رو اون پشت‌مشت‌ها بفرسته به سرورهای خودش یا حتی بدون اطلاع شما به بهونهٔ اسکن ویروس‌ها پرونده‌ها رو اسکن کنه؛ با این که کروم اصلاً یه پادویروس نیست! چنین سرویسی رو خودم خیلی وقت پیش‌ها زمانی که کروم داشتم دیدم، به صورت خودکار در پس‌زمینه اجرا می‌شد و امکان غیرفعال کردنش هم نبود! برای همین چیزها بود که عده‌ای از توسعه‌دهنده‌های کروم گفتند که ما نمی‌خواییم دیگه گوگل کروم رو توسعه بدیم و chromium که متن‌باز هست رو توسعه می‌دن (اگر می‌خوایید از کرومیوم استفاده کنید بگم که من این مرورگر رو پیشنهاد یا تبلیغ نکردم و پیشنهاد می‌کنم که صرفاً به من اعتماد نکنید و خودتون کرومیوم رو قبل از استفاده بررسی کنید!)

جامعهٔ نرم افزارهای آزاد

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

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

سخن پایانی

این طومار بلند و بالا حرف‌ها و حقایقی هستند که شاید به واسطهٔ موضوع بحث و در کنار هم قرار گرفتنشون کمی بوی توهم توطئه بگیرن یا حتی با درگیر کردن ذهن شما ناخواسته بهتون انرژی منفی وارد کرده باشم! ولی متأسفانه این‌ها حقایق تلخی هستند که امکان دارند و هم در حال استفاده هستند. این مطالب برای یک بحث سرپایی با اون دوستی که می‌گه «اطلاعات من ارزش ندارن» طولانی و با جزئیات هستند ولی لازمه که مردم از اون آگاه باشن.

بهنام سیم‌جو29-03-1402 عمومی

تعریف کلی کاراکتر یا نویسه در کامپیوتر یعنی کوچک‌ترین واحد نمایش اطلاعات که می‌تونه یک حرف یا علامت باشه. نویسه‌ها شامل فاصله، عددها و علامت‌ها‌ هم هستند!

نویسه در دنیای دیجیتال

در دنیای دیجیتال برای انتقال اطلاعات چیزی جز خاموش و روشن نداریم! جریان‌های الکتریکی که قطع و وصل می‌شن، نوری که چشمک می‌زنه یا حتی تغییر جهت قطب‌های مغناطیسی توی هاردها دنیای دیجیتال‌ما رو می‌سازن!

به این خاموش‌ها و روشن‌ها می‌تونیم غلط و صحیح یا صفر و یک رو نسبت بدیم. این صفرها و یک‌ها به کمک قوانین مبنای عددی در ریاضیات معنا پیدا می‌کنن. یعنی مثلاً عدد ۲ توی کامپیوتر می‌شه ۰۰۱۰، عدد ۱۱ توی کامپیوتر می‌شه ۱۰۱۱ و عدد ۵ می‌شه ۰۱۰۱. در واقع هر عدد، کد مخصوص به خودش رو داره که قابل محاسبه هست. این محاسبه بین مبنای ده (اعداد خودمون) و مبنای دو (اعداد کامپیوتر) به سادگیِ انجام چند تقسیم هست.

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

بهنام سیم‌جو27-02-1402 عمومی

امروز می‌خوام براتون از رمزنگاری دوسویه یا دو کلیده بگم، این رمزنگاری دنیای اطلاعات رو زیر و رو کرده! تو جهان امروز هر جا رو که نگاه می‌کنی ردپای این رمزنگاری هست! HTTPS ،SSH، ارز های دیجیتال، شبکه‌های مجازی و … همه و همه دارن از این روش برای حفظ امنیت استفاده می‌کنن.

آنچه خواهید خواند!

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

بهنام سیم‌جو10-12-1401 عمومی

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

پایپ (pipe) چیست؟

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

بهنام سیم‌جو21-11-1401 تخصصی

خیلی ها میگن پایتون زبان ساده‌ای هست، میشه اون رو زود یاد گرفت، بخاطر تعیین نوع پویا(dynamic typing) دیگه نیازی نیست که برنامه‌نویس با type ها درگیر باشه و …

ولی آیا واقعا همین‌طوره؟! توی این مطلب قصد دارم کمی زبان پایتون رو به عنوان یه برنامه‌نویس پایتون بررسی کنم.

۱. پایتون زبان ساده‌ای هست

منظور از سادگی زبان می‌تونه خوانا بودن اون و نزدیکی اون به زبان انگلیسی (زبان انسان) باشه. برای مثال دو تکه کد زیر رو ببینید:

زبان پایتون:

if not 2 in lst:
  for x in lst:
    print(x);

زبان سی‌شارپ:

if ( ! lst.contains(2) )
  foreach ( int x in lst )
    Console.WriteLine(x);

بهنام سیم‌جو27-07-1401 تخصصی

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

معماری افزونه‌ای (plugin architecture) یک شیوه توسعه نرم‌افزار است که به برنامه‌نویس این امکان رو میده که بدون نیاز به ویرایش کد های اصلی برنامه‌ش (هسته/main) قابلیت ها رو با ارائه بسته‌هایی به نام پلاگین در اختیار کاربران قرار بده و کاربران هم می‌تونن به سادگی با توجه به نیازشون از بین این افزونه ها، اون هایی که می‌خوان رو به برنامه‌شون اضافه کنن.

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

پ.ن: پروژه telegram-post-bot من در گیت‌هاب از همین ساختار پیروی می‌کنه و توش امکان اضافه کردن پلاگین هست و درواقع همین پروژه بهانه‌ای شد که من پیاده‌سازی این معماری رو توی پایتون یاد بگیرم و امتحان کنم.

خب وقتشه که دیگه مقدمه رو بذاریم کنار و بریم سراغ اصل مطلب!

بهنام سیم‌جو29-05-1401 تخصصی

هیچ می‌دونستین که تو پایتون می‌تونین برای لیست ها و توپل ها عبارت هایی مثل [1,2,3]>[0,2,3] نوشت؟ یعنی می‌تونی خیلی راحت لیست ها رو باهم مقایسه کنی.

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

بهنام سیم‌جو29-04-1401 تخصصی

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

امروز می‌خواهیم در مورد این بخش مهم در سیستم‌عامل ویندوز صحبت کنیم پس با وبسایت کرم‌های کامپیوتر همراه باشید.

بهنام سیم‌جو13-12-1400 تخصصی

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

سیستم‌عامل زنده (live) چیست؟

اگر شما کاربر ویندوز هستید حتما می‌دانید که ویندوز باید ابتدا بر روی سیستم شما نصب شود تا بتوان آن را اجرا نمود اما سیستم‌عامل ویندوز مانند سیستم‌عامل های دیگر می‌تواند بر یک DVD یا یک flash نیز نصب شود. در شرایطی که سیستم‌عامل شما به درستی کار نمی‌کند می‌توان از این امکان برای تعمیر سیستم و دسترسی به فایل ها استفاده کرد. در چنین شرایطی برای آن که سیستم‌عامل با هدف اجرا شدن از یک حافظه فلش یا DVD سازگار باشد (سریع و سبک باشد) نسخه‌ای از آن به عنوان live منتشر می‌شود که قابل حمل است و نیازی به نصب ندارد.

سیستم‌عامل های غیر ویندوزی

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

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

بهنام سیم‌جو06-12-1400 عمومی