ポエニーのフィルタ機能

改良ついでに、このフィルタ関連のまじめに実装する。
「フィルタ」という表現よりは、hookが妥当かもしれない。

ポエニーでは、4種類のフィルタを定義する。

1. 捏造ファイルフィルタ

これに登録されたキーは、キー受信時にキーの捏造カウンタをインクリメントする。
ユーザがファイルを選択し「捏造指定」するか、定義ファイルを読み込むことで登録する。
キーの捏造カウンタが0以上の場合は、検索結果で捏造警告付ファイルとして表示される。
捏造ファイルを他ユーザに知らせる目的で使用する。
登録、解除は自由に行える。

2. 無視フィルタ

これに登録されたファイルは、検索結果として表示されなくなる。
定義ファイルを読み込むことで登録するのと、一度ダウンロード完了したファイル、自分で捏造指定したファイルなどが自動で登録される。
このフィルタは、登録した個人の範囲で適用される。
登録、解除は自由に行える。

3. 拡散抑制フィルタ

これに登録された条件のキーを受信すると、そのキーを捨てるためキーの拡散が行われなくなる。
ユーザがファイルを選択し「拡散抑制指定」するか、定義ファイルを読み込むことで登録する。
このフィルタは、登録した個人の範囲で適用されるため、目的を達成するためには多くの協力者が必要になる。
意図せず流失したファイルなど、問題のあるファイルの拡散を抑制する目的で使用する。
登録、解除は自由に行える。

4. ダウンロードフィルタ

これに登録されたキーは、キー受信時にキーの捏造カウンタをデクリメントする。
捏造ファイル情報の捏造を抑制する目的だが、効果があるかは微妙。
ダウンロード登録と同時に登録され、ダウンロード完了すると解除される。
別の案として、ダウンロード登録と同時に登録され、捏造指定されると解除するというのもあるが、ユーザの操作によっては、本物の捏造ファイルを解除してしまう。

今のところ以上ような感じ。

  • 追記

通信プロトコルに関係する捏造カウンタに関しては、基本的にWinnyと同じにしないとダメですが、外に影響を与えないものに関して、好き勝手やる方向。

GUI作り直しの今の状況とか

満遍なく作りつつ、たまに大きくひかかってる。まだまだだけど、画面だけなので来週にはできそう。
とりあえず開発中のスクショとか説明。これがないだろ!ってのあればお願い。

まず検索。かなり途中。トリップの下にツールバーをつけて、フィルターのON/OFFなどつける予定。今は検索がどうにかできるレベル。
f:id:ultraist:20060602084101p:image:small

ファイルブラウザ。ダウンロードしたファイルを閲覧するビューワーにするという計画で、でも面倒なのでブラウザコントロールを埋め込んで、そのプラグインで対応しようというもの。そいういう意味ではGeckoを使うのが正解かもしれない。今のところで一番の問題は、DWTでコントロールのイベントが拾えない(TODO)こと。これはかなりやばげで、いまのところ使い物にならない可能性が高い。実質的な弊害としては、ページのタイトルを取得できない、リンク先が別ウィンドウで開くことがある、などがある。ウェブを見なければそう気にならない?。あとセキュリティ的なもの。お気に入りやRSSリーダーは、はてなへのリンク(ユーザが編集可能)という手抜き加減。p2を使えばアル意味で2ちゃんねるブラウザになる。このタブは、できるだけ他人だよりで、うまく見せようとういう考え。
ツリーの上には、ファイルのソートやフィルタオプションなどつける予定。あと、消したり出したりボタン。
f:id:ultraist:20060602084058p:image:small

ネットワークタブ。隣接ノードの表示など。基本的に完成していて、あとは文言をまじめに決める程度だと思ってる。ポートの設定などもここに持ってこようかと思ってる。設定を一箇所にまとめるのは、なんとなくオブジェクト指向じゃないような気がしてる。コックピットタブは無くなるかもしれない。
f:id:ultraist:20060602084100p:image:small
んで、ノード追加。シンプルながらこいつが一番まとも。3つの追加方法を用意していて、ウェブページのアドレスを指定するとページを解析して、初期ノードを抽出したりも可能。アドレスはリストに保存される。ただし、このときは、HTTPリクエスト(ヘッダー)にX-POENY-PORTとして、ポエニーのポート番号を送信する。これはCGIによっては、そのまま$ENV{REMOTE_ADDR}:$ENV{HTTP_X_POENY_PORT}でノード登録されるかもしれない。そういうリスクがある。それと、前々から気になっていた初期ノードに混じっているローカルIPアドレスを登録段階で弾けるようにしてる。
f:id:ultraist:20060602084059p:image:small

ノード暗号化は、とても普通。入力をリアルタイムにエンコードして、コピーボタンでコピー。
f:id:ultraist:20060602125939p:image:small

他は、全くできてない(基本機能にはあるので、主には画面だけだが)。一番迷っているのが、情報公開タブ。MHTMLや画像など手軽に編集して公開できたらなと思っているけど、なかなか、手が出せない・・。
クエイティブな活動に使えるようにしたいなーとか思ってる。

他、アイコン画像は、famfamfam.com: Homeのものを使わせてもらっている。メインのシステムアイコンは、変えるつもりだけど、他はこれを使わせてもらおうと思ってる。つくってやるよ!方いたらよろしくお願いしたいです。

方向としては、自宅データ転送サーバ(Winny仕様)を各自が立てて、それを検索ネットワークで動的に繋ぐ感じ。ってWinnyですけどね。結局、検索ネットワークさえ動的に作れば、ウェブサーバでもFTPでも同じことできるよなとか、今頃気づきました。んで、やっぱり、検索ネットワークを作るのが楽しそうと思いました。いろいろと応用ができそう。

DWTでMozillaコントロール

どうも、ポエニーで使う予定のIEのブラウザコントロールが気に入らなかったので、Mozilla ActiveX ProjectのコントロールをDWTから試してみた。

で、まぁ結果的にはダメです。

ダメな理由。

  1. パッケージがでかい(4MB)
  2. 英語
  3. プラグインを入れないとフラッシュや動画、PDFなどが見れない
  4. テキストファイル(SJIS)がデフォルトで文字化けする

よい理由

  1. きれい (個人的に)
  2. 軽い

Gecko好きな人にはよさそうだけど、一般ユーザ向きじゃないな・・・と。
おとなしくIEでいくことにします。

とりあえず、DWT Thin Browser Exampleの中身をMozillaにしてみた図。
f:id:ultraist:20060520082701p:image:small

そう変わんない。


//site = new OleControlSite(frame, DWT.NONE, "Shell.Explorer");
site = new OleControlSite(frame, DWT.NONE, "Mozilla.Browser.1");

  • 以下追記
  • 化ける

デフォルトで化けるのは、prefs.jsへ


user_pref("intl.charset.default", "Shift_JIS");

を追加するだけで、よくなる。
また、URLとして、「about:config」を渡すとさまざまな設定画面が出るもよう。

  • でかい

Gecko Runtime Environmentというものがあるもよう。
でも、5MB。組み込むブラウザにくっつけていいとか。
どこで、ダウンロードするか分からなかったが、こことかにインストーラーあるもよう。
試した感じ、ブラウザとしては動く。プラグインが使えないようでよく分からない。
about:configや、about:pluginsが無反応。この辺りの機能は含まれていないみたい。

  • 英語

日本語パッチがある。

導入が面倒なことになりそうなので、今回はパス。

  • イベント

DWTのOLEイベントが未完成ということで、作ってしまおうと思ったが、ぜんぜんわからね。

設定をDBへ

画面の設定度など、これから設定項目増えくるので、設定ファイルを分割するかしないとなと思っていたんだけど、SQLiteをつかっているのだから、設定は全部DBの中へ入れればいいと思った。
手で編集できなくなるけども、アプリケーションで対応するし、SQLiteCCもあるし。

重い件

ソケットのポーリングでタイムアウトしたときに例外で戻っているから重い。
シミュレータを作ってみたときに、ここをNULLで返るようにしただけで、同時に描画処理できるノード数が劇的に変わったので、たぶん大きな原因。

  • 他まとめ
  • 各スレッドでのGCの明示的呼び出し

どうにかならんものか。

  • CacheHeader(キャッシュ→キー)のビットマップデータが無駄にでかい(4KBもある)

はじめは希望を持っていたら、8GB分くらい確保しているが実際は2GB間でしか使わないので、1/4にできる。
キャッシュ数が1000で、4MB以上になるのでけっこうでかい。

  1. 定期なローカルキャッシュ読み出し

短い間隔で一度に全部読み込んでいるので、ランダムに1/4(適当)ずつで読み込むとか。

GUIをまじめに作ってみています

テキトウなGUIをどうにかしろという意見が前々からあって、気になっていたので、今日から作り直してみています。
GUIをきちんと作ろうと思ったのは、Joel on Software - 氷山の秘密、明らかにを読んだことも影響しています。GUIくらいすぐ作るよ!と。
ついでに、今後のソフトためにGUI自体とDWTのお勉強と、最近はソフトの位置づけなんかも考えたりしていて、最高なのは、ブラウザに取って代わることだと思ったので、正直ブラウザは無理とは分かりつつも、ソフト自体にタブブラウザを組み込んでみました。中身IEですが、ちょっと本格的に作ってみようとか思っています。
ダウンロードフォルダ内のテキストやFlashや画像、動画などブラウザで表示できるものはソフト上から見れるので、わざわざダウンロードフォルダを開いて云々する必要がありません。その他、普通のウェブも見れます。個人用として、はてなツールバーを組み込みで作ってみたりもしています…。
DWTのブラウザコントロールがまだ途中のようで、「進む」「戻る」やタブのタイトルがきわめて怪しいです(backとforwardは、無理やり使えるようにしたが…)。
DWTが完成しないから遅れているという、予想された言い訳を持っています。

f:id:ultraist:20060507082544p:image:h274

それは自動バージョンアップ機能ではなくバグです

ポエニーは、ビルド日付をバージョンとしていて、タイトルにバージョンとして日付を表示していましたが、いつからか毎日バージョンが更新されるバグが入りました。

簡単にいうと、ビルド日時定数を使わなければならないところを、システム日時を取得して、それをバージョン表示しているわけです。

超くだらん・・・。