แก้ปัญหา PHP-ExcelReader ใน 64Bit system

ตัว PHP-ExcelReader เป็น PHP Class ที่นำมาใช้อ่านไฟล์ Excel 97-2003 ได้ดีมากตัวนึง และแม้จะไม่ได้ update มาตั้งแต่ปี 2007 ก็ยังทำงานได้ดีบน PHP 5.2.8 ซึ่งบนระบบ Development Environment นั้นไม่มีปัญหา ซึ่งบนเครื่องผมเป็น Core 2 Duo ที่ทำงานบน Windows XP Pro 32bit ซึ่งทำงานได้ปรกติดี แต่แล้วพอเอาขึ้น Production Environment มันก็เกิดปัญหาขึ้นที่ function GetInt4d ซึ่งผมควานหาปัญหาและไล่ว่ามันเกิดจากตัว code เองหรือเปล่า หรือว่ามีปัญหากับ function พื้นฐานต่าง ๆ จาก Extension ของ PHP เองหรือเปล่า ซึ่งผมก็ว่าไม่ใช่ และพอเอาไปทำงานบน Production ตัวนึงที่เป็น 32bit CPU กลับไม่มีปัญหา ซึ่งลง Extension เหมือน ๆ กันด้วย –_-‘

แต่สุดท้ายผมก็ไล่ไปเจอสิ่งที่ผมคิดว่ามันเป็นเรื่องที่ทำให้ผม งง แต่มันก็เกิดขึ้นก็คือ [ 1487371 ] AMD64 dead loop fix สรุปง่าย ๆ ว่าเป็นปัญหาของ bitshift ใน OS 64bit ที่ bit ตัวแรกจะได้ค่าไม่ตรงกับใน OS 32bit ทำให้เกิดความผิดพลาด

ตัว error ที่พบคือ

Notice: Uninitialized string offset: -138 in /home/www/public_html/excel/oleread.inc on line 27
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 71 bytes) in /home/www/public_html/excel/oleread.inc on line 133

ซึ่งแก้ไขได้ง่าย ๆ ด้วยการเปลี่ยนแปลง function GetInt4d ใหม่ตามด้านล่าง ก็สามารถทำงานบน OS 64bit ได้แล้ว

แก้ไขในไฟล์ oleread.inc

function GetInt4d($data, $pos) {
    // Hacked by Andreas Rehm 2006 to ensure correct result of the 24 block on 32 and 64bit systems
    $_or_24 = ord($data[$pos+3]);
    if ($_or_24>=128) $_ord_24 = -abs((256-$_or_24) << 24);
    else $_ord_24 = ($_or_24&127) << 24;

    return ord($data[$pos]) | (ord($data[$pos+1]) << 8) | (ord($data[$pos+2]) << 16) | $_ord_24;
}

 

แก้ org.eclipse.php.ui.PHPCompletionProposalComputer มีปัญหาใน PDT 2.0

จาก Re: org.eclipse.php.ui.PHPCompletionProposalComputer crash ซึ่งผมก็เจออยู่ และใน [[Tools] PDT-] [performance]Code Assist takes too long ก็มีคำตอบเรื่องนี้แล้ว อยู่ท้าย ๆ เลย

I’ve prepared project that constists of 5 huge PHP frameworks (4130 files), and
I can’t re-create this issue while
working on this project. Please verify the following:

1. You are using the latest nightly build of PDT.
2. "PHP -> Editor -> Code Assist" preferences are set to default.

ซึ่งดูแล้วน่าจะเกิดจาก Options ตัว Show variables from other files ที่มันจะ scan ตัวแปรทั้ง project แบบ JIT ทำให้ถ้า project ที่มีไฟล์มาก ๆ รวมถึง PHP Include Path ด้วย อย่างของผมมี Zend Framework อยู่ใน PHP Include Path อยู่ซึ่งมีไฟล์ 1,300 กว่าไฟล์ มันเลยค้างไปสักพักก่อนจะ completion ตัวแปรออกมาได้ เอาตัวเลือกนี้ออกก็น่าจะหายแหละ

image

 

MySQL AB เปิดตัว MySQL 5.1 Generally Available (GA) แล้ว

เมื่อวันที่ 1 ธันวาคม 2551 ที่ผ่านมา MySQL AB ได้ทำการประกาศสถานะ Generally Available (GA) ให้กับ  MySQL 5.1 เป็นที่เรียบร้อยแล้ว โดยที่ในรุ่นนี้จะมีความสามารถดังต่อไปนี้

  • Table and Index Partitioning
    การแบ่งแยกการเก็บข้อมูลในตารางไว้ได้หลาย ๆ ที่ ตามเงื่อนไขที่กำหนด(different portions of a table are stored as separate tables in different locations) ซึ่งตัวนี้เป็นสิ่งที่หลาย ๆ คนรอคอย เพราะช่วยกระจายตัวข้อมูลใน table ที่ใช้อยู่บ่อย ๆ ไปไว้ใน Hard Drive คนละตัวกัน ซึ่งช่วยให้กระจายการทำงานของ I/O ได้ แต่ก็ต้องแลกกับการ Backup ที่ยากขึ้นด้วยเช่นกัน
  • Row-Based and Hybrid Replication
    การทำ replication บน MySQL ก่อนหน้านี้จะเป็น statement-based replication คือการเก็บ statement ใน bin-log แล้วส่งจาก master ไปยัง slave ให้ slave ทำงานตามไปด้วย แต่ row-based replication เป็นการเก็บ statement ที่จะส่งจาก master ไป slave ชื่อที่เรียกว่า event ลงใน bin-log แล้วส่งเฉพาะส่วนที่เป็นผลของข้อมูลในตารางนั้น ๆ ไปให้กับ slave แทน (ส่วนที่ถูกแก้ไขนั้นแหละ) ทำให้ slave ไม่ต้องทำงานตามที่ master ไปเสียทุกอย่าง ทำเพียงแต่รับผลการเปลี่ยนแปลงจาก master เท่านั้น แต่ก็สามารถเลือกทำแบบ mixed ได้เช่นกัน
  • Plugin API and Pluggable storage engine API
    เขียน Plugin เพิ่มได้ รู้สึกว่าตอนนี้ตัว plugin full-text parsers ก็เป็นตัวอย่างหนึ่งในการสร้าง Plugin API เหมาะมากในอนาคต ที่จะระบบตัดคำไทยใน MySQL เพื่อทำ full-text search (ผมไม่แน่ใจว่ามีใครทำไปแล้วหรือยัง)
  • Event scheduler
    เป็นการตั้ง schedule job แบบเดียวกับการทำ crontab (cron job) ใน UNIX นั้นเอง แต่อันนี้ทำในระดับ DBMS เลยไม่ต้องมี App ตัวอื่น ๆ มามีส่วนเกี่ยวข้องเหมาะสำหรับทำ report table หรือ log table ที่ต้องมีการ clear ข้อมูลเป็นประจำ
  • Server log tables
  • Upgrade program
  • MySQL Cluster
    ใน MySQL 5.1 ได้ทำการแยกสายการพัฒนาออกมาเป็นอีกรุ่นหนึ่งของ MySQL ไปเลย
  • Backup of tablespaces
  • Improvements to INFORMATION_SCHEMA
  • XML functions with XPath support
  • Load emulator

อ้างอิงจาก http://dev.mysql.com/doc/refman/5.1/en/mysql-nutshell.html

ใน MySQL 5.1 ส่วนที่น่าสนใจจริง ๆ คงเป็นเรื่อง Table and Index Partitioning, Row-based replication, Plugin API และ Event Scheduler ที่ช่วยให้การทำงานหลาย ๆ อย่างง่ายขึ้นครับ

ย้อนกลับไปนิดนึง สำหรับบางคนที่ยังไม่รู้เลยว่า MySQL 5.0 มันทำอะไรได้บ้างนั้นตัว MySQL 5.0 นั้นสามารถทำ Stored procedures, Views (แต่ทำ cache ไม่ได้), Cursors, XA transactions และ Triggers

โดยในรุ่นต่อไป MySQL 5.2 แต่จากที่ดู ๆ ไปแล้วเนี่ย คาดว่าจะเป็น 6.0 มากกว่านะ เพราะเจ้า MySQL 5.2 ในเว็บ MySQL AB มันหายไปแล้ว

ซึ่งในรุ่นต่อไปก็คงได้เวลาของ Falcon ซึ่งเป็น Transaction Storage Engine ที่คาดการณ์กันไว้ว่าจะมาแทน InnoDB ที่โดน Oracle ซื้อไป คงต้องดูกันอีกทีว่าเจ้า Falcon จะมีดีแค่ไหน รอดูกันต่อไปครับ

 

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

เป็นคำให้สัมภาษณ์ที่ผมเก็บไว้มานานแล้ว แต่ว่าอยู่ใน 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

Read more