2009年3月20日 星期五

Jifty - GoogleMap Plugin

Jifty 提供了 GoogleMap 的 Plugin 提供了 GeoLocation 的屬性能夠讓你在 column 存放位置資訊,並且能讓你輕易的將 GoogleMap 畫出來。

在 etc/config.yml 內設定 GoogleMap Plugin ,並提供 apikey :

||   17   Plugins:
|| 18 - GoogleMap:
|| 19 apikey: ABQIAAAA66LEkTHjdh-UhDZ_NkfdjBTb-vLQlFZmc2N8bgWI8YDPp5FEVBTjCfxPSocuJ53SPMNQDO7Sywpp_w
接著只需要在 Model 的 Schema 內新增 GeoLocation 屬性的欄位 (此屬性是由 GoogleMap Plugin 提供):
column location => is GeoLocation;
新增此欄位的 Model 變可以將位置存入 location 這個 accessor.

my $user = MyApp::Model::User->new;
$user->location( { x => 100 , y => 20 } );

順帶一題,使用 GoogleMap Plugin 在 Render 此附有 GeoLocation 屬性的 Model Action
時,此欄位會以 Jifty::Plugin::GoogleMap::Widget 來做 Render.

# 註: Model 會透過 Class Loader 自動為你的 Model 提供 "Create", "Search",
# "Update", "Execute", "Delete" 等 Action 如 CreateUser, UpdateUser .. etc . 不需要自己另外寫 Action.

也就是說,當你使用以此 Model 為 Record 的 Action 做 render 時,他會自動將 GoogleMap render 出來。

譬如說:

my $update = Jifty->web->new_action( 
class => 'UpdateUser',
moniker => 'update-user',
record => $user,
);
$update->form_field( 'location' )->render_widget;


# 更正: GeoLocation 並非 Jifty::DBI 內建,而是由 GoogleMap Plugin 提供的 Virtual Column. 謝 clkao 長輩指正。

2009年3月14日 星期六

Vim::Snippet::Converter

之前寫了一個用來產生 SnippetEmu Vim Plugin 樣板的模組 ( Vim::Snippet::Converter ) (其實有好一陣子了)。不過還是順便來 Blog 廣告一下。

Vim::Snippet::Converter 模組提供了 scc 的 perl script 能將你寫好的 Readable Template 轉成 SnippetEmu 可讀的 vim script,以便讓開發者能夠有效的建立各種語言的 Code Snippet,如 c , c++ , java , perl , ruby .. etc.

安裝 Vim::Snippet::Converter 模組:

sudo cpanp i Vim::Snippet::Converter

或者

sudo cpan Vim::Snippet::Converter

若是從 cpan 上下載:

tar xvf Vim-Snippet-Converter.tar.gz
cd Vim-Snippet-Converter
perl Makefile.PL
sudo make install

Template 的寫法如下:
   
;sub
sub <<function>> ( <<prototype>> ) {
my <<>> = <<>>;
return <<returnvalue>>;
}
;end
由角括號包起來的稱為 PlaceHolder ,也就是每一次按下 Tab 後游標駐足的地方。
;sub 為這個樣板 (Template) 的觸發字串 (Trigger),;end 則代表這個樣板的宣告結束。

寫好之後,使用 scc script 將之轉換並安裝到 vim filetype plugin 所在的目錄。

譬如說

scc -s perl_m.snt -i ~/.vim/after/ftplugin/perl/module.vim

放在 after 裡面主要是因為當 snippetEmu plugin 載入完成之後接著會去載入 after 裡面的 script.

-s 用來指定來源檔案的路徑。

-i 用來將轉換過的 Template 安裝至檔案,如果之前已經有安裝過 (透過樣板來源的檔名辨識),便會自動取代原本的部份。若檔案尚未建立,scc 會自動為你建立。如果不加上 -i 參數,則會將轉換的結果列印至一般輸出 (STDOUT)。 透過 -i 參數,你可以將來自各不同檔案的 Template 裝至同一檔案而不會複寫其他的 Template。

2009年3月12日 星期四

新入手一些書

Real World Haskell 前幾天到了,有時隨手拿起來啃個幾頁,頗有趣。

然後得把 【SICP】 的進度規劃好,也許可以用 mit-scheme 玩些什麼東西也說不定,因為我發現 mit-scheme 蠻完整的。 本來還想說要買幾本 Ruby,不過沒有很迫切的需要 Ruby,因為大部分的事情用 Perl 就能解決了,熟練的關係,所以相對來講解決問題也比較快。

其他入手的書有【記憶之術】,探討古代記憶的研究。另外還有 【開機】.. 等等約四本新書。

另外還跟長輩借了 【雪潰】以及【我的電腦探索】等書。

書好多,突然覺得壓力好大。orz

話說 vimrc 不包含 .vim 目錄的話,快超過 1k 行了。

2009年3月10日 星期二

Mac - 使用 airport command-line 工具

使用 airport command-line 工具來設定無線網路。

只有簡單的幾個步驟

cd /usr/sbin

sudo ln -s /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport

建立 link 之後。

airport --help

查看使用方式。

airport -s

掃描可使用無線網路

airport -A=[SSID] --bssid=[BSSID] --password=[WEP|WPA]

便可指定連線。

reference:
http://lists.apple.com/archives/Macnetworkprog/2006/Nov/msg00038.html
http://forums.macrumors.com/showthread.php?t=425054

曾幾何時也開始發 Mac 相關的文章了。orz

2009年3月3日 星期二

一般人對於 Perl 的誤解

* 此篇文章只是澄清一般人對 Perl 的誤解,不是說 Perl 有多好其他語言有多差,請勿誤會,語言只是工具,對於 Perl 的缺點當然要列的話當然也不少。

看見有人在 lukhnos 的這篇 『學 Python: 兼談成人的語言習得』有人回應指出 "Perl我覺得很大程度是靠regex在撐" 這句話,我想,順便對這樣的誤解提出釐清一下。

這就是大部分的人對 Perl 的誤解,因為對 Perl 了解的不夠深,以及大部分 Perl 的流言。

我真正踏入 Programming 這塊的時間並不長,但是也走馬看花學了一些語言,然而在 Ruby, Python, Perl 等語言中使用大量的 Perl ,其實有很多原因。
一開始學習 Perl,只是將他當作相當方便的 Scripting Language 使用,但是跟隨 clkao 接觸 Jifty 以及閱讀許多模組的 Code,使我對 Perl 的認知便不再是如此。

Perl 作為一個 Very High Level Programming Language 這樣的方便性,使他非常容易被用來 Scripting. 但是 Perl is not just for `Scripting`,Perl 除了在 Scripting 上的應用之外,也被拿來開發網路應用程式、網頁框架、系統管理、剖析器 (Parser) 甚至生物科技(請參見 BioPerl) 等應用。所以, Perl is not just for `Scripting`.

1. 有些人認為 Perl 寫出來的程式是相當骯髒
事實並非如此,而是看每個人的 Coding Style 而有所不同,由於 Perl 提供了語法的多變性質,所以無法讓人很難寫出不難看的 Code。而寫 Perl 寫的好的人,則是能將 Perl 作為一個相當優雅的語言使用。
對於 Coding style 相當差的人,用 python 或 ruby 寫,可能沒辦法寫出很難看的程式,以 python 來說, syntax 對 code 的 indentation 做了限制,必須照 Indentation 撰寫程式,否則 Interpreter 就不聽你的話,而 Perl 是 free-form 的語言,你能夠以非常自由的風格撰寫。

2. 有些人認為 Perl 完全只是在靠 Regular Expression 在撐:
事實並非如此。許多人使用 Perl 的原因,不外乎是因為 Perl 提供了 CPAN ,可以讓 Hacker 可以 DRY (Don't Repeat Yourself). 以及 Perl 的本質 -- 條條大路通羅馬 ( TMTOWTDI ) ,因此對付一項問題,你可以選擇各種不同的模組來解決問題,以及更多種不同的寫法來實做。 另外,Perl Syntax 所提供的多變性 - 對 function 的呼叫可不加上圓括號,提供 Closure, Prototype 等功能,讓我們可以利用 Perl 來製作各種 "寓言",而 Regular Expression 只能算是 Perl 強而有力的工具之一而已。

舉例來說 Object::Declare 或是 Jifty::DBI 的 Schema 都使用了這種特性來讓 Perl Programmer 可以很優雅的撰寫程式。

再來是 Perl 的 syntax sugar , qq , qr , qw 等 term 提供了更方便的方式來建構字串、串列以及雜湊、正規表達式。

順帶一提,Ruby 便是從 Perl 這取出部份的便利性,再加上完整的 Object ,相對於 Perl 對 Object 實做的 lack ,所以也有不少 Perl Hacker 跳槽去 Ruby 。

順便引用 clkao 於 ptt 的一篇 『 關於 Perl 已死的一些迷思』,提出 OSCON, Tim Bunce 的一場 talk 的重點:
http://tinyurl.com/6r89go

在今年的 OSCON, Tim Bunce (DBI 的作者) 有一個場 talk: Perl Myths

簡單來說,關於 "perl 已死" 的迷思部份, 重點如下:

* 不紅不代表沒有人用或沒有相關工作的市場
* 工作需求的統計數據顯示, perl web developer 僅次於 php developer
* perl software engineer 高於 {python,ruby} software engineer
* "perl developer" 遠高於 {python,ruby} developer