2016-09-19

MnMn 0.20.0

MnMn がデブになりました。

WPF が標準提供してくれてる WebBrowser を置き換えたことにより 30 MB太りました。
ユーザー側から見たらわっけわかんねー改修なんだけど開発側として WebBrowser は何も考えずただ表示させるだけならいいんだけどそこから何かどうでもいいレベルの機能を実装する際に軽く数回は死ねるんです。

ブラウザ系のコントロールを色々試したんだけど、
  • CefSharp: ライブラリがexeと一緒になってサブディレクトリに入れる方法が分からなかった。
  • Awesomium: ライセンスの扱いがようわからんかった。
  • WebKit .NET: 更新されてない Web 通信プログラムとか怖くて無理。
どれも微妙だった。

なので最終的に GeckoFx に落ち着いた。
GeckoFx のレンダリングエンジンである Gecko は Firefox で十分に実績があるので安心感は半端ないがファイルサイズえらいことになるのが何とも微妙だけど WebBrowser 使い続けることに比べたらまだ許容できた。

で、本題はここから。

GeckoFx を使用するにあたり、Flash Player を MnMn としてどうするかを考えた。
というのも今のところ Flash Player は使用せずにやってきた。
FLV再生のためにプレイヤー部分を VLC で、SWFのために変換ツールとして Ffmpeg を用いて親の仇のごとく Flash Player を回避してきたんだけどストリーミング提供の動画やニコ生の対応が絶望的に難しい、まともに対応したら死ぬ。
なのでストリーミング・ニコ生は Flash Player を用いるというのが現実的な方法となる。
問題は Flash Player を持っていない(インストールしていない)環境をどうするかになった。
Flash Player 必須です、で終わりにするのが一番楽なんだけど私の開発環境自体に Flash Player 入ってないのでここまで来たら意地でも入れたくなかったので GeckoFx に頑張ってもらった。
(まぁ実際はテストや動作確認のために入れたり消したりを繰り返したけど)

GeckoFx(というよりGecko)は起動時にシステムにインストールされているプラグインをスキャンする。
その際に Flash Player があればそれを使用し、なければ自身のサブディレクトリからプラグインを検索する。
さて、この際にシステムにインストールされているプラグインを検索するかどうかは about:configplugin.scan.plid.all が決定する。
そして自身のサブディレクトリにプラグインさえ格納しておけばいい。
つまりは MnMn\lib\Firefox\plugins にプラグインぶち込んで plugin.scan.plid.all を False にしてやればシステム環境に依存せず特定の Flash Player が使えるって感じになる。
Adobe がセキュリティ向上や処理改善のためにアップデートするプラグインをわざわざ固定しちゃうことになるので脆弱性としてはダメダメちゃんだけどユーザーがユーザーの環境下で自分のストレージをどう使おうがまぁ大目に見てくれるんじゃないかな!

でですね、開発時なんか特にそうですけど開発側で環境を揃えたいってことが多々あるじゃないですか。
AさんとBさんで開発する際に互いの開発環境が足並みそろってないと結構悲惨ですよね。
なので一応開発時には Flash Player のバージョンを合わせられるようにしておいた。
開発する人は本体設定の「プラグインディレクトリを開発用に構築する」を押下すれば特定バージョンのプラグインを取得するようになっている。
あーでも再配布とかは禁止されてるから本当は使わないでね、私がデスクトップとノートで開発環境行き来する時やどうしても開発者間で足並みそろえる目的です。
もし構築機能を使う場合は何をするのか自分で理解して実行してください。

ていうか使わないでね!

0 件のコメント:

コメントを投稿