スキップしてメイン コンテンツに移動

投稿

8月, 2015の投稿を表示しています

P2P探訪 HetimaNetはDart:ioに対応しました。

hetimanetは、chrome用のsocket機能のみ提供していましたが、新たに、dart:ioに対応しました。hetimanetはdart用のライブラリです。

下記、機能に対応しています。

UDPTCPHttp ServerHttp ClientUPnP Portmap 


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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48import'package:hetimanet/hetimanet.dart'; import'package:hetimanet/hetimanet_dartio.dart'; //// main() async { HetiSocketBuilderDartIO builder =new HetiSocketBuilderDartIO(); UpnpPortMapHelper helper =new UpnpPortMapHelper(builder, "test"); //// get network interface List<HetiNetworkInterface> interfaces = await builder.getNetworkInterfaces(); for (HetiNetworkInterface i in interfaces) { print("<ni>${i.address}${i.prefixLength}${i.name}"); } //// portmapping try { StartGetExternalIp exip = await helper.startGetExternalIp(reuseRouter:true); print("<exip> ${exip.externalIp}"); } catch (e) { print("<exip ER…

P2P探訪 DHTを実装してみよう!! (6) おわり

GetPeersでInfoHashに対応するPeerを探す
GetPeersでPeerを探すAnnouncePeerでP2Pネットワーク上に値を保存する

DHTを動作させてみよう
DHTを動作させてみよう!!

「P2P探訪 DHTを実装してみよう!! 」をQiitaに投稿しました。
http://qiita.com/kyorohiro/items/2c60fd072f61d2dc52c4

これで、ひととおり、説明したつもりです。

今後書き直したり修正した内容は、「なぜなにTorrent」のほうに反映していく予定です。多分、いまある、文章は全て入れ替わるはず。

GitBook なぜなにTorrenthttps://www.gitbook.com/book/kyorohiro/doc_hetimatorrent/details
ソースhttps://github.com/kyorohiro/dart_hetimatorrent
REF - http://www.bittorrent.org/beps/bep_0005.html
http://pdos.csail.mit.edu/~petar/papers/maymounkov-kademlia-lncs.pdf

-------
Kyorohiro work

http://kyorohiro.strikingly.com

P2P探訪 DHTを実装してみよう!! (5) FindNodesを実装してみよう

P2P探訪 なぜなにTorrent

Torrent Client開発時に得たノウハウは、「なぜなにTorrent」にまとめています。

https://www.gitbook.com/book/kyorohiro/doc_hetimatorrent/details

-------
Kyorohiro work



http://kyorohiro.strikingly.com

P2P探訪 DHTを実装してみよう!! (4) FindNodesでネットワークを構築する

FindNodeでネットワークを構築するFindNodeクエリでネットワークを構築するレスポンスを受けたらRootingTableを更新する
Qiitaに移動しました。
http://qiita.com/kyorohiro/items/62347c69075bdcb6fdc2





GitBook なぜなにTorrenthttps://www.gitbook.com/book/kyorohiro/doc_hetimatorrent/details ソースhttps://github.com/kyorohiro/dart_hetimatorrent REF - http://www.bittorrent.org/beps/bep_0005.htmlhttp://pdos.csail.mit.edu/~petar/papers/maymounkov-kademlia-lncs.pdf
-------
Kyorohiro work

http://kyorohiro.strikingly.com

P2P探訪 DHTを実装してみよう!! (3) kBucket RootingTable の実装編

RootingTableを実装してみよう。KIdを実装するkBucketを実装するRootingTableを実装する
RootingTableを実装してみましょう。コードに落とす事で理解も深まります。

Qiitaに移動しました。http://qiita.com/kyorohiro/items/f685a905235f8a61ff8a



GitBook なぜなにTorrenthttps://www.gitbook.com/book/kyorohiro/doc_hetimatorrent/details
ソースhttps://github.com/kyorohiro/dart_hetimatorrent
REF - http://www.bittorrent.org/beps/bep_0005.html
http://pdos.csail.mit.edu/~petar/papers/maymounkov-kademlia-lncs.pdf

-------
Kyorohiro work

http://kyorohiro.strikingly.com

P2P探訪 DHTを実装してみよう!! (2) MainlineDHTはKademuliaのkBucketを利用している

DHTに対応する。MainlineDHTはKademuliaのkBucketを利用している
距離はXORkBucketでRootingTableを構築している
Qiitaに移動しました。http://qiita.com/kyorohiro/items/356a3aa993d9d635235f




GitBook なぜなにTorrenthttps://www.gitbook.com/book/kyorohiro/doc_hetimatorrent/details ソースhttps://github.com/kyorohiro/dart_hetimatorrent REF - http://www.bittorrent.org/beps/bep_0005.htmlhttp://pdos.csail.mit.edu/~petar/papers/maymounkov-kademlia-lncs.pdf ---------- Kyorohiro work kyorohiro.strikingly.com


P2P探訪 DHTを実装してみよう!! (1) Mainline DHTはTrackerなしでPeerを探すことができる。

GItbookで書いている内容を、見直す機会として、Bloggerに投稿してみた。

Mainline DHTはTrackerなしでPeerを探すことができる。
Trackerがなくてもデータを探せる六次の隔たりで実現している距離を定義してネットワークを構築する

本章では、Mainline DHT と呼ばれる機能の解説と実装をしていきます。

Qiitaに移動しました!!http://qiita.com/kyorohiro/items/356a3aa993d9d635235f




GitBook なぜなにTorrenthttps://www.gitbook.com/book/kyorohiro/doc_hetimatorrent/details ソースhttps://github.com/kyorohiro/dart_hetimatorrent REF - http://www.bittorrent.org/beps/bep_0005.htmlhttp://pdos.csail.mit.edu/~petar/papers/maymounkov-kademlia-lncs.pdf ---------- Kyorohiro work kyorohiro.strikingly.com

P2P探訪 HetimaTorrentClient ver 0.1.0 implements DHT with Pure Dartlang

HetimaTorrentClient が ver 0.1.0 で DHT に対応しました。 

残念ながら、 Pre-Alpha バージョンで、まだまだ不安定です。


1GB近くある Big Buck Bunny の動画を使って、DHT経由でダウンロードするテストをしています。 

[DHT] Torrent クライアントは通常、Trackerサーバーから他のTorrent クライアントを紹介してもらいます。しかし、この場合だと、もしも、Tracker Serverがダウンした場合は、うまく動作しません。しかし、 DHT をサポートしたクライアントは独自にP2Pネットワークを組み、Trackerサーバーの変わりをすることができます。
- bep5  http://www.bittorrent.org/beps/bep_0005.html - hetimatorrent
https://github.com/kyorohiro/dart_hetimatorrent
https://github.com/kyorohiro/dart_hetimatorrent/tree/master/example/HetimaTorrentClient

-------
Kyorohiro work

kyorohiro.strikingly.com

WegGL Trial with Dartlang draw rect

四角形を表示するサンプル




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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69import'dart:html'as html; import'dart:web_gl'as webgl; import'dart:typed_data'as data; void main() { var canvas =new html.CanvasElement(width:500, height:500); html.document.body.append(canvas); webgl.RenderingContext GL = canvas.getContext3d(); GL.clearColor(0.6, 0.2, 0.2, 1.0); GL.clear(webgl.RenderingContext.COLOR_BUFFER_BIT); // setup shader webgl.Shader vertexShader = loadShader(GL, webgl.RenderingContext.VERTEX_SHADER, "attribute vec3 vp;\n"+"void main() {\n"+" gl_Position = vec4(vp, 1.0);\n"+"}\n"); webgl.Shader fragmentShader = loadShader(GL, webgl.RenderingContext.FRAGMENT_SHADER, "precision mediump float;\n"+"void main() {\n"+" gl…

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 12a() { 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 16b() { TorrentFile torrentfile =null; // ..//create Torrent file Object from blob;// .. TrackerClient.createTrackerClient(new HetiSocket…

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
kyorohiro.strikingly.com

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 29a() { 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 nodeString 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 で書かれています。
今は、ch…

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ボタンを押してく…