@gsamokovarov 提出將 Backbone.js 改寫成 CoffeeScript 架構的 Pull request,結果官方團隊其中一位開發作者回應了一張圖,代表他的心情 XD,各位有興趣可以點上面連結看看,後來有其他人回應說,為什麼官方不用 CoffeeScript 來寫了,發此 Pull Request 的作者也有說,他只是將架構改成 CoffeeScript 讓大家參考看看而已,沒有真的希望可以納入整個 Backbone.js 專案,如果有其他開發者需要的話,一樣可以 fork 此專案,說明文件也用 docco 產生好了,可以參考此連結,官方作者也提到,大部份的第3方 Library 還是不會使用 CoffeeScript 來當作基底開發,畢竟並非所有人都知道 CoffeeScript,如果官方想這麼開發的話,早就再 2010 年丟釋出 Backbone.js 的時候就直接採用了,不會拖到現在還沒出來,當然最後官方也希望將此 pull request 寫到 wiki 裡面給大家參考,等待原作者補開發動機及細節。
壓縮 Javascript 和 CSS 檔案 script command
CSS 跟 JavaScript 檔案,減少 Http request 流量,網路上已經有非常多的 Compressor tool,像是 Google Closure Compiler 或 YUI Compressor,都是用來壓縮 JS 或 CSS 檔案,這次寫了 script 來壓縮整個網站目錄裡的 js 或 css 檔案,不過 script 所使用的 Compressor command 是 Node Base 的 tool,分別是 UglifyJS 及 sqwish 這兩套,當然使用 command 之前,請務必先安裝好 Node.js 最新版本啦,不過沒安裝也沒關係,底下有懶人安裝 script command。這些 tool 對於 Embedded System 在 build firmware 相當有用,可以減少不少 code size 阿。 可以直接看專案說明,就可以不必看底下步驟了
[Read More]HTML5 Boilerplate 不再支援 legacy browser
HTML5 Boilerplate 在 V5.0 版本將不支援舊有瀏覽器,包含 IE6/7. Firefox 3.6 (Mozilla 已經不再維護) 及 Safari 4,詳細資料可以參考 V5.0 的 Milestone (Drop legacy browser support) 下一版本會有哪些改變呢?
- html tag 將不會出現 conditional comments
- normalize.css 升級到 2.1.x
- main.css 移除 IE6/7 Hacks 部份 此次重大改變包含移除 IE conditional classes,因為
IE 10+ 將不再支援 conditional comments,至於 normalize.css 轉換到 2.1.x 版本,如果有用 Sass 的朋友們,可以參考我改的 normalize.scss,非常期待 Version 5 出來,會拿掉很多 legacy code。
Backbone.js event bind 新功能 listenTo and stopListening
Backbone.js Event 事件介紹,簡介 Backbone.js Events 如何使用 on 跟 off 來處理事件,在升級 Backbone 到 0.9.9 過程中,其中一項重大新功能就是 Backbone listenTo and stopListening,大家來看看 Change logs:
[Read More]Added listenTo and stopListening to Events. They can be used as inversion-of-control flavors of on and off, for convenient unbinding of all events an object is currently listening to. view.remove() automatically calls view.stopListening().
在 git Commit 之前檢查 PHP 是否有錯誤
git server,寫了一個簡單的 pre-commit 程式,來確保 PHP 是否有 Parse error,或者是在寫 CoffeeScript 及 JavaScript 時,常常會用到 console.* 來當作中斷點或者是顯示變數資料,這也是需要盡量避免 commit 到伺服器,你可不想要長官 review 的時候看到這麼多 debug 訊息吧。這時候就是需要 git-hooks 的 pre-commit 幫忙檢查這些 Syntax 語法,可以直接參考我的 git-hooks 專案。安裝方式很簡單:
$ git clone https://github.com/appleboy/git-hooks.git $ chmod +x bin/hooks.sh pre-commit $ ./bin/hooks.sh your_project_path如果使用 git commit 之前,就會檢查 .js、.coffee、.php 等副檔名。
使用不同 IE 版本測試網站
VirtulBox 或 VMware 嗎?現在不必這麼麻煩了,可以到 modern.IE 直接測試 IE6/7/8/9/10 任何版本,或者是檢查網頁相容性以及 coding practices。
[Read More]jQuery Migrate 1.1.0 Released 注意事項
jQuery 釋出 1.9 及 2.0 版本,官方團隊也同時推出 jQuery Migrate Plugin 1.0.0 版本,此 Plugin 是跟 jQuery 1.9 或 2.0 一起搭配使用,偵測 jQuey 已移除或者是將被移除的功能,讓您之前開發的 jQuey 功能可以持續使用,但是似乎很多使用者不知道此 plugin 用處,就直接升級 1.9 或 2.0,並未載入 migrate plugin,造成官方收到很多 feed back 都是關於一些舊功能不能使用。半個月後 jQuery 官方收到很多 migrate plugin 回報問題,這次一樣可以透過 jQuuery CDN 載入,程式碼如下。
壓縮版本[Read More]CodeIgniter Error Handler 處理

CodeIgniter 在處理 PHP Error handler 是直接呼叫內建的 Exceptions Class 顯示在瀏覽器上,如果有打開 log,系統另外會紀錄在 application/logs 目錄。這是 CodeIgniter 預設作法,但是我希望能把這些錯誤訊息都紀錄到 Database,相關 Notice, Error 訊息都一律寫到 DB 裡面,但是如果用 extend 系統內的 Exceptions 是完全做不到的,所以我寫了一個 Library 只要直接 include 系統就可以直接開始紀錄,因為在 PHP 你會遇到無數種 User experience,都會產生相關錯誤訊息,在產品上線都會將 display_errors 設定為 0,不要讓使用者看到任何錯誤訊息,但是我們還是需要全部的錯誤訊息阿,底下來看看如何安裝 Log Library。
建立 log table 可以直接參考
連結,或者是複製底下資料貼到 phpMyAdmin。
-- -- Table structure for table `logs` -- DROP TABLE IF EXISTS `logs`; CREATE TABLE IF NOT EXISTS `logs` ( `id` int(11) NOT NULL AUTO_INCREMENT, `errno` int(2) NOT NULL, `errtype` varchar(32) CHARACTER SET utf8 NOT NULL, `errstr` text CHARACTER SET utf8 NOT NULL, `errfile` varchar(255) CHARACTER SET utf8 NOT NULL, `errline` int(4) NOT NULL, `time` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;[Read More]
JavaScript 的 if 條件判斷式
網路上看到這篇 Two Things About Conditionals in JavaScript,比較另我訝異的是第一點 One: There is no else if
,該作者提到在 JavaScript 的寫法裡面沒有 else if,底下直接看例子:
function saySomething( msg ) { if ( msg === 'Hello' ) { console.log('Hello there'); } else if ( msg === 'Yo' ) { console.log('Yo dawg'); } }
上面是我們一般在寫 JS 會用到的條件子句,但是實際上 JS 寫的就是
function saySomething( msg ) { if ( msg === 'Hello' ) { console.log('Hello there'); } else { if ( msg === 'Yo' ) { console.log('Yo dawg'); } } }