#کارپینو، یا تاکسی نارنجی روی گوشی های هوشمند!

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

IMG20145432

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

  • مسافر خودش باید دکمه «سوار شدم» رو بزنه، به نظر من احمقانه ترین چیزی که میتونه در چنین اپ هایی پیاده سازی بشه همینه! در واقع راننده هست که باید اعلام کنه مسافر سوار شده و سفر رسما آغاز شده، نه این که مسافر خودش اعلام کنه!
  • امکان امتیاز دهی به راننده وجود نداره، امروز عجله داشتم و راننده به موقع رسید، مسیر خوبی هم انتخاب کرد، ولی آخرش نشون داد به مبلغی که در اپلیکیشن وارد شده بی اعتنا بوده (در واقع ۹ هزار تومن بود و من ۱۰ تومن دادم، راننده پولی به من پس نداد تا خودم ازش خواستم که باقی پول رو پس بده) ، یعنی اگر اسنپ بود میشد ۴ از ۵ ستاره. من نتونستم بهش امتیاز مناسب بدم.
  • بعد از سوار شدن هیچ آپشن مسیریابی ای برای راننده فعال نشد، و راننده داشت از من مسیر میپرسید (البته انتهای راه). یکی از خوبی های اسنپ اینه که حداقل نیازی نیست در راه مسیر رو بگی و به کمک Waze (که البته الان جوابگو نیست!) و Google Maps و … ، خودش مسیر حدودی رو پیدا میکنه و فقط ممکنه در پیچ و خم ها و پس‌کوچه ها نیاز باشه که راهنمایی کنیم.
  • این برای من خیلی مهمه، عادت دارم که بعد از سوار شدن به اسنپ یا تپسی، پرداخت آنلاین انجام بدم و بنا به دلایلی تا جایی که بتونم از وجه نقد رد و بدل کردن در میرم! ولی این کارپینوی عزیز، هیچ آپشنی نداشت که بعد از سوار شدن بتونی پرداخت رو انجام بدی!
  • و آخرین مورد ، دقیقا همه پیام هایی که باید توسط راننده (موقع رسیدن، لغو سفر، … ) ارسال بشه امکانش هست که توسط مسافر ارسال بشه 😐 یعنی تغییری در محتوای پیام ندادند و همینطوری وارد اپلیکیشن شده!

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

  • خیلی جاها اسم «ماکسی» به چشم میخوره، ظاهرا اسم اولی که برای استارتاپ (اگر بشه حتی اسمش رو استارتاپ گذاشت 😐 ) انتخاب کرده بودند ماکسی بوده، و بعد شده کارپینو. اما به خاطر عجله ای که برای لانچ کردن داشتند این مورد رو اصلاح نکردند.
  • وقتی روی آیکن Google Play کلیک کنید، به «کافه بازار» هدایت میشید! این هم چیزی بود که باعث تعجبم شد! با این که کافه بازار آیکن خاص خودش رو داره وبرای دانلود میشه ازش استفاده کرد ولی نمیدونم چرا اینجا از آیکن گوگل استفاده شده!

در کل، سرویس جالبیه ولی «خیلی خیلی خیلی» جای کار داره، خیلی از پیامها و محتوا باید عوض بشن، خیلی از آپشن ها باید اضافه بشن و از همه مهم تر این که باید برای مدیریت تراکنش ها و پرداخت ها سیستم خاصی پیاده سازی بشه که مشکلات برشمرده شده رو هم رفع کنه!

FacebookTwitterGoogle+Share

پیشنهادهای شما برای پیاده سازی یک ایده سخت افزاری

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

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

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

ایده هایی که در ذهن خودم هستن اینان :

  • پیاده سازی یه دستگاه ساده با استفاده از میکروکنترلرهایی که توی بازار موجودند، و روبرو شدن با چالش هایی مثل مطالعه معماری، برنامه نویسی برای ریزپردازنده، طراحی مدارهای واسط و … .
  • پیاده سازی یه دستگاه ساده با استفاده از آردوینو و ماژول هاش
  • پیاده سازی یک دستگاه ساده IoT طور با استفاده از Cubieboard یا رزبری
  • و …

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

FacebookTwitterGoogle+Share

ساخت یک کامپیوتر ساده در Logisim – قسمت اول

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

۱. دونستن کمی مدار منطقی (که قبلا در وبلاگ راجع بهش حسابی صحبت کردم)

۲. بلد بودن کار با Logisim (که میشه گفت مثل نقاشی کشیدن میمونه و همین پست ها رو دنبال کنید یاد میگیرید.).

راه اندازی محیط کار

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

چالش های پیش رو

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

کامپیوتر ما باید چه عملیاتی انجام بده؟

یک کامپیوتر ساده که بتونه به راحتی قابل درک هم باشه، هم باید Word Size کوچیکی داشته باشه (توی آموزش ها با ۸ بیت میریم جلو) و هم Instruction Setش باید کوچیک باشه. یک سری دستور پایه هست که هر کامپیوتری میتونه انجامش بده، ما کامپیوترمون رو اینطور طراحی مکنیم که AND, OR, NOT رو بتونه انجام بده، علاوه بر اون بتونه جمع و تفریق هم بکنه. پس باید :

  1. مداری طراحی کنیم که بتونه ۸ بیت رو NOT کنه
  2. مداری طراحی کنیم که بتونه ۸ بیت رو OR کنه
  3. مداری طراحی کنیم که بتونه ۸ بیت رو AND کنه
  4. و مدار(ها)ی طراحی کنیم که بتونن ۸ بیت رو جمع و تفریق کنن.

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

در پست های بعدی، زیرمدارهای کامپیوتر خودمون رو میسازیم. در این پست صرفا با کامپیوتر ساده و کوچیکمون آشنا شدیم :)

FacebookTwitterGoogle+Share

نوشتن اسمبلی ۳۲ بیت

در گذشته، پست هایی که در مورد اسمبلی قرار دادم، همه در مورد اسمبلی ۱۶ بیت بودن اما حالا میخوایم بریم سراغ اسمبلی ۳۲ بیت. خب فرق ۱۶ با ۳۲ بیت در چیه؟!

اولین نکته، سایز ثبات هاست! در ۱۶ بیت در هر ثبات میتونستیم حداکثر یک مقدار ۴ رقمی هگزادسیمال ذخیره کنیم ولی در ۳۲ بیت این مقدار به ۸ رقم میرسه! حالا خیلی مسائل دیگه مثل دیتاباس و کنترل باس و … که بماند (چون اینجا داریم برنامه نویسی میکنیم و بیشتر با ثبات ها کار داریم).

اینجا، قضیه یه فرقای کوچولویی داره، مثلا اسمبلر nasm قراره استفاده بشه (گرچه قبلا در ساخت اون سیستم عامل کوچک ازش استفاده کردیم) و همچنین وقفه ها و system call هایی که استفاده میکنیم شماره و مقدارشون و مکانشون متفاوته.

بیاید این برنامه رو در نظر بگیریم :

کد   
section .text
	global_start
 
_start:
	mov edx, len
	mov ecx, msg
	mov eax, 0x04
	int 0x80
 
	mov eax, 0x01
	int 0x80
 
section .data
	msg db 'Hello, World!', 0xa
	len equ $ - msg

 

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

کد   
mov edx, len
mov ecx, msg
mov eax, 0x04
int 0x80

اینجا، مقدار طول رشته ای که خواستیم چاپ کنیم رو توی EDX یا رجیستر داده قرار دادیم. بعدش اومدیم پیامی که میخوایم چاپ بشه رو قرار دادیم درو نECX .

بعدش سیستم کال ۴ یا sys_write رو توی eax قرار دادیم و وقفه ۸۰ رو صدا زدیم. حالا وقفه ۸۰ با مقدار ۴ که توی eax ذخیره شده، میگرده دنبال رشته ای که توی ecx هست و بعدش چاپش میکنه.

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

کد   
mov eax, 0x01
int 0x80

اینجا هم مقدار ۰۱ یا sys_exit رو وارد eax کردیم، تا برنامه پس از اجرا، خارج شه. بعد از این هم باز وقفه ۸۰ رو صدا زدیم.

بخش دیتا هم، مثل همه برنامه های قبلی، تمام داده های مورد نیاز رو با Directive ها تعریف کردیم که بتونیم به راحتی توی کد سگمنت ازشون استفاده کنیم و چون قبلا توضیح داده شده، دیگه دوباره کاری نمی کنم. فقط این پست رو نوشتم تا فرقهای اسمبلی ۳۲ و ۱۶ بیت رو ببینیم. که درآینده بسطش خواهم داد به ۶۴ بیت.

امیدوارم که این پست، بدردتون خورده باشه.

موفق و موید باشید!

FacebookTwitterGoogle+Share

منابعی برای یادگیری زبان Ruby

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

  1. روبی را امتحان کنید
  2. روبی در بیست دقیقه
  3. یادگیری روبی

این سه رفرنس، مراجع خودم هم بودن و به سادگی تونستم با استفاده از اونها، روبی رو تا حد زیادی یاد بگیرم، و سعی میکنم اگر رفرنس دیگری هم یافتم، معرفی کنم :)

FacebookTwitterGoogle+Share

چالشی برای زندگی بهتر

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

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

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

موفق باشید!

FacebookTwitterGoogle+Share