2009年7月14日火曜日

invalid range in character class

ほとんど恥さらしエントリなのだが、まあ書いておくことにする。

諸事情あって、初めてJavaScriptのプログラムを書いている。大体完成したので、実際にWWWブラウザで動作テストしてみたのだが、うんともすんとも言わない。外部ファイルで定義されているはずの関数が宣言されていないように振る舞っている。

どうにも原因が分からないので、Firefox + Firebug の環境でテストしてみることにした。が、しかし、それでも原因が分からない。やはり関数が宣言されていないように振る舞っている。唯一の手がかりは、当該ページを表示させたときに Firebug が出す "invalid range in character class" というメッセージだけである。でも、これ、なんだろう? Google検索でもあまりいいページが出てこない。

ファイルの文字コードとか、後から思えばあらぬ方向まで可能性を考えてはうまくいかず、悩むこと数時間。正則表現の指定が間違っているというページをGoogle検索経由で発見した。

正則表現!心当たり大ありである。調べたら、やっぱりだ。/^[a-zA-Z'.- ]+$/ という正則表現が含まれていた。もちろん最後のほうの - が文字範囲を表すと解釈されてしまうので、/^[a-zA-Z'. \-]+$/ でなければならない。これを直したら、嘘のように正しく動作し始めた。

後から考えてみると、"range", "character class" というキーワードを見たときに、正則表現を疑うべきだった。そういう思考回路が新たに獲得できたのだから、数時間の苦労も無駄ではなかった、と考えるべきなのだろう。

それにしても、正則表現の誤りが構文解析時のエラーを引き起こすという振舞いは予想外であった。正則表現は、中間言語にコンパイルされる際に何らかの形で処理されるということか。まだまだ精進が足りんなあ。

もみじ饅頭

先日、学会出張で広島に行ってきました。妻にお土産のリクエストはあるか、と聞いてみたら、「藤い屋のもみじ饅頭」という答が返ってきました。銘柄指定とは珍しい。尋ねたら、たまたま来訪していた妻の母からの情報ということでした。
広島駅で探してみると、もみじ饅頭の銘柄はいくつかあるようです。一番目につくのがにしき堂。変わり種もみじ饅頭も含め、広島駅ではかなり大々的に展開しているようです。その横にひっそりと、藤い屋のもみじ饅頭がありました。こちらは極めて伝統的な、こしあんベースのものでした。

大学の学生には話のネタということで、にしき堂の変わり種系を、自宅にはリクエスト通り藤い屋のシンプルなものを買って帰りました。にしき堂のほうを食べ損ねたので味の比較はできないのですけど、藤い屋のは昔ながらのお味で、家族のウケは良かったです。私も気に入りました。

2009年7月13日月曜日

MacPorts で PostgreSQL を動かす

必要に迫られて、手元のMacOS X 10.5環境で開発用にPostgreSQLを動かすことになった。自分一人だけ使えればいいので、使い慣れた MacPorts を利用するのがいいだろうと考えて、試行錯誤しながら動かしてみた。以下、その備忘録である。

まず PostgreSQL をインストールしなければならない。現在の MacPorts では、postgresql?? と postgresql??-server という2つの ports がある。postgresql?? がPostgreSQL本体、postgresql??-server はサーバプロセスを launchd から立ち上げるための設定ファイルなどのための ports である。今回は手元でサーバプロセスを立ち上げる必要があるので、両方の ports をインストールする必要がある。
sudo port install postgresql83 +perl
sudo port install postgresql83-server
最新版でないのは、実際にインストールしたのが PostgreSQL 8.4 がリリースされる前であったためである。またPerlを利用するため、variant +perl を指定した。

次にデータベースの初期構築を行わなければならない。postgresql?? のportsのインストールの際に、何をするべきかメッセージが表示されるのだが、一瞬で流れていくため、見落としがちである。というわけで、/opt/local/var/macports/sources/rsync.macports.org/release/ports/ にある Portfile を見て、やるべきことを確認した。
sudo mkdir -p /opt/local/var/db/postgresql83/defaultdb
sudo chown postgres:postgres /opt/local/var/db/postgresql83
sudo su postgres -c '/opt/local/lib/postgresql83/bin/initdb -D /opt/local/var/db/postgresql83/defaultdb'
ポイントは、PostgreSQLのコマンド群は /opt/local/lib/postgres??/bin にインストールされること、owner postgres で initdb を実行するために sudo から su コマンドを呼び出すこと、あたりだろう。sudo su postgres -c '...' という技は、PostgreSQL をコマンドラインから操作するときに常に使うことになる。

最後にサーバプロセスの起動である。今回は開発時のみプロセスが動いていればいいので、必要に応じて launchd 経由でサーバを立ち上げることにした。
sudo launchctl -F load /opt/local/etc/LaunchDaemons/org.macports.postgresql83-server/org.macports.postgresql83-server.plist
sudo launchctl start org.macports.postgresql83-server

2009年7月12日日曜日

娘の保育園のイベントに行ってきた

娘を通わせている保育園で「夏祭り」と題したイベントがあったので、家族で行ってきました。要するに学芸会なのですが、0歳児にそうそう芸ができるわけもなく、保育士さんに抱っこされて、時々手を挙げるまねをする、程度の出番でした。
しかしまあ、娘は相変わらず家の外では緊張してます。表情が家にいるときと全然違うんですよねえ。保育園には3ヶ月通っているわけですが、まだ慣れないみたいです。ま、そのうち慣れてくるでしょう。

ついでに、近所に住んでいる同僚(というか同じ学科の教授)に偶然出会ってしまいました。同じ保育園に子供を通わせているとは知りませんでした。こういうところで同僚と出会うと、何となくお互いに気恥ずかしくなるのはなぜでしょうか。

2009年7月5日日曜日

喜連川先生、Twitterに降臨

タイトル以上の説明は不要ですよね。http://twitter.com/infoplosion です。情報爆発が終わったらユーザ名を変えるのかなあ。

2009年7月2日木曜日

QotD:ああ、あの頃に戻りたい…

聞くと思わずその頃に戻りたいと思ってしまう曲を紹介してください。また、その曲にまつわるエピソードも教えてください。

三善晃の合唱曲「三つの抒情」の第3曲「ふるさとの風に寄す」。戻りたいかどうかはともかくとして、甘酸っぱい想いが今でも広がる。なぜ?それは一生他人に語るつもりはないです。