Tag Archives | Java

NoSQL Model

หลายวันก่อน @somkiat เล่าว่าจะใช้ NoSQL ให้ศึกษาถึง Model ที่ใช้ก่อนที่จะเลือกว่าจะใช้ Database ตัวไหน วันนี้พึ่งเข้าใจหลังจากเล่น Redis อีกครั้ง เพราะเป็น Database ที่ต่างจากตัวอื่นจริงๆ โดยเฉพาะเวลาจะ query เลือก data ที่ต้องการ ทั่วไปแล้วก็มีสองแบบ Document Oriented – แบบแรกเวลาที่จะเอาข้อมูลขึ้นมาใช้ จะสามารถค้นหาผ่าน field ต่างๆ ได้โดยตรง สมมติมีข้อมูลแบบด้านล่าง DB ที่ใช้ Model แบบนี้สามารถหาผ่าน field แต่ละ field ได้เลยเช่นกำหนดว่าต้องการ query field name ที่มีค่าเป็น Lucy หรือ field age อยู่ในช่วง 12 และเราสามารถเพิ่ม field เข้าไปเพื่อค้นหาได้เลยด้วย DB กลุ่มนี้ก็พวก MongoDB, CouchDB [...]

Read full story Comments { 4 }

@With @Before @Check @Playframework

หลังจากพึ่งพา Security module มานานและขัดใจกับ @With(Secure.class) ที่ method ทั้งหมดจะ access ได้ต้อง authen ก่อนแต่บาง method ไม่ต้องการอย่างนั้นเลยต้องสร้าง class แยก วันนี้ลองขุดๆ code security module ดูถึงรู้ว่าจริงๆ แล้ว @With มีหน้าที่อะไร และ @Before ทำอะไรได้ และ @Check จริงๆ แล้วมันทำงานยังไง @With ใช้สำหรับรวม method ของ Class เข้าด้วยกันทำให้ annotation ต่างๆ เช่น @Before @After… มองเห็นข้าม class ที่ถูกประกาศไว้ เช่น จาก code ด้านบนเมื่อเรียกมาที่หน้า B.show จะมีการเรียก setup และ tearDown ก่อนและหลังจากที่ [...]

Read full story Comments { 1 }

Batch beautify java source

เวลาเขียนโปรแกรมร่วมกันเป็นกลุ่มโดนปกติแล้วก็จะกำหนด Code Convention ขึ้นมาเพื่อให้ทุกคนทำตาม ซึ่งทำให้ Code ภายในสามารถอ่านได้ง่ายแต่ละคนสามารถทำ module ร่วมกันได้เร็ว แต่หลังๆ เริ่มมีปัญหาเพราะต้องเอา Source ของ Project อื่นมาแก้ไขต่อและใช้ Convention ไม่เหมือนกันโดยเฉพาะ Space และ Tab ทำให้ปวดหัวมากเวลา DIff ทางแก้คือหาทาง Format Code ทั้ง Project ซะเวลาเอา Project นั้นมาใช้ที Code beautify ที่เป็นโปรแกรมแยกลองหาดูเหลืออยู่สองสามเจ้า สุดท้ายเจอ Blog นึงเขียนเมื่อสี่ปีที่แล้ว บอกว่า Eclipse สามารถทำได้อยู่แล้ว ไม่ต้องไปหาโปรแกรมที่เสียตังหรอก แค่สั่ง code format config สามารถเอาออกมาได้จาก Eclipse > Preferences > Java > Code Style > Formatter [...]

Read full story Comments { 0 }

[Java] Runtime.exec() stream

ได้งานประหลาดมาอย่างพี่บอกว่า process Java เปิด PIPE เต็มไปหมดหามาให้หน่อยเกิดจากอะไร ช่วยกันขุดไปมาสามคนสุดท้ายพบว่ามาจาก Runtime.exec() ที่เปิด Stream ให้ทีเดียว 3 Stream แล้วโค้ดเก่าที่เอามาใช้ดันปิดแค่อันเดียวที่ดึงผลลัพธ์ออกมา สิ่งที่เกิดขึ้นคือถ้า Process ทำงานไปเรื่อยๆ แล้วเรียก Runtime.exec() ซ้ำไปมา PIPE ก็จะโผล่ขึ้นมาเรื่อยๆ ประมาณนี้ วิธีแก้ก็ง่ายๆ ได้ Process ออกมาเสร็จใช้แล้วก็ปิด Stream ที่ให้มาด้วยซะ เช่นๆ คำถามคือถ้าไม่ปิดจะเกิดอะไรขึ้นมั้ย จากเท่าที่สังเกตคือ ถ้าไม่ยอมปิดมันก็จะหายไปอย่างเงียบๆ เมื่อถึงเวลาหนึ่งแต่เพื่อความปลอดภัย ใช้แล้วก็ปิดเถอะ

Read full story Comments { 6 }

Play! Suspend Job

เวลาเจอ request ที่ต้องประมวลผลนานกว่าปกติ ถ้าใช้ method ปกติ handle Play! จะยกเลิก thread นั้นทิ้งทำให้ไม่ได้ผลลัพธ์อย่างที่ต้องการ เช่นย่อภาพ หรือหมุนภาพแล้วต้องการรู้ว่าเสร็จเมื่อไหร่เพื่อเอามาแสดง คนทำ Play! ก็คงรู้เลยทำ Suspend Job ไว้ให้สำหรับงานแบบนี้โดยเฉพาะ ลองดูตัวอย่างหมุนภาพด้านล่าง เริ่มจาก class ที่ทำหน้าที่ในการหมุนภาพไปทางขวาเก้าสิบองศา จากนั้น controller ที่รับ request มาเพื่อหมุนภาพ ใน Play! ยังมี Job อีกสองแบบคือ Bootstrap Job และ Scheduler Job ซึ่งใช้บ่อยพอสมควรเหมือนกันและก็ทำหน้าที่ตามชื่อคือ ทำงานตอนเริ่มต้น หรือ ตามเวลาที่กำหนด หน้าตาก็จะคล้ายกับ Suspend Job ไว้มีเวลาอีกจะค่อยๆ มาเขียนไว้อีกที

Read full story Comments { 0 }