มาบวกเลขป้องกัน spam จาก comment (หรืออื่น ๆ ) กันดีกว่าดีกว่า (ใน PHP)

เริ่มแรกง่าย ๆ เลย สุ่มตัวเลขสัก 2 ตัวก่อน แล้วเก็บลง Session ไว้ซะ

session_start();
// เริ่มสร้างตัวเลขสุ่มไว้สองตัว
$_SESSION['rand_x'] = rand(1, 9);
$_SESSION['rand_y'] = rand(1, 9);
// จบการสร้างตัวเลขสุ่ม

แล้วก็เอาค่าที่ได้ไปแสดง แล้วก็ให้กรอกผลของการบวก

<!-- เริ่มส่วนของการบวกเลข -->
กรุณาบวกเลขต่อไปนี้
<?php echo $_SESSION['rand_x']; ?> + <?php echo $_SESSION['rand_y']; ?> = <input type="text" name="rand_ans" size="10">
<!-- จบส่วนของการบวกเลข -->

โค้ดด้านบนก็เอาไปใส่ใน form เพื่อให้เอาคำตอบให้มันส่งค่าไปยังปลายทาง

ส่วนปลายทางที่รับค่าจาก form ซึ่งก่อนทำเรื่องอื่น ๆ ก็เช็คก่อนเลยว่า บวกเลขมาถูกต้องหรือเปล่า โดยเอาค่าที่อยู่ใน session มาบวกและเืทียบค่ามันซะ ถ้าใช่ก็ปล่อยไปทำอย่างอื่น ถ้าไม่ใช่ก็ die มัน หรือจะทำอะไรต่อก็สุดแล้วแต่ครับ

session_start();
// เริ่มตรวจสอบการบวกเลข
if(($_SESSION['rand_x'] + $_SESSION['rand_y']) != $_POST['rand_ans']) {
die("คุณบวกเลขผิด");
}
// จบการตรวจสอบการบวกเลข

แค่นี้ก็พอกัน comment ที่มา spam ได้ อาจจะปรับเปลี่ยนรูปแบบการแสดงผล หรือตำแหน่งในการวาง input form ต่าง ๆ ได้ตามความเหมาะสม หรือจะสุ่มตำแหน่งก็ได้ เพื่อป้องกัน bot ที่สามารถปรับตัวได้ตามลักษณะของการบวกเลขแบบนี้ครับ ซึ่งการ ทำระบบบวกเลขนี้ก็คล้าย ๆ กับการทำ captcha แหละครับ แต่อันนี้จะง่ายและไม่ซับซ้อนมากเท่าครับ

โดยตัวแนวคิดได้มาจากแนวคิดของ Match Captcha ของ Drupal แหละครับ

เอาโหมด Offline 3 วัน

ช่วงวันศุกร์-อาทิตย์นี้ คงไปเที่ยวเชียงใหม่ คงไม่ได้ online สักพักนึง ไปเปิดหัวบ้าง หลังจากอยู่แต่หน้าจอคอมฯ เผื่อจะได้ idea จากธรรมชาติบ้าง งานนี้คงไม่ได้หิ้ว notebook ไป คงเอาไปแต่หนังสือที่ค้าง ๆ จากการอ่านไว้เท่านั้นเอง ;) ส่วนงานการต่าง ๆ ก็ break ไว้ก่อน พักผ่อน ๆ ๆ ……

แต่อาจจะทำการ update เข้า Twitter เอาน่าจะง่ายกว่าเยอะ ;)

Library vs. Framework

จาก Library vs. Framework

A framework is more than a library, and actually maybe has nothing to do with a library.

Here is an interesting article on Martin Fowler’s blog about Inversion of control, but in the article, Martin discuss the difference between the library and the framework, as well he refers to another article about frameworks.

I can summarize the points in both articles in the following:

A library is about reusable functionalities, but a framework is about reusable behaviors.

A library is something you call/inherit from your code, but framework is something that calls your code or provide services for your code.

A library is a collection of components and classes, where framwork is how abstract classes and components interact with each others.

I can explain the framework by this definition: Framework is an abstract design that embodies how the application works, and it has "hooks" where you can "inject" your module, or component.

เป็นบทสรุปที่ดีมาก ๆ ครับ ไม่ขอแปลแล้วกัน ตรงตัวมาก ๆ มองเห็นภาพชัดเลยสำหรับข้อแตกต่างของ Library กับ Framework ครับผม

ปัญหาของ EditPlus 3.0 (จากตอนที่แล้ว) ได้ถูกแก้ไขแล้ว (Path334_0215)

จาก ท่าทางจะไม่ถูกกับ EditPlus 3.0 (ณ. ตอนนี้) เมื่อวาน ผมอีเมลไปบอกทาง Support ของ EditPlus (ตอน 4 ทุ่มคืนวันที่ 17 ก.พ. 51) แล้วก็ได้รับการแก้ไขแล้ว โดยอีเมมลตอบกลับมาพร้อมกับ path สด ๆ ร้อน ๆ เมือตอนเที่ยงที่ผ่านมานี่เองครับ (ไม่ถึง 24 ชั่วโมงสำหรับ path อันนี้ครับ) โหลดได้ที่ http://www.editplus.com/epp300p334_0215.zip 

DATE: 2008-02-15
BUILD: 334

This is a patch file to fix the bugs of EditPlus v3.00

Copyright © 1998-2008 ES-Computing
Contact: [email protected]
Homepage: http://www.editplus.com/

INSTALLATION
============
Extract the files in the ZIP file to EditPlus 3.00 installation directory.

FIXED BUGS
==========

* The default encoding of open file system languages instead of keyboard language.
* Function list could cause program crash in some cases.
* User tool setting could not handle more than 500 characters.
* Increases max number of projects to 200.

ถือเป็นการแก้ไขปัญหาที่รอดเร็วอย่างมาก ไม่เสียทีที่เสียเงินซื้อ ;)

ท่าทางจะไม่ถูกกับ EditPlus 3.0 (ณ. ตอนนี้)

พอดีว่าเพิ่ง upgrade ตัว EditPlus เป็น 3.0 แล้วก็ downgrade กลับมาใช้ตัว 2.31 b524 เหมือนเดิมแล้ว เพราะมีปัญหากับไฟล์ที่มีภาษาไทย ที่เป็น encoding แบบ ANSI (ซึ่งเป็นตัว default เดียวกับ Notepad นั้นแหละ) โดยมาหลัง ๆ ผมใช้ encoding ของไฟล์เป็น UTF-8 เกือบหมดแล้ว จะมีบางงานเท่านั้นที่ใช้ ANSI อย่าง latex ที่ผมต้อง compile งานซึ่งเป็น ANSI มันจะดีกว่าเยอะ ไม่ต้องตั้งอะไรมากก็ใช้งานได้ดี (ผมใช้ MikTex 2.7 + ThaiLaTex แบบลงมือไม่ได้เป็น auto นั่งทำอยู่ 2 วัน) โดยไฟล์ที่เปิดมาใน 3.0 มันจะโดย change ตัว encoding ไป CP1252 แทนที่จะเป็น ANSI แทน แบบใน 2.31 น่ะ ซึ่งมันแปลกมาก ๆ ทั้ง ๆ ที่เปิดได้ทั้ง 2.31 และ notepad ก็ ok แต่ใน 3.0 กลับไม่ได้ -_-‘ ลำบากมาก ๆ เลยกลับมาใช้ตัวเดิมซะ

แล้วนี่ก็เพิ่งอีเมลไปแจ้ง support ของ EditPlus แล้วว่ามันมีปัญหานี้ ไม่รู้จะได้เรื่องอะไรหรือเปล่า แต่ว่ามันก็ต้องได้เรื่องแหละ เพราะเราเป็นลูกค้าเค้า ควรจะแก้ปัญหาให้เราได้ (ผมซื้อ license ของ EditPlus มาตั้งแต่ปี 2005 แล้ว)

ปัญหานี้ทำให้เสียเวลานั่งไล่แก้ไข ซะงง เลยว่าเป็นที่ user error หรือว่าเป็นที่ bug กันแน่ แต่เท่าที่เปรียบเทียบแล้วเป็นที่ app แน่นอน