ویر کارایی و مقیاس‌پذیری: کارایی نتیجه طلایی تنبلی!

اینم یه تجربه پراکنده دیگه!

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

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

با این مقدمه من سعی میکنم که در مورد کارایی بنویسم تا ببینم از این پست‌ها چقدر استقبال میشه!

همین!

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

لذت برنامه نویسی: اولین تجربه جدی من در وب به کمک django

اینم یه تجربه پراکنده دیگه!

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

وضعیت من این بود:

  • اولا ترجیحا باید توی سیستم لینوکس ران میشد
  • دوما اینکه من یه ذره بلد بودم با bootstrap و zurb foundation کار کنم
  • سوم اینکه یه ذره بلد بودم ASP.Net، Python Django و Symfony 2 آشنا بودم

همین. انتخاب‌هایی که من واسه پروژه انجام دادم اینا بودن

  • از bootstrap استفاده کردم چون دوستانی داشتم که بلد بودن با bootstrap کار کنن پس اگه کمک لازم بود کمک دم دسته!
  • از Django استفاده کردم چون بیشتر از اون دوتای دیگه ازش استفده کرده بودم

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

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

همین!

رابطه علم و عمل

اینم یه تجربه پراکنده دیگه!

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

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

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

همین!

لذت برنامه نویسی: مهاجرت از svn به git

اینم یه تجربه پراکنده دیگه!

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

به علت پشتیانی git از svn این مهاجرت تقریبا آسونه و آموزش‌های زیادی مثل این و این توی اینترنت وجود داره. مراحلش بدون جزئیات ایناست:

  1. ساختن یک فایل mapping از یوزرهای svn به یوزهای git
  2. clone  کردن از svn به git با استفاده از دستور git svn
  3. ساختن یک ریپوزیتوری جدید که دیگه چیزی از svn توش نیست با ریپوزیتوری ساخته شده در مرحله ۲
  4. فرستادن این ریپوزتوری جدید روی سرور

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

همین!

تمام ایده‌های من: سیستم تغذیه

اینم به تجربه پراکنده دیگه!

یه مدت اینجا ساکت بوده و به نظر وقت اون رسیده که سعی کنم یه متن قرص و محکم بنویسم.

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

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

اول از همه خوبی‌های این سیستم رو بگم:

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

مشکلات این سیستم رو بخوام بگم ایناست

  • دردسر زیاد توسعه بخاطر بخش‌های زیاد
  • تعداد زیاد اجزای سیستم و دردسر نصب و نگهداری سیستم
  • هزینه بالای سیستم

حالا راه‌حلی که من پیشنهاد دادم اینه. من فرضم بر اینه که همه به راحتی به وب یا به تلفن هوشمند اندرویدی دسترسی دارن. راه حل اینه. شما نیازی به داشتن یه توکن عجیب غریب نداری. الان با دردسترس داشتن یه پرینتر میتونی خودت توکن خودت رو پرینت کنی. توکن میتونه یه qrcode یا یه چیزی شبیه اون باشه. واسه رزور و تحویل غذا هم میشه از یه برنامه به نسبت ساده اندرویدی استفاده کرد. واسه شارژ حساب هم میشه از سرویسهای مثل ussd و درگاه پرداخت وب استفاده کرد.

پس سیستم جدید به این شکل ساده‌سازی شده که:

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

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

  • آموزشگاه‌ها و موسسات کوچک
  • شرکت‌های خصوصی که میخوان با دادن غذا واسه خودشون مزیت رقابتی ایجاد کنن
  • مدارس

حالا وقتی این سیستم راه‌افتاد میشه ویژگی‌های اضافه تری رو هم بهش اضافه کرد:

  • اگه روی اتصال مستقیم این سیستم با غذا فروشی‌ها کار بشه ، موارد زیر امکان پذیره
    • افراد میتونن مستقیما از غذا فروشی دلخواهشون غذا سفارش بدن
    • میشه با غذا فروش‌ها صحبت کرد و به کاربران سیستم تخفیف داد

منتظر نظرات شما هستم!

همین!