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

เหตุเกิดจากความขี้เกียจ…

เรื่องของเรื่องคือว่า…

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

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

วันนี้มาพูดถึง ใน แบบเบาๆกันหน่อย เรื่องScope ใน มีรายละเอียดให้เราได้เคลิบเคลิ้มกันอีกนาน

ซึ่งการสร้าง Scope ใน JavaScript สามารถทำได้ด้วยโค้ดแบบนี้ครับ

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

เราอาจจะได้เจอโค้ดลักษณะนี้

จากตัวอย่างคือสร้างโลกและส่งตัวแปร เข้าไปให้สิงอยู่ในตัวแปร $ ซึ่งเป็น local variable แล้วในโลกนั้นก็เรียก $ แทน ได้อย่างสบายใจไม่ต้องกลัวไปตีกับคนอื่น่

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

เทคนิค เป็นเทคนิคที่ทำให้โปรแกรมที่มีการเรียกใช้ฟังก์ชั่นเดิมๆเยอะๆทำงานได้เร็วขึ้น ใช้ได้ผลดีกับพวกฟังก์ชั่นแบบเวียนบังเกิดทั้งหลาย (Recursive Function)

จะทำให้โปรแกรมเร็วเร็วขึ้นมากกก ลดการทำงานของ CPU ลงไปเยอะ แต่ว่าจะต้องใช้ memory มากขึ้นเพื่อ“จำ”ผลลัพธ์ของการคำนวณครั้งก่อนหน้าเอาไว้ (ลักษณะ cache ที่เราคุ้นเคย) 

สามารถอ่านเรื่องราวของ Memoization ได้ที่ wikipedia
คงจะไม่ได้พูดถึงรายละเอียด ​Memoizatio มากนัก เพราะประเด็นหลักจะอยู่ที่ความฟู่ฟ่าของภาษา coffee script ซะมากกว่า อธิบายกันในในลักษณะของ code Continue reading

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

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

แต่มันไม่ใช่แบบนั้นใน น่ะสิ!! …. อ้าวอ้าว ยังไง ตอบมาให้เคลียร์เลย Continue reading

ปัญหา git push แล้วเกิด [user/repo2 denied to user/repo1]

error แบบนี้

git%20hub%20denied%20to%20

หาในเครื่องตั้งนาน ว่ามันไปอ่าน config มาจากไหน ที่ไหนทางฝั่ง น่าจะเกิดตอน ติดตั้ง for mac

Continue reading

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

ใน ไม่มีข้อมูลที่เป็น จริงๆ

Array ที่มีอยู่มัน array แบบหลอกๆ จริงแล้วมันเป็น ที่มี key เป็นตัวเลข, มี method เกี่ยวกับ array, และมี property length

ถ้าเราพึ่งคำสั่ง typeof อย่างเดียวเราก็จะเจ็บอีกตามเคย

javascript-phony-array

กล่าวคือถ้าเราสั่ง typeof [] และ typeof {} มันจะบอกว่า เป็น object ทั้งคู่! แบบนี้
NAzT_s Blog Continue reading

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

พอดีผมไปหา code เก่า… แล้วเจอ code ที่เขียนแบบนี้

var graph_url = '/' + pageId + '/members/' + uid;

ปวดตับมาก code แม่งดูโคตรยากเลย ต่อ string กันกระจาย…

ก็เลยคิดว่าถ้าเราเขียนฟังก์ชั่นทำ แบบนี้
str_parse("/${0}/members/${1}", [pageId, uid]); ก็คงจะดีไม่น้อย ได้ใช้บ่อยแน่นอน (ลอกมาจาก facebook api ของ facebook ในส่วนของ FQL)

แล้วก็จะเขียนด้วย /BDD เพราะว่าจะได้ฝึกหัดการเขียนโปรแกรมแบบ ไปในตัว
และสร้างความสนิทสนมกับ ด้วย [ เป็น behavior-driven framework]

เข้าเรื่องกันเลยดีกว่า…

Continue reading

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

มีฟังก์ชั่น เพื่อเปลี่ยน String อย่างเช่น “8″ ให้เป็น ตัวเลข 8

แต่ถ้าเป็นตัวหนังสือแล้วใช้ operator + มันจะเอา String ไปต่อกัน เพราะ context มันเป็น string

แต่ถ้าใช้ไม่ดีเนี่ย…​ เราจะเจ็บ

แบบนี้

ลองสั่ง parseInt(“08″) ดูจะได้ 0 เพราะว่าถ้า parseInt เจอ 0 นำหน้าตัวเลขเมื่อไร JavaScript จะคิดว่าอยู่ในโลกของฐาน 8

อาจจะทำให้เราเกิดอาการน้ำตาตกในได้ ถ้าหาบั๊กไม่เจอ

วิธีแก้ไขก็คือ ใช้แบบกำหนด เข้าไปเพื่อบอกฐานด้วยเช่น parseInt(“08″, 10);

ภาพประกอบ

Nat%20Weerawan

 

credit:  JavaScript The Good Parts

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

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

ลองดูตัวอย่าง return statement นี้ครับ

%E0%B9%80%E0%B8%A3%E0%B8%B7%E0%B9%88%E0%B8%AD%E0%B8%87%20%E2%80%B9%20NAzT_s%20Blog%20%E2%80%94%20%E0%B9%80%E0%B8%A7%E0%B8%B4%E0%B8%A3%E0%B9%8C%E0%B8%94%E0%B9%80%E0%B8%9E%E0%B8%A3%E0%B8%AA

กระบวนการแทรก ; (semi colon) จะทำงานเมื่อสิ้นสุดบรรทัดที่ไม่มี semi colon

ใน case นี้ก็ จะกลายเป็น

return; Continue reading

กูเกิ้น +1 และ กูเกิ้นพลัส และ บล็อก

กระแส plus มาแรง… เลยเอา +1 มาแปะใน blog เสียหน่อยแบบนี้

jQuery Tip_ การ break; ออกจาก jQuery.each [ forEach ] « NAzT_s Blog

ที่เรากด +1 ไปทั้งหลาย มันไปออก ด้วยนะ!

อยู่ในหน้า profile แบบนี้.

NAzT Weerawan - Google+

Continue reading