ادامه اولین تجربه با برنامه‌نویسی موبایل

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

تکرار تاریخ

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

بازار نرم‌افزار حسابی بکر بود و هر کسی می‌توانست با یک نرم‌افزار ساده (اقلاً به مقیاس امروزی) کل بازار را قبضه کند. زمانی که هنوز نوجوان محسوب می‌شدم، یعنی ۱۵ سال بعد از تاریخ فوق‌الذکر، وقتی که سرگذشت آدم‌ها و شرکت‌هایی مثل آی.بی.ام، بیل گیتس و شرکت‌های گاراژی را از مجله‌هایی مثل «کامپیوتر» و «دنیای الکترونیک ؟» می‌خواندم حسابی هیجان‌زده می‌شدم و آرزو می‌کردم ای کاش من هم، هم عصر (و هم مکان) بیل گیتس، استیو جابز و دیگر پیش کسوتان می‌بودم و در آن انفجار تکنولوژیک شرکت می‌داشتم.

حدود ۱۰ سال پیش یک انفجار مشابه رخ داد: عصر دات کام. ظهور سایت‌ها و تجارت‌های اینترنتی فراوان، رشد شدید برنامه‌های تحت وب و ظهور و بلوغ شرکت‌هایی مثل گوگل و یاهو.

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

‫اصطلاحات اولیه برنامه‌نویسی موبایل با Java ME

Java ME
Java Micro Edition ویرایش مخصوص جاوا برای استفاده در گوشی‌های موبایل و دیگر deviceهای مشابه است. بیش از دو میلیارد گوشی قابلیت اجرای برنامه‌های Java ME را دارند. J2ME نام قدیمی Java ME است.

Configuration/Profile/Optional API

Configuration مشخصات گوشی‌های مختلف است و مشخص می‌کند که قدرت یک گوشی در چه حدی است و چه کارهایی را می‌تواند انجام دهد. انواع Configuration شامل CLDC و CDC می‌شود.

Profile مشابه Configuration است و مشخص می‌کند که یک گوشی با یک Configuration خاص چه قدرت و امکاناتی دارد. معروف‌ترین Profile همان MIDP است.

در ادامه همین تقسیم بندی، یک Profile مشخص می‌تواند از یک سری APIهای خاص پشتیبانی بکند یا نکند. مثلاً ارسال MMS را پشتیبانی بکند یا نکند. به این تقسیم بندی Optional API‌ گفته می‌شود.

CLDC
Connected Limited Device Configuration
یک configuration خیلی ساده است که توسط اکثر گوشی‌های موبایل پشتیبانی می‌شود. به چیزی حدود 256 KB رم و رام نیاز دارد. امکانات جاوایی آن در حداقل قرار دارد.

CDC
Connected Device Configuration
یک مدل بالاتر از  CLDC است. میزان حافظه آن در محدوده مگابایت است نه کیلو بایت.

MIDP معروف‌ترین Profile است. اگر گفته شود که یک گوشی MIDP را پشتیبانی می‌کند یعنی این که امکانات سخت‌افزاری، قدرت CPU و میزان حافظه به مقدار خاصی است. این میزان برای MIDP 2.0 عبارت است از 256KB ROM، مقدار ۸ کیلو بایت فضای ذخیره‌سازی، 128 KB RAM، صفحه نمایش 96*54، صفحه کلید و شبکه دو طرفه.

MIDlet
اصطلاحاً به برنامه‌نویسی Java ME بر اساس MIDP گفته می‌شود. تقریباً منظور از برنامه‌نویسی موبایل با استفاده از Java ME یا J2ME همین برنامه‌نویسی به روش MIDlet است.

منبع: کتاب Beginning J2ME

‫اولین برنامه با Java ME

خوشحالم که به عنوان یک برنامه‌نویس دات‌نت اولین Hello World جاوایی‌ام (Java ME) را نوشتم. از Java ME برای برنامه‌نویسی با موبایل‌های سازگار با جاوا، یعنی اکثر گوشی‌های جهان، استفاده می‌شود. کدهای Java ME را می‌توان با کمک netBeans و Eclipse و pluginهای مربوطه نوشت یا این که از Java ME SDK استفاده کرد. نقطه شروع کار خیلی سخت نیست. کافی است از کلاس خاصی به اسم MIDlet ارث‌بری کرده و کار را شروع کرد. وقتی که کد نوشته شده به یک فایل jar کامپایل شد می‌توان آن را به گوشی موبایل منتقل کرده و اجرا نمود.

گفته می‌شود که برنامه‌های نوشته شده با Java ME و به طور کلی با جاوا کند هستند. حتی محیط برنامه‌نویسی جاوا هم کند است. اما اگر Cross Platform بودن بین گوشی‌ها و OSهای مختلف برایتان مهم است باید آن را تحمل کنید.

‫انتخاب platform برنامه‌نویسی موبایل

بازار برنامه‌نویسی موبایل در آمریکا و اروپا به شدت داغ است. این بازار در ایران هم به شدت رو رشد است. کافی است نگاهی به آگهی‌های کارویس بیندازید + + + +. این روزها به هر برنامه‌نویسی واجب است که اطلاعاتی راجع به برنامه‌نویسی موبایل داشته و یکی از platformهای موجود را برای شروع انتخاب کند. پلتفورم‌های موجود عبارتند از آندروید (گوگل – جاوا)، iOS (اپل – Objective C)، ویندوز فون (مایکروسافت – دات‌نت)، بادا (سامسونگ – C++‎)، جاوا (cross-platform – جاوا) و چند سیستم عامل متفرقه دیگر.

دیروز در ارتباط با همین موضوع بحث داغی داشتیم با چند تا از دوستان. هدف این بود که با یک سری از پیش فرض‌ها یک platform مناسب برای برنامه‌نویسی موبایل انتخاب شود. پیش‌فرض‌های مورد نظر عبارتند از:

* ما برنامه‌نویس دات‌نت هستیم.
* ما چند برنامه‌نویس هستیم که عمری در کار توسعه برنامه‌های داده محور مثل برنامه‌های دیتابیسی بوده‌ایم و قاعدتاً مهارت‌ها و ایده‌هایمان هم در همین حول و حوش چرخ خواهند زد.
* ما ایرانی هستیم و محدودیت‌های زیادی در رابطه با موضوع تحریم داریم.
* هدف اولیه بازار داخل است ولی بازار خارج و storeهای مختلف applicationها به هیچ وجه منتفی نیستند.
* مهم است که برنامه‌های ما در بیشتر گوشی‌ها اجرا شود. باید سعی کنیم محدودیت platform و محدودیت سخت‌افزار را به نوعی دور بزنیم.

خلاصه‌ای از بحث:
iOS و Windows Phone محدودیت‌های زیادی برای ما ایرانی‌ها دارند. اما جاوا و اندروید کمتر. جواب قطعی به cross platform بودن جاوا است. اما مشکل کندی آن و عدم دسترسی مستقیم به سخت‌افزار گوشی هست. نرم‌افزارهای معتبر به ازای هر platform یک بار بازنویسی می‌شوند. مثلاً یک بار برای اندروید، یک بار برای iOS و یک بار برای Windows Phone. بادا کمترین ساپورت، کوچکترین جامعه developer و کمترین طرفدار را در ایران دارد اما گوشی‌های به نسبت ارزان قیمت‌تری دارد. گوشی‌های Windows Phone و iOS گوشی‌های گرانقیمتی هستند. گوشی‌های اندروید بیشترین آمار را در ایران دارد. البته تقریباً همه گوشی‌های موجود جاوا را پشتیبانی می‌کنند. قیمت گوشی‌های اندروید در حال حاضر (اواخر آبان ۱۳۹۰) از حدود ۲۰۰ هزار تومان شروع می‌شود. بازار کلی دنیا هم درباره انتخاب platform خیلی شک دارد. رقابت خیلی داغ است و ممکن است در چند سال آینده شاهد تغییرات زیادی باشیم.

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