この三日、非常に疲れたので、その記録を日記にして書いておこうと思う。
28日、予備自補の教育訓練の最終日
予備自補の教育訓練の一課程の最終日であった。各課程の最終日は、官品の返納があるので、基本的に作業服や半長靴などの官品は装備しなくてよい。従って、0600の朝の点呼も、非常に楽であった。ラッパと共に飛び起きて、作業服や半長靴と格闘するという、毎朝の恒例行事がないからだ。Tシャツにジャージという、実に楽な格好で、舎前に集合すればよい。
まだ三課程しか受けていないから分からないが、基本的に、各課程の最終日というのは、午前中は座学、午後は返納と離隊の為の整備に当てられるようだ。最近はようやく、作業服のプレスも出来るようになってきた。
娑婆世界への帰還
さて、訓練の修了式を行って、1700に離隊した。今回は、二課程連続で受けている人、つまり、十日間も駐屯地内にいた人もいるためか、駐屯地を出ると、あちこちで、「うおお、シャバだ、シャバだ!」という声が聞こえてくる。やれやれ、娑婆世界に戻りたがるとは、煩悩を捨てきれぬ者どもよ。極楽往生はまず見込めまい。しかし、柵の中も、濃い人間関係を余儀なくされるので、浄土とは言い難いのだが。
さっそく電車で自宅に戻る。六時に自宅に着いた。見るとおにぎりと唐揚げが置いてある。どうやら、母親が事前に家に来て置いていったらしい。感謝しつつむさぼり食いながら、メールの確認や荷物の整理など、必要な作業をしているうちに、数時間という短い時間はあっという間に過ぎていった。
C++WGについて
何故、娑婆世界に戻って早々に、荷造りをしなければならないのか。実は明日の29日に、東京で、C++WG会議が開かれるからである。C++WGはC++標準化委員会の下位に属する各国の団体で、活動内容は、主に標準化委員会で採用が決まったペーパーやドラフトのレビューである。まともにC++を語れるほどの知識も実力も経験もないこの私が、どういうわけか、籍を置いている。
ただ、誤解を恐れずいうとすれば、仕事の出来るC++プログラマーが、単純にC++WGのメンバーに向いているかというと、必ずしもそうとは限らない。というのも、規格の文面がどうであるとか、ものすごく細かい細部の仕様を理解するだとか、変更が既存のコードに与える影響だとか、およそ現実の仕事のプログラミングには、まず確実に役に立たない知識の学習に、喜びを見いだす人間でなければならないからだ。
地獄の夜行バス
さて、京都駅から夜行バスで東京へと向かう。もちろん、3980円という最高に安い夜行バスのことである。通常の夜行バスにあるような、一席ごとに独立の参列シート、しかもシートの前後間隔にも余裕があるような、長距離移動用のバスなど望むべくもない。二列二列のシート、前後間隔は身をかがめる余裕さえないような、人間工学にまっこうから挑戦状をたたきつけているようなバスである。
29日、東京着
夜行バスに揺られること七時間、東京駅に着いた。C++WG会議が始まるまでには、まだ時間がある。ここは、神保町にでも行くとしよう。あそこならいくらでも時間をつぶせる。ただし、神保町の大抵の古本屋が開くのは、10時からである。あと三時間もある。
どうにも時間をつぶす当てがないので、山手線に二週乗ることにした。ご存じの通り、山手線は都内をぐるぐる回る環状線で、一週が約一時間なので、時間をつぶすという点において、じつに都合がいいのだ。車内で愚管抄を読んでいるうちに、二時間たった。9時である。山手線を降りて、神保町に向かった。
天国の神保町
さて、神保町だ。去年とは違い、今年は、特にどうしても欲しい本というのはない。強いていえば、左傳が欲しいとは思うが、あれは少々高いし、第一、欲しい理由というのも、左傳が気に入っているからではなく、森鴎外が左傳を愛読していたからに過ぎない。個人的には、左傳の文章は、味気ないと思う。たしかに、歴史書としては第一級に属することは間違いない。ただ、文章としては、それほど面白みがないのだ。淡々と出来事を編年体で記述しているだけの文章だ。
さて、神保町だ。いうまでもなく、私は本が好きである。しかも、古典が好きなのである。従って神保町は天国なのだ。何しろ本がある。それも大量にある。もはや絶版となった古典の全集などが、捨て値で投げ売られていることもある。最高だ。
まずぶらりぶらりと歩いていると、ある古本屋の軒先に投げ売られていた本のなかに、岩波文庫の明恵上人集を見つけた。もちろん、あの有名な夢記も載っている。夢記というと、私はかなり長い文章ではないかと思っていたのだが、どうも短い。岩波文庫50ページぐらいの分量である。どうやら、散逸して、今は残っていない部分もあるらしい。
なおもぶらぶらと歩いていると、ガレージセールといって、どれでも三冊で500円とか、一冊100円等という風に、本が投げ売られている所があった。せっかくなので、古典をいくつか買うことにした。
岩波の日本古典文学大系の、義経記、日本霊異記、今昔物語などを購入した。
C++WG会議
ふと気がついてみれば、もう12時を過ぎている。これはまずい。遅れてしまう。名残惜しいが、神保町巡りはここまでにして、山手線で田町駅に向かった。
やはり、少し遅れた。着いた時には、アキラさんが、レビューをしている最中だった。n2927で、lambdaの文面を書き換えようというものだ。他にも、興味深かったものを挙げてみる。
菅家さんの担当である、n2923は、微妙な論争になった。個人的には、STLが使えるような環境では、要素数という情報を保持しておくための変数と、その変数へのインクリメント、デクリメント処理をしたぐらいでは、パフォーマンス上の影響は無視できるぐらい小さいと思うのだが、やはり、コストがゼロではない以上、反対意見があるのも仕方のないことなのだろう。concurrencyの問題を指摘する人もいた。listのイテレーターの、別々の部分なら、複数のスレッドから同時に操作しても問題ないという類のものである。そもそもスレッド自体がC++03にはなく、C++03では、size()のcomplexityは規定されていないどころか、listの実装も規定されていないので、そんなlistの実装に依存したコードは、規格違反であり、問題外だと思う。新たにC++0xで縛るのかという意見もあったが、多分そういう環境では、自前のlistを書くべきだと思う。
n2928: Explicit Virtual Function Overridesは、興味深い機能だ。これは欲しい。
ADLは邪悪
長門かわいいの人梶本さんのレビューした、n2930: Range-Based For Loop Wording (Without Concepts)は、かなりの論争を引き起こした。conceptが廃止されたので、rangeベースのforループを、ADLを使って実現しようという、無理矢理の提案なので、それも当然だと思う。問題は、ADLというのは、基本的に邪悪な機能であり、思いも寄らない問題を引き起こすことがあるのだ。しかし、ADLというのは、思いも寄らない問題を解決するために導入されたという、逆説的な経緯もあるのだから、なおさらタチが悪い。
問題になったのは、以下のようなコードだ。
#include <vector>
namespace foo
{
template < typename T >
class container { public : void begin() {} } ;
template < typename T >
void begin(T) { }
}
int main()
{
foo::container< std::pair< int, int > > c ;
begin( c ) ;
}
さて、このコードを、みてみよう。begin()関数を、unqualified-lookupで呼び出している。グローバル名前空間にbegin()などという関数は存在しないが、引数として渡しているcの型は、foo::containerなので、ADLによって、foo::beginが呼び出されることになる。
優秀なC++プログラマでも、ADLについては知らない人も多い。というのも、ADLは、人間にとって自然にコードを書けるようにするための機能である。ADLを意図的に使った上記のようなコードは、まず書かれることがない。なぜなら、上記のコードを書くには、ADLについて理解していなければならないからだ。ADLについて理解していない人は、上記のコードは、グローバル名前空間にbegin()という関数が存在しないから、コンパイルエラーになると読むだろう。一般のプログラマがADLを知らないとしても、特に問題がない。ADLは上記の様な不思議なコードを書くために導入されたのではないからだ。主に、演算子のオーバーロードの為に導入されたのだ。
ところがである。C++0xでは、上記のコードはエラーになる。何故か。それは、ADLのassociated namespaceは、クラステンプレートのテンプレート引数の名前空間も含むからだ。だから、std::pairをテンプレート引数として指定すると、beginのlookupは、ADLによって、std名前空間からも行われるようになる。
さらに、<vector>をincludeすると、std名前空間に、以下のような邪悪極まりないテンプレート関数群が導入されてしまうのだ。
template<typename C> auto begin(C& c) -> decltype(c.begin());
template<typename C> auto begin(const C& c) -> decltype(c.begin());
template<typename C> auto end(C& c) -> decltype(c.end());
template<typename C> auto end(const C& c) -> decltype(c.end());
template<typename T, size_t N> T* begin(T (&array)[N]);
template<typename T, size_t N> T* end(T (&array)[N]);
従って、foo::begin()とstd::begin()とで、曖昧になってしまう。
会議には、上記のコードとは少し違った、実際には問題の無かったコードが提案されていた。後々から考えてみれば、そのコードには問題がなかったので、実際に問題のあるコードに修正した。その辺の経緯については、問題の本質ではないので省略する。会議に参加している人向けに、日本のC++WGのMLに詳しいことを投げておいた。
食事、一軒目
会議の後、一部のメンバーで食事に行こうという流れになった。
私が現在予備自衛官補をやっていて、melponさんが元常備自衛官だったということで、空気を読まずに自衛隊の話をした。匍匐前進で筋肉痛になったこと。居室内で台風が発生すること。腕立てのこと。やはり、予備自衛官補の訓練は、常備と比べてヌルすぎる。来年、常備に行くことを目指して、秋の試験も受けるが、悩みが一切無いわけでもない。どこかにいい技術系の仕事が転がっていないものだろうか。C++の規格などという、実用からかけ離れたことのみ学んでいるこの私が、一体何の役に立つかは、自分でも分からないが。
飲んでいる途中に、アキラさんのレビューしたn2927により、lambda expressionはdecltypeのオペランドとして使えないと規定されていることを知った。本の虫: lambdaとdecltypeを組み合わせれば、ユニーク型IDの必要ないc_functionがで取り上げたネタだ。一応、今回レビューするペーパーは、全部目を通したのだが、lambdaの新しい文面は、表面的には何も変わらないだろうとタカをくくっていたのだ。大間違いであった。ペーパーの冒頭に、ハッキリと書いてあることではないか。こんな重要な記述を見落としていたとは、情けない。
隣では、「Boostのmpl::stringを使って、コンパイル時C++コンパイラを作れ」だとか、「Adaはどのような言語だったか」などという話で盛り上がっていた。思えば、この一件目の食事は、まだ、比較的、平和的だったように思う。
酒、二軒目
さて、午後10時頃に一旦終わって、、まだ行ける人達で、二軒目に行くことにした。私は、当初、会議の後の食事会の事は考えていなかったので、あまり現金を持っていなかった。そこでコンビニに卸しに行こうとしたが、どうやら、地方銀行が、この時間取引できないらしい。仕方ないので、そのまま参加することにした。
二軒目になると、皆酒が回って饒舌になるのか、どうも話が変態的な方向に偏ってきた。もちろん、C++的な意味で。
melponさんは、「俺、コンパイル時Coroutine書いたあるぜ」と豪語したかと思えば、DigitalGhostさんは、「プリプロセッサでY Combinatorを実装する」などという話を熱心に語っていた。
特に興味深かったのは、D言語についてだ。上記の妄想が、Dでは妄想ではなくなってしまうらしいのだ。何でも、コンパイル時メタプログラミングで文字列リテラルを生成して、その文字列にたいしてコンパイルを実行することが出来るとか。さらには、コンパイル時ステップイン実行デバッグなんていう変態的な機能まで提供されているらしい。にわかには信じられないことではある。
DigitalGhostさんがメモ帳にシャーペンで筆記していた。私は、シャーペンは使いにくくないかと言ってみた。その場で書き殴るわけだし、メモ帳なんて安いものだ、一体何で、間違いを消す必要があろうか。間違いをしても、その次のページに書けばいいだけではないかと思う。ところが、DigitalGhostさんは、自分は八割方間違えるので、消しゴムは必須だと主張した。
思うに、真に優れた筆記具は、万年筆である。万年筆は少々高いが、インクは安い。つまり、高く付くのは初期投資だけで、ランニングコストは安いのだ。しかも、万年筆は、強い筆圧を必要としない。ところが、DigitalGhostさんは、自分は筆圧が強いので、むしろ逆にダメだと主張していた。
ところで、私は当日に、夜行バスで帰る予定であった。ところが、このような変態的な話をしているうちに、今日は帰らなくてもいいかと思い直し、帰るのをやめてしまった。結局、午後11時頃まで飲んでいた。
melpon宅に宿泊のこと
さて、この時間になると、たとえ銀行から金を下ろせたとしても、新幹線が動いていない。新幹線が動いていなければ、帰れない。結局、melpon宅に泊めてもらうことにした。どうやら、DigitalGhostさんが、明日のFLTVという集まりに参加するそうなので、その関係でmelpon宅に泊まるそうだ。
melponさんが、太っ腹にも切符を三枚買ってくれた。道中にも、変態的な話が続く。プログラマ的な意味で。
ブログ投稿中にブラウザがフリーズした場合、デバッガにアタッチしてメモリダンプから文字列を抽出すればいいということが語られていた。おそらくは、日記の登録ボタンを押してみたら,はてなが長時間のメンテナンス中だったときするべきこと - NyaRuRuの日記のことを行っているのだと思うが、ブラウザがフリーズしたにせよ、ブログサービスがメンテナンス中だったにせよ、解決方法は簡単だ。素直にBloggerを使えばいい。Bloggerは、投稿中の内容を変更すれば、自動的にサーバー側に保存してくれるし、メンテナンスということもまれである。あったとしても、極端に短い時間で終了する。ああ、これだからGoogleを離れられない。
melponさんがしきりに話すには、なんでも、家に犬を飼っているらしい。マンションがペット可だという。珍しいことだ。
駅からマンションまで歩く間、melponさんはしきりに、酷い股擦れに悩まされている様子だった。股擦れというのは、太ももが太い場合に起こる。melponさんはプロレスの経験があり、かなり恰幅がいいので、大変そうであった。太ももというのは、もちろん肥満して太くなることもあるが、運動によっても太くなる。私も、かなり体に不釣り合いなほど太い太ももをしている。おそらくは、中学時代のサッカーが原因であろう。
melpon宅に到着のこと
さて、melpon宅に到着して、ドアを開けると、すぐに犬の出迎えを受けた。Digital Ghostさんは、ややひいていた。
melpon宅には、様々の興味深い本があった。新紀元社のTruth In Fantasyシリーズの本がちらほらあったといえば、分かる人は分かるだろうと思う。昔の武器やファンタジーが好きなのにも関わらず、新紀元社を知らない人間はモグリである。もっとも、これはmelponさんの趣味ではなくて、同居人の趣味なのだそうだが。
ハルヒの小説があった。例しに冒頭を読んでみたが、どうもおもしろさがよく分からなかった。なんだか文章が稚拙である。まあ、最近は古典しか読んでいないので、違和感も多いのだろう。ラノベは、高校時代の一時期にハマったこともあったが、今は全く読んでいない。
犬がしきりに吠える。膝の上に乗せてやると、吠えることはなくなるのだが、どうにも落ち着いてくれない。膝の上で、せわしなく動き回る。melponさんの膝の上では、やたらとリラックスしているので、やはり慣れているのだろう。
melponさんのPCは、非常に豪快な冷却方法を採用していた。見た目的に、よく冷えそうだというのが分かる、数少ない冷却方法だと思う。
風呂に入った。予備自衛官補の訓練に参加していた時の癖から、今回は、着替えのシャツとタオルを持ち歩いていた。さらに、本を持っていくので、傷が付かないように、大きなバスタオルで包んでいた。予備自衛官補の訓練は、私をして、タオルやメモ帳を持ち歩く癖をつけたらしい。この場合においては助かった。風呂に入る前、同居人が、「左からボディソープとかシャンプーとか云々。ただし、ちょっと匂いがきついかも」と言っていたが、意味がよく分からなかったので、あまり気にはとめなかった。
風呂場には、ボディソープやシャンプーとおぼしき、様々な液体が並んでいた。不思議なことに、皆一様に、真っ赤なジェル状の液体であった。見ると、strawberryと書いてあったが、全く違和感はなかった。確かに、皆イチゴジャムのような見た目をしているのだ。
とにかく、そのイチゴジャムのボトルが大量にあるのだ。私は基本的に、石けんひとつあれば用が足りる人間である。坊主頭なので、頭を洗う為に、シャンプーなどと呼称される、特別な液体石けんが必要だと思わないのだ。それがこの数だ。壁一面にずらりとイチゴジャムが並んでいる。一体どれが体を洗うためのものなのか、さっぱり分からない。英文ラベルを読み比べて、それとおぼしきものを少し、ボトルより出してみる。まさにイチゴジャムのような手触りで、しかも甘ったるい匂いがした。どうみても、男児たる者の使うべきシロモノではない。
そもそも、melponさんがここに住んでいる以上、普通のボディソープのひとつもあるだろうと探してみたところ、分かりにくい場所に、申し訳なさそうに、普通のボディソープが捨て置かれていた。やれやれ、助かった。
風呂から上がってしばらくすると、DigitalGhostさんが、「俺の嫁」を披露していた。ラップトップのモニターの裏側に、眼球が巨大で、スーパーサイヤ人4のような髪型をした、人間の女性の絵が貼られている。DigitalGhostさんは、しきりにその絵を、嫁だと主張してはばからなかった。私は、「自分はあそこまで堕ちてはいない」という安堵感を得たが、また一方、「三次元に興味がないのは事実なので、自分も同類か」とも思った。
午前二時半頃、寝ることにした。
30日、起床
起床ラッパのならない生活はすばらしい。それほど大酒もしなかったので、二日酔いもなかった。寝ていた部屋には、なぜか、「らきすた」が何冊か積まれていた。アニメも原作も見たことはないが、もちろん、名前ぐらいは知っている。読んでみたが、らきすたは四コマらしい。知らなかった。
melponさん一騒動
melponさんとDigitalGhostさんが、FLTVに出席するため家を出るそうなので、それに併せて、私もお暇することにした。家を出るにあたってmelponさんがオロオロしていた。何でも、股擦れをどうしようか悩んでいるらしい。スパッツを探しているようだが、見つからないようだ。股擦れを防ぐべく、様々なアイディアが出された。
- ファウンデーションを塗ってはどうか
- いや、それは数時間しか保たない
- ガムテープを貼り付けていこう
- 無理だった
- いっそのこと油を塗っていこうか
- サラダ油ならある
結局、出がけにスパッツを買うということになった。melponさんが服屋の中に消えていき、しばらくして、勝ち誇ったような顔をして出てきた。スパッツを買えたのだろう。
時間がないので、メシはコンビニで買うことになった。melponさんは肉を買っていた。
電車で移動中、melponさんがiPhoneを使っていた。非常に操作しやすそうだった。特に、日本語入力の方法は、よく考えたものだと思った。私もそろそろ、まともなブラウザを積んだ携帯が欲しいと思っていたが、iPhoneは良さそうだ。まともなブラウザを積んでいるとか、どこでも繋がるとか、帯域が太いということが重要なのはもちろんだが、入力方法というのも、問題になる。私は今まで、物理的なQWERTY配列キーボードを積んだ携帯が良さそうだと思っていた。しかし、実際に店頭で触ってみると、非常に使いづらく感じた。iPhoneもどきのタッチパネル式携帯は他にもあるが、文字入力がどうなっているのか、そこも調べる必要があるのだろう。携帯を選ぶ時の参考にしよう。
天国の神保町、再び
FLTVにも参加してみたかったが、もう人数制限の関係もあると言うことで、仕方が無く、お二方とは別れることにした。このまますぐに京都に帰ってもいいのだが、せっかく東京にいるのだ。行きたい所がある。もちろん、神保町のことだ。
というわけで、再び神保町に向かった。神保町で、四時間ぐらいぶらぶらと古本屋巡りをして、また本を何冊か買った。
疲労困憊しつつ帰路につく
心身共に疲れていた。本が重いのだ。昨日の時点で、すでに大量の本を買っていたのに、今日も大量の本を買ったものだから、肩にのめり込むぐらいリュックが重く、しかも手提げ袋まで持っている始末。疲れるのも当然だ。
フラフラしつつ地下鉄に乗り、大手町で乗り換えようとしたら、切符が改札口を通らなかった。どうやら、切符を乗り換えにしていなかったらしい。だいぶ疲れているようだ。東京駅で、新幹線に乗って京都に帰った。この際も、東北線と東海道線の改札口を間違えて乗ろうとしてしまい、切符が改札口を通らなかった。本当に疲れているらしい。切符を間違えて買わなかっただけ、まだ救いがあると言える。
私は新幹線が嫌いである。確かに、新幹線は乗心地がいいし、時間もかからない。それでも、私は新幹線が嫌いである。理由は、「旅をしている気分にならない」ということだ。東京-京都間は、二時間半ぐらいである。一市町村など、数分もしないうちに通り過ぎてしまう。本当に味気ない。鈍行ならば、静岡の袋井市や磐田市を通り過ぎる際には、ああ、かつてこの辺で暮らしていたんだと感慨にふける時間もあるのだが、新幹線にはそれがない。静岡の駅を越えて、YAMAHAのビルが見えたので、この辺は磐田なのだろうかと思った次の瞬間には、もう天竜川を渡って、浜松の駅に着いているのだ。これは旅ではない。単なる移動だ。
蓼莪
さて、味気ない移動をして、京都に帰ってきた。帰宅すると、留守中に母親が来たのであろう。おにぎりなどが置いてあった。すぐ食べられる菓子なども置いてある。米も置いてあった。そういえば、米がそろそろなくなりかけているのだった。買おうと思ったが、どうせ一週間ほど家を空けるので、その後でいいとおもって、そのまま出てきたのだった。嗚呼、蓼蓼者莪、匪莪伊蒿、哀哀父母、生我劬勞、欲報之徳、昊天罔極。
蓼蓼者莪、
匪莪伊蒿、
哀哀父母、
生我劬勞、
蓼蓼者莪、
匪莪伊蔚、
哀哀父母、
生我勞瘁、
缾之罄矣、
維罍之恥、
鮮民之生、
不如死之久矣、
無父何怙、
無母何恃、
出則銜恤、
入則靡至、
父兮生我、
母兮鞠我、
拊我畜我、
長我育我、
顧我復我、
出入腹我、
欲報之徳、
昊天罔極、
南山烈烈、
飄風發發、
民莫不穀、
我獨何害、
南山律律、
飄風弗弗、
民莫不穀、
我獨不卒。
選挙
まだ時間があるので、選挙に行った。私は外国人参政権に反対の意見を持っているので、今回の選挙については、明確に反対を表明している自民党に入れたが、結果は、民主党の大勝であった。民主党は、永住権を持つ外国人の、地方参政権を認めようという立場だ。このことについてIRCでつぶやいていたら、あるフィンランド人から、「つまり、日本は世界に合わせるんだな」という答えが返ってきた。不思議に思って調べてみたところ、どうやら、EU圏は、永住権を持つ外国人の地方参政権を認めている国が多いらしい。しかし、世界的に見れば、外国人参政権を認めている国は、少数派だと思う。
高速道路の無料化は、かなりいい案だと思う。もちろん、高速道路を維持するためには、かなりの金がかかる。そのぶんは税金で補うことになるだろう。ただし、高速道路の恩恵を受けていない日本人はいない。高速道路があるからこそ、コンビニのような店が成り立つのだ。高速道路が無料化されれば、物流がだいぶ変わってくるはずだ。
無料化すると常に渋滞するとかいう変な反対意見を出している人間もいるが、それは反論にすらならないだろう。有料でも渋滞は起きるのだから。