2015年8月6日木曜日

P2P探訪 About Hetima Torrent Tracker

dart製、hetimatorrent library は、Tracker Server と Tracker Client の機能をサポートしています。


support following spec
- bep0003
     http://www.bittorrent.org/beps/bep_0003.html
- bep0023
     http://www.bittorrent.org/beps/bep_0023.html

基本 Torrent Client は、Tracker Server を利用して、他のTorrent Clientをつがします。つまり、Torrent でデータを共有したい場合は、Tracker Server が必要になります。

hetimatorrent example: server code


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
a() {
  TrackerServer trackerServer = new TrackerServer(new HetiSocketBuilderChrome())
    ..address = "0.0.0.0"
    ..port = 6969;

  trackerServer.start().then((StartResult result) {});
  List<int> infoHash = new List.filled(20, 1);
  trackerServer.addInfoHash(infoHash);
  new Future.delayed(new Duration(minutes: 30)).then((_) {
    trackerServer.stop();
  });
}

hetimatorrent example: client code

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
b() {
  TorrentFile torrentfile = null;
  // ..
  //create Torrent file Object from blob;
  // ..
  
  
  TrackerClient.createTrackerClient(new HetiSocketBuilderChrome(), torrentfile).then((TrackerClient client) {
    client.downloaded = 0;
    client.uploaded = 0;
    client.event = TrackerClient.EVENT_STARTED;
    client.requestWithSupportRedirect().then((TrackerRequestResult result) {
      print("${result}");
    });
  });
}


Source

- hetimatorrent library 

- HetimaTorrentTracker large sample

- Chrome store


-------
kyorohiro work

2015年8月5日水曜日

WegGL Trial with Dartlang clear screen

Dartlang は快適な開発環境を持ちます。Dart x Eclipse は、自動補完機能は優秀です。なので、Dartlang で WebGL の学習を始めることにしました。

まずは、画面をクリアするサンプルを書いた。




import 'dart:html' as html;
import 'dart:web_gl' as gl;

void main() {
  var canvas = new html.CanvasElement(width: 500, height: 500);
  html.document.body.append(canvas);

  gl.RenderingContext GL = canvas.getContext3d();
  double r = 0.6;
  double g = 0.2;
  double b = 0.2;
  double a = 1.0;
  GL.clearColor(r, g, b, a);
  GL.clear(gl.RenderingContext.COLOR_BUFFER_BIT);
}


ソース

https://github.com/kyorohiro/dart_hetimagl/tree/master/web

-------
Kyorohiro work

P2P探訪 hetimatorrent で mainline dht を サポートしました。

hetimatorrent で mainline dht (bep5) を サポートしました。

--

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
a() {
  KNode node = new KNode(new HetiSocketBuilderChrome(), verbose: true);
  String localIp = "0.0.0.0";
  int localPort = 28080;
  //
  //
  node.start(ip: localIp, port: localPort).then((_) {
    node.onGetPeerValue.listen((KGetPeerValue v) {
      print("---onGetPeerValue ${v.ipAsString} ${v.port} ${v.infoHashAsString} ");
    });
  });

  //
  // initial node
  String initailNodeIp = "0.0.0.0";
  int initailNodePort = 38080;
  node.addBootringNode(initailNodeIp, initailNodePort);
  
  //
  // search target
  List<int> infoHash = new List.filled(20, 4);
  node.startSearchValue(new KId(infoHash), 18080, getPeerOnly: true);
  
  new Future.delayed(new Duration(minutes:30)).then((_){
    print(node.rootingtable.toInfo());
    return node.stop();
  });

}
--

hetimatorrent は名前の通り、torrentプロトコルでまデータの共有ができます。
pure dartlang で書かれています。
今は、chrome application のみサポートしていますが、今後拡張予定です。`


What is DHT?

すでにP2Pネットワークに参加しているNodeを紹介してもらうと、それを元に、P2Pネットワークへ参加します。数10秒後には、数十回の問い合わせで。P2Pネットワークからデータを発見できるようになります。

Source

- hetimatorrent
  https://github.com/kyorohiro/dart_hetimatorrent
- heitnanet
  https://github.com/kyorohiro/dart_hetimanet
- dht sample
  https://github.com/kyorohiro/dart_hetimatorrent/tree/master/example/TorrentDHT
- bep5
 http://www.bittorrent.org/beps/bep_0005.html
- Kademlia; A Peer-to-peer Information System Based on the XOR Metric.
 http://pdos.csail.mit.edu/~petar/papers/maymounkov-kademlia-lncs.pdf


-------
Kyorohiro work

2015年8月1日土曜日

Eclipse での Dart製 Chrome app の開発

Chrome app 開発用に, DartEditorからEclipseに移行しました

DartEditorの開発が止まったので、Eclipseに移行しました。選択肢として WebStormを使うことも検討したのですが、 WebStormでのDart製のChromeアプリの開発が面倒だったので、Eclipseを利用することにしました。

- 標準でChrome アプリ用のテンプレートが含まれていない
- 標準でmanifest.json を右クリックからの動作確認ができない

Eclipseならば、簡単につかえます。

 
 
 

インストールが不便

しかし、素直にEclipseのインストールが上手できなくて、結構苦労しました。Dartiumを認識させ方が不明。Eclipseが起動しなくなるとか。

軽くEclipseでの環境の設定方法について解説したいと思います。
 
 
 

EclipseをInstallしよう

eclipse を手に入れましょう。僕はJava Developers版を利用しました。をhttp://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/marsr

選んだ理由は、余計なものが入っていなさそうだから。
 
 
 

Dart plugin をインストールしよう

1. Menu:Help --> Install New software..
2. addボタンを押す。Add Repositoryダイアログが表示される。
3. Nameをdartrepo. Locationを"http://www.dartlang.org/eclipse/update/channels/stable/"にして、OKボタンを押す。
4. Work with をdaerreoにする。自動でそうなるはず。
5, 表示されたものを選択して、Nextボタン等をおして、後は指示に従って進めてください。

 
 

Dart SDK をインストール

Dart SDK はプラグインからダウンロードできます。
1. Menu:Windows --> Preferences 。Preferencesダイアログが表示される。
2. Dart-> SDK
3. Dart SDK のところの、Downloadボタンを押してください

※ Preference Dialogに、 "Install at C:.asfas/asdfas/asdf/dart-sdk"といった感じでパスが表示されています。ここにインストールされます。
 
 
 

Dariumをインストールする

Dartiumをインストールします。https://www.dartlang.org/tools/dartium/ で手に入ります。zip圧縮されているので、解凍してください、
Preference Dialogに表示されている、"Install a c://aaa/aa/chromium"で指定されたフォルダーのの直下に、chrome.exeがある状態にしてください。



PS

これで、完了です。今回試した環境は以下の通り
Microsoft windows surface pro2 (8G memory, windows8) 
 
DartEditorはインストールすれば直ぐに使えてお勧めだったんだけど、開発が停止してしまった。
Dart Teamが推しているWeb Stormは有料だし、デフォルトでChrome App開発機能がない。
僕は、Eclipseが良いと思っている。

 
 

-------
Kyorohiro work



2015年7月30日木曜日

Strikingly を利用してポートフォリオを作成しました。kyorohiro.strikingly.com

Strikingly を利用してポートフォリオを作成しました。

kyorohiro.strikingly.comで公開しています。kyorohiroが無職になってから、2〜3ヶ月経過しました。公開しているもの、未公開で粛々と進めているもの等色々ありますが、自プロジェクトが発散してしまいました。10〜20ほどまで増えました。

今更ですが、無職で自由に時間が使える期間も無制限にあるわけでもないことに、気がつきました。

なるたけ短い期間で成果物を公開して、世の中に何かしらの影響を与えていけるように、整理していきたいと考えています。

で、kyorohiro.strikingly.comに成果が出せそうな物を載せて、それに、労力をかけることにしました。
 
 
 
 

まずは、P2P関連のものだけまとめました

近々で、Outputがていたのは、Dart 向けのP2P関連のライブラリでした。とりあえず、プロジェクトごとにリンクだけ載せました。今は、ほぼリンクだけ、ゴールとかは書けてません。

 
 
 
 

学習内容もプロジェクト形式で公開します

ただ、今回、kyorohiro.strikingly.comにまとめるに当たって、気がいた事として、非公開のもので、私ひとりで行っているものは、あまり良い形でまとまってませんでした。

こなれていない分野のプログラムとかドキュメントとかxxxとかは、公開するのが、とても恥ずかしいのですが、P2P関連のものみたく、赤裸々に公開していくと良いかなぁ〜。と思いました。

なので、適当にプロジェクト名をつけて、ゴールを決めて、kyorohiro.strikingly.comで公開します。

よろしくお願いします。



2015年7月28日火曜日

P2P探訪 dart_hetimatorrent へ、DHT関連のコードを追加しました。

dart_hetimatorrent (https://github.com/kyorohiro/dart_hetimatorrent)へ、DHT関連のコードを追加しました。

やっぱり、DHT対応は必要!!

HetimaTorrentClientを、pre-AlphaからBeta相当へ格上げすべく、さまざまな作業をしていました。実環境で使用してみたちころ、Trackerサーバーが死んでるために、ダウンロードできない状況におちいる事がかなりありました。

しかし、このような場合でも、Bittorrentでは、ダウンロードが可能なことがありました。DHTが効果的に動作しているようです。

プリ実装しました。

実運用を考えると、HetimaTorrentClientでもDHT対応を実現すべきと判断しました。先週からコーディングを始めました。そして、プリ実装を終えました。シミュレーター上ではとりあえず動作しています。

ver 0.1.0として、来週公開予定です。


今後、HetimaTorrentClient に、組み込みながら性能を上げていく予定です。特に問題がなければ、HetinaTorrentClient ver 0.1.0として、DHTに対応したclientを今週末ないし、来週中には公開します。



https://chrome.google.com/webstore/detail/hetimatorrentclientpre-al/bepllifcfhpjoijdddiafgmclfhgjnfb


2015年7月16日木曜日

P2P探訪 P2Pファイル共有アプリ。 HetimaTorrentClient (pre-Alpha) ver 0.0.3 をリリースしました。

P2Pファイル共有アプリ。 HetimaTorrentClient (pre-Alpha) ver 0.0.3 をリリースしました。
https://chrome.google.com/webstore/detail/hetimatorrentclientpre-al/bepllifcfhpjoijdddiafgmclfhgjnfb

Dart製の Chrome App です。まだまだ不安定。今回は、Torrent ライブラリの部分も、Dartlang を用いて、フルスクラッチで書きました。 興味のある型は以下をご確認くだい。 ( https://github.com/kyorohiro/dart_hetimatorrent )
BEP 0003 ( http://www.bittorrent.org/beps/bep_0003.html) に準拠しています。もちろん、pre-Alpha版なので、まだまだ安定していません。安定版はもう少々お待ち下さい。

 

 
 
 
 

[PS]

- HetimaTorrentTracker とセットで利用してください

Torrent Clientは、データを配信する際に、Trackerサーバーが必要になります。hetima torrent library では、このサーバーアプリも用意しています。 名前をHetimaTorrentTrackerと言います。こちらも、Chrome Appです。



- ノウハウは「なぜなにトレント」を参照してください

Torrent Clientを作成した時の発見したことをチュートリアル形式で、ドキュメント化しています。P2Pアプリの作成について興味のある方はこちらも御覧ください。
(※ 書きかけです。)
当面は、gitbook版の方で更新していきますが、整形したものをpaboo版にも展開する予定です。









mbedtls dart の 開発を始めた web wasm ffi io flutter

C言語 で開発した機能を、Dart をターゲットとして、Web でも サーバーでも、そして Flutter  でも使えるようにしたい。 そこで、mbedtls の 暗号化の部分を Dart 向けのPackageを作りながら、 実現方法を試行錯誤する事にした。 dart...