Friday, February 02, 2007

ผ่านไปอีกหนึ่ง

เมื่อวันก่อน Application ที่เขียนโดยใช้ opensource ล้วนๆ
(เดิมก็ใช้ opensource แหล่ะครับ, แต่คราวนี้ไม่ต้องใช้ db2, websphere)
ได้ run production กับ load ที่มากสุดของช่วงปีนี้แล้ว (31 มกราคม)
วันนั้นมี transaction ใบเสร็จป้อนเข้ามา หมื่นกว่าใบ
ผ่านไปด้วยความสบายใจ

ลองดูว่า project นี้ใช้ opensource อะไรบ้าง
  • ในส่วนของ browser บังคับให้ใช้ Firefox
    (เขียนให้ใช้ได้ทั้ง IE และ Firefox, แต่พอเกิดปัญหา ก็จะใล่ให้ไปลง firefox ก่อน
    แล้วค่อยคุยกัน)
  • PDF Viewer ใช้ FoxIt
    ตัวเล็กดี
  • Server ใช้ OpenSUSE
  • Database ใช้ Ingres
  • App Server ใช้ Tomcat 5.5
    ต่อเป็น cluster 2 server
  • Web Server ใช้ Apache 2.x
  • Single Sign On ใช้ CAS
  • ORM ใช้ Hibernate 3.2
  • Container ใช้ Spring Framework 2.0
  • Presentation Layer ใช้ Tapestry 4.0.2 ผสมกับ Spring
  • Report ใช้ JasperReport
  • Javascript Framework ใช้ Dojo
  • build tool ใช้ maven 2
  • continuous build ใช้ CruiseControl
  • Unit Testing ใช้ TestNG กับ EasyMock
  • Integrated Test ใช้ Selenium + Ruby

ยังมีตัวเล็กตัวน้อยอีกจำนวนหนึ่ง แต่ไม่สำคัญเท่าไร

Related link from Roti

Thursday, February 01, 2007

paradox of the active user

paradox of the active user
เจอใน Signal vs. Noise

อ่านแล้วนึกถึงพฤติกรรมของตัวเอง
ยกตัวอย่างล่าสุด ก็คือการใช้ emacs ของตัวเอง
ที่พอใช้ถึงจุดหนึ่ง (คือทำงานได้แล้ว) ก็หยุดที่จะพัฒนาปรับปรุงการใช้ให้มีประสิทธิภาพขึ้น

อย่างเมื่อก่อนเวลาที่เปิดหลายหน้าต่างพร้อมๆกัน
เวลาอยากจะ scroll อีกหน้าต่างหนึี่ง ก็ต้อง switch ไปหน้าต่างนั้นก่อน
แล้วค่อยกดปุ่ม page down
ทั้งๆที่รู้ว่ามันมีคำสั่งที่ทำได้ แต่ก็ขี้เกียจเปิดคู่มือหา

มาเมื่อวาน ฮึดออกแรงค้นหาดู
ใช้เวลา 2 นาที
ก็เลยพบว่ามันทำได้ง่ายๆเพียงแค่กด Meta-pagedown แค่นั้นเอง

ชีวิตมันต่างกันเยอะเลยนะ เวลาที่รู้คำสั่งนี้แล้ว
ระหว่างกด 3 sequence ก็เหลือ sequence เดียว

Related link from Roti

Wednesday, January 31, 2007

เรียนรู้ Javaspaces โดยไม่ต้องเขียน Javaspaces

เห็น javaspaces มานานแล้ว แต่ก็ยังไม่เคยเข้าไปแตะสักที
เมื่อวันก่อนทดลองทำ distributed program ด้วย ruby
ก็เลยได้รู้จักเจ้า Rinda
ตอนแรกก็ยังไม่รู้หรอกว่า Rinda มีความเป็นมาอย่างไร
แค่เอามาใช้งานได้, ก็พอใจระดับหนึ่ง
จนเมื่อคุณ sugree post ถามใน codenone forums
ก็เลยเริ่มเกิดความสงสัย
ในที่สุดก็รู้ว่า Rinda เลียนแบบมาจาก Linda

ในเอกสารที่อธิบายถึง Linda ได้บอกไว้ด้วยว่า,
javaspace ก็เลียนแบบ pattern มาจาก Linda ด้วยเช่นกัน
เห็นเท่านี้ก็เลยเกิดอาการ satori นิดๆขึ้นมา

น่าสนใจนะ ประเด็นเรื่องการเรียนรู้ pattern ผ่านภาษาอื่น
แล้วนำกลับมา apply ทำความเข้าใจกับ implement ในภาษาหลักของตนเอง
เพราะถ้าให้ผมเริ่มทดลองกับ javaspace ก่อน
ผมคิดว่าผมก็คงไปได้ไม่ไกลถึงไหนหรอก
เพราะแค่ setup jini อย่างเดียว ก็คงเสียเวลาไปหลายวันแล้ว
กว่าจะผ่านพิธีรีตองแบบ java อีก (ทำให้พาลเบื่อเลิกไปเสียก่อน)

เทียบกับ ruby ที่ผมสามารถทดลองเขียน Rinda เพื่อทดลอง Matrix multiplication ง่ายๆได้ในวันเดียว
แถมยังได้ความรู้กลับมาทำความเข้าใจ javaspace ได้อีกด้วย

Related link from Roti

Tuesday, January 30, 2007

การสอนคณิตศาสตร์

ไม่ใช่บ้านเราเท่านั้นที่มีปัญหา
Only 43% U.S. math teachers arrived at the correct answer to: 1 3/4 divided by 1/2 compared to 100% of the Chinese teachers.

อ่านเบื้องต้นได้ที่นี่ East meets West: Fundamental Differences in Math Teaching

Related link from Roti

Monday, January 29, 2007

AOP in emacs

ตอนที่เริ่มรู้จัก AOP ใน java ก็รู้สึกว่ามันเจ๋งดี
มาวันนี้ระหว่างนั่งเปิดคู่มือ emacs-lisp หา function ที่ต้องการอยู่
สายตาก็เหลือบไปเห็นคำว่า advice, before, after, around
อ้าว นี่มัน AOP นี่หว่า

กลับบ้านมาก็เลยทดลองเสียหน่อย
เอาโจทย์ที่เคยตอบคุณ sugree ใน codenone
ตอนนั้นประเด็นคำถามก็คือ behavior ของ M-f มันไม่เหมือนกับ 'w' ใน vi
วิธีเดิมที่ผมตอบคุณ sugree ไป ก็คือใช้การ define function ใหม่
แล้วก็ re-define map key ให้ชี้ไปที่ function ใหม่เอา
(defun my-forward-word()
(interactive)
(forward-word)
(skip-chars-forward " ")
(set-mark-command nil)
(forward-char))

แต่ถ้าเปลี่ยนมาใช้ Advice ก็จะทำได้ดังนี้
(defadvice forward-word (after forward-like-vim (arg))
(skip-chars-forward " ")
(set-mark-command nil)
(forward-char))

การประกาศ defadivce นั้น, advice นั้นจะยังไม่ทำงานทันที
ต้องมีการสั่ง activate ก่อน
(ad-activate 'forward-word)


Note: อ่านดูใน file ของ emacs แล้วพบว่า feature นี้เขียนตั้งแต่ปี 1992

Related link from Roti