發表文章

目前顯示的是 2015的文章

AWS Signature Version 4 (AWS4)

紀錄一下計算Signature的部分. 依序的步驟如下, 便可以計算出 signature. 1) canonical request Canonical_Request = HTTP_Request_Method + '\n' Canonical_URI + '\n' Canonical_Query_String + '\n' Canonical_Headers + '\n' Signed_Headers + '\n' HexEncode(Hash(RequestPayload)) 補充: url & query的部分是需要url encoded, 範例如下: Canonical_URI: encoded => /asustor-test/s3/upload/%E4%BA%BA original => /asustor-test/s3/upload/人) Canonical_Query_String: encoded => delimiter=%2F&prefix=s3%2Fupload%2Ftest%2F original => delimiter=/&prefix=s3/upload/test/) 2) string to sign StringToSign = Algorithm + '\n' RequestDate + '\n' CredentialScope + '\n' Hashed( Canonical_Request )) 補充: RequestDate為ISO8601 Basic format (YYYYMMDD'T'HHMMSS'Z') 3) signing key 這邊主要是把secret access key 和 CredentialScope結合起來計算出signing key. (e.g. Credential Scope為20110909/us-east-1/iam/aws4_request)

pkg-config

編譯package的時候, 總是會看到--pkg-config=PKGCONFIG相關的選項。這邊就稍微研究一下pkg-config。 pkg-config這指令主要是用來搜尋安裝在系統上的libs,透過此指令列出lib的相關訊息。而libs的相關資訊則被記錄在.pc的檔案裡面。 附註: 在cross-compile的時候,編譯好的packages通常不會安裝在系統的預設目錄底下。通常都會放置在我們自訂的目錄。若是想讓pkg-config去搜尋我們放置的目錄,而不是預設的路徑。僅僅只需要修改PKG_CONFIG_PATH即可。 e.g. PKG_CONFIG_PATH=$PKG_CONFIG_PATH : /cross/x64/usr/lib/pkg 這邊以一個foo.pc作為例子,其內容如下: foo.pc: prefix=/usr/local exec_prefix=${prefix} includedir=${prefix}/include libdir=${exec_prefix}/lib Name: foo Description: The foo library Version: 1.0.0 Cflags: -I${includedir}/foo Libs: -L${libdir} -lfoo 相關指令用法如下: # 列出 cflag 以及所需的libs (prefix=/usr 輸出則為-I/usr/include/foo -lfoo) /usr/lib/pkgconfig$ pkg-config --cflags --libs foo -I/usr/local/include/foo -L/usr/local/lib -lfoo # 檢查lib版本 /usr/lib/pkgconfig$ pkg-config --libs "foo >= 1.9" Requested 'foo >= 1.9' but version of foo is 1.0.0 # 測試lib是否存在 (0表示存在;) /usr/lib/pkgconfig$ pkg-config --exists foo; echo $? 0 # 測試lib是否存在,並顯示錯誤訊息 (這對有編譯packa

unicode轉utf-8

在使用C呼叫python模組的時候發生了慘案,模組回傳了"編碼字串" \u4e09\u5929\u4e09\u591c (e.g. "三天三夜"對應"\u4e09\u5929\u4e09\u591c")。為此我只好自行轉換了。 由於系統使用utf-8編碼。所以把根據下表把unicode所在的範圍轉成對應的utf8格式即可。就可以正常顯示囉! UCS-4 編碼 UTF-8 編碼 00000000 - 0000007F 0xxxxxxx 00000080 - 000007FF 110xxxxx 10xxxxxx 00000800 - 0000FFFF 1110xxxx 10xxxxxx 10xxxxxx 00010000 - 001FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 00200000 - 03FFFFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 04000000 - 7FFFFFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx Example #include <stdio.h> int main() { const char *szUniStr = "\u4e09\u5929\u4e09\u591c"; printf("%s\n", szUniStr); const char szUtf8[] = { \ 0xe4, 0xb8, 0x89, \ 0xe5, 0xa4, 0xa9, \ 0xe4, 0xb8, 0x89, \ 0xe5, 0xa4, 0x9c, \ }; printf("