Tethering with Samsung Galaxy Spica

ว่าด้วยความอยากเอาโทรศัพท์มาต่อเน็ต แต่เครื่องที่ใช้อยู่ก็ดันเป็น android นี่ล่ะสิปัญหาใหญ่ ที่ว่าใหญ่ก็เพราะถึงจะใช้เครื่องมาได้สักพักแล้วก็จริง แต่ว่ายังไม่ค่อยได้งัดแงะอะไรเลย อย่างมากก็แค่อัพเดตเฟิร์มแวร์เอง กับเขียนโปรแกรมใช้เองนิดหน่อย พออยากใช้เน็ตเข้าจริงๆ ก็ลองสรรหาวิธีการอยู่นาน ทั้ง root เครื่องก็แล้ว ลงแอพโน่นแอพนี่ก็แล้ว ดีที่ไม่เสียเงินแค่เสียเวลา แต่ก็ได้เล่นอะไรไปเรื่อยเปื่อยกับ Spica ถือว่าสมประโยชน์ด้วยกันทั้ง 2 ฝ่ายแล้วกัน

จนในที่สุดก็พบว่ามันเป็น bug ของ Samsung ที่แอบปล่อยของเอาไว้ไม่ให้ OS รู้จักโทรศัพท์ของตัวเองในฐานะโมเด็ม ต้องไปใช้โปรแกรมของ Samsung เองเท่านั้นถึงจะทำได้ แต่ว่าโปรแกรมนี้มันทั้งอ้วน กินเครื่อง แถมที่สำคัญ “ทำงานได้กับ Windows เท่านั้น!” ด๋อยมาก แต่สุดท้ายด้วยความถึก + อยาก ก็พบวิธีการทำให้เป็น Modem ได้ง่าย

แค่กด “*#7284#” จากนั้นจะมีหน้าต่าง PhoneUtil ขึ้นมาให้เลือก Modem ที่ USB จากนั้นในหน้าต่าง Network (System Preferences > Network) ชื่อของ “GI-5700″ จะเปลี่ยนเป็น “SAMSUNG CDMA Technologies” ใส่เบอร์แล้วกด Connect ก็จะได้ตามรูปด้านล่างนี้แล

Network Configuration

Network Configuration

ส่วนความเร็วก็ไม่ถือว่าขี้เหร่อะไรมากนักกับ edge แถวๆ ชานเมือง

ข้อสังเกตุ

  • ใช้ OS X 10.6.4 + Spica firmware: I5700UXJG1
  • Spica เสียบกับ OS X แล้วจะเห็นเลย ไม่ต้องลงไดร์เวอร์เหมือน  Windows
  • ต้องเสียบ USB กับเครื่องอยู่ตลอด ผมถือว่าดีนะ ชาร์จแบตไปด้วยในตัว
  • เนื่องจากไม่ต้องลงโปรแกรมเพิ่ม อาจจะใช้กับ Android Phone อื่นๆ ได้ด้วย
  • สำหรับ Windows อาจจะไม่ต้องอาศัย Kies หรือโปรแกรมอื่นๆ จาก Samsung สำหรับสร้างการเชื่อมต่ออีกแล้ว
  • อาจจะเอามะพร้าวห้าวมาขายสวน

Vimcasts: Introduce you to The Power of VIM

สักเดือนหนึ่งได้แล้วมั้ง เกิดความอยากใช้ Vim ให้คล่องบ้าง emacs คงไม่ไหว เพราะต้องมาเริ่มนับหนึ่งใหม่เลย ไหนๆ แล้ว Vim ก็พอมีพื้นอยู่บ้างเลยกะว่าหากินกับ Vim นี่ล่ะ ดูจะง่ายที่สุด อีกอย่าง Server ที่ใช้ส่วนใหญ่มีแต่ Vim อยู่แล้วด้วย (รวมทั้งเครื่องที่ใช้อยู่ตอนนี้) หาไปหามาก็ไปเจอกับ Vimcasts.org เข้าให้ ขอบอกว่าตอนแรกที่ดูนำ้ตาแทบไหล เพราะหลายอย่างพึ่งรู้จริงๆ ว่า Vim มันทำได้ ตอนแรกที่ดูคือ “Indentation commands”

ความจริงแล้วอยากเอาตัวอย่างมาวางไว้ในเว็บเหมือนกัน แต่เกรงใจเจ้าของ เลยคิดว่าให้ลิงค์ของเว็บแล้วเข้าไปดูเองจะดีกว่า รายการนี้มีอยู่บน iTunes ด้วย ขนาดไฟล์แต่ละตอนอยู่ประมาณ 10MB (ต่อให้ใหญ่กว่านี้ผมก็ว่าคุ้มที่จะโหลดมานั่งดู) ใครสนใจตามไปดูหรือดาวน์โหลด Vim มาเล่นก็ดูได้ที่ลิงค์ด้านล่างครับ

ข้อมูลเพิ่มเติม

Spring Framework: First Impression

ช่วงนี้ห่างจาก Spring ไปนาน เพราะต้องไปจับ Zend (PHP) บ้าง จับ Java (ที่เขียนโค้ดถึกๆ ของน้องนักศึกษาฝึกงานบ้าง) ทะเลาะกับ Python และ Objective-C บ้าง จนวันก่อน (11 สิงหาคม) ว่างๆ เลยงัดหนังสือ Spring in Action (ซื้อมาตอนลดราคา 60% ช่วงวันขอบคุณพระเจ้า ฮ่าๆ) มาอ่านตอนนั่งรถกลับบ้านกลับบ้าน เล่มนี้อ่านไปแล้ว 1 รอบ แต่ก็แค่บทที่ 2 ยังอ่านไม่จบสักที อ่านไม่ทันจบก็ต้องทำโปรเจ็คเลย จำได้ว่าก่อน Spring 3.0 ออกมาแป๋บเดียว

Spring in Action 3rd Editions

Spring in Action 3rd Editions

พอกลับมาอ่านคราวนี้ พบว่าหลายอย่างเข้าใจผิดและหลงประเด็นไปค่อนข้างมาก อย่างเช่นเรื่อง Dependency Injection (DI) หรือ Aspect-Objects Programming (AOP) ซึ่ง 2 เรื่องนี้ถือได้ว่าเป็นหัวใจของ Spring เลยก็ว่าได้ ช่วงนั้นคิดเองเออเองไปเยอะ เลยออกแนวเป๋ไปจากแนวคิดของ Spring ค่อนข้างมาก แต่คราวนี้คงมีเวลาอ่านละเอียดขึ้นด้วยมั้ง ทำให้เข้าใจอะไรๆ เยอะขึ้น เลยพบว่า Java เองถึงจะมีรอยด่างบ้าง แต่ก็ยังมีเสน่ห์และความงามของมันอยู่เหมือนเดิม ตอนนี้ถึงจะยังไม่เข้าใจ Spring ทั้งหมด แต่ก็ไปในแนวทางที่ถูกที่ควรแล้ว เห็นภาพ DI และ AOP ได้อย่างถูกต้องแล้วล่ะ

คราวนี้นอกจาก Spring in Action แล้ว ยังดาวน์โหลด Spring Reference (PDF ~5MB) มาอ่านคู่กันไปอีกทาง ต้องบอกอย่างหนึ่งว่าเอกสารของ Spring Framework ดีมากจริงๆ เรียกได้ว่าตรงประเด็นไม่ค่อยมีน้ำมาปนเท่าไหร่นัก แต่ถ้าใครอ่านแล้วเห็นว่ามันเป็นยาขมก็ไม่ใช่เรื่องแปลกเท่าไหร่ อย่าตกใจไปลองไปอ่านภาษาไทยที่ Spring66 ดูน่าจะเห็นภาพ Spring ชัดขึ้น แล้วค่อยกลับไปอ่าน Spring Reference ใหม่ คิดว่าน่าจะทำให้เข้าใจได้มากขึ้น

Java Persistence with Hibernate

Java Persistence with Hibernate

ตอนนี้ก็เหลือทะเลาะกับ Hibernate อีกคน ซื้อหนังสือมาแล้วเหมือนกัน (Java Persistence with Hibernate) แต่ก็ยังอ่านไม่จบเหมือนเดิม คงอีกสักพักกว่าจะเคลียร์กันได้ แต่หลังจากที่ไปเล่นกับ Doctrine มา ทำให้เห็นภาพ Hibernate ได้ชัดเจนมากขึ้น ก่อนหน้านี้มีปัญหาเรื่องการ config เจ้า Hibernate นิดหน่อย สุดท้ายก็โหลด Hibernate Reference มานั่งอ่าน กระจ่างมาก เรื่องที่ติดส่วนใหญ่ก็คือการ Integrate เจ้า 2 คนนี้ให้ทำงานด้วยกันได้ ปัญหาใหญ่ก็คือ ตัวอย่างส่วนใหญ่ทั้งไทยและฝรั่งเป็นโค้ดเก่าเกินไป ลองทำตามดูหลายอันก็ไม่ได้สักที สุดท้ายมานั่งไล่แนวคิดแล้วลองเขียนเอง ฟลุ๊คได้ซะงั้น ช่วงนี้ก็เหลือแต่แก้โน่นแก้นี้ให้อะไรมันเข้าที่เข้าทางพร้อมทำงานจริงๆ ล่ะ

สุดท้ายก่อนกลับบ้านช่วงวันแม่ ตาเจ้ากรรมดันไปป่ะกับ Spring Roo เข้าให้ เคยเล่นมาแป๋บก่อนจะออกเป็น 1.0 พบว่าเออมันง่ายดีแฮะ แต่ก็ไม่ได้เล่นอะไรมากเท่าไหร่นัก เพราะยังไม่รู้ว่าจะเอามาทำอะไรเหมือนกัน ตอนนี้เป็น 1.1.0M2 แล้ว มีอะไรให้เล่นเยอะดี ลองทำตามโปรเจ็คร้านพิซซ่าเลยพบว่า โอ้ว มันเทพมาก โหลด Reference มานั่งอ่านแล้วเหมือนกัน แต่คงอ่านผ่านๆ สักรอบก่อนว่ามันทำอะไรได้บ้าง เจาะ Spring in Action เสร็จเมื่อไหร่คงได้มานั่งไล่อ่านอีกรอบ

ช่วงนี้เริ่มมีเวลาว่างมากขึ้น (แต่ก็ไม่ได้มากมายอะไรนัก) ก็เลยไล่อ่่านหนังสือที่ซื้อเก็บมาดองๆ ไว้ให้หมดซะ แต่ถ้าใครอยากลองเล่นกับเจ้า 2 คนนี้ เอกสารแนะนำคือ Reference ในเว็บมันเลย ยังไม่ต้องซื้อหนังสือให้เปลืองเงิน แนวการเขียนของทั้ง 2 ที่จะเหมือนกันคือค่อนข้างจะขวานผ่าซากหน่อย ไม่มีน้ำมากตรงประเด็น

Spring เป็น Framework ฝั่ง Java ตัวแรกและตัวเดียวที่เคยใช้ แล้วก็ตกหลุมรักเลย คงเพราะด้วยแนวคิดและวิธีการของ Spring หลายอย่าง คงใช้มันหากินแล้วล่ะ

ข้อมูล

Zend Framework 1.10 + Doctrine 1.2

ปัญหาเริ่มต้นที่ว่า ผมใช้ Zend Framework อยู่ตอนนี้ แต่ด้วยฐานข้อมูลที่มันไม่นิ่ง และกำลังมองเรื่องปริมาณการใช้งานที่เห็นว่างานนี้ถ้าเกิด มีผู้ใช้เยอะแน่ๆ ปัญหาหนึ่งที่เห็นว่ามันยังเป็นคอขวดในโปรเจ็คก็เรื่อง transaction ของฐานข้อมูล ซึ่งตอนแรกเขียน Class Map กับตารางปวดหัวมากที่เดียว เพราะอย่างหนึ่งที่ต้องยอมรับก็เพราะไม่ได้เป็นคนออกแบบเองแล้วเอกสารประกอบให้มาน้อยมาก ได้แก่ Data Dictionary ที่หยาบเอามากๆ และ ER Diagram ที่ต้องมานั่งเล็งเอาจากภาพหน้าจอโปรแกรมออกแบบ ER Diagram อีกที อย่างสุดท้ายก็คือในการใช้งานจริง ต้องเอาไปใช้ร่วมกับ Oracle อันนี้ต้องบอกว่าเป็นที่ผมเองที่ไม่เคยลองเล่นกับ Oracle มาก่อนเลยค่อนข้างจะเป็นปัญหา

สุดท้ายเลยตัดสินใจมองหา ORM (Object-Relational Mapping) มาช่วยงานดีกว่า เพราะอย่างที่เห็นได้ชัดคือ ORM มันทำงาน On top พวกฐานข้อมูลอีกที ไอ้เรื่องการจะเปลี่ยนจาก MySQL ที่ลองอยู่ไปเป็น PostgreSQL หรือ Oracle คงไม่ใช่ปัญหาใหญ่เท่าไหร่นัก อย่างมากก็แก้ที่ตัว ORM เท่านั้น แต่ก่อนอื่นต้องบอกกว่า Zend_Db ของ Zend ก็เก่งใช้ได้นะครับ แต่ข้อเสียคือถ้าต้องมา Optimize ให้เข้ากับฐานข้อมูลก็ใช้พลังงานเยอะเหมือนกัน เรียกได้ว่าถ้าต้องจบงานด้วยระยะเวลาขนาดที่เป็นอยู่คงถึงขั้นธาตุไฟเข้าแทรกอ้วกเป็นเลือดกันแน่นอน

เท่าที่ลองหาข้อมูลดู ก็มี Doctrine นี่ล่ะครับให้ PHP Developer ได้ใช้กัน แอบดีใจเล็กๆ ที่ฝั่ง PHP ก็มี ORM ใช้แล้ว ผมเองเลือกใช้ 1.2 ครับ เพราะยังมีเอกสารให้อ่านอยู่ แต่ขณะที่เขียนนี้ Doctrine มีเวอร์ชั่น 2.0 เป็น beta release ให้ลองใช้งานกันเรียบร้อยแล้ว ทำงานบน PHP 5.3 เท่านั้น!

ในอนาคตอันใกล้ๆ มีแผนว่าจะเขียนเรื่องการใช้งาน Doctrine 1.2 กับ Zend Framework 1.10 ลง blog เหมือนกัน แต่ช่วงนี้ขอเผางานนี้ให้เสร็จก่อนนะครับ แรกๆ คงเป็นการรวบยอดจากใน ZendCasts มาก่อน จากนั้นค่อยเปลี่ยนจาก Doctrine 1.2 เป็น Docctrine 2.0 กับ Zend Framework เวอร์ชั่นขณะที่เขียน ซึ่งเท่าที่ตามอ่านในรายการพัฒนาของ Zend Framwork แล้วก็แอบใจชื้นขึ้นมาอีกนิด เพราะทาง Zend Framework เองก็มีแผนที่จะพัฒนาให้สามารถเรียกใช้ Doctrine ได้ง่ายขึ้นกว่าในปัจจุบัน แต่ถ้าใครใช้ Symfony อยู่ว่าคงคุ้นเคยกับ Dcotrine นี่แล้วเพราะเท่าที่อ่านดู Symphony สามารถใช้ command line  สร้างโปรเจ็คที่ทำงานกับ Doctrine ได้นานแล้ว

สุดท้ายถ้าใครต้องการเล่นกับ Doctrine และ Zend Framework ก็ลองนัั่งฟังได้ที่ www.zendcasts.com ครับ

Doctrine, Zend Framework, Zendcasts

PHPUnit Setup

PHPUnit เป็น Unit Test Framework สำหรับ PHP ใครใช้ JUnit มาแล้วก็อารมณ์เดียวกัน แค่เปลี่ยนจาก Java มาเป็น PHP

ก่อนอื่น ผมติดตั้งใน Mac OS X วิธีคงไม่ต่างกันมากนักกับ Linux แต่สำหรับ Windows อันนี้ไม่แน่ใจครับ เพราะเลิกใช้นานแล้ว

วิธีการติดตั้ง

  1. ให้แน่ใจว่าใช้คำสั่ง php ที่ terminal ได้
  2. PHPUnit ต้องการ pear ด้วย สำหรับใครที่ใช้ Windows ก็ต้องโหลดมาเพิ่ม ได้ที่ pear.php.net ส่วน Linux และ OS X ไม่ต้องเพราะมีแล้ว
  3. โหลด PHPUnit จาก pear.phpunit.de/get เลือกเอาตามชอบครับ ผมเลือกเป็น PHPUnit-3.4.9
  4. ไฟล์ที่ได้จะเป็นไฟล์ PHPUnit-x.x.x.tgz ใช้คำสั่งด้านล่างเพื่อแตกไฟล์ออก
    tar xzf PHPUnit-x.x.x.tgz
    จะได้โฟล์เดอร์ PHPUnit-x.x.x
  5. ในโฟล์เดอร์ PHPUnit-x.x.x จะมีไฟล์ phpunit.php คือไฟล์ที่เราต้องการ เปลี่ยน phpunit.php -> phpunit ก็ได้ไม่มีปัญหา
  6. ในไฟล์ phpunit.php บรรทัดที่ 43 เพื่อใช้ได้แน่นอนให้เปลี่ยน dirname(__FILE__) เป็น '/path/to/PHPUnit-x.x.x'
  7. และเพื่อให้ใช้คำสั่งจากที่ไหนก็ได้ ก็แก้ไขค่าใน .profile นิดหน่อย
    # vi ~/.profile
    ...
    export PHPUNIT_HOME=/path/to/PHPUnit-x.x.x
    export PATH=$PHPUNIT_HOME:$PATH
    :wq
    # source ~/.profile
  8. ลองเขียนโปรแกรมเล็กๆ ทดสอบดู
    <?php
    # StackTest.php
    require_once 'PHPUnit/Framework.php';
    class StackTest extends PHPUnit_Framework_TestCase
    {
        public function testPushAndPop()
        {
            $stack = array();
            $this->assertEquals(0, count($stack));
        }
    }
    
  9. จะได้ผลลัพธ์ดังนี้ ถือว่าสำเร็จใช้ได้

    PHPUnit

    PHPUnit

ข้อมูลเพิ่มเติม: PHPUnit Book [PDF]

Spica EP: I

ช่วงนี้เกิดอาการกระแดะเบื่อ Nokia 5800 ซะงั้น เพราะนิ้วใหญ่ จอเล็กเลยจิ้มลำบากมั้ง ตอนนี้เลยซื้อ Spica มาแล้ว อยากเอามาเขียนโปรแกรมเต็มแก่ แต่ไม่รู้ว่าจะมีความอยากได้นานเท่าไหร่

แต่เรื่องแรกที่เซ็งคือเครื่องที่ได้มาลำโพงดันแหลมพร่าซะงั้น (ออกแนวลำโพงแตก) ตอนนี้อัพเป็น 2.1 แล้วซะด้วย เหลือแค่ดาวน์เกรดเป็น 1.5 เหมือนเดิม แล้วค่อยเอาไปทะเลาะกับศูนย์ซัมซุงให้ช่างออกใบรับรองให้ก่อนว่าลำโพงมันเจ๊งจริงๆ เราไม่ได้อุบอิ๊บคิดไปเองว่ามันเสียงแตก จากนั้นค่อยเอาไปเปลี่ยนที่ร้านเพราะโชคดีที่ว่ามันยังอยู่ในระยะเวลาประกัน 7 วัน (เป็นขึ้นตอนมาตรฐานที่ call center ของ samsung บอกมาอีกที) วันศุกร์คงได้เอาไปเปลี่ยน

ถ้าเปลี่ยนไม่ได้คงเห็นข่าวร้าน J-Mart ที่ฟิวเจอร์รังสิตไฟไหม้แน่นอน

สร้าง XML Binding Class ด้วย JAXB

สไลด์ยังอุ่นๆ อยู่เลยเพราะพึ่งออกจากเตาใหม่ๆ สไลด์นี้ว่าด้วยการสร้าง XML Binding Class ด้วย JAXB ใน Java เป็นตัวอย่างและสรุปสั้นๆ ให้พี่ที่ทำงานฟัง ถ้าต้องการรายละเอียดถามได้ครับ