Google


Tag Archive for 'Developer'

คุณต้องมีความคิดสร้างสรรค์ให้มากกว่าการเป็นวิศวกร

เป็นคำให้สัมภาษณ์ที่ผมเก็บไว้มานานแล้ว แต่ว่าอยู่ใน Draft ของ Live Writer เลยลืม ๆ ไปครับ วันนี้เลยเอามาลงแล้วกัน แม้มันจะผ่านมานานแล้ว แต่ว่ายังคงน่าสนใจอยู่ดีครับ ผมยกมาเฉพาะประโยคเด็ด ๆ แล้วกันนะครับ

"คุณต้องมีความคิดสร้างสรรค์ให้มากกว่าการเป็นวิศวกร"

เดวิดระบุ "โลกสามารถสร้างวิศวกรจำนวนมากมายได้ แต่สิ่งที่สร้างไม่ได้คือไอเดีย วิศวกรที่มีไอเดียจะนำไปสู่ความสามารถในการแข่งขัน"

นอกจากความคิดสร้างสรรค์ เดวิดบอกว่าผู้ที่จะก้าวหน้าในงานด้านไอทีได้จะต้องมีความชอบหรือความหลงใหล ส่วนตัว และที่สำคัญ คือความสามารถในการนำเสนองาน

"ทุกคนทุกเรื่องต้องมี passion กับภรรยาผมยังต้องมี Passion เลย ถ้าคุณต้องทำงานวันจันทร์ แต่รู้สึกเบื่อหน่ายตั้งแต่วันเสาร์ ก็เปลี่ยนงานเถอะ ขณะเดียวกันก็ต้อง Present ให้ดี อย่างการทำงานวิจัยสักชิ้น คุณต้องอธิบายได้ว่าทำไมต้องทำวิจัย คุณเป็นวิศวกรก็จริงแต่ต้องบอกให้คนอื่นเข้าใจได้ด้วยว่า อะไรเป็นสิ่งสำคัญในระบบของคุณ"

David Barnes
Technical Evangelist, IBM (Leads of IBM’s evangelism)
จาก คุยกับ David Barnes ล่ามแปลภาษาไอทีเบอร์หนึ่งของIBM

ว่ากันด้วยงาน Thailand Next Web Apps

ตอนนี้ผมเพิ่งกลับมาจากงาน จริง ๆ งานเค้าเลิกกันตอนเกือบ ๆ 1 ทุ่มครับ แต่ว่าไปต่อกับคุณ gootum กับ Eut(ThaiAdmin.org) ครับ นั่งคุยกับชิล ๆ จริง ๆ คุยกับ @ifew ว่าไม่บอกจะได้ไปสมทบ -_-’ แล้วไม่โทรมาถามหล่ะคร้าบบบบ

แต่เอาไว้ก่อน เรื่องหลังงาน มาเรื่องรูปแบบของงานผมว่าเข้าเว็บ http://nextwebapps.com/th น่าจะได้รายละเอียดเยอะกว่าครับ คงไม่เล่าซ้ำว่าคืองานอะไรยังไง (ในเว็บมีบอกหมดแล้ว)

มาดูบรรยากาศในงานดีกว่าครับ จริง  ๆ มีหลาย Session แต่ผมไม่ได้ถ่ายรูปมาทั้งหมด เพราะไม่ไหวอ่ะ อยากฟังมากกว่า

อ่อ ลืมบอกไปครับงานนี้สำหรับคนที่ลงทะเบียนจะได้เสื้อด้วยครับ ;) แถมในงานข้าวเที่ยง (ของเชสเตอร์เลย), เครื่องดื่ม พวกน้ำอัดลมกระป๋องกับใส่แก้ว หรือจะน้ำเปล่า, ชา, กาแฟ มีฟรีตลอดงาน ผมซัดน้ำไป 4 กระป๋อง มั้ง ;P

ประโยคเด็ดในงาน #TNWA

ใครว่า Mac ใช้งานง่าย

ในงานนี้ตอนแรกเริ่มเลยผมกะจะไปพูดเรื่อง Hoffman Framework เตรียม slide ไปแล้วแหละ แต่ไป ๆ มา ๆ เอาไว้ Barcamp Bangkok 2 แล้วกันครับ เพราะโดยรวมก็ยังไม่พร้อมเท่าไหร่ เลยเตรียมเรื่องใหม่มาพูดแทนคือ Hi5 และ ThaiHi5.com ครับ พูดเรื่องทำไม Hi5 ถึงดังในไทย ทำไม facebook/myspace ไม่ดังในไทย รวมไปถึงเรื่องการจัดการชุมชน ThaiHi5.com ที่มีเด็ก ๆ อายุตั้งแต่ 13 - 23 ปีโดยเฉลี่ยเข้ามาใช้งาน จะจัดการยังไง ซึ่งโดยรวม ผมยังไม่พอใจในการพูดและตอบคำถามของผมเอง อาจจะเพราะเปลี่ยนหัวข้อภายในเวลา 20  นาทีเองมั้ง slide ก็เผาเอาก่อน เข้า session เพียงครึ่งชั่วโมง แถมตอนนั้นเครื่อง ThinkPad มีปัญหาบ้าบออะไรก้ไม่รู้ -_-’ ทำให้ slide ที่ทำไว้มีปัญหา ต้องทำใหม่ เลยไม่มีเวลาลำดับ slide ให้ดีพอครับ

การร่วมงานในครั้งนี้นี่หลุดไม่ได้เข้าไปหลาย session เหมือนกัน อาจจะเพราะว่า session ดี ๆ ชนกันเอง เลยต้องเข้าอันที่ชอบที่สุดก่อนแทนซะ -_-’ บางอันก็ไม่ได้ถ่ายรูปมาครับ เพราะฟังเพลินไปหน่อย T_T

P1080306

Continue reading ‘ว่ากันด้วยงาน Thailand Next Web Apps’

App ตัวแรกบน Windows Mobile ด้วย VB.NET (VS 2008)

โดยส่วนตัวแล้วถ้าให้เลือกระหว่าง C# กับ VB.NET ในตอนนี้ ผมคงเลือก VB.NET เพราะตัวเองถนัด และเขียนมาก่อนตอนเรียนอยู่มหาวิทยาลัยตอนปี 2 ตอนนั้นเขียนบนฐาน .NET 1.0 และ 2.0 ด้วย VS 2002 - 2003 และตอนฝึกงานที่เขียนบน VS 2005  ด้วยความถนัด App ตัวแรกจึงเลือก VB.NET นั้นเอง

หลายคนที่รู้จักผมคงไม่งง แต่คนไม่รู้จักผมเท่าไหร่ คงงงว่าไอ้ผมนี่มันพวกชอบภาษาแนวปีกกามากกว่า ทั้ง Perl, PHP และ JAVA แต่มี VB.NET มาโผล่มาตัวนึง ซึ่งจริง ๆ ผมเขียน C, C++, Python กับ Ruby พอได้ แต่ไม่เอามาลงจะดีกว่า เพราะอ่าน code ได้แต่ยังไม่ถึงกับเอามาทำ App จริง ๆ จัง ๆ ได้มากนัก อาจจะเพราะ C/C++ นี่ร้างลามานานจนไม่คิดว่าตัวเองเขียนเป็น App ได้ในเวลาอันสั้น Python ที่ได้จับตอนทำ E-Book และทำรายการพร้อมตัวอย่าง ยังไม่ถึงขั้น Deploy ตัว App ไปขายได้ ส่วน Ruby นี่ผมได้เพราะ Rails Framework จึงไม่คิดว่าตัวเองเก่ง Ruby พอที่จะเขียนได้โดยไม่พี่ง Rails Framework

มารอบนี้สิ่งที่ต้องเตรียมตัวหลายอย่าง อย่างแรก ผมหาข้อมูลก่อนว่าผมจะเขียน App บน Windows Mobile ได้ยังไง เพราะส่วนตัวไม่ได้ติดตามด้าน Windows Mobile เลย แต่นับตั้งแต่ซื้อ HTC Pharos มาได้ 3-4 วัน ผมเลยหาข้อมูลหลาย ๆ อย่างมาประกอบทั้งเรื่องของ Smartphone กับ Pocket PC Phone มันต่างกันยังไงแน่

รุ่น Smartphone คือรุ่นที่ตัวเครื่องมีปุ่มตัวเลขสำหรับโทรศัพท์และควบคุมการใช้งาน แต่ไม่มี Toch Screen ส่วน Pocket PC Phone  นั้นคือเครื่องที่ไม่มีปุ่มตัวเลขสำหรับกดใช้งาน แต่ใช้ Touch Screen แทน หรือบางครั้งถูกเรียกว่า PDA Phone

สิ่งแรกคือ Windows Mobile 6 นั้นได้เปลี่ยนชื่อรุ่นนิดหน่อย เป็น Standard (สำหรับ Smartphone) กับ Professional (สำหรับ PDA Phone) โดย App ในปัจจุบันนั้นได้พัฒนาขึ้นมาบน .NET Compact Framework 2.0 เป็นส่วนใหญ่ และสะดวกมาก ๆ เพราะสามารถสร้าง App บน Visual Studio 2005 Standard และ Visutal Studio 2008 Professional เป็นต้น (รุ่น Visual Studio Expression พัฒนา App บน Windows Mobile ไม่ได้ครับ T_T ) ด้วยเหตุนี้ทำให้การพัฒนา App บน Windows Mobile มีต้นทุนครับ เพราะต้องซื้อลิขสิทธิ์ซอฟต์แวร์สำหรับพัฒนา แต่ก็ยังมีทางเลือกเล็กน้อย ซึ่งใช้พลังงานเยอะกว่าปกติหน่อย แต่ประหยัดตามลิงค์นี้ครับ

Compiling .NET Compact Framework applications without Visual Studio

ลองไปอ่านดูครับ แต่ ….

อีกทางหนึ่งคือใช้ Visual Studio 2008 Professional Trial version ครับ ผมมีแผ่นที่ได้จาก BarCamp Bangkok Winter 2008 มาลง (ดีนะที่ผมเอามาและยังเก็บไว้) ก็เอามาลงแล้วตามด้วย Windows Mobile 6 Professional and Standard Software Development Kits Refresh และ ActiveSync 4.5 ครับ แค่นี้ก็ได้ครบ

เสร็จแล้วก็ลงทั้งหมดลงไล่ตั้งแต่ Visual Studio, SDL และ ActiveSync ครับ

เสร็จแล้วก็สร้าง Project ตามปกติเลย เลือก Device แล้วก็ SmartDevice Project 

ก็ได้หน้าตามแบบโทรศัพท์เลย คราวนี้ผมก็เขียน App อย่าง่าย ๆ แต่งานนี้ไม่เอา Hello World ;P คราวนี้ผมเอา App บวกเลข Integer ธรรมดาเนี่ยแหละ ง่ายดี

2008-08-11_225359

แล้วก็ลาก Object Control ลงไป

2008-08-11_225337

แล้วก็เขียนโค้ดลงไปตาม Syntax ของ VB.NET ที่ผมคุ้นเคย

เสร็จแล้วก็ build และทดสอบด้วย emulator บนเครื่องก่อน โดยรวมทำงาน ok

ขั้นต่อไปก็เอาลองใส่ใน HTC Pharos ของผม แล้วก็ทำงานตามภาพด้านล่างครับ บวกเลขได้ดั่งใจนึก ;P

P1080207

ทั้งหมดนี่ลง App บนเครื่อง ThinkPad R40 ตัวเก่าใช้เวลาทั้งหมดชั่วโมงกว่า -_-’ แต่เขียน App ตัวนี้ 5 นาทีเสร็จ

โดยรวมเป็นการทดสอบว่า Syntax VB.NET ที่เราคุ้นเคยทำงานได้ไหม และลองดูว่า การเขียน App บน Windows Mobile นี่มันยากหรือเปล่า ลองเล่น ๆ ดู ถ้ามี idea เราคงได้เจอกัน ;P

แล้วเจอกันใหม่ครับ ;)

Slide : PHP 5 OOP By Ilia Alshanetsky

ไม่มีอะไรมากสำหรับ entry นี้ พอดีว่าเจอจาก Scribd เลยขอเอามาเปะแล้วกันครับ ;)

เป็น Slide จากงาน International PHP Conference 2005 ครับผม

โดยจากที่นั่งอ่าน นี่อธิบายได้ดีมากเลยหล่ะ โดยมีส่วนเปรียบเทียบกับของเก่าอย่าง PHP 4 แล้วยังบอกอีกด้วยว่า การใช้รูปแบบเก่า ๆ จะเกิดอะไรขึ้นบ้าง ถือว่าละเอียดมาก ๆ Slide นึงเลยครับ มีไฟล์เสียงด้่วยนะครับ ลองเข้าไปฟังต่อใน Scribd เอาแล้วกันครับ ;P

Read this document on Scribd: PHP 5 OO

การใช้ Object ใน PHP 4 กับ 5 ต่างกันยังไง ? (ภาค 1)

การ Initialize Object เพื่อให้ได้ Object ใน PHP 4 นั้นจะเป็นการ Pass-by-Value แต่ใน PHP 5 จะเป็นการ Pass-by-Reference แทน จากโค้ดตัวอย่างด้านล่างนี้

PHP:
  1. class userClass {
  2.     var $data = 'Hello';
  3.     function talk() {
  4.         echo $this->getData();
  5.     }
  6.     function setData($val){
  7.         $this->data = $val;
  8.     }
  9.     function getData(){
  10.         return $this->data;
  11.     }
  12. }

ทำการ Initialize Object โดยกำหนดชื่อ Reference-Name ว่า $obj1

PHP:
  1. // PHP 5
  2. // Assigned-by-Value Format
  3. // Override operation with Assigned-by-Reference
  4. $obj1 = new userClass();
  5.  
  6. // PHP 4
  7. // Assigned-by-Value Format
  8. // Used more memory
  9. $obj1 = new userClass();
  10.  
  11. // PHP 4 same way with PHP 5
  12. // Assigned-by-Reference Format
  13. // E_STRIC Error in PHP 5 and Removed in PHP 6
  14. $obj1 =& new userClass();

CODE:
  1. $obj1 --------> [OBJECT DATA]

ในการ Initialize Object ใน PHP 4 นั้น ถ้าใช้แบบทั่วไปใช้ใช้กันคือแบบ Assigned-by-Value นั้น Object ที่ถูกสร้างขึ้นมาตอน Initialize แล้วถูก copy (clone) ไปยังตัวแปรที่เราสร้างขึ้นมา ซึ่งการทำแบบนี้จะเสีย memory เพิ่มขึ้น แต่ถ้าใช้การ Initialize Object แบบ Reference กับตัวแปร object แทนการ copy (clone) ข้อมูลใส่ตัวแปรนั้น โดยต้องใช้การทำ Assigned-by-Reference แทนแบบ Assigned-by-Value โดยที่ Initialize Object เพื่อสร้าง Object จะมีการสร้างบนหน่วยความจำ แล้วมีตัวแปรไป Reference มันเพื่ออ้างอิงค่าแทน

แต่ใน PHP 5 นั้นการ Initialize Object ก็ใช้รูปแบบ Assigned-by-Value ไปเลย แบบเดียวกับ Java ซะ แต่ผลก็จะเป็นการอ้างอิงแบบ Assigned-by-Reference ไปเลยในตัว ซึ่งการทำแบบนี้นั้นรวมไปถึงการทำ Assign-Value, Return-Value และการ Pass-Parameter ด้วย

เมื่อเรานำไปใช้ตามตัวอย่างด้านล่างนี้

PHP:
  1. $obj1->talk();
  2.  
  3. $obj2 = $obj1;
  4.  
  5. $obj1->talk();
  6.  
  7. $obj2->setData("Hi");
  8.  
  9. $obj1->talk();

ก็จะได้ผลของ PHP 5 คือ

CODE:
  1. Hello
  2. Hi

โดยการทำงานนั้น $obj1 นั้นจะเรียก Method talk มา แล้วทำการ Assigned-by-Reference ให้กับ $obj2 ทำให้ต่อไปเมื่อใช้งาน $obj2 ก็จะเหมือนกับใช้ $obj1 นั้นเอง (ทั้งการแก้ไข และเรียกใช้) เพราะตัวแปรทั้งสองตัว มันอ้างอิง Memory Address เดียวกัน

CODE:
  1. $obj1 --------> [OBJECT DATA]
  2.           |
  3. $obj2 ----|

ส่วน PHP 4 คือ

CODE:
  1. Hello
  2. Hello

โดยการทำงานนั้น $obj1 นั้นจะเรียก method talk มา แล้วทำการ Assigned-by-Value หรือเรียกว่า clone ให้กับ $obj2 ทำให้ $obj2 นั้นมีค่าเหมือนกับ $obj1 เพียงแต่ถ้ามีการแก้ไขค่าที่ $obj2 จะไม่มีผลกระทบกับ $obj1 เลย

CODE:
  1. $obj1 --------> [OBJECT DATA]
  2.          
  3. $obj2 --------> [OBJECT DATA]

แต่ถ้าเราต้องการ copy (clone) ค่า ใน PHP 5 ได้มี keyword เพิ่มขึ้นมาชื่อ clone ครับ

โดยเปลี่ยนการ Assigned-by-Value เพียงเล็กน้อยโดยเพิ่ม keyword ไปด้านหลังเครื่องหมาย Assigned (=) ได้ตามนี้

PHP:
  1. $obj2 = clone $obj1;

เมื่อทำแบบนี้ด้านบนก็จะเป็นการ copy (clone) ค่าให้กับอีกตัวแปรนึงให้มันไป Reference กับ Objet ที่ถูก clone ไปอีกก้อนนึงแบบเดียวกับ Assigned-by-Value แบบ PHP 4 นั้นเอง

CODE:
  1. $obj1 --------> [OBJECT DATA]
  2.          
  3. $obj2 --------> [OBJECT DATA]

จากการทำงานด้านบนจะเห็นว่าใน PHP 5 นั้นการ Pass-Parameter, Initialize Object, Assign-Value และ Return-Value นั้นจะส่งแค่ค่าของ Reference-Address ออกไปเท่านั้น ซึ่งเป็นผลทำให้ใช้ Method Chaining ไปได้เลยในตัว

ต่อมาผมทำการเพิ่ม Method เข้าไปอีก 1 ตัวเพื่อทำสอบการทำ Method Chaining

PHP:
  1. class userClass {
  2.     var $data = 'Hello';
  3.     function talk() {
  4.         echo $this->getData();
  5.     }
  6.     function setData($val){
  7.         $this->data = $val;
  8.     }
  9.     function getData(){
  10.         return $this->data;
  11.     }
  12.     function chaining() {
  13.         return $this;
  14.     }
  15. }

โดยการ Return ที่ตัว keyword $this นี้ออกไป การ Return-Value นี้เป็นการ Return ที่เอา Reference Address ออกมาไปส่วนต่อให้อ้างอิงกับ Address ของ Object นั้น ๆ ทำให้ใช้งาน Method ของ Object นี้ต่อไปได้เรื่อย ๆ ครับ ดังตัวอย่างด้านล่างครับ

PHP:
  1. $obj1->chaining()->talk();

ก็จะได้ผลดังนี้ครับ

CODE:
  1. Hello
  2. Hi
  3. Hi

ต่อมาเรามาทดสอบเรื่องการ Pass-Parameter โดยทดสอบว่ามันจะ Pass-by-Reference ถึงแม้ว่าจะ กำหนด Parameter ที่ Pass-by-Value ไว้ก็ตามที โดยในโค้ดด้านล่างนี้ ได้เพิ่ม Method prototypeMod เข้าไป โดยส่ง Object และ Value ลงไปเพื่อ Assign ค่าให้กับ Object ตัวที่ Pass-Parameter ลงไป

PHP:
  1. class userClass {
  2.     var $data = 'Hello';
  3.     function talk() {
  4.         echo $this->getData();
  5.     }
  6.     function setData($val){
  7.         $this->data = $val;
  8.     }
  9.     function getData(){
  10.         return $this->data;
  11.     }
  12.     function chaining() {
  13.         return $this;
  14.     }
  15.     function prototypeMod($obj, $val) {
  16.         $obj->setData($val);
  17.         return $obj;
  18.     }
  19. }

แล้วเมื่อผมนำไปใช้ก็ทำการส่ง $obj2 ลงไปแล้วตั้งค่า Hello ลงไป แล้วทำ Chaining เรียก talk ของ $obj2 ออกมาใช้งาน แล้วก็เรียก talk ของ $obj1 ด้วยเช่นกั

PHP:
  1. $obj1->prototypeMod($obj2, 'Hello')->talk();
  2.  
  3. $obj1->talk();

ผลที่ได้คือ

CODE:
  1. Hello
  2. Hello

จะเห็นว่าถ้าเราส่ง Object ด้วยการ Pass-Parameter เข้าไปใน function หรือ method จะเป็นการ Pass-by-Reference ครับ ซึ่งต้องระวังอย่างมาถ้า upgrade จาก PHP 4 มา 5 ครับ ที่บางครั้งค่าที่ได้อาจจะแตกต่างในช่วงการทำงานครับ ต้องระวังเรื่องของ logic-error ให้ดีครับ ซึ่งถ้าคนที่ไม่เคยเขียน Programming Language พวก Java, C# หรือ VB.NET มาก่อนอาจจะงง เพราะ PHP 4 นั้น Object จะถูกเรียกว่า "objects are not any longer just 'improved arrays'." ซึ่งใน PHP 5 นั้นได้ลบแนวคิดนี้ออกไป ให้เป็นแบบเดียวกับภาษา Object Oriented Programming อื่น ๆ ครับ

ดังนั้นต่อไปถ้าใช้ใน PHP 5 ไม่ต้องทำการ Initialize Object แบบ Assigned-by-Reference อีกต่อไปครับ และการทำ Assigned-by-Reference ในการ Initialize Object จะใช้งานไม่ได้แล้วใน PHP 6 ด้วย โดยใน PHP 5 จะขึ้น E_STRIC Error Message ด้วยเช่นกันครับ

ปล. entry นี้เล่นซะเหนื่อยเพราะว่านั่งแก้ format ของ code ซะเมามันกับนั่งไล่ keyword ต่าง ๆ ให้มันตรงกับที่เค้าใช้กัน เพราะส่วนตัวเองก็ไม่แม่นพวก technical term บางตัวว่าใช้คำว่าอะไรเท่าไหร่ เพราะคืนอาจารย์ไปบ้างแล้ว -_-' (แต่รู้ว่ามันคืออะไรนะ เพียงแต่ใช้คำไม่ถูก) ถ้าส่วนไหนไม่เข้าใจก็โพสความคิดเห็นถามเพิ่มเติมกันมาได้นะครับ

เพิ่มเติม (2/6/2551 18:00)

In PHP 5 there is a new Object Model. PHP's handling of objects has been completely rewritten, allowing for better performance and more features. In previous versions of PHP, objects were handled like primitive types (for instance integers and strings). The drawback of this method was that semantically the whole object was copied when a variable was assigned, or pass as a parameter to a method. In the new approach, objects are referenced by handle, and not by value (one can think of a handle as an object's identifier).

และใน Zend Engine 2 ที่เป็นแกนหลักของ PHP 5 ได้ให้คำจำกัดความไว้ว่า "In the new approach, objects are referenced by handle, and not by value"

อ้างอิงจาก

ใช้ Zend Debugger ยังไง (จาก Youtube)

มีคนถามผมมาทันควันหลังจากโพส blog entry ตั้งค่า Zend Optimizer กับ Zend Debugger ให้ทำงานพร้อมกันได้

งั้นผมก็ขออธิบานสักเล็กน้อยแล้วก็ดูว่ามันทำงานยังไงดีกว่า

Zend Debugger ระบบพื้นฐานในการทำ remote debugging หรือจะแปรให้มันเป็นไทยแท้ ๆ ก็คือ debug ตัว code ของ php แบบ realtime ในระหว่างการทำงานเลย โดยปกติแล้วเนี่ย เราจะใช้ความสามารถนี้ได้เมื่อลง Zend Core หรือ Zend Platform เท่านั้น แต่คราวนี้ไม่ต้องแหละ เมื่อนานมาแล้ว (จริง ๆ จะใช้ว่าเร็ว ๆ นี้ก็กะไรอยู่ เพราะว่ามันก็ไม่เร็ว ๆ นี้)  Zend ได้ปล่อยแยกออกมาต่างหากในชื่อ Zend Debugger หรือ server-debugger โดยปล่อยมาพร้อมกับ PDT (PHP Development Tools) หรือก็คือ IDE ของ PHP ที่ยกความสามารถของ Zend Studio ตัว IDE เสียเงินของ Zend ไปใส่ใน Eclipse IDE นั้นเอง โดยเป็นความร่วมมือของ Zend กับ Eclipse นั้นเองครับ โดยเมื่อไม่นานนี้ (ของจริง) Zend ก็ออก Zend Studio for Eclipse ที่เป็น version เสียเงินออกมาในคร่าต่อมาเหมือนกัน แต่ของดี ๆ ก็ยังคงอยู่ครับ โหลดได้ที่ http://downloads.zend.com/pdt/server-debugger/ ครับผม โดยผลจากการที่ปล่อยมาพร้อม ๆ กับ PDT ทำให้ PDT สามารถทำ remote debugging ได้โดยตรงเลย และฟรีด้วย เพราะ PDT เป็นตัว open-source อยู่ครับ หาโหลดได้ในเว็บ zend ลองหา ๆ ดูครับ

โดยวิธีการใช้งาน ผมไม่ขออธิบายดีกว่า ดู VDO เอาแทนน่าจะเข้าใจง่ายกว่ามั้งครับ ;P

eclipse php debugging with zend debugger

Eclipse PDT and Zend Debuger in action

PHP Debugger

ตั้งค่า Zend Optimizer กับ Zend Debugger ให้ทำงานพร้อมกันได้

หลายคนที่ทำงานด้าน Web Dev ที่พัฒนาบน PHP มักจะต้องใช้ Zend Debugger ไม่มากก็น้อย โดยเอาไว้ใช้ในการ Debug แบบ Realtime ในระหว่างที่ PHP กำลังทำงานอยู่ เพื่อเก็บรายละเอียดด้าน Performance ต่าง ๆ ที่ เช่น

  • php ไฟล์ที่เราเขียนอยู่มีการ access พวก include หรือ require ไฟล์ต่าง ๆ กี่ไฟล์
  • มีการเรียกใช้ object, class, method หรือ function อะไรบ้าง ไล่เรียงตาม flow ต่าง ๆ
  • ตรวจสอบว่า method หรือ function ในแต่ละตัวนั้นทำงานนานแค่ไหน เพื่อเช็ด และตรวจสอบด้านความเร็วในการทำงาน
  • เช็คพวก warning, strict, notice message ระหว่างการทำงานโดยไม่ต้องเขียน error_reporting ให้เขียนไฟล์ให้เสียเวลาทำงาน

ส่วน Zend Optimizer นี่ผมใส่ลงไปเพื่อเพิ่มความเร็วในการทำงานของ PHP เวลาทำงาน แต่มัน debug ไม่ได้ครับ แต่ทำให้ script ของเราทำงานเร็วขึ้น 10 - 30% ตามที่ Zend ได้บอกไว้ในเว็บ (แต่มันก็เร็วขึ้นจริง ๆ แหละ)

โดยทั้งสองตัวนี้มีวิธีการลงที่คล้าย ๆ กัน (เรื่องวิธีการลงหาได้ทั่วไปตาม internet ทั้ง Debugger กับ Optimizer ไม่ขออธิบายแล้วกัน) ถ้าไปสืบหาตามปกติ การตั้งค่าจะทับซ้อนกันครับ ทำให้ต้องเลือกอย่างใดอย่างหนึ่งตอนใช้งาน แต่ว่าก็มีหนทางทำให้มันทำงานได้เหมือนกันครับ

โดยเราตั้งค่าพื้นฐานโดยใช้ Optimizer ยืนพื้นไปก่อนเลย โดยชื่อไฟล์ต่าง ๆ ที่บอกมาเป็นตัว library ที่ทำงานบน Windows ครับ

CODE:
  1. [Zend]
  2. zend_extension_ts="c:/path_to_zend_optimizer/lib/ZendExtensionManager.dll"
  3. zend_extension_manager.optimizer_ts="c:/path_to_zend_optimizer/lib/Optimizer"

โดยใน c:/path_to_zend_optimizer/lib/Optimizer นั้น จะมี directory เรียงรายตาม version ต่าง ๆ ของ php ครับ โดยผมใช้ PHP 5.2.6 ครับ ก็จะใช้ directory php-5.2.x ครับ ในนั้นก็จะมีไฟล์ชื่อ ZendOptimizer.dll (ไฟล์ที่อ้างอิงคือ Windows นะครับ)

ให้เอาไฟล์ ZendDebugger.dll ที่โหลดมาจากเว็บ zend เอามาใส่ โดยเอาไฟล์จาก directory ใน .zip ไฟล์ใส่ให้ตรงกับ version ใน directory ปลายทางด้วย

แล้วตั้งค่า ต่อไปด้วยคำสั่ง

CODE:
  1. [Zend]
  2. zend_extension_ts="c:/path_to_zend_optimizer/lib/ZendExtensionManager.dll"
  3. zend_extension_manager.optimizer_ts="c:/path_to_zend_optimizer/lib/Optimizer"
  4.  
  5. [Debugger]
  6. zend_extension_manager.debug_server_ts="c:/path_to_zend_optimizer/lib/Optimizer"
  7. zend_debugger.allow_hosts=127.0.0.1/32
  8. zend_debugger.allow_tunnel=127.0.0.1/32
  9. zend_debugger.expose_remotely=allowed_hosts
  10. zend_debugger.connector_port=10001

แล้ว restart ตัว Web Server ก็จะสามารถทำให้ Zend Optimizer กับ Zend Debugger ทำงานได้พร้อม ๆ กันแล้วหล่ะครับ

โดย phpinfo แล้วจะได้ตามวงสี่เหลี่ยมสีแดงนี้ครับ

2008-05-19_211436

อ้างอิงจาก How to allow Zend Optimizer and Zend Debugger coexist