#nlc11

กลับมาแล้วจาก #nlc11

ปีนี้ผมค่อนข้างจะดีใจมากที่เป็นโจทย์เขียนเว็บ เพราะผมถนัดมากๆ และยิ่งได้ e-commerce นี่ยิ่งง่ายมาก แต่ผมกังวลว่า HTML5 จะใส่ตรงไหน (ไว้จะเฉลยต่อไป) จากประสบการณ์ผมเมื่อ #nlcX พบว่า SC SS จะไม่ได้ช่วยงานอะไรมากนักเลยต้องคิด assign เพิ่มเข้าไป แต่งานนี้ไม่ใช่ ผมเลือกทำเว็บ e-commerce ด้วย Drupal ครับ ผมลองใช้ Drupal 7 มาก่อนแล้วพบว่ามันไม่ work คืนก่อนไปงานผมเลยติดตั้ง UberDrupal ซึ่งเป็น installation profile ไปก่อน (เหมือนจะมีคนเข้าใจว่าผมทำมาก่อน จริงๆ ผมแค่ลง ajax cart เข้าไปจากตัวนั้นครับ ที่เหลือมันเป็นแบบสำเร็จรูป แค่คืนรููปจากไฟล์เป็น database ก็เสร็จแล้ว) แต่ก็ต้องมีการปรับ

– ด้านเนื้อหาผมเพิ่ม Taxonomy Vocabularies จำนวนหนึ่ง แล้วให้คนที่ไม่น่าจะช่วยอะไรได้ นั่ง add ไปเยอะๆ
– หลายๆ คนบอกว่า Drupal ใช้ยาก เพราะคนเหล่านี้ไม่รู้จักการใช้มอดูลปรับปรุงระบบแอดมิน ซึ่งผมเห็นทุกกลุ่มที่ใช้ Drupal ก็ไม่ได้ใช้ระบบพวกนี้เลย สมัยก่อนผมเลือกใช้ Rootcandy ครับ ค่อนข้างดีเลยทีเดียว แต่ปัจจุบันผมใช้ Rubik theme + Admin module ซึ่งเมนูมันผมไม่ชอบ แต่ว่า Rubik สวย เลยใช้
– AJAX Cart อย่างที่บอกไป ใช้ AJAX ได้คะแนนครับ ผมเลยใช้ AJAX Cart + AJAX module
– สิ่งที่ Ubercart ขาดคือ block รายการ order ซึ่งตรงนี้ผมใช้ Views implement เอาครับ ไม่ยากเลย
– ผมสร้าง block แปะหัวหน้า order list เป็นลิงก์ไป Track & Trace ของไปรษณีย์ไทย (น่าจะนึกถึง form ก่อนนะเนี่ย ):)
– ธีมผมจำชื่อไม่ได้แล้วครับว่าใช้ตัวไหน ผมมองแล้วว่าไม่สวยมากๆ แต่พอผมเปลี่ยนสีหน่อยมันสวยจริงๆ ด้วย (แต่ผมชอบอันที่มันแถมกะ uberdrupal มากกว่า แต่ตัวนั้นสีมันหม่นจน [ShopIt](http://shop.ubuntuclub.com) ขายไม่ออก)

สุดท้านสำหรับ HTML5 ผมก็นึกไม่ออกนะครับ ว่าจะทำยังไงเพราะ e-commerce จะมี notification เด้งมาก็คงไม่ใช่ จะมี CSS Transform เดี๋ยว Firefuck ก็เข้าไม่ได้ จนหันไปมองจอสองเจอว่ามี Geolocation + Reverse Geocoding ที่น่าทำมาก ผมก็เลยเอามาทำ คือพอถึงหน้าใส่ที่อยู่ ระบบจะตรวจสอบว่ามี geolocation api หรือไม่ ถ้ามีจะมีปุ่ม พอกดแล้วมันจะหาตำแหน่งจาก HTML5 Geolocation API อัตโนมัติ แล้วยิงเข้า Reverse geocoding ได้ที่อยู่และรหัสไปรษณีย์ออกมาจากนั้นก็กรอกลงฟอร์มเป็นอันเรียบร้อยครับ ซึ่งกลุ่มอื่นๆ มักจะเข้าใจผิดว่า widget ที่เป็น JavaScript วูบๆ มันเป็น HTML5 แต่ไอ้พวกนั้นมันมีตั้งแต่สมัย DHTML แล้วครับ (เพียงแต่เพิ่งมาฮิตในยุคหลังที่ browser ทำงานพวกนี้เร็วขึ้นมาก)

สำหรับการ present ผมเองรู้สึกว่าผมไม่ถนัดด้าน presentation มากๆ แต่พอเริ่มนำเสนอแล้วเนื่องจากว่าผมเขียนเนื้อหามาฮาๆ ก็เลยมัวแต่ฮา ไม่ประหม่าอะไร ก็สั่ง iPad ตัวละ 190 ไป 50 ตัวครับ เรียกเสียงฮาจากผู้ชมได้พอสมควร และพอเปิดให้ดูยอดขายยิ่งฮาเพราะผมขายจอตัวเป็นล้านไปร้อยตัว ยอดขายเลยเป็นสองหมื่นล้าน แต่ในการ present นี้ผมก็พลาดลืมหลายๆ ส่วนไปเยอะเลยครับ เช่นว่าตอน 30 วินาทีสุดท้าย ผมกะจะเปิดคลิปจับผิดศาสดา แต่ก็รีบจนลืมไปเลย ส่วนการตอบคำถามผมรู้สึกแปลกใจที่กรรมการไม่ถามหลายๆ คำถามที่กลุ่มอื่นโดน (ทราบทีหลังว่ากลุ่มที่โดน คือไม่รู้จะให้คะแนนยังไง) เช่นว่า meta ที่ผมรับมือไว้แล้ว (บังเอิญไปเจอว่าธีมรองรับ เลยทำครับ ไม่ได้ลงมอดูลเพิ่ม) หรือจะเป็นเรื่อง license ที่โลโก้ผมเป็นลุงแซมเป็น PD ส่วนรูปในเว็บผมก็ใส่ credit และใช้ใน resolution ต่ำก็จะเข้าข่าย Fair Use (ในไทยไม่มีเรื่อง fair use ตรงๆ ครับ แต่ใน พรบ. ลิขสิทธิ์ก็จะมีอยู่หลายข้อ แต่เว็บที่ผมก๊อปมามันไม่ใช่เว็บไทย) แต่เรื่อง Geolocation บน Firefox นี่ผมก็เคืองจริงๆ ครับว่ากดปุ่มปุ๊บมัน error ใน source ของ Firefox และ Firefox 4 ก็ไม่มี geolocation provider ที่ดีเท่า chrome! นี่มัน browser เหี้ยอะไร (ปัจจุบันเว็บส่วนตัวผมจัด non-webkit อยู่ในชั้นเดียวกับ IE คือ not-supported ปล่อยตามเวรตามกรรมที่ developer มันทำมา)

ขอบคุณทุกท่านสำหรับรางวัลขวัญใจมหาชนนะครับ

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 เข้าไปก็ปลอมตัวได้แล้ว แจ่มไหมหละ