Parallels上のWindows XP SP2だと全然落ちないけれど,実機だと落ちる模様.
うーん,これじゃ,デバッグできない.
日曜日, 6月 10, 2007
IPv4アドレスは枯渇していないのか?
IPアドレスは枯渇していない
現状として,これだけNATだらけの社会でいわれても,あまり納得がいかない.
タイトルは,「理論上IPv4アドレスは枯渇していない」の誤りなのでは.
まぁ,なんとかしてくれ!NAT!
と,P2Pソフトウェアを作っていて思うので,アドレス再分配か,All IPv6化ができればとても幸せなのですけどね.
どちらも,机上の空論で終わって欲しくないものです.
僕もWIDEメンバーの端くれなので,IPv6はP2P@iでも対応したいところです.
対応するにしても,現在のIPv6の普及を見る限り,たぶん,仮想IPネットワークの方からだけど・・・
しかし,おそらく,IPv6なネットワークを即座に構築できるようになれば,IPv6アプリケーションの普及にも役立つのではないかと思う.
現状として,これだけNATだらけの社会でいわれても,あまり納得がいかない.
タイトルは,「理論上IPv4アドレスは枯渇していない」の誤りなのでは.
まぁ,なんとかしてくれ!NAT!
と,P2Pソフトウェアを作っていて思うので,アドレス再分配か,All IPv6化ができればとても幸せなのですけどね.
どちらも,机上の空論で終わって欲しくないものです.
僕もWIDEメンバーの端くれなので,IPv6はP2P@iでも対応したいところです.
対応するにしても,現在のIPv6の普及を見る限り,たぶん,仮想IPネットワークの方からだけど・・・
しかし,おそらく,IPv6なネットワークを即座に構築できるようになれば,IPv6アプリケーションの普及にも役立つのではないかと思う.
水曜日, 6月 06, 2007
安心できる社会
最近,安心してくらせる社会を,などと囁かれることが多い.
それは,インターネットの世界でも例外ではなく,安心して利用できるインターネットの実現に向けて,などといわれる.
しかし,安心,安心,と謳っている割にいっこうに世の中が安心できる世の中になっているとは考えられない.
それでは,この「安心な世界を!」と言うフレーズを,声高らかに言っている人は誰なのだろうか?
じつのところ,こういった人たちは,セキュリティや防衛の人々な気がする.
この人たち,つまり,安心を売る人たちは,それを売って商売をしているわけで,実際,みんなに安心してもらっては困ってしまうのだ.
例えば,
「現在の御社は,セキュリティ管理が非常に甘くなっております」
「我が社のセキュリティソフトを利用すれば,安心してインターネットに接続できます」
などなど,安心を売る人たちは,いかに現状が安心できない社会かを述べて,利益を上げている.
このような人たちが,うようよでてきて,毎度毎度きかされると,現在の社会がとても不安定で,ひどいものであるという気になってしまう.
しかし,一言断っておくと,セキュリティを生業としている人達の中にも,真面目に社会インフラのセーフティネットとしての,セキュリティに関する技術開発や研究を行っている人もいるにはいる.
しかしながら,消防署の方から来ました,などと言うあやしい論法で安心を売っている人も確実に存在する.
話は変わるが,アメリカの国防費は,全世界でトップであるばかりではなく,国防費全世界2位日本との差は7.1倍もある.
http://www.number27.org/work/maps/weapons.jpg
日本も,アメリカも,こんなに国防費を使っているのに,安心できる社会を!と叫んでいるのは,ちょっと滑稽な感じがする.
一体全体,どれだけ国防費をつぎ込めば,安心できる社会になるのだろう.
安心を得ようとして,ますます不安を煽っては居ないのだろうか?
安心を見つけるために,現在どれだけ安心でないかを探してしまっては居ないのだろうか?
そして,安心を売っている人に教えて欲しい,
「いったい,いつになったら,安心できる社会とやらが訪れるのか?」
を.
それは,インターネットの世界でも例外ではなく,安心して利用できるインターネットの実現に向けて,などといわれる.
しかし,安心,安心,と謳っている割にいっこうに世の中が安心できる世の中になっているとは考えられない.
それでは,この「安心な世界を!」と言うフレーズを,声高らかに言っている人は誰なのだろうか?
じつのところ,こういった人たちは,セキュリティや防衛の人々な気がする.
この人たち,つまり,安心を売る人たちは,それを売って商売をしているわけで,実際,みんなに安心してもらっては困ってしまうのだ.
例えば,
「現在の御社は,セキュリティ管理が非常に甘くなっております」
「我が社のセキュリティソフトを利用すれば,安心してインターネットに接続できます」
などなど,安心を売る人たちは,いかに現状が安心できない社会かを述べて,利益を上げている.
このような人たちが,うようよでてきて,毎度毎度きかされると,現在の社会がとても不安定で,ひどいものであるという気になってしまう.
しかし,一言断っておくと,セキュリティを生業としている人達の中にも,真面目に社会インフラのセーフティネットとしての,セキュリティに関する技術開発や研究を行っている人もいるにはいる.
しかしながら,消防署の方から来ました,などと言うあやしい論法で安心を売っている人も確実に存在する.
話は変わるが,アメリカの国防費は,全世界でトップであるばかりではなく,国防費全世界2位日本との差は7.1倍もある.
http://www.number27.org/work/maps/weapons.jpg
日本も,アメリカも,こんなに国防費を使っているのに,安心できる社会を!と叫んでいるのは,ちょっと滑稽な感じがする.
一体全体,どれだけ国防費をつぎ込めば,安心できる社会になるのだろう.
安心を得ようとして,ますます不安を煽っては居ないのだろうか?
安心を見つけるために,現在どれだけ安心でないかを探してしまっては居ないのだろうか?
そして,安心を売っている人に教えて欲しい,
「いったい,いつになったら,安心できる社会とやらが訪れるのか?」
を.
火曜日, 6月 05, 2007
UPnP NAT Traversal
世の中の大半は,NATで接続しているという,驚愕の事実が発覚したため,至急UPnP NAT Traversal対応版を作成中.
次のリリース0.6では,UPnP対応となる予定.
しかし,このUPnPってやつは,XMLをパースしなければ行けなかったり,ひたすら面倒くさい.
そんなわけで,もう,ライブラリ使ってしまおう.
とりあえず,Linuxは,
http://upnp.sourceforge.net/
Windowsは,
http://www.codeproject.com/internet/PortForward.asp
でいけるかなぁ〜
このページも役に立ちそう.
http://www.bosuke.mine.nu/neta/upnp.shtml
はやく,IPv6オンリーの世界になぁれ!
次のリリース0.6では,UPnP対応となる予定.
しかし,このUPnPってやつは,XMLをパースしなければ行けなかったり,ひたすら面倒くさい.
そんなわけで,もう,ライブラリ使ってしまおう.
とりあえず,Linuxは,
http://upnp.sourceforge.net/
Windowsは,
http://www.codeproject.com/internet/PortForward.asp
でいけるかなぁ〜
このページも役に立ちそう.
http://www.bosuke.mine.nu/neta/upnp.shtml
はやく,IPv6オンリーの世界になぁれ!
火曜日, 5月 29, 2007
月曜日, 5月 28, 2007
アフォーダンス
部屋に入って,ボールと椅子があったとき,普通,ボールをけっ飛ばして遊んで,椅子に腰掛ける.
誰も,椅子をけっ飛ばして,ボールに腰掛けようとはしない.
これは,椅子自身が,座るものだということを,人間に思い起こさせ,ボールはけっ飛ばすものだと人に訴えかけているからである.
男子トイレが青色のマークで,女性トイレが赤色のマークなのも,過去の経験などを人に思い起こさせるためだと考えられる.
すなわち,そのマーク自身について,人間が新たに知るべき情報を極力減らすことが出来るので,ユーザは迷うことなくトイレに駆け込むことが出来る.
もしも,引き戸にドアノブがついていたら,とんでもなく使いづらくなってしまう.
これは,過去の経験との相違があり,さらに,その扉について,人間が新たに学習しないという負担を課してしまうためだと考えられる.
学習は楽しいものであるが,主題や目的と外れた学習は,人間にとって苦痛であるのだ.
オブジェクトがどうすればいいか物語らなければ,よいUIとは言えない.
機能が豊富であれば良いように思われるけれど,豊富な機能を学習しなければ,使えないのはあまりよろしくない.
なんでも出来ます,とうたわれているものが,実は何も出来ないのはよくあること.
昔はパソコンさえあれば,何でも出来ますと言われていたけれど,最近は,ネット接続や,マルチメディアなどに的を絞って宣伝している.
何でも出来ますは,実はユーザにとっては何も出来ないことだったのだ.
以上の考察より,
「何ができるのか?」
を,明確にした上で,
「どうすれば.その出来ることを実現できるのか?」
を直感的に人間に分からせるようなインターフェースを実現できると,人間に優しいソフトウェアが出来上がるのではないかと思う.
誰も,椅子をけっ飛ばして,ボールに腰掛けようとはしない.
これは,椅子自身が,座るものだということを,人間に思い起こさせ,ボールはけっ飛ばすものだと人に訴えかけているからである.
男子トイレが青色のマークで,女性トイレが赤色のマークなのも,過去の経験などを人に思い起こさせるためだと考えられる.
すなわち,そのマーク自身について,人間が新たに知るべき情報を極力減らすことが出来るので,ユーザは迷うことなくトイレに駆け込むことが出来る.
もしも,引き戸にドアノブがついていたら,とんでもなく使いづらくなってしまう.
これは,過去の経験との相違があり,さらに,その扉について,人間が新たに学習しないという負担を課してしまうためだと考えられる.
学習は楽しいものであるが,主題や目的と外れた学習は,人間にとって苦痛であるのだ.
オブジェクトがどうすればいいか物語らなければ,よいUIとは言えない.
機能が豊富であれば良いように思われるけれど,豊富な機能を学習しなければ,使えないのはあまりよろしくない.
なんでも出来ます,とうたわれているものが,実は何も出来ないのはよくあること.
昔はパソコンさえあれば,何でも出来ますと言われていたけれど,最近は,ネット接続や,マルチメディアなどに的を絞って宣伝している.
何でも出来ますは,実はユーザにとっては何も出来ないことだったのだ.
以上の考察より,
「何ができるのか?」
を,明確にした上で,
「どうすれば.その出来ることを実現できるのか?」
を直感的に人間に分からせるようなインターフェースを実現できると,人間に優しいソフトウェアが出来上がるのではないかと思う.
水曜日, 5月 23, 2007
for Windows版のメモ
libsymphony
ipv4_peer.hpp
OpenBSD製のtree.hを変更して,テンプレートクラスに埋め込んだファイルをVC++ 2005で編集していると,落ちる.
tree.hを一端,別の場所に移動してから編集すれば大丈夫っぽい?
- sym_dht.hpp
- sym_util.hpp
ipv4_peer.hpp
OpenBSD製のtree.hを変更して,テンプレートクラスに埋め込んだファイルをVC++ 2005で編集していると,落ちる.
tree.hを一端,別の場所に移動してから編集すれば大丈夫っぽい?
日曜日, 5月 20, 2007
Windows版
Windows版の作成を開始しました.
Windows版は,
を利用.
Windows版は,
- pthreads for Win32 (http://sourceware.org/pthreads-win32/)
- tap Win32 by OpenVPN (http://openvpn.net/)
を利用.
金曜日, 3月 23, 2007
続 bonjour by Java
次は、Bonjourを使ってローカルリンク上にサービスを通知してみます。
今回通知するサービスは、_testとし、このサービスはTCPの6666番ポートを使っていると仮定します。
さらに、サービスを行っているノードを識別するインスタンス名を_QuBEとします。
すなわち、_QuBE._test._tcp.localとしてサービスを通知します。
このプログラムは以下のようになります。
DNSSD.register(name, "_test._tcp", port, this); が、サービスを通知、登録するための関数になります。
ここでは、nameがサービスのインスタンス名、"_test._tcp"がサービスタイプ、portがそのサービスを提供しているポート番号となります。
最後の引数、thisでは、リスナクラスを登録する必要があり、このクラスはRegisterListenerインターフェースをインプリメントしていなければいけません。
RegisterListenerインターフェースをインプリメントするには、serviceRegistered関数と、operationFailed関数を定義する必要があります。
これらは、サービスの登録が成功したとき、もしくは失敗したときに呼び出されます。
それでは、このプログラムを実行してみます。
実行する前に、dns-sdをターミナルで動かしておきます
この後、上記プログラムを実行すると、dns-sdでは、以下のようなメッセージが表示されます。
また、プログラムの実行結果は以下のようになります。
今回通知するサービスは、_testとし、このサービスはTCPの6666番ポートを使っていると仮定します。
さらに、サービスを行っているノードを識別するインスタンス名を_QuBEとします。
すなわち、_QuBE._test._tcp.localとしてサービスを通知します。
このプログラムは以下のようになります。
import com.apple.dnssd.*;
public class Main implements RegisterListener {
DNSSDRegistration r;
public Main() {
}
public void serviceRegistered(DNSSDRegistration registration, int flags,
String serviceName, String regType, String domain) {
System.out.println("serviceName = " + serviceName);
System.out.println("regType = " + regType);
System.out.println("domain = " + domain);
}
public void operationFailed(DNSSDService service, int errorCode) {
}
public void register(String name, int port) {
try {
r = DNSSD.register(name, "_test._tcp", port, this);
} catch (Exception e){
e.printStackTrace();
System.exit(-1);
}
}
public static void main(String[] args) {
Main m = new Main();
m.register("QuBE", 6666);
for (;;) {
try {
Thread.sleep(100);
} catch (Exception e){
e.printStackTrace();
System.exit(-1);
}
}
}
}
DNSSD.register(name, "_test._tcp", port, this); が、サービスを通知、登録するための関数になります。
ここでは、nameがサービスのインスタンス名、"_test._tcp"がサービスタイプ、portがそのサービスを提供しているポート番号となります。
最後の引数、thisでは、リスナクラスを登録する必要があり、このクラスはRegisterListenerインターフェースをインプリメントしていなければいけません。
RegisterListenerインターフェースをインプリメントするには、serviceRegistered関数と、operationFailed関数を定義する必要があります。
これらは、サービスの登録が成功したとき、もしくは失敗したときに呼び出されます。
それでは、このプログラムを実行してみます。
実行する前に、dns-sdをターミナルで動かしておきます
% dns-sd -B _test._tcp
この後、上記プログラムを実行すると、dns-sdでは、以下のようなメッセージが表示されます。
Browsing for _test._tcp
Timestamp A/R Flags if Domain Service Type Instance Name
13:07:47.146 Add 2 8 local. _test._tcp. QuBE
13:07:47.148 Add 2 9 local. _test._tcp. QuBE
13:07:47.148 Add 2 5 local. _test._tcp. QuBE
また、プログラムの実行結果は以下のようになります。
serviceName = QuBE
regType = _test._tcp.
domain = local.
月曜日, 3月 19, 2007
bonjour by Java
BonjourをJavaで使ってみます。
Bonjourの詳しい説明はこちら(Wikipedia)。
Bonjourでは、サービスタイプという概念があります。
たとえば、iTunesでは、_daap._tcpというサービスタイプが用いられています。
他には、_http._tcpや、_printer._udpなどがあります。
PCは_http._tcpというサービスを提供していることを、リンクローカルマルチキャスを用いて知らせます。
dns-sdを利用すると、同一セグメント上に流れてきているサービスを、表示することができます。
例えば、_daap._tcpというサービスが流れてきているかどうかを表示するには以下のようにします。
この後、iTunesを起動してみると、次のようなメッセージが表示されます。
次に、これと似たようなことを、Javaで実装してみます。
コードは以下のようになります。
DNSSD::browse() 関数を用いて、取得するサービスタイプを指定し、サービスが取得されたときのリスナクラスを指定します。
このリスナクラスは、BrowseListenerインターフェースをインプリメントし、serviceFound(), serviceLost(), operationFailed()関数を定義することで出来上がります。
DNSSDクラスはファクトリクラスとなっており、ここで定義された関数を用いることで、サービスの登録なども行えます。
上記のプログラムを実行して、iTunesを起動すると、以下のようなメッセージが表示されます。
Bonjourの詳しい説明はこちら(Wikipedia)。
Bonjourでは、サービスタイプという概念があります。
たとえば、iTunesでは、_daap._tcpというサービスタイプが用いられています。
他には、_http._tcpや、_printer._udpなどがあります。
PCは_http._tcpというサービスを提供していることを、リンクローカルマルチキャスを用いて知らせます。
dns-sdを利用すると、同一セグメント上に流れてきているサービスを、表示することができます。
例えば、_daap._tcpというサービスが流れてきているかどうかを表示するには以下のようにします。
% dns-sd -B _daap._tcp
この後、iTunesを起動してみると、次のようなメッセージが表示されます。
Browsing for _daap._tcp
Timestamp A/R Flags if Domain Service Type Instance Name
3:03:01.323 Add 3 8 local. _daap._tcp. QuBE
3:03:01.324 Add 3 9 local. _daap._tcp. QuBE
3:03:01.324 Add 2 5 local. _daap._tcp. QuBE
次に、これと似たようなことを、Javaで実装してみます。
コードは以下のようになります。
import java.util.*;
import com.apple.dnssd.*;
public class bonjourTest implements BrowseListener {
public bonjourTest() {}
public void serviceFound(DNSSDService browser, int flags, int ifIndex,
String serviceName, String regType, String domain) {
System.out.println("Sercice Founded");
System.out.println("name = " + serviceName);
System.out.println("registered type = " + regType);
System.out.println("domain = " + domain);
}
public void serviceLost(DNSSDService browser, int flags, int ifIndex,
String serviceName, String regType, String domain) {
System.out.println("Service Lost");
System.out.println("name = " + serviceName);
System.out.println("name = " + serviceName);
System.out.println("registered type = " + regType);
System.out.println("domain = " + domain);
}
public void operationFailed(DNSSDService service, int errorCode) {
}
public static void main (String args[]) {
bonjourTest b = new bonjourTest();
try {
DNSSD.browse("_daap._tcp", b);
for (;;) {
Thread.sleep(1000);
}
} catch (Exception e) {
e.printStackTrace();
System.exit(-1);
}
}
}
DNSSD::browse() 関数を用いて、取得するサービスタイプを指定し、サービスが取得されたときのリスナクラスを指定します。
このリスナクラスは、BrowseListenerインターフェースをインプリメントし、serviceFound(), serviceLost(), operationFailed()関数を定義することで出来上がります。
DNSSDクラスはファクトリクラスとなっており、ここで定義された関数を用いることで、サービスの登録なども行えます。
上記のプログラムを実行して、iTunesを起動すると、以下のようなメッセージが表示されます。
Sercice Founded
name = QuBE
registered type = _daap._tcp.
domain = local.
Sercice Founded
name = QuBE
registered type = _daap._tcp.
domain = local.
Sercice Founded
name = QuBE
registered type = _daap._tcp.
domain = local.
月曜日, 2月 26, 2007
NetBSD 4 Beta2とPthreadとfork
NetBSD 4 Beta2では,forkしたあとにpthread_createは出来ない.
これは,Daemonプロセスをつくるときに不便である.
Daemonにしたい場合は,forkした後に,execして,pthread_createしないといけない.
そうすればうまくいくだろう.
とご神託が下った.
これは,Daemonプロセスをつくるときに不便である.
Daemonにしたい場合は,forkした後に,execして,pthread_createしないといけない.
そうすればうまくいくだろう.
とご神託が下った.
水曜日, 2月 21, 2007
水曜日, 1月 24, 2007
データ取得部分作った
統計情報を取得して,サーバに投げる部分作った.
cvsにタグつけた
% cvs tag p2pati-0-4-rc4
明日からは論文書こう
27日には書き上げとこ
TODO:
とりあえずやること.
cvsにタグつけた
% cvs tag p2pati-0-4-rc4
明日からは論文書こう
27日には書き上げとこ
TODO:
とりあえずやること.
- データ収集サーバ作成
- MacOS X, Linux, NetBSDで実験
- 公開用WEB作成
- icmp host unreachの追加
- dns, mdns
- もっととろう,統計情報
- UIの改善
- IPv6対応
- マルチキャスト部分の改良
月曜日, 1月 15, 2007
月曜日, 1月 08, 2007
火曜日, 12月 12, 2006
月曜日, 12月 11, 2006
JavaScriptで高階関数
例:
これを,XMLHttpRequestで利用。
function higher_order() {
var add = function (x, y) {
return x + y;
}
var sub = function (x, y) {
return x - y;
}
calc(1, 5, add);
calc(7, 6, sub);
}
function calc(x, y, f) {
return f(x, y);
}これを,XMLHttpRequestで利用。
function getJson(uri, func) {
var req = new XMLHttpRequest();
req.onreadystatechange = function() {
if (req.readyState == 4 && req.status == 200) {
var linksJson = req.responseText;
var data;
eval("data = " + linksJson);
func(data);
}
}
req.open("GET", uri, true);
req.send(null);
}
function process1() {
var func = function (data) {
// process
}
getJson("hoge.json", func);
}
水曜日, 12月 06, 2006
日曜日, 12月 03, 2006
Ajaxで遊ぶ
Ajaxで作った面白サイトを集めてみる
そんで,極めつけはこのスクリプト(元ネタ)
javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI=document.images; DIL=DI.length; function A(){for(i=0; i < DIL; i++){DIS=DI[ i ].style; DIS.position='absolute'; DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5; DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5}R++}setInterval('A()',5); void(0);
javascriptのデバッガとしては,FireBugがとても優秀なようです.
Firefoxのプラグインとして動くそうですが,ステップ実行や,breakpointの設定,変数のウォッチができる模様.
そんで,極めつけはこのスクリプト(元ネタ)
javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI=document.images; DIL=DI.length; function A(){for(i=0; i < DIL; i++){DIS=DI[ i ].style; DIS.position='absolute'; DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5; DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5}R++}setInterval('A()',5); void(0);
- ブラウザで,画像のたくさんあるページを開く(例:google image)
- ブラウザのURLの欄に,上のjavascriptをコピペ
- おもむろにリターン!
javascriptのデバッガとしては,FireBugがとても優秀なようです.
Firefoxのプラグインとして動くそうですが,ステップ実行や,breakpointの設定,変数のウォッチができる模様.
登録:
投稿 (Atom)