テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

ツリー可視化アルゴリズム「平安京ビュー」の実装を開始しました

私の卒業論文(B.S.)のタイトルは, 「階層型可視化アルゴリズム平安京ビューの高速化」だった(と思う). 私は, 平安京ビューというアルゴリズムの性能改善を行った. その効果は, オリジナルのアルゴリズムに対して5倍か6倍程度のものすごい改善であった. この研究には非常に思い入れがある. たまには思い出話をしたいと思う.

私は京都大学電気電子工学科に入学し, 電気電子工学について学んでいた. しかし私は2回生あたりで電気業界/電子業界の未来に疑問を感じた. その疑問は論理によるものだったか直感によるものだったか覚えてないが, 昨今の現状を見るに正しかったようである. 私は情報技術者になることを目指し, 電気電子系の科目は極力とらずに情報系の勉強をした.

京都大学工学部は, 3回生から4回生に上がる時に研究室を選択する. 私には選択肢が2つあった. 1つは, 情報通信系所属の研究室に行くこと, もう1つは, なぜか電気系に所属しているが情報系らしきことをやっている研究室に行くことである. 両方とも吉田キャンパスにあるのでロケーションとしては対等である. 最終的に私は後者を選択した. 京大電気系の大学院入試は難しい, それは問題が実際に難しいということもあるが, 私は電気系のことに興味がないので, その科目を含む試験は苦行であることがはっきりしてる. しかし私は後者を選択した. 理由を3つ挙げよう. (1) 教授が企業研究所出身だった. 私は大学純粋培養の教授は骨がないとして好まなかった. (2) 一人あたりに割り当てられるパーティションが恐らく全研究室最強だった.*1 (3) 研究室がオープンソース可視化ライブラリを育てていた.

研究室に入るとテーマを決めようということになった. 可視化の世界には大きく2つの分野がある. 1つはScientific Visualization(科学可視化), もう1つはInformation Visualization(情報可視化)である. その研究室では前者がmainstreamであった. オープンソースライブラリも, 前者であった. ふつうの学生なら当然前者をやろうと思うが, 私は後者を選択した. 今となっては理由は思い出せないが想像するに, みんながやってるから, あるいは, 他人が作ったオープンソースに後乗りすることで技術力が伸びると思わなかったからだろう. はっきりした基盤がある中で, プラグイン的に可視化機能を実装しているだけでは, ソフトウェア設計力は高まらない. 私の目標は当時も今も, 設計も実装も出来るディベロパであった.

こういっては失礼だろうか, 私は研究領域の知識を習得することにあまり価値を感じていなかった. ふつうの学生は, 「P2Pに興味があるから」「NLPに興味があるから」という理由で研究室を選ぶ. しかし修士で企業に入ることは決めていたので, ドメインの知識を身につけてもしょうがないと感じた. 知識そのものは, 情報分野ではすぐに陳腐化する. また, 無駄にそのドメインにこだわってしまう, あるいはこだわらなければ自分の価値がなくなってしまうと, 人生は柔軟性がなくなる.*2 それよりはもっと基礎的な能力を高めることが重要であるとはっきり分かっていた. 広いパーティションがあることを研究室選びの基準にしたこともそのためである. 私はソフトウェアの勉強を静かにしたかった. 事実, 修士を出る頃には研究室の本棚は私の買った本でいっぱいになった.

社会に出ると, ソフトウェア開発の基礎的な勉強をすることが難しくなることは分かっていた. となると, 実践から学べる土台がある, また, 自分で実践していける土台があることが重要となる. 愚痴になるが, それを怠って企業に入ってくる人間が多すぎる. エディタの一つもロクに使いこなせないとは何事であろうか. エディティング能力の低さで作業が遅い人間は, 給料を返上すべきであるとすら感じる. 実践に興味がないなら大学に居残りすればいい.

Information Visualizationに専門を定めたものの私はそれ自体にもあまり興味がなかった. Information Visualizationというのは多くの研究が, 既存のアルゴリズムを使ったアプリケーションである. 特定の問題に対してアプリを作り, 可視化がどれだけ役だったか評価するのである. そして評価は多くの場合アンケートによる主観評価である. 私はそういう研究はしたくなかった. もっと骨のあることがしたかった. 今もアプリが好きか嫌いかと言われたら嫌いだが, 昔はもっと嫌いだった.

平安京ビューは, 教授のIBM時代の同僚であるTakayuki Itoh氏が京大で客員教授をやってた頃に開発したツリー可視化アルゴリズムである. 私は突如, その高速化をすることとした. その経緯は覚えていないがしかし, 動機は覚えている. IBMの研究者が作ったアルゴリズムを倒せないようでは, 企業で戦っていくことは出来ないと思ったからだ. モチベーションはその一点だったと覚えている.

私が社会人になった今も続けていることは, 正月プログラミングである. 正月になると多くの人が帰省をする. 私はそれが骨のないことと感じる. むしろ, 正月こそプログラミングをすべきである. 今年の正月はdm-lc*3の開発をしていたし, その時は平安京ビューの高速化研究をしていた.

私は焦っていた. 性能が全く向上しない. 思いつく限りの様々な実装は試した. オブジェクト指向の力によって, 実装の変更少なく色々な実装を試すことが出来た. しかし性能は全然向上しなかった. 卒業論文の締め切りも迫ってきたので, そろそろ結果を固めて論文にまとめるように催促され始めていた. 私は焦っていた.

平安京ビューは, 与えられた長方形群をなるべく敷き詰めて配置することを高速に行うことを基礎的なアルゴリズムとする. 私の熱中っぷりは著しく, 視覚に入るそこら中の角という角に長方形が敷き詰められていく様子が見えるほどであった. 角・・・ある時私はシャワーを浴びている時に閃いた. 角だ!!!私のアイデアは角に注目する.

私は自転車を飛ばし, 研究室にたどり着き, 夜を徹してアイデアを実装した. 結果, アルゴリズムは顕著に高速化し, 私は卒業論文を書くことが出来た. 性能が向上した時の快感は今でも覚えている. そしてそれが, 私が性能研究にこだわる理由である. もしあの時閃かなかったら私は学部を卒業出来ていなかったかも知れない. 卒業論文というものは, それらしいことを書いてまとめればそれで良いものである. 京都大学といえども, もちろん, そこらでよく見るようにただの演習であっていいはずはないが, 研究をしてそれをまとめて提出すれば全パスするものである. しかしあの時私にもし閃きがなかったら, 私は卒業論文をまとめることを拒否したはずである. 顕著な改善なしに成果が出たと半ば偽ることは, 私のプライドが許さなかっただろう. 私は今より当時の方が, 気持ちの面でいえばより骨があったような気がする.

そのプログラムは5年近くの間, Dropboxの中で眠っていた. プログラムはJavaで書かれていて, とてもそれをリファクタリングする気は起きなかった. コードは, そこらのプロ(笑)が書いたコードよりはよほど分かりやすいが, 今の基準からすると落第点であり, そのまま公開する気は到底起きない. となると再インプリしかないわけだが, そこまでの気力が最近まではなかった. しかし私は, 平安京ビューのPython実装を開始した.

私には分かりやすい性質がある. 仕事が面白くないとそのストレスを家でのコーディングをして発散しようとする. 自覚はないものの, 今, 私は仕事が面白くないと感じているのだろう. 平安京ビューの再インプリを開始した. リポジトリは以下である.

https://github.com/akiradeveloper/HeiankyoView

平安京ビューの詳細についてはここでは述べない. それは今後の楽しみにとっておいても良いだろう?

*1:これはIBMの基礎研究所を模倣したものらしい

*2:それが, 今の半導体産業であると私は思う

*3:SSDキャッシュソフトウェアである. 様々な事情があって, Sorryクローズドとなっている