การใช้จำกัดบรรทัดการแสดงผลข้อความและใส่ทูลทิปให้กับ Text ใน Flex by Ziah
Jun0
ในบางครั้งการออกแบบจาก Flash Catalyst เมื่อนำมาใส่ข้อมูลจริงอาจมีบางครั้งที่ข้อมูลยาวเกินขนาด ซึ่งถ้าเราไม่ทำอะไรกับมัน ข้อมูลText ก็จะล้นออกมาซึ่งจะทำให้ การแสดงผลนั้นออกมาผิดพลาด ซึ่งเราจะแก้ไขโดยการจำกัดจำนวนบรรทัดของText และใช้ Tooltip ให้แสดงข้อมูลเต็มเมื่อนำเมาส์มาชี้ โดยที่ไม่ต้องยุ่งกับส่วนของข้อมูลเลย ดังรูป
การแสดงผลที่ผิดพลาด
เมื่อแก้ไขแล้ว
• ขั้นแรกเราจะทำการจำกัดบรรทัด โดยใส่ property maxDisplayLines ให้กับ Richtext ตัวที่เราจะทำการจำกัดบรรทัด และใส่ width เพื่อให้รู้ขนาดความกว้างของบรรทัด
<s:RichText id=”txtName” maxDisplayedLines=”1″ text=”Item Name” textAlign=”center” width=”117″ x=”4″ y=”2″>
ก็จะทำให้ได้กานจำกัดบรรทัดโดยจะตัดประโยคให้พอดีกับบรรทัดและเติม … ต่อท้าย ดังรูป
• ต่อไปเราจะทำการเพิ่ม ToolTip โดยมีสองวิธีคือใส่ในแท็กเลยหรือเพิ่มใน ActionScript ก็ได้
วิธีใส่ในแท็ก
<s:RichText id=”txtName” maxDisplayedLines=”1″ text=”Item Name” textAlign=”center” width=”117″ x=”4″ y=”2″ toolTip=”{/*ตัวแปรที่นำมา Binding*/}”>
วิธีใส่ใน ActionScript
//ในส่วนที่มีการเปลี่ยนแปลงข้อมูล
var str:String = //ข้อมูลที่รับมา
txtName.text = str;
txtName.toolTip = str; //String ของข้อมูลที่เหมือนกับ property text
ก็จะได้ ToolTip เมื่อนำเมาส์มาชี้ดังรูป
เราได้การแสดงผลที่ไม่เกินจากที่เรากำหนดไว้และสามารถชี้เพื่อแสดงข้อมูลทั้งหมดได้แล้วล่ะครับ
แถมอีกนิดการตกแต่ง ToolTip ใน Flex ทำได้ง่ายนิดเดียวครับใช้โค้ดนี้
styleManager.getStyleDeclaration(“mx.controls.ToolTip”).setStyle(styleProp:String,newValue:*); //styleProp คือ Property ที่ใช้ใน CSS ครับ newValue ก็ค่าที่เราจะใช้ เช่น color : red; ก็ใช้เป็น (“color”,”red”) ครับ
ตัวอย่าง
styleManager.getStyleDeclaration(“mx.controls.ToolTip”).setStyle(“backgroundColor”,”black”);
styleManager.getStyleDeclaration(“mx.controls.ToolTip”).setStyle(“fontWeight”,”bold”);
styleManager.getStyleDeclaration(“mx.controls.ToolTip”).setStyle(“fontSize”,”21″);
styleManager.getStyleDeclaration(“mx.controls.ToolTip”).setStyle(“color”,”#FFFFFF”);
styleManager.getStyleDeclaration(“mx.controls.ToolTip”).setStyle(“fontFamily”,”Arial”);
ผลลัพธ์
วิธีแก้ปัญหาเมื่อตาราง InnoDB ไม่สามารถ alter, optimize, dump ได้เลย by heha
Jun0
เนื่องจากช่วงนี้มีปัญหาโลกแตกที่ตาราง InnoDB อยู่ๆ ก็เกิด alter, optimize, dump ไมได้เลยซักกะอย่าง มันจะบอกว่า “MySQL server has gone away” หรือ “Error 2013: Lost connection to MySQL server during query when …” ซึ่งช่างเป็น error ที่สื่อความหมายได้ดีเยี่ยมเสียจริง! ไปดูใน log error ก็ฟ้องว่า thread MySQL ตายกลางทาง กรุณา submit bug ไปให้ MySQL เอ่อ… พอสั่ง Check table มันก็บอกว่าปกติดี เอะยังไง! สุดท้ายเนื่องจากจนปัญญาจึงต้องมานั่ง query ทีละ rowๆ ออกมาใส่ตารางใหม่ที่โครงสร้างเหมือนเดิม ซึ่งได้ผลดังนี้
1. ตารางที่ query มันใหญ่มาก! ไม่สามารถสั่ง INSERT INTO user2 (SELECT * FROM user) ได้ตรงๆ เลยแบบง่ายๆ
2. ลองสั่ง INSERT INTO user2 (SELECT * FROM user LIMIT 0,1000) ไรทำนองนี้ก็ไม่ให้อีก! มันฟ้องว่า subquery ไม่ support limit เวรจริงๆ ครับ 55
3. ลองใช้ php ช่วย คือสั่ง SELECT * FROM user WHERE user_id NOT IN (SELECT user_id FROM user2) LIMIT 0,1000 แล้วค่อยเอา user_id ที่ได้มา query ต่อเป็น “INSERT INTO user2 (SELECT * FROM user WHERE user_id IN(“.implode(‘,’, $a_user_id).”))” ก็ยังไม่ได้เพราะแต่ละ row มันใหญ่มาก กว่าจะเสร็จก็ช้ามากๆ
4. สุดท้ายจึงได้เป็น SELECT user_id FROM user WHERE user_id NOT IN (SELECT user_id FROM user2) LIMIT 0,1000 แล้วต่อด้วย ”INSERT INTO user2 (SELECT * FROM user WHERE user_id IN(“.implode(‘,’, $a_user_id).”))” เหมือนเดิม ก็ใช้ได้ละครับ
5. รันไปซักพักพบ “MySQL Server has gone away” อีกแล้ว – -” จึงค่อยๆ ลด Limit มาเหลือ 1 ก็ยังพัง และค่อยๆ ลอง SELECT * FROM user WHERE id=1 ไปเรื่อยๆ โดยเปลี่ยน * เป็น field ในตารางที่มีทีละ field ปรากฏว่าก็เจอ field เจ้าปัญหาจนได้ เป็น Text field นี่เอง! ซึ่งเราไม่สามารถแม้กระทั่งสั่ง DELETE FROM user WHERE id=1 ช่างโหดร้ายยิ่ง!
6. ต่อมาจึงต้องใส่ offset เพื่อ skip row ที่มีปัญหาไป แล้วก็รันๆ ไปซักพักอีกก็เจออีก สรุปว่าข้อมูล user แสนคน เจอ row ที่มีปัญหาทั้งหมด 5 row มันไปทำอีท่าไหนถึงพังก็ไม่อาจทราบได้ และตอนนี้ก็สามารถกลับมาใช้งานได้ตามปกติซะที
เทคนิคการเขียน PHP ให้เร็วและ ถูกต้อง by tosawat
Jun0
1. echo เร็วกว่า print
2.เวลาใส่ตัวหนังสือ หรือข้อความให้ใส่ใน ‘ ‘ จะเร็วกว่า ใส่ใน ” ” เพราะว่าเครื่องหมาย “…” มันจะทำการค้นหาตัวแปรที่อยู่ภายในก่อน
3.ใช้คำสั่ง sprintf แทนที่จะยัดตัวแปรลงไปตรงๆ จะทำให้เร็วขึ้น 10เท่า!!
4.เรียกใช้ echo หลายครั้ง จะเร็วกว่าการเสียเวลาเพื่อเชื่อมตัวหนังสือก่อนเรียก echo ครั้งเดียว
5.ในกระบวนการ loop ควรคำนวนค่าต่างๆเอาไว้ก่อนเท่าที่ทำได้ เช่น
for($x=0;$x < count($array);$x)
เราควรเปลี่ยนมาใช้
$max = count($array);
ก่อน ค่อยเอาค่า$max ไปใช้ เพราะว่ามันจะเสียเวลาคำนวนรอบเดียวเท่านั้น
6.พยายามตรวจสอบตัวแปร array ถ้ามีค่าไหนไม่ได้ใช้ก็ unset ทิ้งไปบ้าง
7.พยายามอย่าเรียกใช้ function พิเศษ เช่น __get, __set, __autoload
8.เรียกใช้ require() แทนที่จะใช้ require_once() เท่าที่จะเป็นไปได้
9.ใช้ Full path ในการ include หรือ require เพื่อลดเวลาการค้นหา path ของ OS ที่รัน
10. require() และ include() มันทำงานได้เหมือนกันเลือกใช้ให้ตรงตามความต้องการ มันต่างตรงที่ว่า require() ถ้าไม่พบไฟล์ มันก็หยุดทำงานเลย ความเร็วที่ได้แทบไม่ต่าง
11. ตั้งแต่ PHP5 เวลาจุดเริ่มต้นของการ ประมวลผล จะเรียกได้จาก $_SERVER[?REQUEST_TIME?] ไม่ต้องเรียกใช้ time() หรือ microtime()
12. PCRE regex ทำงานได้เร็วกว่า EREG แต่จะเห็นผลเมื่อใช้ในแบบ native function
13.เมื่อจะประมวลผล XML ใน php ใช้ xml2array จะเป็นการเรียกใช้ PHP XML function และสำหรับ HTML สามารถเรียกใช้ PHP’s DOM document หรือ DOM XML ใน PHP4
14.str_replace ทำงานได้เร็วกว่า preg_replace แต่บางครั้ง strtr ก็ทำงานได้เร็วกว่าถ้าต้องใช้กันตัวหนังสือเยอะๆ และเราจะใช้ array() ในการทำงานของ str_replace จะทำให้ทำงานได้เร็วกว่าการเรียก str_replace หลายรอบ
15. statement else if ทำงานได้เร็วกว่า select statement หรือว่า case/switch
16.การปิด error ด้วย @ ทำให้ทำงานได้ช้ามาก
17.การจะลด bandwidth ให้เรียกใช้ mod_deflate ใน apache 2 และ mod_gzip ใน apache1
18.ปิดการเชื่อมต่อกับ database เมื่อทำงานเสร็จทุกอย่าง
19.$row['id'] เร็วกว่า $row[id] 7เท่า เพราะว่าถ้าเราไม่ใส่เครื่องหมาย มันจะเสียเวลาทำความเข้าใจ index ว่าหมายความว่าอะไร
20.ใช้ tag เมื่อเราจะใช้ PHP แทนการเรียกใช้แบบอื่นๆ รวมทั้งการใช้ short tag ด้วย
21.เขียนโค้ดให้ถูกต้องตามไวยากรณ์ เพื่อลด error ที่จะเกิดขึ้น ซึ่งหลายครั้งมันเป็นเพียง notice หรือ warning เท่านั้น จะทำให้ลด over head ไปได้ หรือว่าลองเปิด error_reporting(E_ALL) เพื่อให้เห็น error แบบเต็มๆ
*เปิดไว้เถอะครับ เขียนให้ถูกต้องเสมอ อย่าซ่อนขยะใต้พรม
22.การแสดงผลแบบ PHP ทำให้หน้าเว็บช้ากว่า static page 2-10 เท่า (ใน apache httpd) ดังนั้น ใช้ php เท่าที่จำเป็น
23.PHP script จะต้องถูกประมวลผลทุกๆครั้งที่มีการเรียกใช้หน้าเว็บ ถ้าไม่มี cache ดังนั้นควรหาระบบ cache มาใช้(เช่น memcached, eAccelerator , Turck MMCache) เพื่อเพิ่มประสิทธิภาพการทำงานได้ 25-100% เพราะว่าจะลดเวลาการประมวลผลลงได้
24.ใช้เทคนิคการทำ cache แบบอื่นๆสำหรับหน้าเว็บที่ไม่ได้มีการเปลี่ยนแปลงมากนัก การทำ cache มันจะเหมือนการแสดงผล HTML ออกหน้าเว็บธรรมดา ลองใช้พวก Smarty หรือ Cache Lite ดู
25.พยายามใช้ isset แทนการใช้ strlen เช่น
if (strlen($foo) prop++) ช้าเป็น 3 เท่าเมื่อเทียบกับ local variable
44.การเพิ่มค่าให้กับตัวแปร local ที่ไม่ได้ประกาศไว้ก่อน ทำให้ช้ากว่าปกติ 9-10 เท่าเมื่อเทียบกับการประกาศไว้ก่อน
45.การสร้างตัวแปร global แม้ว่าจะไม่ได้เอาไปใช้ใน function ก็ทำให้ช้าลง เพราะว่า php จะออกไปเช็คตัวแปร global ที่มีอยู่เสมอ
46.จำนวน method ที่เพิ่มขึ้น ไม่ส่งผลต่อ performance (ถ้าใช้งานเท่าเดิม)
47.method ใน derived classes ทำงานได้เร็วกว่า base class
48.function ที่รับ 1 parameter แต่ใน function ว่างเปล่ามีลักษณะเหมือน การทำงาน $localvar++ 7-8 ครั้ง และถ้าเป็น method ลักษณะนี้ ก็เปรียบกับ $localvar++ 15 ครั้ง
49.ไม่จำเป็นต้องทำทุกอย่างเป็น OOP มันจะทำให้เกิด overhead และ method, object จะทำให้เปลือง memory
50.อย่าวางใจ ข้อมูลที่ได้มาจากการป้อนของ user เช่น form $_POST ให้ใช้ mysql_real_escape_string แทนการใช้ mysql_escape_string หรือ addslashs แต่ถ้า เปิด magic_quotes_gpc ไว้ ก็ให้ใช้ stripslashes ไว้ก่อน
51.ระวังโดน header injection กับ function mail()
52.unset ตัวแปรของ database (อย่างน้อยที่สุดก็ password) ไม่จำเป็นตั้งใช้ หลังจากการเชื่อมต่อ เรียบร้อยแล้ว
credit http://www.hm2k.com/posts/50-php-optimisation-tips-revisited
Smile Land game on Facebook by akara
Jun5
Facebook Platform Policies by wittaya
Jun1
ช่วงนี้ facebook ไม่ค่อยมีอะไรใหม่มาอัพเดตมากมายเท่าไหร่ แต่มีข้อมูลการเปลี่ยนแปลงภายใน โดยหลักๆ ก็คือการนำ Policy ใหม่ยกชุดไม่ว่าจะเป็น Promotions Policy และ Platform Policy
สำหรับ Facebook apps ต่างๆ ก่อนที่จะสร้าง apllication ขึ้นมาควรที่จะศึกษาเรื่อง Policay เสียก่อน เพื่อที่จะได้ app ที่มีความเหมาะสม โดย Facebook Platform Policy (Date of Last Revision: May 24, 2011) สามารถอ่านอย่างละเอียดได้ที่ ลิ้งนี้ http://developers.facebook.com/policy
โดยหลักพื้นฐานง่ายๆ มีดังนี้ครับ
Principles
Create a great user experience
- Build social and engaging applications
- Give users choice and control
- Help users share expressive and relevant content
Be trustworthy
- Respect privacy
- Don’t mislead, confuse, defraud, or surprise users
- Don’t spam – encourage authentic communications
และควรไปทำความเข้าใจตัวอย่างจาก ตัวอย่างที่นี่
ซึ่งจากที่ได้ศึกษาแล้ว ยอมรับว่าจำเป็นอย่างยิ่งที่ควรจะรู้ไว้ในหลายๆเรื่อง เพราะ Policy ค่อนข้างเข้มงวดทีเดียว
อย่างเช่น ห้ามการใช้ คำ หรือ รูปภาพที่อาจมีการทำให้เข้าใจผิดว่าเป็นแอปหรือ product จาก facebook เอง
และเป็นข้อห้ามหลักๆเช่น ให้ผู้ใช้ใส่ข้อความในจุดนี้เอง
ยังมีอีกหลายๆ รายละเอียดครับ ที่ควรศึกษา entry นี้จึงอยากให้เพื่อนๆเข้ามาศึกษาดูว่าก่อนที่จะเริ่มทำแอปอะไรที่เป็นทางการ เราได้ออกแบบแอของเรามาอย่างถูกหลักตามกฎเหล่านี้แล้วหรอยัง ^^