چرا گنو/لینوکس رو دوست دارم: اینجا چند بار از کلمه مهمل استفاده شده

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

چیکار می کنیم؟ من با وردپرس وبلاگ می‌نویسم. پس اول از بخش مدیریت از منوی Tools، کل پست‌ها و کامنت‌های سایت رو Export میکنم. اینجوری یک فایل ایکس ام ال دارم که همه مطالب سایت توش هستن.

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


 jadi@jeducation:~/Downloads$ grep -o مهمل wordpress.2012-12-05.xml | wc -l 
 29


بعله (: من بیست و نه بار از کلمه مهمل استفاده کردم (: اما چیزی که جالبتره اینه که از کی شروع کردم به استفاده. اینبار باید برنامه بنویسم. پایتون همیشه انتخاب راحت و خوبیه. برنامه ایکس ام ال رو می خونه، درختش رو بررسی می کنه و توی همه مطالب و کامنت‌هایی که از عبارت مهمل استفاده کردن، تاریخ رو توی خروجی می نویسه:
# -*- coding: utf8 -*- 

from xml.dom import minidom
import xml.etree.cElementTree as et
import re

tree=et.parse('wordpress.2012-12-05.xml')
root=tree.getroot();

for child in root.iter('item'):
	date = child.find('wppost_date').text
	body = child.find('content_encoded').text
	title = child.find('title').text

	try:
		if re.search (u'مهمل', body) or re.search(u'مهمل', title):
			print date;
	except:
		print date;

for child in root.iter('wpcomment'):
	date = child.find('wpcomment_date').text
	body = child.find('wpcomment_content').text

	try:
		if re.search (u'مهمل', body):
			print date
	except:
		print date;


اگر پایتون بلدین (یا حتی بلد نیستین ولی جرات داشتین کد رو نگاه کنین) می بینین که کد اصلا خوب نیست. دلیل تاریخی داره. اول نمی دونستم تو کامنت هم هست و بعد کامنت ها رو با یک کپی پیست جدا کردم. بعد دیدم گاهی اکسپشن می گیرم و بعد از بررسی فهمیدم بعضی مطالب متن یا عنوان نداره (چرا؟!) و در نتیجه خروجی مشکل پیدا می کنه که با یک اکسپشن اضافه کردن سر و ته مشکل رو هم آوردم و رسیدم به نتیجه‌ای که می‌خواستم:
jadi@jeducation:~/Downloads$ time python parsejadi.py 
2011-12
2012-07
2012-11
2011-09
2011-10
2011-10
2012-02
2012-06
2012-10
2012-11
2012-11
2012-11
2012-11
2012-12
2009-06
2009-05
2011-08
2011-09
2011-10
2011-10
2011-11
2012-06
2012-06
2012-08
2012-10
2012-10
2012-10
2012-10
2012-11

real	0m0.738s
user	0m0.700s
sys	0m0.028s
jadi@jeducation:~/Downloads$ 

میبینین که توی اون خطی که تاریخ رو حساب کردیم یک [7:] دارم که باعث می‌شه فقط سال و ماه رو ذخیره کنم چون این نمودار با معنی‌تری بهمون می‌ده. راستی گفتم نمودار. اینم نمودارش (مشخصه که با لیبره آفیس لینوکس):

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

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

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

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

یکی از دوستان بهم ایمیل زده و خواسته کمکش کنم در یک اسکریپ که ثانیه شماری رو توی صفحه وب نشون بده. من برنامه نویس جاوا اسکریپت نیستم ولی راه حل چیزی است که باید بهش بگیم Lego Programming.

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

دقت کنین! این قطعات رو باید بفهمیم! یک آفت بزرگ که من دارم همه می بینم (بخصوص توی فروم های لینوکسی) کپی پیست است. چیزی که نمی فهمین رو کپی پیست نکنین. چیزها رو پیدا کنین، بفهمین، یاد بگیرین و کپی پیست کنین و تغییر بدین. مثلا من برای کد بالا یک سرچ ساده کردم به دنبال java script to count secconds و روی اولین گزینه کردم و رسیدم به این کد قشنگ:

<table border="0">
<tr>
<td align="center"><font face="Arial"><strong>You
have
visited my page for:</strong></font></td>
<td align="center"><form name="d">
<p><input type="text" size="8"
name="d2"></p>
</form>
</td>
<td align="center"><font
face="Arial"><strong>seconds!</strong></font></td>
</tr>
</table>

<script>
<!–
/*By George Chiang. (JK’s ultimate JavaScript tutorial and free JavaScripts site!)
http://www.javascriptkit.com
Credit MUST stay intact for use*/
var milisec=0
var seconds=0
document.d.d2.value=’0′
function display(){
if (milisec>=9){
milisec=0
seconds+=1
}
else
milisec+=1
document.d.d2.value=seconds+"."+milisec
setTimeout("display()",100)
}
display()
//–>
</script>

دقیقا چیزی که من می خوام نیست.. پس کد رو می خونم. دو تا متغیر داره milisec و seconds. کافیه ثانیه رو تنظیم کنم رو چیزی که می خوام مثلا کد رو عوض کنم به seconds=1000 و توی خروجی هم کلا هزارم ثانیه رو نمایش ندم یعنی: document.d.d2.value=seconds و خلاص (: به همین سادگی. لگو بازی تموم شد می ریم خونه هامون (:

You have visited my page for (starting from 1000 for fun):

seconds!

نکته ۱. این کد کپی رایت داره! نگاهش کنین و ازش یاد بگیرین و خودتون بدون قسمت های اضافی (مثلا دهم ثانیه شمار) دوباره بنویسینش تا بشه مال خودتون و ترجیحا آزاد (با لیسانس جی پی ال ۲ یا ۳) منتشرش کنین (:
نکته ۲. از لگو پروگرمینگ که حرف زدیم جا داره یاد بکنیم از لغت مشابهش زبون برنامه نویسی لوگو (َLogo) که ماروین مینسکی بزرگ از بنیانگذارانش بود و برای آموزش برنامه نویسی به بچه ها طراحی شده بود و همسن های من برنامه نویسی رو باهاش یاد گرفتن (:

بررسی کامپیوتر مبتنی بر جاوا اسکریپت

چند وقت پیش توی رادیو ۲۴ وبلاگینا، از یک چیزی گفتم که خودم هم ازش سر در نمی آوردم: سیستم عامل وبی مبتنی بر جاوا اسکریپت. برداشت من این بود که یک نفر اومده با جاوااسکریپت یک ماشین مجازی نوشته که می تونه سیستم عامل ها رو بوت کنه و باهاش به شکل موفقی یک گنو/لینوکس مینیمال بوت کرده و شما هم می تونین با رفتن به سایت http://bellard.org/jslinux همین کار رو بکنین.

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

چرا گنو/لینوکس را دوست دارم: بررسی سال های تولد در اطلاعات افشا شده ۳۰۰۰۰۰۰ کارت بانکی

در بخش کامنت های مطلب نقدی بر برنامه بی بی سی در مورد جریان انتشار سه میلیون کارت اعتباری ، همایون گفته بود که:

درود. کارهای آماری جالبی میشه با داده‌ها انجام داد. به عنوان مثال احتمال این که آدمها تاریخ تولدشون رو به عنوان رمز انتخاب کنن بالاست. به دنبال ۱۳۶ بگردبن در فهرست رمزها و مقایسه‌اش کنین با هر عدد ۳ رقمی دیگه‌ای. (۱۳۷ و ۱۳۵ و ۱۳۴ هم تعدادشون بالاست). من اگه دنبال دزدی بودم از اینجا شروع میکردم.

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

اگر شما علاقه ای به خط فرمان یا حوصله اش رو ندارین و فقط نتیجه کار رو می خواین… سریع اسکرول کنین پایین تا برسین به نمودارهای آخر (:

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

در قدم اول همه صفحات بانک تجارت رو باز می کنم، با ctrl+A متنشون رو کپی می کنم و توی یک ادیتور متنی paste می کنم. من توی لینوکس برای اینکار از gedit استفاده کردم که ادیتور ساده و دم دستی گنوم است… مشخصه که اگر توی ویندوز بودم خود این یک ماجرا بود که کدوم ادیتور ممکنه بتونه این پیست رو قبول کنه و آخ نگه.

به خاطر کپی پیست من فقط متن های توی صفحه ها رو دارم… چیزهایی مثل این:

با یک دستور تمام خط هایی که توشون + هست رو جدا می کنیم. اینها خط های حاوی پسورد هستن:

grep "+" all_tejarat.txt > only_hesab_and_pass

اوه اوه! شد این:

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

رمز مخفي , شماره کارت + رمز مخفي , شماره کارت + رمز مخفي , شماره

پس من برای راحت کردن کارم، همه + ها رو تبدیل می کنم به سر خط:

jadi@jubung:~/Desktop$ sed -e "s/\s+[+]*\s*/\n/g" only_hesab_and_pass > har_password_yek_khat
jadi@jubung:~/Desktop$ head har_password_yek_khat 
رمز مخفي , شماره کارت
رمز مخفي , شماره کارت
رمز مخفي , شماره کارت 6273531000000002,73251531609013
6273531000000087,42984601252954
6273531000000105,90683196772477 6273531000000145,14810051866743
6273531000000146,61558146155078
6273531000000150,14869351127492 6273531000000151,87078051710776
6273531000000201,17221491685028
6273531000000222,32833487680537 6273531000000232,06865382135692
6273531000000232,69595659033276

راستش درست نفهمیدم چی شد! درست کار نکرد ولی بد هم نبود… حالا یک قدم دیگه باید تیکه تیکه کنم این فایل رو. فاصله ها رو به سر خط تبدیل می کنم‌ (:

jadi@jubung:~/Desktop$ sed -e "s/ /\n/g"  har_password_yek_khat > har_password_yek_khat_2
jadi@jubung:~/Desktop$ head -20 har_password_yek_khat_2 
رمز
مخفي
,
شماره
کارت
رمز
مخفي
,
شماره
کارت
رمز
مخفي
,
شماره
کارت
6273531000000002,73251531609013
6273531000000087,42984601252954
6273531000000105,90683196772477
6273531000000145,14810051866743
6273531000000146,61558146155078

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

jadi@jubung:~/Desktop$ grep  ".," har_password_yek_khat_2 | sed "s/^.*,//" > all_passwords
jadi@jubung:~/Desktop$ head all_passwords 
73251531609013
42984601252954
90683196772477
14810051866743
61558146155078
14869351127492
87078051710776
17221491685028
32833487680537
06865382135692

حله (: ببینیم چند تا پسورد داریم:

jadi@jubung:~/Desktop$ wc -l all_passwords 
118499 all_passwords

صد و هجده هزار عدد چهارده رقمی داریم که پسوردها توشونه. حالا می ریم سراغ بررسی نظریه اصلی:

مردم احتمالا سال تولدشون رو به عنوان پسورد می ذارن.

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

#!/usr/bin/perl

while ($userinput =  ) {
	chomp ($userinput);
	for($i = 0; $i <= 10 ; $i++) {
		print  substr $userinput, $i, 4;
		print "\n";
	}
}

این برنامه ورودی رو می خونه و قسمت های چهار رقمی رو ازش جدا می کنه:

jadi@jubung:~/Desktop$ echo "73251531609013" | ./find_numbers.pl 
7325
3251
2515
5153
1531
5316
3160
1609
6090
0901
9013

درست کار می کنه پس برنامه رو کامل می کنم:

#!/usr/bin/perl

@passes = ();
for($i = 0; $i <= 9999 ; $i++) {
	$passes[$i] = 0;
}


while ($userinput =  ) {
	chomp ($userinput);
	for($i = 0; $i <= 10 ; $i++) {
		$thispass = substr $userinput, $i, 4;
		$passes[$thispass] += 1;
	}
}

for($i = 0; $i <= 9999 ; $i++) {
	print $i, ",",$passes[$i],"\n";
}

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

jadi@jubung:~/Desktop$ cat all_passwords | ./find_numbers.pl  > all_passwords_charts
jadi@jubung:~/Desktop$ head all_passwords_charts 
0,163
1,150
2,135
3,122
4,137
5,141
6,123
7,138
8,122
9,133

حالا که اینها رو داریم کافیه بریم سراغ برنامه LibreOffice برای کشیدن نمودارها. مثلا این نمودار اول است:

دیده می شه که یک جاهایی پیک داریم. بذارین یک سورت هم بکنم به ترتیب فراوانی و یک نمودار دیگه از صد تا از پرکاربردترین ها بکشیم ببینیم چی در می یاد.

اوه! نظریه دوستمون تقویت شد: مردم از سال تولد برای پسوردها استفاده می کنن (: واضح بود ولی خب از این بازی لذت بردیم و تازه یک نظریه رو هم هرچند کم،‌ تقویت کردیم. همینطوره ترکیب های «خوش دست» روی کیبورد (:

نظرتون چیه برای اختتامیه یک آمار هم بگیریم از تعداد ارقام؟ مشخصه که یک تغییر کوچیک در برنامه است فقط:

#!/usr/bin/perl

@passes = ();
for($i = 0; $i <= 9 ; $i++) {
	$passes[$i] = 0;
}


while ($userinput =  ) {
	chomp ($userinput);
	for($i = 0; $i <= 13 ; $i++) {
		$thispass = substr $userinput, $i, 1;
		$passes[$thispass] += 1;
	}
}

for($i = 0; $i <= 9 ; $i++) {
	print $i, ",",$passes[$i],"\n";
}

و نتیجه:

jadi@jubung:~/Desktop$ cat all_passwords | ./find_numbers.pl  > all_digits
jadi@jubung:~/Desktop$ cat all_digits 
0,157054
1,180318
2,169604
3,175258
4,166898
5,169252
6,162562
7,158727
8,160099
9,159214

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

رادیو گیک شماره ۲ – از فضا و فراسوی فضا

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

شماره دو رادیو گیک (بیست و سه مگ و سی و سه دقیقه) را از اینجا بشنوید:

[audio:http://jadi.net/audio/jadi-net_radio-geek_002_space-and-beyond.mp3]

یا از اینجا دانلود کنید و اگر به دلیلی نامشخص، کشورتان رادیوگیک را سانسور می کند، از در پشتی وارد شوید (:


آرس اس اس رادیو گیک

اخبار

توروالدز می گه «همینجا صبر کنین… همینجا صبر کنین!»

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

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

داستا تمام! کامپتیبیلتی باینری از هر کاری که پچ تو می کنه مهمتره. اگر حرف زدن رو ادامه بدی از آدم ها خواهم خواست که کلا پچ های بعدی ات رو هم ندیده بگیرن.

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

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

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

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

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

دوران پی سی ها به انتها رسیده

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

پی سی پایه رشد شرکت ماکروسافت بود و هنوز هم اصلی ترین منبع درآمد این شرکت آفیسی است که برای این کامپیوترها عرضه می کنه. روز چهارشنبه اوزی در یک کنفرانس گفت که «مردم می پرسن که آیا ما در دوران پست-پی سی هستیم؟ این چه بحثیه؟ معلومه که در دوران پست پی سی هستیم. این معنیش این نیست که پی سی می میره بلکه معنی اش اینه که کاربری اش عوض می شه و ما دیگه بهش نخواهیم گفت کامپیوتر شخصی بلکه اسم های دیگه ای پیدا می کنه». برنامه نویس ۵۶ ساله که شخصا برنامه لوتوس نوتز رو نوشته توسط بیل گیتس به شرکت دعوت شد تا مشکلات رو کشف کنه و راه آینده رو پیش پای مایکروسافت بذاره حرفش رو با این جمله تموم می کنه: «ویندوز هشت شاید کمک کنه تا ما پلی بزنیم به دنیای پست-پی سی اما به هرحال مردم دارن به دستگاه های قابل حمل غیر ویندوزی بیشتری رو می یارن و دوران دوران تلفن ها و پد ها است و دستگاه های همه منظوره – کامپیوترهای رومیزی – در حال کم رنگ شدن هستن».

امنیت

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

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

البته نترسین.. هنوز کسی توی خیابون اطلاعات شما رو نمی خونه…

اخبار رو تموم می کنیم و می ریم سراغ بخش در اعماق که نگاهی داره به چیزهایی کمی عمیق تر

در اعماق

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

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

و خبر عمیق تر دوم، درمورد CCTV است. جامعه پلیسی و همه که زیر نظر هستن. اصل خبر اینه: توی انگلستان توی پمپ بنزین ها دوربین مدار بسته نصب می شه. خب تا اینجا عجیب نیست.. حداقل برای مایی که وقتی می ریم پمپ بنزین تا حلقمون تابلو می بینیم که «اینجا شلوغ نکنید چون دوربین های پیشرفته داریم و همه رو می کشیم» اما جایی جریان دیگه برای ما هم عجیب می شه که خبر اضافه می کنه این دوربین ها به شکل خودکار پلاک ماشین ها رو می خونن و در دیتابیس چک می کنن و اگر کسی خودرو اش رو بیمه نکرده بود، پمپ بنزین براش قفل می شه و نمی تونه بنزین بزنه!!! وات د فلان! واقعا داریم می ریم سمت ۱۹۸۴؟

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

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

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

[موزیک ورود!]

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

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

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

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

هکرها

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

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

و حرف آخر.. موسیقی…

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


شماره دو رو از اینجا دانلود کنید و اگر به دلیلی نامشخص، کشورتان رادیوگیک را سانسور می کند، از در پشتی وارد شوید (:


آرس اس اس رادیو گیک

داون شدن کلاود ویندوز آزور به خاطر باگ سال کبیسه

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

حالا این کلاود شش ساعت داون شده. چرا ؟ چون یک باگ باعث شده در شمارش سال کبیسه (که در تقویم غربی دیروز بوده) اشتباه کنه (: و این باگ هایی هستن که ما می بنیم (:

باگ توی برنامه نویسی طبیعی است ولی چیزی که به خودش می گه سرور کلاود واقعا ضایع است باگ تقویمی داشته باشه در حدی که داون بشه (: البته کماکان به نظر باگ تقویم آیفون که باعث می شه اول و دوم ژانویه زنگ نزنه ساعتش ضایع تره چون دو سال تکرار شده (:

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

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

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

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

کتاب «اصول برنامه‌نویسی» که یک کتاب الکترونیکی ۷۹ صفحه‌ای است، توسط یکی از فعالان CodeBetter منتشر شده. کلیت مطالب کتاب راجع به مفاهیم نسبتاً جدید تولید نرم‌افزار مثل Persistence، DI، DDD، Unit Test و غیره است. نویسنده در ابتدای کتاب اظهار داشته که این کتاب برای پشتیبانی از حرکت ALT.NET نوشته شده است. این کتاب همچون خود ALT.NET بیشتر روی مفاهیم و تکنیک‌ها مانور می‌دهد چون معتقد است برنامه‌نویسان به اندازه کافی به API دات‌نت مسلط شده‌اند پس حالا وقت آن است که اصولی‌تر برنامه بنویسند.

با دیدن بخش‌های اول کتاب ممکن است فکر کنید یک کتاب کلاسیک «مهندسی نرم‌افزار» را باز کرده‌اید. اما کتاب کار زیادی به تئوری ندارد و بلافاصله به مثال‌ها، نمونه‌ها و ابزارهای عملی می‌پردازد. البته واقعیت این است که می‌شود این کتاب را یک کتاب «مهندسی نرم‌افزار» عملی نامید. چون با معرفی تکنیک‌ها، روش‌ها و ابزارهایی به شما کمک می‌کند تا همان اصول فراموش شده «مهندسی نرم‌افزار» را عملاً به کار گیرید.

عناوین فصول کتاب:
۱- ALT.NET: معرفی جبهه ALT.NET و تفاوت آن با MSDN Way
‫‫۲-‫ Domain Driven Design: معرفی الگوی DDD‎
‫۳- ‫Persistence: ارتباط با دیتابیس و ذخیره داده‌ها‎
‫‫۴-‫ Dependency Injection: معرفی و ابزارها‏

۵- Unit Testing: تست واحد
۶- Object Relational Mappers: معرفی و استفاده از NHibernate
۷- کار با Memory به طور اصولی
۸- مدیریت Exceptionها
۹- Proxy و استفاده از آن
۱۰- جمع‌بندی

تاریخ این کتاب ۲۰۰۸ بوده و کمی قدیمی می‌باشد. اما با این وجود خواندن و به کارگیری آن به همه برنامه‌نویسان توصیه می‌شود.

چرا گنو/لینوکس رو دوست دارم: نقشه استان‌هایی از ایران که رفته‌ایم

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

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

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