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

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

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

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

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

در سوتی جدید بانک مقصر کیه؟‌ نگاهی به نقش‌های مرتبط

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

variz

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

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

مشاور پروژه

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

مشاور فنی بانک

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

مدیر پروژه

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

تیم/شرکتی که کار رو قبول کرده

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

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

گروهی که کار رو به این گروه دادن

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

سیستم نرم افزاری کشور

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

حالا چیکار کنیم؟

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

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

به نظرتون از چه نقش هایی دیگه می تونیم حرف بزنیم؟ ناظر کیفی؟ کنترل کیفیت؟ تست امنیت؟

شغلمون شده مواظب کلاهبردارها بودن؛ مواظب این یکی هم باشین که برای پرداخت جایزه رمز دوم می خواد

گیر سه پیچ اینو برامون فرستاده:

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

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

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

پ.ن. اون سایته این داره؟ (:

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

مهشاد برامون نوشته که داره سعی می کنه کل مجموعه تفسیر قرآن مهدس عبدلعلی بازرگان رو از سایت رسمی مهندس بازرگان دانلود کنه ولی چون ساختار سایت خیلی سنتی و صفحه صفحه طراحی شده، اینکار براش سخته و سایت هم جایی رو نذاشته که بتونیم کل جریان رو یکجا دانلود کنیم. با یک نگاه به صفحه مشخص می شه که از این لینک http://bazargan.com/abdolali/main0.html لینک شده به ۱۱۴ سوره و اونجا چندین فایل mp3 در صفحه هست که هر کدوم بخشی از درس های قرآن مربوط به تفسیر اون سوره هستن.

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

$ wget http://bazargan.com/abdolali/main0.html -r -l3 -c -np -k

سوییچ ها مشخص هستن. r برای دانلود ریکرسیو (تو در توی صفحات) ولی فقط تا سه لایه داخلی (l3) چون لایه اول که همین صفحه است، لایه دوم می شه صفحه ای که سوره ها توش هست و لایه سوم می شه فایل های mp3 و یک c هم اضافه می کنیم به معنی continue که اگر قطع شد وسطش راحت ادامه بدیم و یک np یعنی از جایی که هستیم بالاتر نمی خوایم بریم (no parrent).

روی اون سرور تقریبا پنج دقیقه بعد همه چیز دانلود شده:

$ tree -d -L 3 #فقط دایرکتوری ها و فقط سه لایه
.
└── bazargan.com
    └── abdolali
        ├── gifs
        ├── MP3
        ├── PDF
        └── video

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

$ du -hs bazargan.com/abdolali/MP3/
4.4G    bazargan.com/abdolali/MP3/
$ du -hs bazargan.com/abdolali/PDF/
184M    bazargan.com/abdolali/PDF/

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

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

پ.ن.۲. به مهندس ایمیل زدم و پرسیدم آیا مشکلی نیست که من فایل هاش رو به صورت تورنت پخش کنم. جوابشون این بود:

جناب جادي، با سلام و تحيت و تشكر از اطلاع دادنتان و رعايت وجداني حقوق ديگران، اما در مورد قرآن، حق شخصي وجود ندارد و كتاب خدا متعلق به همه است و هرگونه تسهيلي كه هركس دراين زمينه فراهم كند، موجب خوشحالي و تشكر هم خواهد بود
موفق باشيد
بازرگان

به مناسبت هشت مارس: وقتی از برابری حرف می زنیم، از چی حرف می زنیم

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

همیشه هستن کسانی که از برابری می ترسن و با شبه-استدلال مهمل «مگه می شه همه عین هم باشن؟» یا فیگورهای شبه-روشنفکری «من با هر ایسم‌ی مخالفم» یا کلا نفهمیدن جریان و گفتن اینکه «یعنی میگین مردها نوکر زن ها باشن؟» و حتی جملات مرتبط با اولین ترشح‌های هورمنی «من ضدفمنیسم هستم» بحث رو بی منطق می کنن ولی کلیت جریان خیلی خیلی ساده است:

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

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

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

مرتبط
سر پاتریک استوارت و حقوق زنان
یک چارت ساده: آیا شما فمنیست هستید؟
یک خبر براتون دارم…

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

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

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

ایده خبیثانه جالبیه ولی چرا اصولا از اول کبریت های کمتری توی جعبه نذاریم؟ اصولا اگر می شه اینجوری پول درآورد مطمئنا کشور ما جای بسیار مناسبی براشه.

من به کبریت مشکوکم

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

بسته ده تایی کبریت

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

کبریت توکلی

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

تصویر اولیه کبریت ها

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

جعبه های کبریت

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

kebrit = scipy.misc.imread(fileName, 1) # gray-scale image

و خروجی چیز شبیه این است:

تصویر کبریت قبل از پردازش تصویر

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

kebrit_smooth = ndimage.gaussian_filter(kebrit, 6)

حالا متغیر kebrit_smooth یک تصویر نرم شده از تصویر اصلی است:

تصویر با فیلتر گاوسی پردازش تصویر

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

tresh = 120
labeled, objectsNum = ndimage.label(kebrit_smooth < tresh)

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

tresh = 120
removeOnes = np.ones((3,3), dtype="bool8")
labeled, objectsNum = ndimage.label(kebrit_smooth < tresh, structure=removeOnes)

دقت کنین که اون استراکچر در اصل می گه حداقل تصویر قابل تشخیص من باید این باشه:

array([[ True,  True,  True],
       [ True,  True,  True],
       [ True,  True,  True]], dtype=bool)

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

پردازش تصویر نهایی نوک کبریت ها

و خب چنین خروجی متنی ای:

10boxes/IMG_2608.JPG , 29

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

#!/bin/bash

for f in *JPG
do
    ../count.py $f
done

و به خروجی زیر برسیم:

$ ./doall.sh 
IMG_2606.JPG , 35
IMG_2607.JPG , 30
IMG_2608.JPG , 29
IMG_2609.JPG , 32
IMG_2610.JPG , 29
IMG_2611.JPG , 33
IMG_2612.JPG , 36
IMG_2613.JPG , 38
IMG_2614.JPG , 37
IMG_2615.JPG , 38

وقتشه سراغ زبون مورد علاقمون R بریم. یک زبان تخصصی برای کارهای آماری و وررفتن با اعداد و ماتریس ها و رفیق رفقاشون. فایل رو می خونیم و بخش مورد نظر رو جدا می کنیم:

> tavakoli <- read.csv(file="results.csv",head=FALSE,sep=",")
> matches <- tavakoli[2]$V2

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

> summary (matches)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  29.00   30.50   34.00   33.70   36.75   38.00 

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

> hist(matches, xlim=c(28,42), ylim=c(0,4), main="هیستوگرام تعداد کبریت های توکلی در هر جعبه", sub="www.jadi.net", breaks=8)
> curve(dnorm(x, mean=mean(matches), sd=sd(matches))*10, add=TRUE, col="red", lwd=2) 

و روی این نمودار با کمی آمار احتمالات می تونیم احتمال اینکه در یک جعبه کبریت اتفاقی توکلی که خریده‌ایم و مدعی داشتن ۴۰ کبریت است، چهل یا بیشتر کبریت وجود داشته باشد را حساب کنیم:

> 1-pnorm(40, mean=mean(matches), sd=sd(matches)) #یک منهای سمت چپ نمودار نرمال در نقطه ۴۰ کبریت
[1] 0.03970968

بله. با اینکه کبریت توکلی مدعی است در هر جعبه اش تقریبا ۴۰ کبریت وجود داره، برنامه پردازش تصویر و نمودارهای نرمال ما نشون می دن که احتمال اینکه واقعا در یک جعبه کبریت توکلی چهل یا بیشتر کبریت باشه، سه صدم درصد بیشتر نیست

آمار شیرین است

نتیجه‌ها

۰- موسسه استاندارد و حقوق مصرف کننده خاصی نداریم یا هنوز این مساله رو ندیدن
۱- راکفلر باید بیاد پیش تولید کننده‌های ما لنگ بندازه
۲- آمار شیرین و فان است
۳- می تونیم با کارهای علمی بامزه هم تفریح کنیم هم چیز یاد بگیریم

مرتبط

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

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

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

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

تنها نکته جالبی که اینجا می شه گفت، ادامه بحث ویرانگی ایران ما است. در اون سر دنیا دو تا دانشجو وقتی به این نتیجه می رسن که موتور جستجو می تونه مفید باشه، پروژه دانشگاهی‌شون رو بدون هیچ حمایت دولتی و بودجه و … گسترش می دن و می رسن به شرکتی به اسم گوگل که توی پونزده سال به یکی از قطب‌های علمی جهان و یکی از موتورهای پیش‌برد علم و کعبه آمال آدم‌های فنی تبدیل می شه و نه فقط خرج خودش رو در می یاره که کلی پروژه از اینترنت بالنی و ماشین بدون سرنشین و عکسبرداری از تک تک خیابان های کشورها و نقشه های ماهواره ای و دادن فیبرنوری به منازل و … رو ساپورت می کنه و تبدیل می شه به یکی از پایه های اقتصاد جهانی. در حالی که در ایران عزیز ما باید مالیات و پول نفت من و شما رو به شکل یک رقم [برای ما] افسانه ای ۱۷۰ میلیاردی به یکی بدن تا تقلید همون کاری رو بکنه که در یک جای دیگه بدون هیچ هزینه خاصی به اونجا رسیده و در نهایت هم خروجی پروژه چیزی باشه که فقط به ضرب و زور سانسور و بستن همه دسترسی ها، بشه کسی رو سراغش فرستاد.راستی همزمان با خبر دادن ۱۷۰ میلیارد به موتورهای جستجوی ملی، آقای دینارودی نامی هم خبر از کاهش ۲۰۰ میلیارد تومانی بودجه غذا و دارو در سال ۹۴ داده.

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

دزدهای گرامی، لطفا با خواندن این متن دعای خیر مردم را همراه رفتگان خود و یک خانواده دیگر کنید

مدارک دزدیده شده

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

دو نفر بعدی احتمالا پدر و دختری بودن که پدر حوالی شصت سال داشت و دخترش مثلا سی یا سی و پنج. اینها به وضوح از یک کار اداری برمیگشتن چون دو تا دسته چک، حجم زیادی مدارک متنوع و عکس سه در چهار و غیره داشتن و یکی دو تا کاغذ که اسم هر دو توشون بود. پیدا کردن شماره اینها سخت تر بود. اول به کارت ویزیتی زنگ زدم که فامیلش با فامیل مرد یکی بود و مربوط می شد به یک وکیل توی تبریز. روی کارت ویزیت نوشته شده بود «برای عرض تبریک خدمت آقای [اسم آقا] – نوروز ۹۰». هیچ کدوم از شماره ها جواب ندادن.

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

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

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

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

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