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

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

IMG20145432

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

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

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

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

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

FacebookTwitterGoogle+Share

پروژه گاه‌شمار

خب، من در گروه های تلگرامی این پیام رو میذاشتم :

دوستی مدتی پیش (که خیلی هم ازش نگذشته ) یک چالش رو بعنوان تمرین برنامه نویسی پیشنهاد داد، و اون هم نوشتن یک API بود برای دریافت ساعت و تاریخ.
من هم وارد این چالش شدم و یک API با روبی و سیناترا نوشتم، روی گیتهاب هم قرارش دادم ولی الان دپلویش کردم که اگر شما هم خواستید بتونید ازش استفاده کنید :
https://gahshomar-api.herokuapp.com/

خب، این هم پروژه ای بود که محسن بعنوان تمرین خواست که ما یه API بنویسیم، من هم این رو با Sinatra نوشتم و الان دپلوی شده و در دسترسه! امیدوارم ازش لذت ببرید :)

FacebookTwitterGoogle+Share

قطعه کد «سلام دنیا» در زبان های مورد علاقه من – سری دوم

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

۱. Arendelle :

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

کد   
'Hello, World'

۲. Apple Swift

زبان سوییفت اپل (نه اون سوییفتی که برای برنامه نویسی موازی و همروند استفاده میشه) به تازگی اوپن سورس شده و حقیقتا نتونستم تحمل کنم و نصبش کردم اون هم روی اوبونتو! و خب کار باهاش خیلی فانه (و به زودی هم یه سری مطلب در موردش میذارم) و البته اگر فرمورک های درست و حسابی تحت لینوکس هم براش ارائه شه، میشه گفت میتونه به یکی از بی رقیب ترین ها تبدیل شه!

کد   
print("Hello, World")

۳. Ada

خب، زبان Ada هم از زبانهایی بود که همیشه میخواستم یاد بگیرم، مدتها پیش در موردش خوندم و جالب ترین نکته این بود که اسم گذاریش از روی اولین برنامه نویس جهان بوده، پس مصمم شدم که حتما یکم باهاش بازی کنم :)

کد   
with Ada.Text_IO; use Ada.Text_IO:
procedure Hello is
 begin
  Put_Line("Hello, World");
 end Hello;

۴. Verilog HDL

این زبان هم برای شبیه سازی سخت افزار ازش استفاده میشه. شدیدا کاربردی و باحاله و میتونید کلی پروژه کول پیدا کنید که روی این زبان هستن، مثلا پیاده سازی اوپن سورس از پردازنده های مختلف مثل MIPS, x86, sparc و … .

کد   
module main;
 initial
  begin
   $display("Hello, World");
   $finish;
  end
endmodule

 

خب، این یکی مطلب کوتاه تر از نسخه قبلیش بود! اما یه نکته خیلی ریزی داشت، و اونم اینه که توی این چهارتا زبان میشه چهارتا طیف کاملا متفاوت رو دید. شما هم اگر پیشنهادی دارید دریغ نکنید و بذارید بدونیم :)

موفق باشید.

FacebookTwitterGoogle+Share

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

خب، اول از همه بگم که نمیدونستم چه عنوانی رو باید انتخاب میکردم، و طبق فرمول «احمقانه ترین ایده ممکن» این عنوان رو روی پست گذاشتم. بگذریم، توی این پست میخوام یه پدیده جدید و خیلی خوب رو معرفی کنم. میدونید که من مدت زیادی هست که روبی کار شدم ( و حتی پایگاهی برای توسعه دهندگان روبی ایجاد کردم)  روبی زبان خیلی خوبیه ولی خب قاعدتا نمیشه به نیتیو کد تبدیلش کرد. همونطور که پایتون و … نمیشه نیتیو کد کامپایل کرد. اما با یه چیزی رو به رو شدم که دقیقا خود روبی بود، ولی نیتیو کد میشد. من که بهش سلام کردم، شما هم بهش سلام کنید. زبان برنامه نویسی کریستال یک زبان ruby – inspired هست که کاملا کامپایلری عمل میکنه. سینتکس کاملا سینتکس روبی هست و از این بابت خیالتون راحت باشه که اگر روبی بلدید، یاد گیری این زبان براتون چند دقیقه بیشتر زمان نخواهد برد. اجازه بدید چند مثال رو بررسی کنیم.

برنامه Hello World

کد   
puts "Hello, World"

 

چقدر فرق با روبی حس کردید؟ درسته! هیچ فرقی با روبی نداره. مثالهای بعدی هم هیچ فرقی ندارند.

برنامه شرطی (چک کردن سن قانونی)

کد   
if age >= 18
 puts "Legal"
else 
 puts "Not Legal"
end

 

استفاده از حلقه (برنامه چاپ اعداد ۰ تا ۱۰)

کد   
n = 0
while n <= 10
 puts n
 n += 1
end

 

برنامه شیء گرا (نوشتن کلاس Greeter )

کد   
class Greeter
 def initialize(name)
  @name = name
 end
 
 def say_hi
  puts "Hello, I am #{@name}"
 end
end

 

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

FacebookTwitterGoogle+Share

مقدمه ای بر پرل

در پست قبلی سعی کردم تا حدودی با پرل، آشناتون کنم. در این پست هم قصد دارم تا حدودی بیسیک های پرل رو بررسی کنم. همونطور که در پست قبلی اشاره کردم، پرل شباهت بسیار زیادی به C داره، البته این شباهت به php بیشتره تا C ، ولی خب معمولا بیان میشه که پرل سینتکس مشابه C داره. شما چه C بدونید و چه php ، کد زدن با پرل براتون بسیار راحت میشه. خب، بذارید از اول اول شروع کنیم، یعنی نصب و راه اندازی پرل روی یه سیستم لینوکسی، باید بگم که پرل معمولا روی توزیع های آماده (مثل اوبونتو) نصب شده، چرا که بخش عظیمی از کانفیگ فایلها، توسط اسکریپت های پرل انجام میشه. ولی روی توزیع هایی که آماده نیستند (مثل آرچ، جنتو و …) معمولا نصب نیست (ولی با نصب X نصب میشه و خیالتون از این بابت راحت باشه). حالا که خیالتون راحت شد که پرل رو دارید ( 😀 ) ، بیاید مثل دو پست قبلی، به دنیا سلام کنید. برای این کار، یه فایل به اسم hello.pl ایجاد کنید و داخلش بنویسید :

کد   
print "Hello, World!\n";

خب حالا بخوایم این کد رو آنالیز کنیم، print که مشخصه کارش چیه، یک رشته متنی رو چاپ میکنه که روبروش هم ما از ” استفاده کردیم، و یک متن نوشتیم. اون کرکتر بک اسلش هم یک خط جدید برامون ایجاد میکنه. اما میشه این رو طور دیگه هم نوشت. در واقع میتونید متن Hello, World رو درون یک متغیر بریزید و متغیر رو چاپ کنید!

کد   
$hello = "Hello, World";
 
print "$hello\n";

خب، از این کد میشه به شباهت زیاد پرل با php هم پی برد، پرل هرچیزی که با $ شروع بشه رو خودکار متغیر در نظر میگیره. خب انواع متغیر در پرل مثل سایر زبان ها، به عدد صحیح و ممیز شناور و … تقسیم میشه . در واقع در کد زیر مشخص میشه که این کد ها چی هستند :

کد   
$int = 1;
$float = 3.14;
$char = 'a';
$string = 'Hello, World';

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

FacebookTwitterGoogle+Share

ملاقات با اوبونتو ۱۵.۰۴

Screenshot from 2015-04-24 16:09:07پنجشنه، نسخه جدید اوبونتو، یعنی ۱۵.۰۴ منتشر شد. این نسخه، اولین نسخه منتشر شده در سال ۲۰۱۵ و در ماه آپریل، یعنی ماه چهارم هست و طبیعتا بخاطر همین نامش میشه ۱۵.۰۴ . در این تاپیک قصد بررسی فنی ندارم، فقط تنها خوبیش برام این بود که مینت مزاحم رو پاک کردم و این رو جاش نصب کردم. نسخه بعدی، ۶ ماه دیگه یعنی در ماه ۱۰ میلادی منتشر میشه. هنوز جزئیاتی ازش منتشر نشده. در مورد این نسخه بخوام بگم (۱۵.۰۴) باید بگم که در یک کلام «عالی» بود. تقریبا همه نسخه هایی که روی لپتاپی که یک سال از عمرش میگذره نصب کردم، خیلی خیلی خوب جواب دادن. تست ها و Review های دیگر هم همینو میگن :).

نرم افزار پخش ویدئوی این نسخه هم ظاهر جالبی پیدا کرده :

Screenshot from 2015-04-25 01:24:41تقریبا این نرم افزار رو ظاهرش  رو به مینیمالیست ترین شکل ممکن باز-طراحی کردن (بابت عکس ترسناکش معذرت! این کنسرت تنها ویدئوی موجود بود اون موقع که داشتم تست میکردم نرم افزارها رو!).

خلاصه که تغییرات زیادی کرده این نسخه و در یک مطلب طولانی، در موردش بیشتر خواهم نوشت :)

FacebookTwitterGoogle+Share

یک فنجان قهوه با طعم جاوا اسکریپت و روبی لطفا!

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

سلام دنیا

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

کد   
alert "Hello, World!"

این کد، یک پنجره پیام باز میکنه و پیام Hello World رو به کاربر نشون میده. بعد از اجرای دستور :

coffee --compile ./path/to/coffee/file

کد رو به این تبدیل میکنه :

کد   
alert("Hello, World!");

حالا قطعه کد پیچیده تری رو بررسی میکنیم.

تابع فاکتوریل

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

کد   
a = (x) -> 
    if(x == 0)
       return 1
    else
       return x * a(x-1)

و این کد، همین تابع در جاوااسکریپت :

کد   
var a;
 
a = function(x) {
  if (x === 0) {
    return 1;
  } else {
    return x * a(x - 1);
  }
};

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

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

موفق و پیروز باشید.

FacebookTwitterGoogle+Share

چالش توسعه و سهم من

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

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

پس نتیجه چی شد؟

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

بیشتر توضیح بده، متوجه منظورت نشدم!

خب، F-Droid میگرده نرم افزارهایی که مجوز آزاد دارند، مثل GPL, Apache, LGPL, … رو پیدا میکنه، و درون مارکت خودش قرار میده. یا برنامه نویسی که اپلیکشن رو نوشته، اپ رو درون اف-دروید قرار میده تا دوستانی که نیاز دارند، دانلودش کنن و لذت ببرن. حالا، من تصمیم دارم همین رو بصورت فارسی ایجاد کنم ولی با تفاوت عمده :)

چه تفاوتی؟

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

آیا سرویس های جانبی هم راه اندازی خواهی شد؟

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

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

موفق باشید.

FacebookTwitterGoogle+Share

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

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

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

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

موفق باشید!

FacebookTwitterGoogle+Share