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

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

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

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

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

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

در قدم اول همه صفحات بانک تجارت رو باز می کنم، با 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

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

  • حسین

    تازه اگر سال تولد به میلادی رو هم در نظر بگیری احتمالا نتایج مشابهی بده

    • جادی

      حسین: اینجا چیزی رو در نظر نگرفتیم. فقط آماره و نتایجش. همه عددهای ممکن رو شمردیم

  • عالی بود.حالا به نظرت این می تونه صحت ادعای طرف رو هم تقویت کنه.البته انگار دیگه همه قبول کردن صحتش رو.

    • جادی

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

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

      • بله.منظورم همون دزست بودن پسوردهاش بود.بله خوب البته به اطلاعات بیشتری نیاز داره.برای برداشت فیزیکی از ای تی ام که نیاز به کارت داره و برای پرداخت اینترنتی هم که سی وی وی 2 و تاریخ انقضاء کارت رو لازم داره.البته جایی هم اعلام نکرده که این موارد رو هم نداره.ضمنا رمز اینترنتی با رمز کارت فرق می کنه در اکثر مواقع.

  • مجید

    عالی بود.
    اگر چند تا کد همون اول هم بزنی که کل صفحات رو بیاره و کار رو از HTML ها شروع کنی که عالی‌تر می‌شه!

    • جادی

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

  • آرش

    بامزه این هست که اونهایی که ازشون انتظار میره اطلاعات عمومی در حوزه آی تی بیشتر داشته باشند
    از همه کمتر دارند پس؟!

    بین 57 تا 64. حالا از متولدین 1300و بوق میشد انتظار داشت به خاطر کم حواسی و بی اطلاعی

  • محمد

    عالی!لذت بردم.لذت گیکی!:)

  • خوشحالم که به sed رو آوردی. می‌شد یه طور دیگه جلو رفت:

    cat melli-bank-cards.html | sed -n -e 's_\([0-9]\{16\}\),\([0-9]\{14\}\)[ +]*_\1\t\2\n_gp' | sed -e '/^$/ d' -ne '/\t[0-9]*13[5678][0-9]\+/p' | wc -l

    بعد این که این رو هم بگم که من فایل html رو cat کردم پس می‌شه به جاش از wget -O – هم استفاده کرد.

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

    • جادی

      تو اکسل قسمت های اول رو نمی شه. از یک جایی به بعد می شه بره تو اکسل. اولش با یک فایل متنی طرفی که چند تا خط نزدیک به یک میلیون کاراکتری داره (: در اصل اینها رو باید در یک ادیتور متن خوب انجام داد. تو ویندوز چیزهایی مثل ++notepad شاید مفید باشن.

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

      • اتفاقاً خیلی سریع میشه قسمتهای اول رو رفت… من همین الان امتحان کردم خودم… کل داده رو تو یک سلول! کپی کردم و با ابزار text to column و ابتدا براساس “+” و “,” و سپس طول 16 تایی شماره کارت، تقسیم بندی کرده و عدد 14 رقمی رمزدار رو استخراج کردم… به کمک فرمانهای mid و شمارشهای 4تایی، احتمالهای 4 رقمی رو استخراج کردم و به کمک Countif هم تعداد تکرارهای اعداد رو بدست آوردم
        برای بخش دوم تحلیل هم مراحل بالا رو برای شمارشهای تکی (بازهم Mid!!) بدست آوردم و تکرار تک عددها رو بدست آوردم

        اصلاً دوست ندارم این یکی رو امتحان کنم ولی بنظرتون میشه الگوریتم پسوردسازی این بنده خدا رو هم استخراج کرد؟ یعنی براساس رشته های شامل اعداد پر شمار مانند 1359 و 1360 و .. بگیم که رشته های محتمل از چه الگویی تبعیت میکرده اند… ؟؟؟؟

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

        • جادی

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

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

  • نه من فقط در حالتی میتونم اینکار رو با سرعت انجام بدم که فقط محدوده اعداد (ونهایتاً سطر اول رو به همراهشون کپی کنم) برای کل مجبور میشم که از چندین سلول استفاده کنم… گوگل کردم و دیدم نهایت تعداد کاراکتر هر سلول میتونه داشته باشه 32767 کاراکتر هست… در نتیجه به حداقل 40 سلول برای تجزیه هر صفحه اطلاعات نیاز دارم که کاری مشکل میتونه باشه (باید دقت کنی که کراس اور هم نکنی !!!) که البته با Notepad++ تازه یکم مسیر تسهیل میشه…
    اسمایلی بیل گیتس با عرق شرم بر پیشانی

  • Wahid

    سلام
    خسته نباشی خوب بود جادی!
    راستی چرا دکمه +1 رو نمیبنم؟

  • امین

    : ))) آورین آورین!
    با این آقا مسعود هم بگین همینجا آموزش اکسل بده برا ما : |

  • راستی باید سال تولد قبل از ۱۳۵۰ رو هم حساب کردا!

  • hisitech

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

  • سلام جادی ، رمز هایی که لو رفتن ، رمزهای ccv2 هستند که با رمز اصلی کارت و رمز اینترنتی متفاوت اند ، این رمزها که تو خرید اینترنتی کاربرد دارند ، توسط کاربران تعیین نمی شوند و همینطور بعدها کاربران نمی توانند آنها را تغییر دهند .
    رمز ccv یک عدد 3 یا جهار رقمی است که مانند تاریخ انقضا و شماره کارت بر روی کارت حک می شود و بار امنیتی آن بالا نیست .
    هر چند نتایجی که به دست آوردی ، جالب هستند ولی کاملا تصادفی اتفاق افتاده .

    • رمزها همون رمز اول (رمز برای استفاده از ATM و POS) هستن.

  • موبد

    جادی جان یه سوال و یه گله و یه پند(!):

    سوال: جریان این پسوردا چیه اصلاً؟ جرا اینا به صورت متن توی site نوشته شدن؟

    گله: چرا اینو نوشتی برای تعریف از gnu/linux؟ grep و sed که از اوّلین نسخۀ Unix (نوشتۀ Ken Thompson) وجود داشت!

    پند: grep و sed و gedit و Perl و Excel رو فراموش کن. همۀ این کارا رو با vi یا از اون تمیزتر با vim می شد انجام داد. البته نمودار رو نمی کشید دیگه ولی اگه با Emacs کار می کردی (که من بمی رم هم اینکارو نمی کنم) شاید اونم حل بود ؛-)

    • جادی

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

      ۲- من یک تگ دارم به اسم چرا گنو/لینوکس رو دوست دارم و این تیپ چیزها رو توش می نویسم. اکثرش بر می گرده به پروژه گنو ولی خب همه زیر همون تگ هستن و مطلب های این تیپی توشونه.

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

  • خیلی جالب بود جادی ، تنها گفتنی ای که به نظرم میرسه اینه که برای تبدیل به سر خط با همون gedit هم میشه کار رو انجام داد چیزایی مثل “n\” و “t\” رو به زیبایی پشتیبانی میکنی توی Search و Replace

    • جادی

      بله بله. کلا یکی از موارد استفاده همیشگی است برای من. در ضمن یک قدم بریم سمت کی دی ای و مثلا از kate استفاده کنیم دیگه رجکس ریپلیس کامل داریم. مشخصه که وی آی هم هست (: راه ها زیاده (:

  • همایون

    سپاس! بسیار زیبا، اون چیزی که در ذهنم بود شبیه همین کار تو بود. که خب تو همتت بیشتر بود و البته سریعتر هم بودی!‌ :)

  • rfdfsf

    سلام جادی!برنامه نویسی پرل رو سریع میتونم یاد بیگرم چون قبلا با سی باگ دوست سر و کله زدم…. اما به نظرت برای یادگیری این grep و….. اینا چی بخونم؟؟؟جدی با دستور های لینوکس آشنا نیستم…

    • جادی

      مهم اینه که بدونی برای چه کارهایی دستور هست و بعد فقط کافیه بتونی راهنما رو بخونی man esme_dastoor کاملترین راهنمای دستورها رو نشون می ده. همین مجموعه چرا لینوکس رو دوست دارم من رو ببینی تقریبا همه دستوراتی که من استفاده می کنم توشون هست (:

  • rfdfsf

    اون راهنما ها به نظرم خیلی سخت و بغرنج و زبان انگلیسی خشک هستند..این طور نیست؟؟؟؟

  • بابک ق

    با توجه به اینکه اثبات کردی سال شمسی (احتمالا سال تولد، شایدم سال تولد بچه‌ات) بیشترین گزینه برای انتخاب پسورد است. پیشنهاد می‌کنم تمام اعداد چهار رقمی که ۱۳ دارند و با ۱۳ شروع نمیشوند را از لیست خارج کنی. به نظرم در این حالت یک تصویر جالب‌‌تری از پسوردهای مورد علاقه به دست می‌آید. مثلا ۲۰۲۰ برای من خیلی جالب بود.

    • جادی

      ایده جالبی بود. راست می گی باید انجام می شد.. الان دیگه فدای سرمون ولی دید قشنگی بود به آمار که لذت بردم. مرسی.

  • البته تيتر را بهتر بود ميگذاشتى: چرا رياضى را دوست دارم
    D:

  • jamish

    خوبه. اما به دوست عزیز باید بگم (اگرچه خودم هم لینوکس دوست دارم) اما این حرکت که هر کاری کردی بگی چقدر لینوکس خفنه هم لوس شد. این کار را به راحتی تمام می توان در نرم افزار Matlab انجام داد. هر چیز را هم بهر کاری ساختند.
    + فرض نویز سفید برای کُد کردن هم فرض خوبی نیست

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

    در همین زمینه یک بلاگ نوشتم که خوشحال می شم بخونید.
    http://1b1t.wordpress.com/2012/04/23/scraping-hanselminutes-podcast-with-powershell

  • محسن

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

  • Tox

    آقای نوری پاورشل شاید بشه با کمی اغماض با شل لینوکس قیاسش کرد ولی شما نکته اصلی رو نگرفتین:
    مسئله در ماژولار بودن همه ابزارهای اصلی و غیراصلی لینوکس هست. شما مثلا میتونین فتوشاب رو بیارین توی پاورشل؟؟؟
    شما میتونین از توی پاورشل به سطح بالاترین دستورات سیستمی/کاربردی/مدیریتی/شبکه ای/ و … دسترسی داشته باشین؟؟؟
    آیا همه برنامه هائی که روی ویندوز نصب میشن قابلیت استفاده در پاورشل رو دارن؟؟؟

    قدرت لینوکس در همین فلسفه پوزیکسیش هست

  • دوست عزیز، نمی خوام اینجا طوری عنوان بشه که من نماینده مایکروسافت هستم، اما واقعا این چیزایی که می گید، همه امکان پذیر هستند.
    پیاده سازی PowerShell این امکان رو به **هر برنامه ای** در ویندوز می ده که میزبان PowerShell باشه. برای مثال Visual Studio. برای این کار کافیه که یک سری رابط ها در این برنامه پیاده سازی بشه که میزبان بتونه خروجی رو رندر کنه.
    اما بزرگترین مزیت PowerShell پیاده سازی اون بر اساس دید شی گرا است که خروجی هر Cmdlet در Pipeline به صورت یک شی هست. (بر خلاف Shell های دیگه که تنها به خروجی متنی و رشته ای اکتفا می کنن). درسته که شاید برای یادگیری اون کمی زمان بیشتری نیاز باشه (اگه شما از .Net اطلاعاتی نداشته باشید) اما وقتی که اون رو یاد بگیرین می تونید به واقع **هر کاری که خواستید** در این شل انجام بدید.
    مثلا می تونید به راحتی یک برنامه بر اساس WindowsForm یا WPF در شل بنویسید که کامل کار کنه.

    در نهایت یک مثال براتون میارم. اسکریپت زیر، فید RSS وبلاگ شما رو دانلود می کنه، سپس عنوان، لینک و تاریخ اون رو در یک جدول نمایش می ده.

    ([xml](New-Object net.webclient).DownloadString(“http://feeds.feedburner.com/radiojadi”)).rss.channel.item | Format-Table title,link,pubDate

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

    • جادی

      دو تا بحث هست:

      ۱- اینکارها *بخصوص این کار خاص در این مطلب* رو تقریبا به هر چیزی می شه انجام داد. از یک ادیتور متن تا اکسل تا فقط یک اسکریپت تا متلب. این نوشته ها اصلا منظورشون این نیست که من چون پشت لینوکس هستم می تونم اینکارها رو بکنم. من شخصا اگر پرل داشته باشه و چند تا ابزار دم دستی (مثلا من همیشه از image magic استفاده می کنم و گاهی از زبون dot) خب واقعا سیستم عامل فرق خاصی برام نمی کنه. اما اینا رو به این معنی می نویسم که من از لینوکس لذت می برم با این چیزها و این چیزها برام شبیه فکر کردن توی استاندارد پوزیکس هستن: دقیقا این مطلب نشون می ده: همونطور که فکرم کار کرده قدم به قدم ابزارهام اجراش کردن.

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

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

  • به نظر من این مسائلی که مطرح می کنی، به طور عمده به لینوکس مطرح نمی شه. بلکه به شرکت ها/اشخاص سازنده برنامه مطرح می شه که نرم افزار های تحت لینوکس رو (با اون تفکری که تو دوست داری) می نویسن. استاندارد هایی که در این چند کامنت و خود مطلب اشاره کردی، قسمت اصلیشون مربوط به سیستم عامل نیست.
    خیلی مواقع، در یک وبلاگ، یک ویدئو از مثلا رابط کاربری لینوکس که با یک برنام تغییر کرده (مثلا 3 بعدی شده) نمایش داده می شه و اون رو به قدرت لینوکس ربط می دن. باید دونست که این چنین برنامه هایی در هر سیستم عامل عمده در جهان قابل نوشتن هستند و به واقع نماینده قدرت سیستم عامل نمی تونن باشن.
    من فقط خواستم اشاره کنم که، چون اینجا بحث شل و اسکریپت نوشتن مطرح شد، بگم که به نظر من PowerShell که چند ساله با ویندوز عرضه می شه، نه تنها از شل های تهت لینوکس ضعیف تر نیست، بلکه قویتر هم هست. می شه گفت که در حال حاضر قویترین شل موجوده. دلیلش هم واضحه، چون با یک سرمایه بزرگ، با دقت، و با استفاده از تجربه شل های قبلی (که شل های لینوکس هم جزء اونا هستند) طراحی و پیاده سازی شده. همونطور که C# با استفاده از تجربیات C++ و Java تونست موفق بشه و F# از زبان های Functional استفاده کرد.
    من با بحث سلیقه کار ندارم، مطمئنا هر کسی می تونه از یک چیزی خوشش بیاد. اما واقعا مایکروسافت رو نباید به چشم یک شرکت پلید دید، فقط بخاطر این که پول نرم افزارش رو می گیره. من یک برنامه نویس هستم و نمی تونم از پول برنامه ام بگذرم. البته منظورم شما نیستید. اینو اینجا مطرح کردم بخاطر این که خیلی ها که از لینوکس خوششون میاد، همچین دیدی دارن.
    موفق باشید.

  • Pingback: چرا آزادی رو دوست دارم: فراوانی حروف فارسی در یک متن()