第102回カーネル読書会でDTraceの話を聴いた
第102回カーネル読書会に参加してきました。今回のお第は、OSやアプリケーションの実行をトレースする機構「DTrace」。その概要や、MySQLを対象として使う例について話を聴きました。
LinuxではDTraceはまだ開発中で、似たような機構としてSystemTapがあります。会場にはSystemTap開発チームの人も来ていて、その話なども出ました。ちなみにSystemTapではテトリスが実装されていて、なんでもキー操作をシステムコールのフックで検出するという無茶な(笑)ことをしているそうです。
以下、メモです。
DTrace Overview(加藤久慶)
まず、楽天の加藤さんがDTraceの概要を紹介しました。DTraceはSolaris 10からデフォルトで採用されたトレース機構で、いまはMac OS XやFreeBSDにも移植されているそうです。なお、Linux版は開発されているところ、とのことでした。
加藤さんはDTraceについて「デバッグツールと思われがちだが、開発者にも便利なツール」と語り、実際にデモしてみせました。まず、「dtrace -l」コマンドを実行して約6万個のプローブ一覧を表示してみせました。
続いて「dstrace -n 'syscall::entry'」を実行してシステムコールの呼び出しをトレースしてみせました。デフォルトでは全プロセスが対象になるので、出力を見て対象プロセスを特定し、そこからさらに絞り込んでいく、というふうに追いかけていくそうです。
ほか、ZFSのファンクションを呼んだ回数をカーネルのスレッド単位で調べたり、CPUリソースを使っているものをプロファイリングしたりといった例を紹介しました。また、最後によく使うケースのワンライナーを紹介してまとめました。
DTraceでMySQLを斬る(奥野幹也)
奥野さんは、DTraceを使ってMySQLの動作を追いかけ、DBチューニングに役立てる方法を解説しました。なお、奥野さんはMySQLの中の人ですが、今回は個人としての発表だそうです。
まずMySQLの紹介として、「永久に不滅です」「ちゃんとしたデータベースです」というメッセージを掲げました。MySQLの構造としては、モノリシックカーネル、シングルプロセス・マルチスレッド、1セッション=1スレッド(コネクションスレッド)、ストレージエンジンAPIによる仮想化などが特徴として挙げられました。なお、ソースコードは100万行程度だそうです。
続いて、DTraceを紹介。対象プログラムに「プローブ」を動的に埋め込むことによってプロファイルする構造だそうです。プログラムの実行がプローブにかかると、プローブがfireしてDTraceに制御が移るようになっているとのこと。なお、プローブを埋め込む場所は、ふだんはNOPなどのオーバーヘッドのないものになっているという話でした。
DTraceの動作は、D言語(D Language)というスクリプト言語で記述します。ちょっとD言語(D Programming Language)とまぎらわしい名前ですが。1つのプローブの記述(節)は、以下のような形式になります。
プローブ記述子 /述語/ { アクション }
プローブ記述子の書式は、「プロバイダ名:モジュル名:関数名:プローブ名」のようになります。fireする条件(および述語による条件指定)と、そのときの動作を対にする形式で、ちょっとawkっぽいですね。なお、C++は関数名がmangleされているのでワイルドカードを使うと便利、というTipsも紹介されました。
アクションはセミコロン区切りで指定。省略すると、fireしたというメッセージが出力されるそうです。普通はprintfやtrace(スタックトレース形式出力)で出力するほか、投機バッファというメモリ領域に出力することもできるそうです。
また、変数として、組み込み変数、外部変数(カーネル用)、節固有変数(ローカル変数みたいなもの)、スレッドローカル変数、スカラー変数(あまり使われない)が紹介されました。組み込み変数でプローブへの引数がとれますが、引数はユーザー空間、DTraceはカーネル空間なので、copyinstr()でコピーする必要がある、という注意も紹介されました。
最近のMySQLでは、公式ソースの中にD言語によるプローブ定義が含まれているそうです。ビルド時にCのプリプロセッサマクロによりプラットフォームが識別され、Linuxでは何も埋め込まれないようになっているとのことでした。
ここで、デモ。2つのターミナルを表示し、片方でDTraceを、もう片方でMySQLクライアントを動かしてみせました。紹介された例は以下のとおり。
- クエリーのSQLをダンプ
- メモリ不足の原因を調べる:述語に「/ errno == NOMEM /」を指定
- エラーメッセージを追跡:プローブとして「mysql$target:*my_errror:entry」を指定
- キーキャッシュのヒット率:query-cache-hitとquery-cache-missのプローブから
- 1000行以上のFile Sortを検出:filesort-startとfilesort-doneのプローブから
- テーブルごとのソート統計:exit時に合計を出力
- ソート中断の原因を調査:filesort-doneの述語として「/ self->q && arg0 /」を指定。arg0が0以外だとエラーになる
また、DTraceを使った便利なユーティリティ群「DTrace Toolkit」を紹介しました。DTraceを知らなくても使えるようになっていて、Mac OS Xではデフォルトでインストールされているそうです。シグナルが送られたときに反応する「kill.d」とか便利そうですね。
最後に、技術評論社から近日刊という書籍「MySQLエキスパートトラブルシューティングガイド(仮)」を紹介して締めました。
「坂本龍馬の「私の履歴書」」
ソフトバンククリエイティブ
売り上げランキング: 179856
坂本龍馬って革命的ロマンティシズムの依代として祭りあげられているなぁと思うこの頃。実際にカッコいいし、偉大な実績を残した人で、私も好きだけど。ただ、「人斬り龍馬」の結末を思い出してしまったり。
本書は、坂本龍馬の一人称として自伝形式で生涯を解説している本。脚色された小説ベースではない内容で、かつ平易に説明されていると思う。そのところどころで、「竜馬がゆく」や「龍馬伝」などにツッコミを入れている。しまいにはWikipediaにもツッコミを入れてて、なにやってんすか龍馬さんw
本書によると、龍馬は縦にも横にも大きい体育会系キャラで、顔は怖いけどしゃべると優しいので女性にもモテたとか。
それ系のネタを本書からいくつか。
- 岩崎弥太郎とは海援隊時代に初めて会った
- 「日本をいま一度洗濯いたし申す」という言葉は、外国との戦いに勝つ、という文脈の中のもの
- 新撰組の前で子猫を拾ったエピードは、本当は会津藩士の前で子犬を拾った話
- 「藩」というのは幕末の流行語で、正式に使われたのは明治から
ただし、本書では著者の自説が坂本龍馬名義で語られているので、そのへんは注意して読みたいところ。「これが三人称で書かれていたらどう思うか」とか考えながら読んだ。
というわけで、「人斬り龍馬」のアフィリエイトなど。
トークイベント「パソコンの元祖TK80・実演とシンポジウム」参加
東京理科大学の近代科学資料館「パソコンの歴史展」の一環として、トークイベント「パソコンの元祖TK80・実演とシンポジウム」が開催されました。アスキー総研の遠藤諭さんを司会に、TK-80開発者の後藤富雄さん、TK-80開発プロジェクト責任者の渡辺和也さん、TK-80エミュレータを開発した榊正憲さんらが登壇して、昔のマイコンに関する談義をくりひろげました。
参加者もやはりというか、年齢層が高く、さながらR40状態。しかも、そこかしこに関係者が座ってたりしたようです。
NECのマイコンやパソコンというと、とても日向を歩いてきた印象があるのですが、実は「異端だったからやれた、やってのけた」というプロジェクトだったということがわかり、驚きました。上前淳一郎さんの「読むクスリ」でそのあたりが紹介されているということなので、今度読んでみよう。
ちなみに、奇しくもTK-80を産んだNECエレクトロニクスが4月1日づけでルネサスと合併する直前、というタイミングのイベントでした。
以下、メモ。
「4004の翌年にNECの互換CPUが登場した」---遠藤諭氏
まず、司会の遠藤さんが、パネリストを紹介したあと、TK-80前後のマイコンの歴史を紹介しました。年表は開始直前にステージのスクリーンに映しながら作っていたもので、その時点で観客もまじえて当時を思い出す談義がくりひろげられました。
マイコンの歴史は1971年のIntel 4004に始まります。ここで、アポロ計画クラスからミニコンまでは来ていたコンピュータが、一気に民生品になりました。
翌1972年には早くもNECが互換CPUのμCOM4を、1973年には8bitのμCOM8を開発しています。そして、1976年にTK-80が発売されたわけです。なお、1977年には元祖パソコン御三家のApple-II、PET2001、TRS-80が登場したとのことでした。
「コンピュータ部門じゃないから作れた」---渡辺和也氏
続いて、TK-80プロジェクト責任者の渡辺和也さんが話しました。
開発当時のコンピュータというと、銀行のシステムや国鉄の予約システムなど、スリッパに履きかえてコンピュータを拝むという世界。そこにマイコンチップが登場したものの、NEC社内でもコンピュータ部門からは低く見られていたという話でした。しかし渡辺さんは「コンピュータ部門じゃない半導体部門だからこそ、集積度の進歩を感じて、マイコンの可能性を理解できた」そうです。
実際、日本の1年分のコンピュータと同じ数を、マイクロチップとして工場で1日で作れる、という数字だったそうです。ただし、それだけ作ってもまだマーケットがない、そこでそのマーケットを作るというのが任務として与えられた結果がTK-80だったと語られました。
ハードとしては、家庭用ミシンや家庭用編み機、電動タイプライターなどに使ってもらうことで、生産ロットがはけるようになります。いっぽう、ソフトウェアを増やすためには教える必要がある、黒板とテキストでは理解できないことでも実物があればすぐわかる、そこで教育キットを作ろう、というのがTK(Training Kit)の目的だったそうです。
実際に教えるとなると入出力が必要です。大きなコンピュータはテレタイプ(ASR-33)を使っていましたが、マイコン教室では使えません。そこで、入力に16進キーボードを、出力に8セグメントLEDを付けたそうです。ここで、8セグメントLEDを使って16進数のA~Fを表示するのに悩んだのですが、苦肉の策として「bとdは小文字で」という割り切りをしたというエピソードが語られました。
TK-80の画期的だったことは、組立キットとして販売し、技術資料や関係情報を積極的に開示したこと。当時のメーカーではありえない、常識はずれのことだったそうです。これによって結果的にサードパーティが誕生し、パソコンビジネスというものができたとの話でした。ちなみにPC-8001の頃にも、ソフトを自社で開発しないことを社内外から批判されたものの、「ソフトは1社ではできない」ということで押し通し、サードパーティーのソフトが増えて成功したという話もありました。
もう一つ当時の常識からはずれていたのが、秋葉原にショップのBit-INNを作ったこと。当時の常識では立派なセンターを作るのが定石だったため、競合他社からは奇異の目から見られたそうです。結果として、Bit-INNには数多くの幅広い層の人が集まり、マイコンブームを作ったそうです。
そんな常識はずれのプロジェクトだったので、社内の反対を避けるために、社内では内緒にして進めたそうです。そのかわりに、Bit-INNを通して直接市場の声を聞いたとか。そうした状況は、PC-8001がヒットまで続いたとの話でした。
ちなみに、いまだから言えるエピソードとして、「無限の可能性TK-80」というキャッチフレーズを打ち出したところ、故石田晴久教授から「コンピュータを誰もが使えるかのように言うのは、素人騙している」とお叱りを受けたという話も紹介されました。
こうした経験をふまえ、渡辺さんは「8割の人が反対しているぐらいのときがチャンス」「既成概念にとらわれるな」「ユーザーオリエンテッドで」「世界で起こっていることの情報を10日以内に仕入れる」の4つの言葉で締めました。
「異端児たちのコラボレーション」---後藤富雄氏
TK-80開発者の後藤富雄さんは、自らの半生に重ねて、TK-80がどうやって生まれたかを話しました。いわく、機械いじりの好きな親を見て育ち、「喧嘩は嫌い、話せばわかる」というオープン指向の性格に。高専ではコンピュータはなかったけどブール代数などの基礎をマスター。NECに入社して入ったテニス部で組織を越えたつながりを得た。そうしたすべてのことが助走となり、製品開発に結びついた、と語りました。
また、製造装置を開発する部隊でテスター機械としてDEC PDP-8に出会った話や、4bitマイコンの登場により渡辺さんに誘われた話、NECでIntel互換チップ(「おおらかな時代だった」とのこと)を作るときに開発者がロジックのバグを直してしまった話、当時高価だったEEPROMやSRAMをふんだんに使わせてもらった話なども紹介されました。
TK-80の試作機も写真で紹介されました。プリント基盤ができていなかったのでラッピング仕様で、横須賀研に納入されたそうです。
入出力の話も渡辺さんに「安い入出力手段はないか」とだけ言われて考えたそうです。大好きな秋葉原で輸入雑誌を見て、載っていた「KIM-1」の写真がヒントになったとか。ただし、KIM-1は入力や表示をプログラムでやっているのでプログラムを走らせると表示が消えるとか、キーボードのチャタリングがひどいとかいうのを解決したそうです。チャタリング防止チップを使わず、タイミングで解消する、という手法も社内のコミュニケーションから生まれたという話も紹介されました。
また、今だから言える話として、TK-80の開発は時間がなかったので労組に隠れてスト破り状態で作業した、最後は社宅でこそこそ開発した、というエピソードも語られました。
最後に、TK-80はいろいろな人にめぐりあえたことでできた、渡辺さんのオープンマインドと異端児たちの発想で開発された、と締めました。
「ユーザーにとってはギャップがあり、そこからマニアが育った」---榊正憲氏
榊正憲さんはユーザー側の視点から、TK-80とその時代を解説しました。
まず、1979年にNHK教育で「コンピュータ講座」が開講。森口繁一さんほか豪華メンバーが講師だったそうです。テキストの実物を見せながら話していましたが、BASICやFortranでサラリーマン巡回問題とかハノイの塔とかを解くといった内容だったとか。
といっても、当時は個人で使えるコンピュータなどない。そんなときに現れたのがTK-80でした。しかも、ちゃんとパッケージングされている「カッコいいキット」で「タミヤのキットみたい」だと思ったそうです。
ただし、組み立てたあとに待っていたのは、BASICやFortranと違う16進マシン語の世界。「売れたというけど、かなりの人がそこで挫折した」そうです。ちょうど一般誌などでも「マイコンで競馬予想もできる」のように夢を煽っていて、その結果「短いブームだった」というのが榊さんの意見でした。短いブームという点については、遠藤さんは、ちょっと違うんじゃないかとツッコんでましたが。
それでも、アマチュアが食いついたことにより世界が広がり、生き残った人たちが次のブームを作った、というのが榊さんの見たマイコン創世記のようです。特に、ソフトから入った人がハードを勉強するという流れた発生した、たとえばディスプレイインターフェイスを作ろうと論理回路の勉強を始めて雑誌へフィードバック、それにより次の人がハードを勉強、ということがあったそうです。
その他、当時の雑誌などの資料をふんだんに紹介しながら、メモリカード自作や、セーブするデバイス、FD+CP/M+BASIC+スタートレックゲームが最高峰だった話、ゴルフボールタイプライターを動かすのがマニアの夢だった話、PET 2001がオールインワンで登場した話、IMSAI 8080はミニコン系の設計だった話(「これを使うと、16進キーはなんて便利なんだろうと」)、ASR-33はすべてメカで制御されていたという話、などが次々と紹介されました。
ちなみに、当時はTK-80の89,500円(うち送料1,000円)という価格がネックだったけど、実は当時構成部品を集めるとこのぐらいの値段になるはず、という話も紹介されました。
「West Coast Conputer Fairはコミケみたいなものだった」
その流れで、いまや伝説となった最初のWest Coast Conputer Fair(1977年)の模様を、写真をまじえて後藤さんが紹介しました。会場の上のほうからの写真を見せながら、いわく「コミケみたいなもの(笑)」と。企業も個人も出展していて、Microsoftが「We make the standard」というキャッチフレーズでブースを出していたり、Verbatimのブースがあったり、PETが発表されたり、すでに障害者の補助のためにIMSAI+大きなLEDという機器が展示されていたり、といったさまざまなことがあったようです。TK-80も、NECではなく教育関係の利用例として展示されていたとか。ちなみに、会場中でソフトの「交換会」が開かれていたというのが、当時らしいですね。
なお、渡辺さんは、West Coast Computer Fairを口実に(社内で認められてないので)渡米してMicrosoftを訪問し、ビル・ゲイツと初めて会って商談を決めたそうです。当時、Microsoftは社員12人で、ビルが22才ぐらい。ちなみに渡辺さん40才ぐらいだったとか。
TK-80が動いた
トークセッションの後は、「TK-80を動かそう!」と題して、参加者が持ち込んだTK-80世代のマシンによるデモ大会が開かれました。
…というのがものすごく面白そうだったのですが、実は私はスケジュールの都合で見られませんでした。残念。
それまでの休み時間に見た化物マシンがこれ(UEIの水野さん作)。TK-80(正確にはTK-85)に小さいボードが載っていて、RJ-45コネクタが付いています。インターネット対応のTK-80だそうで、ボードにはARM系のカスタムチップが載っていてTCP/IP通信したりTK-80を制御したりできるとか。スイッチでモードを切り替えると、カスタムチップからTK-80のLEDを操作するとか、HTTPサーバーになってネットワーク越しにTK-85をコントロールできるとかの機能を変更できるそうです。…それってどっちが本体?(笑)
「宇宙兄弟」9巻
一緒に月面に並べよーぜ
宇宙兄弟と、もうひとつの宇宙兄弟のエピソード。泣ける。
「項羽と劉邦」1~12巻
横山光輝の「三国志」や「水滸伝」は読んでたけど、これは初読。
「三国志」や「水滸伝」より人間臭い感じが面白い。項羽も劉邦も欠点まる出しで、まわりにツッコまれまくってるし。陳平はそこはかとなくエゲつなくていい味出してるし。韓信にしてからが、宿酔いでミスってしょんぼりしてるし(あのシーンいいなぁ)。
「フリーランスを代表して申告と節税について教わってきました」
私事ですが、会社を退職しました。
日本実業出版社
売り上げランキング: 992
で、税金とか経理とかどうしたらいいんだろうと思っていたときに、やはり最近会社を辞めた仲間から本書を教えてもらった。
フリーランスの税金やら保険やらについて、難しいことは抜きにして、「これでいいのだ」とばかりにざっくりと説明していて、すごくわかりやすい。「ぶっちゃけ、どうするのがオトクなの?」みたいな。
反対に、「これをやっておくべし」「税制はこのように構成されていて」的な内容はバッサリと切り落している。あとがきに当たる「閉講のおしらせ」でも「マニュアル的内容は極力含まない方針で臨みました。それらに関しては他にいくらでも本があるでしょうから」と書いてる。
書き方も、いつものきたみ節で、もちろん各項ごとに4コママンガでポイントを押さえているのもわかりやすい。
というわけで、右も左のわからない自分が税金関係でまず読む一冊目として最適の本で、目からウロコが落ちまくり。具体的には、こんな(↓)あたり。
- 領収書は手書きよりレシートのほうがよい
- 最近なら65万円控除も難しくない
- 業種によっては国保組合がある
さて、青色申告の申請をしなくちゃ。
「Shibuya.lispテクニカルトーク #5」観覧
Lispコミュニティ「Shibuya.lisp」のテクニカルセミナーイベント「Shibuya.lispテクニカルトーク#5」が開催されました。今回もすごく楽しく話を聴かせていただきました。
今回は、なぜかClojure祭になっていたのが印象的です。その火に油を注ぐかのように、オーム社さんが会場で書籍販売をやっていました。ちなみに、オーム社の森田さんはLTで発表もしていました。
あと、今回はいままでに比べると、比較的とっつきやすい発表が多かったように思います。
以下、観覧メモ。間違いがあったらご指摘ください。
開会の挨拶(佐野匡俊)
第5回までの開催をふりかえり、Shibuya.lisp TTがLisperに発表の場を与えてきて、うれしい、と語りました。発表者はいつでも募集中だそうです。
Shibuya.lispの最近の動向としては、なんといってもLispjobs.jpに2件募集があったこと。また、前回のTTからλ神社shibuya.lisp支部がスタート。さらに今回は懇親会会場がTTと同じ会場となることが新しい試みとして紹介されました。
ちなみに、佐野さんは海外のLispカンファレンスに参加するのが趣味だそうです。
Lispバトン結果報告(higepon、g000001)
higeponさんの呼びかけで始まった「Lispバトン」について、元のScheme版と、そこから派生したCommon Lisp版の模様が報告されました。
Scheme版はhigeponさんが報告。もともと、TT #4のLTで「さあ家に帰ったらSchemeのコードを書いてみよう」という呼びかけをして、その実践編としてコードバトンをやってみたそうです。いちから作るのではなく、コードにちょっと手を入れる形なのでしきいが低い、ということも謳っていました。
コードバトンは、GitHub(Gist)にコードを載せて、URLをバトンがわりに次の人に渡し、渡されたらコードをフォークしていじる、というもの。ルールは、前の人の変更をばっさり消したりなどをしないという「他人にやさしい変更」と、コードの行方を追うために「次の人を見守る」ことの2つ。Scheme版では17人が参加し、68行でスタートしたコードが583行にまでに成長したそうです。
以下、参加者ごとのできごと(敬称略)。
- higepon
- Moshで書いた英単語学習スクリプトでスタート。問題を出力し、Ctrl-Dが入力されると回答を表示し、ユーザーが自己採点するもの。
- yad-EL
- いきなり処理系がGauheに。
- garaemon
- moshに戻す。躊躇なくマクロを使う。SRFI-37でコマンドラインオプション解析。
- yshigeru
- usageを1文字修正。「これをやるためにソースを実行してひととおり読んだはず」(higepon)。
- g000001
- トラップとして入れていたcall/ccをあっさり削除。「コード書けないというのはウソ」(higepon)。
- masa_edw
- FFIで端末制御し、UI。
- leque
- そろそろコードがスパゲティになってやばいというところでさくっとリファクタリング。ユニットテストも追加。アクセッサなど、リファクタリングの定石を粛々と。
- emasaka
- 逆引きやタイムアウトを追加。with-cursesをマクロに。
- kaz634
- ツールの目的に立ちかえり、最近間違えた単語を考慮したり、日付を記録したりの変更。
- naoya_t
- moshとGaucheの両方で実行できるように変更。GaucheではC-wrapperを使うよう、cond-expandで切り分け。
- snmsts
- Windows対応。freeがダミーだったのを直す。
- scinfaxi
- カラーを使う"--color"オプションと、色をごちゃごちゃにする"--mad"モードを追加。その他、SRFIを使いこなした変更をいろいろ。
- Gemma
- CGIで動くように。「大化けして楽しい」(higepon)。
- torus
- クエリパラメータ。
- nobusun
- 整理。
- koguro
- アンカーですごいことに。自前でWebサーバーを実装して内蔵。MMLからwavデータを動的に生成するシンセサイザを内蔵して正解・不正解の音も出るように。「変態」(higepon)。
その他、Schme以外のNu版・Smalltalk版・Clojure版のブランチも紹介されました。
続いてScheme版から分岐したCommon Lisp版をg000001さんが紹介。同じく、参加者ごとのできごと(敬称略)。
- g000001
- SchemeからCLに。CLではmatchがないので構造体とアクセサを。goを使って再帰からループに。
- aka
- 単語登録関数(hige:pin)、一覧表示関数(hige:pun)など。read time evaluationや、ソートを交換しやすくするしくみなど。
- quek
- パスの"~"は処理系依存なので、(user-homedir-pathname)に。
- snmsts
- Java上のABCLとSwingでGUI。
- (び)
- SBCL+Mac OS Xのsayコマンドで読み上げ。
- naoya_t
- 辞書の引っぱり出しかたを変えた。hige:pan関数。aifを定義したり、dolistを利用したり。
- masatoi
- hige:pen関数でn択問題。named-let。
- cranebird
- with-系のマクロを定義。CLOSでdictをオブジェクトに。print-objectを定義。
- smeghead
- hige:punの単語表示のときにもスコアを表示。
- NANRI
- untabify、インデント調整、format指定子を大文字にそろえる、などのフォーマット調整。辞書が存在しないときの動作を修正。asdfのパッケージ化してネットワーク経由でインストールできるように。
- snmsts(2周目)
- (び)さんのsayコマンドを、処理系を見て切り分けるように。
- making
- 辞書をhttp経由で取得できるように。hige:pinで。
- 深町英太郎
- 単語登録時に、意味が空ならGoogle翻訳の結果を。
- kurohuku
- Gray Streamを利用してログ出力。
- kosh
- 空のエントリを登録しないように。ログディレクトリがなければ作る。newLispフォークも。…あとはどこかにw
g000001さんは最初はどうなるかと思ってたけど、参加者がみんな楽しんでいて、またやってみたいと思った、と語っていました。また、大変だった点としては、人を集めるのに苦労したそうです。
初めての人のためのClojure(yshigeru)
いつもシルクハット姿でユーモアのある発表をする吉田茂(yshigeru)さんが登場。最初にOOoがクラッシュしたのも仕込みかと思いました。
話のマクラは、「初めての人のためのLisp」を竹内郁雄さんにもらった話や、シーランド公国の詳しい解説など。あと、シルクハットじゃないと思ったら、レイトン教授やテリー伊藤とカブるので、今回は探偵物語の松田優作姿だったそうです。
本編は、HTTPサーバーを作りながらClojureの基礎を学ぶ話。文法解説と実例を交互に入れて、話にめりはりをつけているのがうまいと思いました。ちなみに、発表に応募してからClojureを勉強したのだとか。
まず、Clojureの基礎の基礎を紹介しました。Javaオブジェクトの生成(カッコの位置が違う)、メソッド呼び出し(ドットの位置が違う)、変数定義def、関数定義defn、cond、let、recurとloopなど。
それを受けて、HTTPサーバーのレスポンス側の実装の紹介に移りました。共通ヘッダの出力、各ステータスごとのレスポンス関数、ファイルの種類の判別、ストリームへの出力とボトムアップに機能を追加していって、レスポンスの根本になるdo-file-response関数まで解説しました。
再びClojureの文法解説に戻って、こんどはシーケンスを中心とするデータ型を解説しました。リスト、ベクタ、マップ、セットなどはぜんぶシーケンス(first、rest、consが定義されているもの)で、filter、every、some、mapなどのシーケンスライブラリで操作できるとのこと。リスト内包表記for、シーケンスを遅延するlazy-seq、シーケンスを現実化するdoallやdorunなど、正規表現をシーケンスするre-seq、なども紹介されました。また、無名関数fn(lambdaを捨てちゃった)や、letで[]の入れ子にした分配束縛なども解説されました。
そのうえでHTTPサーバー後編として、今度はリクエスト側の実装を解説しました。ヘッダの読み込み、リクエストの読み込みと、やはりボトムアップに積み上げていって、メインループに到達。ソケットはJavaのjava.net.ServerSocketを使っていました。
最後に、Clojureの高度な話として、平行プログラムのためのref、atom、agentを紹介。ファイルごとにスレッドを作るwcの例で、それぞれの使い方を解説しました。
Emacs Lispのある生活(はやみずゆうと)
題名に反して、ほとんどClojureの話でしたw
前ふりとしては、Emacsのauto-save-modeを使おう、でも勝手に上書きされたら困る、そこでLinuxの追記型ファイルシステムNILFSを使えば5秒ごとにスナップショットをとれるよ、という話。そういえば、NILFSはTAO/ELIS関係の天海さん作ですね。
で、本題はClojureで作ったプレゼンソフト「Prejure」の紹介でした。プレゼン記述はDSLであり、DSLといえばLisp、Lispならチューリング完全だからなんでもできる、と。さらに、JavaVMなのでJavaのGUI機能も使えて、アイコンを表示したりリサイズしたりも自在、というのをデモしていました。
実装としては、シート=関数、プレゼン=シートのシーケンス、アニメーションもシーケンスという構造。スライドは関数型の世界で作り、それを手続き型のPlayerで処理し、さらにそこから分離されているViewerで表示、という構成になっているそうです。MVCみたいなものでしょうか。実現したい機能としては、アニメーションやPDF出力、リモートでプレゼンを表示できるスライドサーバー、GUI編集などが挙げられました。
後半は、Prejureを通して見たClojureを語りました。まず、関数型はアクが強い言語が多くて、特にmutable=悪という思想が強い、という考えがあるそうです。それが、Haskellではキレイな世界にこだわり(キレイじゃないものはモナドに閉じこめる)、OCamlは逆になんでもありに、という実装に分かれているということでした。
それに対してClojureは、「必要悪は認めるが、足かせがある」というバランスが面白い、と語っていました。具体的にはrefによるトランザクション(STM)で、STMは遅いので使いものになるのか、と思っていたところ、Clojureはそれをうまく足かせとして活かしているそうです。実際、はやみずさんは卒論がSTMだったそうで、そのへんを並列カンファレンスで話したSTMの話の資料を使って説明していました。refを使った破壊版と使わない非破壊版で、非破壊版が30倍速いというベンチマーク結果も興味深いものでした。
最後に、Javaのクラスがよくわからなくて、Clojureを書いているよりJavaのクラスを調べているほうの時間がほとんどになってしまった、という体験も語られました。
LT:1+1はなぜ2になるの? ~Gaucheによる証明~(アラスカ猫)
ここからLT。ペアノの公理系(0とsucc())とノイマンの表現(0は空集合、succ()はunion)による自然数表現をGucheに乗せ、逆関数desucc()とペアにしてゼロに縮退させたりしながら、1+1=2を証明する、という話だそうです。いや、私はわかってないんですが。
LT:世界で一番短い(かもしれない)オブジェクト指向フレームワーク「nekoduck2」(yadokarielectric)
クロージャを使ってオブジェクト指向プログラミングを時前で実装する方法の紹介でした。クロージャをOOPとするときに、まず足りないのがメソッドディスパッチャなので、連想リストで管理する方法を実装。続いて、継承を、親オブジェクトへのリンクを持ってメソッド検索時にオブジェクトをまたぐ方法で実装。さらに、メソッドに引数を渡す方法を実装してみせました。
なお、プレゼンにはS6、デモにはBiwaSchemeのREPLを使って、ビジュアルに見せていました。
LT:自分をClojure化する方法(深町英太郎)
LTに応募するときに、タイトルだけ考えて提出したそうですw
内容は、WebプログラマにとってのClojureのメリットについて。Common Lispだと動くホスティングサーバーがほとんどないので使いにくいけど、ClojureならJVMがあれば動くのがメリット、特にGAEでClojureが使える、という話でした。
LT:Clojure+Leiningenで3分Hadoop(making)
「Clojureの話もHadoopの話もしません」と前置きして、ClojureのビルドツールLeiningenを紹介しました。Clojureのプログラムを動かそうとすると、依存するJavaライブラリの用意とかクラスパスとかの問題が面倒です。そこでLeiningenを使うと、jarの依存関係を見てmaven2リポジトリから取得して、一式をビルドしてくれる、というところまで自動でやってくれるそうです。例として、オライリーのHadoop本にあるサンプルをClojureで実装したスクリプトだけを用意して、まっさらな環境にLeiningenをインストールし、Leiningenのleinコマンドが自動でHadoopもClojureも自動インストールしてjarファイルを作る、という様子を動画でデモしていました。
なお、clojure-user.orgドメインを取ったということも報告していました。
LT:『プログラミングClojure』の編集制作におけるLisp/Scheme(森田尚)
「プログラミングClojure」の担当編集者の人が、制作過程を紹介しました。ワークフローとして、Subversionで原稿をコミットし、tracでチケット管理し、HudsonでビルドすることによりPDFを作成してレビューする、というループを回していたことを解説しました。ビルドの中では、自身が未踏で作ったIdeoTypeの後継システムをGaucheで作り、LaTeXをラップしているそうです。なお、懇親会で森田さんに伺ったところによると、Shiroさんのチケット消化能力は、やはり超人的だったそうです。
LT:CADRドキュメント和訳とか(たけおか)
50才近いという竹岡さんが、今でも生きる昔の技術を紹介しました。いわく、Connection Machine(CM-1)はMap Reduceの先駆け、ベクトル計算機はすたれたようだけどGPGPUでまたトレンドに、とか。そして、個人プロジェクトとして、CADR Lispマシンのドキュメント(MIT AIM-528)和訳や、CRAY-XMPマニュアル和訳、実用Prolog入門ドキュメントなどをやっていることを紹介しました。
LT:LispでクールなMac GUIプログラミング(Nu programming language)(yuumi3)
Objective-Cで書かれてMacのCocoa環境で動くLisp系言語、Nu programming languageを紹介しました。iPhoneでもREPLが動くそうです。Nuはオブジェクト指向言語なので、「(car '(a b))」のほかに「('(a b) car)」(レシーバ+メッセージの形式)とも書けるとか。
そして、コードバトンの英単語学習スクリプトをデモ。Twitterクライアントも起動しましたが、ネットが不調でタイムラインは取れなかったようです。
「EMNON さすらいエマノン Episode:1」
徳間書店 (2010-02-24)
売り上げランキング: 476
A4判のフルカラーで、グラビア写真集っぽい作りのコミック。ハダカも多いしw
エマノンもいいけど、背景の描写もいいな。捨てられた路面電車とか、温泉宿とか、ラストとか…。そういえば、モーニングで「広くてすてきな宇宙じゃないか」を読んで鶴田謙二のファンになったんだった。
ストーリーは原作のエピソードをミックスしたオリジナル。梶尾真治との対談も収録している。エマノンは紋次郎、と。なるほど。
「初めての人のためのLisp 増補改訂版」
翔泳社 (2010-03-10)
売り上げランキング: 468
Lispに入門するにあたって、細かいことよりまずLispの考え方を知りたい、という人におすすめしたい本。
先生2人と生徒3人(秀才、ツッコミ、大ボケ)の対話形式でドタバタと進められる。軽妙を通り越して奇妙なノリが身上で、雑誌連載当時は素で笑いながら読んでいた。
一方、内容はスタンダードというか古典的というか、アトムとリストから始まり、基本関数によるリスト操作をいろいろやった後で、メタサーキュラーインタープリタで締めるというもの。いちおうCommon Lispベースとはいうものの、文法や関数を全然網羅してないし逸脱もしているしで、むしろ実装によらないLispの基本を教えている。また、テキスト処理とかの実用的な例もほとんどない。そういう意味では、たとえば「プログラミングGauche」とも「実践Common Lisp」ともまったく違ったアプローチで、どれがいいということではなくできれば全部読むのがいいんじゃなかろうか。
改訂元のサイエンス社版との大きな違いは、「前書き(兼あと書き)」と、第17講(リスト処理の応用問題)が追加されていること。細かいところでは、脚注が追加されてるほか、本文中でCommon LispやSchemeへの言及がいくつか入っている。改訂に当たって、レキシカルスコープをどうするか注目してたのだけど、第12講のあたりで対応していた。ただ残念なのは、メタサーキュラーインタープリタが「少しずらしたメモ帳」のメタファーを前提していること。まぁ、こまけぇこたぁいいんだよ。
ちなみに、前書きによると、「software」という単語は元々「生ゴミ」という意味だったそうな。
「諸星大二郎ナンセンスギャグ漫画集」珍の巻・妙の巻
諸星大二郎が、伝奇モノのイメージから離れて描いていたギャグマンガを集めた短編集。シュールだったりダジャレだったり、「奇妙な味」だったり。「カラスムギガホウサクダヨー」は、とり・みきが使ってたな。雪女こわい。
「世界史のなかの満洲帝国」
島国の歴史オンチである自分にとって、中国史で「中国」というのが何を指すのかよくわかってなかったりする。春秋・戦国時代や三国時代、五胡十六国時代など、中国がいくつかの国に分かれていたというけど、その外にも国があったりして、どこまでが中国なんだろうとか。あと、元って中国というよりモンゴルのような気がするとか。
本書の史観では、まず「近代的な国民国家と古代の国家は違う」という。いわく、中国史の皇帝は地方を結ぶ交易ネットワークを司る市場の長で、租税は手数料。中国語は決まった文法や発音を持たず、違う言語を持つ人々が漢字という共通の記号で意思疎通するための手段。そして中国とは皇帝に朝貢する人たちをすべて指す、と。
また本書は、歴史は後づけであるともいう。いわく、中国という国は始皇帝以来で、それ以前は歴史を国にあてはめたものである、と。同様に、日本は天智天皇以来、朝鮮は文武王以来であると。
このような中国は一つではないという史観を軸に、黄河文明からの中国東北地方の歴史を解説し、それをもって満洲帝国に到達させ位置づけようとしている本。
「WEB+DB PRESS vol.55」
技術評論社
売り上げランキング: 389
PerlのWebサーバーインターフェイスPSGI/Plackの記事を宮川さんが書いていて参考になる。テーマと著者が入れ替わるPerlについてのリレー連載だそうなので、次号以降も期待。まとまったら書籍にならないかな。
「モダンネットワークプログラミング入門」は、kumofsやviverの古橋さんによるネットワークプログラミング解説。特に、preforkモデルとかイベント駆動モデルとかの処理モデルに力を入れて解説していて、採用例や長所短所などをまじえて説明しているのが参考になる。
その他、HTML5実践入門とか検索エンジン作成とかjewelerとかLithiumとか、いろいろ面白い。
ちなみに、連載の入れ替えが多いなあと思ったら、編集後記によると、人事異動だとか。
HOSTING-PRO 2010で「今そこにある課題 IPv6対応とDNSSEC」を聴く
ホスティング業界のイベントであるHOSTING-PRO 2010を覗いてきました。
中でも、みんな近いうちに対応しなくちゃならないんだろうな、という観点でちょっと気になってるDNSSECとIPv6について、ホスティング事業者目線から見た課題を語るセッションを聴いてきました。以下、メモ的なレポートです。
IPv6は検証環境が課題?
IPv6については日本インターネットプロバイダー協会の菅沼真さんが解説しました。
IPv6に移行する理由といえば、やはりIPv4アドレス枯渇の問題。で、ソフトバンクがIPv6サービスを2010年4月からスタートするのでサーバー側もそのあたりから対応するのでは、という話になってました。ほかの動きとしては、GoogleやYouTubeや2ちゃんねるがすでにIPv6対応とか、携帯のLTE(3.9G)や4GがIPv6必須とか。
「まだらなインターネット環境」の問題も提起されました。インターネットは相互接続だけど、IPv6を導入するにあたってNATが入ったりIPv6-IPv4変換が入ったりと、接続方法や経路の選択がいろいろになってくる、というのが問題視されているようです。
アプリケーションレイヤーの世界では、対応は進みつつあるけど検証が進んでいないことが問題として挙げられました。これはひとえに検証環境がないことによるもの、と考えているそうです。そのため、IPv6検証環境を提供していく必要性や、トンネルによるトランジット調達(BGPも流せる)などの手段を啓蒙していく必要が語られていました。
その他、細かいけど気になるところとしては、ログが大きくなるとか、セキュリティ対策製品がまだ少ないとか、DNSクエリーがIPv4で来ているかIPv6で来ているのかを判別する必要があるとか、逆引きは広大すぎてどう管理したらいいかとか、ZONEが大きくなるとか、EDNS0対応とかいった論点が紹介されました。
DNSSECはデータが大きくなるのが問題?
DNSSECについては、JPRSの民田雅人さんが解説しました。
DNSSECが急激に注目されている理由に、Kaminsky型攻撃でDNSキャッシュポイズニングが容易になったことがあります。アドホックな対策はなされていますが、根本的な問題は正しいデータかどうか検証できないことで、検証するにはDNSプロトコルを拡張する必要がある、それがDNSSEC、という話でした。
DNSSECは、DNSデータに電子署名を加えて、DNSデータの出自や完全性を検証できるようにするセキュリティ拡張です。従来のDNSと互換性があるそうです。
方式としては、KSK(鍵署名鍵。暗号強度を重視)とZSK(ゾーン署名鍵。計算負荷の低さを重視)を用意。また、親ゾーンのZSKで子ゾーンのKSKに署名することによって「信頼の連鎖」を築いているそうです(NSには署名しない)。
運用上では、署名の有効期間を3日~2週間程度にして、切れる前にゾーン全体を再署名というサイクルになるそうです。鍵の更新期間は、KSKは外部とやりとりするので比較的長期間(1年間など)、ZSKはドメイン内なので比較的短期間(1~3か月など)を設定するとのことでした。
実際のZONEファイルも画面に表示されました。記述の大変さや更新期間、影響などを考えると、これは直接書くんじゃなくてツール化したいですね。
DNSSEC対応で考えておくべき点としては、ゾーンデータが大きくなるうえにプライマリが署名するとセカンダリにいきなり送られるとか、パケットのサイズが大きくなるとか、キャッシュ効率とか、多数のドメインを管理する事業者では鍵生成の計算負荷がかかるという点が挙げられました。
現実世界では、.seが2005年にDNSSECを導入済み。.jpは2010年中を目処に、.comや.netは2011年だそうです。rootゾーンにも2010年より各サーバーに徐々に適用されるようになっていて、まずダミーの署名データ(DURZ)を追加して慎重に影響を調査するそうです。
竹内郁雄教授最終講義を聴講
あの竹内郁雄さんが東大教授を退官されるということで、最終講義が公開で開かれました。学生さんや教え子さんから、未踏関係の方、NTT研関係の方、はては私のような一般のファンまで、300人キャパの大教室で立ち見続出という大人気でした。
講義内容も、あいかわらずの竹内節で爆笑の連続。お題は「研究・開発は楽しく」。100%ルールだか120%ルールだかでやってきた、ご自身の研究生活を振り返り、目的とか型とかにとらわれずに、自由に楽しく、かつ徹底的に集中してやるのが一番、というようなテーマと私は受け取りました。締めの言葉は「無為」。とても面白く興味深くて、聴いてよかった。
中でも、第一線の研究者たちによるネタ論文の話が面白かったなぁ。goto文有害論の反論と称してタイムトリップとかjmp $とかcomefrom文とか、フリーダムすぎるw
あと、3つ目のTAOである「TAO/SILENT」にちょっと興味。ちょっとググったところだと、マイクロコード上でLispインタプリタが動くTAO/ELISに対して、機械語に相当するdyte codeを用意して、Lispをコンパイルする形式のようです。TAO/ELISに増して並行プログラミングを意識しているような記述もありました。文字列とかは開放したタイミングでGCされる、というようなことが書いてあったけど、リファレンスカウントなのかなぁ。
「小さなチーム、大きな仕事」
早川書房
売り上げランキング: 262
組織の人数は自然に膨張する、というのがパーキンソンの法則のひとつで、いわゆるIT系企業にも当てはまることが多い。
それには理由や意義もあるわけだけど、それに反して、小さなチームによりシンプルで気のきいたサービスを開発して成果を上げている、あの37signals流のビジネススタイルを解説するのが本書。書いているのは、創業者のジェイソン・フリードと、中の人でRuby on Railsのデイヴィッド・ハイネマイヤー・ハンソン(DHH)。オビにいわく「小さい会社ですが、なにか?」。ただし、細かい仕事内容ではなくて、心がまえを説くビジネス啓蒙書だ。
本書のメッセージは、身軽であること、シンプルであること。以下、本書の言葉からいくつか。
- 長期のビジネスプランは、幻想や占いの世界
- 臨機応変に振舞うこと。
- 会社の規模は問題ではない
- 持続的で利益の出るビジネスが重要。身の丈に合わない急激な成長に気をつける。
- 「起業家」「新興企業」ではない
- 本物のビジネスを始める。「スタートアップだから利益が上がらなくていい」といって問題を無視しない。
- 自分に必要なものを作る
- 多くの決断を下していくときに、他人の問題より自分の問題のほうが答えがわかる。
- 外部の資金はできるだけ少なくする
- コントロールを失うもとになる。
- 本当にそれだけ必要かどうか問い直す
- 従業員数、資金、期間、倉庫、PR、会計部門、IT部門など
- 身軽でいること
- 長期契約、過剰人員、固定した決定、会議、鈍重なプロセス、在庫、変更できないハード・ソフト・技術、長期ロードマップ、社内政治などに注意。
- ツールより中身
- エディ・ヴァン・ヘイレンと同じギターを弾いでもエディにはなれない。安物のギターを弾いてもエディ。
- 会議は有害
- しなくてはならないのであれば、タイマーをセット、可能な限り少ない人数、明確な議題、具体的な問題、解決策と実行を義務づける。
- ヒーロにはなるな
- ひとつの問題に労力を費しすぎないこと。
- 競合相手の下を行く
- 競合相手を負かすには、相手よりも「少く」すること。
- 顧客を成長させる
- 既存の顧客にこだわりすぎない。
- 「自宅でもよい」製品を作る
- 「店頭でよい」製品ではなく。
- 競合相手に教える
- ファンを増やす。レシピだけでは凌駕できないもので勝負する
- マーケティングは会社の全員が日々行なうもの
- 電話に出ることも、製品が使われることも、ソフトのエラーメッセージも、レジのカウンターも、請求書もマーケティング。
- 人を雇うのは喜びを得るためではなく苦しみを消すため
- 仕事の限界が来てから人を増やす。
- 履歴書なんてジョーク
- 会社、製品、顧客、仕事自体に興味を持っている人間を雇う。
- 学歴は関係ない
- 学校が教えるのは「文章は長ければ長いほど良い」「難解な言葉をつかう」「内容より形式」といったこと。
- 全員が働く
- 管理職より、自分をマネジメントできる人。
「FRONT MISSION DOG LIFE & DOG STYLE」05
スクウェア・エニックス
死亡フラグだらけの近未来戦争オムニバス漫画、最新刊。
レギュラーキャラの外道ジャーナリスト犬塚がひょんなことから人々の顔を撮ってまわることになり…「Unlucky Days」。キャンプの描写がいい。
都会の夜をさまようタクシードライバーが呼び戻される「羊飼いの帰還」(前半)。主人公の特技が印象的。
いつでも戻ってきんさい
おばあちゃんはここにおるけ