วันนี้จะลองเล่นของเล่นใหม่บนจาวา 6 ซะหน่อยแต่ดันไม่มีให้ติดตั้งบนแมคซะงั้น ลองขุดๆ ในเว็บดูก็เจอไปเจอว่ายังไม่ออก แต่ถ้าอยากได้ก็โหลดมาใช้ได้เป็น b88 อยู่(ปัจจุบัน b105 แล้วดูจาก ubuntu) โดยต้องสมัคร ADC และล๊อกอินเข้าไปโหลด วันนี้ก็เลยโหลดทิ้งไว้ก่อน และก็ลองดูทางเลือกอื่น สุดท้ายก็นึกขึ้นได้ว่าเคยโหลดโค้ด JDK6 มานี่นาลองเอามา compile หน่อยดีกว่า ดาวโหลดเสร็จจะได้มาเป็น .jar ใหญ่ๆ 1 ไฟล์เปิดไฟล์ออกมาก็จะเจอหน้าต่างให้ยอมรับเงื่อนไขแล้วก็เลือก directory ที่จะขยายออกมา ความยากมันจะต่อจากนี้แหละ เพราะกว่าจะ compile ได้ต้อง export ตัวแปรไรบางอย่างพอสมควรเลย แล้วบนแมคโปรแกรมที่ใช้ compile บางตัวก็ไม่มีซะนี่ (gawk) ต้องลง macport และติดเพิ่ม บางตัวก็ไม่ได้อยู่ใน bin ต้องสร้าง link จาก /usr/bin มา วันนี้กว่าจะเริ่ม compile ได้ก็เล่นหาวิธีอยู่นานเลย แต่หลังจากทำทุกอย่างตามด้านาบนแล้ว ก็ยังเจอ error อยู่อ่ะ [...]
HashSet ใน Java
วันนี้เจอบั๊กแปลกๆ ที่ไม่คิดว่าจะเจอได้ในโค้ดงานที่ทำอยู่ สิ่งที่อาจเกิดขึ้นตามมาคือ memory leak ถ้าใช้ไม่ดี และมันก็เกิดกับ hash map ซะด้วย บั๊กที่ว่าคือ การเปลี่ยน hash code ของ object ใน key ของ hash map สิ่งที่เกิดขึ้นเมื่อมีการเปลี่ยนแปลงก็คือ hash map จะไม่สามารถคืน object กลับมาได้หากนำ object นั้นไปใช้อ้างอิง ลองดูจาก code ด้านล่างละกัน import java.util.HashSet; class A { String _data; A(String data) { _data = data; } public int hashCode() { int hash = 0; for(int [...]
Java Content Repository
ทิ้งเรื่องนี้ไว้นาน เนื่องจากติดงานอื่น + นึกไม่ออกว่าจะเขียนยังไงต่อดี เลยทิ้งไว้ยาวเลย Java Content Repository (JSR170 และ JSR283) เป็นชุด api มาตรฐานเกี่ยวกับการจัดเก็บข้อมูล โดยที่คนใช้งานไม่ต้องสนใจว่ามันจะจัดเก็บยังไง เหมือนเอาไฟล์มาบันทึกในเครื่อง เราก็ไม่ต้องสนใจว่าระบบไฟล์มันจะเอาข้อมูลไปแบ่งเก็บยังไง ถ้ายังนึกไม่ออกก็ลองนึกถึง Google Base ละกันคิดว่าน่าจะคล้ายๆ กันนะ ตอนนี้คนทีทำให้มันใช้งานได้ที่ผมรู้จักแบบใช้งานได้ฟรีๆ ก็มีอยู่ตัวเดียวคือ Apache Jack Rabbit ในเว็บก็มีอธิบายไว้ว่า Content Repository(CR) มีทั้งหมดสามระดับ โดบที่ทุก CR ต้องมีคือระดับแรก เพื่อให้สามารถอ่านข้อมูลจาก CR ได้ ส่วนระดับที่สองคือความสามารถในการเขียนข้อมูลลง CR และระดับสุดท้ายก็พวกการจัดการรุ่น การใช้ Query Language ในการดึงข้อมูลออกมา การล๊อกข้อมูล ลองไปดูภาพในเว็บ Apache Jack Rabbit ดีกว่า ทำออกมาสวยงามเข้าใจง่ายดี แถมยังบอกด้วยว่า Jack Rabbit ทำได้หมดทั้งสามระดับเลย [...]
HTTP กับตัวช่วยในภาษาต่างๆ
วันนี้นั่งสำรวจ Apache Slide แล้วก็เจอ WebDAVServlet เข้าก็เลยคิดว่าเขียนเรื่อง นี้คั่นซะด้วยเลยดีกว่า ต่อจากเรื่องที่แล้วด้วย อีกอย่างยังไงจะเขียนอะไรพื้นฐานก็เขียนเป็นชุดเดียวกันซะเลย ในจาวา HttpServlet เป็น Servlet พื้นฐานที่คนเขียน Web Application น่าจะรู้จักกันทุกคน (หรือป่าว ผมนี่ข้ามขั้นไปลองเล่น Strut ก่อนแล้วค่อยกลับมารู้จัก Servlet และ JSP ทีหลัง ) เพราะมีไว้สำหรับจัดการคำสั่งของ HTTP ทั้งหมดที่ส่งเข้ามายัง Server โดยคลาส HttpServlet ก็มี method พื้นฐานที่เตรียมไว้ให้คนเขียนขั้นตอนการทำงานหลักๆ ลงไปคือ doDelete, doGet, doHead, do… ตามคำสั่ง HTTP ที่มีเป๊ะ โดยแต่ละ method ก็จะรับตัวแปรมาสองตัวคือ HttpServletRequest และ HttpServletResponse ซึ่งดูตามชื่อก็คงเดาออกกันหมดว่ามันทำหน้าที่อะไร มาดูในฝั่ง PHP บ้างดีกว่า เท่าที่เห็นมารู้สึกจะมีตัวแปรที่กำหนดมาให้เลยสองตัวคือ $_GET [...]
Java Generic
วันนี้เพื่อนถามมาว่า มีอะไรในจาวาที่เหมือน Template ในภาษาซีหรือป่าว ก็เลยนึกถึงสมัยเรียนขึ้นมาเลย ที่อาจารย์จับเทียบ Template กับ Generic ว่ามันต่างกันยังไง แล้วใช้ยังไง (ต่างกันยังไง จำไม่ได้แล้วหละ ) สำหรับประโยชน์ของมันที่ผมชอบมากที่สุดเลยก็คือ ไม่ต้องนั่งเปลี่ยน Type ให้ปวดหัววุ่นวายอีกแล้ว แถม ไม่ต้องกังวลกับ Class cast exception ด้วย (สมัยก่อนเวลาจะเก็บอะไรลง Collection แล้วเอาออกมาที ใช้ไปไกลๆ แล้วมักลืมว่าตัวเองเก็บอะไรเอาออกมาทีก็เจอประจำ) ถ้าใครยังนึกไม่ออกก็ลองนึกถึงพวก Collection ทั้งหลายดูเช่น List<String>, Set<Integer> อะไรพวกนี้ ที่อยู่ใน <> นั่นแหละที่เรียกว่า Generic มาดู code ตัวอย่างกันดีกว่า class Test { public T extends Comparable max (T a, T b) { [...]