Project “pushshout” Started

pushshout เป็น shoutbox ที่ใช้ memcached เข้ามาช่วยลดโหลดให้กับระบบ DBMS อย่าง MySQL โดยพัฒนาต่อจาก Shoutbox ที่ใช้ jQuery (www.yensdesign.com) พัฒนาโดย Adrian "yEnS" Mato Gondelle & Ivan Guardado Castro ซึ่งทำออกมาได้ดี แต่ว่ายังไม่พอ ผมเลยเอามาทำต่อ และเอามาใช้ร่วมกับ SMF Forum ซะเลย โดยทำงานผ่าน SMF API อีกที โดยที่เพิ่มก็มีตามรายการด้านล่างนี้ครับ

  • Improved code
  • Counting display (with 30 secord countdown)
  • Limit countdown (10 time)
  • Used memcached for cache data
  • Plugin to SMF (use smf_api.php, SMF 1.1.x API, http://download.simplemachines.org/?tools)
  • Link to profile in SMF
  • Store Name and User ID for SMF to database
  • Lock for SMF user only (No Guest)

ตอนนี้ออก release ตัวนึงป็น Production ที่ใช้เป็น Shoutbox ใน ThaiThinkPad.com ไปแล้วครับ เข้าไปดูได้ที่ http://code.google.com/p/pushshout/ ครับ ตอนนี้ revision 2 อยู่ กำลังปรับปรุงส่วนที่ hardcode และแตกเป็น lib file เพื่อพัฒนาให้ง่ายขึ้น แต่พยายามให้เบาที่สุดมี state/declare น้อยที่สุดเพื่อความเร็วครับ เพราะ shoutbox ต้องทำให้เร็วมากๆ ไม่มีมาสนอะไรมากมาย และคาดว่าต่อไปจะใช้ memcached + sqlite แทน MySQL เพื่อลดโหลดหลายๆ อย่างลง

ส่วนเมื่อปรับ core เสร็จไม่น่าเกิน revision ที่ 10 คงมี feature เรื่องสีของตัวอักษรใน revision ที่ 15 และ emoticon ใน revision ที่ 20 ครับ ส่วน reply คาดว่าจะก่อน revision ที่ 10 ซะมั้ง มีคนอยากได้เยอะ

ลง Imagick บน PHP 5.2.8 ที่ทำงานบน Windows

ช่วงนี้แม้จะเซง หลาย ๆ เรื่องแต่ก็ต้องทำงาน ;P แต่ว่าเมื่อมีปัญหาเราก็ต้องแก้ไป วันนี้เลยเอามาโน๊ตไว้สักหน่อย

การลง Imagick เนี่ย บน Linux เนี่ยง่ายโคตร ๆ ยิ่งบน Ubuntu ยิ่งง่ายหนักไปอีก –_-‘ ประมาณว่า $ sudo apt-get แล้วก็นั่งรอ สักพักก็ได้แล้ว

แต่ถ้าเป็นบน Windows เนี่ย ตอน PHP 4 ถ้าให้ง่ายที่สุดก็คือ php_imagick.dll มาลง แต่บน PHP 5.2.+ มันไม่ง่ายแบบนั้น –_-‘ เพราะไฟล์ php_imagick มันไม่อยู่ใน PECL/Imagick สำหรับ Windows ให้โหลดได้ตามปรกติ (unofficial builds) ต้องหากันทั่ว Internet แต่พอเจอวิธีทำแล้วก็ต้องเอามาบันทึกไว้สักหน่อย

  1. โหลด ImageMagick-6.5.0-0-Q16-windows-dll.exe ที่ http://www.imagemagick.org/script/binary-releases.php#windows
  2. เสร็จแล้วไปโหลดตัว dynamic link (dll) ที่
    The last build date: 09.07.2008
    – Imagick 2.2.1-dev / PHP 5.2 / ImageMagick 6.4.1-Q8 / dynamic – php_imagick_dyn-Q8.dll
    – Imagick 2.2.1-dev / PHP 5.2 / ImageMagick 6.4.1-Q16 / dynamic – php_imagick_dyn-Q16.dll
    – Imagick 2.2.1-dev / PHP 5.2 / ImageMagick 6.4.1-Q8 / static – php_imagick_st-Q8.dll
    – Imagick 2.2.1-dev / PHP 5.2 / ImageMagick 6.4.1-Q16 / static – php_imagick_st-Q16.dll
  3. โดยสำหรับผมโหลด php_imagick_dyn-Q16.dll มาแล้วเอาไปไว้ใน directory “ext” ของ PHP
  4. Rename ชื่อเป็น php_imagick.dll
  5. เสร็จแล้วเปิดไฟล์ php.ini แล้วเพิ่ม
    extension=php_imagick.dll
  6. แล้วทำการ Restart ตัว Apache Services
  7. เขียนไฟล์ PHP สักตัวด้วย <?php phpinfo(); ?> แล้วก็ดูว่า imagick มันโหลดขึ้นมาหรือเปล่า (ถ้าทำถึงตรงนี้น่าจะเห็นแล้ว)

image

อ้างอิงข้อมูลบางส่วนจาก

http://valokuva.org/?page_id=50

แก้ปัญหา 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