بایگانی ماهیانه: مارس 2015

بازگشت به صفحه کلید کوئرتی

qwertyqwerty

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

هماهنگی با دیگران

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

باگ گنوم در صفحه کلید کوئرتی

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

اصلی‌ترین نوشتن من در دنیای فارسی است

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

بازی و فان

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

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

و تلاش شما نتیجه داد: اصلاح باگ ساعت ویندوز

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

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

«من می خوام برنامه نویس کرنل بشم، چیکار باید بکنم؟»

آرمان پرسیده:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

variz

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

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

مشاور پروژه

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

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

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

مدیر پروژه

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

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

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

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

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

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

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

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

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

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

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

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