Pix_Table 是由痞客邦自行開發的 PHP ORM。在 4/15 的 OSDC 大會上,我們向開發者們分享了目前內部的使用狀況,並以開放原始碼授權 (BSD License) 釋出。原始碼位於 GitHub 上,歡迎 fork !
以下是當天 Session 的影片錄影:
Updated: 新增投影片
Pix_Table 是由痞客邦自行開發的 PHP ORM。在 4/15 的 OSDC 大會上,我們向開發者們分享了目前內部的使用狀況,並以開放原始碼授權 (BSD License) 釋出。原始碼位於 GitHub 上,歡迎 fork !
以下是當天 Session 的影片錄影:
Updated: 新增投影片
The original version of nginx does not support write HTTP access log to pipe. It was not so flexible for managing logs with cronolog or scribe. The author of nginx (Igor Sysoev) said that the feature will not be in any future version of nginx.
In 2011, The Taobao group in China just released their version of nginx, named Tengine. We take their patch, get the code corresponding to pipe only, and generate a patch file: from Github
You can clone this Branch to compile, too.
Usage:
access_log "pipe:/usr/local/bin/cronolog /data/logs/access-%Y-%m-%d.log" combined
Attention: if the piped program dead, log will be written to the default log file, not re-open the pipe just as Apache. If you use a unstable logger (e.g. log to network), setting another access log file is recommended to avoid the loss of access log.
原本的 nginx 是不支援把 access log 寫到 pipe 的,對於應用 cronolog 來 rotate log 或是 scribe 來收集 log 之類的用途比較不方便。nginx 作者也說了不會增加這個功能。剛好中國大陸的淘寶將他們所使用並且修改過的 nginx 版本(稱作 Tengine)open source,於是整理了一下,只取出跟 pipe 有關的程式,patch 回原本的 nginx (1.0 stable branch) 上。
Patch 可以在 Github 下載。也可以直接把 這個 Branch clone 下來編譯。
使用方法大致如下:
access_log "pipe:/usr/local/bin/cronolog /data/logs/access-%Y-%m-%d.log" combined
如果 pipe 另一端死掉的話,log 會寫入預設的 log file,不會像 Apache 一樣重新開啟新的 pipe。如果使用比較不穩定的 logger,建議另外多設定一個 access_log 到檔案避免 log 遺失。
用 MySQL 開發的時候,如果 collation 選擇 utf8_general_ci,比較字串(使用等號 =)的時候大小寫的不同會被視為一致,但是 SQLite 並不會。解決的方法是加上 COLLATE NOCASE。
可以在 SELECT 的時候把 COLLATE NOCASE 擺在 LIMIT 1 前面:
SQLite version 3.7.7.1 2011-06-28 17:39:05
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> CREATE TABLE `users` (`id`, `user_name`, `email`);
sqlite> INSERT INTO `users` (`id`, `user_name`, `email`) VALUES (1,
'Repeat', 'REPEAT@example.com');
sqlite> INSERT INTO `users` (`id`, `user_name`, `email`) VALUES (2, 'repeattest1', 'repeattest1@example.com');
sqlite> SELECT * FROM `users` WHERE `user_name` = 'repeat';
sqlite> SELECT * FROM `users` WHERE `user_name` = 'Repeat';
1|Repeat|REPEAT@example.com
sqlite> SELECT * FROM `users` WHERE `user_name` = 'REPEAT';
sqlite> SELECT * FROM `users` WHERE `user_name` = 'REPEAT' COLLATE NOCASE;
1|Repeat|REPEAT@example.com
sqlite> SELECT * FROM `users` WHERE `user_name` = 'repeat' COLLATE NOCASE;
1|Repeat|REPEAT@example.com
sqlite> SELECT * FROM `users` WHERE `user_name` = 'repEat' COLLATE NOCASE;
1|Repeat|REPEAT@example.com
sqlite> SELECT * FROM `users` WHERE `user_name` = 'repEat' COLLATE NOCASE LIMIT 1;
1|Repeat|REPEAT@example.com
sqlite> SELECT * FROM `users` WHERE `user_name` = 'repEat' LIMIT 1 COLLATE NOCASE;
另外在 CREATE TABLE 的時候做 COLLATE NOCASE 也可以:
SQLite version 3.7.7.1 2011-06-28 17:39:05
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> CREATE TABLE `users` (`id`, `user_name` TEXT COLLATE NOCASE,`email` TEXT);
sqlite> INSERT INTO `users` (`id`, `user_name`, `email`) VALUES (1, 'Repeat', 'REPEAT@example.com');
sqlite> SELECT * FROM `users` WHERE `user_name` = 'repeat';
1|Repeat|REPEAT@example.com
sqlite> SELECT * FROM `users` WHERE `email` = 'repeat@example.com';
sqlite> SELECT * FROM `users` WHERE `email` = 'REPEAT@example.com';
1|Repeat|REPEAT@example.com
參考資料:http://www.sqlite.org/faq.html#q18
oEmbed 是一個讓第三方站台更方便地顯示網站各種資源的 API,提供 JSON 與 XML 格式,讓第三方網站不需要去 Parse 整個 HTML。例如,給定一個 PIXNET 相片 URL:http://emmademo.pixnet.net/album/photo/467720
會傳回如下的格式:
{
}
範例 API URL: http://api.pixnet.cc/oembed?url=http%3A%2F%2Femmademo.pixnet.net%2Falbum%2Fphoto%2F467720&format=json
目前 YouTube、Wordpress、Flickr 等網站都有支援,痞客邦 PIXNET的相簿、相片、部落格文章也於日前支援了 oEmbed API,但目前暫時不支援指定縮圖(thumbnail)大小的功能。
另外,您可以在支援的 URL 頁面中看到以下的 <link> tag:
<link rel="alternate" type="application/json+oembed" href="http://api.pixnet.cc/oembed?url=http%3A%2F%2Femmademo.pixnet.net%2Falbum%2Fphoto%2F467720&format=json" title="PIXNET oEmbed Profile">
「自訂文章網址」是 PIXNET 痞客邦 部落格最近新增的一項對 SEO 有幫助的功能,對於想要提高部落格搜尋引擎流量的格主來說,可以看這邊的說明來打開這個功能。
什麼是SEO?
SEO(搜尋引擎最佳化)是利用某些方法,讓網頁在搜尋引擎的結果頁中的排名提高,以增加從搜尋引擎來的流量的方式。由於大部分的網路使用者在搜尋的時候,只會點選結果頁中排名前幾名的網站,所以想辦法讓搜尋引擎的排名變好,是一個很好的帶來人氣的方式。
其中,在文章網址加入與文章標題,或是英文標題都是很好的 SEO 方式。
如何在痞客邦部落格中自訂文章網址?
請先至 部落格後台 > 部落格管理 > 基本進階設定 > 進階設定 > 部落格相關設定,找到「文章網址加入標題」的欄位:

您可選擇為
1. 依單篇文章設定:有在單篇文章中設定標題的文章,網址後面才顯示標題。
2. 預設顯示文章標題:所有文章網址後面都顯示該篇文章的標題,您也可自行修改成想要顯示的其他文字。
選完儲存後,發表文章頁面下方即會多出「文章網址」欄位:

按下「編輯」按鈕來編輯您想要顯示在文章網址後面的標題:

1. 於輸入框中自行輸入想顯示的文字。或是
2. 按下「網址帶入文章標題」按鈕,直接將文章標題帶到輸入框中。
待文章發表後,網址後面就會出現你剛剛所設定輸入的文字囉!
前言
Identify and Access Management(後面簡稱IAM)的出現是管理員的一大福音,讓雙A(authentication, authorization)的管理變的簡單又輕鬆,前陣子IAM終於也出現在web console了,大概除了logging之外沒有可挑剃的地方了吧?管理員通常會使用IAM幫你建帳號開權限,然後丟給你AWSAccessKeyId和AWSSecretKey!這組key pair可以讓你透過sdk使用EC2的資源,不過如果只是簡單要launch instance或者describe running instance這些簡單的動作,自已寫code有點麻煩,除此之外還有什麼方法?據我所知有兩種方法:
這兩種方法都各有缺點:
有沒有第三種方法?我直覺想到官方的ec2-api-tools,ec2-api-tools需要X.509憑證,但我們只有key pair,它的cli command沒有key pair的選項,原本以為這條路不通,沒想到只需要轉個彎就可以使用,這個彎簡單說就是管理員必需允許user上傳X.509憑證(UploadSigningCertificate),在這邊介紹第三種方法,也就是本文的主題。
產生X.509憑證
首先需先生出一把rsa private key.
openssl genrsa 2048 -out private-key.pem
然後透過這把private key產生X.509憑證,需要填寫一些資料,不太清楚該欄是幹麻的話可以參考如何填寫憑證申請書
openssl req -new -x509 -nodes -sha1 -days 730 -key private-key.pem -out cert.pem
設定IAMCli
先下載IAMCli
wget http://awsiammedia.s3.amazonaws.com/public/tools/cli/latest/IAMCli.zip
unzip後可以稍微看一下README,把環境變數AWS_IAM_HOME、JAVA_HOME設好,可以把設定加入shell config file可以省去每次都要設的功夫。
unzip IAMCli.zip
export JAVA_HOME=/usr/local/diablo-jd-1.6.0
export AWS_IAM_HOME=<your/IAMCli/path>
把環境變數AWS_CREDENTIAL_FILE指到一個設定檔,該設定檔必需有AWSAcessKeyId和AWSSecretKey,這邊以IAMCli的aws-credential.template為例
cp aws-credential.template ~/.aws-credential
vi .aws-credential #設定AWSAcessKeyId、AWSSecretKey
chmod 600 .aws-credential
export AWS_CREDENTIAL_FILE=~/.aws-credential
上傳憑證
iam-useraddcert -u <user> -f <x509 cert的路徑>
成功後會回傳cert id,這個不用記,後面可以用iam-userlistcerts列出來,iam-userdelcert刪除
設定ec2-api-tools
export EC2_HOME=~/where/to/ec2-api-tools
export EC2_PRIVATE_KEY=<剛剛產生的private key位置>
export EC2_CERT=<剛剛產生的cert位置>
用ec2din測試一下沒問題就okay了
地雷區
Reference