The Natto View: FAQ

  1. 使用法に関して
  2. コンパイルに関して
  3. 実行環境とエラーに関して
  4. 今後の予定など
  5. プログラミングについて

使用法に関して

ビューの意味を教えて下さい。

コマンドライン引数にURLを指定して立ち上げます。すると、そのURLのペー ジを起点としたリンクが表示されます。球体が1つ1つのページで、それをつな ぐ線がリンクになっています(これ以後、ページのことをノードと呼びます)。 ノードの中で、赤くなっているものは操作対象として選択されているアクティ ブノードです。それを貫いている青い線はカーソルで、これをクリックすると アクティブノードをクリックしたのと同じことになります。

アクティブになっていない好きなノードをクリックして下さい。すると、 多少の間を置いて「ノード選択メニュー」が開きます。これは、今クリックし た座標に重なっているノードの一覧です。この中から1つを選択してアクティ ブにして下さい。ノードが新しくアクティブになると、HTTPによってウェブの サーバにアクセスがいき、そのノードからつながっているリンクが表示されま す。

どんな操作ができるのですか?

アクティブノードをクリックすると、「操作メニュー」が開きます。ここ で「Lift up」を選択すると、アクティブノードから連結しているノードを、 納豆の豆ををつまみ上げるように引っ張り上げることができます。下ろすのに は「Lift down」、すべてのノードをを下ろして初期状態に戻すのには「Lift down All」を選んで下さい。また、操作メニューで「Browse」を選択すると、 Netscapeからノードの実際の内容を閲覧することができます。

右クリックでは、「描画メニュー」が開きます。「Translate」、「Rotate」 は、ビュー全体の移動および回転ができます。「View」では、「Home-view」 でデフォルトの方向からの眺め、「Topview」で真上からの眺めが選択できま す。「Rendering Mode」では、ワイヤーフレームによる表示が選択できます (残念ながら、それほど速くはなりません)。

「メニューバー」の「Fileメニュー」では、ビュー全体をファイルに保存、 したりファイルから読み出すことができます。「Optionメニュー」では、クラ イアントが自力でウェブサーバにアクセスするか、LinkDBによる中継を利用す るか選択します。LinkDBによる中継は、遅いのであまりお奨めできません。 「Windowメニュー」で、「Anchor List」を選択すると、ポップアップウィン ドウが開いて、アクティブノードからのリンクの一覧が<A>タグの内側 の文字列(アンカー)とともに常に表示されるようになります。

「下」にある「床」とそこのアルファベットは何?

現在、納豆ビューではノードの配置をURLに基づいて行なっています。簡単 に言えば、URLの1文字目がx座標、2文字目がy座標になっています。この配置 方法に関しては、将来的には改善するつもりです。

ショートカットキーはありますか?

ビューの上では、「U」で「Lift Up」、「D」で「Lift Down」、「q、w、e、 a、s、d、z、x、c」のキーで移動などができます。現在のところ、カスタマイ ズはできません(できるようにするためにはこの部分を全面的に書き換えない と...)


コンパイルに関して

メモリが足りなくてコンパイルできません。

納豆ビューでは、C++のテンプレートをかなり多く使っています。このテン プレートを使うとどうしてもコンパイル時にメモリを大量に消費してしまうよ うです。この点に関してはコンパイラやライブラリの改善に期待するほかあり ません。

できるだけ少ないメモリでコンパイルするには?

configureスクリプトを実行すると、gccのCFLAGSオプションはデフォルト で-g -O2になります。Makefileを書き換えるなどして、とりあえずこれを-Oだ けにしてみて下さい。また、settings.hでSTRICT_STLを#undefして見て下さい。

LessTifで動きますか?

現在のところ(Lesstif 0.75)、フォームとポップアップメニューにバグが あり、動かないようです。Solaris (2.4以上?)をお使いならば、 /usr/dt/lib/Xm.soを無理矢理リンクしてみて下さい。コンパイルオプション を-I/usr/dt/include - L/usr/dt/lib -R/usr/dt/lib -lXmにするということ です。

実行ファイルが巨大なんですが。

なんと、-gオプションをつけてコンパイルすると10Mバイト近くもの実行ファ イルが生成されます(Sparcの場合)。しかし、このほとんどがデバッグのため のシンボル情報です。-gオプションを取れば、ファイルの大きさは10分の1に なります。さらにstripを掛ければ実行ファイルは500KB程度になると思います。 β版ということもあり、デフォルトでは-gを付けることにしました。

なぜ、-no-implicit-templatesを付けているんですか?

-no-implicit-templatesというのは、gccのオプションでテンプレートの暗 黙のインスタンス化をしない、というものです。納豆ビューはSTLを使ってい るのですが、このオプションを付けないと、1つ1つのオブジェクトファイルが 巨大になって、コンパイル、リンクに非常に時間が掛かるようになってしまう のです。そこで、explate.outというファイルで明示的にテンプレートをイン スタンス化するようにしています。

configureスクリプトは、なぜあんなに多くチェックしているのですか?

libwwwのヘッダファイルsysdep.hに#include <config.h>という1行 がありまして、これが、#include "config.h"だったならば、あんなにチェッ クする必要はないんですが... 納豆ビューのconfig.hの方を違う名前にすれば 良かったんですが、それもしゃくだったのでこうなりました。次のバージョン のlibwwwでも<config.h>だったら、納豆ビューの方の名前を変えます。

私のマシンではコンパイルに失敗しました。

ぜひ、ぜひ、その症状を私に知らせて下さい!メールアドレスは、 shiozawa@myo.inst.keio.ac.jpです。

私のマシンではコンパイルに成功しました。

いい知らせです。その環境を私に知らせて下さい。メールアドレスは、 shiozawa@myo.inst.keio.ac.jpです。


実行環境とエラーに関して

遅いです!

残念。3次元CGを使っているのでやむを得ないです。なんとかできないこと はできないんでしょうが、売り物ではないということもあって、そういう泥臭 い仕事は遠慮しときます。(だれか、Direct 3Dに移植して...)

Fire wallを越えられますか?

とりあえず、libwwwの機能として、環境変数http_proxyに http://some.proxy.host:portといった具合に指定してみて下さい。同様に、 ftp_proxyなどの環境変数も使えるはずです。

Mesaを使っていますが、クリックするとSegmentation faultやBus error で落ちます)。

Sparc、gcc 2.7.2、Mesa 2.1の組合せで、画面をクリックしたときにこの症状 が出るのなら、Mesaのコンパイルオプションを-O3から-O2にしてみて下さい。 多分gccのバグだと思います。

XプロトコルのBadValueエラーで落ちます。

うちでは、なぜかkinput2と併用するとこの症状がでます。MotifとXの国際 化の関係のバグだと思います。かわりにxwnmoを使ってみて下さい。

メニューが開くときにGrabエラーが出ます。

ユーザが画面をクリックすると、OpenGLはそこにあるノードを求めるため に計算をします。これは、ほとんど再描画と同じだけの時間が掛かります。こ の間にユーザがマウスポインタを納豆ビューの外に移動してしまうと、エラー になってしまうのです。もちろん、対処するつもりです。

色がおかしいです。

Xのカラーマップが足りないのかも知れません。-installオプションをつけ て実行してみて下さい。多くの色を使っている他のアプリケーションを終了し てから実行してみて下さい。

ノード名の漢字が文字化けしています。

納豆ビューの内部コードはEUCです。LC_ALLやLANG環境変数をja_JP.ujis に設定してみて下さい。

LessTifを使っているのですが、納豆のウィンドウが表示されません。

Sparc Solarisでこの現象が出ています。Lesstifのフォームウィジェット のバグでしょう。Linuxではきちんと表示されているのですが...

LessTifを使っているのですが、ポップアップメニューが動きません

Lesstifでコンパイルすると、ポップアップメニューがうまく動かないかも しれません。現在、原因を究明中。もちろん、メニューに日本語関係が出ない、 などのことはしょうがないところです。

ウィンドウの中に何も表示されません。

True Color、Full Colorのときにこういうことが起こるかもしれません。 OpenWindowでもなるかも知れません。なぜなんでしょう...

Webサーバに大量のリクエストを出しています。

原因不明。libwwwのコンパイルオプションを、-Oや最適化なし、にしてみ て下さい。解決すると思います。

特定のWebサーバへのリクエストを行わなくなってしまいました

おそらく、私のUnofficialパッチの副作用です。実は、この現象があるた めにこのパッチをlibwwwの作者には送っていないのです。対処はしたいのです が、libwwwはあまりにも複雑で困難です。

メモリがリークしているようです。

はい。すいません。メモリの解放忘れはかなりあります。少しずつ、直し ていく所存です。

その他、エラーがあります。

ぜひ、症状を教えて下さい!特に、Segmentation ViolationやBus Errorで 落ちるという情報は教えて下さい。私のメールアドレスは shiozawa@myo.inst.keio.ac.jpです。


今後の予定など

バイナリ配布の計画は?

一応あります。時期は、1997年2月以降。対象は、Sun Solaris 2.5、SGI IRIX 6、Linux 2になるでしょう。

新機能は?

納豆ビューは研究プロジェクトです。新規の機能がなければ研究になりま せん。逆に言えば、新機能が必要なくなったとき、バージョンアップは停止す るかもしれません。とりあえず、1997年春をメドに新機能を実装中。

Motifを使わなくてもよくなりませんか?

「今のところ、考えていません。というのも、フリーのMotifクローンを作 ろうというLesstifプロジェクトが結構好調に進んでいるらしいからです」と、 思っていたのですが、日本語の問題もあるので困っています。「ただ、この次 の項目との絡みで、いいGUIクラスライブラリがあれば、乗り換えることも十 分考えられます」という気持ちは、変わっていません。

libwwwを使わなくてもよくなりませんか?

そうしたいです。

パソコン等への移植の計画は?

研究プロジェクトという性格上、他機種への移植は後回しにせざるを得ま せん。一応、1997年、3月以降Windows NT/95に移植して見ようかな...と思っ ています(思っているだけという話も)。その場合、UnixとWindowでソースの 大部分を共有できるようにできればということになるでしょう。


プログラミングについて

なぜ、libwwwを使っているのですか?

ぜひともKeep-Aliveに対応したかったからです。納豆ビューは、同一のサ イトのページに連続的にアクセスする可能性が高いので、HTTPのKeep-Aliveは 対応したい機能です。しかし、これを実装するのは結構大変なので、既存のラ イブラリを使うことにしました。その他、URLやHTMLの解釈などのルーチンも 便利ですから。

しかし、libwwwは必要以上に複雑なライブラリになってしまっています。 結構バグも潜んでいるようですし、できれば、必要な機能だけ自分で一から書 くべきでした。

libwwwへのパッチは、何ですか?

付け焼き刃的な、libwwwのバグフィックスです。バグフィックスといって も、とりあえず、落ちたり、無限にリクエストを繰り返すことがないようにし たものなので、まったく公式なものではないですし、保証もできません。

1つの症状は、Keep-Aliveでデータをやりとりしていたサーバが、何らかの 理由で途中からContent-Lengthヘッダを付けない切断型の応答をすると無限に リクエストを繰り返すというものです。実際のところ、納豆ビューのlibwwwの 利用方法がいけないのか、libwwwがバグっているのか確証はないです(前者の バグのせいで後者のバグが顕在化している可能性が大?)。

なぜ、C++をつかっているのですか?

納豆ビューは当初、Cとperlで書かれた簡単なプログラムだったのですが、 プロトタイプということで非常に制限がきついプログラムでした。例えば、ノー ドの数は512個までに制限されていました。こういった色々な制限を取り払っ て、きちんと書き直すにあたり、C++とSTLを使うことにしました。LinkDBを通 したアクセスのモードは、開発当初の名残です。

Javaに移植するという話は

勘弁して... それはすなわち、全面的に書き換えろってことでしょう。そ れより誰か、AWT for C++作ってくれないかな...


shiozawa@myo.inst.keio.ac.jp