2007年9月29日 星期六

v6-alpha

其實早就可以在 Perl5 上使用 Perl6 的一些小甜頭了。

你可以安裝 v6-alpha , type:

$ sudo cpan v6

可以 perl6 的方式來撰寫之。
# file: hello_world.pl
use v6-alpha;
"hello, world".say;
實作的部份只有一部分,並不完整。v6-alpha 是實驗性質的東西,不過基本上可以當玩具玩玩。

注意, v6-alpha 並不相依於 pugs 或 parrot,其物件模型是以 Moose 為基礎。

其他可參考:
http://search.cpan.org/~fglock/v6-0.020/lib/v6.pm

Perl 5.9.5

編了 Perl5.9.5 ,這是 Development Version ,Sourcecode 可在 CPAN 上下載 ,See the Announcement 。步驟可參考 INSTALL 以及 README 檔。

$ sh Configure
$ make
$ make install


Configure 可加上參數 -d 以預設值編譯。可下

$ sh Configure -d -Dprefix=/usr -Dusedevel

如此即可。不過得注意的是:
It may seem obvious, but Perl is useful only when users can easily
find it. It's often a good idea to have both /usr/bin/perl and
/usr/local/bin/perl be symlinks to the actual binary. Be especially
careful, however, not to overwrite a version of perl supplied by your vendor unless you are sure you know what you are doing.
參考看看 Perl 5.9.5 有哪些新東西 ( perldelta - what is new for perl v5.9.5 ),

不能說的秘密

我終於看了。之前還笑著說『秘密本來就不能說啦』

恩。不過,真的是不能說的秘密。

劇情發展的很神奇... 影片結束我還哽咽了許久。難得國片拍的如此之好,而且還是周杰倫的處女作。 :P

2007年9月28日 星期五

Perlcc - Perl 前端編譯器

Perlcc 可協助你將 perl 的 source code 編譯成 binary , c 或者 bytecode ,於是嘗試用 perlcc 來編譯:

$ perlcc -o test test.pl

將 test.pl 編譯,並輸出為 test。不過遇到的編譯錯誤:
pccl0GI5.c: In function ‘perl_init_aaaa’:
pccl0GI5.c:15664: warning: this decimal constant is unsigned only in ISO C90
/usr/bin/ld: cannot find -lperl
collect2: ld returned 1 exit status
其實只要裝一下 libperl-dev 就可以解決這個問題了。

安裝 libperl-dev:

$ sudo apt-get install libperl-dev

重新編譯即可。 :)

將 source code 編譯為 Bytecode 則可輸入 :

$ perlcc -B -o foo foo.pl

產生出來的 Bytecode 會像是這樣:
use ByteLoader 0.06;
PLBCi486-linux-gnu-thread-multi^@0.06^@^D^@^@^@^D^@^@^@^L Ya^A^@^@^@d^Me@^L h^^A^@
^@^@^@
^@^@^@A^A
^@^@^@^G^A ^D^C<84>^D^N^M^@^@^@Hello world
^@^V^A^L^@^@^@<^C^@^@^@=^M^@^@^@=^M^@^@^@=^N^@^@^@A^A^A ^@^@^@<^C^@^@^@=^K^@^@^@=^L^@^@^@A^@^A ^@^@^@8 ^@^@^@;^P^@<87> ^@^@^@<88>^L^@^@^@^@
可參閱:
Perl 語言全面編譯: 1,2,3

PS. 對了,Programming Perl 3/e 上編譯 bytecode 是寫 -b ,不過正確的應該是 -B。

2007年9月27日 星期四

lftp - sftp

直接用 sftp 功能實在有限,而 lftp 也支援 sftp 所以找了一下其 sftp 之用法

利用 lftp 透過遠端主機之 ssh 服務達成 sftp 連線:

$ lftp sftp://account@host -p [port]

2007年9月26日 星期三

快把 Catalyst 忘光了

Catalyst 好久沒碰了,上次暴肝到做完之後就沒去碰,好像差點要把全部都忘了 XD 這個時候就會覺得其實寫 Mason 還比較實際些... Orz

來寫寫和 c binding 的 module 吧!

話說 Moose

剛剛有提到 Moose ,其實挺不錯,可以提供 Perl5 上一個良好的物件導向。

不過基本上對 Perl5 的 Developer 比較像是種折磨。因為雖然 Moose.pm 在語法上類似於 Perl6 的寫法,但是有些小細節仍是不太一樣的 (可參考 Audreyt 的 Slide)。看 Slide 看到這,我就覺得這會是個很頭痛的地方,因為當 Perl6 出來之後,你還得再習慣 Perl6 的 syntax,萬一你把小細節搞錯,出 Bug 的狀況反而更多...

沒辦法,要從 Perl5 切到 Perl6 還得過一個尷尬的過渡期...

不過,我認為 Perl6 已經超越了 Scripting Language 了!因為基本上他不僅吸收了 Haskell , Ruby , Python 等等許多語言的特色,還提供了多種的後端輸出。

所以為了 Perl6 強大的功能 .... (忍痛 XDDDD)

繼續寫 Perl 吧 XD

Object-Oriented in Perl

如果要在 Perl 5 上寫 OO 的話,就用 Moose.pm 吧!這是一個以 Perl 6 物件模型為基礎的模組,CPAN 上寫道:
Moose is based on the prototypes and experiments I did for the Perl 6 meta-model. However, Moose is NOT an experiment/prototype; it is for real.

如此,你可以類似 Perl 6 的寫法在 Perl 5 上寫 OO. :-)
這種寫法比較直觀,並且功能也比較強大。
package Point;
use Moose; # automatically turns on strict and warnings

has 'x' => (is => 'rw', isa => 'Int');
has 'y' => (is => 'rw', isa => 'Int');

sub clear {
my $self = shift;
$self->x(0);
$self->y(0);
}

package Point3D;
use Moose;

extends 'Point';

has 'z' => (is => 'rw', isa => 'Int');

after 'clear' => sub {
my $self = shift;
$self->z(0);
};
其他對 Moose.pm 的疑問就上 CPAN 的 Moose.pm 看吧! :)

那個..裝 CPAN 模組是這樣裝的:

$ cpan Moose

2007年9月25日 星期二

愛的教育

愛的教育是失敗的。

愛的教育只會教出叛逆、頂嘴、難管教的小孩,再加上養尊處優、嬌生慣養,這種情況更是嚴重,還會有其他併發症,簡直無法管教。

等到青少年時期才想管教都沒法,一天到晚跟你頂嘴發脾氣。等小孩自己意識到『自我』的時候要努力也來不及了。怎麼說?你看美國就知道了,教出一堆無可救藥的青少年,每天吸毒、打電動、泡夜店、開 Party ,正事不幹,幹一堆壞事。

人都在窮途末路之時才知悔改... 偏偏要悔改的時候已經來不及了。

哎,至少愛的教育不適用於一般小孩,那些較早熟的小孩例外。

2007年9月24日 星期一

Haskell - Wikibooks

算是目前覺得最完整的 Haskell 教學文件
http://en.wikibooks.org/wiki/Haskell

不過驢子倒是幫上不少忙,所以我又有其他東西可以讀了 XD。 ( 不用仰賴天隴 )

逝 / 敻虹

讀完了一朵小白花的遺書
扁柏樹說也飄到青草上了,我的絲帕
那曾在三月的白鷺鷥的頸柱上做夢的
我的絲帕,飄到青草上了。

而朋友,誰失蹤了,誰死去了。
更誰在三月沒有了消息

我的葉網吹過許多聲早安--扁柏說
但不知絲帕在那裏,
不知愛做夢的陌生人在那裏。

讀完了一朵小白花的遺書,
青草上有人哭泣...

想起翠島 / 敻虹

長街與長街
私語著,一箇七月 

你乘淺笑的浪花歸去
那時,夏贈給你許許多多的
美,翠島的棕漣漪紋身的貝殼

那時,長街與長街。還衹是
為黃昏雨所彈的

二線歎息的細弦。

但是的,我走過了一季夏。
一季翠島的少年時期

記得甚麼?暮雨霧中舟漸遠了

Win32::Printer

I was looking for the Printer Module on CPAN , and I found this ( Win32::Printer ). The author said that " PPD ( binary package ) is on the waxs.net " , but the link missed.

I have to compile it by myself , it's a troublesome job , because I have to install MSVC 6.0.

After you install MSVC 6.0 , just compile the module:

> perl Makefile.PL
> nmake
> nmake install


but you shall encounter an error which is that "PageNumber" is not in the structure "PSINJECTDATA".

I don't know why. Maybe it was caused by the version of Win32 API Headers. the structure which the module code expects is:
struct PSINJECTDATA {
DWORD DataBytes;
WORD InjectionPoint;
WORD PageNumber;
}
alias PSINJECTDATA* PPSINJECTDATA;
but what I actually have is:
typedef struct _PSINJECTDATA {

DWORD DataBytes; /* number of raw data bytes */
DWORD InjectionPoint; /* injection point */
DWORD Flags; /* flags */
DWORD Reserved; /* reserved field - must be 0 */

/* Followed by raw data to be injected */

} PSINJECTDATA, *PPSINJECTDATA;
My solution is ...
just comment the line:

psd.PageNumber = page;

then it unexpectedly can work out! :P

I can't guarantee that "inject" function could work , but the test script still prints out the example normally.

PPM + OpenGL

在 Windows 底下寫東西都很麻煩... ( 都不能用 apt )

如果 Perl 要用 OpenGL 那還得裝一下 OpenGL for Win32

不過有 ppm 就比較簡單了:

ppm install http://www.bribes.org/perl/ppm/OpenGL.ppd

PPM + Gtk2-Perl

遲早要在 Windows 上頭跑 Perl 的。所以裝了 ActivePerl,沒想到眼花去裝到 5.6 ,想說奇怪圖示怎麼這麼醜,印象中之前裝的還不錯看的。 XD

首先要解決 Printer 的問題,結果沒想到 CPAN 上 Win32::Printer 的 Binary 不知道跑哪了,沒辦法裝。只好裝爛到爆 MS Visual C++ 6 ( 仍是不屑裝 MS .NET。 自由軟體的好處就是什麼都好取得,自從習慣了 FS 之後,對 MS, ASP, BASIC 什麼的,都很反感。)

之後直接裝 gtk2-perl,首先得裝 ActivePerl ,接著是 Gtk2 Runtime , Glade 也可以抓下來。

接下來步驟可能會有點麻煩,因為要到各模組內的資料夾執行 ppm install 已經編譯好的 binary,所以我寫了一個 script 來跑,這樣以後安裝可以省事多。

你可以先將各資料夾照順序編號,如:

C:\foo\
00-ExtUtils-Depends-0.205
01-ExtUtils-PkgConfig-1.07
[...]

接著在 foo 底下寫一個 install.pl 檔
#!/usr/bin/perl
qx{ppm repo add http://www.lostmind.de/gtk2-perl/ppm/};
qx{ppm install Gtk2};
for $dir ( <*> ) {
next unless ( -d $dir );
chdir $dir;
for ( <*.ppd> ) { qx{ppm install $_}; }
chdir "..";
}
執行他即可。

還是要婊一下,cmd.exe 爛死了,難用到爆,還寫那種什麼 WSH ? 才不要!

對了,只要裝了 Mingw - MSYS 就可以直接在 cmd.exe 底下跑 sh , ls , vim 等等東西。帥

2007年9月23日 星期日

以為自己看透別人的人,總是看不見自己。

2007年9月22日 星期六

Vim - Perl6 Syntax

剛剛在逛 pugscode 的時候發現colordiff.pl 的開頭:
#!/usr/bin/pugs
# vim: filetype=perl6 :
# Perl 6 variation of http://www.perlmonks.org/?node_id=567025.
# You can change $command to reflect the actual command you want to use
# (e.g. 'svk diff')
看起來 vim 是有 perl6 syntax 了,所以搜了一下,找到了 perl6 syntax file

把他放在你的 ~/.vim/syntax/ 內即可。 :)

GladeXML + Gtk2-Perl



試用了 Glade 3 ,還不賴,比之前的 glade 好很多。

接著用 Perl 的 GladeXML ,試了一下 examples 底下的 fileman.pl



希望能滿足我的需求才是...XD

2007年9月20日 星期四

Enhanced gVim Package for Win32

Because of the ugly default setting of gVim on Windows , and every time when I want to install gvim , I have to setup those plugins again and again . so I packed my own gVim package with some plugins and fonts by NSIS compiler. the version of gVim is 7.1.

You can download here( zd.0x209.org ) or here( googlepages )

#update:
# 因為 google page 流量暴掉,所以新增另一個載點
# because of the flow exceeds the limitation , so I upload to another site.

Comments are welcome.

Features:
- The NERD Tree ( Plugin )
- The NERD Commenter ( Plugin )
- Vcscommand ( Plugin )
- Slippery Snippets ( Plugin )
- Taglist + Ctag (win32)
- Monaco Font
- Bitstream Sans Mono Font
- A lot of Colorschemes
- Context Menu ( associated with files )

Usage:
- \e to open the NERD Tree Explorer
- \t to open the Taglist Window

Screenshot:



學海無涯

『學不完的東西,全身都是無力感』的感覺已經持續許久了,雖然每天都努力的吸收。
每當這個時候就會開始羨慕那些頭腦好的人...雖然這種想法一點建設性也沒有...

吾生有涯,而知無涯,以有涯隨無涯,殆已。

2007年9月19日 星期三

Vim - NERD TREE



很棒的 Vim Plugin - The NERD Tree ,可像 Text-Mate 那樣在左邊開啟樹狀的檔案視窗。

安裝:

把 script 放在 ~/.vim/plugin/ 底下就可以了。

我的 Installer:

$ wget http://c9s.lya.googlepages.com/nerdtree.sh
$ bash nerdtree.sh

Category Theory

原來 Benjamin C. Pierce. 除了寫 "Types and Programming Language" , 還有一本專門探討 Cateogry Theory 的 "Basic category theory for computer scientists",這本還是到成大找才有的。
Category theory is a powerful formalism for studying and comparing different algebraic structures.
Abstract Algebra ... 喔,前幾天看到我弟的書,正是 Abstract Algebra ...

書真的越來越難取得了啊。總不能都去天攏買,不然一定會破產。 ( 那個價格真是讓人不敢恭維 )

2007年9月18日 星期二

Learning Haskell

Pugs 內的 READTHEM 文件提供了許多 Haskell 的學習資源連結
= Haskell - Books:

Programming in Haskell - Graham Hutton
http://www.cs.nott.ac.uk/~gmh/book.html (preview chapters)
Algorithms: A Functional Programming Approach - Fethi A. Rabhi, Guy Lapalme
The Haskell School of Expression - Paul Hudak
Haskell: The Craft of Functional Programming - Simon Thompson
The Fun of Programming - Jeremy Gibbons, Oege de Moor (ed.)

= Haskell - Online:

HaskellDemo - Shae Erisson (aka "shapr")
http://www.haskell.org/hawiki/HaskellDemo
Haskell Tutorial for C Programmers - Eric Etheridge
http://www.haskell.org/~pairwise/intro/intro.html
Haskell - Various
http://en.wikibooks.org/wiki/Haskell
Write Yourself a Scheme in 48 Hours - Jonathan Tang
http://halogen.note.amherst.edu/%7Ejdtang/scheme_in_48/tutorial/overview.html
Yet Another Haskell Tutorial - Hal Daume III
http://pub.hal3.name/#daume02yaht
(partial PDF -> KWID transcription in docs/yaht.kwid)
Haskell Mini-Primer (this covers infix $ and . operators)
http://conal.net/pan/haskell-primer.htm
Monad Transformers Step by Step - Martin Grabmüller
http://uebb.cs.tu-berlin.de/~magr/pub/Transformers.en.html
Harrorth implementation journal - Yuval Kogman
http://feather.perl6.nl/~nothingmuch/harrorth/
All About Monads - Jeff Newbern
http://www.nomaware.com/monads/html/index.html
How I/O can work in a purely functional language
http://community.livejournal.com/evan_tech/197471.html - Evan Martin
Applications of monads
http://community.livejournal.com/evan_tech/198116.html - Evan Martin
You Could Have Invented Monads! (And Maybe You Already Have.)
http://sigfpe.blogspot.com/2006/08/you-could-have-invented-monads-and.html
- sigfpe
why type classes are interesting
http://community.livejournal.com/evan_tech/199837.html - Evan Martin
Hitchhikers guide to Haskell
http://www.haskell.org/haskellwiki/Hitchhikers_guide_to_Haskell
Harrorth - Learning Haskell, Forth and Parrot - Together.
http://perlcabal.org/~nothingmuch/harrorth/doc/ - Yuval Kogman

Vim Patterns

在使用 Vim 的 Pattern 的時候,你應該會很納悶。 ( 至少我就很納悶 XD )原本的 \d , \w 好用的 (foo|bar) 跑哪去了?怎麼無法運作?

原來是 Vim 為了方便比對,所以要使用 Regular Expression 的時候,特殊字符你得加上一個 \ 才行用 RegExp 比對。

然而 Vim 提供多種模式,可讓你的 Pattern 不會長的太糟....

如果要用把 foo 或者 bar 換成 dog ,指令可能會這樣下

:%s/\(foo\|bar\)/dog/g

如果這樣太醜了。如果有讀 pattern.txt ,你會發現有所謂 magic , nomagic , very nomagic 之類的東西。\v 是 Very Magic , \V 是 very no magic ,別搞錯囉

利用 \V 我們可以將上述 Pattern 寫為

:%s/\v(foo|bar)/dog/g

是否乾淨很多呢?

以下附上 :h pattern 內的 Example:
Examples:
after: \v \m \M \V matches ~
'magic' 'nomagic'
$ $ $ \$ matches end-of-line
. . \. \. matches any character
* * \* \* any number of the previous atom
() \(\) \(\) \(\) grouping into an atom
| \| \| \| separating alternatives
\a \a \a \a alphabetic character
\\ \\ \\ \\ literal backslash
\. \. . . literal dot
\{ { { { literal '{'
a a a a literal 'a'

{only Vim supports \m, \M, \v and \V}

侷限

有人說,為什麼寫 Blog ? 寫 wiki ? 用心做那些心得,其分享的動機是什麼?對我,是來自自我的侷限。

我想無可避免的,每個人都有每個人的侷限,而我的侷限是這樣來的:

小的時候喜愛閱讀,特別喜愛科學家傳記,愛因斯坦是我其中最有興趣的科學家,還記得小四、小五的時候常拿著幾本科普書閱讀,像是『愛因斯坦相對論』之類的 書。對年幼的我而言,當然是很吃力,沒有基礎的數理知識怎能讀懂那些抽象概念?如果當時有人能和我說,你該如何做才能夠參透那偉大的理論,該如何一步一步 走?那麼情況也許會不同,但是沒有,周圍也沒有人懂,於是挫折感由然而起。所以,我想我第一個侷限,就是這樣來的。

小學尚未畢業,我的父親將我從台南轉學至南投縣廣興國小,那是座在鄉下的一間資源有限的學校。

我興趣轉移到馬可尼身上,那是位發明無線電的科學家。為了瞭解無線電的運作原理,我在圖書館裡頭努力的探尋關於無線電的線索,家中的百科全書已經翻爛了,不過對於無線電的介紹僅有一絲線索而已。

然而,校內圖書館盡是放兒童讀物,只有學校對面的圖書館只有二樓才是我想獲取的知識所在。不過圖書館規定,得年過 16 才能上二樓閱讀。

那時候是我第一次希望能夠趕快長大的時候。

過了好一段時間,母親向圖書館說服,才得以開放我上去閱讀。但又不能讀太晚,過 5 點回家的公車就沒了,時間有限,小學終於畢業,我還是無法瞭解馬可尼如何辦到。

我想如果 『興趣和挑戰是開啟生化開關的關鍵』那麼『挫折與侷限就是關閉生化開關的關鍵』。如果有這麼的一個開關,那麼我想我的開關差不多就是那個時候關起來的。

國中之後飽食終日,毫無目標可言,混混沌沌的度過無趣的升學階段。

在電腦上的摸索也都是獨自一人摸索,沒有指標,沒有方針,倘如瞎子摸象一般。直到開啟的時候,似乎已經是大學的時候了。

擺脫升學制度與被強迫的學科,『興趣』這種東西才又再度浮現出來。

有人說 『大學以前念書是不需要興趣的!』 那麼不需要興趣,你拿什麼活?

天生聰明的人、擁有天份、資質的人反而很少在分享,為什麼?對他們來說,知識太容易被瞭解,太容易獲得,輕易地擁有能夠享受駕馭知識的能力,怎麼有時間去分享?當然無法體會那種被侷限的感覺。

所以,既然花了時間學習,也不希望有人像我一樣被自己的環境侷限住,希望那些一樣有侷限的朋友能夠因為跨越出自我的侷限。

去打破他吧!

2007年9月17日 星期一

arrogant

眼前盡是新生,耳聾、眼盲,唯一擅長的就是嘴巴,從嘴巴裡散發出著未成熟的氣味。

波大無腦以及屌大無腦,穿著自以為時髦的打扮。
沒有夢想與目標,飽食終日,無所用心,成日玩樂,散盡家財。
等待的就是一波接一波的聯誼,急著將滿腦的精蟲與騷勁找到宣洩的歸宿。

就是這個階段了吧,在這個環境之中。

於是造就了 Larry 所說的,程式設計師的性格之一。

3P

Python , Perl , Ruby 選什麼學其實不是這麼重要了,等 Parrot 出來,這些都可以在共同的 VM 上執行,能做的事情其實本來就也都差不多了。

學學一些 Heterogeneity 的東西吧!如 Haskell。

2007年9月16日 星期日

Compiler (1)

其實肖想讀 Compiler Theory 很久了,只是學校沒有這方面的師資,週遭也沒有人會。 雖然才受資工系的教育滿一年就畢業了,不過一等有空,還是興致勃勃的想學習這門 mysterious 的理論。 :P

本來讀 Modern Compiler Design ( 這裡簡稱 MCD 好了 ),讀著讀著,讀 Parser 都還 OK , Creating top-down|bottom-up parser automatically 這類的也都 OK ,雖然過程還是挺吃力的。

到了中間 Attribute Grammar 的部份,發覺 MCD 並沒有交代的很清楚,連 ISSI-Dependency 也很含糊的帶過,一下就跳到 cycle 的問題,我都還不大清楚 cycle 怎麼來的阿! Synthesized , Inherited attribute 還未解說的很清楚, MCD 一下便將重點放在 L-Attribute , S-Attribute , Mutil-Visit Attribute 。 這讓我挫折感特重,於是 MCD 就擺在一旁一個禮拜之多....

這下好了,還好朋友蚊子寄給我一本 Aho 的 Compilers: Principle,Techniques and Tools,翻開來讀,發覺好讀多了,於是先把 MCD 擱著,決定把 Aho 讀完再說。 馬上發覺 synthesized , inherited attribute 等等的東西講的比 MCD 詳細的多,概念讀完如果不懂,還有 Example 可以讀, MCD 就沒有這麼詳細的 Example ,於是進度一下突破,由 Syntax-directed Definition 進入 Type Checking 的部份,開頭還算簡單,但後頭的 Operator Overloading , Polymorphic function ,靠自己讀還是很吃力,所以咬著牙根硬生生的把一堆 notation 囫圇吞棗似的吞了下去,不過還好 Type Checking 沒有寫到太多,不然我大概會發瘋。

感嘆。Type Checking 不知道是本來就有點複雜還是我頭腦笨?難怪 Type 可以拿出來寫一本書 " Types and Programming Language / Benjamin C. Pierce " 。

接下來正在讀的部份就是 Runtime Environment 了,也算是我有興趣的部份,其實最感興趣是後頭的 Code Gen 與 Code Optimization 。

總之目前的感想是,MCD 不適合像我這種自修 Compiler 的初學者讀,應該是先把 Aho 讀完才有基礎應付 MCD。

MCD 也有個部份挺不錯,有一整個 Chapter 討論 Funtional Language 。 ( 大心 )

basic polymorphic type checking
hybrid type checking

I hate sleeplessness

現在是



剛吃完家樂氏加鮮奶,我在讀 Compilers: Principles, Techniques, and Tools

Pugs 發起

Pugs 是目前 Perl6 最完整的實作。 關於 Pugs 的 interview 在這裡看到 A Plan for Pugs 。 ( 雖然是兩年前的東西了 )

讓 Autrijus 大師注意到 Haskell 的原因是起源於覺得 SVK 不夠彈性,於是換了 Haskell 寫的 Darcs 來使用。Autrijus 花了一個月就學 Haskell 。而後 Autrijus 說服了他的委託人 Perl5 缺乏 COW ( Copy-on-write ) 的機制,出資讓他以 haskell 開發更好的 Library.

在開發的過程中,Autrijus 發現到 Haskell 的優異, Autrijus 說:
But I digress. Using Haskell to develop OpenAFP.hs led to programs that eat constant 2MB memory, scale linearly, and are generally 2OOM faster than my Perl library.

Oh, and the code size is 1/10.
這是他發起 Pugs 的其中一個動機。接著他買了許多書,像是 TaPL , ATTaPL 等。
Autrijus:

Anyway. So, I ordered a bunch of books online including TaPL and ATTaPL so I could learn more about mysterious things like Category Theory and Type Inference and Curry-Howard Correspondence.
於是,Pugs 就這樣起來了。 :-) 當然詳細的 interview 請參閱 perl.com: A Plan for Pugs

在 use Perl; 上頭,也有幾篇紀念性的 Announcement 譬如說: "Day 1: Pugs" , "Day 29: A new month begins." 等等。

Pugs 的 Code 在每個模組的開頭幾行都有些有趣的 Quote,應該是 Autrijus 寫下的,譬如說 Class.pm 內的開頭幾行:
{-|
Class meta-model. (object meta-meta-model)

> Learn now the lore of Living Creatures!
> First name the four, the free peoples:
> Eldest of all, the elf-children;
> Dwarf the delver, dark are his houses;
> Ent the earthborn, old as mountains;
> Man the mortal, master of horses...
-}

或許是因為 Haskell 的關係,Perl 6 新增了許多類似 Haskell 的概念、功能,可參考 SynopsesYAPC: Perl 6 Today

IRSSI - 過濾上上下下的訊息

/ignore -regexp -pattern "is (away|gone|back)" * ACTIONS


#update: 後來發現直接用
/ignore * JOINS
以及
/ignore * QUITS
即可。

這樣螢幕會比較乾淨些

2007年9月15日 星期六

戀愛

戀愛得已讓你以正當的名義
嘗盡所有你所喜愛的肉體
以獲得無上的快感
吸乾所有愛著你的靈魂
使得自我膨脹

如此的,放蕩
自由

2007年9月13日 星期四

Slippery Snippets Tag



還記得 Slippery Snippets 吧!他預設的 Tag 是 <{ 和 }> ,但這樣有點醜,若只設成 { } 或 [ ] 也不適合,因為在 Perl 裡可能會鬧彆扭,怎麼說呢? Perl 的 Hash Reference 是由 { } 包起來的,BLOCK 也是,如果在參數內有輸入 { foo => 'bar' } 之類的東西,在 PlaceHolder 切換的時候,取代的 Tag 就會錯誤。

所以,我調整我的 snip_start_tag 如下:

let g:snip_start_tag = "«"
let g:snip_end_tag = "»"


這兩行在 VIM 怎麼輸入呢?你可以 :dig 看看有哪些特殊符號想用,會有一組特定的字符,Insert Mode 下 Ctrl-K 之後接著鍵入那組字符即可。譬如上述的 «» ,是由 Ctrl-K << 與 Ctrl-K >> 輸入的。

這樣就不會導致 Snippet 的符號與程式碼衝到。畫面也會比較好看。

2007年9月10日 星期一

Vim Tip - 修改等號左右邊的表示式

有時候為了修改等號左、右邊的表示式,常常得在移動游標、刪除等動作上浪費時間,譬如以下敘述

$var = $foo + 3 + function( $v1, $v2 , $3 ) * 3;

所以如果為了修改上面敘述的等號左邊或右邊,可以新增底下 map 至 .vimrc
nmap cr=    $F=lcf;
nmap cl= $F=hc^
如此一來,只需在當前編輯的那行鍵入 cr= 或 cl= 即可。

Firefox::搜尋



Firefox 內建的搜尋可以透過視窗右上角的表單來搜尋,在字串上點右鍵,就會以那個表單所預設的引擎搜尋。
但是如果要查不一樣的搜尋引擎就麻煩了,還得到 C-k 到視窗右上方的表單調整,重新輸入文字才能搜尋。

於是有個套件 SmartSearch ( https://addons.mozilla.org/en-US/firefox/addon/188 ) 可以讓你在右鍵直接做不同的搜尋。

此套件會需要用到 SearchWords ( https://addons.mozilla.org/en-US/firefox/addon/4328 ) 套件所建立的關鍵字搜尋書籤。

2007年9月5日 星期三

最近的對話

C: 那我決定了
C: 我可能會買一本燕子或地底兩萬里

R: 地底兩萬里呀?

C: 乾脆三本都買好了

R: 我只看了 地底三萬尺

C: XD 難怪我覺得好奇怪...

R: 哈哈哈 阿呆

-----

R: 我好像忘了吃晚餐 肚子好餓唷~~~~~

C: 你怎麼會忘了吃晚餐...ORZ
C: 你不是住家裏嗎?

R: 你都會忘記睡覺了 哈哈哈
R: 對啊 住家裡呀

C: XDD

2007年9月1日 星期六

『你可以壓抑住一時的情緒,但是當原本被壓抑的情緒爆發的時候,將會原本嚴重好幾倍,足以把你整個人吞噬掉。』