ポエニー

昨日寝る前にP2P掲示板について10分くらい考えた

考えてみた。いきなりずれるが、ひとつ驚いたことは、今まで何度もP2PのBBSについてどうしようかと考えてきたが、昨日考えた方法は、今までとは全く違う方法だった。 たぶん、少し前に読んだBitTorrentの説明が、自分の中にあった前提の1つ「すべては平等で…

2時間くらい作った

@ 機能とか見た目とか ポエムが書けるようになった(公開してWinny側からDLできるようになった) 設定が保存できるようになった @ 見えない事情 キャッシュのエンコーダ・デコーダ、アップローダ、ダウンローダをワーカータスクとかいうクラスの派生にして、…

初期ノード

初期ノードをどっからどういうふうに取得するべきか考え中。 Winnyの方法はあまりよくないと思うし、実装がまずくて現在あまりうまく動いていない気もする。今のところ考えているのは、初期ノード取得用のインターフェース(HTTPのPOSTデータかなにか)を決め…

ユーザインターフェース

ポエニーのGUIを明日には−なんて言って、もう1週間たつのだけど、今日やっと設定画面ができた。先週は全体的にダレ気味だったということもあるのだけど、なかなか進まないのは、私がGUIを作るのが苦手だし、自分でもダメだと思っているからかなと。 (さてや…

下流リンク接続ノードに上流リンク接続したい云々の話の続き

これは、Winnyがどう動くかに関係して、ポエニーで勝手に決めていい問題ではない(接続相手の挙動に期待するような動きにはできない)ので、あまり凝ったことはせず、現状のままにしとくことにした。 この問題は、かなりノード数が少なくなったときにしか発生…

50ノードによる接続実験

今日は二日酔いで、コーディングする気にならなかったので、意味ないかと思いながらもテキトウなテストした。そのテキトウなレポート。@ 起源 Windows GUIの実装は、前のソケットインタフェースだったUIタスクを、UIタスクの基底クラス(UITask)とソケットイ…

ポエニーのGUI

ポエニー用にWindowsのGUIを書いてみた。ねむ。最近は組込系ばかりなので、Windowを作ったのは1年半ぶりくらい。 もともと、これが面倒でウェブベースでやっていたのだけど、どうもウェブベースは嫌われる傾向があるようなので、簡単そうに見えたDFLを使って…

ポエニーファイル 妄想

ポエニーファイルというものを作る。 これはポエニーが特別視するファイル形式で、このファイルしか共有できないわけではないけど、推薦されている形式。*.poeny 構想的にはパックされたファイルシステム(構造化されたファイルたち)という位置づけ。 実装的…

アップロード 2

大きいファイルのアップロードテストを何度かしてみた。 大きい=70MB。 ポエニー → Winny と渡す実験。結果はOK。速度は遅いけど、Winny側で速度調整されている気がする。ローカルで試した結果、一番速いときで600KB/Sくらいだった。修正は、また例のGCがメ…

アップロード

キャッシュ周りが整ってきたので、思い切ってアップロード機能を実装。うまいこと、ポエムを配れています。 複数ブロックも大丈夫だったので、あとは帯域制限機能つけて、ダウンロード量とバランスをとればいいかなと思っています。 その前にダウンローダー…

20ノードでの接続実験

今までWinnyに甘えていて、ポエニー同士でネットワークを作れる自身がなかったので、20個の本物プログラムを起動して接続実験してみた結果のテキトウなレポート。@ やろうとした内容 1-20番の20ノードを起動する。このときポート番号以外の設定(回線速度な…

更新時間

Winnyは、自分とこのシステム時計より未来の更新時間を持つキーを削除してしまうみたい。ポエニーで、ファイルの更新時間をキャッシュ生成時刻にしていて、キャッシュ生成時刻=Dのstd.c.time(null)にしていたのですが、Dのstd.c.time(null)はUTCで返すような…

キャッシュ変換

キャッシュ形式のエンコーダとデコーダを書きました。 キャッシュ形式はSQLiteのDBファイルにWinnyのキャッシュブロック1つを1レコードとして保存する形式にしました。 ファイルごとにDBファイルを作るようにして、ヘッダだけは、管理用のインデックスDBへ…

通信速度と処理速度

通信のバグが直って、通信が活発になったのはいいのだけど、通信速度が中の処理速度より速すぎて、中の処理が間に合ってない・・。 キューにコマンドがたまりまくってる・・。 追記 スレッドのプライオリティで対応・・。

ウェブ

やっぱ、どーしても、ウェブがやりたい。

メーリングリスト

ポエニーをどんなソフトにするか、ずーと考えていた。 (名前からしてポエムを配るものっぽいけど、それだけだとおもろないなーと思ってて) んで、今日無理やり決定してしまおうと、超考えた末、メーリングリスト(ニュースグループ?)のようなものを作るこ…

コア と ユーザーインターフェース

いまのところcore.exeというWinnyネットワークの機能を持ったモジュール(ソケット経由で呼び出す関数セットのようなもの)と、それに繋がって検索命令や結果の表示などを行っているUI:ユーザインターフェース(今のところポエニー)に分かれている。 これは…

Non Blocking Socket で気をつけること

ダウンロード機能をテストしていたら、Winnyのコネクションクラスがバグっている事に気づいたので修正した。内容は、以下。 1コマンド受信の途中でタイムアウトが発生した場合に、そのままタイムアウト例外を投げているため、次の受信時にコマンドの変な位…

下流検索リンク繋がりっぱなし

前々から、そうじゃないかと思っていたのが、ポエニーのノード情報表示のところに、接続時間と通信速度を表示するようにして確信に変わった。 下流検索リンクが、ずーとつながりっぱなしになってる。 これでいいのか、いつかこっちから切断してやらなあかん…

poeny20060117

Winny2b 7.1互換プロトコルを持つソフト。 poeny20060117 実行形式とソースコードのセット。未だダウンロード/アップロード機能なしの検索とクラスタリングのみ。 やっと安定したかもしれないバージョン。 といっても、うちはエアーエッジでテストしているの…

メモリ使いすぎ 9

SQLiteを使うとCPU使用率がすごい・・・。

メモリ使いすぎ 10

今度こそ、この話は終了。 今度こそ、もうバグや課題はない。D言語も自称中級者くらいになった。最終的には、キーテーブルをSQLiteのテンポラリーテーブルに入れるようにして、そしたらCPU負荷が高すぎでブラウザなどが動かなくなったので、適当にディレイを…

メモリ使いすぎ 8

GCが動いてないっぽい件は、たぶんOK。 多くても50MB以内で動いている。(と今のところ見える)で、仕事から帰って疲れて冷静になった頭で考えると、そもそもレコード数が2万行を超えるかもしれないテーブルをがんばって全部メモリに入れようとしているのが…

メモリ使いすぎ 2

クエリ応答でmax値を計算するだけして、それを見ずにヒットするだけ全部キー情報を作って送っていた・・・。 前は大丈夫だったんだけど、年末に作り直したときのミス。これは結構影響してそう。

メモリ使いすぎ 2 〜謝罪〜

正直ね、GCがまじめに働いていないと思っていたよ。 だってね、メモリの管理をしなくてもいいってGCが言っているので、本当にしなかったら、どうみてもメモリリークしてます。 なんでね、もうD言語やめて、C++で書き直そうかと本気で考えたよ。 プログラムに…

メモリ使いすぎ 3

http://d.hatena.ne.jp/riesling/20060109/p1 一度拡張された領域は、縮小しないらしい。私が、GCを変だと思っていた原因のひとつに次のような現象ありました。 検索ヒットの数の多いキーワードで検索したときに、大量の検索結果データを作るのでごわーと使…

メモリ使いすぎ 4 〜 GCの単純なテスト 〜

試してみたよ。 import std.stdio; import std.gc; import std.random; import std.md5; import std.thread;int main() { debug(b1) { uint optval = 0; test1(&optval); } debug(b2) { uint optval = 1; test1(&optval); } debug(b3) { uint optval = 1; Th…

メモリ使いすぎ 5

タスクのベースクラスのポーズで自分で自分のポーズを呼び出した場合(ポエニーの場合はイベント待ち行列に並ぶとき)に前回のfullCollectから一定時間以上たっていたらfullCollectを呼ぶようにした。 かなりいい感じ。 キー数5000以上になっても使用メモリ…

メモリ使いすぎ 6

debug(b5) { uint optval1 = 0, optval2 = 1; Thread t1 = new Thread(&test1, &optval1); t1.start(); test1(&optval2); t1.wait(); } スレッドの親がfullCollectしていたら、大丈夫?

メモリ使いすぎ 7

メインの処理をループ内で呼び出す関数の中に全部入れて、何度か試した結果適切と思われる位置(関数内の処理の最後)にfullCollectをいれたところ、20MBを超えることがなくなった。 といっても、まだ1時間ほどしか動いてないけど。 今までは1時間後にはもの…