چرا به گنو/لینوکس عشق می ورزم: خاطرات یک هکر

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

جادی عزیز، ما یک دیتابیس از ۳۰۰ هزار کاربر داریم که هش شده‌اند. حالا قرار است این افراد به یک سیستم جدید منتقل شوند اما لازم است پسوردهای آنان را داشته باشیم. شرکت سازنده نرم افزار اول و شرکت نویسنده نرم افزار جدید گفته‌اند که امکان کشف اینکه یک هش چه چیزی بوده وجود ندارد. شما راه حلی می‌شناسید؟

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

9370333**** ea9bf866d98db73eb0909fa9c1cc1b11
9370050**** fcbfab2f4cda26061ed9e3ee96a4fd61
9370750**** 6a130f1dc6f0c829f874e92e5458dced
9370001**** 9ad97add7f3d9f29cd262159d4540c96

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

خب حالا راه حل ما چیه؟ یک راه که بهش «بروت فورث» می‌گن اینه که یکی یکی هر چیز ممکن رو هش کنیم. یعنی اول ۱ رو هش کنیم ببنیم به اون چیزی که اونجا هست می‌رسیم یا نه. بعد ۲ رو هش کنیم. بعد ۱۲ رو بعد ۱۱ رو و خلاصه هر چیز ممکن رو. اینکار یک نیروی کور است و بسیار وقت گیر. اما یک راه هوشمندانه تر هم داریم که بهش می‌گن رنگین کمان / rainbow. تکنیک رنگین کمان اینه که تمام کارهای بالا رو بکنیم (یعنی مثلا اگر اکثر افراد در موبایل از پسوردهای عددی استفاده می کنن از ۰ تا ۹۹۹۹۹ رو هش کنیم و رمز و هش اون رو بریزیم توی یک دیتابیس) و بعد یکی یکی هش ها رو توی دیتابیس سرچ کنیم و پسورد رو نشون بدیم… خب آماده‌اید؟

برای ایجاد همه پسوردهای ۰۰۰۰۰ تا ۹۹۹۹۹ و هش کردن اونها این برنامه پایتون رو نوشتم. مطمئنا می‌تونه بهتر هم نوشته بشه ولی این کار من رو راه انداخت:

#!/usr/bin/python

import MySQLdb

db = MySQLdb.connect("localhost","jadi","password","break" )

# prepare a cursor object using cursor() method
cursor = db.cursor()


for i in range(0, 10000):
    pre = '';
    if i < 10:
        pre += '0';
    if i < 100:
        pre += '0';
    if i < 1000:
        pre += '0';
    num = "%s%s" % (pre, i);
    print num;
    # execute SQL query using execute() method.
    cursor.execute("insert into rainbox values ('%s', md5('%s'));"%(num,num));

# Fetch a single row using fetchone() method.
#data = cursor.fetchone()

# disconnect from server
db.close()

همین برنامه رو برای پسوردهای ۰۰۰۰۰ تا ۹۹۹۹۹ و ۰۰۰ تا ۹۹۹ و ۰۰ تا ۹۹ و ۰ تا ۹ هم کم و زیاد کردم و رنگین کمانی شامل ۱۱۱۱۱۰ پسورد و هش اون ساختم:

mysql> select count(*) from rainbox;
+----------+
| count(*) |
+----------+
|   111110 |
+----------+
1 row in set (0.07 sec)

بعد کلیدی روی هش تعریف کردم که سرچ سریعتر بشه:

mysql> ALTER TABLE rainbox ADD primary index (hash);

حالا وقت شکستن رمزها است. فایلی دارم به اسم users.csv که این شکلی است (چهار رقم آخر تلفن ها رو ستاره کردم که پرایوسی آدم‌ها حفظ بشه):

9370333**** ea9bf866d98db73eb0909fa9c1cc1b11
9370050**** fcbfab2f4cda26061ed9e3ee96a4fd61
9370750**** 6a130f1dc6f0c829f874e92e5458dced
9370001**** 9ad97add7f3d9f29cd262159d4540c96

کافیه این رو با لایبری csv پایتون بخونم، و بعد هش هر خط رو از دیتابیسم کوئری بزنم و اگر جواب داشت توی خروجی تلفن و هش و پسورد شکسته شده رو بنویسم و اگر هم جواب این هش توی دیتابیس من نبود، جلوش بنویسم later تا بعدا از یک جای دیگه پیداش کنم.

#!/usr/bin/python

import MySQLdb
import csv

db = MySQLdb.connect("localhost","jadi","password","break" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

spamReader = csv.reader(open('users.csv', 'rb'), delimiter=' ', quotechar='|')
for row in spamReader:
    tofind = row[1];
    try:
        cursor.execute("select pass from rainbox where hash = '%s'"%tofind);
        data = cursor.fetchone()[0];
        print row[0], tofind, data;
    except: #this hash was not in db
        print row[0], tofind, "later" 

# disconnect from server
db.close()

برنامه بالا رو اجرا می‌کنم و زمان می‌گیرم:

jadi@jubun:~/w$ wc -l users.csv && time python break.py > out.txt
316590 users.csv

real    0m57.226s
user    0m25.362s
sys 0m4.856s

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

jadi@jubun:~/w$ head out.txt 
93703334*** ea9bf866d98db73eb0909fa9c1cc1b11 7523
93700508*** fcbfab2f4cda26061ed9e3ee96a4fd61 8510
93707500*** 6a130f1dc6f0c829f874e92e5458dced 7496
93700013*** 9ad97add7f3d9f29cd262159d4540c96 9538
93700177*** c902514ac30b6e23dbb0c3dc80ec7d4a later
93700858*** ee676ed9ce5bd51b4452ddfbdf962ef7 later
93707848*** 8c249675aea6c3cbd91661bbae767ff1 1986

ظاهرا پسوردهای چهار رقمی مد هستن (: ظاهرا تعداد later ها هم کم نیست. بذارین یک نگاه هم به اونها بندازیم:

jadi@jubun:~/w$ grep later out.txt | wc -l 
1558

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

jadi@jubun:~/w$ grep later out.txt  > later.txt && \
                                cut later.txt -f2 -d' ' | uniq -u | wc -l 
5536

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

jadi@jubun:~/w$ cut later.txt -f2 -d' ' | sort | uniq -u | wc -l 
767

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

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

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

Found: md5("zaka") = 00a3b206c4ad2cae515e28745423093a

و zaka رو یک جایی ذخیره کنه. کافیه این کار رو برای همه هش‌هایی که هنوز کشف نشدن ادامه بدیم. مشخصه که هنوز یکسری کشف نشده خواهند موند ولی بذارین ببینیم به چی می رسیم. این مرحله به خاطر فرستادن درخواست به اینترنت کندتر است و یک راه حل خوبه اینه که فایل hard.txt و برنامه رو روی یک سرور وی پی اس آپلود کنیم و اونجا اجراش کنیم. همین کار رو می کنم و برنامه پایتون رو هم اینجوری می‌نویسم که یکی یکی هش ها رو برداره، به اون سایت بفرسته و توی خروجی اچ تی ام ال که بر می گرده، خطی که پسورد رو نشون می ده رو جدا کنه. اگر این هش اونجا هم نبود می نویسیم too difficult و از خیرش می گذریم (: بریم ببینیم چی می شه:

#!/usr/bin/python

import urllib
import csv
import re

spamReader = csv.reader(open('hard.txt', 'rb'), delimiter=' ', quotechar='|')
for row in spamReader:
    try:
        # This is here for copy/pasters....
        # Originally by Jadi at jadi.net
        params = urllib.urlencode({'term':row[0], 'crackbtn': 'Crack that hash baby!'})
        f = urllib.urlopen("http://md5crack.com/crackmd5.php", params)
        page = f.read()
        password = re.search('Found: md5\("(.*)"\) = %s' % row[0], page)
        print row[0], password.group(1)
    except: 
        print "too difficult"

و برای اجرا می‌زنیم:

user@remotehost:/tmp$nohup python onlinebreak.py > easy.txt & 

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

jadi@jubun:~/w$ time python break.py > out.txt &&  grep later out.txt | wc -l 

real    0m58.863s
user    0m27.706s
sys 0m5.756s
1558

عالی (: حالا دیگه فقط ۱۵۵۸ نفر داریم که پسوردشون کشف نشده. از سیصد هزار نفری که اول داشتیم، پیشرفت عالیی است (: این هزار و پونصد نفر که پسوردهای غیرمعمول گذاشتن هم می‌تونن زنگ بزنن به پشتیبانی و بگن از امروز پسوردشون کار نمی کنه و اونها براشون ریست می کنن (:

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

jadi@jubun:~/w$ cut out.txt -f3 -d' ' | sort | uniq -c | sort -b -n -r | head
 192019 1234
  11780 2222
  10532 123
   9734 1111
   7547 5555
   5293 12345
   4512 4444
   4473 0000
   2568 3333
   2192 444

و این شما و این پر استفاده‌ترین پسوردهای این سیصد هزار نفر. جالبه که ۶۰٪ از کاربران پسوردشون رو گذاشتن ۱۲۳۴۵. فوق العاده نیست؟

برنامه‌نویس‌ها و کاربران از نظر همدیگه

متاسفانه منبع رو ندارم.

(اگر عکس بالا رو نمی بینید، به دنبال برنامه های سانسور شکن باشید (: اینترنت ایران بدون ضدسانسور عملا اینترنت نیست)

ربات‌هایی بدون بدن

همچنین چاپ شده در اعتماد بیست مهر ۱۳۹۰

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

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

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

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

دو کلمه با نویسندگان مسنجر ایرانی

کلمه اول

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

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

اگر اهل کامپیوتر باشین که منطقا باید چرخ رو دوباره اختراع نکنین و از اینجا کل جریان رو دانلود کرده باشین و حتی اگر هم به سبک غارنشینی خودتون یک سرور جمع و جور و یک کلاینت چت نوشته باشین (لازمه بگم که این تمرین دبیرستانی بوده؟) باید بگم که اول از همه از برنامه ایشون استفاده کردین:

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

کلمه دوم

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

محاسبه عدد π تا ۱۰۰۰۰۰۰۰۰ رقم اعشار با پایتون در زیر ده دقیقه

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

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

مقاله رو حتی اگر نخونین اسکرول کردنش جالبه چون آدم وقتی از روی فرمول‌ها بدون اینکه بخونتشون رد می‌شه، حداقل برای من که خیلی لذت بخشه. این دوستمون در تلاش چهارم، با استفاده از الگوریتم چادنوسکی (؟) با یک کامپیوتر i7 و ۶ گیگ رم خالی و یک لینوکس ۶۴ بیتی در ۵۴۲ ثانیه موفق می‌شه عدد π رو تا ۱۰۰ میلیون رقم حساب کنه و نمودار خوشگل زیر رو از مجموعه تلاش‌های چهار قسمتی‌اش تولید کنه…. راستش رو بگم تنها مشکل این صفرهای زیاد است که من این روزها با دیدنشون نمی دونم چرا استرس می گیرم (: به هرحال.. این می تونه پایه یک مقاله خوب هم باشه اگر کسی از دوستان رشته ریاضی درس می خونه (:

یک روز پر هیجان برای برنامه‌نویس‌ها: مسابقه برنامه‌نویسی بیان

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

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

جایزه‌هاش خیلی خوبه: یک و نیم میلیون تومن به نفر اول و در همین حد به نفرات بعدی و نفر شش تا سی هم تی شرت که به نظرم عالیه (:

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

و سطح بندی هم داره: آزاد و دانش آموزی و سوالات از آسون تا سخت در هر مرحله با مسابقات‌ آزمایشی قبل از مسابقه اصلی و نمونه سوال و غیره (: به نظرم هر کسی که برنامه نویسی دوست داره می تونه یک روز پر لذت رو با این مسابقه بگذرونه.

و تقریبا بیشتر از صد ساعت دیگه برای ثبت نام وقت ندارین. بدوین برای ثبت نام (((:.

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

مسابقه برنامه نویسی برای اندروید و بادا

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

حالا هم یک ایده خوب دیگه داره: مسابقه برنامه نویسی برای سیستم عامل اندروید یا بادا به زبان فارسی

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

به نظرم شما هم سری بزنید…

پی.نوشت. به دلیل مشکلات فنی، سایت بادا او اس دات آی آر از بعضی دی ان اس ها قابل ریزالو شدن نیست. امیدوارم بتونن حلش کنن.

اگر زبان‌های برنامه‌نویسی کشتی بودند

کوتاهه و ناقص ولی ایده عالیه و جذاب. شکی هم نیست که یک نقد و بررسی علمی نیست…

جاوا

جاوا کشتی باری خواهد بود. قدرتمند با توان حمل بالا که از پس هر پروژه ای بر خواهد آمد. اما کند است و سنگین و راندن آن هم اصلا جذاب نیست.

پرل

یدک کش. بسیار قدرتمند برای اینطرف و آنطرف کشیدن حتی جاوا.. آنهم در کمتر از هشتاد کاراکتر.

رابی روبی

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

پی اچ پی

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

سی

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

سی پلاس پلاس

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

اسمبلی

اسمبلی هم زبانی است که در آن هر کاری که بخواهید می توانید بکنید. نزدیکترین ارتباط را با آب دارید و می توانید زیر آب بروید، روی آب بیایید، چپ بروید و راست بیایید اما مشخص است که برای یک سفر واقعی، کمتر کسی ممکن است شنا را انتخاب کند.

اچ تی ام ال

اچ تی ام ال اصولا کشتی نیست. قایق هم نیست.