Learning Perl, Fifth Edition

2008.06.29  |  Perl, 書籍  |  Comments (0)

「リャマ本」こと「Learning Perl」(日本版のタイトルは「初めてのPerl」)の第5版が出たみたいです。英語版の第4版買うか、日本語版の第3版買うかで迷っていたところなのでちょっとうれしい。Perl 5.10にも対応ってことらしいです。

これの日本語版は出ないのでしょうか? できればそっちの方が読みやすいんですが…

Sage用のスタイルシートをまたまた改良してみた

2008.06.25  |  Firefox  |  Comments (5)

以前作ったSage用のスタイルシートを、Firefox 3に合せてリリースされた新しいバージョンのSageに対応させました(Sageのバージョン1.4には、ユーザースタイルシートが適応されないバグがありましたが、1.4.1で修正されています)。さらに、Sage-Tooという新しい拡張機能も出ていますが、この拡張機能でも使用できるようにしてあります。気に入ったらぜひ使ってみてください。

http://www.perfectsky.net/download/sage/chestnut.css (左)
http://www.perfectsky.net/download/sage/ocean.css (中央)
http://www.perfectsky.net/download/sage/grape.css (右)

Sage-Tooの生い立ちの経緯があまりよく分からないのですが、開発者間で少しゴタゴタがあったということでしょうか? 一応、Sage-Tooの方が高機能のようですし、Firefox Add-onsの週間ダウンロード数を見てみると、今現在のところ、Sageが18,427回、Sage-Tooが58,141回と、Sage-Tooは結構人気があるみたいなので、私も今はこちらを使用しています。

しかしFirefox 3はなかなかいいですね! -moz-border-radiusもアンチエイリアスが掛かるようになったので、このスタイルシートも少しリッチになりました。

[追記]
Sage++でも、特に問題なく使えると思います。

[追記 2012/12/27]
最近のFirefoxは-moz-border-radiusが使えなくなっているので、border-radiusに書き直しました。

Flashは動き始めるまでにダウンロードが完了しているとは限らない

以前からたまに、COSUMIのオンライン対局のFlashが動かない時があってちょっと気持ち悪く思っていたのですが、ようやくその原因が分かりました! どうやら、自身のswfファイルのダウンロード完了を待たずして動き始めたFlashが、まだダウンロードできてない部分のデータを必要として問題が起こっていたようです(なので、ブラウザがそのswfファイルをキャッシュに持っている時は問題が出なかった)。うーん、Flashというのは、ファイルがすべてダウンロードされてから動き始めるわけではないんですね! 一度分かってしまえばごくごく単純なことなんですが、Flashは最近初めたばかりなので、このあたりの基本がなってませんでした…

ということで、今回はMovieClip.getBytesLoadedMovieClip.getBytesTotalを使って、自身のswfファイルのダウンロードが完了するまでは、メインの動作を始めないように直しました。たぶんこれで大丈夫だと思います。

回線の速度やブラウザの種類、それからPCのスペックなども関係してくると思うので、はっきりしたことはよく分かりませんが、今までどれくらいの確率で動かなかったのかを考えるとめちゃくちゃ恐ろしい…(笑)

AWStatsとクエリストリング

2008.06.18  |  ウェブ制作  |  Comments (0)

WordPressを使い始めて気づいたのですが、デフォルト設定のAWStatsは、URLに付加されたクエリストリングを無視してアクセスを集計するようになっています。例えば、

http://www.example.com/?p=foo

というアクセスは、

http://www.example.com/

へのアクセスとしてカウントされます。当然の振る舞いのようにも思いますが、クエリストリングが付いている時に全く別の内容が表示される場合は、できれば別々にカウントして欲しいですね。そういう時は、コンフィグファイルのURLWithQueryという項目を設定するといいようです。デフォルトは0になっているのでこれを1にします。

URLWithQuery=1

ただし、特定のパラメータに関してはデフォルトどおり無視してほしい場合もあります。その時は、URLWithQueryWithOnlyFollowingParameters、もしくはURLWithQueryWithoutFollowingParametersという項目のどちらか1つもいっしょに設定します。例えば、

http://www.example.com/?p1=foo&p2=foo
http://www.example.com/?p1=foo&p2=bar
http://www.example.com/?p1=bar&p2=foo
http://www.example.com/?p1=bar&p2=bar

こんな4つのURLへのアクセスがそれぞれ1回ずつあった場合、

URLWithQueryWithOnlyFollowingParameters="p1"

と設定すると、

http://www.example.com/?p1=foo
http://www.example.com/?p1=bar

という2つのURLへのそれぞれ2回ずつのアクセスとカウントされます。

URLWithQueryWithoutFollowingParameters="p1"

と設定すると、

http://www.example.com/?p2=foo
http://www.example.com/?p2=bar

という2つのURLへのそれぞれ2回ずつのアクセスとカウントされます。

両方の項目ともスペースで区切ることによって、複数のパラメータ名を設定できます。例えばこんな感じです。

URLWithQueryWithOnlyFollowingParameters="p1 p2"

ちなみに、このURLWithQueryWithOnlyFollowingParametersURLWithQueryWithoutFollowingParameters
を同時に設定すると、エラーが出て動きません。「どちらかが優先される」とかではないようです。

11路盤

COSUMIで11路盤の対局もできるようにしました。

オンライン囲碁 COSUMI
http://www.cosumi.net/

このところ7路盤や9路盤ばかり見ていたので余計にそう感じるのですが、11路盤ってけっこう広いですねー 2路しか違わないのに、明らかに9路盤とは違う感覚が要求されるような気がします。なんだかもう、初手からしてどこに打っていいのかよく分からないような状態なんですが(笑)、とりあえず2590局面分の定石をなんとか用意しました。ついでに9路盤も定石を追加・整理して、こちらは今現在11352局面分です。GNU Goの11路盤はなんだかちょっとあやしい感じがあるので、できるだけ定石でごまかしてしまいたい(笑)。

Lorem ipsum dolor sit amet?

2008.06.13  |  その他  |  Comments (1)

COSUMI制作時、ActionScriptのリファレンスに首ったけになっていたんですが、その中にちょっと気になるこんな箇所がありました。

my_txt.text = “Lorem ipsum dolor sit amet…”;

この’Lorem ipsum…’って何語? どういう意味? って思ったのですが、ネットで調べてみると、これは昔からある有名なダミーテキストなんだそうです。

Lorem ipsum – Wikipedia
http://ja.wikipedia.org/wiki/Lorem_ipsum

続きもまだまだあります。

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

こういうダミーテキストの必要性ってすごく分かります。COSUMI作っている時は、特に深い意味は無いですが、こんなマザーグースを使っていました。

Blow, wind, blow! And go, mill, go!
That the miller may grind his corn;
That the baker may take it,
And into rolls make it,
And bring us some hot in the morn.

Linuxでファイルサイズを0にする

2008.06.09  |  Linux  |  Comments (0)

今回は、最近いろいろとさわる機会の多かったLinuxの話です。

大きくなったログファイルなどを、一旦クリアしてしまいたい時ってありますよね。rmしてtouchとかでもできなくはないですが、パーミッションを設定し直したりしないといけなかったりするので、あまりスマートな方法ではなさそうです。こういう時、普通はどうするのかなと思って調べていたら、こんなページが見つかりました。

ファイルを空にする – 揮発性のメモ
http://d.hatena.ne.jp/iww/20071007/cat

$ :> foo.log

おお、こんなやり方があるんですね。知りませんでした。しかし、このスマイリーみたいな:>の意味が分かりません。とりあえず、試しに目と口の間に(笑)スペースを入れてみます。

$ : > foo.log

これも先ほどと同じ結果になりました。ということは:>は別々のようです。>はリダイレクトですが、では一体:ってなんなのでしょうか? 記号ってほんと検索しにくいのですが(笑)がんばって調べてみると、こちらのページ曰く、何もせず,0を返すということだそうです。ということは、こんなのと一緒でしょうか?

$ echo > foo.log

と思ったら、ファイルサイズが1バイトになってしまいます。テキストエディタで開くと、改行が一つ入っていました。こういう時は

$ echo -n > foo.log

-nオプションを付けるといいようです。このあたりで気づいたのですが、これでもいいようです。

$ > foo.log

シンプル! 勉強になりました。ちなみに普通はこうするらしい。

$ cp /dev/null foo.log

まあそうですよね。たぶんこれが一番安全です。

[追記]
こちらのサイトも参考になると思います。

CGI.pmは重い

2008.06.08  |  Perl, ウェブ制作  |  Comments (3)

今更な話なのですが、いつもお世話になっているCGI.pmには、ものすごくたくさんの機能があることを最近初めて知りました。いつも、単に「フォームから渡されたパラメータを取得すること」にしか使っていなかったんですが、そのためだけのモジュールではないんですね…(ホント今更な話ですみません(笑))

それとは別に、最近初めて知ったものに、mod_perlやSpeedyCGIというのがあります。通常、Perlで書かれたCGIは、呼び出される度にコンパイルされて、そして実行されるんですが、mod_perlやSpeedyCGIは、一度コンパイルしたプログラムをそのまま残しておいて、次回以降のコンパイルプロセスを省くことにより、CGIの動作を高速化することができます。場合によっては数十倍も速くなるらしく、それはそれでかなりすごいのですが、そもそも実際のプログラムの実行ではなく、コンパイル時のコストがこんなに大きいってのが驚きです。

話し戻ってCGI.pmです。先ほども書いたように、大したことに使ってないのに、この巨大なモジュールを毎回コンパイルしているのは、かなり無駄が大きそうです。そこで試しに、このCGIをCGI.pmを使わないように書き直して、ab(Apache Bench)でベンチをとってみたら、なんと約4倍も速くなりました。おそらくこれはかなりレアなケースだと思いますが、大変な違いですね。「車輪の再発明」は良くないかもしれませんが、車輪一つが必要な時に10tトラック持って来るのも品がありません(この例えも品がないけど(笑))。

CGI.pmの軽量版モジュールにCGI::Minimalっていうのもあります。

CGI::Minimal – A lightweight CGI form processing package – search.cpan.org
http://search.cpan.org/dist/CGI-Minimal/lib/CGI/Minimal.pod

ベンチが載っているので引用します。

CGI.pm (3.05) via standard CGI - 16 fetches per second CGI::Simple (0.075) via standard CGI - 20 fetches per second CGI::Deurl (1.08) via standard CGI - 36 fetches per second CGI::Thin (0.52) via standard CGI - 38 fetches per second CGI::Lite (2.02) via standard CGI - 52 fetches per second CGI::Minimal (1.16, :preload) via standard CGI - 52 fetches per second CGI::Minimal (1.16) via standard CGI - 66 fetches per second cgi-lib.pl (2.18) via standard CGI - 71 fetches per second null Perl script via standard CGI - 103 fetches per second null C program via standard CGI - 174 fetches per second CGI::Simple (0.075) via mod_perl - 381 fetches per second CGI.pm (3.05) via mod_perl - 386 fetches per second CGI::Minimal (1.16) via mod_perl - 417 fetches per second null Perl script via mod_perl - 500 fetches per second

なかなか良さそうですが、このサイトが使っているさくらのサーバには入っていませんでした。ちょっと残念…

[追記 2011/10/19]
さくらのスタンダードなら、自分でインストールすることはできると思います。

シックでポップなフリーフォント Fontin

今日3つ目の記事は、Fontinというフォントです。COSUMI全体で多用させてもらっています。

Fontin :: a Free Quality Font from exljbris
http://www.josbuivenga.demon.nl/fontin.html

上品さとカジュアルさが同居した感じの、すてきなフォントですよね! 個人的にかなりお気に入りです。さらに、「Flashにも埋め込み可」という緩いライセンスがほんとありがたいです。

先のサイトでは、これ以外にもいくつかの非常にクオリティの高いフォントを公開されていますので、興味のある人はぜひチェックしてみてください。

xyzzy用のactionscript-mode

今日2つ目の記事は、xyzzy用のactionscript-modeです。これは特に説明は要りませんね!

ActionScript mode for xyzzy
http://shield.jp/~dseg/xyzzy/actionscript-mode/

機能の詳細はリンク先で調べてください。コードヒントが文字化けする場合は、こちらページの一番下を参照のこと。一応ActionScript 2.0までに対応って感じみたいですが、3.0でも重宝するんじゃないでしょうか?

余談ですが、Flash制作のためにFlash Basic 8を購入したのですが、今これを少し後悔しています。と言うのも、本当に買うべきだったのは、Flex Builder 3だったような気がしてならないんですよね… 気分が悪くなるので、Flex Builderでなにができるのかあまり調べていません(笑)。

効果音を作成するのに便利なソフトシンセ Beam2002

今日は、COSUMI制作時にお世話になったソフトなどを3つ記事にします。1つ目は、Flashで使う効果音を作るのに使用した、Beam2002というソフトウェアシンセサイザーです。かなり簡単にいろんな音が作り出せるので、これはけっこうおすすめです。

Beam2002 / Cycle of 5th
http://www.cycleof5th.com/products/beam2002/

次の3つの効果音を、このソフトで作ってみました。

石音
ボタンにマウスカーソルを乗せた時の音
ボタンをクリックした時の音

どうですか? なかなかいい感じでしょ! バリバリとか、ガラガラとか、ドスドスとか、もっと過激な音も、もちろん作成可能です。うーん、こういうソフトは、いじりだすと止まりません…(笑)