Category Archives: Programming

[grails] การ mock แบบใช้ .metaClass มากกว่า 1 ครั้ง

เหตุเกิดจากความขี้เกียจ… เรื่องของเรื่องคือว่า… … ปกติแล้วการใช้ metaClass จะใช้ได้ครั้งเดียว เลยไปไล่หาคำตอบว่าทำไม.. จนได้ไปเจอ source code นี้เข้า เลยได้เอะใจขึ้นมาว่ามันน่าจะมีกระบวนการ registerMetaClass แน่ๆเลย เลยไปไล่หาวิธี remove ดู แล้วก็เจอ GroovySystem.getMetaClassRegistry().removeMetaClass เข้า.. เลยลองใช้ดู แต่มันมี side-effect คือมันจะถอด metaClass ทิ้งทั้งหมดเลยต้องใช้อย่างระมัดระวัง ตอนนี้กำลังหาวิธีถอดทิ้งแบบ method เดียวอยู่ น่าจะพอมีทางนะ

การสร้างโลกใบใหม่ใน JavaScript

วันนี้มาพูดถึง Scope ใน JavaScript แบบเบาๆกันหน่อย เรื่องScope ใน JavaScript มีรายละเอียดให้เราได้เคลิบเคลิ้มกันอีกนาน ซึ่งการสร้าง Scope ใน JavaScript สามารถทำได้ด้วยโค้ดแบบนี้ครับ ถ้าเราไม่สร้าง scope ใหม่แล้วประกาศตัวแปรตรงๆเลย มันจะเป็น global (windows) โอกาสที่ตัวแปรจะไปชนกันกับของคนอื่นก็จะมีเยอะกว่า เพราะใน JavaScript ถึงจะประกาศตัวแปรด้านล่างก็เห็นทั้งไฟล์อยู่ดี แต่ถ้าเราสร้างโลกของเราแล้วก็จะมั่นใจมากขึ้นว่าตัวแปรของเราจะไม่ตีกับใคร เราอาจจะได้เจอโค้ดลักษณะนี้ จากตัวอย่างคือสร้างโลกและส่งตัวแปร jQuery เข้าไปให้สิงอยู่ในตัวแปร $ ซึ่งเป็น local variable แล้วในโลกนั้นก็เรียก $ แทน jQuery ได้อย่างสบายใจไม่ต้องกลัวไปตีกับคนอื่น่

เทคนิค Memoization ที่ช่วยให้โปรแกรมเราเร็วขึ้นได้ ด้วย Javascript และ CoffeeScript [ตอนที่ 1]

เทคนิค memoization เป็นเทคนิคที่ทำให้โปรแกรมที่มีการเรียกใช้ฟังก์ชั่นเดิมๆเยอะๆทำงานได้เร็วขึ้น ใช้ได้ผลดีกับพวกฟังก์ชั่นแบบเวียนบังเกิดทั้งหลาย (Recursive Function) จะทำให้โปรแกรมเร็วเร็วขึ้นมากกก ลดการทำงานของ CPU ลงไปเยอะ แต่ว่าจะต้องใช้ memory มากขึ้นเพื่อ“จำ”ผลลัพธ์ของการคำนวณครั้งก่อนหน้าเอาไว้ (ลักษณะ cache ที่เราคุ้นเคย)  สามารถอ่านเรื่องราวของ Memoization ได้ที่ wikipedia คงจะไม่ได้พูดถึงรายละเอียด ​Memoizatio มากนัก เพราะประเด็นหลักจะอยู่ที่ความฟู่ฟ่าของภาษา coffee script ซะมากกว่า อธิบายกันในในลักษณะของ code

ตัวแปร this ใน javascript ทำงานยังไง (เกี่ยวกับ Function Invocation Pattern)

ถ้าพูดถึงตัวแปร this ในโลกของการเขียนโปรแกรมแบบ Object Oriented ผมจะตีความตัวแปร this ว่ามันจะต้องหมายถึงตัว object นั้นๆ ที่กำลังทำงานอยู่ เป็นแน่แท้….. แต่มันไม่ใช่แบบนั้นใน javascript น่ะสิ!! …. อ้าวอ้าว ยังไง ตอบมาให้เคลียร์เลย

Javascript สั้นๆ ตอน Array ปลอมๆ [แล้วจะรู้ได้ยังไงว่าเป็น Array หรือ Object]

ใน JavaScript ไม่มีข้อมูลที่เป็น Array จริงๆ Array ที่มีอยู่มัน array แบบหลอกๆ จริงแล้วมันเป็น object ที่มี key เป็นตัวเลข, มี method เกี่ยวกับ array, และมี property length ถ้าเราพึ่งคำสั่ง typeof อย่างเดียวเราก็จะเจ็บอีกตามเคย กล่าวคือถ้าเราสั่ง typeof [] และ typeof {} มันจะบอกว่า เป็น object ทั้งคู่! แบบนี้

มาทำโปรเจ็ค JavaScript แบบใช้ TDD กันไหมครับ .. แบบหัดๆ

พอดีผมไปหา code เก่า… แล้วเจอ code ที่เขียนแบบนี้ var graph_url = ‘/’ + pageId + ‘/members/’ + uid; ปวดตับมาก code แม่งดูโคตรยากเลย ต่อ string กันกระจาย… ก็เลยคิดว่าถ้าเราเขียนฟังก์ชั่นทำ string template แบบนี้ str_parse(“/${0}/members/${1}”, [pageId, uid]); ก็คงจะดีไม่น้อย ได้ใช้บ่อยแน่นอน (ลอกมาจาก facebook api ของ facebook ในส่วนของ FQL) แล้วก็จะเขียนด้วย TDD/BDD … Continue reading

Javascript สั้นๆ ตอน parseInt ใช้ไม่ดี เจ็บ!

JavaScript มีฟังก์ชั่น parseInt เพื่อเปลี่ยน String อย่างเช่น “8″ ให้เป็น ตัวเลข 8 แต่ถ้าเป็นตัวหนังสือแล้วใช้ operator + มันจะเอา String ไปต่อกัน เพราะ context มันเป็น string แต่ถ้าใช้ไม่ดีเนี่ย…​ เราจะเจ็บ แบบนี้ ลองสั่ง parseInt(“08″) ดูจะได้ 0 เพราะว่าถ้า parseInt เจอ 0 นำหน้าตัวเลขเมื่อไร JavaScript จะคิดว่าอยู่ในโลกของฐาน 8 อาจจะทำให้เราเกิดอาการน้ำตาตกในได้ ถ้าหาบั๊กไม่เจอ วิธีแก้ไขก็คือ ใช้แบบกำหนด radix … Continue reading

Javascript สั้นๆ ตอน Semicolon Insertion [Awful Parts]

JavaScript มีกระบวนการที่คอยแก้ไขโปรแกรมที่มีข้อผิดพลาดโดยการใส่ ; (semi colon) ซึ่งกระบวนการนี้ก็อันตรายไม่ใช่เล่น ลองดูตัวอย่าง return statement นี้ครับ กระบวนการแทรก ; (semi colon) จะทำงานเมื่อสิ้นสุดบรรทัดที่ไม่มี semi colon ใน case นี้ก็ จะกลายเป็น

BDD framework สำหรับ javascript

หลังจากที่ลองใช้ yui3 เป็น test framework แต่ไม่โดนเพราะมันต้องต่อเน็ต เลยไปลองตัวอื่นดู… ลองใช้ qunit ก็ยังไม่โดน เลยกะว่าจะใช้ jsunit ซะหน่อย