>>> Let's run Python on Mobile

วันพุธ, เมษายน 26, 2549

SmartPhone + Jython (Python in Java)

Jython เป็นภาษา Python ที่สร้างขึ้นด้วย Java ล้วนๆ
ภาษาPythonใช้ในการเขียนโปรแกรมคอมพิวเตอร์ เป็นภาษาอ่านง่าย เรียนรู้ง่าย มีให้ใช้ ทั้งบน Linux ,PC ,PocketPC ,Symbian และ Java ว่ากันว่า โปรแกรมเมอร์คนใด เพียงแค่ D/L Python Doc มาอ่าน แค่วันเดียว ก็พอจะเขียน Python ได้แล้ว
Python ที่อยู่บน Java ทำงานบน Java Virtual Machine เรียกว่า Jython

หลังจากผมพบว่า PersonalJava สามารถทำงานบน WindowsMobile SmartPhone ก็ลองเอา Jython มาลง ก็พบว่า ใช้งานได้ดีทีเดียว

เปิด Jython มาครั้งแรกก็จะพบกับ InterActive Console
(หรือ Jython Completion Shell)

InterActive Console

สามารถใช้เขียนโปรแกรมสั้นๆ ลองหัดใช้คำสั่งต่างๆ หรือใช้เป็นเครื่องคิดเลขได้

ใช้เขียนโปรแกรมสั้นๆใช้งาน หรือทดสอบcode

เนื่องจาก Jython เป็น Pure Java จึงมีความสามารถพิเศษ เรียกใช้คำสั่งต่างๆของ Java ได้ เช่น จากตัวอย่างข้างล่าง
เปิด Frame มีคำว่า Hi ขนาด170x100pixel
เขียน code แค่ 4บรรทัด (และไม่ต้องcompileเลย!)

เรียกใช้ Java

การเขียนโปรแกรมบน Jython ก็เขียนเป็น Text-file ธรรมดา ที่สามารถเปิด อ่าน เขียน ได้ด้วย Notepad ทั้งบน PC และ Smartphone

มาลองติดตั้ง Jython กันเลยดีกว่า
เริ่มจากคุณต้องลง PersonalJava ใน WindowsMobile Smartphone
D/L PersonalJava ได้จาก
http://www.smart-mobile.com/forum/viewtopic.php?t=97137
ผมแนะนำวิธีติดตั้ง PersonalJava ไว้ที่นี่
click here -> isiam.blogspot.com
ติดตั้งเสร็จคุณก็จะมี ไฟล์เหล่านี้ (~2Mb)
-pjava.exe
-javai.dll
-wceCompat.dll
อยู่ใน \Storage\pjava\bin
ของ WindowsMobile SmartPhone

เสร็จแล้ว ก็ลง Jython
D/L ได้ที่นี่
http://www.smart-mobile.com/forum/viewtopic.php?t=98932
D/L ทั้ง4parts ครบแล้วเปิดด้วย Winrar
ให้นำโฟลเดอร์ \j ไปไว้ใน \Storage Card
จะได้ \Storage Card\j
มี 4folders ,3files อยู่ภายใน ดังรูป

\Storage Card\j มี 4folders ,3files

ต่อมาก็ลงไฟล์ .jar เป็น Java Library
คุณต้องD/L JDK1.1 มาติดตั้งในPC
D/L JDK1.1 ได้จากที่นี่
click here -> java.sun.com
ผมแนะนำวิธีติดตั้งไว้ที่นี่
click here -> isiam.blogspot.com
สมมติคุณติดตั้ง JDK1.1 ไว้ที่
C:\jdk1.1.8
ให้ลองค้นๆดูใน
C:\jdk1.1.8\JRE\lib
พบไฟล์ rt.jar และ i18n.jar
ให้นำสองไฟล์นี้ ไปไว้ใน SmartPhone ที่
\Storage Card\j

ใน C:\jdk1.1.8\JRE\lib

และถ้าคุณจะใช้ Java Swing ก็ต้องใช้ Google ตามหาไฟล์ ชื่อ swingall.jar
นำมาไว้ที่ \Storage Card\j ด้วย
(ไว้วันหลังจะใช้ swing ค่อยนำมาใส่ก็ได้)

ต่อมาก็เปิดโปรแกรม
ใช้ SmartExplorer คลิกที่ไฟล์
JythonSmartphone
ใน \Storage Card\j
( หรือจะให้เรียกใช้สะดวก วันหลังอาจลอง copy ไฟล์นี้ไปที่
\Storage\windows\Start Menu )
ถึงจุดนี้จะมี error แสดงเล็กน้อย ไม่ต้องไปสนใจ
Jython จะ scan ตาม ไฟล์ .jar ต่างๆ ประมาณ 2นาที
จะเปิดช้ามากๆเฉพาะครั้งแรก ครั้งถัดไปจะเร็วขึ้น เหลือครึ่งนาทีเศษ
ส่วนใหญ่ผมใช้วิธีเปิดค้างไว้ตลอด จะได้ไม่เสียเวลาเปิดบ่อยๆ
เสร็จเรียบร้อยก็จะพบ Jython Shell

คุณสามารถ D/L วิธีการเขียนโปรแกรมด้วย Jython และ Python ได้จาก
Python 2.4.3 Documentation
A Byte of Python
Dive Into Python
Jython Homepage
E-book Jython 01 ,02 (or 01 ,02 - register needed.)

บทความเกี่ยวกับ Jython
Jython From Wikipedia
Jython Tips for Python Programmers
Scripting Java with Jython
Charming Jython
Get to know Jython
Links

Task Manager

เวลาหัดเขียนโปรแกรมบน SmartPhone
โปรแกรมประเภท Task Manager ค่อนข้างจะเป็นสิ่งจำเป็น เอาไว้สลับ สับเปลี่ยนไปหน้าโปรแกรมต่างๆ หรือไว้ ปิดโปรแกรม ,kill processที่ error
วันนี้จะขอแนะนำโปรแกรมหนึ่ง ชื่อว่า SP Task Manager
(เจ้าของเดียวกับ Smart Explorer อันโด่งดัง)
D/Lได้ที่นี่
http://www.binarys.com/taskmanager_en.asp
ลองมาดูหน้าตาของ SP Task Manager กันดีกว่า
ในส่วน Edit ถ้าคุณเลือกเป็น Show app.list
มันจะแสดงรายชื่อโปรแกรมต่างๆที่เปิดค้างอยู่ใน memory
ขยับแถบสีน้ำเงินขึ้นลง เพื่อเลือกโปรแกรมที่ต้องการ
แล้วเลือก
File >> Bring to Front
เพื่อไปยังโปรแกรมที่ต้องการ
หรือเลือก
File >> Quit Application
เพื่อปิดโปรแกรมที่ต้องการ

แต่บางโปรแกรมอาจยังคงค้างอยู่ใน memory ไม่ยอมให้ปิดง่ายๆ
ลองเลือก
Edit >> Show Process
เพื่อแสดง Process ทั้งหมด ที่ยังคงค้าง อยู่ใน memory
แล้วปิด Process ที่ต้องการ โดยเลือก
File >> Kill Process
(อย่าปิด Processที่คุณไม่รู้จัก ไม่งั้นอาจต้องเปิดเครื่องใหม่)

นอกจากนี้ คุณสามารถดูข้อมูลทรัพยากรต่างๆ โดยเลือก
Edit >> Show syst.status

วันอังคาร, เมษายน 25, 2549

Jasmin ,Assembly for Java

การเขียนโปรแกรมสำหรับ Jasmin ก็คล้ายๆกับการเขียนภาษา Assembly สำหรับ Java
ไฟล์นามสกุล .j สร้างเป็นไฟล์ .class (Java bytecode) ได้อย่างรวดเร็ว
เนื่องจากโครงสร้างของภาษา ใกล้เคียงกับ Java bytecode มาก
(เท่าที่มนุษย์จะสามารถอ่านได้)

ที่มาของ Jasmin มาจากหนังสือชื่อ Java Virtual Machine ของ O'Reilly
การจะศึกษาให้เข้าใจถึง Java bytecode ก็ต้องมี สักภาษาหนึ่ง ที่คนพออ่านได้้ และแต่ละคำสั่งในภาษานั้น ก็ต้องใกล้เคียงกับ แต่ละ Byte code สำหรับ Java Virtual Machine
ผู้เขียนหนังสือ จึงสร้างภาษา Jasmin ขึ้นมา

คุณสามารถ D/L Jasminได้จาก
http://jasmin.sourceforge.net/
ไฟล์ที่จะนำไปใช้งานก็คือไฟล์ jasmin.jar

ลองเปรียบเทียบภาษา Jasmin กับภาษา Java ดูนะครับ
สมมติมี โปรแกรมภาษา Java ง่ายๆประมาณนี้ (ตั้งชื่อว่าSimpleHello.java)

ถ้าเขียนเป็น Jasmin ก็จะได้เป็น SimpleHello.j(ยากๆ)ประมาณนี้

ถ้าคุณจะคอมไพล์ SimpleHello.j ไปเป็น Java bytecode
(สมมติว่า มี jasmin.jar และ SimpleHello.j อยู่ที่ C:\)
ก็ใช้คำสั่ง
java -jar jasmin.jar SimpleHello.j

เท่านี้ก็จะได้ ไฟล์ SimpleHello.class ออกมา
รวดเร็วมาก ไม่ต้องใช้ JavaSDK เลย
มีแค่ JRE+Jasmin ก็คอมไพล์ไปเป็น Java bytecode ได้แล้ว

ลองมาเล่นบน WindowsMoble Smartphoneดูบ้าง
สมมติคุณลง PersonalJava เรียบร้อย
(pjava.exe อยู่ที่ \Storage\pjava\bin)
นำไฟล์ jasmin.jar และ SimpleHello.j
ไปไว้ที่ Folder \Storage Card\j

เวลาจะคอมไพล์ SimpleHello.j ไปเป็น SimpleHello.class
ก็ใช้ Notepad สร้างไฟล์ cpSimpleHello.lnk
ไว้ที่ \Storage Card\j มีอักษรว่า
281#"\Storage\pjava\bin\pjava.exe" -classpath "\Storage Card\j\jasmin.jar" Jasmin "\Storage Card\j\SimpleHello.j"
แล้วใช้โปรแกรมพวก Explorer คลิกที่ cpSimpleHello.lnk
รอสักครู่ก็จะได้ไฟล์ SimpleHello.class อยู่ที่ "\"(root)

เวลาจะrun SimpleHello.class ก็สร้าง SimpleHello.lnk เป็น
282#"\Storage\pjava\bin\pjava.exe" -classpath "\" SimpleHello
แล้วใช้โปรแกรมพวก Explorer คลิกที่ SimpleHello.lnk

ดูๆไปก็สะดวกดี จะไม่สะดวกก็ตรงที่ภาษา Jasmin นี่ยากกว่า Java เยอะเลย
คราวหน้า จะมาแนะนำ อีกภาษาหนึ่งที่ง่ายกว่า ในการเขียนโปรแกรม บน SmartPhone
Jython - Python on Java

Coding ,Compiling in SmartPhone

การเขียนโปรแกรมมักจะถูกจำกัดว่า ควรจะทำบน PC
เหมือนถูกจำกัดอยู่แค่ในบ้าน ในoffice หรือไม่ก็ต้อง หิ้วNotebook ราคาแพงๆไปด้วย
ถ้าบางอารมณ์ อยู่ว่างๆ เบื่อๆ
หรือรู้สึก อยากเขียนโปรแกรมเล่น สนุกๆ ที่ไหนก็ได้ เมื่อไรก็ได้
ถ้ามี Mobile device ให้เราสามารถเขียน code ,compile และลองเรียกใช้โปรแกรม ได้เสร็จสรรพ ก็คงจะน่าสนุกดี

ที่จริงพวก HTML ,xHTML ,JavaScript
เขียนบน SmartPhone แล้วก็สามารถใช้ได้เลยนะครับ
แต่มันอ่านเขียนไฟล์ไม่ได้ จึงไม่ค่อยสนุกเท่าไร

จนถึงวันนี้ ผมลองเล่นดูหลายโปรแกรม ที่แนะนำไปบ้างแล้ว ก็มี
Python on Symbian S60 ,Python on PocketPc
ที่จริงบน PocketPc ก็มีอีกหลายโปรแกรมที่น่าสนใจ เช่น
PocketC# ,PocketScheme

แต่พอมาถึง WindowsMoblie Smartphone
เคยลองงัดแงะ PocketC# มาใส่ดู ก็ใช้ได้ดีเหมือนกัน
(ไว้จะค่อยๆเล่าให้ฟังวันหลัง รอให้ผมคล่องC#มากขึ้นอีกสักนิดก่อน)

พอผมหัดใช้ PersonalJava ก็มีปัญหา ว่า จะต้องไป compile บน PC อีก
ได้พยายามหา แล้วพบว่ามีภาษาอื่น ที่สามารถใช้ได้บนPersonalJava (Java1.1)
เช่น

Rhino เป็น JavaScript ที่เรียกใช้ Java Class ได้
ได้ข่าวว่าอนาคต อยู่ใน Java6 (Mustang) ด้วย
แต่ Rhinoเป็น Prototype-based programming ไม่มี Class
เวลาจะพยายามเขียนให้ได้ อย่าง Java Class แล้วอึดอัดยังไงก็ไม่รู้
สรุปว่า ผมคงต้องฝึกอีกเยอะ กว่าจะรู้สึกสนุกกับ Rhino
แต่ข้อดีที่น่าสนใจก็คือ ลง Rhino+PersonalJava แล้วสามารถ
compile ไฟล์ .js ไปเป็น .class ใน SmartPhoneได้เลย
ผมก็กำลัง พยายามเขียน Rhino awt Console สำหรับ SmartPhone อยู่
เสร็จเมื่อไร จะค่อยๆแนะนำกัน

ผมเพิ่งเขียน Jython awt Console เสร็จ กำลังเรียบเรียงข้อมูลอยู่
น่าจะเป็นวิธีเดียวในขณะนี้ (เมย.49)ที่สามารถ
นำ ภาษา Python มาใช้บน WindowsMobile SmartPhoneได้

ระหว่างนี้ไปเจอ Jasmin
Jasmin เป็นคล้ายๆภาษา Assembly ของ Java คอมไพล์ไปเป็น Java bytecode
ไฟล์นามสกุล .j ซึ่งcompileไปเป็น .class
ที่สำคัญ Jasmin+PersonalJava สร้างไฟล์.class ได้ใน SmartPhone เลย
เสียแต่ว่า ภาษา Jasmin ยากพอๆกับ Assembly เลย
(เอ หรือว่ายากกว่า? น่าลองค้นๆดู ...)

วันอาทิตย์, เมษายน 23, 2549

จับ swing ใส่ SmartPhone

ลองมาดูเทคนิคการใส่ swing ลงใน WindowsMobile SmartPhone ดูบ้าง
เริ่มจากคุณต้องหา ไฟล์ชื่อ swingall.jar ให้ได้ก่อน
ลองค้นๆดูด้วย Google ครับ
คลิกที่นี่เพื่อลองค้นหา swingall.jar ด้วย Google
ไฟล์ swingall.jar เป็น Java swing รุ่นแรกๆของ Sun ไว้ใช้เขียนโปรแกรม กับJDK1.1
ไฟล์เดียวกันนี้ก็ใช้ในการ run โปรแกรมที่เรียกใช้ swing ได้ด้วย

เมื่อได้ไฟล์ชื่อ swingall.jar มาแล้ว (เนื่องจากไฟล์ค่อนข้างใหญ่ประมาณ 2MB)
ให้นำไปใส่ใน SmartPhone ที่ \Storage Card\j
(สร้างโฟลเดอร์ชื่อ j ใน\Storage Card แล้วนำ swingall.jar ไปใส่ในโฟลเดอร์นี้ -โฟลเดอร์ชื่อยิ่งสั้นยิ่งดี เพราะ สะดวกเวลาสร้าง Shortcut)

การเขียนโปรแกรมเรียกใช้ swing ใน JDK1.1 จะแตกต่างจาก Javaรุ่นใหม่ๆอยู่เล็กน้อย
ประการแรก ต้อง มี swingall.jar ใน -classpath ทั้งในเวลา compile และ run โปรแกรม
(และคนที่เขียนJavaมาบ้าง คงสังเกต ว่า JDK1.1ใช้ -classpath แต่รุ่นใหม่ๆใช้คำว่า -cp)

และอีกประการหนึ่ง ที่สำคัญ การเขียนโปรแกรมเรียกใช้ swing ใน JDK1.1 จะใช้ว่า
import com.sun.java.swing.*;
(แต่ Javaรุ่นใหม่ๆจะใช้เป็น import javax.swing.*;)

หมายเหตุ:ขอ Update สักเล็กน้อย
แต่ถ้าคุณสามารถหาswingall.jar version ที่เป็น javax.swing ได้
ก็ใช้ import javax.swing.* ได้ครับ
ถ้าอยากรู้ว่าได้versionไหนมา ให้ใช้ WinRar,WinZip ค้นเข้าไปดู
หรือแวะไปดูที่นี่
http://www.smart-mobile.com/forum/viewtopic.php?t=97137

ลองมาดูตัวอย่าง code กันเลยดีกว่า
สมมติคุณมี code ประมาณนี้
(เทคนิคการเขียนโปรแกรมของผม อาจไม่น่าดูเป็นตัวอย่างเท่าไร แต่ก็อย่าว่ากันนะครับ)

จาก code เป็นโปรแกรม สร้าง JButton ไว้บน JFrame ปิดโปรแกรมเมื่อคลิกที่ JButton
สมมติ saveโปรแกรมเป็นชื่อ Stest.java ไว้ที่ C:\
(และ swingalljar ก็อยู่ที่ C:\ด้วย)
เปิด Command Prompt แล้ว ตั้ง path=.;C:\JDK1.1.8\bin
(เผื่อว่าคุณอาจมี JDKอยู่หลาย version)

เวลาคอมไพล์โปรแกรมก็พิมพ์ว่า
javac -classpath ".;C:\swingall.jar;C:\JDK1.1.8\lib\classes.zip" Stest.java
จะได้ไฟล์ Stest.class ออกมา
เวลาrunโปรแกรมก็พิมพ์ว่า
java -classpath ".;C:\swingall.jar;C:\JDK1.1.8\lib\classes.zip" Stest

ต่อมาเวลาจะนำไปใช้บน WindowsMobile SmartPhone
ก็สร้าง Shortcut เป็นไฟล์ชื่อ Stest.lnk
ด้วย Notepad มีตัวอักษรประมาณนี้
221#"\Storage\pjava\bin\pjava.exe" -classpath "\Storage\pjava;\Storage Card\j\swingall.jar" Stest
(เรียงต่อกันไปในบรรทัดเดียว ไม่มีการขึ้นบรรทัดใหม่นะครับ)
saveเป็นไฟล์ชื่อ Stest.lnk

แล้วนำ ไฟล์ Stest.lnk และ Stest.class
ไปใส่ใน SmartPhone ที่โฟลเดอร์ \Storage\pjava
สรุป ถึงตรงนี้ คุณก็จะมี
-PersonalJava(pjava.exe)อยู่ใน \Storage\pjava\bin
-ไฟล์ Stest.lnk และ Stest.class อยู่ใน \Storage\pjava
-swingall.jar อยู่ใน \Storage Card\j

เวลาrunโปรแกรมก็ เปิด SmartExplorer แล้วคลิกที่ Stest.lnk

ตัวอย่าง Code
stest.zip