Month: January 2014

Detect Browser Language in PHP

Posted by – January 28, 2014

最近某個已經上線的專案新增了製作多國語系介面的需求,流程上打算用 PHP 來偵測使用者瀏覽器的語言設定。

Firefox Language Preference More

Set the Primary Display on a Dual-Screen Mac Setup

Posted by – January 22, 2014

多螢幕的作業環境非常方便,以前在當文字編譯的時候,因為公司提供每人兩台螢幕,那時候第一次感受到多螢幕對工作效率的提升非常顯著。
這次則是購入了 Dell U2414H 螢幕來作為第二螢幕。接上 Mac mini 後,一時想不起來怎麼設定 Mac OS 的主要螢幕。摸索了一陣才想起來這個設定藏在一個很難發掘的地方。

原來是在 System Preferences... > Displays > Arrangement。

然後拉那條白色的 bar,移到另一個螢幕就是設定主螢幕了。就醬,一點都不難,但是因為沒有提示,少用就忘記了。

mac_os_x_set_primary_screen

 

Create Google API Keys

Posted by – January 21, 2014

最近某專案對於第三方 API 有相當多需求,我負責處理其中三個.... Google, Twitter, Yahoo...
不過我好久沒接 Google API 了,又重看了一下文件。簡單筆記一下。

要使用 Google API 要申 Google 申請授權,並取得相關的金鑰 (Key),首先到 Google API Console 登入。

google_api_console

More

Force SSL/https using mod_rewrite or PHP

Posted by – January 17, 2014

工作需求,要幫某網站全部轉為 HTTPS 加密傳輸。

有兩種方法,一是透過 .htaccess,二是用 PHP 來處理。

用 .htaccess 處理的方式如下

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

用 PHP 來處理:

if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') {
    if(!headers_sent()) {
        header("Status: 301 Moved Permanently");
        header(sprintf(
            'Location: https://%s%s',
            $_SERVER['HTTP_HOST'],
            $_SERVER['REQUEST_URI']
        ));
        exit();
    }
}

個人比較偏好用 .htaccess 來處理。不過若是沒有全部頁面都需要的話,PHP 比較方便。

 

Check if PHP session has already started

Posted by – January 16, 2014

用 PHP 寫系統基本上躲不掉 session 相關的一系列問題的。因為個人偏好 CodeIgniter,所以很多時候用 Session Library 或是開源的 Native Session Library 就可以避開一些煩瑣的麻煩。

不過很多時候碰到沒有使用 framework 當基礎,直接用 PHP 開發的專案時,程式碼裡 "充斥" 著 session_start() 也是非常普遍的事情,接著就會一直在 error_log 裡看到這樣的訊息:

PHP Notice:  A session had already been started

看了有夠礙眼,也讓人覺得很不專業。

其實這問題是可以避免的。只要在宣告前檢查是否啟動就好。

isset($_SESSION) or session_start();

如果使用的是 PHP 5.4 以上的版面,還有更可靠的寫法。

(session_status() !== PHP_SESSION_ACTIVE) or session_start();

乾乾淨淨的是 error_log 才是開發者的王道。

Mac OS X VPN 設定

Posted by – January 16, 2014

工作的關係常要跑到客戶那邊處理一些有的沒的,從外面要連回公司要用 VPN 連線。

前些時候把 Macbook Pro 洗白白重灌 Mavericks 後,覺得 VPN 就怪怪的,顯示的 IP 都不是公司的 IP。

找了一下設定,原來是少勾了一個選項。
先打開網路設定,進入 VPN 的畫面,點選右下方的 [Advanced...]。

mac_os_x_vpn_setting_step_1

More

Get the markup of an element, including itself using jQuery

Posted by – January 6, 2014

接手同事的 code,需要接續 AJAX 的資料對前端頁面進行更動。

假設一段 html code 如下:

<div id="container" class="wrapper">
 <div id="one">test 1 </div>
 <div id="two">test 2 </div>
 <div id="three">test 3 </div>
 <div id="four">test 4 </div>
</div>

以下 jQuery 語法可以其得其中的 html 元素:

$('#container').html();

不過卻不包含 <div id="container"> 本身,如果要取得包含自身的 html,應改為如下:

$('#container').get(0).outerHTML;

注意不論是取 $('.wrapper') 還是 $('#container') 都要用 get(0) 指定 DOM 元素。

Regex Golf:挑戰自己對 Regex 的自信

Posted by – January 6, 2014

在網路上逛到一個有趣的挑戰網頁,內容是各式各樣的 Regex (正規表達式) 考題,看看你能得到多高的分數。

如下圖,左邊的字串是要符合的,右邊的字是要排除的。用越短的表達式答題可以得到更高的分數。按 Enter 就進入下一題。

Regex Golf

照順序玩下來,第四題 Backrefs 就覺得困難了啊... Orz

http://regex.alf.nu/

Disable Cache for PHP 5.5.3 in MAMP

Posted by – January 3, 2014

前些時間接手一個已經上線的案子,進行改版作業。從 Git 上把 code 拉下來,執行一下就... 爆了。發現同事用了相當新的 PHP 語法。我本機的開發環境是 PHP 5.2.x,無法執行。

馬上想到 MAMP 可以切換成新的版本,切換成 5.5.3 問題就解決了。

MAMP PHP version switch More

Installing node.js on OSX 10.9 Mavericks

Posted by – January 2, 2014

除了 LAMP 外,一直想學點新把戲。2014 年的第二天,終於把工作告一段落,偷閒來看一下 AngularJS 的教學。沒想到教學文件是基於 node.js 執行的。

不過以前在 Mac OS X 上安裝 node.js 還挺麻煩的。沒想到跑去 node.js 網站上一看,居然已經有 node 和 npm 包在一起的 pkg 安裝包了,真是佛心。所以安裝完全無痛啊!

NodeJS Official Site More