Apache SSL on Windows

新版的Apache Windows 版最近加上了 SSL 支援,建立憑證的方法跟在 Linux 下一樣,需要的話可以參考:鳥哥的Linux私房菜:建立 SSL (https) 網站
指令大致都一樣,只有一點點不同:

cd "C:\Program Files\Apache Group\Apache2\conf"
mkdir ssl.key
..\bin\openssl genrsa -out ssl.key\server.key 1024
mkdir ssl.crt
..\bin\openssl req -new -x509 -key ssl.key\server.key -out ssl.crt\server.crt -config .\openssl.cnf

接著修改你的 httpd.conf/mod_ssl.conf ,修改完成以後,重新安裝 Apache 到”服務”裡面去:

..\bin\apache -k stop
..\bin\apache -k uninstall
..\bin\apache -D SSL -k install

接著重新啟動,就完成了。

..\bin\apache -k  start

Vim folding

今天無聊把玩Vim的 :help,想起了以前有試過,但忘記的功能 – folding~
可是跟以前記得的用法好像不太一樣,總之,現在的用法很簡單:

set foldmethod=syntax

(PythonBoo的話,可以用

set foldmethod=indent

這樣就行了。其他的用法請參考 :help。)
你會看到Vim已經依照語法自動幫你把相關的 function/class 都折疊起來了。
接著就可以用 zo 打開,zc 關閉,zO 打開目前 folding 裡面的所有 folding,zC 則是關閉目前 folding 裡面的所有 folding~

如何使用 Box.Net API?

當然,已經有人開發好 Library 的話,那麼直接使用是最快的。
所以第一步就是上 Box Enabled – Sources 看看,是否有合用的。
目前已經有 PHP、Python、Action Script 3 的版本可以使用。
找不到的話,第二步就是去 Box Enabled – Projects 找找看是否有人正在寫。
再不成,那麼就是要自己寫了。
官方的文件其實相當齊全,你可以參考Box Enabled – Documents
你有三種方式可以存取:SOAP、XML POST、REST
我這裡以REST來舉例:

  1. 取得 API key:你得先註冊成 developer,建立你的 project,才能取得 API Key。
  2. 要使用任何功能前,你必須先取得 Ticket,訪問 http://www.box.net/api/1.0/rest?action=get_ticket&api_key=your_api_key (your_api_key請自行帶入),Parse 收到的XML,取得 ticket,這裡有輸出結果的範例。
  3. 利用 Ticket 進行 login,這個動作實際上就是 POST 這些資訊
    dologin=1
    __login=1
    login=your_email
    password=your_password

    到 http://www.box.net/api/1.0/auth/your_ticket 這個網址去。

  4. 取得 auth_token:登入完成以後,就可以訪問 http://www.box.net/api/1.0/rest?action=get_auth_token&api_key=your_api_key&ticket=your_ticket,再 Parse 收到的 XML,取得 auth_token,同樣地,這兒有很好的釋例。
  5. 拿到的 auth_token,接下來想幹麼就可以幹麼了。例如,上傳檔案,你只要 POST 檔案(your_file)到 post 到 http://upload.box.net/api/upload/your_auth_token/your_file 就可以了。

事實上,有 SOAP (就是Web Service)的話,在某些語言來說,是很方便的,例如 .Net 就可以直接利用 Add web reference 或是利用 wsdl 指令列工具來產生代碼:wsdl /language:cs http://box.net/api/1.0/soap?wsdl …

About Box.Net

Box.Net是這兩年來蠻紅火的一個網路硬碟服務,特色是夠大:1G,而且可以分享。
為什麼會知道這個,是因為以前同學的介紹,當時我還以為他家裏要開站呢~結果才發現是Box.Net,也因此開始使用,不過實在用的不多。
最近想到可以拿這個東西來作備份,於是上Box.Net看看,發現有For Deveoper的 API,看了一看,用的軟體還真不少,像是FireUploader…等等。不過好像沒有適當的 library ?於是決定自己看Documentation來幹一個,語言就用最近看到的Boo吧~
於是就申請了專案:BooBoxNet,也去 Google code開了專案:BooBoxNet,浩浩蕩蕩的開始。今天終於有了點成果,再次回到官方網站,卻發現已經有Library了?!這還真是尷尬…算了,反正都寫了,也沒打算寫很大,能作簡單的 Upload、刪除就行了~這幾天應該就可以完工了。

svk

本想利用 svkCastleProject 拉(Mirror/Sync)下來,然後在官方還沒修正之前,先在本地端作一些小修正,然後自己用的。不過,在 Windows 上,不管是拉全部還是只拉 HEAD 都失敗,只好殘念。
而用我的 Ubuntu Notebook 卻是 ok,我猜應該是 perl library / svk 在 Windows 上有些問題。本想試著用 cygwin + perl + svk,可是卻安裝失敗,懶得繼續試了。
雖然結果是失敗,可是 svk 仍然是個好物。我個人想到兩種情況,svk會特別好用(這也是官方所推薦的幾種用法之二):

  • 出差,畢竟出門在外不一定都會有網路,而且也不一定能連到公司的 Repository server,這時就可以拉 code 到 Notebook,然後在 Notebook 上作版本控制,等到回公司了,再把 code 推回去公司的 Repository server。
  • 專案內使用了某 Open source,通常 Open source 專案會不時變動,開發時期會需要固定一個版本下來,這時候就可以拉一份下來作管理,到時候可以很容易釐清是哪裡的問題

基本上整個用法都跟 Subversion 很接近,所以應該不用多作介紹吧~這邊列出幾篇文章作為參考:

目前在 Linux 下,除了可以拉 Subversion 的 code 之外,也可以拉 PerforceCVS 的 code(資料來自Wikipedia)…可說是好用的不得了~(在 Windows 的話,就別說了,2.0.0-1 只支援 Subversion…)

在 Windows 下 build php 的方法

幾個月前嘗試著要自己重新 build PHP

其實方法都可以在原始碼解開以後的 README.WIN32-BUILD-SYSTEM 裡面找到。這裡只是算是一些小補充而已。
不過,我最後的結果是失敗,好像還缺了些東西,後來也沒有繼續試,這邊還是先記錄下來,有機會繼續嘗試。

  1. 下載官方提供的原始碼壓縮檔。
  2. 解開,請先看過 README.WIN32-BUILD-SYSTEM 一遍,這會是很好的指引。
  3. 安裝以下東西:
    • Visual Studio 6 或 Visual Studio 2003
    • Platform SDK
    • 官方提供的 win32build.zip
    • 其他必要的 library(自己參考說明吧)
  4. 打開 Command Prompt,切換到解壓以後的目錄下。輸入 buildconf 並按下 enter。
  5. 解開 win32build.zip。
  6. 設定環境變數:
    set lib=win32build_unzipped_directory\lib
    set include=win32build_unzipped_directory\include
    set path=%path%;win32build_unzipped_directory\bin
    

    接著再執行 C:\Program Files\Microsoft Platform SDK\setenv.cmd。

    "C:\Program Files\Microsoft Platform SDK\setenv.cmd" /2000

    "C:\Program Files\Microsoft Platform SDK\setenv.cmd" /xp32
    
  7. 進行設定,這會產生 Makefile。
    cscript /nologo configure.js --disable-ipv6 --disable-fastcgi --enable-cli-win32 --disable-calendar --disable-filter --disable-ftp --disable-zlib --without-wddx --without-xml --disable-xmlreader --disable-xmlwriter --without-dom --without-simplexml --without-gd --without-t1lib --disable-ctype --without-iconv --disable-bcmath --disable-com-dotnet --disable-json
  8. 執行 nmake,應該就會大功告成。

Regular expression 是貪婪的

前兩天才赫然發現,自己完全忽略了這個特性,導致結果完全不是我所預期…
這個特性就是貪婪(請參考:一輩子受用的 Regular Expressions — 兼談另類的電腦學習態度)。
所以當你想要利用這個式子:\<title\>(?<titleStr>.*)\</title\> 去這堆文字: <title>AAA</title>…other tags…<title>BB</title> 取得每對 <title>…</title> 裡面的文字時,實際上只得到一個結果,內容是 AAA</title>…other tags…<title>BB
>_< 這下該怎麼辦?
我想到幾種方式:

  • 取得每個 <title> 的位置,然後再利用 String.IndexOf 去搜尋 </title>,取得位置之後,就可以取得<title>…</title> 裡面的文字。
  • 分別用 Regular Expression 取得<title>與</title>的位置,然後再依據結果,去取裡面的字串。

希望是能有更好的解~