在這裡跟大家推薦一本國外的書籍,也就是 Elated.com 網站作者 Matt Doyle 推出的一本新書 Master Mobile Web Apps with jQuery Mobile,此作者也有推出 PHP 及 Photoshop 的書籍,本人相當佩服有美工天份又會寫程式人才。然而現在當紅的 Mobile Device,大家相繼為了 iOS, Android 或其他手持式裝置撰寫 Web 介面,目前網路上大家推的其中一套就是 jQuery Mobile,而我呢,正在摸索另一套強大的 Web App Framework: Sencha Touch,功能來比的話,個人覺得 Sencha Touch 優勢比較多,之後有機會再來寫一系列的 Sencha Touch 文章。此書有提供目錄可以參考,該作者會教大家如何搭配 PHP 跟 MySQL 結合 jQuery Mobile API 來撰寫程式,書籍應該是蠻完整的,目前售價美金19元,如果有興趣的人可以上網下單。
無痛安裝 NodeJS 和 Node Framework Express
NodeJS 是目前當紅的 Web 2.0 技術,去年 COSCUP 2010 就有 KKBOX 資深工程師 ericpi 來探討這個議題,NodeJS 背後使用了 V8 引擎為基礎,沒看過用純 JS 來當 Server-Side 吧,台灣很紅的 Plurk 也是大量使用 NodeJS,然而每開發一種語言,就會想開始找搭配的 Framework,那就首推 Node Framework Express 來撰寫程式,本篇是要介紹如何在 Ubuntu 10.10 無痛安裝 nodejs + express。
下載 Nodejs 原始碼 直接到
官網下載 Stable 的版本吧,目前是 node-v0.4.10.tar.gz,也可以先看看 API Document
# wget http://nodejs.org/dist/node-v0.4.10.tar.gz[Read More]
PHP function 參數 default value
2011.08.06 Update: 感謝 jaceju 指正筆誤 自己定義 PHP Function 的時候,假設該函式有1個參數,您可以傳入該參數或者是不傳,但是函式裡面如何判斷是否有傳入該參數呢?先看看底下例子:
function test($arg_1 = NULL)
{
// 判斷 $arg_1 參數是否傳入
$arg_1 = $arg_1 || 'test';
echo $arg_1;
}你會發現上面結果會是1,而不是 test,大家會懷疑為什麼這樣寫不行呢,那是因為 || 是 boolean operators,他只會 return true 或是 false,而不是回傳 string,如果想這這樣寫,大概可以用 javascript 或 perl 語言來寫,javascript 可以參考之前的文章 [Javascript] 在函數裡設定參數預設值,然而 PHP 的正確寫法要用 ?: 來取代
function test($arg_1 = NULL)
{
// 判斷 $arg_1 參數是否傳入
$arg_1 = (isset($arg_1)) ? $arg_1 : 'test';
// 或者是
$arg_1 = $arg_1 ? $arg_1 : 'test';
echo $arg_1;
}請參考深入探討 CodeIgniter Input Class 核心程式流程
CodeIgniter,自己覺得非常感動 XD,也非常欣慰,希望把好東西推廣給大家知道。廢話不多說,先來說說問題點,先前發表的一篇 [CodeIgniter] 利用 jQuery 簡易驗證使用者帳號/Email 最後有人留言針對 input->post() 在中文官網上面的 Input Class 教學有些疑慮,底下我先來說明網友的問題點。
input->post 如果為空,則塞進去資料庫竟然是 0 該網友引用了 Input Class 中文文件的內容
使用 POST, COOKIE, 或 SERVER 資料CodeIgniter 提供三個讓你取出 POST, COOKIE 或 SERVER 中項目的補助函數。使用這些函數的主要便利性在於, 它們會確認並檢視是否這些項目已被設定並且在未設定時回傳 false (boolean) , 而不是直接取出 ($_POST[‘something’]),官方範例↓這讓你可以方便地使用資料而不必預先測試它們是否存在。不然, 通常你可能會像這樣做:if ( ! isset($_POST[‘something’])) { $something = FALSE; } else { $something = $_POST[‘something’]; } 網友敘述:
但是為什麼還是為設定為0呢??這應該是檢查資料有沒有被設定而已,那我如果沒有輸入,又怎麼會出現 0 呢?? 網友希望 $username = $this->input-post(“username”); 能幫他判斷如果 username 沒有資料,就直接回傳 NULL,Insert 到資料庫時,應該是 NULL 而不是 0。
程式範例 網友其實沒有錯,根據文件上顯示,如果 $something =
$this->input->post(“something”); 取值過後,如果系統沒有 $_POST[‘something’],則會回傳 FALSE,我猜網友在跟 model 作搭配的時候使用了底下的寫法來塞值進入資料庫:
$data = array(
"username" => $this->input->post('username'),
"passwd" => $this->input->post('passwd'),
"email" => $this->input->post('email'),
);
$this->load->model('members');
$this->members->register($data);
假設如果沒有 $_POST['email'] 的話,該欄位就會被設定為 0,原因很簡單,就是出在要塞值進入資料庫的時候,程式針對資料的型態判斷啦,底下從最開始取得$_POST 資料開始說起。
[Read More]Linux 程式開發編輯器 Geany + Fuse 遠端掛載
自己買的筆電灌上了 Ubuntu 作業系統,Linux 系統好處多多,指令自己也熟悉,想架什麼站都可以,但是最主要還是要找一套程式開發編輯器,網路上看了大部份文章,我決定用 Geany 這套免費的編輯器,在 Windows XP 底下我則是使用 PSPad 搭配內建的 FTP 功能遠端編輯寫程式,但是 Geany 並沒有支援 FTP 功能,可以詳細看到官方網站 Q&A,官方建議搭配 Fuse 或 LUFS,這樣並不只是 Geany 可以使用,其他 Application 也可以任意使用了。 在介紹 Fuse 之前可以先參考過去寫的一篇教學: [SSHFS] 好用的 SSH Filesystem fusefs-sshfs in FreeBSD or Linux,裡面分享了 FreeBSD 跟 Linux 底下的 tarball 安裝方式,當然現階段 Ubuntu 安裝就很容易了,透過 Apt 管理的方式安裝:
$ apt-cache search sshfs sshfs - filesystem client based on SSH File Transfer Protocol sshfs-dbg - filesystem client based on SSH File Transfer Protocol (with debbuging symbols) sbackup-plugins-fuse - Simple Backup Suite FUSE plugins $ apt-get install sshfs安裝完成,透過底下指令把遠端資料夾 mount 過來吧。
$ mkdir /home/appleboy/tmp $ sshfs -p 22 appleboy@XXX.XXX.XXX.XXX:/home/appleboy /home/appleboy/tmpGeany 真的蠻好用的喔,推薦給大家,還有其他 screenshot 可以參考
PHP 將長期宣導程式設計師將 ext/mysql 改用 pdo_mysql 和 mysqli
[PHP-DEV] deprecating ext/mysql,大意就是 PHP 官方未來將打算移除 ext/mysql 的所有相關文件及功能,作者相信很多程式開發者都是用 mysql 套件下去開發,聽到這消息會非常錯愕吧。 官方 documentation team 討論移除的原因在於安全性的考量,在 DK 大神那邊看到是使用 ext/mysql 必須自己處理 mysql_real_escape_string 和 mysql_escape_string,所以官方希望教育使用者不要再使用 ext/mysql 了,底下是官方會做的事情
- 增加說明指出 ext/mysql 已過時
- 建議和取代方案
- 包含取代方案的範例 官方提供了兩個解決方案
- 從現在開始教育使用者及增加說明文件
- 在 5.4 版本增加 E_DEPRECATED 訊息,甚至 5.5 6.0 都可以
- 提供 pdo_mysql 轉換的說明文件
- 專注於整理 pdo_mysql 跟 mysqli 的線上文件
- 增加 “The MySQL situation” 的文件說明現況 看完這篇,大家現在趕快轉換到 mysqli 或者是使用 PDO 來開發程式吧
簡易 CodeIgniter Layout Library for Template
在 Web 開發網站,最重要的就是切割版面 CSS 化,制定共同部份 header 跟 footer…等,如果是用在 CodeIgniter Controller 裡面,呼叫 Views 的時候,如底下程式碼:
$data = array(
"title" => "Welcome to Test"
);
$this->load->view("header");
$this->load->view("welcome", $data);
$this->load->view("footer");大家可以發現只要任何一個 Controller 的函式都必須寫上面的程式碼,這樣是不是重複率太高了呢?在CodeIgniter Wiki 裡面發現一個不錯用的簡易 layout library,他的作法就是利用 $this->load->view 裡面的第三個參數來達成,可以參考線上文件 - Views 最後一個段落 Returning views as data,我們參考看看底下官網提供的程式碼:
obj =& get_instance();
$this->layout = $layout;
}
function setLayout($layout)
{
$this->layout = $layout;
}
function view($view, $data=null, $return=false)
{
$loadedData = array();
$loadedData['content_for_layout'] = $this->obj->load->view($view,$data,true);
if($return)
{
$output = $this->obj->load->view($this->layout, $loadedData, true);
return $output;
}
else
{
$this->obj->load->view($this->layout, $loadedData, false);
}
}
}
?> 注意裡面制定了 layout_main.php 這個 Template PHP 檔案,所以大家需要在application/views 資料夾產生此檔案,或者是可以透過程式 setLayout 函式去修改,至於我們怎麼傳變數到 Template 裡面呢,作者的作法是建立一個 config 檔案,裡面把不會變動的變數都寫在裡面,比如說是網站 site_name site_description site_keywords 等資料寫到 application/config/site_settings.php,接下來修改 layout library 裡面的 view function:
[Read More]用 git 指令產生 Change log 格式
Git 真的是一套非常好用的版本控制工具,在網路上看到一篇 Making a Changelog from Git commit messages 裡面提到一篇新手必看的 git branch model,剛好這篇我也寫了中文解說的部份『Git 版本控制 branch model 分支模組基本介紹』,回歸正題,此篇是介紹如何用 git 指令產生 Change log 檔案,平常 Change log 都會寫成類似底下的 format:
- Add Chinese Traditional language file - Changed to use count_all_results. - Added permissions checking to activation in example controller. - Fixed an example in the userguide - changed phrases to more typical ones在 git log 裡面寫了很多 commit message 該如何 format 成上面的格式呢,其實很簡單,只要打入下面指令
# #--no-merges: 不要秀出 merge message #--pretty=format:' - %s' : 關鍵 format git log --no-merges --pretty=format:' - %s'另外我們還可以透過 --graph 顯示圖形式的 log 顯示,指令如下:
git log --graph --pretty=format:'%s - %Cred%h%Creset %Cgreen(%cr)%Creset %an' --abbrev-commit --date=relative顯示結果如下
* Add Chinese Traditional language file - 1767c60 (4 months ago) Bo-Yi Wu * Changed to use count_all_results. - 906d101 (4 months ago) Ben Edmunds * Merge branch 'master' of https://github.com/Kohtason/CodeIgniter-Ion-Auth into Kohtason-master - 599188d (4 months ago) B en Edmunds |\ | * Fixed an example in the userguide - 65b0e05 (4 months ago) Sven Lueckenbach | * changed phrases to more typical ones - 1941831 (4 months ago) Sven Lueckenbach | * added ability to get usercount - b404fc3 (4 months ago) Kohtason | * added ability to get usercount - b51e801 (4 months ago) Kohtason | * added ability to get user-count - 11a85da (4 months ago) Kohtason * | Added permissions checking to activation in example controller. Fixed bug in activation method in model. (via Phil Gyford) - c9ff 467 (4 months ago) Ben Edmunds不多說,補一張圖,讓大家看看
How to write Platform Devices and Drivers with FPGA via GPMC
這投影片是我在接手公司其中一個專案,所做的 Slide,當然最主要是深入了解 GPMC (General Purpose Memory Control),GPMC 本來是ARM 用來跟 Memory 溝通的 interface,現在用來跟 FPGA 溝通,目前我只有看到
TI 的線上文件有看到相關說明,以及解釋 GPMC 的 Program Model,在寫 GPMC 之前請先注意 Platform Device 跟 Platform Driver 的關係,之後才會開始設定 GPMC Config(1~7) 的設定檔,這樣拿示波器就可以看到 GPMC Chip Select 訊號,每個 ARM 只能接 8 個 Chip Select,這點大家必須注意,Flash 會用掉一個,在這專案學到蠻多東西,畢竟 Driver 這塊非常大,之前寫 G-Sensor 的 i2c Driver 也是如此。此 Slide 只是初步介紹,更詳細的就要實際撰寫程式碼了。
好用 PHP debug extension Xdebug on FreeBSD 安裝
FirePHP 這套好用的 PHP Debug 工具,也寫了一篇針對 CodeIgniter 的安裝方式,請參考: [PHP] 好用 Debug PHP 工具 FirePHP for FireFox on CodeIgniter,今天要介紹一套好用的 PHP debug Extension: Xdebug 的安裝方式,作者環境是在 FreeBSD 上,Windows 安裝方式就到官方網站下載對應的 PHP Windows binaries,目前在 FreeBSD ports 上面的版本是 2.1.0,但是 Xdebug 作者已經更新到 2.1.1,自己就順手發了一個 patch 157677 給 FreeBSD 官方 ports 去 update。
FreeBSD 安裝步驟
# cd /usr/ports/devel/php-xdebug # make install clean設定
/usr/local/etc/php/extensions.ini 檔案後面加入
extension=xdebug.so設定
/usr/local/etc/php/php.ini 檔案後面加入
[Read More]



