OSX 環境構築中

ということで PowerBookOSX (10.4.2) にぼちぼち開発環境とかを整備していってます。と、その前に id:aql に教えてもらった SafariStand をインストール。これは Safari のいろんな機能を拡張してくれるもの。

  • _blank なウィンドウを新規タブで開いてくれる
  • アドレスバーに "b naoya" とか入れると http://b.hatena.ne.jp/naoya/ に飛ばせたり
  • 文字を入力すると検索窓をダイレクトに開けたり (検索窓の使い方にまだなれてないけど)

といったことができるようになりました。便利便利。WindowsUnDonut に慣れた体を矯正するにはまだまだ時間がかかりそう。

開発環境の方はというと、Install CD についていた XCode とかいうやつを入れて、gcc とか make を使えるようにするところからスタート。GNU から fileutils や libtool、readline、wget あたりを ./configure; make; make install でインストール。あと ncftp も入れました。

次いで、Perl をインストール。OSX にはデフォルトで Perl が載ってるんだけど、以前に iBook で似非マカーしてたときは標準の Perl でいろいろ CPAN モジュールのインストールにつまづいたりした経験があったので、/usr/local/bin に入れると。

続いて MySQL を入れました。Perl とか MySQL のインストールにはもっと手間取るかと思ったけど、特に特別なことをしないでもすんなり入ってくれた。意外と楽でした。

で、そっからは怒濤の CPAN モジュールインストール大会。Bundle::CPAN に始まり DBIClass::DBI、Template、LWP あたりをどかどかと入れていき、あとは Bundle::Catalyst を入れながら足りないものをひたすら突っ込んでいく。で、Catalyst が動きました。結構あっさり。

osx_catalyst.png

次は Emacs かな。前は Carbon Emacs を使ってましたが、どうやらネイティブでコンパイルできるとのコメントをいただいたので、そっちにチャレンジしてみます。それから、Cocoa アプリケーションを Emacs キーバインドに揃えるアプリケーションがあるとかなんとかなので、それもやってみる予定。なにしろ画面のスクロールとかに Emacs キーバインドが使えないのが、xkeymacs に慣れた体には辛すぎるので。

あと、例によってことえりに慣れない。

きよへろのPerlコードをリファクタしようのコーナー No.3

さらに、今回の課題。
入力で渡したファイルの行頭に、行番号を加えるスクリプト

第3回目が始まってるようなのでやってみる。でも、今回は id:kiyohero のコードそのものが結構シンプルで直しどころがあんまりない。

#!/usr/bin/perl
use strict;
use warnings;

while(<>){
    printf "%3d:%s", $., $_;
}
  • <STDIN> → <> でもよかろう
  • print でもいいけど prinf で桁そろえしてもいいかな

こんぐらいでしょうか。でも、これじゃ面白くないので敢えて難しく書いてみる。無駄に OO。

  • kiyohero.pl
  • lib/
    • lib/FileHandle/LineNumber.pm

という構成になります。で、FileHandle を継承した FileHandle::LineNumber を作る。

package FileHandle::LineNumber;
use strict;
use warnings;
use base qw (FileHandle);

sub getline_with_number {
    my $line = shift->getline;
    $line ? sprintf "%3d: %s", $., $line : return;
}

1;

kiyohero.pl からこれを使う。FindBin でライブラリのパスを見つけてるのがミソ。

#!/usr/local/bin/perl
use strict;
use warnings;
use FindBin;
use lib "$FindBin::Bin/lib";
use FileHandle::LineNumber;

my $fh = FileHandle::LineNumber->new(shift) or die $!;
while (my $line = $fh->getline_with_number) {
    print $line;
}

1;

リファクタリングというか、君ならどう書くのコーナーになりつつあります。