کرم های کامپیوتر



در سال 2000 (که سال تولد من هست) یک خطای نرم افزاری تمام کامپیوتر ها را تهدید می کرد.

موضوع از آنجا شروع شد که در آستانه سال 2000 میلادی برنامه نویسان متوجه خطایی شدند که به Y2K یعنی Y2000 معروف است. در آن زمان سیستم هایی مانند سیستم کارت های بانکی و. وجود داشتند که سال را تنها با دو رقم آخر (مثلا به جای 1999 از 99) نشان می دادند؛ ولی مشکل اینجا بود که نرم افزار ها نمی توانستند بین سالها 2000 و 1900 و. فرقی قائل شوند.

حال آیا این اتفاق باری دیگر و در سال 1400 شمسی برای ما رخ خواهد داد؟

     تابلو اعلاناتی که به اشتباه سال 2000 را 1900 نشان می دهد
 منبع تصویر: ویکی‌مدیا

در حال نوشتن چند خط کد بودم و نیاز داشتم که هربار کد را در یک کانال آی‌آر‌سی بفرستم تا کد بازبینی و اشتباهاتم گوشزد شود. از یک پیست‌بین(pastebin) استفاده میکردم و هربار پیوند نسخه جدید کد را به کانال میفرستادم اما این پروسه دردناک و آزار دهنده بود:

  • تغییر کد
  • کپی آن به بریده‌دان(clipboard) سیستم پنجره‌ی اکس
  • وارد شدن به apaste.info با مرورگر وب
  • وارد کردن کد و گرفتن پیوند کد
  • فرستادن کد به کانال
برای همین رفتم دنبال اینکه این فرآیند را کوتاه‌تر و خوش‌آیندتر کنم. برای اینکار از curl استفاده کردم. با اینکه کرل برای اکثر سیستم‌عامل‌ها از جمله داس، ویندوز، مک، شبه‌یونیکس‌ها و . وجود دارد اما همچین چیزی بیشتر بدرد کاربرانی میخورد که با خط فرمان زیاد کار میکنند و این کاربران در ویندوز بدلیل عدم وجود یک خط فرمان قوی، کمتر دیده میشوند.
ادامه مطلب

همونطور که می دونید ویندوز اجازه ساخت یک پوشه (یا Directory) با نام فاصله (white space) رو نمیده ولی میشه این کار رو با خط فرمان انجام داد. کد های زیر رو حتما امتحان کنید (به جای X هر حرفی می تواند باشد):

md "X:\ \"

و سپس

md "X:\ \test"

این دو کد در خط فرمان باعث ایجاد یک پوشه به اسم فاصله می شود. حالا برید و ببینید ویندوز چه باگهایی سر این پوشه می ده. اول که  پوشه رو باز می کنید چون کارکتر فاصله در آخر آدرس هست مرورگر فایل ویندوز (Windows Explorer) دچار یک اشتباه لپی شده و فاصله را در نظر نمی گیرد. پس به جای نشان دادن محتویات این پوشه که پوشه ای دیگر به نام test است، محتویات X:\ می دهد و اگر یک بار دیگر  روی این پوشه با نام فاصله کلیک کنید پیغام هشداری می بینید که می گوید نمی تواند آدرس X:\ \ \ را پیدا کند. تنها راه دسترسی به پوشه test تایپ آدرس آن (X:\ \test) در نوار آدرس است.

توجه: برای پاک کردن پوشه حتما از خط فرمان و دستور rmdir /s "X:\ \" استفاده کنید در غیر این صورت امکان دارد کل فایل ها پاک شوند.


 user agent string  به طور خلاصه رشته‌ای است که توسط مرورگر کاربر به کارساز(سرور) ارسال میشود و اطلاعات رایانه‌ی کاربر را مشخص میکند. این اطلاعات شامل سیستم‌عامل و نسخه‌ی آن، مرورگر و نسخه‌ی آن یا برای یک بات تنها نام و نسخه‌ی آن است.البته این رشته در قرارداد(پروتکل) های دیگر نیز استفاده میشود.

ادامه مطلب

botters یک جامعه قدیمی و نسبتا کوچک از توسعه‌دهندگان بات‌های آی‌آر‌سی هست. آنها یک ویکی که شامل مطالب فنی و غیر فنی راجب بات‌ها و همچنین چند کانال IRC(کانال #botters روی فری‌نود کانال اصلی آنهاست)  در این مورد دارند. اگر به ساخت بات آی‌آر‌سی علاقه دارید، این جامعه میتواند به شما کمک کند.


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

احساس کردم که مطلب "برنامه نویسی را از کجا آغاز کنم؟" به کمی بررسی بیشتر نیاز دارد، لذا تصمیم به بازنویسی این مطلب گرفتم.

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

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

ادامه مطلب

چند روز پیش یه چالش دو نفره بین من و آقای کریمی زاده راه افتاد که آن را با شما به اشتراک می گزارم

چالش از این قرار است: باید کدی بنویسید که با تعداد محدودی عملگر مجاز (تنها عملگر های مجاز عملگر های منطقی(عملگر های و؛ یا؛ نقیض) و عملگر انتساب (مساوی) هستند) بتواند دو عدد را در هم ضرب کند. عملگر های ضرب، جمع، تفریق، تقسیم و عملگر های بیتی و حتی عملگر های افزایش یا کاهش واحدی (++/--) غیر مجاز هستند. من تونستم کد رو به زبان سی شارپ (#C) بنویسم شما نیز با هر زبانی که می توانید بنویسید و در سایت apaste.info بارگزاری کرده (تاریخ انقضا نداشته باشد) و لینک آن را در نظرات ارسال. پاسخ بعد از دو هفته به اشتراک گزارده می شود.


مهلت ارسال پاسخ به چالش تمام شد و این هم کد من برای جواب چالش ترک عملگر ها

 

 

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

namespace multiplication
{
    //multiplication whithout using any operator (boolean operators (&& || !) are permited).
    //solved by Behnam Simjoo on 2019/05/10
    class Program
    {
        static void Main(string[] args)
        {
            while (true)
            {
                Console.Clear();
                Console.Write("a=");
                int a = int.Parse(Console.ReadLine());
                Console.Write("b=");
                int b = int.Parse(Console.ReadLine());
                int res = f(a, b);
                Console.WriteLine($"---------------------\nResult: {res}");
                Console.ReadKey();
            }
        }
        static int f(int a,int b)
        {
            if (a < b) { int t = a;  a = b;  b = t; }  //for more speed
            int temp = a;
            for(int i = 1; i < b; i=Sum(i,1))  //using Sum function in place of ++ operation
                a = Sum(a, temp);
            return a;
        }
        static int Sum (int a,int b)
        {
            bool[] ab = Convert.ToString(a, 2).PadLeft(32, '0').Select(s=>s=='1').ToArray();
            bool[] bb = Convert.ToString(b, 2).PadLeft(32, '0').Select(s=>s=='1').ToArray();
            //converting int to bin string and converting 0 to false and 1 to true
            int carry = 0,result=0;
            do {
                carry = 0;
                result = 0;
                bool[] r = new bool[32];
                List<bool> c = new List<bool>(32);
                r=ab.Select((s, i) => s && bb[i] ? false : (s || bb[i])).ToArray();     //Boolean sum without carry
                c.AddRange(ab.Select((s, i) =>s && bb[i]).ToArray());                   //Boolean sum calcuting carry

                // a | b || result of a+b | carry
                //---|---||---------------|------
                // 0 | 0 ||       0       |   0
                // 1 | 0 ||       1       |   0
                // 0 | 1 ||       1       |   0
                // 1 | 1 ||       0       |   1

                //     a=19=00010011|
                //      +            }=> r=00001010 , c=00010001
                //     b=25=00011001|
                //       -----------
                //result=44=00101100
                //shifting c to left
                c.Add(false);
                c.RemoveAt(0);
                // c=00010001 => shift => c=00100010
                ab = c.ToArray();
                bb = r;
                //seting ab = carry and bb = r to continue sum process until carry became zero
                c.Reverse();
                r = r.Reverse().ToArray();
                //reversing boolarrays for BitArray
                Array A = new int[2];
                BitArray res = new BitArray(r);
                res.CopyTo(A, 0);
                BitArray cry = new BitArray(c.ToArray());
                cry.CopyTo(A, 1);
                carry = (int)A.GetValue(1);
                result = (int)A.GetValue(0);
                //converting binary to single integer value
                //then cuntinue process until carry != 0
                //1st next step: r=00001010, c=00100010 => r+c => r=00101000, c=00000100
                //2nd next step: r=00101000, c=00000100 => r+c => r=00101100, c=00000000 => result = 44
            } while (carry != 0);
            return result;
        }
    }
}

 


اگر تمایل دارید به عنوان نویسنده در وبلاگ ما فعالیت کنید رزومه خود را به صورت یک نظر برای همین مطلب ارسال کنید.

 

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

در سی شارپ شما می توانید نوع (type) ها را در قالب یک متغییر برگرداند و جا به جا کرد. این نوع ها می توانند انواع متغیر ها و یا کلاس ها و در کل هر شئ موجود باشند. به طور مثال اگر کلاس های مشتقی دارید می تواند کلاس پایه و تمامی کلاس های مشتق را به گونه ای بنویسید که توع خود را در غالب یک متغیر اعلام کنند

ادامه مطلب

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

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

اکثر ما بابت جاسوس هایی که بسیار دوستشان داریم و با خودمان همه جا می بریم مقادیر زیادی پول خرج کردیم. یک پیشنهاد؛ یک سری به دسترسی نرم افزار های سیستمی مخصوصا نرم افزار های گوگل (برای گوشی های اندرویدی) بزنید. اکثر برنامه ها از جمله گوگل پلی به میکروفون، دوربین و مخاطبین دسترسی دارند. اصلا متوجه بخش Recommended for you در برنامه گوگل پلی شده اید؟ این بخش بر اساس سابقه جست و جو برنامه هایی که می تواند برای شما جذاب باشد را لیست می کند.

البته که در جهان امروز نمی توان انقدر بد بین بود، ولی به هر حال این نفوظ به خانه ها و خلوت ها در جهان امروز بسیار ساده تر از گذشته شده است. لذا پیشنهاد می کنم کمی مراقب رفتار های خود در مقابل گوشی های گران قیمت خود باشید!


اغلب برنامه ها در ایجاد تغییرات در رجیستری ویندوز مخصوصا کلید های حساس رجیستری مجاز به دسترسی نیستند و با خطای Access denied مواجه می شوند. در این مطلب می خواهم در خصوص چگونگی دور زدن این منع دسترسی توضیحاتی بدهم.

از آن جا که رجیستری ویندوز می تواند ابزار مخربی برای بدافزار ها باشد و تغییرات انجام شده در آن می تواند برای کاربران فاجعه بار باشد، ا در بعضی کلید ها دسترسی های خاصی نیاز است؛ مخصوصا اگر با یک زبان تحت دات نت فریم ورک سر و کار داشته باشید (مانند سی شارپ). حال برای تغییرات می توانید از یک برنامه مورد اطمینان ویدوز به نام Reg.exe استفاده کنید. وجود این نرم افزار باعث شده تا بسیاری از نرم افزار ها به سادگی بتوانند حتی به جا های حساس ویندوز آسیب زده و مشکلاتی بوجود بیاورند. این برنامه درواقع یک واسط خط فرمان برای تغییر در رجیستری هست که توسط مایکروسافت نوشته شده و در آدرس "C:\Windows\System32\reg.exe" قرار دارد. برای استفاده از این برنامه لازم است با چگونگی دادن دستورات به آن آشنا شوید که توضیح آن در این مطلب نمی گنجد و پیشنهاد می کنم در خط فرمان توسط دستور reg help با چگونگی استفاده از آن آشنا شوید. برای انجام تغییرات کافیست از طریق کد های برنامه خود این نرم افزار را اجرا و دستورات لازم را به آن بدهید.

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


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

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

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

ادامه مطلب

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

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

ادامه مطلب

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

از آنجا که به تازگی دارم پایتون کار می کنم می خواستم تا به هسته اندروید تبلتم پایتون رو اضافه کنم تا بتونم براش اسکریپت پایتونی هم بنویسم. پس جست و جو کردم تا چطور می تونم این کار رو انجام بدم؛ تا این که یافتم چطور می تونم پایتون 3.4.2 رو به اندروید اضافه کنم. البته برای استفاده از پایتون بر روی اندروید راه های دیگری مانند استفاده از برنامه QPython هم هست که به روت هم فکر نکنم نیاز باشه ولی در این جا شما می تونید کد ها و اسکریپت ها را از شل اجرا کنید و حتی اسکریپت هایی برای سیستم بنویسید که به سادگی اجرا می شوند.

قبل از هر چیز باید بگم که این دستورالعمل نیاز به دسترسی روت داره و طبق گفته ی منبع فقط روی پردازشگر های AMD جواب میده. من این کار رو انجام دادم و به خوبی روی تبلت سامسونگ به مدل GT-P3100 جواب داد. استفاده از ADB هم برای سادگی کار پیشنهاد می شه که البته میشه از یک terminal emulator برای اندروید هم استفاده کرد.

ادامه مطلب

همونطور که می دونید ویندوز اجازه ساخت یک پوشه (یا Directory) با نام فاصله (white space) رو نمیده ولی میشه این کار رو با خط فرمان انجام داد. کد های زیر رو حتما امتحان کنید (به جای X هر حرفی می تواند باشد):

md "X:\ \"

و سپس

md "X:\ \test"

این دو کد در خط فرمان باعث ایجاد یک پوشه به اسم فاصله می شود. حالا برید و ببینید ویندوز چه باگهایی سر این پوشه می ده. اول که  پوشه رو باز می کنید چون کارکتر فاصله در آخر آدرس هست مرورگر فایل ویندوز (Windows Explorer) دچار یک اشتباه لپی شده و فاصله را در نظر نمی گیرد. پس به جای نشان دادن محتویات این پوشه که پوشه ای دیگر به نام test است، محتویات X:\ می دهد و اگر یک بار دیگر  روی این پوشه با نام فاصله کلیک کنید پیغام هشداری می بینید که می گوید نمی تواند آدرس X:\ \ \ را پیدا کند. تنها راه دسترسی به پوشه test تایپ آدرس آن (X:\ \test) در نوار آدرس است.

توجه: برای پاک کردن پوشه حتما از خط فرمان و دستور rmdir /s "X:\ \" استفاده کنید در غیر این صورت امکان دارد کل فایل ها پاک شوند.


چه تغییراتی باید روی وبلاگ اعمال کنیم تا عملکرد و مطالب آن بهبود یابد؟

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


def controllInput(func:callable, prompt = '>'):
  while True:
    try:
      inputValue = input(prompt)
      value = func(inputValue)
      if type(value) == bool:
        if value:
          return inputValue;
        else:
          print('!!INVALID INPUT!!')
      else:
        return value, inputValue
    except:
      print('!!INVALID INPUT!!')
      
a = controllInput(str.isdigit, 'digit: ')
print(a, type(a))
b = controllInput(int, 'int: ')[0]
print(b, type(b))
c = controllInput(str.isalpha, 'alpha: ')
print(c, type(c))
d = controllInput(lambda x: x.isalpha() and len(x)==5, '5 alpha:')
print(d, type(d))

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

در روزگاری که همه جا صحبت از این بیماری ناخوانده چینی‌ها همون کرونا (Covid-19) هست ما هم کمی به این موضوع از بعد رسانه ای می پردازیم.

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

ادامه مطلب

تبلیغات

محل تبلیغات شما

آخرین مطالب

محل تبلیغات شما محل تبلیغات شما

آخرین وبلاگ ها

آخرین جستجو ها

education step by step driving آنچــه مینویســمـ... عصر زیبایی Rahul شهدای میگون هییت سربازان بقیه الله(ع) سنگ شناسان شرکت فرنام ره آورد آسیا .. یک جا برای ناگفته ها