Lua ใน Redis (redis script) by

31
Jul
0

วันหนึ่งผมได้ค้นพบความเทพของ redis นั่นคือมันสามารถเขียน script เข้าไปในตัว redis เองได้ครับ โดยจะใช้ได้ตั้งแต่ Redis 2.6 ขึ้นไป ซึ่งตัวภาษาจะเป็น lua ถามว่าเขียนได้แล้วดียังไง? ก็คือเราสามารถสร้างคำสั่ง Redis อันสุดแสนประหลาดได้ด้วยตัวเองโดยไม่ต้องง้อให้ Redis ออก function ใหม่มาอีกต่อไป อยากได้อะไรก็เอา function ใน redis เดิมมาต้มยำทำแกงออกมาเป็นคำสั่งใหม่ได้ตามใจเล้ย!!

สำหรับการใช้งาน จะเรียกใช้ผ่าน eval ตัวอย่างเช่น


eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second

ตรงนี้จะมี parameter ที่ส่งเข้าไปสองแบบคือแบบ key และแบบ argument ซึ่งแบบ key (ในที่นี้คือ key1, key2) จะใช้สำหรับส่งชื่อ key ที่ต้องการจะทำงานด้วยเข้าไปโดยเฉพาะ ส่วน argument (first, second) คือค่าอื่นๆ ที่ต้องการส่งเข้า script ซึ่งส่วนมากมักจะเป็น value ที่ต้องการ set เข้าไป บางคนอาจจะสงสัยว่าทำไมต้องแยกเป็นสองประเภท? คนสร้าง redis บอกว่าเพื่อให้ตัว redis รู้ว่าอะไรเป็น key แล้วจะส่งไปให้ redis อีกตัวเวลาใช้งาน redis cluster (ที่ยังไม่ออกตัวเสถียร) ได้ ดังนั้นหากคุณไม่ได้วางแผนจะใช้งาน redis มากกว่า 1 process ก็อาจจะไม่ต้องสนใจในส่วนนี้ก็ได้

สำหรับ parameter จริงๆ มี 3 ตัวเป็นอย่างน้อยได้แก่

  1. ตัว lua script คำสั่งต่างๆ
  2. ตัวเลขบอกว่าจะมี key กี่ตัว (ใส่ 0 ได้หากไม่ต้องการส่ง key เลย)
  3. ตั้งแต่ตัวที่ 3 เป็นต้นไปจะเป็น keys ต่อด้วย argument (ARGV) เช่น ใส่เลขในข้อสองไปว่า 1 จะทำให้ parameter ตัวนี้คือ KEYS[1] ส่วน parameter ตัวที่ 4 คือ ARGV[1]

ตัวอย่างการใช้งานจริงเช่น


eval "return redis.call('set','mykey',ARGV[1])" 0 value

ตัวอย่างนี้แสดงการสั่งคำสั่ง set แบบบังคับว่า key ชื่อ mykey เท่านั้น ส่วน value ส่งจากนอก script เข้าไปทำงาน อาจเกิดข้อสงสัยอีกข้อว่าในเมื่อเราส่งคำสั่ง eval เป็นตัว script lua ตรงๆ ซึ่งเราสร้าง string ส่งเข้าไปเอง ทำไมยังต้องมี argument ส่งเข้าไปอีก? คำตอบคือ redis มีคำสั่ง evalSha ซึ่งเราสามารถเรียก script ที่ “cache” เอาไว้ได้ เพื่อประสิทธิภาพสูงสุดครับ (ใช้ SCRIPT LOAD ในการสั่ง cache ครั้งแรก)

สำหรับอีกตัวอย่างที่ใช้งานจริงได้ เช่นผมอยากสร้างคำสั่ง myhset ซึ่งคำสั่งนี้จะเช็คค่า key ที่ชื่อว่า serverStatus ว่าเป้น open อยู่หรือเปล่า ถ้า open ถึงจะอนุญาตให้เซ็ตได้ ไม่งั้น return redis error มาจะเขียนดังนี้


local serverStatus = redis.get('serverStatus')
if serverStatus == 'open' then
return redis.call('hset', ARGV[1], ARGV[2])
else
return redis.error_reply("serverIsClosed")
end

จบบทความวันนี้ครับ :)

เปลี่ยนสีวัตถุแบบเร่งด่วน [Ai] by

31
Jul
0

หลายครั้งที่ต้องเสียเวลากับการเปลี่ยนสีวัตถุที่มีรายละเอียดเยอะ

มีวิธีง่ายๆที่จะเปลี่ยนสีวัตถุเหล่านั้นได้อย่างรวดเร็ว

ลองมาเปลี่ยนสีปลาตัวนี้กัน!!!

ขั้นแรกเรียกคำสั่ง Swatches ขึ้นมา

Selection ที่ตัวปลา แล้วคลิก New Color Group ที่อยู่ด้านล่าง Swatches

จากนั้นให้กด  Edit or Apply Color Group

1.กด Edit เพื่่อเปลี่ยนสี

2.กด Unlink hanomy colors เพื่อปลดล็อกสี ทำให้เปลี่ยนสีได้สะดวกขึ้น

เมื่อเปลี่ยนสีจนพอใจแล้ว ไปคลิก New Color Group

Set สีใหม่ที่เราเพิ่งทำการเปลี่ยนไปก็จะถูกเพิ่มเข้าไปใน Swatches

วิธีการใช้สกินที่สร้างเองกับสกรอลบาร์ Spark List by

31
Jul
0

โดยปกติแล้วทางดีไซน์เนอร์จะสร้างทั้งสกรอลล์บาร์มาให้ ซึ่งเราต้องนำมาผูกกับลิสท์ที่เราสร้างขึ้นมาเอง โดยแต่ก่อนนั้นผมใช้ <s:VScrollBar> แล้วเซ็ท property skin ให้เป็น custom skin ของเรา จากนั้นก็เซ็ท viewport ให้เป็นตัว List ของเรา ซึ่งปัญหาคือสกรอลล์ทำงานได้ไม่ถูกต้องเท่าที่ควร มักมีบางส่วนหายไปด้านล่างๆของลิสท์ เราเลยต้องมาเปลี่ยนวิธีกันใหม่ครับ

- ขั้นแรกให้เราสร้างไฟล์ CSS แล้วประกาศไว้ในไฟล์แอปพลิเคชั่นหลักของเราเลยครับ
<fx:Style source=”styles.css”/>

- จากนั้นในไฟล์ให้เราเซ็ทสกินใส่ CSS ไว้ครับ
@namespace s “library://ns.adobe.com/flex/spark”;

@namespace mx “library://ns.adobe.com/flex/mx”;

.friendScroll s|VScrollBar{

skinClass: ClassReference(“components.scrollbarVerticalScrollbar”);

fixedThumbSize:false;

horizontalScrollPolicy: off;

}

- จากนั้นก็เซ็ท property “styleName” ให้ตรงกับที่เราประกาศไว้ใน CSS ครับ

<s:List id=”listFriend” styleName=”friendScroll” dataProvider=”{aFriendList}” itemRenderer=”components.friendCustomComponent” />

แค่นี้สกรอล์ของเราก็จะเปลี่ยนเป็น Custom สกินแล้วครับ แต่บางทีอาจจะต้องมีแก้เล็กน้อยในไฟล์สกินเพื่อให้ตำแหน่งมันตรงกับความเป็นจริงด้วยนะครับ

gg-bar

วิธีการจัดการ ไฟล์ unit test by

31
Jul
0

ในการ เขียน งานขึ้นมาสักงานหนึ่ง ไม่มีทางที่จะเขียนทุกอย่างๆลง ไฟล์ๆ เดียวได้ ต้องมีการแยกหมวดหมู่ออกมาโดยในที่นึ้
เราใช้วิธีการ เขียนแบบ MVC

เพราะฉะนั้นตัวไฟล์ของ unit test นั้น ก็ควรที่จะแบ่งเขียนออกมาตาม class เพื่อให้ง่ายต่อการเรียกใช้งาน ดังรูป

untitled

แต่จะมีปัณหาเมื่อผู้ใช้ต้องการที่จะรันทุกไฟล์ เพื่อตรวจสอบการทำงานของโปรแกรมทั้งหมดจะให้รันทีละไฟล์ก็เหนื่อยไป เราสามารถแก้ปัณหานี้ได้โดย
เอาทุกไฟล์มารวมไว้อยู่ใน โฟว์เดอร์เดียวกัน ในที่นี้ ใช้ testall
และผู้ใช้ก็สามารถใช้ คำสั่ง mocha ชื่อโฟว์เดอร์ ที่ต้องการ ได้เลยครับ ไม่จำเป็นต้อง ทีละไฟล์ แล้วสะดวกไหมล่ะครับ ^^

[Technique] การทำเงาให้วัตถุด้วย Distort by

30
Jul
0

การทำเงาวัตถุด้วย Distort

นำภาพที่วาดเสร็จแล้วมาDuplicate layer เพิ่มแล้วนำlayer นั้นมา Free transform

แล้วคลิกขวา เลือก Distort เราก็จะสามารถดัดตัวละครหรือวัตถุนั้นๆได้ตาม จุดหรือมุมต่างๆ

ดัดให้เป็น perspective ที่เข้ากับพื้นที่ตัวละครหรือวัตถุนั้นอยู่ได้ตามตต้องการ

*กรณีนี้สามารถใช้ได้แค่พื้นที่เป็น plane เรียบ ถ้ามีความโค้งหรือขรุขระสามารถใช้ warp ช่วยได้อีกที

ดัดเสร็จก็เอา layer นั้นไว้ข้างหลังแล้วก็เปลี่ยนสีเป็นสีและopacity ของเงาตามที่ต้องการ จบแล้ว เจ๋งชะมัด

กู้เงิน | เศรษฐกิจพอเพียง | สินเชื่อบุคคล | สมัครบัตรกดเงินสด | สินเชื่อ | เงินกู้ด่วน | ยืมเงินทรูมูฟ | เงินด่วนนอกระบบ