すごい広島 #6 でテスト駆動開発の読書

すごい広島とは 広島のエンジニアやウェブデザイナーが毎週集まって、 もくもくしたり Hackしたり 読書したり する場所です。

先週は欠席したので、今週は第6回でした。

「テスト駆動開発による組み込みプログラミング――C言語とオブジェクト指向で学ぶアジャイルな設計」という本を読み始めました。

原著 Test Driven Development for Embedded C のページからサンプルコードをダウンロードして、make しながら読み進めました。

組み込みの開発はするかも知れないし、しないかも知れないのですが、NVDA に組み込まれている eSpeak や libLouis のようなライブラリも、一種の組み込みソフトウェアとしてとらえています。

この本で使われているツールは UnityCppUTest なのですが、ダウンロードしたサンプルコードの中にどちらも入っていました。
VisualStudio のプロジェクトファイルも入っているのですが、Cygwin か Mingw で make all するほうがしっくりきます。
著者は Eclipse の CDT で、ファイルを保存したときに自動的にテストが走るようにしているそうです。。

著者のJames W. Grenningさんの講演は5月にアジャイルジャパン広島サテライトに参加して拝聴しました。講演の内容はプログラミングというよりも開発者の文化とか理念のお話でしたが、そのときにこの本が紹介されたのを、今頃になって思い出したのです。

今日読んだのは最初の100ページくらいなのですが、テスト駆動開発の「王道」がきっちり実践されているので驚いています。
C言語を教える大学の情報系カリキュラムで、アルゴリズムと並行してこういう実践をさせたら、すごいことになるんじゃないかと思ったり。。

オブジェクト指向開発とかテスト駆動とかいう話は、たいていプログラミング言語と結びついて語られるわけです。そして、この本は、C言語でアプリケーションそのものをオブジェクト指向的に書いたりはしないようです。でも、テスト駆動開発に必要なエッセンスを、素材であるC言語で、どう実践したらいいのか、見せてくれます。
しかも、律儀に、テストを書く、失敗させる、コードを書く、成功する、という繰り返しを読者にしつこく提示します。

テスト駆動は「何を使うか」ではなくて「いかに実践するか」なのだなあと改めて思いました。
ツールの仕様だけを覚えても、思想やスキルは身につかないということですね。。
この本の面白いところは、バージョン管理ツールについて一切言及がないところです。
これだけテスト駆動を実践すると、どこでコミットするかとかブランチを切るかとか、普通はやるんですけど。。
ただ「継続的インテグレーション」の説明の中で、バージョン管理ツールとのつながりそのものは語られているので、おそらく、話題を発散させないためにわざと削ったのだと思えてきました。

そんなわけで「C言語をカッコよく使いこなしてみたい」と思わせてくれる本です。

年末の出張

ATDOの調査の仕事で、12月にも海外出張がありました。アメリカ(ニューヨーク)、ブラジル(サンパウロとリオデジャネイロ)、南アフリカ(プレトリア)、インド(デリー)に行きました。

スケジュールはびっしり詰まっていましたが、各地のカウンターパートのかたにとても親切にしていただきました。
この仕事に関わるまで「カウンターパート」という言葉さえ知りませんでしたが、そういえばカウンターパートって音楽用語では「対位法」「対旋律」だったなあ、と出張中に思い出しました。

突然の停電、快適とはいえない3GやWiFi通信、飲めない水道水、などなど、日本ではできない経験もありました。

食事はたいてい美味しくて、つい食べ過ぎました。

サンパウロでFMラジオを聞くと普通のポップスが流れていたのに、デリーでラジオを聞くとやっぱりインド音楽でした。
世界は一筋縄では語れません。

言語についてもそうです。ブラジルではほとんどポルトガル語、そして南アフリカには11の公用語が、インドには22の公用語があります。

首都・大都市と地方都市で文化も生活も全然違う、とあちこちで聞きました。日本でもそうかも知れませんが。。

2012年を振り返ると、最初は NVDA 日本語化プロジェクトがどうやって世界とつながっていけばいいのか、見当もつかなかったのですが、台北に行くことになって、オーストラリアから開発者を招くことができました。
そしてアクセシビリティの仕事で海外に行く機会を得ました。

お世話になった方々に心から感謝しています。

この1年で得られたチャンスやヒントが、次のステップにつながるまで、地道に活動を続けたいと思います。

ニューヨークの夜
ニューヨークの夜

サンパウロの街
サンパウロの街

リオデジャネイロの海岸
リオデジャネイロの海岸

プレトリアの街
プレトリアの街

デリーの工科大学の屋上からの景色
デリーの工科大学の屋上からの景色

博士論文公聴会

私の博士論文公聴会の予定をお知らせします。

音声インタフェースシステムの 効果的設計と評価に関する研究
2011年1月26日(水)13:30~14:30
早稲田大学 西早稲田キャンパス
55号館N棟2階CS学科会議室

公開とのことなので、ご興味がおありの方はお越しいただければ幸いです。

追記 2011-01-29 公聴会は終了しました。スライド(下記)を公開しました。

2011年

2010年最後のブログ更新をさせていただきます。年賀状の代わりの近況報告としてお読みいただければ幸いです。

まず2011年最初の予定からお知らせします。
視覚障害の方の利用を想定した早口音声研究に関する投稿論文が採録になり、2011年1月号の電子情報通信学会論文誌(D)に掲載されることになりました。
この研究は「情報福祉の基礎」という科研費特定領域研究の一環として2004年度に開始したものです。ずいぶん長い時間がかかって、やっと(成果の一部ではあるものの)まとめることができました。

現在「音声インタフェースシステムの 効果的設計と評価に関する研究」という題目で早稲田大学にて博士論文作成のご指導をしていただいています。2011年1月末に公聴会を開催していただく予定になりました。
いろいろな方にお世話になり、ご心配をかけたので、まずは、この場にてお知らせしておきます。

なお、1月29日には Pycon mini に参加して NVDA の紹介をします。

“2011年” の続きを読む

WordPressへの攻撃

本サイトを含むnishimotz.comドメインのいくつかのサイトにおいて、WordPressのデータベースへの不正アクセスによる障害が発生していました。前回の投稿の後、この4日間くらいの間に問題が発生したと思われます。
当該サイトにアクセスした際に、画面が乱れていたはずです。また Internet Exploler 8 では「安全でないサイト」という警告が表示されました。
アクセスされた方にご迷惑をお掛けしたことをお詫びします。
当ドメインのサイトに関してお気づきの点があれば nishimotz アットマーク gmail.com までお知らせください。

すでにデータの修復とセキュリティ対策(データベースおよびWordPressのパスワード再設定を含む)を行いました。
原因は今のところWordPressやデータベースエンジンの不具合ではなく、お恥ずかしいことに当方の運用上の不備をついた攻撃である可能性があります。当面は詳細を書くことは差し控えますが、引き続き情報収集に努めております。
今後ともよろしくお願いします。
追記(2010-04-15):本件に関するWordPress側のブログ記事(原文)が公開されました。ホスティングプロバイダの運用上の問題である可能性が高いです。

研究とマーケティング

今回のHCGシンポジウムの原島先生とクリプトン伊藤氏の講演について考えている。

原島先生の「ループモデル」からアラン・クーパーの主張を連想した。
「機能を作ってからインタフェースを作る」のではなく「まずユーザにインタフェースを見せてフィードバックを得てから、そのインタフェースに機能を付与していく」というクーパーの提案は、彼が設計したとされる Visual Basic のコンセプトに繋がる。
原島先生のループモデルは「研究が完成してから成果を世に出す」のではなく「まず実装を世に出して評価を受けながら、要素技術を研究し、論文も書く」ということだと理解している。従来と順番を逆転させることで「社会にいかに受容されるか」を意識した研究開発を行う、という意味で、インタフェースと話がつながる。
“研究とマーケティング” の続きを読む

ブログ移転のお知らせ

はてなダイアリーから、私の個人ドメインである nishimotz.com に日本語ブログを移転しました。
今後、新しい記事はこちらのサイト(d.nishimotz.com)に書いていく予定です。

よろしくお願いします。

地域通貨と自発性

いまさらながら梅田望夫さんの「ウェブ時代 5つの定理 この言葉が未来を切り開く!」を読ませていただいた。

前々から気になっていた本で、とてもポジティブなメッセージを得ることができた。

書かれている主張にもだいたい納得できたが、自分の仕事の現場に当てはめて考えてみると、気になることがあった。

  • 「「誰かにやれと言われたから」という理由で何かをするな」(自発性)
  • 「成功したアントレプレナーはマイクロマネージャーだ」(トップの細部への目配り)

これを両立することが、意外に難しい。自発的に何かをしようとしている人の仕事に、スーパーバイザーが納得できなくて、つい手を出してしまう。

私もマイクロマネージャー的な性癖を持っている。頼んだ仕事のソースコードをのぞき込んで何か言いたくなる。常に口出しをし続けたいから、新しい技術や流行のプログラミング言語にいつも手を染めたいと思っている。

マイクロマネージすれば成果は出るし、マイクロマネージが「教育」になることも多い。だが、せっかく自発的にやろうとしていた人に対して、「こんなにダメ出しされるのなら自発的に動いても無駄だ」と思わせてしまうと、やる気がしぼんでしまう。結果的にマネージャー以外の人はどんどん無気力になる。マネージャーはマイクロマネージすべき仕事が爆発的に増加する。

こういう事例を考えると「未来を切り開く言葉」と「未来を真っ暗にする言葉」は紙一重なのではないか、と不安さえ感じる。だが。。。

****

いま「自発性」が根っこに潜んでいると思われる問題が、世の中にも自分の現場にも山積している。そんな中で、先週末、茶人・陶芸家の為公史さんと久しぶりに会って話をして、気づかされた。

マイクロマネージされた部下が自発性を奪われるのは「部下に手柄を渡さないから」である。

曰く「究極のマネジメントは邪魔するふりして軌道修正する」のだそうだ。私はその極意に達することができるだろうか。。

****

地域通貨が自発性をコントロールできる可能性についても、深く話し合った。

そういえば「人力検索はてな」や「Yahoo知恵袋」におけるポイントのやりとりも、一種の地域通貨なのかも知れない。

地域通貨にはいくつかユニークな特性がある。所持すること・使うことそのものの面白さ、金額という数字に込められる感情や感謝の気持ち、現実の通貨との価値換算を自由にコントロールできること、などなど。。

コミュニティが発行する通貨に止まらず、個人が通貨を発行し合って、自由に交換しあうと何が起こるだろう。年賀状をやりとりするように通貨を発行し合うことができたら、何が起こるだろう。。

とはいえ「誰かの役に立つことの喜び、内発的動機付けに気づけば、地域通貨は自然に必要がなくなる」というのが、子供キャンプで地域通貨を使い続けてきた為さんの意見だ。

こうした考察のプロセスは今後、私の個人プロジェクト “Slowly” でもお伝えしていきたい。

CMSとしてのdokuwiki

先日、個人で運営する新しいサイト

を開設しました。このサイトは dokuwiki という wiki エンジンをコンテンツ管理システム(CMS)として使用しており、ほとんどのページが「書きかけ」ですが、随時更新を行っています。

はてな日記はブログのシステムとして気に入っており、このまま利用を続けたいと思っています。一方で、日常的にちょっとしたメモを書きためて、関連する内容をまとめたページを作りたいという気持ちも強く、日記に書き散らかした記事をまとめるために CMS を活用したいと思っていました。

私が管理しているサイトに

というドメインがあります。ここには以前の勤務先(京都工芸繊維大学)のサーバで公開していたコンテンツを 2002年12月に引っ越しして再整備した

があります。執筆に参加した書籍「バージョン管理システム(CVS)の導入と活用」に関連する情報

もここに含まれています。

多くの方に御利用いただいているのは radiofly wiki

のほうだと思います。こちらは以前から活動している「ラジオ放送の文化と番組制作技術に関する研究開発」のためのサイトです。pukiwiki によって「放送博物誌」などの記事を書きためています。作成した当初、wikipedia のようなオープンコンテントのサイトは日本では一般的ではありませんでした。最初に放送と電気通信技術に関する年表を radiofly の wiki に書き始めたのは私でしたが、以降は川崎隆章氏が中心になって充実・整備をすすめておられます。私は現在は読むだけでほとんど書き込みをすることはありません。

radiofly wiki には「放送博物誌」と無関係に西本が書いていた記事や情報のページがいくつかありましたが、昨年末にメンテナンスを行った際に、radiofly の活動と無関係な記事の大半を削除しました。radiofly の活動と私個人の活動は、明確に分離していくことが望ましいと考えています。

pukiwikiは導入しやすいツールで、気に入っていたのですが、1.4.7 を最後に公式なアップデートがなされておらず、日本でしか使われていないということもあり、将来性に不安を感じています。

radiofly から削除したコンテンツの再整備などを行うために新たな CMS の検討を行いました。最初に考えたのは WordPress でした。

2006年のはじめにIPA未踏ソフトウェアでの活動を公開するために Movable Type サイトを開設し、その後 WordPress に移行しました。現在は

として運営しています。その後、英語での情報発信を行うために

を開設しています。(日本語のブログはひきつづき「はてな」で運用するつもりです)

WordPress はいわゆる WYSIWYG 編集ができるという利点がありますが、ソースコードを貼り付けて技術情報を書くサイトとしては向いていないと感じました。また、日付に対応する日記的な記事は作りやすいのですが、static なページを作りやすいとは思えませんでした。MySQL によるデータ管理も、私が管理したい記事の量ではオーバースペックと言えそうです。

pukiwiki の wiki 記法には気に入らない部分もあります。例えば pre 要素に対応する記法は「行の先頭に半角スペース」ですが、行数の多いソースコードを貼り付けるのが面倒だったりして、あまり好きではありません。(pukiwikiに複数行#preという機能を拡張する試みはなされていますが)

MediaWiki などの候補をいろいろ調べて dokuwiki に行き着きました。

最初は「見出しタグが ====== ほげほげ ======」というあたりに違和感を感じましたが、慣れてきました。

今後、いったん公開をやめた記事、公開する機会がなかった技術メモ、日々の仕事で気づいたことなどを随時

に書いていきたいと思います。また、

やこの日記で、ときどき更新情報をお伝えしたいと思います。

ヒューマンインターフェースとソフトウェア開発

音声認識の研究者に広く使われているHTKというソフトウェアがあります。

数ヶ月前にリリースされた Ver 3.4.1 をいじりながら、多くの人が「HTKは難しい」と言うのはなぜなのか、改めて考え直しています。

「そんな難しくないですよ」と言いながら、いろいろ試したり説明をしようとしたら、私自身が落とし穴にはまり、落ち込んでしまうこともあります。

HTK は HMM(隠れマルコフモデル)による音声認識のためのツールキットです。最初はケンブリッジ大学で開発され、有償ソフトウェアになったのは 1993 年だそうです。その後 Microsoft に買収され、現在はケンブリッジの手に戻って、無償で配付されています。最新版の英語マニュアル(HTKBook)は384ページにもおよぶ膨大なPDFファイルです。

十数年にわたる音声認識研究の歴史が詰まっている HTK は、最近に至るまで拡張が続いています。今回、久しぶりにチュートリアルを精読してみたら、知ってるつもりで知らなかった機能にいくつか気づくことができました。と同時に、拡張を繰り返してきたツール全体の仕様の見通しの悪さ、コマンドラインオプションの覚えにくさ、などなど、課題もいろいろあるように感じました。

HTKBookのチュートリアルをできるだけそのまま実行してみようとして、チュートリアルの説明と挙動が異なる箇所があること、配付サイトで公開されているファイルだけではチュートリアルを完全に再現できないこと、などにも気づきました(私の誤解かも知れませんが)。

フリーソフトでつくる音声認識システム - パターン認識・機械学習の初歩から対話システムまで

フリーソフトでつくる音声認識システム – パターン認識・機械学習の初歩から対話システムまで

荒木先生が書かれた参考書は HTK の手っ取り早い入門として学生からも評判がよいのですが、突っ込んで使いこなしたい場合には、自力でマニュアルを読んで理解をしなくてはなりません。

最近、信号処理やパターン認識の分野で Matlab や R などスクリプト言語系のツールが普及しつつあります。性能や言語仕様の利便性などの議論はともかく、学習の容易さという点からは高く評価できるでしょう。

また、個人的には Ruby on Rails の勉強において script/console がとても有用であることに気づきました。いわゆる「コード補完」が有効であることにも驚いたし、irb で “hello”.methods を実行すればStringクラスのメソッド一覧が簡単に見られる、というのも目からウロコでした。

プログラミング言語がプログラマーと言語処理系のインタフェースであるとすれば、「ユーザインタフェースの原則」がプログラミングという行為においても重要ではないかと思います。

  • やりたいことが完結に記述できること
  • やりたいことがコマンド名、関数名、メソッド名として「連想が容易」であること
  • 連想された記述法が正しいかどうか、対話的にフィードバックを得られること

などがインタプリタ系言語の嬉しいところです。そう考えていると、

において議論してきた「インタフェースの原則」と重なってきます。

HTKでは数千個という膨大な学習データを扱ったり、膨大なパラメータ数の統計モデルを学習することができます。しかし、やりたいことを完結に記述できるか、コマンドやオプションを容易に連想できるか、操作のフィードバックが容易に得られるか、などと考えると、あちこちに落とし穴(ノーマンの7段階モデル流に言えば「淵」)がありそうです。

HTKについて考察していると「音声認識による機械と人間のインタフェース」にとどまらず「HTK と研究者のインタフェース」についても考えたくなってしまいます。