利用 cpanm 的資料計算 Perl 版本分佈狀況...

如標題 :p 只拿 cpanm 分析一定會有偏差,所以數字參考看看就好:「Perl versions usage stats (with cpanm)」。

Perl 其中一個討厭的問題是版本太多了... 不是官方說 EoL 就可以 EoL 啊 :/

如果要自己寫 TOTP 的幾個要看的東西...

整理下來:

有玩過 HMAC 的人,讀這些文件應該不難...

TOTP 在預設的情況下,其實就是 HMAC-SHA-1 後取後面 32bits,然後轉成數字取 100000 的餘數,而 TOTP 文件是架構在 HOTP 的定義上,把時間切齊 (預設 30secs) 變成整數丟進去攪和,然後特地交代要處理 2038 年超過 Int32 的 case XDDD

最後 Google 那份文件是要輸出 QR code 讓手機可以讀的方式,建議不要用網路服務產生 QR code (因為有 secret key 啊),寧可自己抓 library 建一個用...

另外 Google Authenticator 一堆東西都只能用預設值 (Currently, the XXX is ignored by the Google Authenticator implementations.),所以也沒什麼好選的,就拿預設值吧... :o

Server side 的話,至少我在 CPAN 上面看到 Authen-OATH 可以用了,用起來也很簡單 :o

CPAN 官方支援 Syntax Highlighter...

剛剛看到 CPAN 網站上直接由官方支援 Syntax Highlighter:Syntax highlighting for search.cpan.org,雖然目前的 UI 做的並不太好 (選擇 theme 的選擇條應該是上下都要有,目前只有最下方),但仍然是進步不少...

之前的 Greasemonkey script 在 Firefox 4.0 上爛掉 (因為 async loading 的關係),本來還在想要怎麼處理,現在看起來就用官方提供的就好了...

非 root 環境下的 App::perlbrew 與 App::cpanminus

跟 gugod 討論後發現我之前所寫的方式有問題,所以重寫一篇...

首先是安裝 App::perlbrew 的方式:

wget --no-check-certificate http://xrl.us/perlbrew
chmod a+x perlbrew
./perlbrew install
./perlbrew init

這樣在自己的目錄下就會有 perlbrew 了,接下來是設定環境變數:

source ~/perl5/perlbrew/etc/cshrc # (for csh/tcsh)
source ~/perl5/perlbrew/etc/bashrc # (for bash)

並將自己的 ~/.cshrc 或是 ~/.bashrc 裡加入上面的 source 指令。

原來下載的 perlbrew 就可以砍掉了,然後把 Perl 5.12.3 的環境建好:

rm perlbrew
perlbrew install perl-5.12.3
perlbrew switch perl-5.12.3

接著是用 App::cpanminus (standalone) 安裝 App::cpanminus (套件):

wget --no-check-certificate -O cpanm http://cpanmin.us/
chmod a+x cpanm
./cpanm -n App::cpanminus

然後一樣把下載下來的 cpanm 砍掉:

rm cpanm

這樣可以在不碰到「CPAN」這個大模組的情況下,把基本的系統裝好...

用 Dist::Zilla 管理 Perl Module...

之前寫過一篇「產生 Perl Module 的工具:Module::Starter」是用 Module::Starter 管理,另外再配合其他工具上傳到 CPAN 上。前陣子在 GitHub 上亂逛的時候看到有人 Perl module 裡面只有一個 dist.iniChanges,另外就是 lib/t/,就感覺到應該是我要的東西 XD 花了一些時間測試後發現功能不多,但對於初期應該足夠了,等到熟悉後再跳到功能比較完整的管理軟體...

首先先用 dzil setup 設定環境,如果有 PAUSE 帳號的話也能夠整合進去。設定完後記得將 ~/.dzil/ 設為 700,裡面的檔案設為 600。

接下來就是建立模組,像是 dzil new Plack::Middleware::HTMLMinify 這樣的指令。建好後就把 module 寫完,然後設定 dist.ini。(文件上的說明應該夠用)

接下來可以用 dzil build 編,或是用 dzil test 測試。沒問題之後用 dzil release 上傳到 PAUSE。

基本的功能大概就這樣...

Updatedist.ini 的範例可以在 plack-middleware-htmlminify-perl 的 repository 裡看到。

用 App::perlbrew + App::cpanminus 安裝自己的 Perl 環境

Ubuntu 上系統內建的 Perl 是 5.10.1,而且系統內建的 Perl module 有時會與自己裝的衝到,於是就找了一下要怎麼產生獨立環境的方法... 結果發現 gugod 早就把細節都包好 XD

首先是用系統的 cpan 安裝 App::perlbrew

cpan App::perlbrew

因為我不打算繼續用之前透過 App::cpanminus (cpanm) 裝的 module,所以我把 ~/perl5 全砍了再跑下一步,也就是初始化 perlbrew 環境:(如果是 csh/tcsh 使用者,記得先下 rehash 清 cache)

perlbrew init

然後安裝 Perl 5.12.3:

perlbrew install perl-5.12.3

如果安裝失敗的話,可以看 build log。我在 FreeBSD 上遇過 test fail 的情形,可以直接強制安裝,大家就自己看著辦 XD

接下來是切換過去:

perlbrew switch perl-5.12.3

然後把 .cshrc 或是 .bashrc 加上對應的設定:

source ${HOME}/perl5/perlbrew/etc/cshrc

或是:

source ${HOME}/perl5/perlbrew/etc/bashrc

然後重新登入 (或是執行 source 那串,讓設定檔生效),接下來就可以用 cpan 指令裝 App::cpanminus 了。

另外,可以參考這些文章:

將 search.cpan.org 的 source 部份加上 SyntaxHighlighter

在「CPAN 的 Greasemonkey 工具…」這邊提到打算寫一個 Greasemonkey script,將 CPAN 上面的 source code 部份加上 syntax highlight,因為有不少現成的 Highlighter 是 javascript-based,所以程式只要套一套就可以了...

Greasemonkey 的程式在這:「CPAN Syntax Highlight」。

使用前:

使用後:

CPAN 的 Greasemonkey 工具...

Userscripts.org 翻一些工具,發現有些 script 看起來還蠻有趣的。像是「CPAN Search Dependents」會在搜尋頁列出模組的 dependency 數量。

不過,用過以後發現他的優點是可以先在搜尋頁看出來有哪些 module,至於 script 本來做的事情 (計算 dependency 的數量) 反而不是重點...

等下來寫個可以把 Syntax Highlight 加進去的工具,看了一下 CPAN 的頁面,操作這些 DOM element 應該不難...

在 Debian 上使用 CPAN 時要如何與系統的 lib*-perl 合作...

因為對 FreeBSD 還算熟悉,所以在 FreeBSD 上遇到 Ports 內沒有的 CPAN module,我會做一個新的 port 出來 send-pr,但對於 Debian 的熟悉度沒有 FreeBSD 高,想了老半天想不到什麼好方法,在 #perl.tw 上問了這個問題,不過還是沒有滿意的答案...

然後想到,在 Stack Overflow 上面說不定有人問過,丟一些關鍵字後有兩筆相關討論可以參考:(至少是可行的解法)

有人是建議自己 compile 一個 Perl 出來裝到 /usr/local 下 (於是就可以惡搞到底),有的人則是建議用 dh-make-perl 做 .deb 出來用,但還是會有很多問題...

再想看看好了,真麻煩...