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

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

Tomcat 6.x: Cluster Basic Checkpoints

  • ทุกๆ Session attribute ต้อง implement “java.io.Serializable
  • เอา comment (“<!– Comment –>”) ของแท็ก Cluster ใน server.xml ออก
  • หากมีการเปลี่ยนหรือต้องการกำหนดค่า Valve สำหรับ Cluster ต้องแต่ใจว่า ReplicationValve ต้องประกาศภายใต้แท็ก Cluster ใน server.xml
  • ถ้า instance (ของ tomcat หรือ tomcat node หรือ node) ทำงานอยู่ในเครื่องเดียวกัน ก็ต้องให้แน่ใจว่าค่าในแอททริบิวต์ port (ในแท็ก Cluster) ไม่ซ้ำกัน ซึ่ง tomcat เองก็ฉลาดพอที่จะ resolve เองได้ โดยที่หา port ที่อยู่ในช่วงระหว่าง 4000 – 4100
  • อย่าลืมใส่ <distributable/> ใน web.xml ของ application
  • ถ้าใช้ mod_jk ก็ให้ใส่ค่าในแอททริบิวต์ jvmRoute ในแท็ก Engine เป็นค่า worker name ในไฟล์ workers.properties
  • ต้องแน่ใจว่าทุก node มีเวลาในเครื่องเป็นเวลาเดียวกัน หรือ sync กับ NTP เดียวกัน
  • แน่ใจว่า Load Balancer กำหนดค่าเป็น sticky session โหมด

ลายน้ำใน Pages

1. เปิดเอกสารที่ต้องการใส่ลายน้ำ

เอกสารเปล่า

เอกสารเปล่า

2. ใส่ข้อความหรือรูปภาพที่จะน้ำมาทำลายน้ำ

ต้นแบบลายน้ำ

ต้นแบบลายน้ำ

3. คลิ้กที่ต้นแบบในข้อ 2 เลือกเมนู “Format” > “Advanced” > “Move Object to Section Master”

กำหนดลายน้ำ

กำหนดลายน้ำ

4. จะได้ลายน้ำดังรูป

ลายน้ำที่ได้

ลายน้ำที่ได้


5. ถ้าหากต้องการแก้ไขให้ดับเบิ้ลคลิ้กที่ลายน้ำ Pages จะถามว่าจะให้เปลี่ยนลายน้ำนี้ไปสู่โหมดที่คลิ้กเลือกได้หรือไม่ อันนี้แล้วแต่ชอบ จากนั้นจึงแก้ไขได้ตามใจ ผลการเปลี่ยนแปลงก็จะเป็นไปในทุกๆ หน้าใน Section (ในกรณีที่มีหลาย Section ในเอกสารสามารถเลือกได้ว่าส่วนไหนไม่ต้องการใส่ลายน้ำ)

Pages, iWork ’09, Apple

Software Architecture: Test Case Writing

ความจริงเป็นสไลด์ที่ต้องเอาไปพูดให้พี่ที่ทำงานฟัง คิดว่ามันคงพอจะมีประโยชน์บ้าง เลยเอามาอัพใส่ไว้ใน blog ซะหน่อย แต่ต้องขอบอกก่อนนะครับว่าผมค่อนข้างใหม่กับเรื่องพวกนี้ ถ้าจะเอาจริงเอาจังล่ะก็ให้อ่านตรงสไลด์ 2 สุดท้ายแล้วกัน :D

แก้ไข 2009.11.09: ตอนแรกอัพโหลดให้เป็นไฟล์ของ Keynote แต่เนื่องจากมีปัญหาเรื่อง Transition ของ สไลด์นิดหน่อยจึงเปลี่ยนเป็น PDF แทน แต่ถ้าใครต้องการไฟล์ที่เป็น Keynote ก็ยินดีให้ครับ :) (goto.champ [at] gmail [dot] com)

Document Version Control with SVN

วันนี้เอาสไลด์ที่พูดให้พี่ๆ ในที่ทำงานฟังเรื่องการใช้ SVN กับงานเอกสารมาทิ้งไว้แล้วกัน ความจริงทำไว้นานและพูดไปนานมากแล้วเหมือนกัน แต่ด้วยทักษะภาษาอังกฤษของผมเองเลยยังไม่กล้าเอาออกมาให้ใครดูเท่าไหร่ แต่ตอนนี้ก็เฉยๆ ครับ เริ่มด้านแล้ว :P ถ้ามีคำแนะนำเรื่องเนื้อหา หรือภาษาก็ยินดีนะครับ เขียนทิ้งเอาไว้ได้ ส่วนถ้าใครอยากได้เป็น PDF ลิงค์จะอยู่ด้านล่างครับ

PDF: Introduce to SVN

Subversion in Actions II

คราวที่แล้วเขียนเกี่ยวกับการใช้ Subversion (svn) เบื่องต้น ได้แก่ การสร้าง Repository, เพิ่มไฟล์เข้าสู่ index ใน working copies (add), และส่งเข้าสู่ Repository (commit) ส่วนตอนนี้ก็จะขอพูดส่วนเกี่ยวกับคำสั่งต่างๆ ที่เอาไว้ติดตามความเคลื่อนไหว และการเปลี่ยนแปลงของ Repository ครับ

ข้อมูลประจำรุ่น (log)

เป็นข้อมูลประจำสำหรับรุ่นนั่น เช่น Revision ผู้ commit วันเวลา จำนวนบรรทัดที่เปลี่ยนแปลง และบันทึกประจำรุ่น มีรูปแบบตามนี้ครับ

REVISION_NO | USER_NAME | DATE_TIME | LINE_CHANGED

MESSAGE_LOG

ตัวอย่างเช่น

  $ svn log file:///Users/sitdh/Repository/helloSVNServer
  ------------------------------------------------------------------------
  r2 | sitdh | 2009-09-10 00:40:52 +0700 (Thu, 10 Sep 2009) | 1 line

  Create Project
  ------------------------------------------------------------------------
  r1 | sitdh | 2009-09-09 21:56:38 +0700 (Wed, 09 Sep 2009) | 1 line

  test
  ------------------------------------------------------------------------

คำอธิบาย:

  • บรรทัดที่ 03 และ 07 คือ ข้อมูลประจำรุ่น
  • บรรทัดที่ 05 และ 09 คือ คำอธิบายการเปลี่ยนแปลงที่ผู้ commit เขียนอธิบายไว้

หมายเหตุ: ข้อมูลดังกล่าวเป็นข้อมูลที่ได้จาก Repository เนื่องจากเราระบุพาธไว้ด้านหลัง หากให้คำสั่ง svn log จะเอา log ที่อยู่ใน Working Copies มาแสดงแทน ซึ่งข้อมูลที่ได้อาจไม่ตรงกับ Repository วิธีแก้คือใช้คำสั่ง update เพื่อปรับปรุงข้อมูลให้ตรงกัน (Synchonize – sync) ระหว่าง Working Copies และ Repository

  $ svn update file:///User/sitdh/Repository/helloSVNServer
  At revision 3.

คำอธิบาย:

  • บรรทัดที่ 01 ใช้คำสั่งเพื่อ sync ข้อมูล หามีข้อมูลที่ไม่ตรงกับ Repository จะแสดงรายการเปลี่ยนแปลงด้านล้าง
  • บรรทัดที่ 02 เป็นบรรทัดที่บอก Revision ล่าสุดที่อยู่ใน Repository (HEAD Revision)

หาความแตกต่างระหว่างเวอร์ชั่น (diff)

ก่อนอื่นต้องทบทวนก่อนว่าในตัวอย่างของ blog ที่แล้วได้สร้างข้อมูลตัวอย่างและส่งเข้า Repository เรียบร้อยแล้ว (Revision 3 หรือ r3) จากนั้นได้แก้ไขข้อมูลในไฟล์ ‘index.php’ เล็กน้อย และ commit เข้าไปยัง Repository เรียบร้อยแล้ว (Revision 4 หรือ r4) ดังนั้นถ้าอยากรู้ว่าระหว่าง r3 และ r4 มีความแตกต่างตรงไหนบ้าง คำสั่งที่ช่วยได้ก็คือ diff ดังนี้

$ svn diff -r 3:4
Index: index.php
===================================================================
--- index.php	(revision 3)
+++ index.php	(revision 4)
@@ -1,3 +1,4 @@
-hello, world

\n"; + echo "

hope you like it

"; ?>

คำอธิบาย:

  • บรรทัดที่ 02 Index จะบอกว่าตอนนี้เปรียบเทียบไฟล์ไหนอยู่
  • บรรทัดที่ 04 – 05 กำหนดเครื่องหมายสำหรับ r3 แทนด้วย ‘-’ และ r4 แทนด้วย ‘+’ โดย ใช้บอกว่าบรรทัดไหนหายไปจาก r4 (-) และเพิ่มเข้ามาใน r4 (+) ถ้าบรรทัดไหนไม่เปลี่ยนแปลงก็จะไม่มีเครื่องหมายนำหน้า
  • บรรทัดที่ 07 – 08 คือ บรรทัดที่มีอยู่ใน r3 แต่หายไปจาก r4 (เครื่องหมาย - นำหน้า)
  • บรรทัดที่ 09 – 11 คือ บรรทัดที่เพิ่มเข้ามาใน r4
  • บรรทัดที่ 12 เป็นบรรทัดที่ไม่เปลี่ยนแปลง

The Art of Tar

ที่มาที่ไปของ blog ตอนนี้ก็คือ เนื่องจากว่า tar เป็นคำสั่งยูนิกส์อีกคำสั่งหนึ่งที่คิดว่านักพัฒนาหลายคนควรจะรู้จัก แต่มันเป็นปัญหาของผมเองว่าจะใช้ทีไรก็ต้องมานั่งหา options ที่จะต้องใช้อยู่เรื่อยๆ จำไม่ได้สักที เลยคิดว่ามีทางแก้อยู่ 2 วิธีคือ ใช้นี้คำสั่งบ่อยๆ หรือไม่ก็อ่านให้เข้าใจแล้วจับมาวางไว้ที่ไหนสักที่คงจะทำให้จำได้บ้าง อย่างน้อยก็มีแหล่งข้อมูลที่แน่นอนได้บ้าง

Tar File

Tar File

แล้ว tar คืออะไร

tar มาจากคำว่า “Tape ARchive” เป็นโปรแกรมที่มีจุดประสงค์ตรงไปตรงมาคือเอาไว้สำหรับทำ archive ไฟล์ ลงบน Tape [เป็นอุปกรณ์สำรองข้อมูลสมัยดึกดำบรรพ์] แต่ไม่ใช่เก็บอย่างเดียวเท่านั้นที่ tar ทำได้ เพราะ tar เองก็ยังให้เราปรับปรุงข้อมูลที่อยู่ในไฟล์ได้ตามต้องการ โดยที่ไม่จะเป็นต้องแกะไฟล์ออก แล้วเก็บเข้าไปใหม่ ปัจจุบันเวอร์ที่เขียนออกมา เป็นเวอร์ชั่น 1.22 [ออกเมื่อวันที่ 5 พ.ค. 2552]

วิธีใช้งาน

# tar [OPTIONS...] [FILE...]

วิธีการใช้งานก็ง่ายๆ แบบในตัวอย่าง คือใช้คำสั่ง tar ตามด้วย OPTIONS ที่ต้องการ เมื่อเสร็จแล้วเราจะได้ output เป็น tar file [*.tar] โดยจะมีที่จำเป็นต้องใช้และควรจำดังนี้ครับ

ออฟชั่นหลัก
  -c  สร้าง archive
  -d  หาความแตกต่างระหว่างไฟล์ใน archive และในไฟล์ต้นฉบับ
  -A  เพิ่มไฟล์ใหม่เข้าไปใน archive
  -r  เพิ่มไฟล์ใหม่โดยนำเอาไปต่อท้ายรายการของไฟล์ใน archive
  -t  แสดงรายการของไฟล์ที่มีทั้งหมดใน tar file
  -u  เพิ่มเฉพาะไฟล์ที่มีการแก้ไขเข้าไปใน tar file
  -x  แกะไฟล์ภายใน tar file

บีบอัดไฟล์
  -j  ใช้ filter bzip2 กับ tar file => *.tar.bz2, *.tb2, *.tbz2
  -z  ใช้ filter gzip กับ tar file => *.tgz, tar.gz

ตัวอย่าง

  # tar cf archive.tar foo bar      # สร้าง tar ไฟล์จาก 2 ไฟล์ ได้แก่ foo bar
  # tar tvf archive.tar             # แสดงรายชื่อไฟล์ใน archive.tar
  # tar xf archive.tar              # แกะไฟล์ archive.tar

ข้อมูลจาก
tar –help
Tar – GNU Project
GNU tar – Tutorial Introduction