abstract class StartEnd{ protected $m = array(); public function push($data){ if (count($this->m)==0){ $this->m[1] = $this->m[0] = $data; }else{ $this->m[1] = $data; } } public function __toString(){ if (count($this->m)==0){ return ''; }elseif ($this->m[0] == $this->m[1]){ return (string)$this->m[0]; }else{ return $this->m[0].'-'.$this->m[1]; } } public static function getFormat(array $a){ $groups = array(); $prev = -1; static::sort($a); foreach($a as $i){ if ($prev !== static::getPrev($i)){ $se = new static(); $groups[] = $se; } $se->push($prev = $i); } return implode(',',$groups); } abstract public static function sort(&$a); abstract public static function getPrev($i); } class StartEndNumber extends StartEnd{ public static function sort(&$a){ sort($a,SORT_NUMERIC); } public static function getPrev($i){ return $i-1; } } class StartEndDay extends StartEnd{ protected static $enum = array('MON','TUE','WED','THU','FRI','SAT','SUN'); public static function daySort($val1,$val2){ return array_search($val1,static::$enum)-array_search($val2,static::$enum); } public static function sort(&$a){ usort($a,'StartEndDay::daySort'); } public static function getPrev($i){ $position = array_search($i,self::$enum); if ($position === false){ return false; }else{ return self::$enum[$position-1]; } } } $a = array(1,4,3,2,5,9,10,12); echo StartEndNumber::getFormat($a),' '; //1-5,9-10,12 $a = array('TUE','MON','WED','FRI','SAT'); echo StartEndDay::getFormat($a); //MON-WED,FRI-SAT
วันศุกร์ที่ 27 ธันวาคม พ.ศ. 2556
start end format display number
วันอาทิตย์ที่ 15 ธันวาคม พ.ศ. 2556
calculate age from javascript
function get_age(ymd) {
var x = ymd.split('-');
var y = x[0];
var m = x[1];
var d = x[2];
var today = new Date();
var test = m = (today.getMonth()+1 - m);
if (test < 0) {
y++;
} else if (m == 0 && today.getDate() - d < 0) {
y++;
}
var test2 = today.getFullYear() - y;
if (test2 < 0)
test2 = 0;
return test2;
}
alert(get_age('1980-01-01'));
var x = ymd.split('-');
var y = x[0];
var m = x[1];
var d = x[2];
var today = new Date();
var test = m = (today.getMonth()+1 - m);
if (test < 0) {
y++;
} else if (m == 0 && today.getDate() - d < 0) {
y++;
}
var test2 = today.getFullYear() - y;
if (test2 < 0)
test2 = 0;
return test2;
}
alert(get_age('1980-01-01'));
วันเสาร์ที่ 7 ธันวาคม พ.ศ. 2556
mod_rewrite test tool
http://htaccess.madewithlove.be/
เครื่องมือทดสอบ mod_rewrite โดยไม่ต้องไปแก้ .htaccess บ่อยๆ ทดสอบออนไลน์ได้เลยครับ
เครื่องมือทดสอบ mod_rewrite โดยไม่ต้องไปแก้ .htaccess บ่อยๆ ทดสอบออนไลน์ได้เลยครับ
วันจันทร์ที่ 2 ธันวาคม พ.ศ. 2556
Zend certified engineer PHP 5.3
ในที่สุดก็สอบผ่านเสียทีครับ กับการเตรียมสอบมาอย่างยาวนาน ใช้เวลาเตรียมตัวสอบมาเรื่อยๆ อาศัยช่วงว่างจากงานพิเศษบ้าง ช่วงดึกของวันจันทร์ถึงศุกร์ เป็นเวลา 3 เดือนเต็มๆ หลักก็มีอ่าน ebook ของ PHP-5-3-Study-Guide-v1 ของ Zend.com, Tutorial ตามเว็บไซต์ต่างๆ ที่คนที่สอบผ่านแล้วแนะนำ และอ่าน PHP Manual เนื้อหาหลักๆ ทั้งหมด
ในระหว่างการอ่านพบว่าตัวเองไม่ถนัดเขียนปากกาจดบันทึกซะแล้ว สมัยก่อนจดแล้วลบแล้วบางทีกลับมาดูอีกทีอ่านไม่ออก ผมเลยต้องหาตัวช่วยมาใช้เป็นโปรแกรมสร้าง Mind Map ตัวหนึ่งชื่อว่า FreeMind โปรแกรมตัวนี้จะสร้างข้อมูลเหมือน Tree/Directory สามารถจัดกลุ่มเพิ่มลบแก้ไขข้อมูลได้สะดวกมาก http://freemind.sourceforge.net
ในช่วงวันก่อนวันสอบก็ยังไม่แน่ใจในระดับความยากของข้อสอบ เพราะจากที่ทำตัวอย่างข้อสอบที่ผ่านๆ มาอยู่ในระดับยากมาก (ข้อสอบตัวอย่างมักจะถาม parameter ตัวที่ 3-4 ของ function ต่างๆ แบบสุ่มชื่อ function หรือถามผลลัพธ์ของการของโปรแกรมที่มีตัวแปร 3-5 ตัวแปร) วันเสาร์อาทิตย์ก่อนสอบก็ไม่สบายเสียอีกเวลาอ่านทบทวนที่จดไว้ใน Mind Map ได้ไม่มาก จะสอบผ่านไม่ผ่านไม่รู้แต่เสียดายที่เตรียมมาเยอะมาก ถ้าอ่านไม่จบแล้วสอบตกคงเสียใจมาก ถ้าอ่านจบที่เตรียมแล้วไม่ผ่านก็จะได้ทำใจว่าทำดีที่สุดแล้ว วันจันทร์ตอนเช้าเลยต้องตั้งตาอ่านให้ครบตั้งแต่ช่วงตี 2 ถึง 7 โมงกว่า อ่านจบค่อยสบายใจหน่อย :D
วันที่สอบก็หวั่นๆ อยู่หน่อย เพราะเป็นช่วงที่เกิดการชุมนุมและมีการประกาศหยุดงานในหลายๆ แห่ง ไม่รู้ว่าศูนย์สอบจะเปิดให้ผมเข้าไปสอบหรือเปล่า ผมสอบที่ศูนย์ CTT Center เลือกสอบที่นี่เนื่องจากตั้งใจจะสอบช่วงธันวาคมแต่ศูนย์สอบหลายแห่งไม่เปิดช่วงธันวาคมแต่ที่นี่เปิดอยู่เกือบทั้งเดือน การเดินทางก็สะดวกโดยลงที่สถานีไฟฟ้าใต้ดินเพชรบุรี เดินต่อไปอีก 300 เมตรก็ถึงครับ ก่อนสอบก็ต้องเก็บของในล็อคเกอร์ก่อน เพราะเค้าจะไม่อนุญาตให้เอาของส่วนตัวกระเป๋า โทรศัพท์มือถือ ฯลฯ เข้าสอบครับ
การสอบจะเป็นการสอบในระบบ online ก็จะมีเจ้าหน้าที่มาเซ็ตระบบให้เรียบร้อย โดยเริ่มต้นเค้าจะให้กระดาษทดมา ปรากฎว่าปากกาเขียนไม่ติด ผมเลยตะโกนขอปากกาใหม่ ตอนหลังสอบเจ้าหน้าที่คงงง ว่าเขียนทดอะไรหว่า ด้วยลายมือที่อ่านยากและที่ทดเขียนไว้ว่า 1+1 (จะเขียนทำไมเนี่ย 555)
ข้อสอบไม่สามารถเปิดเผยได้เพราะเป็นกฎของ Zend ครับ แต่หลักๆ แล้วไม่ยากอย่างที่คิด ระบบข้อสอบเค้าเป็นระบบที่ดีมาก คือทำแล้วสามารถตั้ง flag เพื่อให้กับมาตรวจทานเปลี่ยนแปลงข้อสอบได้สะดวกรวดเร็ว เนื่องจากทำข้อสอบเสร็จค่อนข้างเร็ว ผมจึงมีเวลาตรวจทานซ้ำได้พอสมควร หลักสำคัญก็คือควรจะอ่านข้อสอบให้ละเอียด บางคำตอบเหมือนจะถูกแต่ถ้าอ่านคำถามให้ดีและเช็คคำตอบอื่นจะพบว่าคำตอบที่ถูกต้องจะเป็นอีกข้อหนึ่ง ดังนั้นควรทำเสร็จให้เร็วจะได้กลับมา review ข้อสอบต่างๆ ที่ยังไม่มั่นใจ 100% อีกครั้ง ก่อนกดปุ่มยุติการสอบครับ
ถ้าเป็นการสอบผมจะใช้เวลาคุ้มตลอด มีเวลาเหลือผมก็ review รอบสองจนครบ 90 นาที พอครบ 90 นาทีปุ๊บ ระบบแจ้งผลให้ทราบในทันที Congratulation!! สอบผ่านแล้ว เย้ๆๆ
ปล. ในการสอบครั้งนี้ผมไม่ได้เสียค่าใช้จ่ายในการเข้าสอบเอง ต้องขอขอบคุณพี่วี (webofficedesign.com) ที่สนับสนุนและเคี่ยวเข็ญทำให้ได้ไปสอบในครั้งนี้ด้วยครับ :)
สมัครสมาชิก:
บทความ (Atom)