投稿者: nishimotz

  • 1998年とニコニコ動画

    「あの仕事はむかし誰々がやった仕事の真似だ」みたいな話はよく出てきます。あまり好きではないのですが、あえて私もそういうスタンスであの「ニコニコ動画」について考察してみることにしました。

    1998年のはじめごろ、電話の自動応答サービスで音声を録音して、ウェブサーバからそれを聴取できる、というサービスを知り、そのころ私が主宰していたメーリングリストのメンバーたちと「どんな遊びに使えるのか」と試していました。その途中でこんなことに気づきました。

    ある人によって録音された音声を別の人が再生しながら、それに「うん」「そうだね」などとコメントをする。そのやりとりを録音して、さらに別の人に聞いてもらう。そうすると、なんとなく「時間と空間を超えて会話が成り立った」ような感じがしたのです。

    その「感じ」を追い求めて、私は「非同期音声会議」の研究・開発を始めました。

    この仕事については続きがあり、特許(特願2000-37349 特開2001-230773 会議システム)も出願したのですが、審査請求に至りませんでした。システムも継続運用するには至りませんでした。

    その後、やっぱり「ウェブのフォームを埋めたりメールで連絡するよりも音声の方が手っ取り早いなあ」と思うことはますます多くなる今日この頃。

    そして、私が1998年に発表した「時間と空間を超える疑似リアルタイム性」は「ニコニコ動画」の字幕機能として世に受けいられていることを思い、今こそ「非同期通信+音声入力」で面白いことができる&便利なものが作れるのではないかなあ、と思っています。

  • 国際会議への参加

    1日から12日まで出張し、フランスのパリとオーストリアのリンツで行われた国際会議に参加してきました。メール対応が滞ってしまったことなど、皆様にご迷惑をかけたことをお詫びします。発表内容はここ何年か東京女子大学と共同で行ってきた視覚障害者支援技術に関する研究でした(西本の発表リスト)

    Acoustics ’08 Paris では私はポスター発表で早口音声の知覚に関する報告をしたところ、du Poux 先生のグループの研究(文献など)を教えていただいたり、Univ. Washington の Richard Wright 先生に興味を持って聞いていただくなど、貴重な情報を得ました。

    ICCHP 2008 Linz は障害者支援技術に関する隔年の国際会議で、私が幹事をやっている福祉情報工学研究会に近い雰囲気でした。私は視覚障害者と対面朗読者の対話についての発表をして、座長を含む何人かの視覚障害者にも聞いていただきました(論文へのリンク)。発表者はヘッドセットをつけて音声をストリーミング配信。他には国際手話言語の通訳つきセッションもありました(ストリーミングのページへのリンク)

    予稿集は約1300ページで、支援技術の実践的な事例、プロジェクト紹介、各国の行政の取り組みなど幅広い内容です。擬人化エージェントによる高齢者や知的障害者の支援、視覚障害者のための音楽教育、といった発表もありました。

    様々な場面でフランス語やドイツ語がわからなくて不便な思いをしました。一方で、観光地や料理店などでは日本語の看板をちらほら見かけました。書店では日本のコミックがたくさん売られていました。もっと世界中のことを考えて仕事をしなくてはいけないなあと改めて感じました。

    以上、今後の活動や研究に行かしていきたいと思います。

    • [追記 2008-07-15] ICCHPの論文へのリンク(Springer)を追加しました。
  • C++Builder 2007 でのウィンドウメッセージ処理

    エンバカデロによる買収が決まったCodeGearですが、個人的には応援しています。

    Delphi は使いやすく、情報も豊富なのですが、私はとっくに Pascal よりも C++ に慣れてしまったので、できれば C++ Builder をメインに使いたいところです。

    Delphi の参考書や資料の多くは VCL について説明しているので、そのノウハウのかなりの部分は使えます。

    しかし C++ Builder に固有の話題についての情報はとても少ないのが現状です。

    Windowsプログラミング逆引きクロス大辞典

    Windowsプログラミング逆引きクロス大辞典

    「Windowsプログラミング逆引きクロス大辞典」にはTurbo DelphiとTurbo C++というかたちで、VB6 や .Net との比較がなされています。

    Turbo C++はC++Builderだと思って読むことができるので、CodeGear RAD Studio 2007を使う上で重宝しそうです。

    Delphi で「メッセージメソッド」と呼ばれている機能の実現方法が今日やっとわかりました。忘れないように書いておきます。

    mciSendString を使って mp3 ファイルを再生して、再生終了のメッセージを MCI から受け取る例です。

    VCLフォームアプリケーションにボタンをひとつ貼り付けて、以下のように記述。

    mmsystem.h をインクルードしないと MM_MCINOTIFY が未定義になります。

    C:\tone_a.mp3 を用意してボタンを押すと、音声再生が終了したらメッセージボックスが表示されます。

    //---------------------------------------------------------------------------
    // Unit1.h
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    //---------------------------------------------------------------------------
    // by nishimotz
    #include <mmsystem.h>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:	// IDE 管理のコンポーネント
    TButton *Button1;
    void __fastcall Button1Click(TObject *Sender);
    private:	// ユーザー宣言
    void __fastcall MMMCINotify(TMessage &Msg);
    BEGIN_MESSAGE_MAP
    VCL_MESSAGE_HANDLER(MM_MCINOTIFY, TMessage, MMMCINotify)
    END_MESSAGE_MAP(TForm);
    public:		// ユーザー宣言
    __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    
    //---------------------------------------------------------------------------
    // Unit1.cpp
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    mciSendString("open \"c:\\tone_a.mp3\" type Mpegvideo alias mp3", NULL, 0, 0);
    mciSendString("play mp3 notify", NULL, 0, Form1->Handle);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::MMMCINotify(TMessage &Msg)
    {
    ShowMessage("done.");
    mciSendString("close mp3", NULL, 0, 0);
    }
    

    END_MESSAGE_MAP(TForm) の後ろのセミコロンを忘れて、しばらくはまりました。

    VCL_MESSAGE_HANDLER に関する情報は RAD Studio のヘルプでも CodeGear のサイトでも見つけることができず、個人の方のウェブサイトを参考にさせていただきました。

  • 神戸アイライト協会見学会

    2008年5月31日(土)福祉情報工学研究会(電子情報通信学会SIG-WIT)では、NPO法人・神戸アイライト協会(兵庫県神戸市中央区)の視覚障害者通所施設およびIT支援施設の見学会を行いました。

    参加者は私を含めて5名。理事長の森さまをはじめ、多くの方に快くご対応いただいたことを感謝します。私は1月の島根での見学会に続いて、ここでも様々なことを学ばせていただき、たいへん貴重な時間になりました。

    以下、忘れないうちに私のメモを書き起こしてみました(文責は私にあります。誤りやお気づきの点がありましたらお知らせください):

    • この建物(中山記念会館)は1年前に改装された、視覚障害関連の6つの団体(NPO法人およびボランティア団体)の活動拠点「神戸ライトセンター」の建物。
    • 中山記念会館は「財団法人 中山視覚障害者福祉財団」の財団事務所でもある。
    • 明日は「第2回 神戸ライトセンターまつり」で多くの団体の関係者が集まるとのこと。

    神戸アイライト協会について。

    • 神戸アイライト協会さんは歩行訓練などの通所施設(アイライト新神戸)と、視覚障害者のPC利用支援施設「アイライトITファーム」を運営。他にも訪問サポート、社会参加支援、講習会の指導、イベント、ガイドボランティア養成など、さまざまな活動。
    • 特徴は「地域に密着した活動」「行政や特別支援学校では対応できない曖昧な(漠然とした?複雑な?)要求や悩みに関する相談や対応」。昨年度は500件の相談に対応。
    • 近いうちに仕事を作って就労支援をしたい。

    中山記念会館の各フロアの見学。

    • 「アイライトITファーム」では主に音声でのPC利用を指導。数人が個人指導を受けておられた。レベルはさまざま。講習会も実施している。
    • 視覚障害者のための便利グッズを紹介するコーナー。音声読み上げの時計や電卓、弱視者向けの文房具や調理器具、さまざまな白杖の見本も。
    • 音楽や手工芸などの教室。拡大ルーペでビーズ作品作りに取り組んでいる。晴眼者より器用な方もおられる、とのこと。
    • 神戸アイライト協会さん以外の、音訳ボランティア、点訳ボランティア、伴走者などの団体の活動場所も。さまざまな大きさの会議室、集会スペース、対面相談室など。

    質疑応答、意見交換など。

    • 理事長の森さんは目の病気になったことがきっかけで盲学校勤務。歩行訓練士の資格取得中に、日本ライトハウス(大阪)や京都ライトハウスのような施設がなく、訪問事業が神戸にないことを知る。1999年、自身で設立されることを決意。2年目からPC支援にも取り組む。
    • 視覚障害者のニーズは多岐にわたる。多様なニーズに1つの施設で対応できれば当事者に便利である。そのような考えから、中山財団と協力して神戸ライトセンターを開設。
    • この施設ができて、相談や歩行訓練のニーズは増えたが体制が追いつかない。スタッフを増やす努力をしている。
    • 研究者・技術者との連携は? 試作されたソフトウェアのモニター依頼はある。協力はできる。可能ならばモニター協力費など金銭的支援があれば、ありがたい。
    • 視覚障害者の外出支援をする地域組織。全国ネットワークがある。電子メールで申し込みができる。

    「アイライトITファーム」担当の方に同席していただき、視覚障害者のPC利用について伺う。

    • PCを購入した後で「最低限の設定」が自分でできなくて困る方が多い。3D視覚効果をオフにするなど。買ったあとで困ってやってくる方が多い。最低限のサポートをしてくれるお店で買うのがよい。
    • PCやソフトを購入する前に情報を得る場がない。
    • 企業で購入する場合は「助成を得ること」しか考えておらず、必要なものが足りない、ということも多い。例えばタイピング練習ソフトは視覚障害者には必須だが買われていない、など。
    • インターネット利用で最近お困りなのは画像認証。介助者が代行している。
    • PCがフリーズする頻度は昔も今もあまり変わらない。ただ諦めるのではなく、「開いているウィンドウの数だけでも読み上げられないか」など、何か情報を得るように指導している。
    • PC利用ニーズは多様。全盲でも写真を楽しむ方がおられる。名刺やはがきに写真を入れて印刷したい、など。プレゼン資料作成に使えるスクリーンリーダーは限られる。
    • 「ITファーム」では生活支援利用が中心なのでビジネス向けソフトの支援はあまり行われていない。
    • PCではないが、携帯電話(らくらくホン)の相談も時々ある。

    帰りに私は、

    • 「視覚障害被災者の10年 阪神・淡路大震災メモリアルイベントの記録」神戸アイライト協会・編(2005) ISBN4-86055-242-3

    を購入。私は先ほどまで東京に戻る新幹線の中で、この本を読んでいました。

    ゆうべメリケンパークで見た神戸港の震災の傷跡を思い出しました。

    私は1996年に京都に移ってから「1995年の震災をきっかけに人生が変わった」という方と何人も出会いました。そんな出会いがなかったら、私は「ウチコミくん」を開発することもなく、いまこうやって障害者支援に関わっていなかったと思います。

    これまでにも何度か神戸を訪れたことはあるのですが、今回やっと、私はこの街のことをまともに知る機会を得た、そんな気がします。

    神戸の街を少しだけ歩いていて、高層マンションやショッピングモールがあちこちに建ち並ぶ街を「きれいだなあ」「きれいになったんだなあ」と思いました。

    しかし森さんにその私の感想を言うと、森さんは「昔は高い建物がなかったから、今の方が汚くなったと思います」とおっしゃいました。

    その「高層ビルがあることを汚いと感じる感覚」にも、私には頷けるところがあります。

    偶然なのか、運命なのか、7月のWIT研究会は、やはり大きな地震を経験した「新潟」での開催です。

    ■追記(2008-06-02) 写真を下記「はてなフォトライフ」に登録しました。

    ■追記(2008-06-04) 神戸アイライト協会さまから御教示いただき、一部の記述を訂正しました。

  • 第42回WIT研究会

    明日から神戸大学で第42回福祉情報工学研究会(共催:音声研究会)です。

    あわせて、5月31日(土)11:00~12:30 に神戸アイライト協会様の視覚障害者通所施設およびIT支援施設の見学会を行います。視覚障害者支援の現状についてお話を伺う貴重な機会ですので奮ってご参加ください。

  • 日記の表示モード

    先日、はてな日記の設定に「表示モード」という項目があることに気づきました。

    「日記モード」から「日記モード・見出し別ページ」「ブログモード」に変更することがいつでもできます、と書かれていたので、変更してみたのですが、そうすると他の方からブックマークしていただいたり「はてなスター」をいただいたものが無効になってしまうことに気づき、約1日で「日記モード」に戻しました。

    私がモードを変えている間に「はてなスター」をつけてくださった方がおられるのですが、そんな事情でご迷惑をおかけしてしまったようです。ごめんなさい。

    たまたま査読の仕事を抱えているときに「査読マニュアル」の存在を思い出すことができ、感謝しています。。。

  • 分散バージョン管理の意義

    いくつかのシステムに Mercurial をインストールして使い方を勉強しつつ、なぜ「バージョン管理システムを使うのか」について改めて考えました。

    まず「バージョン管理システムはバックアップツールだ」という主張は一見わかりやすいのですが、どうも違和感があるので、さらに考えた末、以前から考えてきたこと(数年前にソフトバンクのCVS本に書いたこと)と重複するのですが

    • バージョン管理システムは「無駄なバックアップを安全に消去するツール」である
    • バージョン管理システムは「リファクタリングを安全に行うツール」である

    と思えてきました。

    まず「バックアップの消去」について説明したいと思います。

    Windows のユーティリティに undup という重複ファイル削除ソフトがあるらしいのですが、バージョン管理システムは「賢いundup」ではないかと思うのです。

    以前と比べてバックアップを取ることは簡単になりました。モバイルPCも安価になり手軽になり、複数のマシンにコピーして作業することも日常的になりました。USBメモリも外付けドライブもネットワークストレージも手軽に使えるようになり、ついあちこちに気軽にバックアップコピーを取ってしまいがちです。

    しかし、本当に難しいのは「バックアップを取ること」ではなく「バックアップを捨てること」ではないでしょうか? あちこちにばらまかれてしまった重複ファイルを安全に削除するためにはどうしたらいいでしょうか? 完全に同じファイルなら安全に消すことができますが、もし改変があるなら、それを保存するべきかどうかを簡単に判断できるでしょうか?

    消去すべきファイルは、重複ファイルだけではありません。

    不要なファイルを簡単に見分けるための工夫として、ここ数年、私はファイル名の付け方の規則として

    • 一時ファイルには、先頭文字がアンダースコア(_)で始まるファイル名をつける

    ということを教わって実践しています。しかし、いろいろなソフトウェアの事情があり、この規則を徹底できない場合があったとすると、「保存するべきファイルか、一時的なファイルであるか」という区別は、ファイルそのものに記憶させるのではなく、メタ情報として外部に保存する必要が出てきます。

    バージョン管理システムのリポジトリとはまず「バックアップをすべきファイルかどうかを表す属性情報である」と捉えてはどうでしょうか。重複ファイルも一時ファイルも簡単に判断できる手段を提供するのがバージョン管理システムだと思うのです。

    もう一つの「リファクタリングの道具としてのバージョン管理」については、すでに多くが語られていると思うのですが、「プログラムを、機能を変えずに、構造を改良する」という作業のためには、「確実かつ効率的に過去の状態を参照できる(元の状態に戻せる)」という作業環境が求められます。ファイル群を丸ごとコピーしてしまうと、効率的に差分を表示することが難しくなります。

    バックアップとリファクタリングは目的が違います。バックアップは物理的に別のデバイスに保存する必要があるため、ネットワークを介した通信機能は必要です。しかし、リファクタリングはネットワークから切断された状態でも行われるべき作業なので、リポジトリがローカルに存在しないのはとても不便です。

    このように考えてみると Mercurial の分散バージョン管理という仕組みは、昨今のコンピュータ利用の現状にふさわしい枠組みではないか、と思います。

    ロック・アンロックをベースにしたRCSが大人数での分散作業に向いていない、ということで、コピー・マージ方式を導入したCVSが数年前に広く普及しました。それと同時に「伽藍とバザール」のモデル比較が話題になり、CVSはバザール型のオープンソース開発にふさわしいツールである、と考えられた時代がありました。しかしいま振り返ると、CVSは「バザール開発のツール」というよりも「みんなで分担してひとつの大きなものを作る」ための共同作業ツールであったように思えます。

    しかし現実に求められている問題の多くは「みんながそれぞれ自分のための派生物を作る」ことであり、さらに「派生物の差分を取捨選択して共有する」ことだったりします。そのためには、みんなが別々にリポジトリを持つ必要があり、しかもリポジトリ同士でマージを行うメカニズムがやはり必要なのだろう、と思います。

  • Mercurial によるバージョン管理

    巷で話題の「分散」バージョン管理システム Mercurial を使ってみました。

    遠い昔にCVSの本を書いたときには「オープンソース」という言葉が世の中に広まりはじめたばかりでした。

    でも私の興味はオープンソースそのものではなくて「個人が安全にソフトウェアを開発する」あるいは「グループが効率的に共同作業をする」ということでした。CVSよりもSubversion(svn)の方が優れているらしい、とは聞き及びつつも、道具にこだわるよりも、何かを作ることのほうが大事だと思ってきました。

    最近やっと Eclipse 経由で(というよりも3rdRail経由で)Subversion を使うようになりましたが、Eclipse からいじっている限り大きな違いはなく、大きな感動もありませんでした。むしろ、日々のコミット作業のインタフェースよりもリポジトリのビューワーの方がよっぽど大事だと思うのに、cvsweb はどうなっちゃったんだろう、などと思いました。

    そんなことを思いながら、Mercurial を触りはじめて、逆に cvs/svn が「グループが効率的に共同作業をする」というところに重きを置きすぎて「めんどくさい」ツールになってしまったことに気づきました。ある状況で「CVS よりも RCS の方が適しているのでは?」と思ったこともあるのですが、かつて RCS が適していた場面をカバーしてくれる(そしてそれ以上のことを実現してくれる)のが Mercurial だと思います。

    バージョン管理システムを「これはバックアップツールの一種です」と説明している本やサイトも多いのですが、そもそも「バックアップ」と「バージョン管理」は分けて考えた方がいいのではないか、という気もしてきました。(例えば pdumpfs はよいバックアップツールだと思いますが、バージョン管理ツールだと言い張るのは無理ではないかと。。。)

    「個人が安全に開発する」というところを重視するなら「作業中のファイルをいったん import して checkout しなおす」という「謎の御点前」が不要なだけでも Mercurial はずいぶん手軽だなあ、と感じました。

    とはいえ、Mercurial においても”hg init” して “hg add” して “hg ci” しなくてはいけないので、手間の問題というよりも「安全な場所を決めてリポジトリを作る」という作業そのものの精神的な抵抗がないことのメリットなのかも知れませんが。

    もう一つ評価に値するのは、リポジトリのビューワーが内蔵されていることです。”hg serve” を実行して、ウェブブラウザで localhost:8080 を開けば、cvsweb ライクなインタフェースがすでに備わっている、ということがわかりました(ポート番号はオプションで変えられるとのこと)。

    そんなわけで、私がいま試している Mercurial 1.0 の Windows 版バイナリはこちらからどうぞ:

    Mercurial なのにコマンドが hg なのは「水銀」の元素記号だからだそうです。

    そして hg は Python で実装されているとのこと。Python は個人的にコーディングスタイルが好きではない(制御構造を可視化すること=プログラムを読みやすくすること、とは限らないですよね?)のですが、Google に限らずいたるところで重要な言語になってきたなあ、と思います。

  • CodeGear C++Builder の property

    気になったので CodeGear C++Builder 2007 で試してみました。

    // THoge.hpp
    #ifndef THogeHPP
    #define THogeHPP
    class THoge
    {
    private:
    int f_count;
    void set_count(int n);
    int get_count();
    public:
    THoge();
    ~THoge();
    void doSomething();
    // __property int count = {read = f_count, write = f_count};
    __property int count = {read = get_count, write = set_count};
    };
    #endif
    
    // THoge.cpp
    #include "THoge.hpp"
    THoge::THoge()
    {
    f_count = 0;
    }
    THoge::~THoge()
    {
    //
    }
    void THoge::doSomething()
    {
    f_count ++;
    }
    void THoge::set_count(int n)
    {
    f_count = n;
    }
    int THoge::get_count()
    {
    return f_count;
    }
    
    // Unit1.h
    // (omitted)
    private:	// ユーザー宣言
    THoge *hoge;
    // (omitted)
    
    // Unit1.cpp
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
    {
    hoge = new THoge();
    hoge->count = 100;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    hoge->doSomething();
    int c = hoge->count;
    AnsiString s;
    s.sprintf("hoge %d", c);
    Edit1->Text = s;
    }
    

    というようなものがちゃんと動きました。

    __property という予約語は自分で勝手に作ったクラスで使える、ということのようです。Visual C++ の CLI でも property が使えるそうですが、CodeGear だと .NET じゃない Win32 でこれが使えるわけですね。

    THoge クラスで予約語 __published: を使おうとしたらコンパイルエラーになったので、こちらは VCL 関連のクラスを継承していないとダメみたいです。

    CodeGear RAD Studio の Help にはほとんど書かれていない C++ の property 拡張ですが、ここに説明がありました:

  • GalateaTalk と ISTC の今後

    ISTC総会では音声認識、音声合成、顔画像合成の各グループの成果報告と次年度の目標なども伺いました。ISTCは情報処理学会の下で活動してきましたが、現在の計画では2008年度が最終年度となっています。

    私は Galatea Dialog Studio に加えて Linux 版の統合作業を担当していますが、統合作業のほとんどの部分は GalateaTalk の統合作業になっています。

    GalateaTalkは多くの構成要素から成り立っていて、それぞれの構成要素が独立した開発プロジェクトとしての側面を持っています。要素ごとにライセンスや配布許諾などの立場の違いもあります。

    そして各プロジェクトは、それ自身が一つの研究プロジェクトでもあり、研究プロジェクトとしてのミッションで開発方針を決めておられる場合もあります。

    結果的に「各パーツは公開されておりすべて入手可能だが、組み合わせてブラックボックス的に使うとなると手軽ではない」という事態になっているように感じます。

    最近話題になった「島根県CMS」はシステムの一部として GalateaTalk を組み込んでオープンソースプロジェクトとして配布をしておられます。バージョン 1.0.2 のソースを私が確認してみたところ、ある過去の段階での GalateaTalk(信号処理エンジン)とChasen(形態素解析結果の後処理モジュール)に、別途 debian のパッケージとしての chasen, ipadic, kakasi などを組み合わせて使用されていることがわかりました。現在 ISTC が配布している GalateaTalk の最新版とはかなり異なったシステムになっているわけです。

    こういった現状を考えると、ISTC があと1年で活動を終えてしまって、本当に大丈夫なのだろうか、という不安を感じます。

    久しぶりにワインバーグ「コンサルタントの道具箱」をめくっていたら

    • 「鉄道の逆説」サービスがひどいから、サービス向上の要求が拒否される
    • 「鉄道の逆逆説」サービスがよすぎると、評判が聞こえてこないため、提供側がサービスを取りやめることがある

    というのが目に入りました。ISTCのサービスはよすぎるとは決して言えないのですが、ひどいのかと言われると。。。

    ISTCの中にいると「成果がどう受け入れられているのか見えない」と感じる反面、音声認識や音声合成のフリーソフトに対するニーズはそれなりに高いとも感じています。最終年度のISTCでどんなことができるのか、いろいろ考えていきたいと思います。