2009/11/13(金)正しい事
設定を記憶しておく機能について考えている。
一行一項目で設定項目と設定値を適当な区切り文字で区切った形式にして、設定ファイルはプログラムと同じフォルダに一つ、とすればお手軽簡単すぐ出来る。
でも、Windows Vista 以降でそれはあまりに無粋。実際の所は PC は一人一台で 1ユーザーアカウントの場合が大半だろうし、今の所いなさそうだけど SofTailを使うような人にとってはマルチユーザー環境に対する考慮なんて余計なお世話だろうけども。
でも、マルチユーザー環境を無視した上にプログラムと同じフォルダに設定ファイルを置く、というのはあまりに正しくない。
フリーウェアの多くが、ユーザーが好むから、という理由でそうなってるであろう事は理解しています。
そこで System.Configuration.ConfigurationManager を使って既存の形式の XML で記述、ユーザーごとの AppData フォルダに保存、が素性のいいプログラムだと思うし、そうする予定。でも「アンインストールはプログラムフォルダをゴミ箱にぽい」が好まれるんだろうなぁ、AppData フォルダに保存したら「得体の知れない場所に保存するなんて気持ち悪い」とさえ思われるんだろうなぁ、とも思う。ユーザーいないしやるけど。
アプリケーションの設定ファイルは AppData にあるのが普通ですよ、という話が一般ユーザー向けアプリケーションでも通じる時代になるといいねぇ。エンタープライズ向けアプリケーションではすでに普及してるみたいだけど。
作る人に対しても使う人に対しても Microsoft がもっと啓蒙して欲しい。
設定ファイルの読み書き、インストーラ、アップデート通知まで簡単にできる機能はあるんだから、後は啓蒙だけだと思う。
そんなことより、棒読みちゃんはプラグインのどれかで SofTail 相当のことをすでにやってないか、ということも気になる。ファイルプラグインとかないっすかね。
設定ファイルをどこに置くべきかをぐぐってみたら「むしろ何でプログラムフォルダ以外に置きたいの?」的な反論にあってるパターンが多すぎてびびった。ベテランらしき人でもそれが普通っぽい。これが文化の違いか。個人の設定ファイルはホームディレクトリに置くだろ?
2009/10/28(水)Windows7
UO は 2D も SA も動く。UOA も動く。落ちたりもしない。
互換性はかなり出来がいい。今の所、動かなかったアプリケーションはない。得体の知れないフリーウェアを多用していない、というのはあるけども。
ドライバもかなり対応が進んでいるようだ。
アプリケーションが 64bit 対応しているか、はさほど問題にならない。32bit アプリケーションはそのまま動く。32bit アプリ実行の互換性は超よくできてる。Linux や FreeBSD でアレコレやらないといけないことと比べて、やっぱり商用 OS はすごいわ、と思う。OS にとっては厄介な仕事であってもユーザーはそんなこと考えなくていい。
そういう意味では FreeBSD amd64 の 64bit 版 firefox で 32bit 版の Linux 版 Flash プラグインが動くっていうのは超すごいと思った。
アプリケーションそのものが動かなかったことはないが、アプリケーションのプラグインで動かないものはあった。DTM ソフトの VST, DXi プラグインの一部と foobar2000 のプラグインの一部。
どうやら DLL によっては 32bit アプリケーションから 32bit DLL を読む場合でも動かない場合があるっぽい。呼び出し規約とかの問題だろうか?ただの勘だけど。
Flash プラグインが 64bit 対応しないっつー文句をよく見かけるんだけど、俺が中の人ならすでに完成してても Windows8 まで出さない。Windows が標準で使うブラウザが 64bit になるまで出さない。64bit 対応しろって言ってるやつほど真っ先にハマりそうで超うざそうだから。
2009/10/27(火)SofTail .Net版
ならば GUI も Windows Form で書き直して SofTail .Net版にするか!と思いたった。
正直、やってみよう、と思った時にはちょっとワクワクした。
Visual Studio で Windows Form アプリケーションの雛形にしたがって作り、よくわからないのでイベントハンドラも IDE にお任せで生成させて...。とやったんだが、ヘッダの中に実装を書け、といわんばかりにヘッダファイルが開いた。なんの陰謀だよ、とそのヘッダを読んでみるとすでに自動生成されたコンストラクタがばっちりと「実装」されていた。
何を言ってるのかわからねーと思うが俺も何をされたのかわからなかっ(ry。
旧来どおりに GUI をリソースエディタで書いて、ウィンドウプロシージャを生でさわるっていうスタイルのままで行くことにしました。
2009/10/26(月)SofTail
SofTail
SofTailNet-1.0.1.2.zip (2015/06/06)SofTailNet-1.0.1.3.zip (2016/04/20)
MD5 (SofTailNet-1.0.1.2.zip) = 2f9e7f77ac0654dbe50cea8bc2be6367
MD5 (SofTailNet-1.0.1.3.zip) = 547fb48110a151d961ce0d8c76103b4b
棒読みちゃん用プラグイン
これは何?
ファイルの更新を見張って、追記された部分を SofTalk(通称ゆっくりさん) や棒読みちゃんに渡して再生するプログラムです。主に、UOSA クライアントのチャットログを音声再生するために作りました。
単にしゃべる tail としてもお使いいただけます。
UNIX には tail というファイルの末尾を表示するプログラムがあり、-f というオプションをつけるとファイルの追記分を継続して出力し続けるという機能があります。SofTail はこの出力を SofTalk に渡すような動作をします。よって、SofTalk + tail = SofTail としました。
使い方
SofTalk は付属していません。SofTalk からダウンロードしておいてください。SofTalkに複数の行を読ませた際に、読み上げる順序が入れ替わってしまうバグがあります。棒読みちゃんは 棒読みちゃんから。
.Net Framework 3.5 以上が必要です。Microsoft Update などで最新版をインストールして置いてください。
棒読みちゃんを使う場合は、再生開始前に棒読みちゃんを起動しておいてください。
起動すると以下のウィンドウが表示されます。
操作方法
ファイル読み上げさせるテキストファイルを指定します。「参照」ボタンで開きます。
文字コード
入力ファイルの文字コードを指定します。UOSA のチャットログは utf-16 です。
リストにない文字コードでも、Encoding クラス に記載されている文字コードを直接入力して指定することも可能です。
SofTalk
SofTalk を使う場合は SofTalk.exe の場所を指定します。こちらも「参照」ボタンが使えます。
音声合成ソフトウェア
どちらを使うか指定します。棒読みちゃんを使う場合はパスを指定する必要はありません。
※ 棒読みちゃんとSofTailを別々に起動するのが面倒、という要望には別の形でお応えする予定です。
UOSA chat.log の日付を省略する
UOSA の chat.log の行頭についている、[09/10/03][10:10:10] みたいな日付を省略して音声合成ソフトウェアに渡します。
Play
このボタンを押すと再生を開始します。指定されたテキストファイルが更新されると 音声合成ソフトウェアが内容を読み上げます。
Stop
再生を停止します。
Stop ボタンで再生を止めた後に再度 Play ボタンを押しても、停止中の内容は再生されません。
SofTail を終了しても SofTalk は終了しません。
動作環境
推奨環境は .Net Framework 3.5 SP1 が動作する環境 == Windows XP 以上です。動作確認した環境は Window7 64bit, Windows XP SP3 + .NetFramework3.5SP1です。
.NetFramework2.0 及び、Windows XP 以前の環境での動作は未確認です。
よくありそうな質問
Q. 棒読みちゃんだけでは足りないの?A. 棒読みちゃんに付属しているプラグインを見ると、内部では同じような事をしていそうですがユーザー指定のファイルを対象にしたプラグインはありませんね。そんなプラグインが追加されたらとっとと身を引きます。
Q. SofTalk が文章を読もうとする度に Windows セキュリティの警告が出ます。
A. SofTalk.exe のファイルのプロパティで ブロックを解除する を実行してみてください。
Q. 突然すごい勢いで喋り始めました
A. ファイルの末尾に追記されたのではなく、ファイルが"変更"された場合には頭から全部読むかもしれません。SofTail と音声合成ソフトを停止する他に道はありません。
Q. 再生中にグレイアウトしていない項目は変更できるってことですか?
A. 知りません。
Q. MacOSX で tail -f text.txt | saykana -f - を実行するのと何が違うんですか?
A. UNIX文化っていいですよね。
Q. このツールを使うことで EA に怒られませんか
A. SofTail は UO の情報を云々したり、ましてや UO に対してどうこうするものではないので安心してください。ていうか、単にテキストファイルをリアルタイムに読むだけのツールです。
Q. UOSA のチャットログはどこですか?
A. インストールディレクトリの logs\chat.log に置かれます。標準では C:\Program Files\Electronic Arts\Ultima Online Stygian Abyss\logs\chat.log です。
Q. UO2D クライアントのログは読み上げられませんか
A. 試していませんが、utf-16 として読めるかもしれないし、不正な utf-16 なので読めないかもしれません。
Q. UO2D クライアントのログをリアルタイムで読めませんか
A. 2D クライアントのジャーナルログ保存機能はリアルタイムではなく、かつ正しいテキストファイルではないので基本的には無理です。
2D クライアントのジャーナルをリアルタイムで読めるツールはあるので技術的には実現可能ですが、そういったツールの使用はグレーを通り越して完全に黒なので私は作りません。
既知の問題点
重大な問題があります。各機能の詳細な動作確認をしていない、という主に作っている人に起因する問題があります。おかしな動作があったらずばり言ってください。- Start, Stop を連打すると落ちることがある
- SofTalk と連携できるのか、0.9.7.2以降全然確認していない
- Harley Davidson に SofTail っていう車種があるらしい
SofTalk やログファイルのパスは記憶させたい一応実装- メッセージを指定して読み飛ばす機能があるといい
変更履歴
2016.04.20 ver1.0.1.3- Stopしてから再度Startしようとするとクラッシュする問題に対処
- ファイル名に、書式指定文字列を使用できるようになりました
- 文字コードの指定を、リストにないものも直接入力で指定できるように変更
- 一旦指定した文字コードは記憶されて、次回からはリストに表示されます
- [fix] SofTalk との連携が出来なくなっていた問題を修正
- [fix] 存在しないファイルを読む設定にした場合に、Stop ボタンを押しても動作が止まらない問題を修正
- 内部の処理を色々変更
- テキストファイルを吐き出すソフトウェアがファイルを排他ロックで開いている場合に、なるべく邪魔せず邪魔されず動くように変更
- ファイルを読むたびに開いては閉じ、権限エラーがあれば再試行したりするようにしました
- テストはしていますが、エラー処理が漏れていたらすみません
- 設定を記憶するようになりました
- Vista,7では %USERPROFILE%\appData\Local\SofTail に、XPでは %USERPROFILE%\Local Settings\Application Data\SofTail に保存されます
- アイコンを付けました/Aboutダイアログを変えました
- 落書きたのしー
- ビルドターゲットを .NetFramework3.5 から .NetFramework3.5ClientProfile に変更しました
- 対応環境が広がったという事になりますが、実質的には何も変わらないと思います
- .NetFramework2.0 での動作確認をやめました
- SofTalk.exe のパスを指定するための[参照]ボタンが有効にならないバグの修正
- 棒読みちゃんのバージョンアップに伴い、ライブラリを入れ替え
- 棒読みちゃん 0.1.10.0 に付属のBouyomiChanClient.csを使用しています
- 指定したテキストファイルが存在しない場合に不正終了する問題を修正
- 存在しない場合はエラーになるのではなく、ファイルが生成されるまで待つ
- 読み上げソフトに棒読みちゃんを選択した場合に、SofTalkのパスを指定する「参照」ボタンを無効化する
- デフォルトの値を、自分用のUOSA向けパラメータから変更して一般的と思われる値に変更
- 内部の処理をちょっと変更
- .NetFramework 2.0 で動かなくなっていたらごめんなさい
- 棒読みちゃんをライブラリ経由で使用するようになった
- 再生したままプログラムを閉じようとしたときに正常終了できない場合の処理をちゃんとした。
- 棒読みちゃんを利用できるようになった
- 修正: 再生したままプログラムを閉じようとすると正常終了できない場合があったのを修正
- C# + .Net Framework で作成して公開
- C++ Win32 API 版があった
2009/10/26(月)無料のセキュリティソフト
ニュースでみたのは一ヶ月ちょっと前だったか、MS が無料で使えるセキュリティソフトを公開した。
VirtualBox に入れて試してみようかと思う。
残念ながら(?)XP 以降の OS にしか対応していない。