2013/05/11

『ICRP111 から考えたこと』電子化のお手伝いをしました

有志によってまとめられたブックレット『ICRP111 から考えたこと』の電子化、正確にはePUBとmobiフォーマット制作のお手伝いをしました。こちらからダウンロードできます(下記はDropboxへのリンクです)。


ICRP 111

ICRP 111というのは、国際放射線防護委員会(ICRP)による勧告111という意味で、チェルノブイリへの対応を主導したジャック・ロシャール氏を主筆としてまとめられた文書とのこと。

2011年に起きた福島第一原子力発電所の事故によってまき散らされた放射線源とその影響について、どのようにリスクを算定し、どのように判断すべきなのかを考えるためのアドバイスをまとめたもの、だと理解しています。とはいえ、僕は元のICRP 111を読んでないので本当にそうなのかは分かりません。

今回のブックレットは、このICRP 111を読み解くために行われたインターネット上での「模擬授業」(というなの対話)をまとめたものです。母なる偶然の導きによって、哲劇コンビの著作を担当されてらっしゃる朝日出版社の赤井さんの知己を得て、そこから赤井さんが関わられている今回のプロジェクトのお手伝いをすることになりました。

技術的なお話

さて、この文書には元となるPDF版があり、僕の担当はそれをePUB、mobi化するという作業でした。mobi化についてはePUBフォーマットをAmazonさんの変換ツールkindlegenを使って変換しているだけなので、実際にはePUBフォーマットを作成するのが主な作業です。

ePUB化のツールには、プログラミング言語Rubyで実装された文書処理ツールReVIEWを使用しています。 ReVIEWを採用した理由は、仕事でも使っていることもありツールの振る舞いやハマりどころがある程度分かっていたことが大きいです。最近はソースも読み始めていたので、何かあっても自分で何とかできるだろうという目算がありました。さらに、もしニッチもサッチも行かなくなったら、メンテナの武藤さんに泣きつこうという打算もあったことを告白いたします ;-P

一方で、ReVIEWが開発されたバックグラウンドであるIT関連書籍の外で、どの程度通用するのかを試してみたいという気持ちもありました。

ReVIEW

さて、ReVIEWはテキストファイルへの簡単なマークアップを元にしてさまざまなフォーマットへの出力を行ってくれるツールです。基本的にはReVIEWのドキュメントにある通りマークアップをして設定ファイルを書き、review-epubmakerコマンドに掛けるだけです。

$ review-epubmaker config.yaml

ただ、先ほども書いたように、ReVIEWはもともとIT関連書籍の執筆をバックグラウンドにしています。そのため今回のような対話形式の書籍を表現するためのタグセットはもちろんありません。

もちろん、単に見栄えだけを整えるだけなら、おそらく話者名の部分を太字にするだけでもなんとかなります。例えば、以下のように。

Mr. Gumby Doctor! my brain hurt ...
ただ、これはあまりにも残念です。というのも本文中に太字にすべき箇所があって、話者名とは違うスタイルにしたいと思った場合、この方法は破綻します。

Mr. Gumby Doctor! my brain hurt, too ...
幸い、ReVIEWには文法を拡張する方法があるので、今回はこれを用いました。@<speaker>{foo}というインラインタグを作成して、これをHTMLの<span class="speaker">foo</span>に展開しています。

ただし、この方法にも落とし穴はあります。ReVIEWのような文書処理ツールは、書式が標準化されていることが強みの一つで、だからこそ一つの書式をさまざまな形で出力することができます。このような方法で文法の拡張を続けると、せっかくの強みが活かせないことになります。

文法の拡張については慎重に、例えば文書のタイプに応じてスキーマセット(ひと揃いの文書構造)を用意するような事が必要だと思います。また今回はそこまで対応しませんでしたが、PDF版を見ていただくと分かるように、文書のパート毎にフォーマットが異なるような文章をReVIEWで表現する方法というのも、IT関連書以外に適用して行く上では必要だと思いました。

画像と表

画像と表の扱いは随分と迷いました。ePUBの利点のひとつに、視覚障碍者へ配慮した文書を作成しやすいという点があります。当初、図版はできるだけSVG化したいと思っていたのですが、元になる図版がラスタデータのみであったり、ラスタデータの上にベクタデータを重ねているようなものが複数あったため諦めました。

これは今後、電子化を見据えてデータを作って行く際に必要な事ですが、グラフィカルな要素であってもSVGのように機械可読性のあるデータ形式を選択することは、アクセシビリティや検索最適化のためにも重要だと思います。

imageタグに代替テキストを指定しようと思っていたのですが、ReVIEW標準の機能では対応してません。こちらも何とか対応しようと思ったのですが、僕の能力不足で実現できませんでした。今後の課題です。

表に関しては、「8日目」に登場するものはHTMLの表にしました。もう一つ、表が登場する箇所があるのですが、ここは本文中に「表の画像を取得してきた」という記述があるので画像のままとしています。

所感

今回の作業を通じて思ったのは、ITとは何の関係もないジャンルの出版社が電子書籍を制作するには、まだまだ難しい点が多いなあということです。

また、これは以前からの持論なのですが、どうも日本の出版物というのは欧米のそれとは異なり、版面を1枚の絵として認識しているのではないかと思っています。一度輸入された活版が廃れて、木版によるページ刷りで書物が作られたのはその現れではないかと。そういう文化と、テキストを整然と構造化して作る西欧的な書物フォーマットを摺り合わせて行く作業が今後必要なんだろうなとも思いました。

何はともあれファイルは公開へとこぎ着けました。ご執筆された皆さんの、また事故現場の近くで不安の中暮らす方々のお役に、わずかでも立てたなら嬉しい限りです。冒頭にも「ガイドライン」と書きましたが、個人的には、ICRP 111もこのブックレットも直接的な解答を得るための物ではないと思います。自分で考えるための、考慮すべき要素を列挙した基準点と考えるべきなんだろうと思います。たぶん。

一応、iBooksとKindle Paperwhiteで表示のチェックを行っていますが、おかしなところなどありましたらお知らせください。

2013/03/30

『パーフェクトPython』の読み進め方、更に一歩進むための書物たち

3/16に行われた PyFes の会場で、技術評論社から発行された『パーフェクトPython』のプレゼント大会が行われ、見事1冊ゲットした。450ページ強の書籍を隅々まで読むには時間が足りないため、ざっと一読した印象と、本書を読んだ方への補助線のようなものを引いてみたいと思う。

導入〜言語仕様

導入である1章、続いて言語仕様の解説が9章まで続く。カバーに「Python 3.3対応」と謳われており、実際のところ本書はPython3.3の入門書だ。基本的な文法は同じなのであまり気になることではないが、Python 2系に関する解説は基本的にない。クラスに関する機能を2系でも使いたい、あるいは特定のサードパーティモジュールを使いたいという方が本書を手に取られるときはご注意いただけると良いのではないかと思う。サードパーティモジュールのPython 3への対応状況は以下にまとめられている。
PYTHON 3 WALL OF SUPERPOWERS
逆に、Python 2系をずっと使ってきて、3.3がリリースされたのでそろそろ真剣に以降しようかと考えている読者にとって、本書は良い選択だと思う。

実践

10から14章は「実践的な開発」と題されている。ただ、中を読んでみるとコマンドラインツール、GUI、テスト、Webアプリケーションなので、これは「Pythonを使ったアプリケーション実装のバリエーション」を紹介するパートだと理解すればよいだろう。
それぞれのテーマがそれだけで1冊の書籍になるような内容なので、読む際にも全体像を把握する事に主眼を置いて、詳細は紹介されているURLや参考文献などを見ると良いだろう。
Webアプリケーションに関する書籍は沢山あるので、それ以外の分野に関して、僕が読んだ事のある書籍を挙げておく。ただ、残念な事にすべて英語の書籍であること、またPython 2系を想定して書かれているものが多い。タイトルの後ろに出版年を記しているので、合わせて参考にしていただきたい。
テキスト処理:
"Text Processing in Python" (2006)
GUI:
"Rapid GUI Programming with Python and Qt: The Definitive Guide to PyQt Programming" (2007)
テスト:
"Python Testing: Beginner's Guide"(2010)

適用範囲、環境構築

15から19章は「適用範囲」と題されていて、こちらはPythonの幅広いサードパーティモジュールを分野ごとに紹介しているパートだ。こちらも限られた紙幅なので、本書を読む際には「こんな事ができますよ」というきっかけ作りにお役立ていただけると良いだろう。
また、付録として環境構築の方法が紹介されているのだが、Mac OSとLinuxではそれぞれCコンパイラの環境をインストールすることが記載されているのに対して、Windowsにおいてはその記載がない。Visual Studio 2010がインストールされていない環境では、本書で紹介されたインストール例が実行できない場合があるのでご注意いただきたい。
Recent Windows Changes in Python 3.3

話はガラリと変わって...

編集の現場から遠ざかって何年か経つので、こういう事をお気楽に言えるのだけれど、最近のプログラミング言語はできる事の範囲が広く、1冊の書籍でその全てを紹介するのはとても難しい。「Battery Included」を標榜するPythonのような言語の場合、言語仕様そのものはコンパクトでも、標準モジュールをくまなく網羅する事さえまず不可能だろう(標準ドキュメントを印刷するとどうなるか想像してみて欲しい)。
だからこそ、本書のように書籍としては言語のコア部分についてはある程度を押さえて、あとはカタログ的にさまざまな機能を紹介するタイプの書籍が現実解となる。読み手としても歯がゆいだろうけれど、作り手側だって歯がゆい気持ちなのだ。それは我々が相手にしている、情報技術が解決すべき問題領域がそれだけ広くなっているということの証左でもある。新たな敵は常に雲の彼方から飛来し続けるのだ。

2012/12/15

ボルダリングを始めてみたよ - #kabepyアドベントカレンダー15日目

はい、こんにちは。@turkyです。

先日、初めてボルダリングに挑戦したところ、早速@takanory a.k.a. 部長から「何か書いて」とご下命いただきましたので、僕の初挑戦について書かせてもらいます。僕と同じように「始めてみたいけど」という人の参考になれば幸いです。

きっかけ

「ボルダリング」、昔はフリークライミングと言われてたと思うのですが、そのころから興味だけはありました。元々、テント担いで旅行したり、自転車を担いで低山ハイクしたりしてたので、そっち方面は嫌いじゃなかったです。

この4、5年はロードバイクに乗っているのですが、アレルギーが酷くなって、春、秋に走りに行くと、あとが辛くて仕方ありませんでした。なので、インドアでできるボルダリングも良いなあと思っていました。

去年「Pythonボルダリング部」という組織ができて、楽しそうだなと思いつつも参加メンバーがドンドンと挙動不審になったり、体つきが明らかにゴツくなって行くのを目のあたりにして、「これはヤバいものなんじゃないか」とビビッていたことをココに告白いたします。

心身に変調を来している皆さんを遠巻きに眺めていたところ、職場のすぐ近くにボルダリングジムができた事を知ります。これはチャンス。先週のPython忘年会の席で@takanoryに「〜みたいですよ」と話をしたところ、早速日程が組まれておりました。恐るべき#kabepy脳。

初体験

ということで初体験。MTBに乗るのに使ってる、アウトドア用のハーフパンツとTシャツ、薄手の靴下をもってジムに向かいます。@takanoryからは「爪を切ってきて」という妙にピンポイントの細かい指示が。ジムは居酒屋さんなんかが入っている何の変哲のないビルの中。

受付で登録を済ませて会員証を発行してもらいます。キャンペーン中で入会費が割引だったので、利用料、靴のレンタル代を合わせて2,000円ちょっと。着替えを済ませたらシューズを選んでもらいます。

いよいよ壁へ

身支度が整ったので、ジムのお兄さんに連れられて壁の前へ。壁に設定されたコースの登り方とルールを教わります。色分けされた課題の、一番簡単なヤツを登ります。意外に行けます。楽しい。

そうこうしているウチに、@shomah4aや@takanory、少しあとから@hirokikyがやってきました。挑戦する課題を少しづつ先に進めながら見学します。課題の攻略法を相談し合ってるのを聞いてるだけでも勉強になります。だいたい2時間半くらいジムに居たと思います。最後の方は腕の力が限界で、主に見学していました。

感想

他のメンバーは小さなバッグにケータイとか飲み物とか入れて持参していました。暑くなると重ね着していたシャツを脱いだりするので、あると便利だなと思いました。そんなに大量に汗をかく訳ではないけど、飲み物は買っといた方がいいです。

他の人が書いてますが、体重移動はとても重要。あと、登る前にどういうルートを取るかなど、ちゃんと考えておかないと、少し登った後でどうにもならなくなります。

攻略法を見たり聞いたりできるという意味でも、一緒に行ってくれる人がいるのは重要だなと思いました。「ヤバい」とか思っててごめんなさい。

以上が、僕の初ボルダリングのあらましです。楽しかった。最初から2時間半は少し長かったらしく、筋肉痛が結構なことになっていました。でも「また行く?」と聞かれたら「行きますよ」と答えるでしょう。

2012/12/05

Lonesome No More! - PySpaアドベントカレンダー5日目

PySpaアドベントカレンダー5日めは、ワタクシこと @turky がお届けいたします。

さて、PySpa会場として不動の地位を得ている芳泉閣は、熱海のおとなり来宮という場所にあります。駅から宿に向かう途中に来宮神社という古社があって、これが地名の由来のようです。

来宮神社のWebページを見ると三柱の神様の名前が書かれていますが、最初の二柱は記述があっさりしています。神社の縁起に関連する逸話の残っていることも合わせて考えると、最後に書かれている大巳貴命、すなわち大黒様がこの神社のもともとの神様ではないかと思います。

大黒様というのはご存知の通り、大きな袋を抱えた福々しいお姿をしておりまして、言い伝えによると海の向こうからやってきて、福をもたらす神様とされているのだそうです。来宮という神社の名前はこの辺に由来しているのではないかと思います。

それまで各地の温泉地を流浪していたPython温泉が、そのような名前の土地に辿りついてしまったわけです。

閑話休題。

僕がPySpaに参加するようになったのは、今の会社に入ってから3か月くらい後のこと。 何かの機会にお会いした増田さん(@whosaysni)から「Python温泉という、みんなで熱海の温泉に集まるイベントがあるので、ぜひいらしてください」と誘っていただいたところからはじまります。

ちょうど仕事で使うツールを自分で書いたりしていたところだったので、業務の合間にちょこっとではなく、まとめてプログラミングをする環境に自分を置いてみたいと思ったことから参加を決めました。初参加は2008年の10月開催の第4回になります。

増田さん、Vの人ほか数名とは面識があったのですが、正直「プログラマじゃない俺が参加しても大丈夫かな」と不安に思っていました。結果から言うとそれは杞憂で、3日間、楽しく過ごすことになりました。すっかり味を占めて、申し込み開始5分で埋まってしまったり、自分の都合がつかなかった時以外は毎回参加させてもらっています。6回くらいは参加しているはず。

参加したことのない人には中身が分かりにくいイベントだと思いますが、例えばこんなことがありました。雰囲気の一端はつかめるのではないかと思います。

SimpleHTTPServer撃墜〜検死カーネルHacks

これを見る通り、技術力の高い人たちが集まっているので、いったん技術の話を始めると、コンテンツレイヤーからインフラまで、いろんな引きだしがあって、とてもいい刺激になります。

10年くらい前、まだPyJUG網本衆のお手伝いをしていた頃、半年に一度くらい、石本さん、岩田さん、蘭水さんなど、網本第一世代の人たちと飲みに行っては技術ネタの馬鹿話をするという事をしていました。顔ぶれを見ればお分かりになると思いますが、僕以外は皆、毛深いPythonハッカーで、詳しくは書きませんが「ハッシュの正しい使い方」とか、いろいろ楽しい話をお聞きしました。

気の置けない小さな集まりでしたが、やがて皆忙しくなってしまったり、連絡が取れなくなっていたり、しばらく集まる機会が無かったのですが、PySpaに参加していると、そのころと同じような刺激がよみがえってきます。この楽しさは何なのだろうなと思うのですが、ふと思ったことがあります。

カート・ヴォネガットの書いた『スラップスティック』という小説には、アメリカ合衆国大統領になった主人公が推し進める「拡大家族計画」というプロジェクトが登場するのですが、PySpaというのは、もしかしてこの拡大家族の一種なんじゃないかと思うのです。

念のため解説すると、アメリカ国民の不幸の原因は孤独にあるとして、全アメリカ国民に新しいミドルネームを付与することで孤独を解消しようという計画です。コンピュータを用いて「ダフォディル-11」とか「チップマンク-7」とかミドルネームをつけて、ある日突然数万人の(暫定)親戚ができるわけです。

これと似たような感じで、それぞれ年齢も違うし、仕事も興味の対象も異なるけれど、親戚が年に数回、正月や法事に集うように芳泉閣に集まって、マサカリを投げたりする集団。それがPySpaなのかなと思います。みんなで集まってごはん食べるし。

遠い昔、来宮の地にたどり着いて神社を建てた人々も、もしかしたらこういう集団だったのかなと夢想してみます。とても愉快な気分になります。きっと来宮の長はグレーのパーカーを着ていたに違いありません。

まあそんなわけで、若い人たちがゲラゲラ笑いながら殴り合ってるさまを眺めているのは、リアルなオッサン的には「うむうむ」と目を細めるあらまほしき光景です。どんどんやっちゃってください。

僕の与太話はこのくらいで止めておきましょう。それではまた。

明日、6日めを担当するのは @kuenishi です。よろしくお願いします。

2012/03/10

東京大空襲


今日、3月10日は東京大空襲があった日。

というニュースをテレビで見た。そうかと思っていろいろ考えを巡らせた。そして大方のニュースがそうであるように、また日常に戻る。いつもの通りのいつもの風景だ。

午後になって床屋に行き、なじみの店長と馬鹿話をしながら髪を短くしてもらう。それから電車に乗って買い物に出た。

帰り道。電車の中でケータイを弄っていると、ニュースに触発されたのか、TwitterのTimelineには空襲を受けた人たちの体験談と言われるものがポツポツと投稿されてた。それを見ていると、なんだか変な気持ちがする。誰かが体験した、誰かの話を、誰かが引用し、更にそれを何度か引用されたものを僕が目にしている。

書かれている事実は具体的なのだけれど、なんだかキッチリとし過ぎていてその現実感が少し歪んで見える。具体的な理由は良く分からない。でも僕にはそう見える。

それで買い物帰りの電車を降りて、家の近所の喫茶店に飛び込み、コーヒーを飲みながらこの文章を書いている。なぜかは分からない。今から10年以上前、まだ健在だった母方の大叔母がしてくれた東京大空襲の話だ(僕は大叔母の事を「祖母ちゃん」と読んでいたので、以降は「祖母」とさせていただく)。

さて。

祖母がその話を僕にしてくれたのは、僕がそれをせがんだからだ。祖母は当時深川だか本所だか、とにかく東京の下町に住んでいて、空襲にあったという話を母から聞いていた。

それで、実際に体験した人の話を聞いて見たかった僕は、祖母に話をせがんだのだ。祖母はあまり気乗りしない様子だったが、ついにはあきらめたように口を開いた。

その日、いつものように空襲警報が鳴り、祖母は近所の小学校に作られた防空壕に避難しようとしたという。ところが、その日はもう防空壕は人で一杯で入る事ができず、祖母は諦めて小学校を離れた。やがて町のあちこちから火の手が上がり、祖母は無我夢中で逃げ回った。とにかく火の手が弱い方へ、どこをどう逃げ回ったのかは全く覚えていない。

ようやく火の手が収まり、元の小学校に戻ってきた祖母が目にしたのは、炎で蒸し焼きにされて真っ黒な炭になった人で一杯の防空壕だったという。

おしまい。

こうやって書いてみると、恐ろしく単純な話だ。もしかしたらもう少し何か話があったのに、僕が忘れてしまっただけなのかもしれない。それでも、いま考えてみるとそれほど長い話ではなかったと思う。でもその時の僕にとってはまるで何時間も経ったような気がした。

少し間があって、祖母は言葉を継いだ。

「今でも、こうやって目を閉じると、暗闇の中から『助けて。助けて』って声が聞こえてくるような気がするんだよ」

こうして祖母は話を終えた。祖母の家の4畳半の居間からは庭の梅の木が見えて、鳥の鳴き声が聞こえた。柔らかい光の差し込む部屋の中は外よりしんとした空気に満たされていた。

話を聞いた4畳半の居間があった家は綺麗に立て替えられてしまい、話をしてくれた祖母も数年前に他界した。今でも時折、祖母が最後に話していた事を思い出す。そしてこの文章を書きながら、そういえば祖母は一人で逃げ回っていたのか、誰かと一緒だったのか、何も話をしなかったことに気づいた。

祖母が当時の僕に話さなかったことが何なのか、今となっては分からない。もしかしたらと想像することもあるけれど、それは詮無いことだ。