[信用卡] 外幣消費回饋

January 22nd, 2015

外幣消費信用卡

元大鑽金

華南旅鑽

台新白金商務

台新昇恆昌

台企銀鈦金商務

合庫商務御璽

兆豐利多商務

Error: pg_config executable not found.

December 28th, 2014

當使用pip安裝psycopg2遇到了以下錯誤

    Error: pg_config executable not found.
    Please add the directory containing pg_config to the PATH
    or specify the full executable path with the option:
        python setup.py build_ext –pg-config /path/to/pg_config build …
    or with the pg_config option in ‘setup.cfg’.
    Complete output from command python setup.py egg_info:
    running egg_info

如果是用brew管理套件,可以安裝postgresql解決。
brew install postgresql

接著可能需要
ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
可以讓系統啟動時啟動postgresql

如果需要馬上啟動,launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

如果不想加入系統啟動清單,單次執行,postgres -D /usr/local/var/postgres

另外有個應用程式可以安裝,不用打指令,http://postgresapp.com 。

change default shell

August 19th, 2014

Mac OS X預先安裝的bash版本是 3.2.x,已經是非常老舊的版本了,很多 linux的預載版本都已經是 4.1以上,建議是使用 brew 安裝新版的 bash。

`brew install bash`
會安裝到 /usr/local/bin/ 下

可檢查 $BASH_VERSION 變數,確認版本

如果要更改系統預設的 login shell,需把shell location 加到 /etc/shells 裏,可以直接 sudo vim或是 echo ‘/usr/local/bin/bash’ >> /etc/shells

之後再執行 chsh 就可以更改自己登入後的預設shell了

update forked github repo

July 31st, 2014

Github 很方便的一點就是可以盡量fork自己會用到的library到自己的帳號下,也可以在這些forked repository 之下寫自己的模組。但是github上的 repo是不會自動從原本的repo拉更新。

有兩種做法,第一種是自己打 git command,另一種直接在github頁面上操作。

1. git command
以 yui3 為例,原始的repo 是在 https://github.com/yui/yui3 。

$ git remote add upstream https://github.com/yui/yui3.git
# add the remote named upstream
$ git fetch upstream
# fetch the latest version
$ git rebase upstream/master
# rebase local changes onto upstream/master

$ git push origin master
# push to forked repo

2. 直接在github web介面操作
在自己的帳號下,選擇 ‘pull requests’。
點 ‘new pull request’,這時會出現 ‘There isn’t anything to compare.’
選擇’switching the base’,以forked repo做為比較基底
以此建立 pull request,在建立成功後自己merge,這樣就會把 original repo的更新merge到自己fork的repo了。

homebrew error after upgrading to Mac OS X Yosemite

July 29th, 2014

Yosemite is still in preview, everyone could join beta program and play with it.

我剛好就把 OS 升上 10.10,但遇到homebrew出現錯誤訊息。

/usr/local/bin/brew: /usr/local/Library/brew.rb: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby: bad interpreter: No such file or directory
/usr/local/bin/brew: line 26: /usr/local/Library/brew.rb: Undefined error: 0 

解法是

1. 安裝 xcode 6, (beta version)
2. 安裝 command line tool

    xcode-select –install

3. 重新安裝 homebrew

ruby -e “$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)”

4. 安裝完成記得 brew doctor檢查一下

Hide php from user

July 22nd, 2014

為了安全性的理由,我們儘量不想讓網頁的副檔名出現在url內,也就是儘量不讓外界得知 uri 的實際檔案形態,例如 https://www.google.com.tw/?#q=obj 就完全把負責處理的檔案名稱隱藏了。

php.net 上有說明頁面,可用的php ini
expose_php = off

或是
AddType application/x-httpd-php .asp .py .pl
此為偽裝php 為其他script lang

AddType application/x-httpd-php .htm .html
此為偽裝php 為靜態html 頁面

除此之外,還有sethandler可用。

      <Directory "$webhome">  
SetHandler application/x-httpd-php
<FilesMatch ".(html|ico|gif|txt|swf|png|xml)">
SetHandler None
</FilesMatch>
</Directory>

Write Cookie in JS level

July 21st, 2014

通常我們寫入cookie是直接使用setrawcookie,當然安全性是個問題,在此先不討論。
setrawcookie有個要注意的事項是他必須在http response出去之前就被呼叫,因為他是header的一部份,因此呼叫setrawcookie時要注意return value,或是自己必須確保呼叫之前沒有任何echo。

如果setcookie所要寫入的值是來自于另一個後端,而且這份資料並不是一定要在header建立cookie,為了不讓這個後端擋住前端機器吐頁面,我們可以讓他inline setup cookie。

sample PHP code
$cookie = array(
    ‘name’          => $name,
    ‘value’         => $value,
    ‘expiration’    => $expiration,
    ‘path’          => $path,
    ‘domain’        => $domain
);

$cookie[‘expiration’] *= 1000;  // from seconds to mileseconds
$config = json_encode($cookie);
$script = <<EOS;
Y.use(‘cookie’, function(Y){
    setcookie = function(config){
        Y.Cookie.set(config.name, config.value, {
            expires: new Date(config.expiration),
            path: config.path,
            domain: config.domain
        });
    };
    setcookie($config);
});
EOS;

echo $script;

讓php準備好要寫入的值(簽核加密等等),再讓簡單的anonymous function寫入。這樣不容易debug,需斟酌。

其中需要注意的是,php 生成的 date() 和 javascript new Date() 的基本單位不同,從 php 傳遞到 js 的時候需要乘以1000。

如果有指定expires time,cookie 就不應該是 session cookie。
Since this cookie is created with all of the default settings, it becomes a session cookie. from YUI