Posted on March 13, 2010, 01:04, by pittaya.
มีปัญหาเรื่อง performance ของ wordpress อยู่เรื่องนึง ที่น่าหงุดหงิดใจมานานแล้ว คือในตอนที่ใช้ memcached มาทำเป็น cache backend ให้ wordpress เพื่อลดภาระของ database มันก็ช่วยได้เยอะอยู่ แต่ก็ยังมีบาง query ที่ตัว wordpress มันไม่ยอม cache ให้ ดังเช่น query ด้านล่างนี้
SELECT SQL_CALC_FOUND_ROWS wp_posts.* FROM wp_posts WHERE 1=1
AND wp_posts.post_type = ‘post’ AND (wp_posts.post_status = ‘publish’)
ORDER BY wp_posts.ID ASC LIMIT 0, 1
เป็น query เจ้าปัญหาที่ถูกเรียกทุกครั้ง ทั้งๆ ที่ query อื่นถูก cache ไว้หมดแล้ว ทำให้ 1 [...]
Posted on October 26, 2009, 23:56, by pittaya.
เว็บ Engine Yard มีบทความน่าสนใจเกี่ยวกับเรื่องการใช้งาน Key-Value Stores กับ Ruby (เขียน Ruby ไม่เป็นก็อ่านรู้เรื่อง) พูดถึง product หลายๆ ตัวที่กำลังอยู่ในความสนใจ อย่าง Tokyo Cabinet, Redis, Cassandra, MongoDB
ขณะที่เขียน มีให้อ่านทั้งหมด 5 ตอน
part 1 - Key-Value Stores in Ruby
part 2 - Tokyo Cabinet
part 3 - Cassandra and Ruby: A Love Affair?
part 4 - To Redis or Not To Redis?
part 5 - MongoDB: A Light [...]
Posted on September 2, 2009, 11:23, by pittaya.
วิธีตรวจสอบว่า wordpress user ปัจจุบันว่าเป็น admin หรือไม่ ทีแรกมั่วๆ ไปดูที่ function is_admin() แต่อ่านโค้ดดูแล้วไม่ใช่ อันนั้นมันเอาไว้ดูว่าหน้าปัจจุบัน เป็นหน้า wordpress admin หรือเปล่า
วิธีตรวจสอบที่ถูก คือดูจาก capability ของ user นั้นๆ (reference สำหรับเช็ค capability ของ role ต่างๆ) โดยใช้ function current_user_can() เช็คว่าทำได้หรือไม่
เช่น จะดูว่า user สามารถลบคอมเมนต์ได้หรือไม่ ก็เช็คว่า current_user_can(‘moderate_comments’) หรือถ้าต้องการจะเช็คจริงๆ ว่า user เป็น admin หรือเปล่า ก็ใช้ current_user_can(‘level_8′)
แต่ถ้าสำหรับ wordpress MU จะมี function is_site_admin() ให้ใช้ด้วย
Posted on August 10, 2009, 18:59, by pittaya.
วันก่อนงมหาวิธีทำให้เวลาคลิก link ใน XULRunner แล้วไปเปิดหน้านั้นๆ ใน browser ของเราอยู่นาน สุดท้ายก็ไปดาวน์โหลดโค้ดของ Flickr Uploadr เอามาแกะดู ถึงได้พบดวงตาเห็นธรรม (โค้ดเป็น GPLv2)
1
2
3
4
5
6
7
8
9
10
11
12
13
function launch_browser(url) {
try {
var io = Components.classes[’@mozilla.org/network/io-service;1′]
.getService(Components.interfaces.nsIIOService);
var uri = io.newURI(url, null, null);
var eps = Components.classes[’@mozilla.org/uriloader/external-protocol-service;1′]
.getService(Components.interfaces.nsIExternalProtocolService);
[...]
Posted on May 21, 2009, 11:00, by pittaya.
จดไว้กันลืม
เวลาที่เรา SELECT ข้อมูลจาก MySQL ปกติก็จะเขียนกันแบบนี้
SELECT * FROM data ORDER BY id LIMIT 10,10
แต่ถ้าวันหนึ่ง เรามีข้อมูลมากๆ แล้วต้องการข้อมูลที่ LIMIT เยอะๆ เช่น
SELECT * FROM data ORDER BY id LIMIT 900000,10
Query แบบหลัง จะช้ากว่าแบบแรกอยู่เยอะ
วิธีที่จะ optimize ให้ query แบบหลัง ทำงานได้เร็วขึ้นทำได้แบบนี้
SELECT * FROM data WHERE id >= (SELECT id FROM data ORDER BY id LIMIT 900000,1) LIMIT 10
โดยที่ id ต้องเป็น index จะทำให้ใน subquery [...]