タグ: ruby

  • ERBとインスタンス変数

    Rails の View のようなテンプレートエンジンを ERB 単体で使う例。

    詳しい説明はあちこちで見かけたのですが私が確認したかったポイントに絞ってみました。

    #!/usr/bin/ruby
    require 'erb'
    erb_doc = <<EOS
    hello world 1
    <% 1.upto(3) do |i| -%>
    <%= @hoge %>:<%= i %>
    <% end -%>
    hello world 2
    EOS
    class MyTemplate
    def initialize
    @hoge = 123
    end
    def result(script)
    ERB.new(script, nil, '-').result(binding)
    end
    end
    puts MyTemplate.new.result(erb_doc)
    # hello world 1
    # 123:1
    # 123:2
    # 123:3
    # hello world 2
    
  • 島根県CMS

    2002年に、ラジオフライでは音声合成を用いたインターネットラジオ番組「ラジオフライマガジン」の制作を行いました。ラジオフライのメーリングリストでのやりとりが、編集の達人・デーブ川崎氏によって、月刊ウェブマガジンとしてまず公開されました。それを私がHTMLから音声合成用のファイルに編集し直して、合成音声と効果音とテーマ音楽を使った、約1時間分のMP3コンテンツとして公開されました。この編集作業は数ヶ月続けて、技術実験としての目的を達成しつつ(メンバーの多忙もあって)終了しました。

    こんなことをやった背景は、それまでの数年の活動で得た「インターネットラジオ番組を誰でも配信できるようになったけど、コンテンツを定期的に作るのは大変である」という経験からの着想でした。

    そして、たまたま「こんなことやってるんですよ」と、ラジオフライマガジンを(当時発売されたばかりの)Apple iPod で聞かせた相手に「これはいいね」と言われ「ユビキタスラジオ」の開発が始まりました(と私は思っているのですが・・)。

    最近、ネットワーク応用通信研究所からソースが公開された「島根県CMS」が注目を集めています。

    しかし「ウェブサイトに読み上げ機能を持たせるのは、アクセシビリティのことを誤解した邪道なシステムだ」という意見も聞かれます。

    恥ずかしながら、私は最近まで、島根県のウェブサイトで音声合成システム GalateaTalk が使われているのは知っていましたが、どのように使われているのかちゃんと知りませんでした。そこで島根県のウェブサイトを見てみました。

    右上の「よみあげ」が index.m3u へのリンクになっています。立ち上げると開くのはデフォルトで関連づけられたメディアプレイヤーです。

    島根県CMSの機能は、よくある「ActiveXで音声合成機能をクライアントにインストールしてしまうシステム」ではありません。そんなことをしてしまうと、なんのために「ユニバーサルなメディアとしてのテキスト」を公開しているのか分からなくなってしまいます。島根県CMSの機能は「ウェブアクセシビリティ」と呼ぶべきではなく、もっと別のメディアだと考えた方がよいと思うのです。

    つまりこれは、HTMLというテキスト情報に「インターネットラジオ番組」という新しいメディアを付加し、両者を効率よく制作・配信するシステムなのだと思います。それはまさに、私が「ラジオフライマガジンをもっと効率よく制作したい」と思いながらほったらかしていた、私が欲しかった機能なのです。。

    そう思いながら、島根県ウェブサイトの読み上げを聞いていると、別の問題が明らかになりました。つまり GalateaTalk の基本性能としての「読み付与」や「音声の明瞭性」などがよくないのです。無償だからといって、これは GalateaTalk の評判を下げてしまっているのではないかと。。でも、郵便番号を日付のように読み付与してしまうのは、使い方を工夫すれば解決するのでは。。

    GalateaTalk は何度か商用化の打診があり、私もいろいろ頑張ったのですが、商用レベルの品質に持って行くには相当な努力が必要である、ということで断念した経緯があります。しかし、島根県CMSがGalateaTalkのキラーアプリの一つになれば、状況は変わるかも知れません。 島根県CMSの音声読み上げの改良にも取り組んでいかなくては、と思いを新たにした次第です。

  • Rubyのチカラ

    夜中に松江のホテルの部屋で去年の人工知能学会全国大会の招待講演ビデオ配信「Rubyのチカラ」を見ました。

    NaClさんがどういうつもりでまつもと氏を雇っておられたか、という話をその日に伺ったので、「NaClさんの業務にどう役立つか」という観点はおそらくRubyの発展過程で強く意識されたであろう、と思いました。

    そして言語オタクのまつもと氏が人工知能の講演じゃないことを申し訳なさそうに語りはじめた、昨年6月の人工知能学会での講演。Rubyで導入された機能はすべて過去の言語の二番煎じだ、と謙遜しつつも、「単純さよりも自然さが重要」という言語設計のコンセプトがじっくり語られるのを聞いて、私にはある考えが浮かびました。

    プログラミング言語Rubyは、プログラマーに「自然なコーディング」を許容するために設計された「人工知能」なのだ、と。

    どこでどういう省略記法を許すか、という規則を実装したパーザーはルールベースで作り込まれているはずなので、言語を作っている側は人工知能だと思わないで作っているのでしょうが、実務の文脈でいかに自然な記述を許容するか、一つ一つ職人芸で仕様を選択した結果は、「高度な手作り人工知能」と言えるのかも。

    人工知能としての自然言語処理技術では「人間がやりとりする言語のコーパスを集めて、それをどう処理したらいいか検討する」ということが行われるわけですが、「プログラミング言語が使われるシステム開発の現場のコーパスを集めて、それを効率よく記述できるプログラミング言語を設計する」ということがもしきちんと行われたら、Ruby のような言語はもっと工学的に設計できるのかも知れません。そのときに重要なのは「集めるコーパスにリアリティがあること」ではないでしょうか。

    そんな視点を持ちつつ、私もすっかり固くなってしまった頭を柔らかくしながらプログラミングの勉強を続けたいと思ったのでした。