myHTC

หลายเดือนก่อน HTC Thailand เปิดตัว HTC Desire ซึ่งมาพร้อมกับโปรแกรม myHTC ซึ่งเอาไว้แข่งกับ BB โดยเฉพาะ ปรากฎว่าเขาเขียนไว้ชัดเจนว่าเฉพาะเครื่องศูนย์ประเทศไทยเท่านั้น ผมเองเลยสงสัยว่า ผมอยากได้ Nexus One เนี่ย ศูนย์ไม่เอามาขายเอง งั้นผมก็ hack ซะ ก็เลยดาวน์โหลดมาติดตั้ง โดยโหลดจาก [myhtcsite.com/apk](http://myhtcsite.com/apk)

หลังจากติดตั้งเสร็จแล้ว มันเป็น widget ก็ add ไปตามปกติครับ

เพิ่ม Widget

ใส่ไปปุ๊บ ก็ขึ้นหน้านี้ทันที

หน้าลงทะเบียน

จริงๆ ผมหา Shop ID จากเว็บนึงที่เค้าไม่ให้แจกได้นะครับ แต่ถึงใส่เข้าไปก็จริงแต่…

Error

ดังนั้น ในเมื่อเข้าประตูหน้าไม่ได้ ก็ต้องประตูหลังครับ

adb shell
sqlite3 /data/data/com.js.htc/databases/myhtc

*อ้าว เฮ้ย Java เค้าให้ใช้แพคเกจตามโดเมนที่ตัวเองเป็นเจ้าของนะครับ นี่มันอะไรใช้โดเมนคนอื่น คุณภาพระดับนี้ Market ไม่รับแน่ๆ ถึงไม่ยอมให้ device อื่นใช้*

sqlite> .schema
CREATE TABLE android_metadata (locale TEXT);
CREATE TABLE tbads (_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,add_id NUMERIC ,ad_desc TEXT,ad_count INTEGER DEFAULT 0 ,ad_max INTEGER DEFAULT 0 ,ad_promo TEXT,appg_id INTEGER, ad_click INTEGER DEFAULT 0, ad_promotype INTEGER DEFAULT 0, ad_expire DATETIME);
CREATE TABLE tbapps (app_id INTEGER PRIMARY KEY NOT NULL , app_name VARCHAR(100), app_desc VARCHAR(200), app_thumb VARCHAR(50), appg_id INTEGER, app_package VARCHAR(100), app_rev INTEGER, app_vername VARCHAR(15), app_status INTEGER);
CREATE TABLE tbdevice (shop_id VARCHAR(20), pincode VARCHAR(20), age INTEGER, genger INTEGER, lastsync_app DATETIME);

อ๊ะ tbdevice น่าสนใจ ไหนลอง

sqlite> .dump tbdevice
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE tbdevice (shop_id VARCHAR(20), pincode VARCHAR(20), age INTEGER, genger INTEGER, lastsync_app DATETIME);
COMMIT;

ไม่มีอะไรเลย ไม่เป็นไร ยัดไปเลยดีกว่า

sqlite> INSERT INTO tbdevice VALUES(“omgwtflolroflcopters”, “M79AKAC4”, 0, 0, NULL);
sqlite> .quit

แล้วก็ add widget ไปอีกที…

แจ่มมม !!
Chat ได้ด้วย

ปัญหาคือ ผมขอให้เพื่อนที่ใช้ Tattoo add เข้ามา ปรากฎว่าใช้ไม่ได้ ก็เลยไปนั่งแกะทาง backend อยู่นาน จนได้ pin มาอันนึง แต่มันทำกี่ที่ได้เลขเดิมเพราะมันล็อคกับ IMEI ครับ วิธีการที่หาคือ ผมติดตั้ง proxy server ไว้ใน server โดยเลือก privoxy จากนั้นให้มัน log request เต็มรูปแบบ แล้วผมก็กด register จะได้ URL มา ผมก็นั่งเดาอยู่นาน จนพิมพ์ผิดทำให้ argument ตกหายไปหมด ทีนี้ดันได้พินออกมา -*- (เจ๋งจริงๆ security เทพสุดในสามโลก)

ครั้นแล้ว ยังไม่สะใจ เอางี้ดีกว่า..

อ๋อ ได้…

sqlite> UPDATE tbdevice SET pincode=”S0000001″;
sqlite> .quit

(เวลาทำ อย่าลืม kill ตัว myHTC ทิ้งก่อนนะครับ ผมไม่นิยม task manager ก็ใช้ปุ่ม force stop ใน applications setting ได้)

ดี สม

(เนื่องจากว่าผมไม่ได้ต่อผ่าน proxy อะไรเลยไม่อยากแก้อะไรนะครับ ถ้าหาได้แล้วเดี๋ยวอาจจะเอา @petdo ใส่แทนเห็นคล้ายๆ กัน ;P)

เรื่องนี้สอนให้รู้ว่า Login ต้องมีรหัสเสมอนะครับ และ อย่าเชื่่อ user ^^

ปล. myHTC ใช้ polling อะ ผมว่าเด็กป. 6 ก็วางระบบระดับนี้ได้นะ (ใช้คำว่า วาง ไม่ใช่ เขียน แต่ถ้ารู้จักการใช้ภาษาต่างๆ แล้วง่ายนิดเดียว) สากลโลกเค้าใช้ socket กันแล้วคร๊าบบ

ปล2. จริงๆ แล้วสามารถเปลี่ยนเป็น PIN ใครก็ได้นะครับ จะได้ contact กับ status เค้ามาด้วยเลย เรียกได้ว่าแค่ใส่ pin เข้าไปก็ปลอมตัวได้แล้ว แจ่มไหมหละ

Making of Twitica Mobile for Android pt.2

After I got the UI in place, and the timeline loaded correctly now I have to make it human-readable.

I designed the tweet display to be similar to Twitica Desktop, but I added Geolocation support. Desktop’s implementation is just a pin, while I shouldn’t do that in Mobile because it would be slow to know where that user is so I need to fire Google’s reverse geocoding server. (Too bad, while searching for the docs I found GMapsv3 docs instead and included full Google Maps system in.) To do reverse-geocoding, just call the [API](http://code.google.com/apis/maps/documentation/geocoding/#ReverseGeocoding) with lat,lon of the tweet and it just return the result. Desktop use granularity to the street level, but I think it’s too much so I decided to use district level result to display. When clicked, it would show the map just like in Desktop. This can be accomplished easily by just navigate the browser to Google Maps and Android will handle the rest. (I learned this trick while making Twitica Desktop for Android)

Also, I moved the time to under user’s avatar which I copied from [Yak for webOS](http://www.precentral.net/review-yak)

**Today’s tip (& what I’ve learned):** Pass –disable-web-security to Chrome and it will allow cross domain XHR. I use this to test Twitica Mobile.

Current screenshot
Hopefully this menu will work soon

*Twitica Mobile (PhoneGap) is open source, you can fork it at [http://github.com/whs/Twitica-Mobile](http://github.com/whs/Twitica-Mobile)*