
Published on
February 21st, 2008-2:25 pm.
ช่วงวันศุกร์-อาทิตย์นี้ คงไปเที่ยวเชียงใหม่ คงไม่ได้ online สักพักนึง ไปเปิดหัวบ้าง หลังจากอยู่แต่หน้าจอคอมฯ เผื่อจะได้ idea จากธรรมชาติบ้าง งานนี้คงไม่ได้หิ้ว notebook ไป คงเอาไปแต่หนังสือที่ค้าง ๆ จากการอ่านไว้เท่านั้นเอง
ส่วนงานการต่าง ๆ ก็ break ไว้ก่อน พักผ่อน ๆ ๆ ......
แต่อาจจะทำการ update เข้า Twitter เอาน่าจะง่ายกว่าเยอะ
Thai Share This
จาก 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 ครับผม
Thai Share This
จาก ท่าทางจะไม่ถูกกับ 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: support@editplus.com
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.
ถือเป็นการแก้ไขปัญหาที่รอดเร็วอย่างมาก ไม่เสียทีที่เสียเงินซื้อ
Thai Share This
พอดีว่าเพิ่ง 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 แน่นอน
Thai Share This
วันนี้คงสั้น ๆ หน่อย เพราะกำลัง implement ส่วนของ Access Control List และ Authentication อยู่ครับ และ phase ต่อไปก่อนจะสามารถออก pre-alpha version ได้คงต้องทำส่วนของ view layer ให้ดีกว่านี้ โดยการนำเอา Smarty เข้ามาใช้งานนั้น มันเป็นแบบ single template / single layer มันทำให้การออกแบบ theme/template ที่แปลเปลี่ยนตามลักษณะการใช้งานนั้น ยากพอสมควร พอดีว่าผมได้ concept ของ master page ของ ASP.NET มา ซึ่งจริง ๆ มันก็แบบเดียวกับในพวก joomla หรือ drupal ที่มี template กลาง และเอา view มาใส่ซ้อนลงไปอีกทีนึงนั้นเอง ตอนนี้ไล่ทำทั้งหมดอยู่ แบบว่ามัน late มาจากวันที่ต้อง public source มาหลายวันแล้ว เร่งหูตูบเลยงานนี้
Thai Share This
จาก ความคืบหน้า PHP Hoffman Framework (4) ตัวความสัมพันธ์ระหว่าง model กับ controller นั้น เพิ่มเติมและปรับเปลี่ยนเพื่อความเหมาะสม โดยถ้าเราจะกำหนด controller ต้องมี namespace หรือ prefix-name (ต่อไปจะเรียกว่า namespace อย่างเดียวครับ) ด้านหน้าเสียก่อน คือ
PHP:
-
class controller_<ชื่อ controller> extends Hmf_FlowController {
-
....
-
}
โดยให้ extends มาจาก FlowController ครับ
ส่วนของ model ก็เช่นกันครับ
PHP:
-
class model_<ชื่อ model> extends Hmf_LogicModel {
-
function __construct(){
-
parent::__construct();
-
}
-
....
-
}
(อันนี้คือ model แบบมาตรฐาน)
แต่เวลาเรียกเอา model มาใช้ใน FlowController ก็ใช้ method 'getInstantModel' ของ FlowController ครับ โดยใส่ชื่อ model ลงไป และเดี่ยวมันจะเติม namespace ให้เอง แบบนี้ครับ
PHP:
-
class model_user extends Hmf_LogicModel {
-
function __construct(){
-
parent::__construct();
-
}
-
....
-
}
-
-
class controller_user extends Hmf_FlowController {
-
function list($page =
1){
-
-
$user = $this->getInstantModel('user');
-
-
$out['data'] = $user->pagination($page, 5);
-
$out['pagenav'] = $user->paginationLink(HttpPage::url('user','list'));
-
-
return $out;
-
-
}
-
}
แต่ถ้า model_user ไม่มี หรือไม่ได้สร้าง class ไว้ ตัว getInstantModel มันจะไปสร้าง Instant ของ class ของ model นั้นแล้วให้ตัวมันมีคุณสมบัติแบบเดียวกับ class ของ model แบบมาตรฐานด้านบนนั้นแหละครับ พูดง่าย ๆ ก็คือถ้าหาไม่เจอ ก็สร้างให้เลย ส่วนใช้งานได้หรือไม่อีกเรื่องครับ โดย class ของ model แบบมาตรฐานมีคุณสมบติแบบเดียวกับ LogicModel เลยครับ
PHP:
-
class controller_user extends Hmf_FlowController {
-
function list($page =
1){
-
-
$user = $this->getInstantModel('user');
-
-
$out['data'] = $user->pagination($page, 5);
-
$out['pagenav'] = $user->paginationLink(HttpPage::url('user','list'));
-
-
return $out;
-
-
}
-
}
โดยตัวอย่างด้านบน ถ้าไม่มี model_user ก็ใช้งานได้เหมือนกันครับ ซึ่งสะดวกมากในกรณีที่ใช้ class มาตรฐานทั่วไปครับผม
Thai Share This
มาบวกเลขป้องกัน spam จาก comment (หรืออื่น ๆ ) กันดีกว่าดีกว่า (ใน PHP)
เริ่มแรกง่าย ๆ เลย สุ่มตัวเลขสัก 2 ตัวก่อน แล้วเก็บลง Session ไว้ซะ
แล้วก็เอาค่าที่ได้ไปแสดง แล้วก็ให้กรอกผลของการบวก
โค้ดด้านบนก็เอาไปใส่ใน form เพื่อให้เอาคำตอบให้มันส่งค่าไปยังปลายทาง
ส่วนปลายทางที่รับค่าจาก form ซึ่งก่อนทำเรื่องอื่น ๆ ก็เช็คก่อนเลยว่า บวกเลขมาถูกต้องหรือเปล่า โดยเอาค่าที่อยู่ใน session มาบวกและเืทียบค่ามันซะ ถ้าใช่ก็ปล่อยไปทำอย่างอื่น ถ้าไม่ใช่ก็ die มัน หรือจะทำอะไรต่อก็สุดแล้วแต่ครับ
แค่นี้ก็พอกัน comment ที่มา spam ได้ อาจจะปรับเปลี่ยนรูปแบบการแสดงผล หรือตำแหน่งในการวาง input form ต่าง ๆ ได้ตามความเหมาะสม หรือจะสุ่มตำแหน่งก็ได้ เพื่อป้องกัน bot ที่สามารถปรับตัวได้ตามลักษณะของการบวกเลขแบบนี้ครับ ซึ่งการ ทำระบบบวกเลขนี้ก็คล้าย ๆ กับการทำ captcha แหละครับ แต่อันนี้จะง่ายและไม่ซับซ้อนมากเท่าครับ
โดยตัวแนวคิดได้มาจากแนวคิดของ Match Captcha ของ Drupal แหละครับ
Thai Share This