土日で30時間くらい寝た。なんでこんなに眠いんだ。
俺が普段使ってるバージョン管理ソフトのmonotoneが、しばらく死にかけていた。
どうも5日間かそこら程、公式のサーバが止まってソースの同期ができないとかリポジトリブラウザが表示されないとかなっていたようだ。今は復活してるけど。
しかしまあ開発自体は非常に下火になってて、2年前に1.0が出てからリリースはさっぱりだし、1.0が出る前くらいから徐々に活動は減ってはいたんだよね……。 復活したリポジトリブラウザ見た感じだとここ1年でコミットされたのは数件だけだった。 昨年末くらいにそろそろリリースしないかい?と一瞬盛り上がったが一瞬だけだったし。
gitが出る前から使っててだいぶ思い入れはあるんだけど、いまとなっては他と比べて機能的に見劣りするところも多いし、 monotoneならではってところもほぼ無いし、なにより開発がほぼ止まってるというのは厳しいのでそろそろ乗り換え時か。 オープンソースなのでもちろん自分で開発ってことも当然できなくはないが、そこまでの思い入れはないし、他の物作りたいしな……。
といっても1.0が出てから2年もそれほど困らず使ってこれたわけだし1、いますぐ使えなくなるわけじゃないんだが、乗り換え先を検討する必要はあるね。
乗り換え先としてとりあえずfossilを検討中。monotone同様に1実行ファイルで動作してリポジトリも1ファイルにつっこまれる形式で手軽に使える2うえに(バージョン管理以外の)機能が充実しまくっているのが魅力的。開発も活発そうだしな。
少しずつ使ってみて問題なさそうならfossilに移行してみたい。
設定ファイルあたりをちょっと整理した。
PeerCastApplicationクラスに設定クラスのインスタンスを持たせる形にして、プラグインの起動時に渡せばよかろう……ってやろうとしたんだけど、設定使ってるのはGUIだけだったのでIUserInterfaceのStartメソッドにPeerCastApplicationが渡っていくだけで充分だった。
プラグインの作りも全体的にあんまりよくないな。Plugin属性がついてるクラスを検索してあったらそのクラスが実装しているインターフェースに応じて適当な場所に追加するようにしてたけど、設定を読み込んだりとかできなくてよくない。IUserInterfaceを実装してる場合は開始時にStartと終了時Stopメソッドを呼び出すようにしてるんだけど、プラグインは全部その形にした方が整理されてていい気がする。適当な場所にくっつけるのはプラグインのStartメソッド側でやってくれた方が自然だろう。と思ってそうしようとしたんだけど、かなり大掛りな変更になってしまうのでちょっと保留した。他に入れる物入れちゃってからにしよう。
ログ周りの設定がGUIに入ってるのをなんとかしたいね。設定は出力するレベルと出力先の選択かー。レベルはまあグローバルで保存してもいいけど、出力先はコンソールだったりGUIだったりファイルだったりといろいろあるから好きなTextWriterを追加しろということになってる。とはいっても実際使ってみると出力したい先なんてそんなにない。本当に使うようなのだけ事前定義しておいてLoggerクラス内で処理してしまおう。保存するのはどの出力先を使うかだけにしておけばよかろう。
Loggerの出力先としてFile、Debug、Console、UserInterfaceだけ定義しておいて、この組み合わせを設定できるようにした。あとはこれを保存するだけ。Fileはファイル名も別に持っておいて保存しよう。AddWriterメソッドで動的に出力先を追加できるようになっていたけど、これはUIくらいでしか使わんのでUserInterfaceが有効な時のみ追加された出力先にログを出すようにしておいた。だいぶすっきりしたわ。
GUIからアップデート関連も分離できるといいなぁとは思いつつ、アップデートはUIを表示する必要もあるのでちょっと難しいかなぁ。やるならアップデートのロジックだけ分離してGUIに通知と表示だけ入れる感じかな。上手く分離するのは難しそうだが……。
他にもいろいろ整理したいけどgithubからpull requestも来てるのでそれらのマージもしないといけないんだよなぁ。PeerCastStationに限ってはとにかく早くgitに移行しないと。そのあとfossilとの相互運用を試してみよう。
寝過ぎ!冬眠でもするのか!
できるならしたいわ