Recently in Perl Category

ActiveState 併購 Phenona

| No Comments | No TrackBacks

ActiveState 是間老牌(十四年前創立)的軟體公司,一直是提供 Perl 與 Python 語言方面的套件與支援的要角,特別是在 Windwos 平台上。最近則是轉進做 PaaS, 目前已有提供開發者嚐鮮的方案,名為 Stackato, 這一套,是基於 CloundFoundry 所實做的。

Phenona 則是間十分年輕的公司,專做 Linux / Perl / MySQL / Redis 等特定方案的 PaaS,才剛創立半年(依創 辨人的說法是想法已經孕釀兩年)就被 ActiveState 併購,將整合進 Stackato 中。

創辨人 Daniil Kulchenko, CPAN ID: dku 無私解釋了 Phenona 的原 理 。整套方案其實是基於 Amazon EC2,並在 EC2 Linux Instance 中再切割 出更小的虛擬主機。所用的技術是 LXC (Linux Container),這是類似 FreeBSD Jail 的 切割方式,並非實際上做出完整虛擬機器,而是切割 OS 裡的 file, process, group, user 等資源存取,達到近似的效果。這也就是為何 Phenona 只支援 Linux 的主要原因。

連同 dotcloud 的起步,足見 PaaS 的競爭已經 走向多元,如Heroku 只支援 Ruby Web App 這種應用程式端的服務,或像 Linode, Gandi VPS, Rackspace 這類可動態調節大小的 VPS 服務,都已經算是上一世代的產品了。

而整個雲端及附加的概念,將會被更年輕世代主導,一如 Phenona 創辨人 Daniil Kulchenko,目前是 15 歲的高中生。未來將一面唸完高中,一面在 ActiveState 兼職。

實在是英雄出少年。

簡易 Unicode 字符查詢工具

| No Comments | No TrackBacks

在 Terminal 中,@audreyt 所寫的 App::Uni 是個可以拿來查詢 Unicode 字符的工具程式:

uni.png

基本上等於是去 grep UnicodeData.txt

昨天改寫了一下,寫了個很簡易的 Web App: Uni 丟去 dotcloud 放著

uni-web.png

這類工具最大的用處是拿來查各種符號,特別是現在 Unicode 6.0 中有表情符號(源自日本手機廠商所提供的顏文字符號),不過當下有完整涵蓋 Unicode 6.0 字面的字型檔,還真是沒有。只找到有套 Symbola 字型,有所有的表情符號(賀),原作者的網站也有許多其他古字的字型,是一般內建字型檔中不會提供的部份。

這套字免費,並且公開,授權很簡單,什麼限制都沒有:

Fonts in this site are offered free for any use; they may be opened, edited, modified, regenerated, posted, packaged and redistributed.

裝了這套字型後,就可以在 Uni 網頁中看見顏文字符號了。

如果有人覺得它畫得不好看的話,裝套 fontforge 就可以改了

perlbrew, patchperl, and cpanm

| No Comments | No TrackBacks

Briefly explains the trinity of perlbrew, patchperl , and cpanm http://www.perlbrew.pl/Perlbrew-and-Friends.html

稍後解釋了一下 perlbrew, patchperl, cpanm 之間的關係 http://www.perlbrew.pl/Perlbrew-and-Friends.html

關於 Math::BigInt 的備忘

| No Comments | No TrackBacks

看到這行警告訊息時:

Math::BigInt: couldn't load specified math lib(s), fallback to Math::BigInt::FastCal

就裝以下兩個模組之一

cpanm Math::BigInt::GMP
cpanm Math::BigInt::Pari

目前在 MacOS 10.6 上裝 Math::BigInt::Pari 沒問題,但如果配 Homebrew 中的 gmp,就沒辨法裝 Math::BigInt::GMP。似乎是因為 gmp 版本太新了。

This might be handy

alias cpanm-failed='$PAGER $HOME/.cpanm/build.log'

Test-Continuous-0.70 Released

| No Comments | No TrackBacks

A small maintenance of Test::Continuous is released http://frepan.org/~gugod/Test-Continuous-0.70/

Only 2 changes:

  • remove the use of Exporter::Lite in favor of using ‘autoprove’ command.
  • Fix RT 66822: exclude vim swap files.

perlbrew 0.20 release

| No Comments | No TrackBacks

perlbrew 0.20 is released, YAY.

There are there major featuring updates:

  • Improved perlbrew install command
  • True multi-user friendliness
  • switch / use for CSH users

Please read the perlbrew 0.20 release announcement for full details.

Also in about the same time, Devel::PatchPerl 0.32 is released, the big major change is to deal with building issue on Ubunto 11.04. (Big thanks to autarch !)

If you are willing to try, please install or upgrade perlbrew this way:

curl -L http://xrl.us/perlbrewinstall | bash

That installer bash script installs perlbrew and patchperl executables. patchperl is required to fix the building process of old perls on new systems.

If your are installing perlbrew for the first time, please following the message to add one line to your ~/bashrc or ~/.tcshrc.

Once this is done, your newly opened shell should be able to find both perlbrew and patchperl program just fine. You should be able to brew perl-5.12.3 on Ubuntu 11.04 from there.

If you bump into problems, please report to our Github Issues page.

試用 dotcloud

| No Comments | No TrackBacks

最近兩天在 Perl 圈子裡開始沸揚起來的話題是: dotcloud 這家提供 PaaS 的廠商支援 PSGI 了。並且 PSGI / Plack 的維護人員 miyagawa 將即日起為 dotcloud 服務。新東家新氣象,祝如日中天的他事業一帆風順。

dotcloud 所提供的 Perl PaaS 形式類式 Heroku,一個 PSGI App 只要整個目錄傳上去就可以自動被使用。不過,不像 Heroku 只支援 Ruby,dotcloud 支援 Perl / PSGI, Ruby / Rack, Python / WSGI。因為 Web App 使用的是 Nginx 配 uWSGI。

在使用上會需要先裝個執行檔 dotcloud,這個執行檔是個 python 程式,用 easy_install dotcloud 就能安裝完畢。其指令比 heroku 提供的更為仔細一些。已經有提供 ruby 與 python 的 Worker。還沒有 perl 的 Worker、但想必不會需要等太久。

目前注意到以下幾件事情:

  • 開出來的機器是個 EC2 Instance,透過 dotcloud ssh 能連進去操作。OS 是 Ubuntu Lucid。資源很多,RAM 有 768 MB,/ 有 70G。但並不是全新開的(一開好連進去 uptime 是 89 天),不曉得是不是固定都是這樣的規格。
  • ssh 進去的帳號不是 root,也不能 sudo。會問密碼,但並沒有管道知道密碼是什麼。ssh 是用自動生成的 key 進去的。
  • 如果本地端目錄本身是個 git repository,那麼把 code 傳上去的方式就會是用 git push。
  • 執行 app 的 perl 並不是 ubuntu 內附的 perl,而是 5.12.3,放在 /opt/perls,這是個 perlbrew root。但路徑中並沒有 perlbrew,應該是在初始過程中自動裝好的。
  • cpan dependency 的安裝是裝到 ~/perl5 去,這個目錄底下內容像是 local::lib 風格的。看起來應該是執行 cpanm --installdeps --L ~/perl5 . 這樣的指令。
  • 直接支援 static file,不需要像 Heroku 在 config.ru 裡動手腳。

目前丟上去試的 App 是和多的 MoreText(不過這網站並沒有指過去),基本上過程還算順利,步驟不像 Heroku 那麼少,但 DotCloud 一開始提供的彈性更大。

目前 DotCloud 的帳號註冊仍需要邀請碼,價格表也還沒看到。不過這個 PaaS 包裝得的確夠簡單好用,其實力有狂掃 Perl 社群之勢(雖然需要先裝 python 才能用 (笑))。

總之,有興趣的話,可以跟一下他們的 Twitter: @dot_cloudblog。也可以在網站上填一下 Email 讓他們通知你。

Perl 模組 Time::Verbal

| No Comments | No TrackBacks

關於把時間轉換成口語的 Perl 模組,由於覺得現有的都不是很滿意,因此自己寫了個: Time::Verbal

目前它的功能只是把兩個時間點差異用口語化的方式表現出來。主要的特點有 ① 捨去很小的單位,與 ② 完整的 i18n / l10n 支援兩項。

例如,中文:

> perl -MTime::Verbal -E '
  my $tv = Time::Verbal->new(locale => "zh-TW");
  say $tv->distance(time, time + 7**$_) for 1..10;'
不到一分鐘
一分鐘
6 分鐘
40 分鐘
5 小時
昨天
9 天
66 天
一年多
一年多

德文:

> perl -MTime::Verbal -E '
      my $tv = Time::Verbal->new(locale => "de");
      say $tv->distance(time, time + 7**$_) for 1..10;'
weniger als eine Minute
eine Minute
6 Minuten
40 Minuten
etwa 5 Stunden
ein Tag
9 Tage
66 Tage
mehr als ein Jahr
mehr als ein Jahr

希伯來文:

> perl -MTime::Verbal -E '
      my $tv = Time::Verbal->new(locale => "he");
      say $tv->distance(time, time + 7**$_) for 1..10;'
פחות מדקה אחת
דקה אחת
6 דקות
40 דקות
בערך 5 שעות
יום אחד
9 ימים
66 ימים
מעל שנה אחת
מעל שנה אחת

內附了 60 餘種語言的翻譯。翻譯的內容是取自 rails-i18n 計畫。也可以自定語言的翻譯內容。

目前實做的這個 distance 方法基本上就是 Rails helper 中的 distance_of_time_in_words,不過這個名稱空間還不賴,可以陸續再補上其他部份。

轉換口語時間區間的 Perl 模組

| No Comments | No TrackBacks

對於將時間區間轉換成「3 minutes 29 seconds ago」這種口語化敘述的模組,在 CPAN 上有這四個:

  • Time::Duration
  • Time::Elapsed
  • DateTime::Format::Duration
  • DateTime::Format::Human::Duration

前兩者提供的的函式的輸入是將秒數(比如說 7240 這樣的整數),後兩者則是 DateTime::Duration 物件。 如果不必達到嚴謹的效果、甚至模糊一些比較好的話,則 Time::Duration::duration 這個函式的效果最好。

比較的程式與輸出見 https://gist.github.com/947706

DateTime::Format::Duration 的輸出格式是要手動指定的,因此不在比較表中。

在時間區間超出一小時後,只有 Time::Duration::duration 函式會捨入秒單位的數字。但如果需要做 I18N / L10N,卻是其他兩者的機制勝出。