จากคราวที่แล้ว ทำให้ Calendar server authen กับ WordPress ผ่าน XML-RPC ปรากฏว่ากว่าจะดึงข้อมูลทีช้ามากจนแทบใช้งานไม่ได้ วันนี้ทนไม่ไหวอีกรอบเปลี่ยนจาก XML-RPC เป็นต่อไปยัง MySQL ตรงๆ ทำเสร็จทดลองรู้สึกประทับใจมาก เร็วขึ้นสุดๆ แต่ก็มีสิ่งที่ต้องแก้เยอะเหมือนกันตามด้านล่าง Wordpress ต้องติด Plugins เพิ่มชื่อ MD5 Password Hashes เพื่อแปลงให้รหัสทั้งหมดของ WordPress เก็บในรูป MD5 แทนและ User ต้อง login ใหม่ผ่าน WordPress 1 ครั้งเพื่อแปลงรหัสผ่าน ดาวโหลด wordpressmysql.py ไปวางไว้ที่ calendar_server_directory/twistedcaldav/directory (หรือจะวางไว้ที่ path อื่นของ python library directory ก็ได้) แก้ caldavd.plist เพิ่ม Directory Service ด้านล่างลงไป restart [...]
[Java] Runtime.exec() stream
ได้งานประหลาดมาอย่างพี่บอกว่า process Java เปิด PIPE เต็มไปหมดหามาให้หน่อยเกิดจากอะไร ช่วยกันขุดไปมาสามคนสุดท้ายพบว่ามาจาก Runtime.exec() ที่เปิด Stream ให้ทีเดียว 3 Stream แล้วโค้ดเก่าที่เอามาใช้ดันปิดแค่อันเดียวที่ดึงผลลัพธ์ออกมา สิ่งที่เกิดขึ้นคือถ้า Process ทำงานไปเรื่อยๆ แล้วเรียก Runtime.exec() ซ้ำไปมา PIPE ก็จะโผล่ขึ้นมาเรื่อยๆ ประมาณนี้ วิธีแก้ก็ง่ายๆ ได้ Process ออกมาเสร็จใช้แล้วก็ปิด Stream ที่ให้มาด้วยซะ เช่นๆ คำถามคือถ้าไม่ปิดจะเกิดอะไรขึ้นมั้ย จากเท่าที่สังเกตคือ ถ้าไม่ยอมปิดมันก็จะหายไปอย่างเงียบๆ เมื่อถึงเวลาหนึ่งแต่เพื่อความปลอดภัย ใช้แล้วก็ปิดเถอะ
[Flex] Redispatch event
@arzeknight มาถามเกี่ยวกับ event ว่าทำไม redispatch แล้ว object มันไม่เหมือนต้นฉบับ โค้ดก็ง่ายๆ จาก Class ด้านบนถ้ามี Controller อื่นมา handle CustomEvent.SAMPLE ต่อ event ที่ได้ไม่จำเป็นต้องเป็น Class เดียวกับที่ dispatch มาตั้งแต่ต้น เพราะสิ่งที่ Flex ทำถ้าหากมีการ redispatch คือสั่ง clone event object นั้น เพราะฉะนั้นหากใช้ redispatch บ่อยๆ + custom event อย่าลืม implements clone ก่อนที่จะงงว่าทำไมได้ Object นี้ออกมาแทน
Play! Suspend Job
เวลาเจอ request ที่ต้องประมวลผลนานกว่าปกติ ถ้าใช้ method ปกติ handle Play! จะยกเลิก thread นั้นทิ้งทำให้ไม่ได้ผลลัพธ์อย่างที่ต้องการ เช่นย่อภาพ หรือหมุนภาพแล้วต้องการรู้ว่าเสร็จเมื่อไหร่เพื่อเอามาแสดง คนทำ Play! ก็คงรู้เลยทำ Suspend Job ไว้ให้สำหรับงานแบบนี้โดยเฉพาะ ลองดูตัวอย่างหมุนภาพด้านล่าง เริ่มจาก class ที่ทำหน้าที่ในการหมุนภาพไปทางขวาเก้าสิบองศา จากนั้น controller ที่รับ request มาเพื่อหมุนภาพ ใน Play! ยังมี Job อีกสองแบบคือ Bootstrap Job และ Scheduler Job ซึ่งใช้บ่อยพอสมควรเหมือนกันและก็ทำหน้าที่ตามชื่อคือ ทำงานตอนเริ่มต้น หรือ ตามเวลาที่กำหนด หน้าตาก็จะคล้ายกับ Suspend Job ไว้มีเวลาอีกจะค่อยๆ มาเขียนไว้อีกที
JPA "IN" Query
หลายครั้งที่ผมใช้ Collection เป็น field ใน Persistent object ของ JPA แต่ก่อนที่รู้จัก JPA ใหม่ ๆ เวลาจะ query อะไรก็มักจะสร้าง reference กลับไปยัง object หลักทุกครั้งเพื่อให้อ้างอิงกลับได้ พึ่งมารู้ไม่นานว่ามี Keyword IN เพื่อใช้สำหรับตรวจหา parent ที่ object อยู่ใน collection ของมัน * Code ทั้งหมดจะอิงตาม Play Framework จากโค้ดด้านบนถ้าต้องการหาว่า องุ่นอยู่ในตะกร้าไหนสามารถหาได้โดยใช้ IN ช่วยคือ เหมือนจะเคยจดไปแล้วแต่หาไม่เจอ จดไว้อีกทีกันลืม เผื่อเพื่อนถามด้วย