the confession of a late night programmer

You know you've achieved perfection in design, not when you have nothing more to add, but when you have nothing more to take away.

-Antoine de Saint-Exupery, Wind, Sand and Stars  

Friday, May 30, 2008

Ok, basically, now we've only one choice and we know that it's not from the Sun. Basically it's the work of the man who ports JamVM, GNU Classpath and Java/ObjC binding to iPhone/iPod Touch. Thank you, thank you. So, following are the steps to make your iPhone/iPod Touch Javanized:

  1. As the first step, of course, you need to jailbreak your iPhone first (I'll call it only iPhone from here, but you know, it's including iPod Touch as well). The best and easiest way is by using Ziphone.
  2. Then, to make your iPhone usefule, please install OpenSSH, and Term-vt100 from the Installer.app
  3. Install Cydia application manager (actually, a Debian APT GUI front-end, so if you're Debian or Ubuntu Linux users, you're at home with all that apt-* command), to do this, in Insaller.app, add http://apptapp.saurik.com to the source list, then refresh. Then, install "Cydia Installer" and after that, quit Installer.app.
  4. Open Cydia and reload the package list. After that, please install the following packages:
    1. JamVM : this is the Java VM for iPhone
    2. GNU Classpath : the java class library
    3. JocStrap : Java/Objective-C binder/bridge
    4. UICaboodle : iPhone UI library and launcher, you need this for GUI application
    5. Java SQLite : JDBC Driver for SQLite, the database engine used by iPhone
    6. Jikes : Java compiler, yeah, you can compile your Java code "in" your iPhone.
    7. iPhone-Java : an example applications for Java/iPhone.

    If you're like me, a unix geek, you'll need the VIM, sorry Emacs, you've no place on iPhone :D . Also, I recommend to install wget, cvs (or svn), Bash, bzip2, gzip, zip, top, less, lynx, make and another everyday unix commands. You can install these program by using Cydia GUI, or apt/dpkg tools in command shell.
  5. Then, you can start the terminal, fire up the vim and start writing your first Hello World in iPhone. I put an example below, well, just in case

    Hello.java
    public class Hello {
    public static void main(String[] args)
    {
    System.out.println("Hello World.");
    }
    }
    Then, compile it using this command
    $ jikes -bootclasspath /usr/share/classpath/glibj.zip Hello.java
    It's a bit ugly because you've to tell jikes where the class library is. Anyway, you can write a shell script call "javac" like this,
     #!/bin/sh
    jikes -bootclasspath /usr/share/classpath/glibj.zip "$@"

    Will handle our business just fine.

  6. Then, you can run your application in the usual way, i.e, java -cp . Hello
If you want to see some picture, look at this (link from http://homepage.mac.com/robert.lougher/).


Dear,
I'm gonna post a bunch of blog entries on Java and iPhone/iPod Touch
for now. I'm working on a project which will use Java and iPhone/iPod
Touch, so I'd like to put down my experience, and share with you guys.
That's all this is about.

Labels: , ,

Thursday, May 15, 2008

Philippe's 3 Rules of Software Craftsmanship:

#1 "Start with a vision"
#2 "Throwing more bodies at software projects only makes things worse"
#3 "There are three vectors that drive software craftsmanship: quality, schedule, and features. The challenge is that you only get to pick two"

Side dish:
Phillippe's law : "The productivity of a software developer in a team of N people is diminished by dividing it by the cube root of N"

Saturday, May 10, 2008

Alan J. Perlis,เคยกล่าวไว้ว่า "A language that doesn't affect the way you think about programming, is not worth knowing." แปลลวก ๆ ก็คือ ภาษาที่ไม่กระทบต่อวิธีการคิดของคุณต่อการเขียนโปรแกรมนั้นไม่มีค่าพอที่จะไปเรียนรู้มัน ผมก็เลยลองไล่ ๆ ดูว่ามีภาษาอะไรบ้างที่"เปลี่ยน"วิธีการคิดของผมบ้างนะครับ

Pascal

เป็นภาษาแรกที่หัดเขียน (เด็กรุ่นผมส่วนใหญ่ ก็คงหัดเขียน Pascal แหละ รุ่นไหนเหรอ ก็รุ่น CW/RW นะ :P) ที่สำคัญคือ ตอนนั้นผมยังไม่มีคอมพิวเตอร์เป็นของส่วนตัว แต่ไปใช้คอมพ์ที่โรงเรียนแม่ ซึึ่งทั้งโรงเรียน มีคอมพ์อยู่ตัวเดียว (PC/XT รุ่น Floppy disk 5 1/4 คู่ด้วย) ทำให้ผมสามารถใช้คอมพ์ได้แค่อาทิตย์ละ 1-2 ชั่วโมง แต่เวลาแค่ 1-2 ชั่วโมงมันไม่พอจะให้หัดเขียนโปรแกรมหรอกครับ (เขียน Hello World ก็ใช้เวลาคอมไพล์สัก 5 นาทีได้แล้ว) ถ้าต้องมัวแต่ต้องไปนั่งคิด ๆ พิมพ์ ๆ ไป แก้โค้ดไป รับรองอาทิตย์หนึ่งได้แค่โปรแกรมเดียว วิธีการที่ผมใช้ก็คือ ผมจะเขียนโปรแกรมในกระดาษก่อน แล้วลองคอมไพล์ในหัวดูว่าโปรแกรมมันควรจะทำงานยังไง เวลาเจอข้อผิดผลาด ก็แก้ในกระดาษไปแบบนี้ ข้อดีของ Pascal ก็คือ syntax มันค่อนข้างชัดเจนและอ่านง่าย ทำให้เวลาจินตนาการในหัวแล้วสมองไม่ต้องทำงานหนักมาก (ลองจินตนาการการทำงานของโปรแกรมที่เขียนด้วย Perl ดูซิครับ...) แล้วพอคิดว่าโปรแกรมทำงานได้ถูกต้องดีแล้ว ก็ค่อยเอาไปทดสอบกับคอมพ์จริง ๆ อีกที ซึ่งส่วนใหญ่ก็จะคอมไพล์ทีเดียวผ่าน :D ด้วยการหัดเขียนภาษา​ Pascal แบบนี้ ทำให้ผมสามารถพัฒนาการมองโปรแกรมแล้วคิดตามในหัวได้ เรียกว่าผมสามารถคิดแบบเดียวกับที่คอมพิวเตอร์คิดได้ก็ด้วยการหัดเขียน Pascal ในกระดาษนี่แหละ

ถ้าไปหัดเขียนโปรแกรมกับคอมพสมัยนี้อาจจะทำไม่ได้ เพราะว่าคงจะใช้วิธีการเขียนไปแก้ไป (คอมพ์มันเร็ว มันทำแบบนั้นได้) ซึ่งข้อเสียก็คือ เราจะไม่สามารถคิดถึงโปรแกรมเป็น flow หรือเป็นภาพรวมได้

C

พอเขามหาวิทยาลัยก็โดนบังคับให้เขียน C ข้อดี(หรือว่าข้อเสียก็ไม่รู้) ของ C ก็คือมัน low level มาก แต่ไม่มากจนเกินไป การที่มันอยู่กึ่ง ๆ กลาง ๆ ทำให้เราสามารถคิดได้ง่ายขึ้นว่า การที่โปรแกรมทำงานอย่างหนึ่ง เช่นการคลิกเมาส์ที่ปุ่มหนึ่ง ในส่วนฮาร์ดแวร์มันเกิดอะไรขึ้นบ้าง เช่น ต้องมีการจอง memory ยังไง ต้องย้าย memory จากส่วนไหนไปไหน จำได้ว่าตอนสมัยเรียน อาจารย์ให้การบ้านภาษา C คือให้เด็กเขียน Text editor ภาษาไทย! ก็สนุกกันใหญ่แหละครับ ตั้งแต่จะสร้าง Data Structure เพื่อเก็บเอกสารยังไง จะแสดงผลภาษาไทยยังไง ต้อง map VRAM ยังไง (สมัยนั้น ยังฮิตใช้ Hercules card กันอยู่) สุดท้ายการเรียนภาษา C ก็สามารถสอนให้ผมเชื่อมการทำงานของ Software เข้ากับ Hardware ได้ อาจจะสงสัยว่าแล้ว assembly ละ คือว่า assembly มัน low level ไปนะครับ เขียนแล้วมองการทำงานของ Hardware ได้ทะลุ แต่เอามาเชื่อมกับ Software ไม่ได้

Smalltalk

จริงๆ ผมหัดเขียน C++ กับ Java มาก่อน แต่ว่าก็เป็นการเขียนแบบ procedural ธรรมดา ๆ เลย ไม่มีความเป็น OOP แต่อย่างไร เพราะตอนนั้นมันมองไม่แตกว่า OOP คืออะไร แต่พอตอนไปออสเตรเลีย ต้องได้ลงเรียนวิชา OOP ซึ่งเขาใช้ Smalltalk ในการเรียน ก็ทำให้ผมสามารถ"คิด"แบบ OOP ได้ เพราะว่าภาษามันไม่ยอมให้คิดแบบอื่นเลย ถ้าตอนนั้นไม่ได้เรียน Smalltalk ผมก็คงยังคิดแบบ OOP ไม่ได้

จริง ๆ หลัก ๆ ที่เห็นชัด ๆ ก็มีอยู่แค่นี้แหละครับ แต่ว่าตอนนี้กำลังพยายามลุ่มลึกกับ Python และ Haskell อยู่ รวมถึง Programming paradigm อื่น ๆ เช่น AOP, Event-Processing และ Functional Programming อยู่ครับ ก็คงต้องดูต่อไปว่าผมจะถูกเปลี่ยนด้วยภาษาไหน หรือว่า Paradigm แบบไหนอีกหรือเปล่า

Saturday, February 23, 2008

วันก่อนเขียน python script โง่ ๆ หนึ่งอันเอาไว้ update status ของ server ตอนนี้ ก็เลยลองเขียน script อีกอันให้ดูฉลาดขึ้นนิดหนึ่ง โดย script ตัวนี้จะทำหน้าที่เป็น echo หรือว่า re-broadcaster สำหรับ CFP (Call For Paper) ในสาย Computer Sciences (จริง ๆ ก็สายไหนก็ได้ แต่ว่าผมอ่านแต่ CFP ของ Comp Sciences) ดังนั้น ถ้าใคร follow เจ้า twitter ตัวนี้ ก็จะได้อ่าน CFP ไปโดยปริยาย

script ไปเอาได้ที่นี่ อย่างที่บอกมันก็เป็นแค่ script โง่ ๆ ก็พยายามแกะเอาเองละกัน :D

ใครที่สนใจจะอ่าน ก็ follow cs_cfp นะครับ

Friday, February 22, 2008

ช่วงนี้เห็นฮิต ๆ ใช้ twitter กัน ก็เลยเขียน script สำหรับ update server status ไปออกที่ twitter วิธีใช้ก็สมัคร twitter ขึ้นมาอันหนึ่งแล้วเอา login/password ไปใส่ใน script เสร็จแล้ว ก็ follow login นั้น ก็เสร็จแล้วครับ

อยากแก้ไขอะไร ก็ไปดูใน script ละกัน load ได้ที่นี่ครับ อ้อ เป็น python ห่วย ๆ หนึ่งอัน และใช้ Python-Twitter ครับ

Tuesday, January 01, 2008

ปีก่อนทำ New Year's Resolutionไว้ (ทำตามชาวบ้าน) ครบปี ก็ต้องมาให้คะแนนกันสักหน่อย เอาเป็นว่าคะแนนเต็ม 1 ละกัน

1. พยายามนอนก่อนเที่ยงคืน
ล้มเหลวโดยสิ้นเชิง เอาไป 0
2. ทำงานให้มีประสิทธิผลมากขึ้น
น่าจะดีขึ้นนะ รู้สึกว่าทำงานได้มากขึ้น แต่ไม่มีตัวชี้วัด เอาไป 0.5
3. ออกไปถ่ายรูปทุกเดือน
ได้เฉลี่ยสองเดือนครั้ง ก็เอาไป 0.5
4. Online IM ให้น้อยลง
ล้มเหลวโดยสิ้นเชิง เอาไป 0
5. อ่าน paper ให้ได้เฉลี่ยอาทิตย์ละ 10 ฉบับ
ได้เฉลี่ยอาทิตย์ละ 5-6 ฉบับ เอาไป 0.75
6. จัดระบบ Bibliography ให้ดีขึ้น
ไม่ได้ทำอะไรเลย -_- เอาไป 0
7 อ่านหนังสือให้มากขึ้น
เฉลี่ยก็คงเท่า ๆ เดิม ก็ยังดีที่ไม่ลดลง เอาไป 0.5
8. กลับไปวาดรูปอีกครั้ง
มีอุปกรณ์เรียบร้อย วาดไปแล้ว .... เสี้ยวหนึ่งของรูป เอาไป 0.25
9. ออก Djift 0.1.0
ไม่ได้แตะโค้ดเลย เอาไป 0
10. ออก LekLekDict Platform 0.1.0
แก้โค้ดไปนิดหน่อย เอาไป 0.25
11. หัดเขียน Python เอาไว้ใช้งานแทน Perl
ใช้งาน Python เกือบ 100% มี shell นิดหน่อย ส่วน Perl เลิกใช้แล้ว เอาไป 1.0
12. นั่งม้ามุมฉากให้ได้ 20 นาที (ตอนนี้ 5 นาทีก็ขาสั่นแล้้ว -_-'''' )
ได้สิบนาที เอาไป 0.5
13. รื้อฟื้นวิธีเขียนตัวเมือง
ขยันได้สักสองเดือน แล้วก็ขี้เกียจเหมือนเก่า เอาไป 0.25
14. กลับไปเล่น keyboard/piano อีกรอบ
ที่บ้านมีเปียโนไฟฟ้าแล้ว เล่นไปสักสิบรอบได้มั้ง แถมเล่นไม่จบเพลงด้วย เอาไป 0.25
15. ย้าย project-ile ไป host ใหม่ (ซะที)
สำเร็จเรียบร้อยดี เอาไป 1.0
16. ทำ Driving License (ซะที)
ไม่ได้ทำอะไรเลย เอาไป 0

สรุป 16 ข้อ ได้ไป .... 5.75 คิดเป็นค่าเฉลี่ยก็ 0.36 เรียกว่าถ้าสอบ ก็ติด F

เอาเป็นว่า ปีนี้ไม่ตั้ง Resolution ใหม่ละกัน เอาของเดิมปีที่แล้ว และลองมาดูซิว่า ปีหน้าจะทำได้คะแนนดีขึ้นหรือเปล่า -_-

Tuesday, March 20, 2007

เคยไป tag เขาตอนนี้โดนเขา tag ก็ต้องมาตอบตามมารยาท
ผมใช้ Firefox อยู่ 4 เครื่อง (มีเครื่องเยอะ ๆ จะเริ่มสับสน) ก็เลยจะลง Add-Ons พวกที่ทำให้เวลาย้ายไปใช้เครื่องอื่นแล้วใช้ได้สะดวก ๆ

  • Del.icio.us Bookmarks: เอาไว้เก็บ bookmark แล้วข้ามไปดูระหว่างเครื่องได้
  • Google Notebook: คิดอะไรออก ก็พิมพ์ ๆ ใส่เก็บไว้ ข้อเสียคือ ถ้าไม่ online ก็จะใช้ไม่ได้ บางทีเลยต้อง copy มาแปะที่ Sticky ในเครื่องด้วย น่าจะทำให้มัน Sync กันได้นะ (จดใส่ Google Notebook ไว้ก่อน)
ส่วน Add-Ons ที่ทำให้ใช้ Internet ง่ายขึ้นก็คือ
  • DownThemAll!: ชื่อก็บอก เอาไว้ load รูป หรือว่า link เอกสารทั้งหน้า ไม่ต้องมานั่ง load ทีละอัน
  • Firebug: หลัง ๆ เริ่มเขียน AJAX กับพวก Javascript เยอะขึ้น มีเจ้านี้ไว้ ทำให้ชีวิตสะดวกขึ้นเยอะ
ส่วนอันสุดท้ายนี้ จำเป็นมากสำหรับบ้านเมืองที่อาการเปลี่ยนแปลงบ่อย
  • Forcastfox: เอาไว้ดูพยาการณ์อากาศก่อนออกจากบ้าน จะได้ทำใจไว้ก่อนว่ากลับบ้านมาจะหนาวตายหรือว่าร้อนตาย
ใครอยากโดน tag ก็ใส่ชื่อใน comment ละกันครับ