April 2011 Archives

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,卻是其他兩者的機制勝出。

Dropship

| No Comments | No TrackBacks

才看人說 Dropship 好,就看到 Dropbox.com 祭出 DMCA 強迫作者把 code 從 github.com 上刪掉的一串故事。自然又有近百個 fork 在 github 上殺出來,但又有人說他的 fork 無故消失了云云。甚至,有人放在自家 Dropbox 帳號中的原始碼壓縮檔也被 Dropbox 刪掉了。

目前看到有人說「Dropbox 有在檢查內容,並且可能會直接刪掉有版權的內容」,那自然就會讓人擔心:我備份的東西會不會就這樣要刪掉?

Dropship 的機制自然是種詐取(exploit)手段:讓你能下載自身從未上傳過的檔案,與 Dropbox 原始服務精神抵觸,而且完全只用 Dropbox 的資源。純就技術面討論,Dropbox 公司為了保護自身利益,自然能在協定中加入一些保護機制來檢驗是否仍有像 Dropship 這類的程式。而在那之前,他們選擇了先採取法律行動。

只不過,發公文要求作者把原始碼從 github 中刪除(原作者也的確照做了),與自行把自家使用者的內容刪除,這兩碼子事所代表的意義非常的不同。這家公司會不會愈來愈霸道,自然也該被注意。

後話:說到頭來,我還是比較愛原始 Apple File Sharing 中的那個 "Drop Box" 資料夾的本地端分享機制。

後話二:[陰謀論] 其實無論是 Dropbox 或 github,暗地裡都是在做 SHA 補完計畫,只要使用量愈來愈大,他們手中有的對應表也就愈大,大到一定程度之後就會被 Skynet(?) 拿去做為侵入攻擊的武器(???)

後話三:Dropship 這名字好,令人想到 SlayerSBoxer 空降坦克的絕招。

Nice little dialog

| No Comments | No TrackBacks

在切換語系時出現像這樣的對話框還頂貼心的。

nice-little-message.png

YouTube 廣告有點煩

| No Comments | No TrackBacks
把 Mac Safari 假裝成 iPad Safari 拿來看 youtube 影片,一來不必 flash, 二來沒有廣告,三來首頁版面單純好看多了。只不過這個動作每次都要手動做,沒有 Safari extension 能做這件事。 

有一個比較自動的方式 是透過 Fluid。Fluid 建出來的 app 可以自由指定 User Agent。目前內建的選單中沒有 iPad,但是可以選擇手動輸入,因此只要輸入這樣的 iPad User Agent String 就行了:

Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10

只是,在要開 YouTube 時要記得去開這個 App,這大概是 SSB App 的基本問題。

1A2B

| No Comments | No TrackBacks

如果說命名是軟體開發的唯二重點項目之一,那麼程式設計師最好花上一定比例的時間來加深本身文字的運用能力。也就是說老闆們最好放任大家上班時間看小說,甚至寫小說,這樣就算產品延期,也還有電子書原料做為備胎,是為一心稿石二用投鳥之計。

五歲

| No Comments | No TrackBacks

兩小時前看到一個約五歲小男孩,手裡拿串夜市裡買的糖葫蘆,對牽著他手的爸爸說:

「你剛剛把這個丟掉?這樣不愛護地球。」

雖然不知道什麼是「這個」,但現在腦中浮現起竹北夜市收完攤的畫面,廣大的場地變成可怕的垃圾場,專業清潔人員也要撿一個小時才收得完,更有許多大小紙杯塑膠袋飛過好幾個路口,不會被撿到,慢慢地累積在不知哪裡的路邊。

沒有人覺得竹北夜市的垃圾桶量應該要多個十倍嗎?