nishimotzの日記

  • Windows Update が失敗し続ける

    先週末、Windows Vista の「安定性を改善する」というパッチが公開されましたが、そのパッチの適用が失敗し続ける、という現象が起こりました。

    失敗し続けたのは KB941649 というやつですが、

    http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1013482485

    この方の症状と同じですね。

    いま確認すると回答はついたようですが、私も「イベントビューア」を見て、

    インストールの失敗: エラー 0x8007007e で次の更新プログラムのインストールに失敗しました: Windows Vista 用の更新プログラム (KB941649)。

    だったので、「0x8007007e KB941649」で検索して、同様の書き込みを英語のサイトで見つけました。

    ところが、手作業でアップデートしたあと、再び Windows Update が KB941649 をインストールしようとします。そして素直にしたがってしまうと、「再起動してインストールを試みる」「インストールに失敗」「アンインストール」をしてしまうらしく、KB941649 が入っていない状態に戻されてしまいます。

    結局、Windows Update の設定を変えて「推奨される更新プログラムについてもダウンロード、インストール、および通知する」をオフにしました。

    SP1 でも何でもいいから、早く安定して欲しいものです。

  • TCodeGear.Create()

    CodeGear RAD Studio 2007 Professhonal をインストールしてみました。

    いままで使っていた Borland Developer Studio 2006 のプロジェクトは、開くときに新しいファイル形式(MSBuild対応)に変換されるようです。

    実は開発環境の見栄えは大差ないのですが、これは私が Vista をクラシックUIで使っているからかも知れません。

    ドキュメントは読みやすくなったように感じます。そして、私が前回の記述で書いた C++Builder の TStringList の使い方が間違っていました。ValueFromIndex は形式が「名前 = 値」の文字列を対象としてその右辺の値を取り出すプロパティです。

    Delphi でデフォルトのプロパティに相当するのは Strings でした。つまり、

    [Delphi] s := lines[i];

    [C++Builder] s = lines->Strings[i];

    になります。

  • 久しぶりのDelphi

    1995年にBorlandから登場したソフトウェア開発ツールDelphi 1.0には感動しました。私は発売されるとすぐに購入しました。

    しかし、いつの間にか Visual Basic やら Java やら C++ やらの進化に気を取られ、Microsoft .NET に翻弄され、Delphi の神髄に触れることなく月日が流れました。たぶん Delphi 3.0 あたりまでバージョンアップしたと思うのですが、小さなアプリを作ったくらいで、だんだん興味を失っていきました。たぶん Windows ネイティブアプリを作ること自身に興味を失っていたからでしょう。

    最近私が作りたい(作りたいと思うようになった)ツールには .NET は重すぎて小回りがきかない、と思い始めました。

    C++ Builder を使ってみようと思い、Borland Developer Studio 2006 を購入しました。しかし、C++ の流儀をそのまま使えると思いきや、まず VCL の流儀がわからないと話にならない、ということに気づきました。そして残念ながら、オンラインドキュメントの説明は Delphi 中心にしか書かれていなかったのです。

    私は Delphi 2006 を本格的に使うようになって半年が過ぎました。Pascal もなかなか快適なスクリプト言語だなあと思い直しました。

    Windows の API を簡単に呼び出せるし、メッセージハンドラを書くための「メッセージメソッド」という機能が文法に備わっているのも便利です。

    CodeGear ブランドの独立、Delphi 2007, C++ Builder 2007, Rad Studio と新製品がいろいろ発表され、これからも安心して使い続けることができそうだなあ、と思っています。

    何よりも大きいのは、わからないことの大半がインターネットで調べられる、ということです。多くの開発者の方が実践的なノウハウをウェブサイトにまとめておられることに感謝しています。

    この週末は、いままで Excel のマクロでやろうか、Perl のスクリプトでやろうか、と思っていたデータの集計作業を Delphi でやってみました。実は CSV ファイルを Grid コントロールに読み込むのは簡単だったのです。

    CSV ファイルを TStringList に LoadFromFile して、1行ずつ TStringGrid の row に DelmitedText として代入する。こんな感じです:

    procedure LoadCSV(sg: TStringGrid; f: string);
    var
    i: Integer;
    lines: TStringList;
    pos : integer;
    begin
    lines := TStringList.Create;
    lines.LoadFromFile(f);
    pos := 0;
    for i := 0 to lines.Count - 1 do begin
    // 先頭行は fixed
    sg.Rows[pos].DelimitedText := lines[i];
    Inc(pos);
    if sg.RowCount = pos then
    sg.RowCount := sg.RowCount + 1;
    end;
    lines.Free;
    end;
    

    C言語で初めて strtok を覚えて「文字列のトークン化をするのに1文字ずつスキャンしなくてもいいのか」と喜んだのですが、その後 awk を覚えたり perl の split を覚えたりして、トークン化された文字列が配列に一発変換されることに快感を感じました。

    同じようなことは Delphi でどうやるんだろう、で思ったのですが「DelimitedText に代入する」というのはなかなか面白いやり方だなあ、と感心しています。

    試してみたら、C++ Builder でも同じでした。

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    if (OpenDialog1->Execute()) {
    TStringList *lines = new TStringList();
    lines->LoadFromFile(OpenDialog1->FileName);
    for (int i=0; i < lines->Count; i++) {
    String s; // AnsiString
    s = lines->ValueFromIndex[i];
    s.sprintf("%d,%s,%s", 10, "123", s.c_str());
    StringGrid1->Rows[i]->DelimitedText = s;
    }
    delete lines;
    }
    }
    

    C++ Buider の String クラスは std::string ではなく、Delphi の AnsiString なのです。Delphi を勉強したらやっと C++ Builder も使えるようになってきました。

    上記のコードだけ比べると C++ の方が簡潔かなあ、という気もしますが、ValueFromIndex[i] をもっと簡潔に書くにはどうしたらいいのかわかりません。全体としては Delphi で仕事をする方が「心地よい」と感じています。

    私が大学に入って最初に覚えたプログラミング言語は Pascal でした(大学に入る前に覚えたプログラミング言語もありましたが)。Delphi の Linux 版である Kylix はビジネスとしては成功しなかったようで、いま Delphi は Windows 専用の開発環境になってしまいました。クロスプラットフォームの C++ 開発をした方が将来性がある、という意見もあると思います。しかし、環境依存部分と環境独立部分にシステムをうまく切り分けて、環境依存部分はその環境にもっともふさわしいツールで開発する、という方法も有効ではないかと思います。Visual Studio 2005 で書いた C/C++ のコードは DLL にすれば Delphi から簡単に呼び出せることも確認しました。

    Delphi は「作り捨てアプリケーション」から、作り込みとリファクタリングを重ねて「まともなアプリケーション」を作るところまで、いろんな要求をカバーできる言語だなあ、と再認識した今日この頃です。C# などと違って、プログラムを配布するときにランタイムが不要なのも便利ですね。

  • rail or jail

    CodeGear (Borland) の 3rdRail のトライアル版をダウンロードして、試しています。Ruby on Rails に興味を持ちつつも、環境を作るところで何度も挫折したので、今度こそ、という感じです。

    今回試したのはWindows版で、作業環境はVista Businessです。そもそもVistaを使っているところが最大のネックのような気がしますが。。

    いま配布されているのは英語版で30日の有効期限があるトライアル版です。解凍して実行するとセットアップのメニューが現れます。

    “3rdRail Install” を実行すると、Eclipseベースの統合環境がインストールされます。

    “Ruby on Rail Install” を実行すると、Ruby 実行環境がインストールされますが、私はすでに Ruby-186-25 をインストールしていたので、先にこれをアンインストールする必要がありました。

    最後に、”InterBase 2007 Install” を実行しました。

    3rdRail と InterBase 2007 はそれぞれ別にライセンスを取得する必要があります。

    環境はEclipseそのものです。Eclipseに慣れていれば「パースペクティブ」といった操作環境そのものの概念を新たに覚える必要がなく、自然に使うことができます。

    まずボーランドのビデオを見ました。

    Project Commander で Ruby on Rails のコマンドを直接打ち込んで実行できること、その際に CTRL-スペース でコマンドの補完ができること、左下のアイコンで「スクリプトエクスプローラ」を選択できること、などをとりあえず把握しました。

    モデルは Create New Model で、いわゆるデータベースのテーブルを作成し、フィールドを追加できることがわかりました。

    サーバの実行は右下の Server タブで簡単です。

    新規プロジェクトを作って、モデルを作って、Scaffoldを作るところを、何度も繰り返しました。

    InterBase をデータベースに使った場合は、比較的簡単に、Scaffold でテーブルにレコードを追加する画面を自動生成することができました。ブラウザでのアプリケーション操作では日本語も正しく扱えています。

    プロジェクトフォルダの最上位にxxx_development.ib というファイルが作成されます。そこでInterBase の管理ツールからこれを開いてみたら、日本語は文字化けしていました。ためしに InterBase 2007 日本語版を別途ダウンロードして再インストールしましたが、状況は同じ。そもそも 3rdRail のModel作成画面には Encoding の指定箇所がありません。自分で database.yml を編集するしかないようです。

    PostgreSQL と MySQL にも挑戦してみたのですが、こちらはまだ成功していません。

    私は VMware Player の中でVine Linuxを動かして、その中でPostgreSQLとMySQLを動かしているのですが、これらのデータベースにWindows側の3rdRailから接続することが、まだうまく行きません。

    3rdRail は Ruby や Gems についてはオリジナルの環境をそのまま呼び出して使っているので、3rdRail の問題、というよりも VMware 側の環境の問題か、あるいは database.yml の設定の問題ではないかと思います。

    Vista では C ドライブに Postgres や MySQL をインストールして実行することができないらしく、私が最初にパーティション分割をしなかったのが最大のネックのような気がします。

    いずれにせよ、レール通りに仕事が進めばとても快適、という Rails の利点は、つまずいたらどこでつまずいたのかわからない、という欠点にもつながっているはずです。しかし RAD ツールに組み込まれることで、Rails は格段に見通しがよくなったように思えます。Ruby on Rails on 3rdRail という感じでしょうか。私は Rails を勉強する手段として 3rdRail が使えればよいと思っていたので、その目的においては十分な価値があると思います。ただし、全般的に処理は遅いので、高性能のマシンが要求されます。

    とにかくやっと Ruby コードを書くところまでたどり着きました。コード補完などのエディタの使い勝手、依存関係の可視化機能、リファクタリング機能など、興味は尽きません。もう少し頑張ってみたいと思います。

  • 福祉情報工学研究会

    電子情報通信学会 福祉情報工学研究会(WIT)の幹事(企画担当)を勤めています。現在、来年度の研究会開催計画について議論を進めており、他の研究会との共催の交渉などを行っています。過去の実績などを踏まえて検討を進めているのですが「参加する方が何を求めているのか、何を活動のねらいにするのか、よく考えてほしい」という御意見をいただき、改めて責任の重大さを感じています。活動への御支援をよろしくお願いします。

    次回研究会は10月19日に大阪大学です。前述したSLP研究会と日程が重なっているのが、私には辛いところです。

  • MUS/SLP研究会

    情報処理学会の2008年2月のMUS/SLP共催研究会の世話役を担当することになり、旅行代理店の方と交渉して会場を選定する作業に関わりました。2月8~9日です。箱根や熱海近辺のカタログやウェブページもいろいろ見ました。場所はほぼ確定しており、近々、それぞれの研究会から発表募集のアナウンスが行われる予定です。

  • マルチモーダル対話システム標準化

    情報処理学会 情報規格調査会の活動の一環として、音声入出力インタフェースの標準化活動に関わっています。この数年来行ってきた委員会活動のメンバー6人の共著により、10月19日のSLP研究会(場所:早稲田大学)で「マルチモーダル対話システムのための階層的アーキテクチャの提案」という発表を行うことになりました。VoiceXMLやSALT、SMILなどマルチモーダルインタフェースの既存技術を踏まえつつ、Galateaプロジェクトでのツールキット開発経験から得た知見に基づいた考察になっています。

  • 学会発表

    すこし時間が経ってしまいましたが、9月6日にヒューマンインタフェース学会のシンポジウムで発表を行いました。場所は新宿の工学院大学です。

    内容は3月の音響学会での招待講演と同じ、早口音声合成における加齢と学習の効果の検討に関する話でしたが、私もこのトピックで講演を重ねるにつれて、実験結果をどのように解釈すればよいのか、ということについて踏み込んだ考察ができるようになりました。また、私が参加した「福祉と学習」のセッションに引き続いて「学習障害」のセッションがあり、こちらでも問題意識を共有する多くの議論がなされたことが印象的でした。

    9月7日にはFIT2007のイベント企画が予定されていたため、すぐに名古屋に向かおうとしたのですが、首都圏を直撃した台風の影響で、名古屋に行くことができませんでした。残念です。

    9月20日には山梨大学にて日本音響学会の秋季研究発表会に参加し、ポスター発表を行いました。同じく早口音声の聴取に関する研究ですが、ここで発表したのは「聞き取りにくい音声を聞いたときの心的負荷の測定」という内容です。具体的にはNASA-TLXというメンタルワークロード測定方法を用いて行った予備的実験についての報告でした。聴覚に関するセッションであったため、補聴器や音声合成の開発や評価に使えるのではないか、といった意見もあり、有用な情報交換ができました。

  • ちいさな音楽会

    先週末「ちいさな音楽会」というタイトルのコンサートに出かけました。

    知り合いのピアノの先生が主催する教室の生徒さんを中心とした発表会なのですが、今年で第23回。ずいぶん長く続けてこられたのですね。毎年招待のご連絡をいただいているのですが、以前は伺ってみたら「人手が足りないからビデオ撮影を手伝ってください」と言われたことすらありました。

    今回は「ちいさな音楽会」というタイトルに見合わず、大がかりな音楽会でした。

    第1部は生徒さん個人の発表会。ピアノを習いたての子供たちから大学生まで、それぞれの音楽を披露してくれました。ピアノだけでなくバイオリンやチェロの演奏もありました。途中で失敗した人もいたのですが、音楽表現の豊かさは大人顔負けで、ショパンやモーツァルトなどの名曲をたっぷり堪能しました。

    演奏会の最初に小さなお子さん(もちろん生徒さんなのですが)がステージに上がり、「ようこそおいで下さいました」などと挨拶をしてくれて、ほほ笑ましかったです。

    第2部は生徒さん同士の合奏。そして大人の声楽や弦楽のプロを交えて音楽物語「三匹のこぶた」。衣装や大道具なども凝ったものでした。

    第3部は宮沢賢治「銀河鉄道の夜」より「銀河の歌」と題した朗読と音楽。生徒さんとプロの合同の演奏。1991年にサントリーホールで初演された作品が原型とのこと。

    テリー・ライリーの「in C」を聞きながら「ピアノはずっと同じ音ばかりたたき続けるから大変なのよ」とずっと昔に語っていた先生の言葉を思い出しました。

    バーバーの「弦楽のためのアダージョ」は映画「プラトーン」で有名な曲ですね。

    最後の「星めぐりの歌」のアカペラは圧巻でした。

    大人が聴いて感動できる演奏会を生徒さん全員参加で作り上げることの大変さを想像し、生徒さん達の才能に敬服しました。そして音楽家として、教育者として、そしてプロデューサーとしても大いに腕をふるわれた先生のご努力に頭が下がる思いでした。

    打ち上げにも参加することができました。この先生と私は、大学時代に「子供のためのクラシック」というイベントでバックコーラスのお手伝いをしたのがきっかけで出会いました。そのときは「ミッキーマウスマーチ」や「こぶたぬきつねこ」を歌って、私は「きつねさん」でした(笑)

    あれから歳月が過ぎ、そのころ素敵なお姉様だった方々は立派なお母様になり、赤ちゃんだった子供は立派な大学生になりました。複雑な気持ちです。

  • Windows Vista

    私の経験ではノートPCは使用期間が2年を超えると「いつ壊れてもおかしくない」状態になります。

    現在使用中のマシンは Panasonic CF-R3 (Windows XP Professional) なのですが、使用期間が2年数か月となり、かなりくたびれてきたので、新しいマシンへの移行作業を進めています。

    新しいマシンはすでに購入済みの CF-R6 (Windows Vista Business) です。すでに設定をいじりまくって、外見や視覚効果などはほとんどWindows XP(というよりもWindows 2000)と同等の状態にしてあります。UACも無効化しました。

    しかし、ソフトウェアの開発やデモのために動かしていた Apache, PHP, PostgreSQL のWindows版がVistaでは簡単には動かない模様。

    この機会に VMware Player を導入することにしました。

    日経Linux 2007年7月号のCD-ROMを使用しつつ、VMware Player 2.0 を入れて、元になる仮想マシンイメージをいじって、Vine Linux 4.1 の ISO イメージからインストールを行いました。

    まず旧マシンで仮想マシンを作り、インストールが終わってから新マシンで動かしたのですが、うまく行きました。ただ、VMware Tools はまだ使えない状態です。

    デフォルトの RunLevel を 3 にして、個人用 pukiwiki などを仮想マシンで動かすことにしました。

    仮想マシンが動いていてもメモリはほとんど食わないように見えるのですが、startx してもvmplayer.exe と vmware-vmx.exe のメモリ使用量が増えたように見えません。

    ユーザ権限以外のプロセスがメモリを食っているのかもしれません。。