簡易 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
不多說,補一張圖,讓大家看看

git_log

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 安裝

xdebug-logo
之前介紹

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]

busybox iptunnel 噴出錯誤訊息

最近在弄新案子,用的是 Atheros solution (被高通買下),發現 SDK 裡面已經有更新到 Busybox 1.15,由於在建 ipv6 tunnel 時候必須用到 ip 這指令,當然必須支援 iptunnel,當我把 busybox 選項打開就噴出底下錯誤訊息:

busybox-1.01/networking/libiproute/libiproute.a(iptunnel.o):iptunnel.c:(.text+0x574): more undefined references to `__cpu_to_be16’ follow 在 Google 大神指示下找到一篇答案 修改 networking/libiproute/iptunnel.c

#include  
# 後面加上 
#include 

加速開發 CSS 工具: Sass

從來沒想過在開發 Web 網站過程,CSS Style 還可以程式化,設定變數來控制 CSS,今天來介紹一套用 command line 來轉換 CSS 的 Web Framework Plugin: SASS (Sassy CSS),可以參考 SASS 的 Change log 版本差異,目前最新版本 3.0 以後開始支援 CSS3 做開發,底下先來介紹如何安裝: 作者是在 Ubuntu 10.10 的環境下安裝,利用 apt 方式先將環境需要的軟體安裝好

# 安裝 Ruby 環境
 $ sudo apt-get install ruby
 $ sudo apt-get install rake
 $ sudo apt-get install rubygems
Ruby 的安裝只需要一行指令
gem install sass
另外也可以透過 git 方式來安裝
git clone git://github.com/nex3/sass.git
cd sass
rake install
安裝好就會 bin 目錄多出了 sass sass-convert scss 3個指令,如何轉換呢?也相當容易
mv style.css style.scss 
sass --watch style.scss:style.css
style.scss 是您寫的 SASS CSS 檔案 style.css 是您要輸出的檔案名稱 至於如何撰寫 Sass 語法,就請大家參考

線上手冊,文件非常清楚,相信很容易看的懂

版本控制 version control git clean 使用時機

在做公司的每一個案子,我都會使用 git 來做版本控制,雖然公司只有用 svn 控管,但是只要網路掛掉,就不能做任何事情了,更不用說 svn Server 掛點,因為 git 開 branch 免錢,因此每當我拿到新案子就按照 Git 版本控制 branch model 分支模組基本介紹 開了固定幾個 branch,由於剛開始 git init 沒有把 .gitignore 寫好,所以 commit 了一堆 *.o 或者是 *.ko 類似的檔案,我用了 git rm –cached 方式砍了,結果在切換 branch 的時候出現底下錯誤訊息:

error: Untracked working tree file ‘XXXXXXXX’ would be overwritten by merge. 這是因為當你 git rm –cached 檔案之後,切換 branch 時候會遇到衝突,本來的 master 分支還是存在這些檔案阿,因此這時候就要靠 git clean 來清掉移除檔案,可以利用 git help clean 來查看使用手冊。 Ref: Force git to overwrite local files on pull.

git  svn 

Plurk API 2.0 beta 出來了 (OAuth Core 1.0a)

之前 Plurk 剛推出 API 讓大家可以使用,當時蠻多使用者相繼推出各式語言的支援,像是 php-plurk-api: PHP implementation,而我也將此程式改寫到 CodeIgniter-Plurk-API,然而現在官方又推出了 Plurk API 2.0 beta,不同的是 2.0 用了 OAuth 保護個人隱私,它提供了標準讓開發者可以利用 OAuth 實做任何 application,噗浪官網也希望各位開發者可以儘快將 API 轉成 2.0,當然也是要額外註冊 Plurk App。 底下幾點是 API 2.0 跟原來 API 的差異處:

  • Plurk API 2.0 不需要登入作認證,然而原來的 API 是基於 session base 做開發
  • 網址改變,用 http://www.plurk.com/APP/ 取代原來的 http://www.plurk.com/API/
  • 現在每個 Plurk API 2.0 請求都會按照 OAuth Core 1.0a 標準
  • 所有 input/output 參數跟原來都是一樣,只是現在不需要 api_key 在參數里面 大家註冊之後,可以拿到一組 App Key,就可以開始使用了 ^^

快速安裝 Amazon EC2 LAMP 環境 (EC2 Console)

已經紅了一陣子的 Amazon 雲端服務,本篇來介紹如何使用 Amazon EC2 Linux 安裝 LAMP (Linux Apache MySQL PHP) 環境,衝著 Amazon 推出的新玩家註冊開始為期**一年的免費**,當然也是有一些限制條件,可以參考 EC 2 收費標準及介紹,底下這圖片就是一年內免費的方案,其實對於剛學習 Linux 的玩家而言相當足夠。 AWS Free Usage Tier 如何設定及註冊 Amazon EC2 可以參考底下連結教學: 什麼是雲端服務?阿正老師教你免費玩Amazon EC2雲端主機!(上篇) 阿正老師教你免費玩Amazon EC2雲端主機(下篇):主機實戰篇 看完這兩篇大概對於 Amazon 有一定程度的瞭解,接下來就是如何進入玩家們所安裝好的 Amazon Linux 主機,由於 EC 2 的服務主機會常常自動更新 IP,剛開始可以到 Console 看到底下 public DNS: AWS Management Console 不過這 DNS IP 都會常常更新,所以剛開始都要常常來這邊看,玩家們可以用剛剛註冊此機器的 mykey.pem 透過 ssh 的方式登入機器,底下是在 Ubuntu 的操作

1. 先設定檔案權限,請將檔案權限改成 400
chmod 400 mykey.pem
2. 透過 ssh 軟體 pietty (上面阿正老師連結有教學)或 Linux ssh 指令
ssh -i mykey.pem ec2-user@ec2-XXXXXX.compute-1.amazonaws.com
進去主機之後就是一般的 Linux 操作,可以參考

鳥哥的Linux 私房菜,當然我想玩家們都會發現一直透過 mykey.pem 登入會有點麻煩,而且假設 pem 檔案消失,又要去 Console 申請一次,所以底下教大家如何不必透過 mykey.pem 方式登入,其實也很容易,就是修改 /etc/ssh/sshd_config

[Read More]

PHP curl error: SSL certificate problem, verify that the CA cert is OK

之前在 CodeIgniter 寫了 CodeIgniter-Google-URL-Shortener-API 縮短網址的 goo.gl API Library,也在國外 CodeIgniter 論壇發表了一篇,不過在論壇有人回覆安裝好之後不能使用,會直接噴出底下錯誤訊息:

Severity: Notice Message: Trying to get property of non-object Filename: controllers/google_url.php Line Number: 24 之後我在 Windows 利用 Appserv 架設好這環境,發現是同樣問題,但是在 FreeBSDUbuntu 上面都不會出現這錯誤訊息,接著在程式馬上面看看 curl 吐出什麼資料:

Curl error: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 把這錯誤訊息拿去 Google 發現到這篇解法 Curl: SSL certificate problem, verify that the CA cert is OK,只要跳過驗證憑證就可以了

curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
可以參考

PHP 官方 curl_setopt 的設定說明。