آی کافی ؛ سایتی برای قهوه دوستان

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

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

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

«قهوه و ادبیات» از دیگر دسته‌های آیکافی‌ست که در آن به اشعار و داستان‌هایی که به نوعی با قهوه مرتبط هستند پرداخته شده است.

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

گردانندگان سایت درباره اهداف راه‌اندازی این پایگاه اینترنتی می‌گوید: «قهوه در فرهنگ عمومی ایرانیان همیشه در سایه رقیب سنتی خود٬ یعنی چای قرار داشته. همین باعث شده چنان که شایسته است٬ در فضای اینترنت فارسی به آن پرداخته نشود. در آیکافی تلاش خواهیم کرد مطالب خواندنی برای علاقمندان به قهوه٬ کافی‌شاپداران٬ تجار قهوه و دست‌اندرکاران این صنعت ارائه دهیم.»

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

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

چه کسی بازی‌های کامپیوتری را کشت؟

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

چه کسی بازی های کامپیوتری را کشت

نوشته تیم راجرز

ترجمه جادی

کوچکترین مرد داشت در مورد چرخه‌ های درگیر کننده حرف می‌زند.

او گفت «به این یکی نگاه کنید» و با یک کلیک صفحه اسلاید را عوض کرد. چند نفر پرسیدند «نظر خودت چیست؟»

«خب.. اوم… من این یکی را از همه بیشتر دوست دارم». یکبار دیگر کلیک کرد. بعضی از چرخه‌های قبلی بسیار بیخود بودند اما حالا این یکی به نظر جذاب می‌رسید. اسلاید فعلی توضیحات بیشتری داشت.

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

«پس بعد از نیم ساعت یک نوتیفیکیشن خواهند گرفت. تلفن می لرزد یا زنگ می‌زند و می‌گوید که فلان ثمر داده و بهمان آماده برداشت است؟»

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

«آن ها اپلیکیشن بازی را اجرا می‌کنند و فلان و بهمان را جمع می‌کنند.

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

«بخش مهم همینجاست. وقتی فلان و بهمان را برداشتند، ۱۲۰ سکه جمع شده. جایزه ای که برای بالا رفتن لول گرفته اند اما ۲۵۰۰ سکه است – بسیار بیشتر از جایزه صبر کردنشان برای جمع آوری چیزها. حالا به مغازه می‌روند. چیزهای جدیدی هست برای خریدن. ارزش آن ها تقریبا ۲۲۰۰ سکه است. بعد از خرید سکه‌های کمی برایشان باقی می ماند شاید چند صد تا. این عمدی است.

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

«وقت آپگرید است. احتمالا ۲۲۰۰ سکه و حالا چیزشان می تواند به جای ۱۰۰۰ سکه قبلی، ۲۰۰۰ سکه در ساعت تولید کند. بخش ریاضی مغز این را می بیند و با خودش می گوید : این دو برابر چیزی است که قبلا در می آوردی. همه عاشق دوبرابر شدن درآمد ها هستند. ما دنیای بازی ها را کنترل می کنیم و دوبرابر شدن هایش را. ما بازیکن را کنترل می کنیم.

«بازیکن کاملا درگیر شده

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

«اگر بتوانید برای یک روز درگیرشان کنید، برای دو روز هم می توانید

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

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

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

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

«سکه های ویژه، هر بیست تا یک دلار فروخته می شوند.

مرد بزرگتر گفت «همین که بیست سکه ویژه را بخرند، حداقل بیست تای دیگر هم خواهند خرید.

یکی از حاضران سکوت طولانی را شکست. غبغبش به حرکت در امد و گفت «چطور این را می گویید؟»

«همکارم توضیح می دهد»

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

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

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

حالا مرد بزرگتر مرا ستایش می کند. من قرمز می شوم «او استاد برقراری تعادل در چیزها است. او الگوریتمی درست می کند که کاملا زیرکانه منحنی هزینه کردن بیشتر و بیشتر وقت و پول در بازی را از چشم مردم پنهان می کند.»

«چیزی که ما می گوییم» مرد کوچکتر است که حرف می زند «این است که بقیه بازی هایی طراحی می کنند که اگر کسی برای یک هفته بازی کرد، سه ماه در ان بماند ولی ما چیزی درست می کنیم که مردم شش ماه در آن بمانند اگر فقط سه روز جذبشان کنیم. ما مشغول طراحی یک چرخه درگیر کننده هستیم. قابل اثبات با ریاضیات. آدم ها برای کاراکترهای جذاب سری به ما خواهند زد و …»

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

جادی بودم از وبلاگ کیبرد آزاد که این رو براتون خوندم.
برای خواندن کامل کتاب، به http://bit.ly/fangvideogames مراجعه کنید.

گربه‌هایی برای اچ تی تی پی

گرلی مک (@) دو تا از اصلی‌ترین چیزهای اینترنت رو با هم قاطی کرده تا مشهورترین فتوشاپ‌کار این روزهای شبکه بشه: گربه‌ها و اچ تی تی پی.

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

اما HTTP Headerها یا همون هدرهای اچ تی تی پی چی هستن؟ اچ تی تی پی، پرتکل اصلی وب است. یعنی روشی که کامپیوترها وقتی می خوان صفحات وب رو به همدیگه نشون بدن، ازش استفاده می کنن. این پروتکل مثل همه پروتکل‌های دیگه یک «سر» یا Head داره که توش دو تا کامپیوتر مستقل از اینکه اطلاعات مورد نظر چیه، خودشون رو با هم هماهنگ می کنن. مثلا شما که الان دارین اینجا رو می خونین (حالا با صرف نظر از جینگولک بازی‌های آنتی فیلتر) به مرورگرتون گفتین به فلان آدرس بره. اونم به سرور من یک درخواست HTTP فرستاده و توی بخش هدر گفته که اصولا چی می خواد. چیزی شبیه به این : GET / HTTP/1.0 که می گه براوزر شما نسخه اول اچ تی تی پی رو می فهمه و درخواست می کنه که صفحه اول رو بگیره. حالا نوبت منه که جواب بدم. اگر همه چیز درست باشه می گم:‌ HTTP/1.0 200 OK یعنی من هم نسخه ۱ رو می فهمم و اوکی است دارم صفحه رو می فرستم.

می بینین که هر جواب یک عدد داره که یک معنی داره. ۲۰۰ یعنی اوکی. عدد مشهور ۴۰۴ هم یعنی این صفحه پیدا نشه. بقیه رو گربه های ابتکاری گرلی مک توضیح می دن!

[nggallery id=1]

(اگر توضیح فنی تر می می خواین مراجعه کنین به مدخل اچ تی تی پی در ویکیپدیای فارسی)

شبیه لیلیت بازی بوردلند هستید؟ استخدام شوید

بازی بوردرلندز یک بازی First Person Shooter با داستانی علمی تخیلی است که رگه‌هایی از RPG آن را جلو می‌برد. این بازی توسط شرکت GearBox برای پلی استیشن ۳، ایکس باکس، ویندوز و مک عرضه شده و حالا قرار است نسخه دوم آن هم به بازار بیاید.

این بازی با چهار شخصیت اصلی قابل بازی کردن است که یکی از آن‌ها لیلیت نام دارد:

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

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

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

شرکت گیرباکس برای عرضه نسخه دوم این بازی و تبلیغ آن به دنبال کسی می‌گرد که چهره و اندامی بسیار شبیه لیلیت داشته باشد. شروط اینها هستند:

  • زنی بین هجده تا سی سال
  • توانایی آمدن به دالاس تگزاس در سه هفته اول دسامبر و سر فیلمبرداری حاضر شدن
  • نیازی به سابقه هنرپیشگی نیست

می‌توانید با رفتن به این صفحه برای این شغل جذاب اپلای کنید.

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

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

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

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

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

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

هکرهای سیل تایلند

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

آلبوم تامبلر هک‌های سیل تایلند مجموعه‌ای است از این هکها. فوق العاده جذابن (:

کشف رابطه مثبت مصرف مواد آدم های سی ساله و ضریب هوشی بالاشون در کودکی

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

یک مطالعه جدید در بریتانیا می‌گه که آدم‌هایی که در دوره کودکی آی.کیوی بالاتری از بقیه داشتن احتمال بیشتری داره که در بزرگسالی مواد مصرف کنن. این مطالعه روی چند هزار نفر آدم بالغ انجام شده که در ۵، ۱۰ و ۱۶ سالگی ضریب هوشیشون سنجیده شده بود و حالا در ۳۰ سالگی ارتباط اون با مصرف مواد رو می‌سنجیدن.

تحقیق نشون داد که مردهایی که در بچگی آی.کیو بالا داشتن، دوبرابر بیشتر از بقیه احتمال داره از مواد غیرقانونی استفاده کنند. این آمار در دخترها سه برابر است. ضریب هوشی بالا، از ۱۰۷ تا ۱۵۸ تعریف شده در حالی که متوسط ضریب هوشی، ۱۰۰ در نظر گرفته می‌شه.

دلیل این موضوع به طور کامل مشخص نیست ولی چیزهایی مثل «جرات آزمایش چیزهای جدید یا جستجو به دنبال احساسات متفاوت» به عنوان دلایل احتمالی مطرح شدن.

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

منبع: سی ان ان

مسایل ریاضی یهودی ها

تقدیم به گیک ریاضی کیبردآزاد؛ شهریار و همه طرفداران آزادی حق تحصیل

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

این جریان توی شوروی هم بوده و کتابخونه دانشگها کرنل یک مقاله جالبی منتشر کرده در اینباره که اسمش هست Jewish Problems یا «سوالات یهودی‌ها».

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

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

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

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

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

توجه: دادن این سوال‌ها به یک نفر که از جریان مطلع نیست بامزه نیست (: مریضی مردم آزاری است (: