۱۳۸۸ فروردین ۱۱, سه‌شنبه

من و T-Mobile G1

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

من برطبق یک عادت چندین ساله، هرسال برای خودم یه‌دونه Gadget می‌خرم که سرم باهاش گرم باشه و یکم از کارای تکراری توی شرکت و خونه راحت بشم. وقتی که مطمئن شدم در آینده‌ایی نزدیک دستم به OpenMoko نخواهد رسید تصمیم گرفتم که یه‌دونه هارد SSD بخرم (یک Intel X25-M). تمام تهران رو گشتم اما پیدا نشد که نشد، و از اونجا که نمی‌شد این رسم چند‌ساله خریدن یه Gadget رو زیرپا گذاشت، تصمیم گرفتم نزدیک‌ترین چیز به Freerunner رو بخرم، یک T-Mobile G1، با کرنل لینوکس و سیستم عامل اندروید گوگل.

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

وقتی که گوشی رو خریدم، فروشنده بهم گفت که این گوشی چون برای قابل استفاده بودن باید حتما با یک حساب‌کاربری Google ثبت بشه، ما این رو به اسم یه‌نفر دیگه رجیستر کردیم، گوشی الان کاملا قابل استفاده هست، اما با یک حساب‌کاربری دیگه! یکی از مهمترین خصوصیات این گوشی اینه که کاملا با سرویسهای Google هم‌پارچه شده، لیست‌تماس، ای‌-میلها، تقویم و ... خوب مسلما که این حالت برای من غیر‌قابل‌تحمل بود. هنوز ۳-۲ ساعت از گوشی استفاده نکرده‌بودم که تصمیم گرفتم گوشی رو کلا ریست کنم. بعد از تکمیل شدن ریست، گوشی اجازه هیچ‌کاری رو بهم نمی‌داد، صفحه اول یک Wizard مونده بود و تا اون فرایند رجیستر رو تکمیل نمی‌کردم اجازه هیچ‌کاری رو نمی‌داد، حتی اجازه نمی‌داد تنظیمات WiFi رو انجام بدم تا گوشی یه‌جوری به اینترنت وصل شه! در عرض ۳-۲ ساعت یک Gadget هشتصد‌هزار تومانی رو به یک تکه‌آجر تبدیل کرده بودم.

خود گوشی یه عالمه APN به‌صورت پیش‌فرض داشت و سعی می‌کرد به اونا وصل بشه تا بتونه فرایند رجیستر رو تکمیل کنه، و جای هیچ تعجب نیست که اگر بگم اون APNها همه ماله T-Mobile بودند. اول سعی کردم یه APN جدید بسازم و با یک SIM Card ایرانسل سعی کنم که رجیسترش کنم، اما موفق نشدم. حدس زدم مشکل باید از MCC،‌ MNC ایرانسل باشه.

راه بعدی که به ذهنم رسید این بود که یه‌جوری صفحه تنظیمات WiFi رو باز کنم تا بتونم فعالش کنم و به یه AP وصلش کنم. بعد از یکم جستجو متوجه شدم که در Android SDK یه ابزار دیباگ به اسم Android Debug Bridge وجود داره، SDK رو دانلود کردم (حجیم، و البته اون صفحه گوگل که میگه حق نداری با این IP چیزی دانلود کنی رو هم رؤیت کردم)، بعد از یکم سروکله زدن با udev، یه شل گرفتم از گوشی و بالاخره موفق شدم که گوشی رو مجبور کنم صفحه مربوط به تنظیمات WiFi رو بیاره، WiFi رو فعال کردم به یه AP وصل شدم و با خیالی راحت برگشتم به اون Wizard تا گوشی رو رجیستر کنم، اما بازم نشد!‌ :(

دیگه تقریبا مطمئن شدم که مشکل MNC و MCC نیست و احتمالا گوگل درخواست منو چون از ایران هست بلاک می‌کنه. راه‌حل بعدی این بود که گوشی از اینترنت پروکسی شده استفاده ‌کنه، در تنظیمات گوشی هیچ راهی برای تنظیم پروکسی نبود (بازم شکست). رفتم پیش یکی از دوستام که چندتا کانکشن VPN داشت، سعی کردم لپ‌تاپ اونو به ‌VPN وصل کنیم و گوشی از اینترنتی که لپ‌تاپ روی wireless network interface شیر می‌کنه استفاده کنه، بازم در کمال تعجب متوجه شدم که این گوشی هیچ راهی برای ست کردن اینکه این کانکشن Ad-hoc هست نداره (در حالی که گوشی قبلیم که یک SE P1i هست به‌راحتی این‌چیزا رو می‌فهمید). دیگه داشتم نگران و عصبی می‌شدم. تنها راه این بود که یه NIC دیگه برای کامپیوتر خونه بخرم، اینترنت رو بدم به اون و بعد از اینکه به یه VPN وصل شدم اینترنت رو بدم به یه AP که گوشی بهش وصل بشه.

اصلا از نگرانی خواب نمی‌رفتم، تصمیم گرفتم که بلندشم و هرجور که شده با همون ADB کارشو یک‌سره کنم. با ADB فایل کانفیگ اصلیه گوشی رو pull کردم روی لپ‌تاپ و به دقت خوندمش، و جایی که اون Wizard Component مقدار‌دهی می‌شد رو پیدا کردم، بعد از یکم جستجو و پیدا کردن داکیومنتهای namespace یه راه برای غیرفعال کردنش پیدا کردم! خیلی خوشحال سعی کردم که همون ADB فایل جدید رو push کنم روی گوشی و ریستارت!‌اما نه، مثل اینکه مشکل یکی‌-دوتا نیست، گوشی Permission Denied میداد و su هم Permission Denied میداد.

اولین چیزی که به ذهنم رسید این بود که یه‌جوری یه‌دونه telnetd روی گوشی اجرا کنم، بعد از یکم جستجو معلوم شد که گوشی خودش یه‌دونه telnetd داره، فقط باید اجراش کرد، اما مشکل بعدی این بود که گوشی خودش هیچ Terminal Emulator ایی نداره در حالت پیش‌فرض و باید ازیه‌جا دانلود و نصب می‌کردم که تقریبا بدون رجیستر کردن گوشی محال بود. یه‌دفعه یادم اومد که در اولین ریویوهایی که از این گوشی خوندم یه باگ جالب توی Firmware RC29 بود، و اون این بود که هرچیزی که تایپ می‌کردی توی یه‌دونه hidden terminal با کاربر root اجرا می‌شد! اما مطمئن نبودم که آیا گوشی من هم این باگ رو داره یا نه. نوشتم reboot و در کمال نا‌امیدی Enter رو زدم ... بله! گوشی ریبوت شد!‌ (اولین شانسی که آوردم).

بعد از اینکه گوشی بوت شد، تایپ کردم telnetd و Enter. با لپ‌تاپ به IP که گوشی از AP گرفته بود telnet کردم، و بله، با تشکر ویژه از بامزه بودن بالذات telnet من root بودم. با ADB فایل رو push کردم یه جاروی گوشی که کاربر عادی حق نوشتن داشت و خیلی خوشحال رفتم به اسکرین telnet و سعی کردم با cp فایل رو کپی کنم جای اصلیش، اما نه، مثله اینکه این شل حتی cp هم نداشت :(

واقعا دیگه مستاصل شده‌‌بودم و داشتم به فروختن گوشی فکر می‌کردم. اما هی! مگه نه اینکه من اینجا یه کرنل لینوکس دارم؟ آخرین تیر ترکش push کردن busybox روی گوشی بود و بعد هم busybox cp.

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

مونده بودم که این یکی رو دیگه چی‌کار کنم، برنامه Gmail رو باز کردم، یه پیغام خطا داد که «این گوشی ثبت‌نشده است، خیلی از امکانات را از دست داده‌اید، امیدوارم که یک برنامه‌نویس باشید». خیلی بد بود، خیلی بد. اما به اون آخرش که گفت امیدوارم برنامه‌نویس باشید مشکوک شدم، برنامه Android Market رو باز کردم، اونم گفت که گوشی رجیستر نیست، اما این امکان رو بهم می‌داد که Login کنم، اطلاعات حساب GMail رو وارد کردم و ... بله! تموم شد، گوشی شروع کرد به Sync کردن اطلاعات، بهم گفت که Email جدید داری، دفترچه تلفنم تمامش به گوشی منتقل شد و چندتا notice هم از identi.ca گرفتم! فوق‌العاده بود، فوق‌العاده!

اگر این مشکلات اولیه رو نادیده بگیرم، گوشی فوق‌العاده‌ایی هست، با توجه به تجربه یک‌روزه‌ایی که با این گوشی داشتم (و قبلا هم تقریبا یک‌روز با یک iPhone کار کرده بودم)، به هرکسی که ازمن بپرسه تو این محدوده قیمت کدوم‌یکی رو انتخاب کنم، پیشنهاده من مطمئنا که G1 است.