CodeIgniter REST Server with Backbone.js Issue

CodeIgniter
如果有在用

CodeIgniter 來當作 REST Server 的朋友們,我相信都會找到 philsturgeon 所寫的 codeigniter-restserver,此套件幫你完成底層 API Response 動作,讓你可以輕易處理 REST URL。但是如果拿這套程式碼來搭配 Backbone.js 你會遇到拿不到 POST 或 PUT 變數問題,作者來一一描述。

[Read More]

CSS Clear Fix 小技巧

記的之前 evenwu 為了找尋外包 CSS 人才,出了一份考題,有提供上機考,真是佛心來的,還給用 Inspector 或上網。其中一題就是 第二題、如果一個X元素內的子元素通通 float: left 請問X元素本身會有什麼狀況?如果我要在X元素內下背景,卻沒有顯示,請問如何解決? 解決方式就是實作本身 clearfix,或者是在元素後加上 clear: both 的標籤,大概就是底下的樣子 如果是要在 container 實作 clearfix,就必須透過 css before 和 after。 .clearfix { *zoom: 1; } .clearfix:before, .clearfix:after { content: ""; display: table; line-height: 0; } .clearfix:after { clear: both; } SASS 版本 .clearfix { *zoom: 1; &:before, &:after { display: table; content: ""; line-height: 0; } &:after { clear: both; } } 這樣只要在任何 element 加上 clearfix css 就可以了,支援瀏覽器版版: Firefox 3. [Read More]

Nginx 搭配 Laravel PHP Framework 設定

Laravel PHP Framework
筆記在

Nginx 設定 Laravel 專案,現在的 PHP Framework 都將 query string 整個導向首頁 index.php,就拿 CodeIgniter 來說,在 Apache 只要設定

RewriteEngine on
RewriteBase /
RewriteCond $1 !^(index\.php|images|robots\.txt|$)
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
在 Nginx 內只要透過

try_files 即可

location / {
    try_files $uri $uri/ /index.php
}
正常來說 Laravel 直接用上面的設定即可,但是我發現在 $_GET 這全域變數會拿到空值,解法也很簡單,在 Nginx 將 query string 變數帶到 index.php 後面即可
location / {
    try_files $uri $uri/ /index.php?$query_string;
}

Postfix mailbox 設定

此篇不會講太多 Postfix 的設定,只是紀錄如何設定 Postfix mailbox。Postfix 提供兩種 E-mail 儲存格式,一種就是將全部的 mail 都寫到同一個檔案,此方式是 Postfix 裝好後預設的模式,另外的就是一封 E-mail 一個檔案,這兩者各有優缺點好壞,前者最大的問題就在於如果該檔案壞掉,那使用者的全部 Email 就消失了,所以個人比較偏好後面方式,最主要最近裝按要實做 E-mail Queue 功能,後者才能讓程式好判斷該目錄是否有異動。 Mailbox 如果都不修改任何設定預設裝好 Postfix,就可以看到 /var/spool/mail/ 目錄下有許多使用者檔案,一個使用者一個檔案,當然你也可以將使檔案設定在家目錄裡面。打開 /etc/postfix/main.cf 設定檔,並加入底下設定 home_mailbox = Mailbox 此設定會將原本放在 /var/spool/mail/ 目錄下的檔案都換成 /home/appleboy/Mailbox,注意在 bashrc 請加入 $ export MAIL=~/Mailbox Maildir 如果改成此設定,就會變成一個檔案代表一封 email,請在 /etc/postfix/main.cf 加入底下設定 home_mailbox = Maildir/ 接著取消 MAIL 變數 $ unset MAIL 最後寫入新的變數內容 $ export MAILDIR=~/Maildir 重新啟動 postfix $ /etc/init.d/postfix restart 寄封信測試看看目錄是否有建立: $ echo "This is the message body" | mail -s " [Read More]

Git rebase + stash 小技巧

每天打開電腦,第一件事情就是將專案程式碼更新的最新,以便整合同事新開發的功能,免的跟自己寫的功能衝突,所以最常用用的就是 git pull --rebase origin master,此命令使用 rebase 來取代 merge 程式碼,也可以避免在 log 清單內出現 merge branch master into master 等字樣,但是如果在開發一半進度時,想同時將同事的程式碼先 merge 進來,會發現無法 merge,git 會請你先將 local 修改過的檔案 commit,才可以讓您更新,所以這時候我們可以用 git stash 方式來解決

如果你在 master 分支上,並且想 pull 最新的 commit,可以透過底下指令步驟

1
2
3
git stash --include-untracked
git pull --rebase origin master
git stash pop
[Read More]

Cross Site Request Forgery in JS Web Apps and CodeIgniter PHP Framework

Cross Site Request Forgery 簡稱 CSRF 是網路上最常見的攻擊方式,由於前端的盛行,現在開發網站偏向前後端拆開,前端使用大量的 Javascript 及 CSS3 效果,後端則是使用 PHP, Ruby, Python… 等,前端如何拿到資料庫資料呢,必需透 過 AJAX 方式來存取,常見的後端 API 會設計成 RESTful (GET/PUT/POST/DELETE),後端為了擋住 CSRF 攻擊,所以限定了特殊 Content-Type Header,前端需要帶 application/json 給後端才可以拿到資料,這只能透過 Ajax requests 才可以做到。

[Read More]

Twitter Bootstrap 發佈 3 RC1 版本

今天非常開心看到 Twitter 團隊發佈 Bootstrap 3 RC1 版本,Twitter 這次是大動作的改版,連官網都換掉了,如果你還在使用 2.3.2,Twitter 也提供之前的網站版本,讓使用者可以繼續使用,當然希望各開發者可以盡快轉換到 3 RC1,此版本超過 1600 commits 修正。Twitter 也另外開了 Github Organization,如果要找範例的話,可以到 bootstrap-examples 來看看。另外大家最關心的是效能,底下影片介紹 Bootstrap 3 vs Bootstrap 2.3.2 版本差異。

Coding on workspace of Chrome Developer tools

Google Chrome

相信網頁設計師並不陌生 Chrome DevTools,善用 DevTools 可以減少很多 Debug 時間,今天來介紹如何在 Chrome 瀏覽器上直接編輯程式,並且存檔,重新整理網頁後便可看到結果。聽到這裡大家一定會很好奇,不就開系統編輯器 (sublime, pspad, vim …) 工具,直接修改 => 存檔 => 重新整理嘛?但是這並不稀奇阿,重點是 Chrome 瀏覽器可以直接支援 線上編輯檔案,而不是透過系統工具做編輯。這就是 Chrome 強大的地方,今天就來介紹 Chrome workspace

[Read More]

HAproxy 搭配 Nginx port redirect issue

nginx-logo

HAproxy 是一套高效能分散式系統軟體,後端可搭配 Web 或 SQL 服務,這次在後端搭配 Nginx 出現 port redirect 問題,問題很簡單,在 Haproxy 設定 80 port 對應到內部三台 Nginx 機器,但是 Nginx port 設定 8080,這樣當我們在瀏覽網址如下:

http://aaa.bbb.ccc.ddd/test (請注意,最後沒有 slash 喔) 你會發現 Nginx 將網址轉成

http://aaa.bbb.ccc.ddd:8080/test/ 為了避免 Nginx 自動將 port 加入到網址列,我們可以透過設定 port_in_redirect,Nginx 預設將此設定為 On,所以將此設定為 off,並且重新啟動 Nginx 即可

port_in_redirect off;