投稿者: nishimotz

  • オープンソースと動機付け

    特別企画「オープンソースソフトウェアとWebアクセシビリティ」は、終了時間が大幅に遅くなって皆様にご迷惑をお掛けしましたが、私はとても楽しく進行を務めました。そして、改めていろいろ考えさせられました。

    いくつか感じたことを挙げると:

    • Free の「自由」と「無料」はどちらも重要
    • オープンであるだけでは不十分。適切に設計・部品化されていること、汎用性があることが必要。
    • 日本のコミュニティが「日本語化」だけにとどまらず国際的に貢献することが重要。

    参加者からの印象的な発言を挙げると:

    • 企業でOSS・サポート体制のないソフトウェアを使うことへの抵抗は依然としてある。
    • オープンソースコミュニティが高齢化している。大学生への教育が重要。
    • ユーザが目的にあったソフトを簡単に選べるための情報提供が重要。
    • オープンソースプロジェクトに参加できるためには自由な身分や時間が必要。貢献への動機付けが必要。作ることを面白い・かっこよいと思えるか?
    • API資料などを英語で調べることの壁がある。
    • オープンソース参加によって個人情報を不用意に公開してしまう危険はないのか?
    • 学生の立場から言えば、セットアップが難しいソフトは敬遠したくなる。ちゃんと教えてもらえるなら、関心を持てる。
    • 「emacs にあこがれるか否か」が「オープンソース文化への親しみ」の境界線では?
    • Linux カーネルや Eclipse のような「重要なプロジェクト」は、慎重にリリースされ履歴がきちんと管理されるべき。そうでない自由なプロジェクトもたくさん存在してよい。
    • 広く使ってもらうためには大きなコミュニティが必要。橋渡しになる解説者が必要。
    • 代替手段を手に入れにくいソフトウェアには成功のチャンスがある。NVDA はその一例になりうる。

    音声合成については GalateaTalk の Windows 版を(NVDAの開発プラットフォームである)Python から制御するデモをお見せしました。Galatea for Linux による音声対話システムのデモをする時間はなくなったので、これはまたの機会に。。
    Eclipse Accessibility Tools Framework の紹介は個人的に非常に興味深かったです。

    サイトは英語の情報ばかりですが、日本アイ・ビー・エムの研究成果がベースで、日本語の情報を精力的に整備中であり、日本からの利用・参加を呼びかけていきたい、とのことです。
    また、NVDA日本語版は、この企画に合わせて新しいバージョンがリリースされました。

    国際的に協調しつつ行われているWebアクセシビリティ標準化ですが、日本ではスクリーンリーダなどの支援技術の進歩が遅れています。この問題に積極的に関心をお持ちいただければ幸いです。
    そして、ソフトウェア開発でアテンションを集めることを「かっこよい」と思える世の中であって欲しい、と個人的には思っています。

  • YAML+ERB

    前回の続きで、ERB に埋め込む情報を YAML で記述する実験。

    # config.yml
    books:
    -
    title: あいうえお
    author: かきくけこ
    price: 400
    -
    title: さしすせそ
    author: たちつてと
    price: 800
    
    #!/usr/bin/ruby -Ku
    require 'erb'
    require 'yaml'
    erb_doc = <<EOS
    hello world 1
    <% config['books'].each_with_index do |i,n| -%>
    [<%= n %>] title:<%= i['title'] %> / author:<%= i['author'] %>
    <% end -%>
    hello world 2
    EOS
    class MyTemplate
    def initialize
    @config = YAML.load(File.new('config.yml'))
    end
    def config
    @config
    end
    def result(script)
    ERB.new(script, nil, '-').result(binding)
    end
    end
    puts MyTemplate.new.result(erb_doc)
    # hello world 1
    # [0] title:あいうえお / author:かきくけこ
    # [1] title:さしすせそ / author:たちつてと
    # hello world 2
    
  • 顔モデルのカスタマイズ

    合成音声や顔画像合成のカスタマイズができるのが Galatea の特長のひとつなのですが、カスタマイズされたモジュールを連携させて制御するためには、対話統合処理においても設定が必要です。これらの設定を統一的に管理する枠組みは、残された課題のひとつになっています。

    昨日から今日にかけて Galatea for Linux (2008年8月版)をお使いの方と以下のやりとりをしました。

    質問:

    linux/bin/FSM/data/config.txt を下記のように myself を付け加えて、linux/bin/fsm を実行し、

    set Mask = myself
    

    と打てば、自前で作成した顔を表示してくれるのですが、

    cd linux/bin/DM2
    ./galatea tests/vxml/ticket.vxml
    

    にて、

    <native>to @FS-MCL set Background = myself bg1</native>
    <native>to @AM-MCL set Mask = myself HAPPY 100 0 0 0</native>
    

    のように変更すると、

    Exception in thread "main" java.lang.NullPointerException
    at galatea.agent.BehaviorManager._handleSet(BehaviorManager.java:319)
    at galatea.agent.BehaviorManager._iteration(BehaviorManager.java:425)
    at galatea.agent.BehaviorManager.run(BehaviorManager.java:453)
    at galatea.agent.BehaviorManager.main(BehaviorManager.java:531)
    finalize_CHLD at ./AgentManager-gdm.pl line 455.
    LOG: AM: finalize()
    finalize_PIPE at ./AgentManager-gdm.pl line 459.
    LOG: AM: finalize()
    print() on closed filehandle GEN7 at /usr/lib/perl5/5.8.6/i386-linux-thread-multi/IO/Handle.pm line 399.
    print() on closed filehandle GEN12 at /usr/lib/perl5/5.8.6/i386-linux-thread-multi/IO/Handle.pm line 399.
    

    と、落ちてしまいます。

    回答:

    java.lang.NullPointerException で落ちてしまうのは明らかに不適切なので、実装の不備をお詫びしたいと思います。

    また、本件に関連するシステムの実装を以下にご説明します:

    まず

    to @AM-MCL set Mask = myself HAPPY 100 0 0 0
    

    を解釈しているのは AM-MCL.rb という Ruby スクリプトで、

    の do_set_mask メソッドで FS-MCL に set Mask を送ります。

    つぎに FS-MCL = BehaviorManager.java についてご説明します。

    このモジュールは Galatea FSM の Autonomous 動作の自然性や頭部運動のなめらかさなどを補うために Java で実装されています。

    jar ファイルとしては DialogManager クラスと同じですが、AgentManager からは別々の java インタプリタとして実行しています。

    このモジュールに与える情報は Java のリソース形式で記述されており、

    DM2/skel/gdm.conf
    

    に以下のように記述されています。

    # for BehaviorManager
    Behavior.DefaultAgent   :woman01
    Behavior.NumAgent           :3
    Behavior.Agent.1            :woman01 woman01 female01 bg03 1.2
    Behavior.Agent.2            :man01   man01   male01   bg01 1.2
    Behavior.Agent.3            :man02   man02   m001     bg02 1.6
    

    引数の内容は Agent クラスのコンストラクタの引数に対応しています:

    String mask, String speaker, String bg, double scale

    = FSM の顔モデル名、SSM の音声話者モデル名、FSM の背景名、FSM の顔の大きさの正規化パラメータ

    例えば Behavior.NumAgent : 4 にして、

    Behavior.Agent.4            :myself   myself   myvoice     bg01 1.0
    

    のように追加記述していただくと、FS-MCL に新しいエージェントモデルを教えることができます。

    FSM の config にモデルを追加する必要がありますが、これについては、DM2/skel の中にある雛形ファイル

    を変更してください。これを実行時に ~/.galatea にコピーして使います。

    あわせて DM2/Modules/AM-MCL.rb に、myself の追加が必要です。(この部分はスクリプトにハードコーディングされているので改善が必要です)

    @agents["man01"]   = Agent.new('man01',   'male01')
    @agents["man02"]   = Agent.new('man02',   'm001')
    @agents["woman01"] = Agent.new('woman01', 'female01')
    @agents["myself"] = Agent.new('myself', 'male01')
    

    なお、skel/gdm.conf は次期バージョンでは Ruby のテンプレートエンジン ERB を用いて

    のように変更する予定です。

    また、上記のカスタマイズに関してもシステム全体の入口である “galatea” スクリプトにて、各モジュールのコンフィグレーションを一元的に記述できるようにしたいと考えております。

    具体的には ~/.galatea/config.yml のようなファイルに統一的な記述を行い、このファイルが存在しない場合は雛形ファイルを生成する、といった処理を導入する計画です。