花粉がー。
この前買ったクラウディアさんフィギュア(約19万円)1が届いた。あんまり期待してなかったので会社に持っていって自慢しようくらいにしか思ってなかったんだけど、届いてみると普通にできがよくてびっくりしたので家に飾っておくことにした。プライズマシンの景品みたいなもんだと思ってたが3000~4000円くらいで売っててもおかしくないレベルだった。4000円は言いすぎか?いずれにせよこいつはいいものだ……。
台座に154とか番号が入ってるのはシリアルナンバーだろうか。意外と出てないんだな……って高いし、丁度キャンペーン中にMSDN契約する人なんてそんなに居ないからそんなもんか。
PeerCastStationのリリースなんとか2月中に間に合った。肉の日がないなんて。なんで2月だけ短いんだろうな。31日ある月から奪ってくればいいのに。
リリースはしたけど、9日に勉強会で発表しないといけないし、イベントのサイトももう作らないとやばいし忙しいなぁ。仕事の忙しさはそこそこだからまあなんとかなるか。
おまけでMSDN Proが3年分ついてきた。高いおまけだ ↩
PeerCastStationの2月の変更点はユーザーにとって大きなところがなくて寂しい感じになりそうだったんだが、 ドキュメントをもっとまともな見た目にしたかったので入れてしまいたい。
HTMLを手でせっせと書くにはドキュメントは長すぎるのでmarkdownあたりで書いて静的CMSで生成したい。 うちのサイトはnanocを使ってる(日記以外)けど、これDB前提みたいになっててすごいめんどいんだよね。 ちょっと前に話題になった気がするjekyllとやらはどうなんだろう。
jekyllを調べてみると手軽になったnanoc的な感じだった。やった、これを使おう。 一行設定書くだけでmarkdownのエンジンにkramdownが使えるのも嬉しい。
jekyllのプラグイン機能でmarkdown中にdotとかplantumlとかぶちこんでSVGで埋め込んでみるとかやって遊んでみたが、ユーザドキュメントにはいらないなこれ……。 いいからせっせとドキュメントの中身書こう。
中身をだいたい書いてHTML UIに統合した。きっとほとんど読まれないだろうが、どこにあるかわからないドキュメントよりは読まれる可能性が高いし、何より見た目的にちゃんとしてるのは俺が嬉しい。 GUIからも呼び出せるようにしたけどこれは場所がわかりづらい。GUI自体が分かりづらいので次はここをがっつり変えてやろう。
jekyll良かったのでうちのサイトも近くこれに入れ替えたいなー。
ユーザーからあんまりわからんでかいところで設定ファイルの保存先とフォーマットを変更した。
今まではApplicationSettingsBaseを使った奴だったんだけど、いろいろと問題があるので自前で管理するようにした。 ApplicationSettingsBaseはアプリケーション設定にしか使っちゃだめな感じだなこれ。
問題ってのは一つは保存場所がはっきりしないこと。~/AppData/Local/PeerCastStation/~的なところに保存されるのはわかるんだけどはっきりと保存先のファイル名が取れないので削除とかできなくてめんどい。あとアセンブリに署名つけて強い名前つきにしないとファイル置いてある場所によってファイル名変わるとか。 これで困るのがファイルがなんらかの原因で破損するとどうしようもなくなること。 ファイルを消そうにもファイル名がプログラム的にわからないし、読み込んでリセットしようにも読み込めないらリセットもできない。詰んだ。
一つは保存できる物がはっきりしないこと。適当なクラスのインスタンスをぶちこむと勝手にXMLにシリアライズしてくれるんだけど、してくれたりしてくれなかったりする。失敗してる時はなんとも言わずに保存されないだけで、どうやったら保存されるのか判然としない。なんだよこれ……。
最後にもう一つ、なぜかSystem.Configurationへの参照を設定ファイルに書き込むことがある。常に書かれるのかと思ったけどそうでもないらしく、どうも複数アセンブリから一つの設定ファイルに書き込むと起きるような感じがあるなー。 参照を書き込む際には完全名で書き込まるちゃうので2.0.0.0みたいなバージョン番号も含まれる。そうすると.NET4で作ったファイルを.NET2で読み込もうとすると.NET4用のSystem.Configuration.dllが読み込めないのでエラーになってしまうのだ。逆はいけるから問題ないんだけどなー。 しかしこれが起きると.NET2ではもう読み込みもリセットもできないので破損みたいな扱いになってしまう。 そして破損したファイルはプログラム的に削除も復旧もできないのでやっぱり詰んだ。
ということでApplicationSettingsBaseを使ったユーザ設定の保存はやめることにした。アプリケーション設定はそのあたり問題ないし便利なので使うけど。
さてではどうやってユーザ設定を保存するか。といってもまあ適当なファイルに適当な形式で保存すればいいんだけど。
普通にXMLで保存することにしよう。なぜXMLかというと.NETで標準でシリアライズできるしいざとなればエディタでいじれるからだ。バイナリはめんどい。 SoapFormatter使うんだっけ?と調べてみたら今となってはWCF使えと書いてあったのでそっちを調べるとDataContractSerializerというのでXMLにシリアライズできるようだ。NetDataContractSerializerというのもあってこっちはシリアライズする型を明示しなくてもなんとかしてくれるようなので、楽そうなこいつを使おう。
保存先はまあ適当にEnvironment.GetFolderPath(SpecialFolder.ApplicationData)
で取ってくる。WindowsだとC:\Users\ユーザ名\AppData\Roaming
あたりが返ってくるのでここにPeerCastStationとでもくっつけてあげればよかろう。OSXのmonoでは~/.config
が返ってきたので同じくPeerCastStationをくっつけてあげれば使える。
これでできたー!と思ってたんだが、monoでは動かなくなってしまった。NetDataContractSerializerが実装されてないよ!と例外を上げまくる。うわああ確認せずに使ってしまった。調べるとDataContractSerializerは実装されてるがNetDataContractSerializerは実装されてないようだ。DataContractSerializerだと保存する型を明示しないといけないんだが、まあ保存する型を列挙するのはそれほど難しくなかったので上手いこと変更できた。C#で書くとマルチプラットフォームでロジック共有できる!と言ってもmonoでも動くようにと考えると使えるクラスをしっかり調べて選ばないとこういう穴に嵌められるわけです。
現状設定ファイルの整理はこんなところ。ファイル名をプログラムから明示するようにしたので外からいじったり削除したりもできるようになりました。ちょっとバージョンアップとかに不安があるのでそこは追って確認せねばなるまいが。
設定辺りはまだちょっとやりたいことがあって、ブラウザのabout:config
的な汎用の設定編集インターフェースが作りたい。設定を追加するたびにいちいちGUIを追加するのはユーザフレンドリではあるんだけど大変なので、ちょっとした機能をプラグインで追加したいというのが難しい。あとでちゃんと設定用のインターフェースを追加するにしても最初は最低限いじれる状態が簡単にできるとうれしいのでそういうのを作りたい。そんなに難しくないと思うのでやりたいね。GUIとHTML UIの両方に設定用のインターフェースを追加していくのって大変だからHTML UIからはいじれない設定とか出来ちゃってるんだよねー。
はじめまして。前からPeerCastStationを使用させてもらっています。<br>使っていて前から思っていたんですが、GUIって必要なんでしょうかね。今時ブラウザの無い環境はないと思いますし、PC使用者でブラウザに触らない人もいないでしょう。HTML UIもPeercastのころと比べて見やすくなっています。GUIより難しいとは思わないんですが、やはり初めて使う人にとってはGUIはあったほうがいいんでしょうかねえ。いかがお考えでしょう。
はう、ツッコミ見逃してたすみません。<br>GUIと両方メンテするのはしんどいのでHTML UIに一本化はできるならしたいですねぇ。<br>最初はGUI側から作り始めたのと、PeerCastがGUIとHTML UIの二本立てだったという理由でGUIがあるんですけど、HTML UIが思ったよりちゃんと作れたのでもはやGUIにこだわる理由はあまりないですね。<br>俺としても視聴はOSXのmonoでPeCaSt起動してWindowsマシンからHTML UIで操作してるくらいなのでGUIの必要性はあまり感じてないんですが、もうちょっと多くの意見が欲しいところです。