วิธีการดึง Feed ของ SMF เฉพาะ New Topics

April 22nd, 2010

ต้องยอมรับว่าปัจจุบัน SMF น่าจะเป็น Forum ที่ได้รับความนิยมมากที่สุด (แต่ไม่ได้หายความว่าดีที่สุดนะ) ทำอันดับใน Search Engine ก็เก่ง
และมี Feed ในตัวก่อนเจ้าไหนๆ เช่น PhpBB เป็นต้น

โดย default ของ SMF นั้น Feed ของมัน ไม่ว่าจะรวมกระทู้ทั้งเว็บ หรือเฉพาะบางห้องที่กำหนดก็ตาม มันจะแสดง Recent Posts ทั้งหมด นั้นรวมไปถึง New Topics และ New Reply ด้วย

ซึ่งบางครั้งน่ารำคาญมากกับกระทู้ประเภท “มีของมแจกครับ ทิ้งเมลไว้เลย” เพราะ Reply จะล้นหลามมาก ส่งผลได้ Feed ไร้สาระเยอะ

วิธีแก้ก็แค่เพิ่ม parameter เข้าไปที่ Default Feed URL ดังข้างล่าง

http://www.simplemachines.org/community/index.php?type=rss;action=.xml;sa=news

เพียงเท่านี้เราก็จะดึง Feed ของ SMF เฉพาะ New Topics แล้ว

แกปัญหา .htaccess ของ Drupal กับ URL แบบ User Directory

April 21st, 2010

สำหรับใครที่ใช้ Drupal มาคงทราบว่ามันฉลาดมาก

ไม่ว่าเราจะย้าย directory ไปไว้ที ่root ของ domain เช่น

http://192.168.1.10

หรือจะใน subdirectory เช่น

http://192.168.1.10/drupal

เราก็ไม่ต้องแก้ไข config อะไรเลย มันรู้ของมันเอง!!

แต่มาวันนี้ผมเจอ case ประหลาดครับ

พอดี domain ของลูกค้ายังไม่พร้อม production URL ก็เลยเป็น direct URL แบบนี้ชั่วคราว

http://192.168.1.10/~myuser

ปรากฏว่าหน้าแรกเข้าได้ปกติ แต่หน้าอื่นเข้าไม่ได้เลย เจอ 404 ตลอด – -!!

ตอนแรกคิดว่าสงสัย .htaccess ของ host มันชนกับของ Drupal แน่เลย

จึงลองถาม เทพ Drupal ได้วิธีแก้ง่ายๆมาคือแก้ .htaccess ของ Drupal ดังนี้

RewriteBase /~myuser

โดยปกติบรรทัด RewriteBase จะ comment เอาไว้ แล้วโดยทั่วไปเราก็ไม่ต้อง uncomment มันด้วย

แต่ Case นี้ที่ต้องเพิ้ม RewriteBase เนื่องจากว่า .htaccess ของ host มีการกำหนด RewiteRule สำหรับ User Directory นั่นเอง

ผมเข้าใจว่า ถึงแม้ไม่ใช่ User Directory แต่หากเราวาง Drupal ไว้ใน subdirectory และที่ชั้นบนมี RewiteRule ด้วย ก็คงเจอปัญหาเดียวกัน

You have no events scheduled today.

April 20th, 2010

นานๆเจอวันว่างซะที ขอ Capture รูปไว้ซะหน่อย ฮา…

Finally, Flash will be Dreamweaver for HTML5 Canvas.

April 19th, 2010

คิดเอาไว้แล้วว่ายังไงจุดแข็งของ Adobe ไม่ได้อยู่ที่มาตรฐาน (SWF) แต่อยู่ที่ Tools (Flash/Flex) มากกว่า

สุดท้ายถ้า SWF ถูกมาตรฐานกลางอย่าง HTML5 แซงไป Adobe ก็ยังมีไม้ตายคือ Export จาก Flash เป็น HTML5 ได้อยู่ดี

เหมือนกับ Dreamweaver ที่เป็น Editor สำหรับ HTML/CSS

ที่น่าแปลกใจคือผมไม่คิดว่า Adobe จะออกมาแสดงท่าทีสนับสนุน HTML5 ไวขนาดนี้ (มาพร้อมกับ Flash CS5) ผมนึกว่าจะรอดูท่าทีก่อนว่าถ้านิยมค่อยปล่อยเป็นตัวเสริมอีกที

มองอีกมุมหนึ่ง Adobe คงอ่านเกมแล้วว่า ยังไงคงหยุดกระแส HTML5 ไม่อยู่แน่ๆ เพราะ Google กับ Apple ดันเหลือเกิน ไหนจะ Mozilla อีก

การเข้าแย่งชิงพื้นที่ HTML5 Tools จึงดูน่าสนใจและน่าจะทำกำไรได้มากกว่าการแข่งด้วย Platform/Format (SWF vs HTML5)

http://www.9to5mac.com/Flash-html5-canvas-35409730

บันทึกการย้าย Web Hosting ครั้งยิ่งใหญ่ที่สุดในชีวิต

January 5th, 2010

สองสามวันมานี้อดหลับอดนอนเพราะเรื่องการย้าย Web Hosting นี่แหละครับ ขอจดไว้หน่อยว่าทำอะไรไปบ้าง (ผม admin มือสมัครเล่นครับ)

- ถ้าเว็บมี maintenance mode จงเปิดมันก่อนเลย

- เปลี่ยน NAME SERVER ทันที เพราะบางที DNS มันก็อัพเดทกันช้าเหลือเกิน

- การ load dump ของ MySQL นั้น ถ้าไม่ใหญ่มากก็ใช้ phpMyAdmin ได้ แต่ถ้าใหญ่มากๆควรใข้ BigDump แทน หรือถ้าจะเอาเป็นเรื่องเป็นราวเลยก็ต้อง MySQLDumper

- เรื่องภาษาไทย ที่ไม่ว่า Programmer/Developer รุ่นไหนๆก็ต้องเจอ ฮา…
ถ้า default charset ของ mysql (ซึ่งส่วนมากจะเป็น utf8) ไม่ได้เป็นตัวเดียวกับที่เราใช้ก็ต้องเพิ่ม code นี้

mysql_query(“SET NAMES tis620″, $connect);

- การ load dump file ที่เป็น tis620 หรือ utf8 ผ่าน BigDump อย่าลืมกำหนด charset ด้วยที่ config ชื่อ $db_connection_charset

- dump file ถ้าเป็น tis620 ตรวจดูให้แน่ใจว่า file save เป็น ANSI แล้ว (ปกติจะเป็น utf8) ไม่งั้น BigDump มันจะอ่านไม่ออก

- ถ้าเป็นไปได้ให้แก้ code ที่เป็น full path แล้วแทนที่ด้วย relative path แทน

- File/Folder Permission ลอกของเก่ามาเลย ใช้ ls -rl ช่วย แล้วดูเฉพาะตัวที่พิเศษๆเช่น 777

- ถ้าย้ายหลายเว็บจงอดทนทำทีละเว็บ ไม่งั้นอาจสับสนได้…

ปัญหาภาษาไทย TIS-620 กับ AJAX

December 23rd, 2009

พอดีเมื่อวานนี้มีเพื่อนถามมาทาง MSN ว่าเว็บมีปัญหาใช้ภาษาไทยกับ AJAX ไม่ได้ คือส่งภาษาไทยไปแล้ว อ่านไม่ออกใน MySQL
ส่วนตัวนั้นมีประสบการณ์เกี่ยวกับปัญหาภาษาไทยมาบ้าง ถึงจะไม่มาก แต่ก็พอจะมั่นใจได้ว่า AJAX ไม่น่ามีปัญหากับภาษาไทย แต่มันไม่ใช่กับกรณีนี้

มาดูกันที่ส่วนประกอบต่างๆกันก่อน

Web Page (TIS-620) + AJAX (TIS-620) <–> PHP(TIS-620) <–> MySQL (TIS-620)

ดูๆจากข้างต้นก็ไม่น่าจะมีปัญหาอะไร

อย่างแรกผมเอา FireBug จับ XHR ดูก่อนเลย เป็น HTTP Post และพบว่าอ่านไทยไม่ออกครับ ผมแปลกใจมากๆ ทั้งๆที่ Header บอกว่า charset เป็น TIS-620
ลองถาม Google ดูจึงพบว่า AJAX มีปัญหากับ TIS-620 จริงๆด้วย เพราะมันส่งเป็น UTF-8 (จริงๆมีวิธีเปลี่ยนแต่ค่อนข้างยุ่งยาก)

ดังนั้นภาพข้างบนจึงผิด จริงๆต้องเป็นแบบนี้

Web Page (TIS-620) + AJAX (UTF-8) <–> PHP(UTF-8) <–> MySQL (TIS-620)

และสิ่งที่เราต้องแก้ก็คือแปลง UTF-8 ให้เป็น TIS-620 ที่ Server Side Script ซึ่งในที่นี้คือ PHP โดยการเพิ่ม code นี้เพื่อแปลงข้อความก่อน save ลง MySQL

$msg= iconv(‘UTF-8′, ‘TIS-620′, $msg);

สรุป

- ปัญหานี้จะเกิดต่อเมื่อใช้ Post Method เพราะส่วน Body จะถูก Encode เป็น UTF-8 ส่วน Get ไม่มีปัญหาเพราะข้อความต่อท้ายไปกับ URL แทน

- ถ้าไม่มีความจำเป็นต้องใช้ TIS-620 จริงๆ ผมขอแนะนำเหมือนทุกครั้ง คือใช้ UTF-8 จะดีกว่า ใช้ได้กับหลายภาษา ไม่ใช่แค่ภาษาไทย และ open source script ส่วนใหญ่เขียนมา support UTF-8 อยู่แล้ว

Playing with Google App Engine (Java API)

December 15th, 2009

บันทึกไว้ซะหน่อยว่าเล่นอะไรไปกับ Google App Engine ในส่วนของ Java API บ้าง

1. URL Fetch Service

มีข้อจำกัดว่า timeout นั้นสูงสุดที่ 10 seconds และต้อง set ค่าทุกครั้ง เพราะ default คือ 5 seconds

2. JDO

รายละเอียดเยอะ แต่เอกสารของ Google ทำได้ดีในระดับหนึ่ง และดูเหมือนว่า Google แนะนำให้ใช้ JDO มากกว่า JPA

3. Local Admin Console

ถ้าอยากดูว่าใน Local Datastore มีอะไรอยู่บ้างให้เปิดไปที่ http://localhost:8080/_ah/admin โดยสามารถแสดงรายการ กับลบ entities ได้เท่านั้น ไม่สามารถ เพิ่ม, แก้ไข, หรือแม้แต่ search ได้

ถ้าอยากได้ความสามารถเพิ่มต้องลง 3rd party ที่ชื่อ gae-data-viewer

ส่วนไฟล์จะเก็บอยู่ที่ \war\WEB-INF\appengine-generated\local_db.bin ถ้าบางครั้งเกิดอาการ start web app ไม่ได้เพราะ datastore พัง ให้ delete ไฟล์นี้ทิ้งซะ


กทพ. เลื่อนเปิดให้บริการระบบเก็บค่าผ่านทางอัตโนมัติ (Easy Pass) ไปต้นปี 2553

November 16th, 2009

ระบบก็ไม่ได้คิดค้นพัฒนาอะไรขึ้นมาใหม่ ซื้อเทคโนโลยีเขามา implement ทั้งนั้น

ยังไม่สามารถทำให้ตรงตามกำหนดเวลาได้ สุดท้ายก็อ้างขัดข้องทางเทคนิคอีกเช่นเคย

ถ้าไม่พร้อมแล้วคุณจะรีบเก็บเงินประชาชนไปดองเอาไว้ทำไมมิทราบครับ…

16112009028

How to implement Licensing in Flex and AIR

November 4th, 2009

There are a lot of questions about how to implement Licensing in Flex and AIR.

I cannot explain you 100% how it works but below is list of libraries/functions for my solution.

  1. codegenas3 – AS3 library for generating system/machine id.
  2. as3crypto – AS3 library for encryption/decryption.
  3. Local Shared Object – AS3 Class for storing license information (similar to Windows Registry).
  4. Mcrypt – PHP functions for encryption/decryption.

Liverpool Bounce Back!

October 26th, 2009

Liverpool Bounce Back