January 2007アーカイブ

最近サーバーを巷で噂の DreamHost に乗り換えてみました。決めては価格が安かったことと SSH が使えたこと。ついでに Subversion も使えるのである程度自由がきく。

DreamHost は root になれない、deamon が扱えないとか規制はあるみたいですが、他は何でも出来そうです。とりあえず Emacs もインストールできました。Var.21 だと日本語周りで色々インストールしてあげないといけないので Var.22 を持ってくる方が作業が早いはず。Subversion も手間はかかるけど自分でインストールも出来そうですね。

Perl の場合は Perl 自体のバージョンとモジュールが使えるかってのが重要なんですが、自前でインストールすれば問題なく使えるみたいです。っと言うことでみんな大好き CPAN を使えるように設定してみました。

PHP Screenshot

恥ずかしい告白をしますが、Mac OS X に PHP 5.2.0 をインストールするのに 2 ヶ月悩みました。自鯖の Fedora Core 6 や coLinux の Debian、レン鯖の Gentoo などは問題なくターボールからビルド出来ていたのでホントにわけわかんなくなってました。インストールパッケージで入れても入らないし、MacPorts で入れてもはいらない。まぁ正確にはインストール自体は出来てるんですが、ちゃんと設定しても動作しない状態でした。そのためエラーログもなしですよ。海外の情報も翻訳して読んでみたりしたんですが、まったく見つからない。正直僕の Mac が時代遅れな PPC だからいけないのかとすら思いましたねw そんな状態で、さんざん悩んで仕様がないんで苦肉の策として MAMP なんかも使ってみたんですが、一緒に Apache2, MySQL も入ってくるので、そんなにバージョン違いで Apache やら持っていても仕方ないと思ってたんです。

そんなこんなで 2 ヶ月悩んでいたんですが、一昨日やっとその原因が解決しました。Mac のdeveloper tool に入っていたのは Var4.0.1 だったので、gcc を自前でビルドしていて Var4.1.1 を使っていたんですよね。この gcc のバージョンが原因だったみたいです。ほかのソフトは gcc のバージョン関係なくビルド出来ていたので全く気づかなかったんです。でも最近インストールした何かのソフトの README に Apple 純正の gcc を使えって記述があって、もしかして PHP もこれが原因か?と思ってバージョンを変えて試してみたところ、一発でビルド出来て元気に動いてくれちゃいました。

今回の教訓として、Mac OS X は Unix OS として、かなり特殊な部類だってことがわかりました。何気に Linux で出来ることをやろうとすると、バッドノウハウが付きまとう OS な気がしてきました。デフォルトでインストールされている Unix ツール使う分にはいいんですけど、追加で何か入れたいときなどは気をつけなくては。頻繁に使うビルド系のツールなどは気軽に update するのは危険なのかもしれないですね。

独り言

PHP の configure って自分仕様にカスタマイズしようとするとめっちゃ多いんで、標準でサポートするようになってくれないんですかねぇ?

発売から数日ちょっと遅れての購入になりましたが、Perl Haks 買いました。届いてからさらっと流し読みしましたが、もうわくわくする Hack ばかりで正直うれしすぎますね。ホント知らないことだらけでどうしたら自分もそのレベルにいけるのかって思いながらページをめくってましたw 個人的に Hacks 本全般に希望なんですが Tips のタイトルの横にでもその Tips を提供してくれた人の名前があるともっとうれしいかなぁって思いますね。

まぁ流し読み程度しかしてないのであれなんですが、ちょっと気になった Hack を挙げてみる。

  • 3 Perlドキュメントをオンラインでブラウズしよう
  • 6 Perl用の最良のEmacsモードを使おう
  • 11 EmacsからPerlを実行しよう
  • 23 SQLライブラリを作ろう
  • 31 個人バンドルを作ろう
  • 37 CPANに乾杯
  • 38 例外条件を磨こう
  • 49 オブジェクトを本当にポリモーフィックなものにしよう
  • 50 アクセッサを自動生成しよう
  • 59 デバッガをカスタマイズしよう
  • 67 自分用のPerlをビルドしよう
  • 68 テストスイートをメモリに常駐させて実行しよう
  • 76 クロージャのなかを覗こう
  • 101 遊びから学ぼう

3 の "Perl ドキュメントをオンラインでブラウズしよう" はオフラインでも出来る Hack なんでオフラインハックしてる時は重宝しそうです。HTML Help よりおしゃれ度が高い気がしますよw

読者層としては高めのレベルですけど確実に面白い。前に買った PHP Hacks よりも実用性は確実に高いと思いますね。

Perl Hacks ―プロが教えるテクニック & ツール101選
chromatic Damian Conway Curtis "Ovid" Poe
株式会社ロングテール/長尾 高弘
オライリー・ジャパン
売り上げランキング: 27010

勉強がてら自分用に Movable Type のプラグイン作ってみました。Perl より Javascript をいじってた時間の方が長い罠w 名前は Bookmarks Counts でどうでしょう?。

具体的に何をするのかと言うと、各エントリーに貼付けて、はてなブックマーク、del.icio.us、Livedoor Clip のブックマーク件数を表示するためのものです。自分で作るのは面倒なので色々ネットを探してみたんですが、MT では使いやすそうな物が見つからなかったんです。もしかしたら同じような物があるのかもしれないですが、一応公開しておこうかと思ってエントリにしてみました。

っで、いきなりネタをばらすとこの記事の Javascript を頂いてきて MT 用のプラグインにしただけなんで特に難しいことはしてないです。プラグインにしたのは MT タグで記述出来た方が楽かなぁって思っただけのことです。Javascript はちょこっとだけ手を加えてアイコンクリックするとブックマークに追加出来るようにしてみました。

使い方

  • 1. ファイルをダウンロードし解凍
  • 2. 中に入っている bookmarks/ フォルダをフォルダごと (中身も一緒に) トップページ (index.htmlが置いてある) ディレクトリにアップロードする
  • 3. bookmarkscounts.pl を mt の plugin ディレクトリにアップロードする
  • 4. 個別エントリーテンプレートの表示したいところに <$MTBookmarksCounts$> を追加する
  • 5. blog を再構築する

ダウンロード : bookmarkscounts.zip

こんな感じで OK なはず。余談ですが、自分の環境以外でテストしていないので他の環境でどうなのか保証は出来ません。っが、MT標準のモジュール以外使っていないのでたぶん大丈夫なはずです。ちゃんと動いていたらエントリーに以下のような表示が出ます。

Plugin Screenshot

まだブックマークされていない場合はアイコンだけしか表示されないのでちょっと切なくなります。

Plugin Screenshot

前にはてなの naoya さん が下記のようなエントリーを書いていたのを思い出して miyagawa さん の OOP メルマガを探してみました。

追記: これまで紹介したような一冊完結型の書籍ではないですが、WEB+DB Press に連載されていた PerlStyle が、個人的にすごくお薦めだったりします。blog.bulknews.net の宮川さんの記事です。ちょっとバックナンバーが手に入りづらいのが難点ですが、CPAN モジュールを使った様々なシチュエーションにおける Perl ソリューションが分かりやすく記述されていて、色々なテクニックを吸収することができると思います。(個人的にはあの流れで書籍化して欲しかったりするのですが) あと、宮川さんと言えば Perl オブジェクト指向プログラミングメールマガジン のバックナンバーも必見ではないかと。:)

お薦めの Perl 本をいくつか紹介 : NDO::Weblog

Perl のみでいこうとするとオブジェクト指向がまず分かんない。理解不能。Perl の OO のシンタックスがきもいとかじゃなくって、Perl OO で OO を丁寧に解説した本とか情報がほとんどない。宮川さんのメルマガは分かりやすけど、あれも OO 全くわかりませんって人向けではないもんなあ。

naoyaグループ - naoyaの日記 - Perl の学習コスト

とりあえず、Vol.3 まで読んでみた。感想としては OOP の触りがわかってないと何してるかわかんないかもしれないと思う。けど 続・初めてのPerl 改訂版 あたりを読んでおけば問題なく頭に入ってくると思います。読んでて思ったけど、miyagawa さんがこれを書いていたころって 2000 年ぐらいで 22,3 歳ですよね。今の僕よりも若いころにこれだけ Perl 界隈でパブリッシュしているとか凄すぎです。はぁ〜ため息しかでないですね。

これは、自分用に一枚のテキストファイルにまとめたので、ちょっと時間があるときに読み進めたいと思う。

続・初めてのPerl 改訂版
Randal L. Schwartz brian d foy Tom Phoenix 吉川 英興
伊藤 直也 田中 慎司 株式会社ロングテール/長尾 高弘
オライリー・ジャパン
売り上げランキング: 51984

Emacs x tramp で ChangeLog を複数端末で共有

実は普通に使う分には僕の場合 Terminal から ssh するんで Emacs からリモートサーバーを扱えなくても問題はなかったんです。だけど、サーバー目的にじゃなくて GTD 的に使いたいなって思って導入したわけです。

僕の普段から複数台 PC を使っているんですが、普段メモとかとる時面倒なんで YYMMDD.txt とか名前つけて保存しちゃうんですよ。そんな名前で保存してるから PC をいったりきたりしているうちに、どのファイルにメモしたのか、どこに保存したかとかどっちにメモ残したのかとかわからなくなっちゃうんですよね。そんなこんなで試行錯誤してたら ChangeLog がオールドな雰囲気もあるし良さげだなってなったわけです。なにせ一枚のテキストで保存していくし、日にちごとにまとめられるし。それに Emacs には標準でモードがついてるってのが決めてになりました。テキストなら検索も簡単ですしね。

それを使うとして、Mac と coLinux で別々に ChangeLog つけても結局前とそんなに変わらないわけですよね。そうすると、どこかにあるファイルにどちらからでもアクセス出来るのが好ましいんですよね。それじゃ、サーバーに置いた ChangeLog にアクセスするにはどうしたらいいって考えたんです。まず思ったのが SSH でログインして書くって方法です。でもこれはたかがメモを取るのに手間がかかりすぎます。それに SSH 繋ぎっぱなしってもの気持ち悪い。メモって手軽にできるからいいんであって、プロセスが面倒だと続かなくなりそうです。そんなこんなで悩んだあげく、そういえば前にディノの高原さんが Emacs でリモートファイルの編集をする方法書いてたなぁって思い出して tramp について調べたわけです。

ここ最近 Emacs ネタばかりなんですけど、許してやってください。っで今回は tramp って機能を紹介します。どうしても使ってみたくて色々調べました。むしろ紹介っていうより自分メモだったりしますけどw

tramp はリモートにあるソースをあたかもローカルのように扱える手段 (Emacs 拡張の Elisp) で Emacs が SSH でリモートのファイルコピーをとって来てくれます。しかもローカルの Emacs で保存するとリモートのサーバーのファイルを更新してくれちゃうのです。

だったら ange-ftp でいいじゃんって思うかもしれませんが、リモートでセキュアにするため FTP を許してないとか SSH でパスフレーズだけでログインするように設定してる場合は断然 tramp でしょう。サーバーログインして編集とかでもいいんですけど、ワンアクション増えるのも面倒ですし、使い慣れたローカルマシンからアクセスしたいってのもありますよね。僕の場合サーバーよりローカルマシンの方がスペックが高いんで機体のパフォーマンス的にもローカルからアクセスした方が都合がいいんですよ。

通信方式としては rsh, rcp, ssh, scp, rsync, sshx, scpx, telnet, plink, pscp, fcp, ftp, smb をサポートしているらしい。plink が使えるってことは Meadow でも使えそうです。

iTerm

以前Terminal.app あれこれで書いた Mac で使う Terminal ソフトなんですが、結局デフォルトの Terminal.app を使うことにしたんですが、最近 iTerm が頻繁にマイナーアプデートしていて、レスポンスとかも改善されるんじゃないかと期待してしまいます。

iTerm のバージョン自体はもうすでに 0.9.4 まで来ていて、正式版までもうすぐな感があるんですが、レスポンスがもう少し改善されたら絶対乗り換えたいぐらいの出来なんですよね。

いままで僕が思ってた問題点は、レンダリングのレスポンスと日本語キーボードだと Meta キーが認識出来ないことだったんですけど、ちょっと色々対策を考えて試してみたら Meta キーの扱いに関しては修正出来ちゃいました。誰かの役に立つかもしれないので設定方法を残しておきます。

なんか毎回毎回ファイルを作るたびに手打ちで use strict を打ち込むのが面倒になってきたので(これで怠慢なプログラマの仲間入りかなw) Emacs のテンプレート機能を使って拡張子が Perl のファイルだった場合は自動で最初の決まり事の 3 行を入れてくれるようにしてみた。とりあえずはモードでの判定と拡張子での判定でやってみる。

僕の場合は template ってフォルダを作って、そのなかにテンプレートになるファイルを放り込んだだけ。今は Perl でしか使ってないけど、他に雛形が必要な言語があったら便利に使えそう。HTML の場合は psgml-mode 使えばもっと便利らしい。

;; Mode Check Template
(setq auto-insert-directory "~/site-lisp/template/")
(auto-insert-mode t)
(setq auto-insert-query nil) ;; テンプレート挿入時に尋ねない

(setq auto-insert-alist
      (append
       '(
         (cperl-mode . "default.pl")  ;; もしかしたらこの行は要らないかも
         ("\\.pm$" . "default.pm)
         ("\\.\\(pl$\\|cgi$\\)\\'" . "default.pl")
         )
       auto-insert-alist))

.pl のテンプレートになるファイルの内容。

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

僕が愛してやまないエディタ Emacs 。色々な OS に移植されどんな環境でも使えるエディタになっていますが、Mac, Linux, Windows を使う僕としては OS によって微妙に設定ファイルの内容が違っていたりして同じファイルを使い回し出来なくて困っていました。OS ごとに動作に差違があると使い心地悪いし、管理がややこしくなりますもんね。ファイル名も同じものなんだから管理を一枚で済ませたいってのが一番面倒臭くない方法ですよね。

設定ファイル自体は Lisp で書かれているため自分で条件分岐が書けたら使い回し出来る設定ファイルを作ることができるんじゃないかと思い Google 先生に尋ねてみましたよ!

調べたところによると、一般的に使われているのは window-system で OS を判断するか、system-configuration で判断するのかの2パターンみたいです。

分岐の条件はわかったとしても何にマッチさせたらいいのかわからなかったのでまたまた Google 先生です。そうしたら、どうも使い道のわからなかった(最初に開くと表示される邪魔なだけのページだと思ってたw) Emacs の scratch ってページがシステム条件やら現在の設定を調べる、知るためのページだってことがわかりました。

調べ方は scratch で 知りたい条件、例えば今回なら window-system と入力して C-j を打つとウィンドウシステムが何なのか表示されます。けど window-system だとコンソールしか使っていないサーバーと coLinux はスルーされちゃうので (マッチしなかったものは else みたいな処理で良いとはおもうけど) 今回は system-configuration を使うことにしました。これは純粋に OS のバージョンを調べる条件みたいで、system-configuration の中に次の単語があるかどうかで判断しています。

それで、.emacs に書く内容は以下の通り。