2013-06-12 コンパイルエラーになると思ってた


今日、ちょっとだけビックリしたことメモ。

こんな感じ(↓)の物体を書いてたんだけど、

#!/usr/bin/perl
use strict;
use warnings;
use feature qw(say);

my @aaa = '';

push @aaa, 'something1';
push @aaa, 'something2';
say join ',', @aaa;

これ、出力どうなると思います?ってか、そもそもコンパイル通るとおもいます?

結果

tsucchi@immature[522]$ perl a.pl
,something1,something2

なんとびっくり(あれ?頭にカンマついてるぞ、なんだこれ?)

my @aaa = '';

my @aaa = ('');

として解釈されてるっぽいんですよね。Deparse かけると、

my(@aaa) = '';

となっていた。うーん、良く分からん。

まああんま気にしなくてもいいのかもしれないけど、@aaa 相当の物体は、元々 scalar で、「あれ?やっぱ配列じゃね?」と思って書き換えたら、こんな感じでミスったのでした。気をつけよう。。。

追記

スカラ値をリストコンテキストで評価すると要素一つのリストになるので、@a = ('') と解釈されるんですよ。

むー、そういうことか。やっぱ罠だなー。。。

追記2

ですね。戻り値の時は意識してたけど、代入の時は考慮してなかった。。。



2013-06-11 7月アニメのミルキィホームズは今までと違う感じなんだろうなー、という話


えー、昨日のエントリがそこそこ好評いただいてるようで、大変ありがたいのですが、空気を読まずに、どうでもいい話をしようとおもいます。

例によって、ミルキィホームズの話です。明日(6/12)に、ニコニコ生放送で、アニメの告知がアレコレあるようなので、事前にちょっと予想的なものを書いてみようかなー、と思ったのです。

現状分かってる情報は、

  • 東京MX他で放送される 12分アニメ(通常の半分の尺ってことなのかな?)
  • アニメともゲームとも違う世界観らしい
  • アニメ、ゲームの世界から2年後の設定
  • ミルキィホームズはちょっと成長して、妹分が登場する

とかだいたいそんな感じです。(オーディションの話とかその辺は前ちょっと書いたし、もう決まったし、アニメに直接関係しないから別にいいよね?)

んで、ここから予想的な話なのですが、次のミルキィは、「ある程度子供向けを意識した作品になる」んじゃないかなー、と思ってます。多分女児向けかな。

理由はいくつかあるんですけど、

  • そもそもタイトルが...
  • ブシロードの木谷社長のコラムかなんかで、「カードゲームの子供の参入状況がヤバいからなんとかしなきゃ」みたいな話があった
  • 高校生の伊藤さんにこれまでどおりの下ネタありのミルキィやらせるかね?
  • アニメともゲームとも違うってことは、ギャグでもシリアスでもない、何か、ということになる
  • キャラ可愛いし、OPをウチの娘に見せたら興味もったので、ちょっとアレンジすれば女児向けいけるだろう

とかだいたいそんな感じです。

「予想は裏切り、期待は裏切らない」ってのが、かっこいいと思うので、そうなってほしいなぁ、と思いますが、どうなるんでしょうかねー。

2013/6/12 追記

えー、多分予想はずれたっぽい感じです。

TVアニメ「ふたりはミルキィホームズ」は、バラエティ情報番組『ミルキィホームズ情報局』と連結して
 30分枠の番組になります。
 前半が『ミルキィホームズ情報局』、後半が『ふたりはミルキィホームズ』となります。
 (番組枠名は「ふたりはミルキィホームズ」です)
 錦織監督
 プロデューサーから”それなりに真面目なミルキィで”とオーダーされ、困惑しながら作っております。
 今回は新たに登場する新キャラクター「フェザーズ」の二人が活躍する話になるんですが、
 ミルキィ達の出番は少な目・・・ということは全くありません。ちゃんと活躍しますので期待してくださいね。

なんで12分アニメなのかなー?って思ってたら、残り半分の時間で、中の人が出る情報番組やるから、だったんですね。これはビックリしました。ベストアルバムとか、この前の新曲とか、宣伝費あんま使わない感じだったので、「ミルキィにはあんま宣伝費かけないで、違った客層を取り込むアプローチ狙ってるのかなー」って思ってました。それゆえの昨日の予想だったのですが...。まあ僕はアニメも中の人も両方大好きなので、問題なしですね。楽しみだー。

と、いうわけで、当たったのは

「予想は裏切り、期待は裏切らない」ってのが、かっこいいと思うので、そうなってほしいなぁ、と思いますが、どうなるんでしょうかねー。

というラストの一文でしたとさ。



2013-06-10 ○○ができない、ということ


前職で良く見たし、twitter とかでもたまに見るし、現職でも若干見受けられて気になってるんだけど、

○○にいたけど、Perl 書けません(笑)

みたいな発言ありますよね。まあ、「○○」も「Perl」も変数みたいなもんなので、なんでもいいっちゃ何でもいいんですけど、 Perl が一番ありがちなのかな。自分の観測範囲だと。

で、何が気になるかって話なのですが、「(笑)」じゃねーだろ、って思うんですよ。「ソレ、エンジニアとして恥ずかしいぞ」、と思うのです。

もちろん、各人それぞれスペシャリティがあってしかるべきだから、みんながみんな、「レベル10Perlプログラマ」である必要は全然ありません。インフラエンジニアが Perl のエキスパートである必要はないし、逆もまたしかり、です。

でもね。だけどね。やっぱエンジニアだったら、技術分野で知らないこと、苦手な事あるのって嫌だし、恥ずかしいじゃん。謙遜なのかもしれないけど、「できません」で済ますべきことじゃないじゃん。

同僚とかに苦手分野のスペシャリストがいればラッキーだし、任せるトコ任せられるけど、せっかくだからどうなってるのか、どうやってるのか、知りたいじゃん。

だから、「(Perlで名の知れてる)○○にいたけど、Perl 書けません」てのは、「エキスパートに囲まれてたのに、そのチャンスをまったく生かさなかったアホエンジニアですオレは」って言ってるのと同義なわけですよ。恥ずかしいでしょ?

とかなんとか、最近あんま生産活動してないので、スピリチュアルなお話を考えていたのでした。(ってか僕もインフラ離れて長いので、そろそろ色々調べなきゃアカンなー、とか思ってたりするのです。)



2013-06-08 シェルの小ネタの話


コマンドライン叩いてるとき、「え?今の何?」って良く言われるのが、

$ cp hoge{,.bak}

みたいなやつ。

一応解説しとくと、シェルが、

$ cp hoge hoge.bak

に展開してくれる。バックアップファイル作ったり、ファイル名 typo したのを直したりするのにわりと良く使う。 tcsh と bash で使える。多分 zsh も使えるんじゃないかな。

こういうので、知ってるけど普段意識してないのものとか、知らないものとか、色々ありそうだなー、って 久しぶりに「今のなんすか?」って聞かれたときに思ったのでした。



2013-05-21 テストコード内でタイムアウトさせる


ちょっと前にニート生活してた頃、JUnit 実践入門という本を読みました。

で、ルールというアノテーションを使った機能があって、その中で、「Timeout」というルールがあることを知りました。テストに時間がかかりすぎたり、無限ループした場合にタイムアウトして落とす、という機能だそうで。めっちゃ便利そうやん。

「Perl でできるかなー?」と思って調べたけど、軽くぐぐった感じではそういうモジュールは無いらしい。(RFE は上がっていたが)。移植性とか考えなくていいなら、下記でいけるっぽい。

subtest '長い時間かかったり、無限ループしたり、ハングったりするかもしれないテスト', sub {
    local $SIG{ALRM} = sub { die "timeout" };
    alarm 3; # 3秒でタイムアウト
    ... # テスト本処理
};

本当は Test::More がプラガブル(2.0からそうなるんだっけ?)になって、プラグインでこういうの出来るとかっちょいいと思うんですけどね。



2013-05-12 近況


色々あったし、今もそれなりに色々あるのですが、一応生きてます。

で、色々あって、前職を 4/30 付けで退職し、現在、人生初のぷーたろーをしております。多分来週あたりから働くんですけどね。

ぷーたろーでもなんとかなるかなー、とか思ってたのですが、全然どうにもなりませんね。保険とか年金とか高すぎます。マジ無理ゲーですよ、これ。

「何で辞めたの?」って話は、ここには差し支えない範囲で書いてたり、酔っ払ったとき(今もそうなんだけどねー)にうっかり twitter に放流(放言?)してたりしてますが、まあ簡単に言うと音楽性の違いですかね。

最近ちまちま書いてますが、僕は割とガチで、「技術を通じて世の中を少しでも良くしたい」って考えています。今の自分にとっては、「技術を通じて」が大事なので、少なくとも5年〜10年は技術捨てるつもりはないなー、って思ってます。

で、1年位前からかなー。自分がやってることの評価というか、評価はそれなりにされていたのだけど、なんというか、エンジニアとして偉くなっていく道筋が全然見えなくて。偉くなって、主任になって、係長になって、課長になって。。。っていう自分が全然想像できなかったし、エンジニアとして課長相当のお給料を N年後(まあ5〜15くらいのスパンで)貰うイメージもできなかった。

小さい会社なら、自分が頑張って会社を変えてく、みたいな事もできるのかもしれないけど、残念ながら僕のいた会社はそれをするにはデカすぎた。とか大体そんな感じです。あとは昨年末頃、昇格試験やってたら本格的に SAN 値がピンチになってしまい、「オレ、コレ無理ですわー」って思ったりとか。いや、昨年末あたりは本当にやばかったので、年越しできてホント良かったですわ。

んで、転職活動も、ちまちまやっていたのですが、コレもコレで色々あったのですが、酔っ払ってても自主規制しとこうかな、と思います。

いやまあ色々ありました。「プログラマとしての基礎力が足りないなー」、とか、「10年前、いやせめて5年前に今の力があったなら...」とか、悩みました。体調崩して、胃薬常用してる日もありました。(退職表明してから、毎週前職の皆様が送別会開いてくれたから、ってのもあった。これは嬉しかった。)

で、またいつものようにミルキィホームズの話なのですが、武道館ライブで、徳井青空さんが、エヴァのアスカの台詞を引用して、

傷つけられたプライドは、10倍にして返してやればいいんだよ!

って言ってましたが、まあ僕も大体同じような気持ちですね。いやまあ書類で落ちたり、面接で落ちたり、色々あって、そのたびヘコむわけですよ。落ちたりすると、「死んでしまえ」とか「潰れてしまえ」とか思いますよ、僕も人間ですから。

でもまあ、次のお仕事も無事決まったので、一生懸命頑張って、傷つけられたプライドを10倍にして返してやりたい、と思う次第であります。

本採用になったら、ちゃんと報告するかもしれないし、しないかもしれないです。今後ともよろしくです。



2013-04-27 ミルキィホームズのメンバースカウトオーディションを見てて思ったこと


夢の話とか昔話とかの続きみたいな話、なのかもしれない。

僕のポエムとか、ミルキィホームズの話なので、興味ない人は戻るボタンとか閉じるボタンとか、クリッククリック!

2013年1月24日/合同発表会におけるミルキィホームズ関連の発表内容につきまして

◆アリスの配役 一般公募オーディション開催決定!

と、いうわけで、アリス役をオーディションで募集していたのですが、本日決定しました。

オーディションの模様は ustream で放送されてたし、記事もおいおいアップされると思いますが、とりあえず見つけたところでは、これ(↓)見とけばいいんじゃないですかね。

んで、オーディションをみてたわけですが、2000人(だっけか?)から選ばれた人達だけあって、凄いレベル高いんですよね。(落ちた人の中には元AKBの人とかいたりするくらいだし)。

セリフ読みはみんな凄い上手だったし、歌も踊りもみんな凄い上手で。「いやー、これ選ぶの確かに大変だわー」。と思いました。僕は「原さんか伊藤さんかなー、どっちだろー、他の人も上手だし、これは決められねーなー。。。」とか思ってたら、審査員も会場の投票もそんな感じだったらしく、オイラもずいぶん教育されてるなー、とか思ったのでした。

で、ここから本題。(前置きなげーw。ってか前置きのほうがなげーw)

今回出てた 6 人。16歳〜19歳くらいだったのですが、みんな小学校とか中学校くらいから声優を意識し始めてて、で、歌とか演劇とかダンスとか習ってたり、習ってなくても何とかしてて、偉いなー、って思ったんですよ。

だって、僕が中学とか高校の時は、「自分が何者で何になりたいか」、なんて全然考えて無かったし、ましてやそのために特別なトレーニングとかなんて、全然やってなかったもんね。そういうの始めたのって、せいぜい20歳過ぎてからだもんなー。

と、いうわけで、今回アリス役を射止めた伊藤さんは今後も頑張ってほしいですし、他の皆様も若いのに努力してて、凄い能力持っててすごいなー、と思ったので、今後も頑張ってほしいなー、と思いました。

つーか、10代の子達が、あれだけちゃんと考えて、頑張ってるんだから、おっさんの僕もちゃんと考えて、頑張らないといけないなー、と思ったのでした。



2013-04-27 ひさびさに STDIN キャプチャしようとしたら、ちょっとだけハマった


多分、コレとかの続きっぽい話。

PerlIO::scalar でopenできるのはバイト列だけ! - Islands in the byte stream

Perl 5.18 からは、PerlIO::scalarでopenできるのはバイト列だけになるようです。

とのことだったので、「あれ?utf8の文字列を STDIN 経由でキャプチャしたらどうなるんだっけ?」とか、ちょっと気になったのでやってみた。

最初に書いたのがコレ。(いつものやつです)

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

use Test::More tests => 1;

sub cat {
    my $result = '';
    while( <STDIN> ) {
        $result .= $_;
    }
    return $result;
}

{
    my $inputs = "あ\nい\nう\n";
    open my $IN, '<', \$inputs;
    local *STDIN = *$IN;
    is( cat(), "あ\nい\nう\n" );
    close($IN);
}

で、5.17.11 とかでコレを実行すると

tsucchi@vogue[521]$ prove a.t
a.t .. Strings with code points over 0xFF may not be mapped into in-memory file handles
readline() on closed filehandle $IN at a.t line 10.
a.t .. 1/1
#   Failed test at a.t line 20.
...

確かにコケる。でも、5.16.3 とかでやってもやっぱりコケる。あれ??

tsucchi@vogue[522]$ perlbrew switch perl-5.16
tsucchi@vogue[523]$ prove a.t
a.t .. 1/1
#   Failed test at a.t line 20.
Wide character in print at /home/tsucchi/perl5/perlbrew/perls/perl-5.16/lib/5.16.3/Test/Builder.pm line 1759, <STDIN> line 3.
#          got: 'a??
# a??
# a??
# '
#     expected: 'あ
# い
# う
# '
# Looks like you failed 1 test of 1.
...

バイト列が OK で、文字列が NG なので、このスクリプトは「use utf8;」を外すと通る。

冷静に考えれば、STDIN 経由で入ってくる入力は、(文字列じゃないから)、処理する前に decode かけるべきものなので、こんな感じで書いた方が本物っぽいかな。

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

use Test::More tests => 1;

sub cat {
    my $result = '';
    while( <STDIN> ) {
        $result .= decode_utf8($_);
    }
    return $result;
}

{
    my $inputs = encode_utf8("あ\nい\nう\n");#STDIN は外部だからデコードされてない
    open my $IN, '<', \$inputs;
    local *STDIN = *$IN;
    is( cat(), "あ\nい\nう\n" );
    close($IN);
}

こうすると、5.17 でも通ります。(5.16 でも通りました)

tsucchi@vogue[526]$ perlbrew switch perl-5.17
tsucchi@vogue[527]$ prove a.t
a.t .. ok
All tests successful.
Files=1, Tests=1,  0 wallclock secs ( 0.02 usr  0.00 sys +  0.02 cusr  0.00 csys =  0.04 CPU)
Result: PASS

STDIN 捕まえるテストのネタは、面白いのでシリーズ化してますが、今回みたいに間違ったりしがちだし、 無しで済むならやらない方がいいですね。。。



2013-04-21 「SQL アンチパターン」を読んだ


概要

割ともう書評も出揃ってる感がありますが、ようやく読み終わったので書こうと思います。

この本は SQL や DB 設計でやってしまいがちな、ダメダメなパターンを体系化して、名前をつけたものです。また、なぜそうなってしまうのか、どうやって回避するのか、使っても良い場合があるとしたらどういう場合か、も書いてあります。

PoEAA なんかもそうなのですが、わりと「知ってたわー、N年前から知ってたわー」という感想なのですが、それは僕自信がここ数年、それなりに真面目に DB 設計やったり SQL 書いたりしてたから言えるわけで、Nが 10 とか 20 とか年齢とかならそれに越したことはないと思います。

DB とか SQL とか自信ない人は是非読むべきです。DB 設計とか長くやってる人も、読んだほうがいいでしょうね。デザパタなんかと同様に、今後はパターン名知らないと、話が通じなくなっちゃう可能性がありますから。

経験の少ない人は「あ、これは SQL アンチパターンで見たやつだ!(なんとかゼミ風)」とかそんな感じで、熟練者にとっては、「オイ!この EAV で設計した奴どいつだ! F○CK!」とかそんな感じでお話ができるようになると、世の中少し幸せになるんじゃないかなー、と思うわけです。

IDリクワイアド(とりあえずID)

さてさて、中身ですが、書いてあることには概ね同意だし、上手くまとまってるなー、とは思うんですが、やっぱみんな色々言ってる「IDリクワイアド」ですかね。

  • 複合主キーを使うべきテーブルに「id」を付けるな、ってのはその通りだと思う
  • 自然キーも上手く使えってあるんだけど、これは反対
  • テーブル名が Bugs なら主キーは id じゃなくて、bug_id にしとけ、ってあるんだけど、これは微妙

自然キーですが、僕は基本的にサロゲートキーでやるべきだと思っています。自然キーには必要に応じて一意制約をはるのがいいかな。経験上、自然キーが本当にキーだったことは一度もありませんでした。何か追加の情報(リビジョンとか日付とか)入れれば主キーに大抵なるんですが、そんなんやるくらいなら、サロゲートキー入れたほうがよっぽど楽だと思います。

テーブル名とキー名ですが、これは規模によるんじゃないかな、と思います。テーブル数100以下くらいなら、一意なキー名つけれると思うので、JOIN でミスったり、 「SELECT *」するときにハマったりしないように、bug_id とかそんな感じにしといた方がいいかもいれませんね。

ただ、規模がでかくなると、どうしてもテーブル名が長くなってしまうので、そうすると、bug_id みたいな規則でキー名付けると、キー名がすごく長くなってしまいます。これはつらいので、id でいいんじゃね?と思います。JOIN でミスるのは、テーブル別名に「a」とか「b」とかイミフなのをつけるのが良くないのであって、ちゃんとテーブル別名「bugs」ってつければそういうミスは防げると思います。

さてさて、「IDリクワイアド」はこの辺にしといて。。。

キーレスエントリ(外部キー嫌い)

あとは、「キーレスエントリ」かな。これは言ってることは分かってて、DB設計者の立場としてはその通りだな、と思うんですが、(一方で僕は開発者でもあるので)、開発者としては「外部キー邪魔だな」と思うことがしばしばあります。テストデータ入れるのがすげー面倒くさくなるんですよね、外部キーあると。

また、DB管理者としては、外部キーあると、テーブルの変更が辛くなる場合がありますね。新しいテーブルを用意して、そっちと入れ替えるような変更ができなくなるんですよね。。。

外部キーに限らず、なのですが DBMS が持っている制約ってのはちょっとプア過ぎるよなー、と思います。チェック制約みたいなのも、テーブルまたぐようなチェックとかできないから、結局アプリでやるしかないし。とかそんな感じなので、バリデーションはアプリでやった方がいいんじゃないかなー、と思います。

外部キーは、「テストデータ出し入れするときだけ、一時的にオフるモード」とかあれば、もうちょい積極的に使いたいなー、とは思うんですが。

ファントムファイル(幻のファイル)

「ファントムファイル」も微妙じゃね?って意見をどっかで見たのですが、僕はこれアリだと思いました。「ファイルは常にディスクに置くべき、と考えるな。DB も使えるよ」っていう書き方だったので、それはまあその通りだよな、と思います。トランザクションを重視するか、Web サーバから見える所に置きたいか、によって使い分けるのがいいんじゃないかな、と思いました。

ただ、BLOB とか使う場合、RDBMS の設定とか、DB のドライバの設定とかを見直さないと、多分デフォルト設定だとデカいデータを置けないんじゃないかな、と思うんですが、その辺あんまちゃんと書いてないのが微妙というか、ちょっとアンフェアだな、と思いました。

まとめ

まあ最初に書いたとおりですけど、経験の少ない人にも熟練者にもおすすめできる本だと思います。まだ読んでない人は是非是非↓のアフィ付きリンクからポチって、GW 中に読んでみるべし!だと思います。

ちょい追記

コメントいただきました。ありがとうございます。

MySQLならFOREIGN_KEY_CHECKSとかあるんですがそういうのではなくて?

ごめんなさいごめんなさい。カジュアルかつ、いい加減に書きすぎました。データロードの問題は、問題の半分の半分くらいなんです。まず、データロード時に、FOREIGN_KEY_CHECKS とかそういうのを、いい感じに空気読んで設定してくれるツールが現状ありせん。

あと、もう一つの問題は FK 貼ると、テーブル A->B->C->D->E みたいな依存関係があるとして、テストしたい対象がテーブル E とかだったりすると、FK がうざくて仕方ありません。AからD までのデータを不整合無くちゃんと作るには、setup とかでうまくゴミデータを削除する必要が生じたりして、そんなことしてると一体僕は何をテストしてるんだろ?っていう気分になったりします。途中の B とか C とかに一意制約とかあったりして、主キー以外にも不整合を生じる要因とかあったりすると 2倍悲しかったりします。(うーん、このへんは伝わるか良く分かんないけど、僕はこの辺かなり悩みました。)

かと言って FK をテキトーにオフっちゃうと、 D->E みたいなやつをテストするときに、うっかり依存関係忘れちゃうし、こういうのムズいなー、と思います。

なんか Web 系の人は FK オフっちゃうほうが多数派っぽくて、業務系の人はあんま blog 書いてないから動向良く分かんなくて、結局この辺の必勝法良く分かんないなー、と思います。

DELETE ON CASCADE とかいい感じに設定するといい感じになる必勝法がありそうな気がするんですけど、FK オフらずかつ、テストコードでテストデータロードしてたり本番環境からマスタデータの引き上げとかやってる人いたら、どんな感じでやっているのか、是非是非教えてほしいなぁ、と思います。



2013-04-07 markdown2impress を Ruby に移植したら、いい感じに仕上がった件


背景とか雑談

つい最近、急にプレゼンしなきゃいけない機会がありました。今まで、僕はパワポとか OOo(Impress)とか使ってたのですが、たまには違うもの使ってみたいなー、とか思って色々見てたら、impress.js という、かっちょいい Web ベースのプレゼンツールがあることを知りました。

「でも、これどうやって作るんだろ?作るの大変そうだな。。。」と思っていろんな人のプレゼン資料見てみると、Markdown ファイルが置いてある。「ん?Markdown から生成できる物体があったりする?」とか思ってさらに調べると、markdown2impressと言うものを見つけました。

おぉ、これはすごい。まじグレイト。で、これ使って無事にプレゼン資料書きました。めでたしめでたし。。。だったのですが、使ってみて、もうちょっと機能追加したいなー、と思ったのでした。欲しかったのは下記。

  • 作成中の Markdown をウォッチして、保存されたら HTML 作り直す機能(plackup -R とか、jekyll --auto みたいなやつ)
  • ソースコードのシンタックスハイライト

んで、plackup のソースをパクりつつ、仕上げたのがこちら。最初何も考えずにパクっていたので、サーバプロセスじゃないのに、fork する恥ずかしいコード書いてたのは内緒だ。あ゛、内緒じゃなくなったw

で、「次にシンタックスハイライトやるかー」、と思って、google-code-prettyfyとか、いろいろ見てたんだけど、「ん?せっかくだから、Github Flavored Markdown サポートしたほうが良くね?」と思って調べてみると、Perl じゃ簡単にできない orz。詰んだw...

と、いうわけで、頑張って改造したソースは一旦捨てて、Ruby で書き直してみました。ちゃんとシンタックスハイライトもサポートしてるよ。めでたしめでたし。

使い方

まずはインストール!
rubygem を github から入れる方法、実は良く分かってないんだけど、こんな感じでやってみたら入ったっぽい。

$ git clone git@github.com:tsucchi/ruby-markdown2impress.git
$ cd ruby-markdown2impress
$ bundle
$ rake install

で、Markdown でプレゼンを書く

$ your-favorite-editor index.md

で、もう一個のターミナル(別タブでもなんでもいいけど)で、markdown2impress を実行

$ markdown2impress -r index.md

-r をつけとくと、.md が保存されたタイミングで index.html を再生成します。

あとはローカルでもいいし、github とか自分のブログサイトとか、好きな所にアップすれば良いと思います。

その他

せっかくなのでプレゼンも書いてみたよ!

後日談

Ruby の移植版が大体完成して、この記事書いてるときにもう一回調べ直したら、Perl で Github Flavored Markdown 扱う Markdentってモジュールあるじゃん、もっと早く気付けよオレ。。。まあ pygments というか、シンタックスハイライトの本処理は Ruby のほうが楽そうだったので良しとするか。。。