Monday, October 30, 2006

ปัญหาการใช้งาน Drupal หลังลง mod_security

พอดีวันก่อนผมได้ทำการลง mod_security บนเครื่อง Colocated Server ซึ่งใช้ Gentoo
ซึ่งก็คิดว่าคงเรียบร้อย แต่วันนี้เข้าใช้งานเว็ปและต้องโพสท์กระทู้ กลับมีปัญหาคือไม่สามารถ
โพสท์ได้ เลยลองเซ็ค Log ของ apache ดูก็พบ error ตามด้านล่าง

mod_security: Access denied with code 500. Pattern match "multipart/form-data" at HEADER

ผมถึงได้รู้ว่าบาง Rules ของ mod_security เป็นสาเหตุทำให้ไม่สามารถโพสท์หรือแก้ไข content
ซึ่งผมไม่แน่ใจว่าเว็ปอื่นๆบนเครื่องจะมีปัญหาหรือเปล่า อย่างเว็ปที่ใช้ Joomla แต่ผมก็ได้ทำการ
แก้ไข ไฟล์ /etc/apache2/modules.d/99_mod_security.conf โดยแก้ไข rule ตรง
SecFilterForceByteRange เป็นดังด้านล่าง

SecFilterForceByteRange 1 255

และยกเลิก Rule หรือแก้ไขด้านล่างนี้ ถ้ายกเลิก ก็ใส่ # ด้านหน้าบรรทัดซะ

SecFilterSelective "HTTP_CONTENT_TYPE" multipart/form-data

หรือถ้าไม่ยกเลิก็ทำการแก้ไขให้ rule เป็นดังด้านล่างนี้ (ควรเปลี่ยนมากว่ายกเลิก)
SecFilterSelective HTTP_Content-Type "!(^$|^application/x-www-form-urlencoded$|^multipart/form-data;)"

ทั้งนี้ถ้าไม่สามารถแก้ไขไฟล์ 99_mod_security.conf ได้เองเพราะไม่ได้เป็น Admin
ก็ให้แก้ขในไฟล์ .htaccess ใน htdocs หรือ public_html ถ้าเว็ปนั้นเปิดใช้ mod_rewrite
เว็ปก็จะกลับมาใช้งานได้ตามปกติ

Sunday, October 29, 2006

WordPress 2.0.5 Released!

WordPress 2.0.5 เวอร์ชั่นล่าสุดออกแล้วนะครับ ใครใช้อยู่ก็อัพเดทได้เลยครับ โดยเวอร์ชั่นนี้
จะเป็นการแก้ไขบักต่างๆมากกว่า 50 บักรวมถึงพวก Security Bugs ด้วย รายละเอียดคร่าวๆก็
ตามด้านล่างนี้เลยครับ

ความจริงรู้สึกตัวนี้จะออกมาได้ 1-2 วันแล้วมัง แต่พอดีผมเพิ่งรู้ :-P
อ้างอิง :
WordPress 2.05 - RONAN

Thursday, October 26, 2006

How to disable Tab Scrolling in FireFox 2.0

FireFox 2.0 เปิดตัวอย่างเป็นทางการแล้วนะครับเมื่อวานนี้ 25 ต.ค. ความจริงแล้ว
ผมได้ทดลองใช้มาตั้งแต่ตอนรุ่น RC3 แล้วก็รู้สุกหงุดหงิดกับระบบ Tab Scrolling มาก
ระบบที่ว่านี้คือเมื่อเราเปิด Tab มาจนมันมากเกิน มันจะซ่อน Tab ใหม่ไว้ เราต้องคลิ๊กที่
ตรองปุ่มลูกศรด้านข้างเพื่อเลื่อนดู Tab ที่ถูกซ่อนไว้ ซึ่งระบบนี้สร้่างความรำคาญให้
กับผมมากเพราะปกติเวลาผมเข้าเว็ปที่เข้าไปอ่านประจำทุกวันผมจะ คลิ๊กๆลิ้งก์ต่างๆ
ให้มันเปิดใน Tab ใหม่ จากนั้นค่อยไล่คลิ๊กอ่านที่ล่ะ Tab แต่เพราะระบบ Scrolling นี่
ทำให้บางทีผมลืมว่าคลิ๊กเปิดไปกี่ Tab แล้ว -*-


สำหรับการ Disable Tab Scrolling ใน FireFox 2.0 นั้น พอดีผมไปเจอมาที่เว็ปด้านล่างนี้
Top Firefox 2 config tweaks


วิธีก็คือพิมพ์ about:config ในช่องใส่ URL เว็ปแล้ว Enter มันจะขึ้นหน้าที่ใช้สำหรับปรับ
Config ต่างๆของ FireFox ให้เราพิมพ์ browser.tab ในของ Filter แล้วให้มองหา
Key : browser.tabs.tabMinWidth
ก็ให้เราเปลี่ยนค่าของ Key นี้เป็น 0 ซะจากนั้นปิด FireFox แล้วเปิดใหม่ เป็นอันเสร็จครับ ^^"

Sunday, October 22, 2006

ปัญหา UTF-8 กับ WordPress

พอดีผมได้ทำการย้ายเว็ปนี้ไปอีกโฮสต์นึง ก็มีปัญหาที่ผมไม่คิดว่าจะเจอ
ก็คือ WordPress ที่ผมคิดว่มันรองรับ UTF-8 นั้นจริงแล้วไม่ใช่ เพราะ
Database นั้นเก็บเป็น Latin1 ทำให้มีปัญหาขึ้นมาเมื่อทำการ Export
และไป Import เข้า Database ในโฮสต์ใหม่ ซึ่งการแสดงผมภาษาไทย
จะเพี้ยนมีตัวอักษร ??? แทรกเข้ามากับภาษาไทย ผมได้ลองแปลงข้อมูล
เป็น Latin กับ UTF-8 ก็ยังไม่สามารถทำให้มันแสดงผลถูกต้องได้จนสุดท้าย
ผมได้แก้ไขไฟล์ .sql ที่ export มาจากเว็ปเก่าโดยด้วย EditPlus แล้ว
Search/Replace CHARSET=latin1 เป็น CHARSET=utf8 แล้วก็ เซฟ
โดยเลือก Encode เป็น UTF-8 แล้วก็ Import ไปที่เว็ปใหม่ โดยเลือก
Import แบบ UTF-8 แล้วแก้ไขไฟล์ wp-includes/wp-db.php
ให้แทรกโค้ด
mysql_query("SET NAMES 'utf8'");

เข้าไปต่อจากโค้ดด้านล่างนี้

[PHP]
function wpdb($dbuser, $dbpassword, $dbname, $dbhost) {
$this->dbh = @mysql_connect($dbhost, $dbuser, $dbpassword);[/PHP]

Wednesday, October 18, 2006

วิธีแก้ปัญหา PHP ส่งอีเมล์ไม่ได้บน Windows

ช่วงหลังๆมานี่ผมกลับมาใช้ Windows ในการทำงาน และในการเขียน PHP
ปัญหาอย่างนึงที่น่ารำคาญคือส่ง email ไม่ออกมีปัญหากับ SMTP Server
ซึ่งผมก็ลง IIS และเป็น SMTP service ไว้ด้วยแต่ก็ส่งอีเมล์ไม่ออก แต่พอดีผม

ไม่ค่อยได้สนใจในส่วนนี้เท่าไหร่ เลยหยวนๆข้ามๆมันไปเขียนโปรแกรมทำส่วนอื่น
แต่พอดีช่วงนี้กำลังเขียนโมดูลของ Drupal และ่ต้องมีการส่ง email เลยจำต้องหา
วิธีทำให้มันใช้งานได้ ซึ่งจะอัพโหลดไปทดสอบบน Server ก็ลำบากในการแก้ไข
และ debug โปรแกรม ก็เลยลองๆ Search ดูก็เจอวิธีตาม Link ด้านล่าง

http://drupal.org/node/30079

ถ้าลิ้งก์เสียก็ตามล่างนี้เลย แต่อย่าลืมว่า Windows ต้องลง IIS ก่อนนะครับ
1) Go to: start > settings > control panel > Administrative Tools > Internet Information Services
2) Expand the " (local computer)" node
3) Right click on your SMTP server > go to "Properties"
4) Click "Access" tab
5) Under Relay Restrictions, click the "Relay" button
6) Click "Add"
7) Select "Single Computer" and enter IP address 127.0.0.1
8) Hit OK, OK, OK (until the properties dialog is closed)

หลังจากเซ็ตตามด้านบนแล้วสคริปต์ PHP เราก็จะส่งอีเมล์ออกไปได้ตามปกติ
เพียงแต่อาจมีปัญหา email ที่ถูกส่งไปอาจถูกปลายทางส่งเข้า Junk/Spam/Bulk Folder
ก็ต้องคอยเช็คดูให้ดีๆ

อ้างอิง : http://drupal.org/node/30079

Tuesday, October 17, 2006

เรื่องขำๆของ customer support (fwd mail)

พอดีไปเจอที่เว็ปบอร์ดนึงเลยก็อปมาเก็บไว้
ลูกค้า: ผมพึ่งซื้อ CD โปรแกรมบัญชีของคุณมาอยากทราบว่าผมต้องซื้อคอมพิวเตอร์ด้วย
หรือเปล่าหรือใช้กับเครื่องเล่น VCD ได้เลย
Support: (-_-)??ลูกค้า: ผมใช้ระบบ voicemail ของคุณอยู่นะ
อยากทราบว่าจะสั่งพิมพ์ออก printer ได้ยังไง
Support: (-_-)!??

ลูกค้า: เครื่องผมมัน boot ไม่ขึ้นอ่ะ
Support: บนจอขึ้นว่ายังไงครับ
ลูกค้า: อะไรทำนองว่า error non-system disk อะไรนี่แหละ
Support: ลองดูว่ามี diskette อยู่ในเครื่องหรือเปล่าครับ
ลูกค้า: เอ้อ... คุ้นๆนะว่าเคยเห็นว่ามีอะไรข้างใน... อ้อ... เจอแล้ว... ไม่ใช่ diskette
หร็อก มี Intel ข้างในน่ะ แปะอยู่หน้าเครื่องนี่แหละ Intel Inside”
Support: (-_-‘)

Support: คุณมี diskette 3 นิ้วครึ่งหรือเปล่าครับ
ลูกค้า: เอ้อ... รู้สึกจะไม่มีนะมีแต่ 3 นิ้ว
Support: (-_-‘)###

ลูกค้า: ผมต้องทำไงต่อครับนี่
Support: บนจอขึ้นว่ายังไงครับ
ลูกค้า: Enter you name
Support: พิมพ์ชื่อของคุณลงไปครับ
ลูกค้า: สะกดยังไงครับ?
Support: (-_-‘)zzzzzzzzzz

ลูกค้า: ผมได้เมล์ update โปรแกรมของคุณมาแล้ว แต่มันยังแก้ไม่เห็นได้เลย
Support: ตอน install คุณใช้ serial number เดิมหรือเปล่าครับ
ลูกค้า: อ้าว... ต้อง install ด้วยเหรอ
Support: (“-_-)

Support: ลองดูที่มุมล่างซ้ายของจอนะครับ เห็นปุ่มสี่เหลี่ยมที่เขียนว่า start มั้ยครับ
ลูกค้า: โอ้โฮ... คุณเห็นจอของผมได้ไงเนี่ย
Support: (-_-“)

Support: คุณใช้เครื่องรุ่นไหนอยู่ครับ
ลูกค้า: เอ้อ... รุ่นสีขาวน่ะ
Support: (-_-#)

ลูกค้า: ผมกำลังจะซื้อ windows 2000 น่ะครับ ช่วยแนะนำหน่อบครับว่าผมจะใช้ แบบ windows 2000 workstation หรือ windows 2000 server ดี
Support: คุณจะใช้เป็น server หรือเป็น workstation ล่ะครับ
ลูกค้า: เป็น server ครับ
Support: ก็คงต้องใช้ version สำหรับ server ล่ะครับ
ลูกค้า: แล้วอันไหนใช้สำหรับ server ครับ
Support: windows 2000 server ครับ
ลูกค้า: ขอบคุณครับ
Support: (-_-)!!!!!

Support: คุณใช้สายโทรศัพท์กับโมเดมร่วมกันหรือเปล่าครับ
ลูกค้า: ใช่ครับ บ้านผมมีโทรศัพท์สายเดียว (ตามด้วยเสียงโมเดมพยายามหมุนโทรศัพท์ ตู่ดตู่ดตู๊ดตู๊ดตู่ดตู่ดตู๊ด)
Support: เอ่อ... ทำอย่างนี้ไม่...
ลูกค้า: นี่ไงครับ หน้าจอมันขึ้นว่า no dial tone
Support: นั่นเป็นเพราะว่าเรากำลังใช้สายคุยโทรศัพท์กันอยู่น่ะครับ คุณต้อง...
ลูกค้า: ไม่ใช่ ไม่ใช่ ผมทำงี้ทุกทีแหละ บางทีก็ต้องหมุนเป็นสิบหนแน่ะกว่าจะติด
Support: ไม่ได้หรอกครับ เราใช้สายคุยโทรศัพท์กันอยู่น่ะครับ
โทรยังไงก็ไม่มีทางติดหรอกครับ
ลูกค้า: สงสัยสายคุณนั่นแหละไม่ว่างมากกว่าทำเป็นแก้ตัวยังโง้นยังงี้
ผมเปลี่ยนไปใช้เจ้าอื่นดีกว่า
Support: (+ O +)!!

Support: คลิกที่ปุ่ม OK เลยครับ แล้วบนจอตอนนี้มีอะไรอยู่ครับ
ลูกค้า: เอ่อ... ต้นกระบองเพชรน่ะ เพื่อนให้มา เกี่ยวกับที่ login ไม่ได้ด้วยหรือคะ
Support: (-__-“)

ลูกค้า : เครื่องคอมพิวเตอร์ คุณนี่ห่วยมากผมเสียเงินซื้อไปตั้งเยอะ
แล้วพอโทรมาสอบถามพนักงานงานขายของคุณ ก็ดันตอบไม่รู้เรื่อง
support : มีปัญหาอะไรให้ดิฉันรับใช้ได้ค่ะ (จะถูกลูกค้าด่ากลับไม๊เนี่ย)
ลูกค้า : หน้าจอคอมพิวเตอร์ ของคุณน่ะ รายงานผลว่า “ ซีตุ๊ป - ซีตุ๊ป“ ผมก็ไม่รู้จะทำยังไง เพื่อนผมบอกว่า เธอก็ไม่รู้ว่า ไอ้ซีตุ๊ป-ซีตุ๊ปเนี่ยมันคืออะไร
support : เอ่อ... ซีตุ๊บเหรอคะ คุณลองสะกดคำว่า “ซีตุ๊ป - ซีตุ๊ป“
หน่อยสิคะว่าสะกดอย่างไร
ลูกค้า : S - E - T - U - P S - E - T - U - P
support : T-T

ความจริงคุ้นๆว่าเคยอ่านเมื่อนานมาแล้ว แต่อ่านอีกก็ยังฮาขำอยู่ ^o^

อ้างอิง : http://www.thaireaderclub.com/article.php?c_no=873&f_group=other

Wednesday, October 11, 2006

เปิดตัว Google Docs & Spreadsheets!

วันนี้ Google ได้เปิดตัว Google Docs & Spreadsheets ออกมาให้ใช้กันแล้วครับ
จากเดิมที่ปล่อย Spreadsheets ออกมาให้ได้ลองใช้กันไปก่อนหน้านี้ แต่มาวันนี้ Google
ได้ปล่อย Google Docs & Spreadsheets ออกมาโดยในชุดนี้ผู้ใช้จะสามารถเลือกสร้าง
Document และ Speadsheet ได้โดยสนุบสนุนรูปแบบเอกสารอย่าง DOC, XLS, ODF,
ODS, RTF หรือ CSV นอกจากนี้ยังสามารถเซ็ตแชร์เอกสารให้กับเพื่อนๆได้ด้วย และสามารถ
ร่วมกันแก้ไขเอกสารกับเพื่อนๆไปพร้อมๆกัน

google_docs_spreadsheets1.png
และที่ผมชอบมากคือสามารถ Publish เอกสารไปยัง Weblog ได้ด้วยเยี่ยมจริงๆ ^^

google_docs_spreadsheets2.png
จากรูปจะเห็นว่าเราสามารถเลือก Publish ไปยัง Blog Provider ก็ได้หรือถ้าเรามีเว็ปของตัวเอง
เราก็สามารถใช้ได้เหมือนกันถ้าเว็ปคุณใช้ Script ที่สนับสนุน API ตามด้านล่างนี้

  • Blogger API

  • MetaWeblog API

  • MoveableType API


ทั่วไปแล้ว CMS หรือ Script ทำ Blog ทั่วไปก็จะสนับสนุน API ด้านบนตัวใดตัวหนึ่งอยู่แล้วครับ
เท่าที่ผมลองดูแล้ว Drupal, Typo และ WordPress สามารถใช้ได้ครับ ^^

อ้างอิง : Google , ZDNet

Tuesday, October 10, 2006

ทักษิณ และระบอบทักษิณ บนสารานุกรมวิกิพีเดีย

พอดีไปเจอคนโพสท์ใน Forum แห่งนึงว่ามีคนไปเขียนเกี่ยวกับทักษิณบนวิกิพีเดีย
ลองอ่านดูเสร็จเลยลอง Search หาคำว่าระบอบทักษิณดูก็มีกับเขาด้วยเหมือนกัน

Wikipedia:ทักษิณ ชินวัตร

Wikipedia:ระบอบทักษิณ

ไม่รู้ว่าเจ้าตัวเขาจะชอบหรือเปล่าเพราะเริ่มมีคนบันทึกเป็นประวัติศาสาตร์แล้ว
ว่าแต่เท่จริงๆมีชื่อบันทึกใน WiKiPedia ด้วย อุอุอุ

ปล. ความจริงบุคลสำคัญๆท่านอื่นก็มีนะ

เซฟภาพเว็ปเพจง่ายด้วย Screen grab!

สำหรับบางคนที่มักเซฟหน้าเว็ปเป็นรูปภาพเพื่อนำไปใช้ จะสะดวกมากขึ้น ถ้าใช้ FireFox
แล้วลง Extension Sceen grab! เพราะเราสามารถเลือกรูปแบบได้ 3 แบบคือ

  • Save document as image...

  • Save viewport as image...

  • Save window as image...


โดยแบบแรก Save document as image... จะเป็นการเซฟหน้าเว็ปนั้นๆทั้งหน้าไม่ว่าหน้า
เว็ปนั้นจะยาวแค่ไหน
แบบที่สอง Save viewport as image... นี่จะเซฟหน้าเว็ปเฉพาะส่วนที่แสดงอยู่ใน
FireFox ขณะนั้น
ส่วนแบบที่สาม Save window as image... จะเป็นการเซฟรูปทั้งวินโดวส์ของ
FireFox ซึ่งแบบที่สามนี้จะต่างกับแบบที่ 2 ตรงแบบที่สองจะเซฟเฉพาะหน้าเว็ปไม่รวม
กรอบวินโดวส์ของ FireFox

สำหรับคนที่จะลองใช้จะต้องเปิดใช้ Java ด้วยนะครับ เท่าที่ผมลองดู Extension ตัวนี้
ยังมี Bug อยู่ ที่เจอบ่อยๆคือการเซฟแบบ Save Document as image ซึ่งบางเว็ป
เมื่อเซฟแล้วจะมี Java Error ทำให้ไม่สามารถเซฟได้ - -" ยังไงซะผมว่ามันก็สะดวกดี
สำหรับคนที่ต้องการเซฟเว็ปเป็นรูปเก็บเอาไว้อ้างอิงในภายหลัง - -
อ้างอิง : https://addons.mozilla.org/firefox/1146

Friday, October 06, 2006

3 วิธีง่ายๆในการหลีกเลี่ยงปัญหา Memory Leak ใน JavaScript

บทความเกี่ยวกับการหลีกเลี่ยงเขียน Javascript แล้วทำให้เกิด Memory Leak
หลักที่ผู้เขียนเขาแนะนำคือ
3. Set your XMLHttpRequest onreadystatechange handlers to null when you are done with them.

I use YAHOO.util.Connect for all my XHR connections and it uses a
polling mechanism instead of readstate, so I don’t need to do this
anymore. If you can switch to YAHOO.util.Connect (or
YAHOO.ext.UpdateManager built on top of it), I’d recommend it.

2. Clean up all your DOM event handlers on unload if there’s a chance they could reference a DOM object.

There’s no reason to manually do this when there are libraries that
do it automatically. I use YAHOO.util.Event for all my event handlers,
it handles this for me automagically. Other libraries (prototype, dojo,
etc) have some sort of mechanism to do the same thing, although I’m not
sure how effective they are. If you look at the leak images above once
again, you will notice almost all of them are in event related code of
those libraries.

1. Never put anything in a DOM expando or property other than a primitive value unless you plan on cleaning it up.

This is the most important rule of all. It may seem convenient to
put your JS object in a DOM expando, so you can $() and get it, but
don’t do it. Sure, I know what you are thinking, I am being a little
paranoid. There are lots of instances where putting a JS Object in a
DOM expando won’t cause a leak. That’s true, but there are also
many that will… some which are not so easy to detect (i.e. closures).
So to avoid the possibility all together, I follow this simple rule.

อ้างอิง: 3 Easy Steps to Avoid JavaScript Memory Leaks