ความคืบหน้าของ Hoffman Framework นับจาก 0.1.3a

ตอนนี้ผมเอา Framework ตัวนี้ไปใช้กับ production project หลาย ๆ ตัวและได้มีการปรับเปลี่ยนส่วนของ lib เยอะพอสมควร จนหลาย ๆ อย่างที่ทำได้ใน 0.1.3a นั้นทำงานไม่ได้เมื่อใช้กับ code ชุดใหม่นี้ครับ

หลายส่วนถูกโย้กย้ายด้วยเหตุผลด้านความยืดหยุ่น หลายส่วนถูกแก้ไขด้วยเหตุผลด้าน Coding Style Guideline โดยหลาย ๆ จุดถูกเพิ่มเติมเพื่อทำการ track ปัญหาออกมาได้ด้วยการตั้งค่าในไฟล์ Configuration เพื่อง่ายต่อการตรวจสอบ และบางส่วนถูกปรับแก้ด้วยเหตุผลด้านความเร็ว และประสิทธิภาพที่สูงขึ้นด้วย

ใน log ของ SVN บน SourceForge นั้นบางส่วนอาจจะขาดตกไปบ้าง เพราะว่ายังมือใหม่ในการบันทึกข้อมูลทั้งหมดที่ทำลง log ของ SVN ครับ พยายามเก็บรายละเอียดทั้งหมดที่ได้ทำ เพื่อเอาไว้อ้างอิงในภายหลังให้มากที่สุดครับ

และสุดท้าย คาดว่าจะเปลี่ยนจาก SourceForge มาใช้ Google Code Hosting ครับ กำลังดูเรื่องคุณสมบัติต่าง ๆ อยู่ครับผม

[code]
rv 8 – f – ส่วนของการสลับ Profile ของฐานข้อมูลใน Hmf_LogicModel_Db ให้ย้ายมาอยู่ที่ __construct แทน
rv 9 – a – เพิ่ม quoteInto เข้าไปใน Hmf_Logic_Model_Db เพื่อใช้ในการ filter ข้อมูลที่ใช้ใน Database
rv 10 – e – แก้ไขตัวแปรสำหรับ config ค่าแบบทั่วไป และการเข้าถึง
rv 11 – e – แก้ไขตัวแปรสำหรับ routing ค่าแบบทั่วไป และ config โดยใน config เพิ่มตัวควบคุมการใช้ acl ลงไป และ ตั้งแต่ rv 10 ตัวแปรตั้งค่าทุกตัวใช้การขึ้นต้นด้วยตัวเล็กทั้งหมด
rv 12 – e – ปรับเปลี่ยนการใช้งานตัวแปรใน runtime ต่าง ๆ ให้ไป register ใน registry แทนเพื่อใช้แทนการเข้าถึงแบบ global แทนโดยมีชื่อตัวแปรดังต่อไปนี้ที่ได้รับการใส่ลงใน registry
rv 12 – e – — applicationConfigurations เป็น app_config
rv 12 – e – — applicationLocale เป็น app_locale
rv 12 – e – — applicationAcl เป็น app_acl
rv 12 – e – — applicationAuthen เป็น app_authen
rv 12 – e – — viewsInformations เป็น app_viewinfo
rv 12 – e – — routingUrl เป็น routing_url
rv 12 – e – — controllerFile เป็น controller_file
rv 12 – e – — controllerName เป็น controller_name
rv 12 – e – — actionName เป็น action_name
rv 12 – i – — routing ชื่อคงเดิม
rv 12 – i – — acl ชื่อคงเดิม
rv 12 – i – — is_production ชื่อคงเดิม
rv 12 – e – ทำการ register $routes [‘:args’] ลงใน registry ในชื่อ action_args
rv 12 – e – ทำการเปลี่ยนการ instance จาก Class ชื่อ Hmf_RenderView แล้วอ้างอิงในชื่อ $renderView มาเป็น register ลงใน registry ในชื่อ renderview
rv 12 – e – แก้ไข Class ชื่อ Hmf_Config เพื่อให้ register ข้อมูลลงใน app_config และ app_locale ในคราวเดียวโดยซ่อนขั้นตอนภายใน method เลย
rv 12 – a – เพิ่ม method _registry ลงใน Hmf_RenderView_Render และ Hmf_FlowController เพื่อนำข้อมูลใน register เข้าและออกมาผ่าน method _registry ได้เลย
rv 12 – e – ย้ายขั้นตอนการตรวจสอบสิทธิ์ และกำหนดสิทธิ์ผู้ใช้จากใน runtime มาอยู่ใน constructor ของ Hmf_FlowController แทน
rv 12 – a – เพิ่ม key ‘acl’ ในตัวแปรก config เพื่อกำหนดว่าจะใช้การตรวจสอบสิทธิ์หรือไม่
rv 13 – r – เอา flag การตรวจสอบ registry ออกจากบรรทัดล่างสุด
rv 14 – a – เพิ่ม method _registry ลงใน Hmf_LogicModel Hmf,_LogicModel_Db และ Hmf_LogicModel_General ผ่าน __call method
rv 14 – a – ตรวจสอบ index ของ registry ก่อนทำการ access ออกมาใช้งาน
rv 15 – a – เพิ่มขั้นตอนการตรวจสอบ verion ของ Zend Framework โดยต้องใช้ Zend Framework ใน version 1.5 เป็นต้นไป
rv 16 – f – จัดรูปแบบของ code โดยทั่วไป
rv 17 – e – เพิ่ม PATH_DIR_HTML เพื่อใช้แทน /html โดยใช้สำหรับในกรณีที่ต้องการเปลี่ยนชื่อ /html เป็นอย่างอื่น
rv 17 – a – เปลี่ยนชื่อ $path_root เป็น $pathRoot เพื่อให้ตรงตาม naming ของ coding style guideline
rv 18 – a – เพิ่ม debug.routing ลงใน key ของ config เพิ่มนำไปตรวจสอบเวลา debug ตอนทำ routing ใน Runtime
rv 19 – a – เพิ่ม debug.routing ลงใน key ของ config เพิ่มนำไปตรวจสอบเวลา debug ตอนทำ routing ในไฟล์ Configuration
rv 20 – f – แก้ไขข้อผิดพลาดในการใส่ keywords เพิ่ม
rv 20 – f – ปรับประสิทธิภาพในการสร้าง url ให้ดีขึ้น และรองรับการใส่ keywords เพิ่ม
rv 20 – f – แก้ไขการ handle ที่ controller และ action ใหม่
rv 20 – r – เอา filterSlashAtLastChar ออก
rv 20 – r – เอา getUrlWithString ออก
rv 21 – f – แก้ปัญหา kerwords, pattern และ action หายในบางครั้งเวลา generate url
rv 22 – a – เพิ่มค่า routing.cache.lifetime และ routing.cache สำหรับตั้งค่าใช้งาน cache ของ routing
rv 23 – e – เอาการตรวจสอบการ debug ของ routing ไปใส่ใน contructor แทน
rv 23 – e – เปลี่ยนชือการ debug ของ routing จาก debug.routing เป็น routing.debug แทน
rv 23 – a – เพิ่มค่า routing.cache.lifetime และ routing.cache สำหรับตั้งค่าใช้งาน cache ของ routing
rv 23 – a – เพิ่ม cache ลงใน routing โดยใช้ sqlite
rv 24 – f – แก้ไขการขึ้นบรรทัดใหม่ใน error messege
[/code]

 

วิถีแห่งความบ้า feed (เพื่ออ่าน blog) … The Feed Way ;P

เพราะมันทำให้ความรู้ต่าง ๆ วิ่งเข้าหาเรา แทนที่เราต้องวิ่งไปหาความรู้ อย่างที่ผ่าน ๆ มา

มันอาจจะฟังดูงง ๆ หน่อย แต่นี่คือสิ่งที่ผมรู้สึก

เพราะผมยังคงจำวันที่ต้องมีหนังสือคู่มือสารบัญเว็บวางไว้ข้าง ๆ คอมฯ และต้องพึ่งเว็บ index directory ต่าง ๆ ในครั้งที่ search engine ยังห่วยแตกมากสำหรับเว็บคนไทย (และตอนนั้นภาษาอังกฤษในการอ่านยังไม่แข็งแรง)

แต่ในวันนี้ สิ่งเหล่านั้นเป็นอดีตด้วย google แต่ด้วยความที่ความรู้ และข้อมูลต่าง ๆ มีมากมาย การที่เข้าไปขุดมันออกมาก็ต้องใช้เวลาประสบการณ์ในการพิมพ์ keyword ต่าง ๆ ลงบน box search ของ google, live และ yahoo

ซึ่งเมื่อได้เว็บที่ต้องการสิ่งที่ต้องทำอันดับต่อมาคือ bookmark มันไว้ก่อน เพื่อในอนาคตเราสามารถกลับมาหน้านั้นได้อีก และถ้าเป็นกระทู้ที่ผมกลัวงว่าจะถูกลบ เช่นตามเว็บบอร์ดต่าง ๆ ผมก็ทำการเข้า print mode หรือ copy มาลงใน word processing แล้ว print เป็น pdf ซะ แล้วเก็บไว้ใน ebook/edoc ในเครื่องแล้วให้ copernic desktop search มัน index ในเครื่องอีกที

แต่แล้วเหมือนสวรรค์มาโปรก เมื่อ feed นั้นใช้งานอย่างแพร่หลายในเว็บ blog และเว็บหลายเว็บที่ผมอ่าน ทำให้ง่ายกว่าเดิมที่ผมจะติดตามอ่านข่าวสาร ความรู้เหล่านั้นได้อย่างสะดวกสบาย และไม่ต้องมาสั่งไล่อ่านในเว็บ หรือไม่ตรวจสอบการเปลี่ยนแปลงเนื้อหา เพียงแต่เปิด feed reader และตั้ง schedule ให้ไป update เนื้อหาใหม่ ๆ ทุก ๆ 15 – 30 นาทีซะ ความรู้ทุกอย่างที่ผมสนใจ จากการ subscribe ตัว feed ของผมก็เข้าสู่เครื่องอย่างสะดวกสบายมาก ๆ

แต่เว็บในไทยหลาย ๆ เว็บที่ตั้งตัวเป็น blog provider (hosting) บางเจ้ายังคงไม่ยอมให้เปิดส่ง feed ออกมา ซึ่งที่ผมเจอคือ bloggang และ oknation ซึ่งไม่รู้ว่าทำไม -_-‘ แต่ช่างเหอะ เพราะไม่ได้อ่านที่นั้นอยู่แล้ว

ซึ่งคนที่ใช้บริการใน blog provider ที่ไม่ยอมเปิดให้บริการ feed ออกมา เป็นเรื่องที่น่าเสียดายในการเผยแพร่ความรู้ในกับผู้คนทั่วไป ที่นับวันจะใช้ feed กันมากขึ้นเรื่อย ๆ และใน IE7 และ Browser สมัยใหม่ทุกเจ้าก็มี feature นี้อยู่เป็นพื้นฐานอยู่แล้วด้วย โดยผมมองว่า blog หรือ blog provider ที่ไม่รองรับบริการ feed จะต้องปรับตัวในอนาคต เพื่อเปิดให้บริการนี้อย่างแน่นอน แต่ถึงตอนนั้นจะสายเกินไปหรือเปล่าเท่านั้นเอง -_-‘

 

Hoffman Framework ใกล้ความจริงแล้ว

หลังจากพลัดผ่อนมานานมาก ๆ เพราะเปลี่ยนงาน และไล่งานที่ตัวเองทำอยู่หลายตัว ตอนนี้กำลังปล่อยตัว pre-alpha (alpha version) ออกมา ตอนนี้ผมใส่ tag เป็น 0.1.3a แล้วครับ เอา source ขึ้น sourceforge.net/projects/hmf/ แล้ว บนเครื่องผม revision ซัดไป 140 กว่า ๆ แล้ว และ tag อีก 4 ตัว แต่บน sourceforge นี่เป็นตัวที่ทดสอบว่า ok แล้วคือ 0.1.3a นั้นเองครับ แต่ต้องมีการปรับปรุงอีกหลายส่วนครับ และยังไม่ได้ทำ documents มากนักครับ ตอนนี้คงได้แต่เอาไป review code มากกว่า ไม่ได้เอาไปใช้งานจริง ๆ แล้วเดี่ยวจะมีตัว demo ที่คาดว่าจะเอามาให้ดูเป็นตัวเอย่างพร้อม ๆ กับ documents ครับ ในตัว code นั้นบางส่วนไม่ได้เขียน docs comment และบางตัวยังไม่ได้ทำ test ครอบคลุมทุกด้านครับ

โดยผมจะทำ docs API ให้ด้วยครับ รออีกสักพักนึงนะครับ ไม่น่าเกิน 1-2 อาทิตย์นี้ หรือหลังสงกรานต์นี้แหละครับ คงได้ออก alpha ตัวเต็ม ๆ พร้อม docs API ที่ดีขึ้นกว่านี้เยอะครับ

สรุปคือตอนนี้มาบอกเฉย ๆ แหละครับว่าเอาขึ้น public แล้ว แหะ ๆ ๆ ;P

 

ร่วมด้วยช่วยกัน Say No To IE 6! สำหรับเว็บที่ใช้ jQuery (และพวก Prototype JavaScript ตัวอื่น ๆ ด้วย)

จาก entry หมดเวลา Internet Explorer 6 แล้ว เลิกใช้มันได้แล้ว !!! และจาก Campaign “Say No To IE 6!” จากเว็บ SaveTheDevelopers.org นั้นเค้าให้เอา code ด้านล่างนี้ไปใส่

<script src="http://www.savethedevelopers.org/say.no.to.ie.6.js"></script>

แต่ถ้าเว็บใครใช้ jQuery นี่อาจจะไม่ได้ แบบ Theme K2 ของผม วิธีอีกแบบที่สามารถทำได้ และทำงานร่วมกับ jQuery ได้ก็คือใช้ CSS – Conditional comments นั้นเอง โดยกำหนดไว้ว่าถ้า IE ที่ version น้อยกว่า 7 ให้โชว์ตัว popDown นี้ขึ้นมาครับผม

<!--[if lt IE 7]>
<script type="text/javascript" src="path/to/savethedevelopers.js"></script>
< ![endif]-->

เสร็จแล้วในไฟล์ savethedevelopers.js ก็ปรับแก้เป็นแบบนี้ครับ

jQuery(document).ready(function(){
var now = new Date();
var time = now.getTime();
var div = document.createElement('a');
var id = 'saynotoie6_div_' + time;
div.setAttribute('id',id);
div.setAttribute('href','http://www.savethedevelopers.org/');
div.setAttribute('target','_blank');
div.style.display = 'block';
div.style.color = '#1d1d1d';
div.style.textAlign = 'left';
div.style.fontFamily = 'Arial';
div.style.fontSize = '11px';
div.style.background = 'url(https://webhost.domain/path/to/savethedevelopers/PopDown.gif)';
div.style.padding = '0';
div.style.position = 'absolute';
div.style.top = '0';
div.style.right = '40px';
div.style.zIndex = '999999';
div.style.width = '330px';
div.style.height = '63px';
div.style.marginTop = '-80px';
div.style.filter = 'alpha(opacity=95)';
document.body.appendChild(div);

var animate = function(){
var myDiv = document.getElementById(id);
var value = parseInt(myDiv.style.marginTop)
myDiv.style.marginTop = value + 1 + 'px';
if(parseInt(myDiv.style.marginTop) < -1){
            var timer = setTimeout(animate,30 * 80/Math.abs(value) * .27);
        }else{
            var timer = setTimeout(hide,25000);
        }
    }

    var hide = function(){
        var myDiv = document.getElementById(id);
        var value = parseInt(myDiv.style.marginTop)
        myDiv.style.marginTop = value - 1 + 'px';
        if(parseInt(myDiv.style.marginTop) > -80){
var timer = setTimeout(hide,1.4 * 80/Math.abs(value) * 3.70);
}
}

setTimeout(animate,1000);
});

ลองเทียบกับของเก่าเค้าก็ได้นะครับ อันนี้ผมปรับให้โชว์ไว้สัก 25 วินาทีครับผม ส่วนถ้าเอาไปใช้กับ mootools หรือตัวอื่น ๆ ก็เปลี่ยนการ windows.onload เป็นแบบอื่น แทนการใช้ jQuery(document).ready(); ครับ

เรามาร่วมด้วยช่วยกันประกาศครับผม เอาพวกไม่ได้มาตรฐานออกไปจากสังคมสักทีนึงครับผม

 

หมดเวลา Internet Explorer 6 แล้ว เลิกใช้มันได้แล้ว !!!

พอดีว่าวันนี้ทำ Theme ‘K2’ ให้ support กับ IE 6 ให้มากที่สุด เล่นซะหมดแรงเลย ซึ่ง จริง ๆ K2 มันก็สนับสนุนอยู่แล้ว แต่ว่าบางส่วน และไม่ทั้งหมด ไป ๆ มา ๆ เลยยอมแพ้ ช่างมัน ใครใช้ Internet Explorer 6 เข้ามาก็เจออะไรเหว่ง ๆ หน่อยก็อย่าไปคิดมากแล้วกัน และแนะนำให้ไปใช้ Internet Explorer 7, Firefox 2 หรือ Opera แทนแล้วกันนะ เพราะว่าตัว Internet Explorer 6 นี่มันทำให้คนทำเว็บสูญเสียพลังงานในการทำให้เว็บต้องไปสนับสนุนมันมาก ยิ่งในประเทศไทย ที่ร้อยละ 70 ของเครื่องคอมพิวเตอร์ใช้ Windows เถื่อนนี่ยิ่งเแล้วใหญ่ ส่วนใหญ่มักไม่กล้า upgrade software ต่าง ๆ เนื่องจากกลัวโดย block ไม่ให้ใช้งาน ทำให้พลาดความสามารถใหม่ ๆ ของโลกเทคโนโลยีรุ่นใหม่ ๆ ไปเยอะ ซึ่งเป็นเรื่องที่น่าเสียดายมาก ๆ T_T

แต่อีกอย่างคือเว็บของกระทรวงต่าง ๆ ในไทย รวมถึงพวกเว็บของหน่วยงานราชการต่าง ๆ ยังคงทำเว็บแบบไม่สนใจ web standard เลย ซึ่งเป็นการเลือกปฎิบัติอย่างมาก ยิ่งเว็บ rd.go.th นี่ตอนลงทะเบียน หรือกรอกข้อมูลภาษีนี่ให้ใช้แต่ Internet Explorer 6 เท่านั้น ซึ่งผมก็เซงอย่างรุนแรง ผมว่าคนทำระบบมันไม่มีความสามารถให้รองรับได้หลากหลาย Browser มากกว่า หรือว่ามันขี้เกียจก็ไ่ม่รู้ หรือไม่แน่นะ ความสามาถอาจจะไม่ถึงก็ได้ แต่ดันโดนให้มาทำระบบนี้พอดี -_-‘ อืมมม น่าคิดนะ

Current Campaign

Say No To IE 6!
Our current campaign focuses on assisting users in upgrading their Internet Explorer 6 web browser. This campaign will result in former IE 6 users having a more enjoyable experience on the web while (hopefully) creating a less stressful and complicated environment for web developers by hastening the retirement of an outdated browser.

SaveTheDevelopers.org :: Making The Web A Better Place, One Campaign At A Time…