2010年12月30日 星期四

PerlTW Planet 重新啟動

之前有個相當古老的台灣 Perl 星球 ( PerlTW Planet ) 放在這 http://planet.perl.org.tw/,是由臥龍小三維護,不過似乎年久失修。

Shelling 日前購入 perl.tw 網域名稱,所以我重新 host 了 PerlTW Planet ,目前放在這:


想要加入的朋友可以直接上 Github Fork 或是於此篇文章回覆囉。

2010年12月20日 星期一

Announcing I18N::Handle

Since every web frameworks use their class and different way to make localization, and some don't have it. To use L10N stuff, you need to declare a class which inherits from Locale::Maketext if your web framework doesn't handle it. And Locale::Maketext is not simple enough. You will need to use $hl->maketext everywhere.

So I am thinking about a common handler that doing L10N for most application or frameworks.

I18N::Handle is a common handler for web frameworks and applications.

I18N::Handle also provides a global locale function to make localization, you can use Gettext style locale function to make localization in every packages, the default loc function name is "_". To change the exporting loc function name , please use loc option.

The difference between I18N::Handle and Locale::Maketext is that I18N::Handle automatically does most things for you, and it provides simple API like speak, can_speak instead of get_handle, languages.

To generate po/mo files, App::I18N is an utility for this, App::I18N is a command-line tool for parsing, exporting, managing, editing, translating i18n messages. See also App::I18N.

Here is a simple usage:


More is on github.

中華電信光世代 負評多

在 facebook 上看到這樣的一個 Event "要求中華電信提高光世代上傳頻寬,別再妨害國家進步." http://www.facebook.com/event.php?eid=163086903715281。 因此稍微找了一下,發現負面評價很多:

裝中華光世代請三思

之前在鳥窩 BBS 看到長輩勸阻大家不要裝肛世代,本來還不明就裡。
直到自己裝了才知道這東西有多鳥。

出國看 YouTube 比 8M 慢不說,裝機完的兩週內爆炸了五次 ….
光今天就炸了兩次,還挑我下班回家想上網的時候爆炸。(燈號正常但是停在撥號,關機重來也一樣)

光打去請客服的 reset 電話就打了四次…
這玩意看起來真是裝不得…-_-

真是在開用戶的玩笑(怒)

另外也有一篇是講,中華電信的光纖是用來魚目混珠,實體線路還是電話線路。

中華電信光世代「偽」光纖
光纖現在申請的速度是10M/2M,比ADSL最高可申請到的12M/1M看似略遜一籌,但是這兩者都是不保證頻寬,所以沒什麼好比的。不過一般來說光纖還是比較快的,即使是只有機房這小小一段。

「不保證頻寬」實在是很神奇的字眼,就像去吃到飽餐廳吃飯,餐廳說「不保證菜色」、「不保證吃飽」一樣。每次菜色定量、客人一多把菜吃完絕不補菜。這算什麼吃到飽啊?開吃到飽餐廳就不能怕客人很會吃。同樣同一區太多客戶上線就該擴充頻寬啊,客戶多、交的錢也多啊?靠一句「不保證頻寬」,客戶繳12M的錢只有2M的速度也拿中華電信沒輒。反正現在只有中華電信一家壟斷線路,客戶也沒其他選擇,其他電信公司只有被打壓的份。

拿大部份走傳統電話線路的「偽」光纖來當「真」光纖來賣,同樣祭出「不保證頻寬」口號就行,這該歸功中華電信行銷真正強嗎?
中華電信連 PS3 天天斷線



關於中華電信光世代10M/2M 問題
一般的 ADSL 差不多是落在 10ms~30ms ,不過接了光纖之後看來反應時間還是一樣?

2010年11月20日 星期六

奧運比賽用的叫黨旗



剛才看影片才發現到,每個國家在奧運會場都是放自己的國旗,不過台灣卻是放醜到不行的黨旗而不是國旗。

當然名字是 Chinese Taipei 大家大概都聽習慣不覺得什麼了,但是都沒有人覺得自己是滾水中的青蛙。

2010年11月16日 星期二

Moose 文件翻譯

typewith.me 是一個共同寫作平台。今日嘗試開始翻譯 Moose 文件,透過這個平台來翻譯,感覺還不錯。

http://typewith.me/bWn2dejlEo

Moose 文件的首頁,還尚未翻完,歡迎大家幫忙翻譯、檢閱。

另外在翻譯之中,順便去看了日本那邊對 Moose 文件翻譯的資源,發現翻譯量和速度實在是相當的恐怖呀,好奇的人可以在 http://perldoc.perlassociation.org/pod/Moose-Doc-JA/index.html 這裡看到 Index。

Perl 很神奇的在日本有一個相當巨大的 Ecosystem ,就連在東京辦的 YAPC 的規模都幾乎是世界最大的。 YAPC::ASIA 今年的與會者就超過 600 多人,共有 3 個 track,光是 Lightning talk 就可以安排到兩天,每天至少有半個小時精彩的 Lightning talk 可以觀賞。 台灣要加油呀

2010年11月10日 星期三

Haskell - Cabal

Install from apt-get:

$ apt-get install cabal-install

Update source list:

$ cabal update

To install package:

$ tar xvf ...
$ cd ...
$ cabal configure
$ cabal build
$ cabal install

2010年11月6日 星期六

Vim7.3 Conceal Feature with Perl



Vim7.3 has a new feature called conceal, which can hide a syntax identity and give a better display with unicode.

for perl lambda function , we can define this:

To get a lambda identity.

Note, it doesn't change code itself, it's only for display.

2010年10月5日 星期二

App::I18N

App::I18N


Description


App::I18N borrows some good stuff from Jifty::I18N and tries to provide a general
po management script for all frameworks | applications.


Basic flow


Basic po file manipulation:


parse strings from lib path:


$ cd app
$ po parse lib

this will generate:


po/app.pot

please modify the CHARSET in po/app.pot.


... modify CHARSET ...

create new language file (po file):


po lang en
po lang fr
po lang ja
po lang zh_TW

this generates:


po/en.po
po/fr.po
po/ja.po
po/zh_TW.po
... do translation here

when you added more message in your application. you might need to update po
messages, but you dont have to delete/recreate these po files, you can just parse your messages again
all of your translations will be kept. eg:


$ po parse lib
... do translation again ...

Generate locale and mo file for php-gettext or anyother gettext i18n app:


parse strings from . path and use --locale (locale directory structure):


$ cd app
$ po parse --locale .

this will generate:


po/app.pot

please modify the CHARSET in po/app.pot.


... modify CHARSET ...

create new language file (po file and mo file) in locale directory structure:


$ po lang  --locale en
$ po lang --locale zh_TW

this will generate:


po/en/LC_MESSAGES/app.po
po/en/LC_MESSAGES/app.mo
po/zh_TW/LC_MESSAGES/app.po
po/zh_TW/LC_MESSAGES/app.mo

(you can use --podir option to generate those stuff to other directory)


... do translation here ...

if you use mo file , you might need to update mo file.


$ po update --locale

eg:


-project (master) % po update --mo --podir locale
Updating locale/zh_TW/LC_MESSAGES/project.po
Updating locale/zh_TW/LC_MESSAGES/project.mo
9 translated messages, 53 untranslated messages.

Note that if you have po or locale directory exists, then it will be the default po directory.


And locale directory will enable --locale option.


Auto Translation


Auto translate via Google Translate REST API:


Default backend google translate rest, this will translate po/en_US.po to po/zh_TW.po.
when using --locale option , this will translate locale/en_US/LC_MESSAGES/en_US.po to ...


$ po auto zh_TW --from en_US
$ po auto zh_CN --from en_US --to zh_CN
$ po auto zh_CN --from en_US --overwrite --prompt
$ po auto --backend google-rest --from en\_US --to zh\_TW

Generate Static Dictionary File For Code


To generate dictionary hash in perl:


$ po gen pm

To generate dictionary hash in javascript (json):


$ po gen json

To general dictionary hash in javascript (with variable name):


$ po gen js

Usage


create dictionary files for language:


$ po lang zh_tw en

parse i18n strings:


$ po parse bin lib static share/web/static/js ...

start a web server to edit po file:


$ po server -f po/en.po

start a web server to edit po file of specified language:


$ po server --lang en

extract message from files and start a web server:


$ po server --dir lib --dir share/static --lang en

TODO




  • Initialize a system-side i18n database:


    po initdb



  • Initialize a temporary SQLite database for collaborative editing, and write
    back when INT/TERM signal recevied or could be triggered by a submit button.


2010年9月28日 星期二

Lftp Sync Plugin for Vim

Vim Lftp 同步插件釋出。

just released Lftp-sync vim plugin on Github: http://github.com/c9s/lftp-sync.vim #vim #github

2010年9月18日 星期六

perlomni - sugar for DBIx::Class

I've added some parsing function to perlomni vim plugin to parse result class name and added some dictionary for DBIx::Class:





http://github.com/c9s/perlomni.vim

PHP - L10N class

目前看起來好像沒有很好且輕便的元件可用。orz

所以寫了一個 Lightweight 的 L10N class for this. 算是一個 Gettext 的 Wrapper class。
既學了 JavaScript 也試著把 cascading 融入 PHP 裡頭,希望這樣的 API design 可以讓開發者很開心。


另外,若要剖析 gettext string 產生 PO/MO 字典檔案,請參見 App::I18N : http://github.com/c9s/App-I18N



2010年9月16日 星期四

Vim - Generate your vimball with vim-makefile

To generate a vimball file for your vim plugin isn't very hard. You can use vim-makefile to generate vimball file automatically.

to get vim-makefile:

$ wget http://github.com/c9s/vim-makefile/raw/master/bin/vim-makefile

to add makefile for your plugin:

$ cd plugin
$ vim-makefile

to make your vimball (place your plugin code in vim runtime directories, for example:

autoload/perldoc.vim
syntax/perl6.vim
plugin/html/html5.vim

then run `make vimball`:

$ make vimball

then the vimball file will be generated.
Comment 回在這邊,轉貼一下:
http://lightyror.thegiive.net/2006/09/rubypythonperl.html

雖然三種語言都有寫過一些,不過我對 Perl 程式語言比較熟悉些,我對 Perl 程式語言的『澄清』如下... XD

若是讀 CPAN 上模組的程式碼,你會發現其實 Perl 程式碼並不是 write-only ,然而會變成 write-only 大多是為了解決小而重複性低的問題,加上大家特別喜歡拿這部份出來討論,而長久下來大家對 Perl 所留下來的偏見罷了。 (當然還有很多,但就不在此提)

Perl 程式設計師大多並不會寫出 write-only 的程式,不過大家都喜歡將 obfuscated 的 perl code 拿出來炫耀一番就是,這也是為何 write-only 的由來之一。

不過若反過來看,有誰沒有寫過 write-only 的 code ? 其實人人有寫過 write-only 的 code 的經驗,不一定非得 Perl 才行,對吧? :-P

此外,由於 Perl 發展歷史悠久,Perl 擁有一套引以為傲的單元測試系統,重要的模組得以經過完整測試才會安裝到系統上,所以就算是 write-only 也不必擔心是否會因為 write-only 造成其他延伸問題。

順帶一題,近幾年 Perl 的發展,已有許多模組的發展已經使得現代的 Perl 與早期的 Perl 已經有及大的差異。 不過由於大多數的人對於 Perl 的認識並不多,所以對於 Perl, 大家都還是停留在『撰寫 CGI』的那個年代。 舉例來說,Moose, Autobox 模組的開發,使得 Perl 得以導入後現代的物件導向系統,使得 Perl 可以使用更簡潔、強大且可輕易擴展的物件導向功能。而 AnyEvent, Plack 等模組的發展也使得 Perl 的 Web 開發更加強大且快速。

關於此相關的資料可以參考 gugod 的 good evils in perl ( http://www.slideshare.net/gugod/good-evils-in-perl )

以及 Moose: http://www.iinteractive.com/moose/

Plack:
http://plackperl.org/

以上。 :-)

2010年9月7日 星期二

X201 雙螢幕調整筆記

總之很奇怪,在 Ubuntu/Debian 底下沒辦法把主要桌面設定成外接螢幕,要不然就是畫面整個黑掉沒辦法。用很 tricky 的方式才能至少把主畫面調整到外接螢幕上。但也沒時間研究,先筆記一下

1. 使用 mirror mode
2. 取消 mirror mode ,套用
3. 將外接螢幕調整解析度,套用
4. 關掉 Laptop 螢幕,套用

這時候主畫面才會出來。orz

2010年9月4日 星期六

cpans - bash version

Apart from takuhirom's perl version cpansearch http://d.hatena.ne.jp/tokuhirom/20100901/1283303919 and my c version cpansearch ( github.com/c9s/cpansearch ) , I wrote a bash version cpan search:

2010年9月1日 星期三

cpansearch - CPAN 模組搜尋工具



cpansearch 是一 CPAN 模組搜尋工具,以 C 撰寫而成。提供一簡易且快速的方式達到模組搜尋的功能,並利用 ncurses 來建立一選擇模組安裝之介面(類 aptitude),可一次選擇需安裝模組安裝。使用 cpansearch 不需另外設定 CPAN 或是 CPANPLUS 就可直接使用。

cpans 用法簡介:


$ cpans -f

初始化 source list

$ cpans -u

更新 source list

$ cpans Any

搜尋 Any 字樣

$ cpans -i any

忽略大小寫。

$ cpans -v Any

Verbose 輸出(輸出版本以及模組路徑)

$ cpans -vv Any

Very verbose。 (輸出版本以及完整模組路徑)

$ cpans --nc Moose

啟動 NCurses UI。


開發

目前開發皆進行於 Github ,歡迎 patches 以及 idea。

cpansearch + ncurses

cpans now is integrated with ncurses. ( http://github.com/c9s/cpansearch )

$ cpans --nc Moose








2010年8月26日 星期四

vim - pod-reader plugin

I've wrote a vim plugin for perl POD, called pod-reader. ( http://github.com/c9s/pod-reader.vim )

clone repository:

$ git clone https://c9s@github.com/c9s/pod-reader.vim.git

just run gnu make to install:

$ make install

then call :PodReader command with directory path.

2010年8月23日 星期一

cpansearch (cpans)

cpansearch is written in C, cpansearch is going to add some ncurses ui, just like debian aptitude.

http://github.com/c9s/cpansearch

cpansearch usage:

init source data file:

$ cpans -f http://cpan.nctu.edu.tw/

update source data file:

$ cpans -u

search module

$ cpans Any::

to search (ignore case)

$ cpans -i ::server

show module names only:

$ cpans -n Any::

pipe to cpanminus to install modules:

$ cpans -n Any:: | cpanm

2010年8月16日 星期一

陌生的場所卻是最親切的場所

2010年8月14日 星期六

Inception 中不斷播放的 Edith piaf 的曲子, Non! Je ne regrette rien. (我無怨無悔)

Non! Rien de rien
Non ! Je ne regrette rien
Ni le bien qu’on m’a fait
Ni le mal tout ca m’est bien egal !

Non ! Rien de rien …
Non ! Je ne regrette rien…
C’est paye, balaye, oublie
Je me fous du passe!

Avec mes souvenirs
J’ai allume le feu
Mes chagrins, mes plaisirs
Je n’ai plus besoin d’eux !

Balayes les amours avec leurs tremolos
Balayes pour toujours
Je repars a zero …

2010年8月13日 星期五

cpansearch (cpans) - a cpan module search utility written in C.

因為受不了 cpan 和 cpanplus 的搜尋速度 (每次 index reload+update 至少超過 5 秒以上),所以找時間用 C 寫了一個 cpan module 搜尋工具。 'cpans':

http://github.com/c9s/cpansearch

抓下來之後直接 make install 即可。相依於 glib 以及 curl。

由於是用 C 寫的,所以速度相當地快!

Twitter Replies:

peteraronoff
@c9s Beautiful. It works perfectly, and yeah it's very very fast. Thanks.

2010年8月4日 星期三

在我自殺以前,我的自我批判會將我殺死。

2010年8月2日 星期一

刪除噗浪是想一段時間了,其實有很多原因,除了浪費很多時間、心思之外

用噗浪,平常沒事心中還要掛念著網路上的一個空間發生了什麼事情。
噗浪的環境已將我內心中渴望表現自己、渴望別人關心的那一面
發展出來,然而我已太在乎別人對我的看法、意見,受到這些影響
心思容易煩亂。但我要擔心的事情太多了。

刪除帳號,對自我是一個期許,期許自己集中注意力在自我的成長,
期許自己學著不對不相關的事情牽掛,讓那些時間可以清理內心的空間,以及自我反省。

信寫給你,順便替自己做個紀錄,希望自己不要忘記初衷。

2010年7月30日 星期五

Linux Kernel 2.6.35-rc5 Config for X201 Thinkpad.

Ubuntu Linux works well on X201 Thinkpad, Wireless, BlueTooth, Sound works well.

For Ubuntu Users , if you use 9.04, 10.04 version, you should append i915.modeset=0 boot option to grub, and there is safe-mode graphics only.

To enable 3D acc graphics, you should use kernel after 2.6.35-rc6.

Config file is here:
http://gist.github.com/499990

Beside, below is the patch for Inter i915 driver:
--- drivers/gpu/drm/i915/intel_display.c.bak 2010-07-30 05:25:09.898404000 +0800
+++ drivers/gpu/drm/i915/intel_display.c 2010-07-30 05:24:47.730403994 +0800
@@ -865,6 +865,8 @@
/* approximately equals target * 0.00488 */
int err_most = (target >> 8) + (target >> 10);
+ err_most += 50;
+
found = false;
if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) {


或是直接使用 http://people.canonical.com/~hzhang/554569/ 的 deb package.

2010年7月25日 星期日

事情的發展總是出乎意料之外,在一連串的選擇之中,演變出如此一般的結果。 我有很多的選擇,但我又能有個幾年能讓我虛擲?能有多少事情能讓我犧牲?每當我工作告一段落,深夜在台北街頭走回住所的路上,我一直想,但總想不出個方法。望著黑夜裡空蕩的大馬路上來來往往的計程車,我腦中只有不斷迴盪的那些電子音樂,還有許多我所關心的人的面孔。

就當作是在等待某個收穫好了吧。我最多只能給自己半年,至少是身體這麼告訴我的。

2010年7月22日 星期四

make-kpkg 時不 make clean

在 Debian-based Linux 上使用 make-kpkg compile 時,在每次執行 make-kpkg 指令,都會自動 make clean 將之前 compile 的部份清除掉重新編譯,要防止 make-kpkg 這樣作,可參考以下作法:

http://linux.derkeiler.com/Mailing-Lists/Debian/2005-05/3189.html


Add 'do_clean := NO' to /etc/kernel-pkg.conf.
As far as using ccache, you are able to specify your C compiler on the
command line. From the make-kpkg(1) man page:
You may control
which version of gcc used in kernel compilation by setting the Makefile
variables CC and HOSTCC in the top level kernel Makefile. You can do
this simply by

% MAKEFLAGS="CC=gcc-2.95" make-kpkg ...

(please see the top level kernel Makefile for variables that can be
set).

2010年7月5日 星期一

人生只是來來去去的過程,沒什麼好記在腦裡,痛在心裡的。既然身為過客,那麼就做過客該做的事。

2010年7月1日 星期四

Links

找到 jserv 以前寫的一篇 KDE 相關文章-KDE 元件技術: http://jserv.sayya.org/kde/zh_TW_kpart-techno.html

中文 X Window Howto: http://www.linux.org.tw/CLDP/HOWTO/app/XWindow-User-HOWTO/XWindow-User-HOWTO-Chinese-3.html#ss3.5

MacOS OpenGL Programming Reference: http://developer.apple.com/mac/library/documentation/GraphicsImaging/Conceptual/OpenGL-MacProgGuide/opengl_intro/opengl_intro.html

OpenGL Programming Guide: http://www.glprogramming.com/red

2010年6月27日 星期日

於 Mac 環境底下編譯 OpenGL 程式

在 Mac 底下要編譯 OpenGL 程式,其實不需要 Cocoa 也可以執行編譯。首先要確定系統已安裝好 XCode ,並確定 /System/Library/ 底下有 OpenGL framework 以及 GLUT framework。

只要在 gcc 加上 -framework 參數使用 OpenGL , GLUT framework 等即可。

gcc -Wall -o abgr abgr.c -framework OpenGL -framework GLUT

其中 abgr 程式如下:

2010年6月26日 星期六

Vim Script Programming

日前在 OSSF 自由軟體鑄造場的簡報,但其實簡報涵蓋的部份不多,日後會再把當時所講到的部份補上,希望可以幫助很多朋友上手 Vim Script: :-)

2010年5月27日 星期四

Vim - filefind.vim

filefind.vim 是一依據 find 命令的結果的 Vim 延伸插件。

平常需求為:

$ find path/to -type f -iname "*pattern*"

使用 find 命令加上 -type f 參數搜尋檔案,但是要對該檔案清單另外處理就麻煩了,這時候最直接想到的是:

$ find path/to -type f -iname "*pattern*" | vim -

將該結果導向給 vim ,對 vim 命令而言,加上 "-" 則為從 stdout 讀取結果導至 Buffer (編輯緩衝區)。

此時若要開啟、重新命名、編輯檔案,便可利用 filefind.vim 插件來執行這些操作。

安裝:

可使用 git 將 repository 抓取下來:

$ git clone git@github.com:c9s/filefind.vim.git

$ cd filefind.vim

$ make install

只需要呼叫 make 命令即可安裝。 :-)

用法可參考 github 上的 README file.

2010年3月27日 星期六

2010年3月25日 星期四

hypergit.vim - GitStatus / GitStash Buffer



這是可直接於 Git Status/Stash List 上 check diff , delete , revert , add 操作檔案的 Buffer. 目前已經新增到 hypergit.vim 內。

只需直接下 :GitStaus 或是 GitStash 命令即可。

http://github.com/c9s/hypergit.vim

2010年3月21日 星期日

Vim-Makefile

A lightweight non-dependency Makefile for install, uninstall, bundle, distribute Vim plugin scripts.

DESCRIPTION

I wrote this because I saw people using Rakefile to install plugin scripts. but some people dont have rake on their system. I even wrote my own perl module (VIM::Packager) to do something like this, but it has too many dependencies and need to setup cpan shell (before we have cpanminus)...

GNU make is ths most commonly used utility, which is almost in every system, so it basically doesn't have other dependencies.

This Makefile provides features to install,uninstall,bundle,distribute vim plugin. it's simple , quick and lightweight. And you can also use vim-makefile to generate vimball distribution. (More details of vimball, please see :help vimball section)

And I also appended a util vim-makefile to fetch the latest Makefile. you can simply run vim-makefile to generate the Makefile.

Check out on github.

Vim-Makefile

輕量且無相依的 Makefile ,用於安裝、反安裝、包裝、發佈 Vim 的插件。

簡介

我寫了這個 Makefile 是因為我看見有些人使用 Rakefile 來安裝 Vim 插件腳本,但是有些人們 沒有 rake 或 ruby 在他們的機器上,或是不知如何使用。 我之前甚至使用 Perl 寫了 VIM::Pacakger 來做類似這樣的事情,但是相依太多模組,且需要時間設置工具。

GNU 的 make 是最廣泛被使用在各類的系統上的工具,在所有的電腦上都一定能找的到他。 (Windows 除外)

此 Makefile 提供了安裝、反安裝、包裝、發佈 Vim 插件的功能,相當簡單、快速、容易使用。 您同時也可用於產生 Vimball 格式的發佈檔案,或是使用 tar 打包。

(關於 Vimball 的其他資訊,請參考 :help vimball 章節)

另外我也附上了一個腳本 vim-makefile 用以從 github 抓取最新的 Makefile 來 初始化插件的 Makefile。

查看完整內容:
http://github.com/c9s/vim-makefile/blob/master/README-zh.md

2010年3月16日 星期二

Vim - git rebase helper

This helper script is for `git rebase --interactive` command:

2010年2月27日 星期六

為何要使用 CPANMinus

因為原本的 CPAN Shell 啟動時間慢,累贅的資訊太多,太多 Prompt,且對新手來說,太多預設設定要做,但新手只是需要儘快準備一個完整的開發環境來寫 Perl 程式碼而已!然而 CPAN Shell 由於太古老,該程式碼已經相當難維護、整理,所以一直沒有良好的修正。更別說是 CPANPLUS ,CPANPLUS 本身又相依於一堆模組,簡直是疊床架屋,對新手來說,安裝好 CPANPLUS 甚至要花上 10 分鐘!

所以 Miyagawa 寫了 cpanminus ,這個模組 CPAN Shell 啟動時間相當的快,而且不相依於其他累贅的模組如 Moose... :-P

cpanminus 只需要你有一個 C Compiler, Module::Build , ExtUtils::MakeMaker (Perl 都內建了), 甚至直接內嵌了 HTTP::LIte 模組。

所以安裝 cpanminus 根本不需要花上超過 3 秒的時間!想想看你在升級 CPAN 或是 CPANPLUS 的時候多麼痛苦!!

再來,常有使用者提出若無 root 權限,該如何安裝 CPAN 模組,這個問題一直是長期以來困擾大家的!而且又無完善解法。

只要以非 Root 使用者執行 cpanm 安裝模組,該模組自動會裝到 home 目錄底下 ~/perl5 ,也不需另外自行設定!

安裝方式相當簡單:

cd ~/bin
wget http://xrl.us/cpanm
chmod +x cpanm


這樣就可以了,因為 cpanm 只是一個單一的執行檔!

使用方式:

cpanm Module
cpanm MIYAGAWA/Plack-1.0000.tar.gz
cpanm ~/mydists/MyCompany-Framework-1.0.tar.gz
cpanm http://example.com/MyModule-0.1.tar.gz
cpanm http://github.com/miyagawa/Tatsumaki/tarball/master
cpanm --interactive Task::Kensho


你也可以到 github 上取得最新的版本! @miyagawa ROCKS!!

http://github.com/miyagawa/cpanminus

2010年2月18日 星期四

使用 keychain 管理 ssh 金鑰

一般來說要利用 ssh key 來做 remote ssh login 的時候,就會需要用到 ssh-agent。大多使用下列命令來啟動 ssh-agent

$ echo `ssh-agent` > .agent

如此會將 ssh-agent 的環境變數如 pid 等等輸出至 .agent 檔案內。

接著使用:

$ source .agent

將 .agent 環境變數載入進來。

接下來再使用 ssh-add 命令來將私有金鑰載入:

$ ssh-add path/to/key1

在 ~/.ssh/config 內,加入

Host yourhost.com
IdentityFile path/to/key1

以告知 ssh 使用 path/to/key1 的 private key,但記得將 key1.pub (public key) 新增至 remote 的 .ssh/authorized_keys 檔案內。

前面所敘述的 ssh-agent 命令使用時常會遇到管理的問題,所以還得自己寫 script 檢查是否已有既有的 ssh-agent 正在運行等等之類的繁瑣事項。而 keychain 則是一套 script 可幫你處理這些問題。

在 ubuntu 底下安裝 keychain:

$ sudo apt-get install keychain

以 macports :

$ sudo port install keychain



使用方式很簡單,不需要自己 launch 一個 ssh-agent ,只需直接呼叫 keychain 命令將 private key 載入:

$ keychain path/to/key1

接著 keychain 會告知該 ssh-agent 環境變數的檔案位置,提供給不同 shell 使用的 script ,只需將該檔案的 path 加入至 .bashrc 或 .zshrc ...

$ source ~/.keychain/....blah

即可。如此一來每當開新環境時,就不需再去檢查 ssh-agent pid ,或有 ssh-agent,就直接使用既有的的,若無,則 launch 一個新的 ssh-agent 並且更新 ssh-agent 的環境變數。

以下是我用來載入金鑰的 script:



由於我都將 public key , private key 放置於 ~/.ssh/keys 內,該 script 用以自動將 private key 載入。

2010年2月2日 星期二

Vim - glob 應用

臨時需要將一目錄下所有的檔案插入為 img tag ,所以臨時直接在 vim command line 下寫了 這樣的東西來應付:


整理了一下:

2010年2月1日 星期一

Vim - TreeMenu.vim

This is a TreeMenu class for VimL. so that you can render a tree menu in a buffer.

Synopsis:


and you can also hook a method to after_render when each time the menu buffer is updated , just like what i do in hypergit.vim - I need to redraw git help message when the buffer is updated by tree menu.


Menu Source:

hypergit.vim (A Git plugin for vim)

最近的作品 - hypergit.vim。先前的 fastgit.vim 經過一些思考後,打掉重寫了,新增的 GitMenu 讓原本越來越的 Command 得以有組織性的以樹狀選單呈現,更 Powerful。

正為了要有一個樹狀選單,所以晚上以 VimL 實做了 Helper Message Class 以及 TreeMenu Class ,以方便其他各種 Plugin 需要用時重用。

該 Git Menu 可自動 Parse Remote 名稱 、Branch 名稱以產生 TreeMenu ,以及各 Menu Node 都可像 Nerd Tree Plugin 一般延展、收和,或執行。

以下是 Screenshot:


Well, It's still under development.

2010年1月24日 星期日

Vim - Making your script auto-installable

Once you write a plugin , you will need it to be auto-installable. Vimana is a script manager , which parses script files, and looks for a "script type:" tag to install the script.

For example , if you have script , which is a ftplugin , then you should write:


in your script file. cases is ignored.

then the plugin could be installed via Vimana script manager.


Or if you have multiple file to install , you can put your script files in this kind of directory structure:

plugin/script.vim
ftplugin/script.vim
doc/script.txt

then tar it and upload to vim.org site , the plugin could be installed via Vimana too.

Vimana - new feature.

Vimana 的移除功能總算是找時間弄好了,兩個新的 Feature:

1. Customizable Runtime Path:

$ vimana install [plugin] --runtime-path [path]

可以指定要安裝的 Runtime Path , 可在 .vimrc 內加上 set runtimepath+=[your/path] 。

2. To uninstall Plugin:

$ vimana remove [plugin]

即可移除安裝

或者強迫移除安裝:

$ vimana remove [plugin] --force

基本上 Installation 的 Record 都是以 JSON 格式置放在 ~/.vim/record 內,所以若有其他的 implementation 也可以很輕易的讀取,VimL 則可以直接 eval 該 record 來取得資料。

2010年1月14日 星期四

Vim - [[ and ]]

一般來說 [[ , ]] 預設可在 c , java 裡頭跳躍函式,不過沒有 support Perl code , 所以為了方便在 Perl 裡頭的函式跳躍,我寫了這樣的 search mapping:


如此就可以在 sub 函式間跳躍,如果使用 Moose 的 method ,可自己將 'method' 加上。

2010年1月10日 星期日

vimomni.vim


雖然 vim 本身有 C-x C-v 來做 command 的 completion ,不過在寫的時候還是會覺得相當不夠用。於是 vimomni.vim 這個 completion plugin 就是為了寫 VimL (Vim script) 而昨天在車上突然寫好的。

基本上 vimomni.vim 本身支援了 runtime 所有 variable name , command name , function name 的 completion,當然也會自動 parse 目前檔案所定義的 Function , Variable 以及 Command 等等,同時也針對不同的 context 來補齊。

另外一個好用的是 option name 的 completion,輸入 "set " 後, C-x C-o 叫用 OmniCompletion 即可自動補齊 option 。

將 ftplugin/vim/omni.vim 放置到自己的 ~/.vim/ftplugin/vim/ 底下,開啟 .vim 檔時便會生效。若要手動載入,可輸入 :setf vim 。

git-sync

當你的 Git Repository 越來越多的時候,git-sync 是一個幫你同步的好工具,就不需要一個一個慢慢 pull 或是自己寫 script 去 pull 了。太苦。

git-sync 支援三類型的 sync 機制,local , github 以及 remote ,local 是指到你指定的目錄底下幫你同步所有的 git repository ,如果是 svn clone 的 repository ,也會幫你做好 git svn fetch , git svn rebase 的動作。

github 則可幫你同步 github 上所有的 repository , remote 則是你可指定自己的 git repository host 來做同步。

譬如說我的 .gitconfig 這樣設定:

那麼只要下

$ git sync local


$ git sync github

其中 local 以及 github 只是 category 的名稱,可以隨意自訂。

即可同步所有的 repository。

或是如下設定:

See Also:

2010年1月6日 星期三

Vim - eval command.

為了快速的驗證一段 VimL 或是測試、更新 VimL 的 function , option ,我有一個 function 是這樣寫的:


如此當我寫了一個 VimL 的 Function define 的時候,只需要使用 visual line-wise mode 選取起來之後,利用 e vmap 來 eval 這個 region。

就不需重新 re-source .vimrc 或是重新開啟 Vim 。

2010年1月4日 星期一

Nara Leão

說到 Bossa nova ,大家大概都會想到 Lisa Ono。但其實要說 Bossa nova 的 Muse 女神,非 Nara Leão 莫數,在 bossa nova 被錄下來之前通常都是 intimate 的。

Nara Leão 巴西人,她的聲線相當性感,比 Lisa Ono 更纖細敏感。也許是因為人生經驗的因素吧,Leão 的歌聲帶著 nostalgia 的味道,可惜已經在 1989 年過世,享年 47 歲,可是年少早逝的歌手。



[1] Nara Leão - http://en.wikipedia.org/wiki/Nara_Leão

2010年1月3日 星期日

Vim - URL Line Opener

為了要開啟一連串的 URL List 所以寫了這個。


你可以自己定義自己的 browser command 。"V" 選擇區塊然後輸入 :OpenURLLine ,或是直接 :OpenURLLine 。

# 基本上這種東西只有在 Google Chrome 沒辦法用 Extension 沒辦法存 Session 只能一頁一頁把網址丟到文字檔的時候用而已。Orz

2010年1月2日 星期六

豚跳技巧心得

雖有將近 6 年多沒再繼續玩滑板,後來一上板之後卻可以做出豚跳感覺來不賴。

以前練習總是胡亂練習,不懂得思考與調整,所以現在試著對每一次的動作找出缺點以及出錯的原因。

* 預備豚跳時,重心應該是平均放在兩腳,利用兩腳的力量跳躍。以前誤以為是只利用前腳的力量豚跳,後腳只負責把滑板敲起來。事實證明是利用兩腳跳躍可以跳的更高,而且可以確保力量足夠將滑板敲起來,也才有辦法在空中把滑板拉平。

* 身體必須與滑板保持平行。常常會因為豚跳的時候身體會不自覺轉到正面,因此滑板在空中會因為上半身拉動,導致著地的時候和行進方向不為平行,角度太大時,容易造成跌倒。

* 跳起之後的重心不該往前或往後移動。這完全是以前練 180 Backside Ollie 的時候造成的錯誤習慣。

* 後腳在跳起之後必須立刻收高,如此才有辦法把板身拉平。

* 在拖板時,前腳應該要讓腳背往外翻,讓摩擦面積增加。這個動作如果沒有做好或是忘記做的話,會造成板身沒辦法拉平。


Mac - ghc on snow leopard

由於 Macport 上的 ghc 現階段完全無法在 snow leopard 上編譯安裝,這裡有一篇running haskell ghc on snow leopard 寫了解決方案。

先到 http://hackage.haskell.org/platform/ 安裝 Haskell Platform (已編譯好的 binary)
修改 /usr/bin/ghc , /usr/bin/ghci ,加上參數 -optc-m32 -opta-m32 -optl-m32 。

2010年1月1日 星期五

關於滑板的那些歲月

在國中時,好友意外的在某個地方撿到了一塊滑板,以當時估計那塊滑板的價值大概四千至五千,算是當時不錯的板。於是這一塊滑板為一群苦悶的少年帶來了一些歡樂。下課時、掃地時我們都在走廊上瘋狂的練習滑板,甚至豚跳。每練一次豚跳好像都快把三樓的水泥走廊震垮,不過當時的我們什麼都看不見,就是一直這樣在學校胡鬧,氣到老師大怒。



當時的我還是相當叛逆的。後來滑板技巧較熟之後,甚至還直接溜滑板到學校,在自修時間從教室前的一整排走廊滑行而過,或是故意在女生班前面的走廊滑行、或玩弄技巧。 XD

後來存錢存了很久,終於有了自己的第一塊滑板,當時是和班上朋友一起去組的板,每個人都選了自己喜歡的圖樣 (結果後來這群朋友豚跳都還沒練好就沒繼續練下去了)。過了一陣子,一個人在家附近的公園認識了第一群滑板的朋友,這群滑板的朋友從 13 歲到 33 歲都有。

有一段時間常在學校的禮堂前練板,從大樓梯一躍而下,或 kick-flip , heel-flip 或 180 Ollie 等等,引來眾人*側目*。那時候因為還沒有所謂的極限運動場,我們只能找合適的場地練習,有的地方可能會被附近的居民抗議太吵,或說我們破壞地磚。。正因為場地並沒有很豐富可以用來練卡招 (Sliding 之類) 或像是滑溜碗那樣可以玩的技巧,於是我們練最多的都是地板招式。



後來讀大學,玩板的人又更少了,甚至沒有。再加上開始迷戀古典鋼琴,於是滑板就被我荒廢了將近 6,7 年之多。一直到了上上個禮拜,我在某個電視片段中看到了那些過去迷戀的滑板技巧影片,我想,要是再不回去玩,再過幾年也沒有身體可以給我摔了,於是立刻就跑去組了一塊板。 :-P


接著和以前玩板的朋友聯絡上,才知道朋友因為摔太多,摔怕了,後來就再也沒練習,真是覺得有些可惜。不過在我強力說服之下,還是把朋友找去台南的極限運動場練板了。我發現在那玩地板招的人似乎不是這麼多。聽朋友說,後期有了運動場之後,進來玩滑板的人大多都是練跟設施有關的技巧。



這麼多年沒玩板,我一上板之後居然還能順利完成豚跳 (Ollie) 的動作,還真是不可思議!不過嘗試過滑溜碗之後,發現這真是一個會讓人上癮的東西!速度感是會讓人上癮的。

總之,熱血回來了,發文以此紀念。祝我順利。

# 後來還得知,以前的好友阿佑現在已經是選手了。