goRua -- Gtk+ on Ruby User Agent for 2ch version 0.15-pre
$Id: README,v 1.55 2002/07/06 08:02:23 haruyama Exp $
春山 征吾 haruyama@unixuser.org

スレッド:
http://pc.2ch.net/test/read.cgi/unix/1008120213/ 
こちらの書きこみを >> 7 などで表記します.

Note: goRua-0.11a 以前におけるセキュリティの問題

goRua-0.11a 以前には,チェックをせずに外部コマンドを
呼し出している箇所がありました.
(goRua-0.11a のチェックは不完全だと思われます.)
他の問題も修正した goRua-0.12e 以降をお使い下さい


0. この version の注意点・変更点

・したらばを読めるようにしました

bookmarks ファイルに 掲示板なら
E http://www.shitaraba.com/bbs/now/ したらばウォッチ＠したらば BBS

  スレッドなら
U http://www.shitaraba.com/bbs/now/dat/999688496_1.dat なんだよここパクリじゃん

  と指定します.

  書きこみは対処してません.

・ read.cgi を使わないように

サーバの CPU 使用率を減少させるためツールは read.cgi を使わないことが
以前から推奨されていたので, DAT 直読みをデフォルトにするようにしました

※付属の Makefile で make bookmarks_update とすると
  既存の bookmarks ファイルを
  goRua_bookmarks_translator.rb を使って read.cgi を使わないような
  bookmarks に変換します.
 
■ new_2ch_bbsmenu.rb も read.cgi を使わない board_info を作ります.

■ DAT 直読みでもスレッドの差分取得に対応しました.
  ただし, gzip は使いません. (subject には使える)

■ http://members.jcom.home.ne.jp/monazilla/document/oyster_subjecttxt.html   に従った User-Agent をつけるようにしました.
   User-Agent を独自に設定している場合読めない板があるかもしれません.

■ (board_info ファイルなどで) 指定されてない場合に read.cgi 経由か dat 直読みのどちらで Subject やスレッドを取得するかを制御する設定項目 via_dat を追加しました.

・レスの開始と表示数を制御するスピンボタンを追加しました

・ tab_type 設定項目を追加しました. .goRua_2ch/config ファイルを
  ご覧下さい


1. goRua とは

Ruby/Gtk による 2ch ブラウザです.

現在

・ 2ch のスレッド一覧,スレッドの取得
・ スレッドの差分取得
・ スレッドの内容の表示

が行なえます.

正式な名称として扱われる名前は
○ goRua
○ goRua -- Gtk+ on Ruby User Agent
○ goRua -- Gtk+ on Ruby User Agent for 2ch
○ ゴルァ
○ ゴルァ!!
です.
(命名者である dellin さんに厚く御礼申しあげます.)


2. パッケージ中のファイル

  goRua.rb 			2ch ブラウザ
  connect2ch.rb 		2ch から subject,thread ファイルを
				取得するライブラリ
  goRua_color_table.rb 		名前対 Gdk の色情報のテーブルを持つ
				HTML で良く利用される 140 色を登録している
  new_2ch_bbsmenu.rb		board_info ファイルを生成するスクリプト
  goRua_cache_clean.rb 		しばらくアクセスしていない
				キャッシュファイルを消すスクリプト
  COPYING			GNU GENERAL PUBLIC LICENSE (GPL)
  ChangeLog			更新履歴
  README			このファイル	
  Makefile  			インストールなどを支援する Makefile
  .goRua_2ch/ ディレクトリ   「使い方」にて説明

goRua.rb,new_2ch_bbsmenu.rb,connect2ch.rb
は GPL で配付しています.

3. 動作環境

EUC を正しく処理表示できる Gtk
Ruby/Gtk (0.27 は問題があります ( >> 146),
0.28 の snapshot にも問題のあるものがありました,
0.26 以前ないし 0.28 をお使い下さい)
が必要です. 
モナーフォントが使える X Window System
(モナーフォントのページ: http://members.tripod.co.jp/s42335/mona/)
モナーフォントがない場合は ~/.goRua_2ch/gtkrc ファイルで
フォントの指定を行なってください.

ruby-zlib
(http://www.blue.sky.or.jp/atelier/)
があると gzip ストリームでのファイルの取得や差分取得が行なえます.
使用を推奨します.
0.4.0 に対して
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-ext/2041
のパッチをあてないと Segmentation fault を起すことがあります.
0.5.0 にも問題があります.
最新の 0.5.1 は問題ありません.

4. インストール・設定

4.1 Makefile による方法

Makefile を利用してインストールを行なうことができます.

一般ユーザが自分のホームディレクトリにインストールする場合は,
環境変数 RUBYLIB を (シェルの設定ファイルなどで) 設定した上で
% make install
とします.

root として 実行ファイルとライブラリをシステムにインストールする場合は
# make install-files -n BINDIR=/usr/local/bin RUBYLIBDIR=/usr/lib/ruby/1.6
とします.
そして 一般ユーザで 
% make install-env 
として設定ファイルをインストールします.

また, 単に
% make
とすると 以下のメッセージを出します.

-----

    make install          - 実行ファイル・設定ファイルをインストールし board_info ファイルを更新する
    make install-files    - 実行ファイルをインストールする
    make install-env      - 設定ファイルをインストールする
    make update           - board_info ファイルを更新する
    make bookmarks_update - read.cgi 形式を利用しない bookmarks に変換する
    make cache-clean      - 30 日以内にアクセスされていないキャシュファイルを消す
    make uninstall        - 実行ファイルを消す
    make clean-env        - 設定ファイルを消す
    make allclean         - 実行ファイル・設定ファイルを消す

-----

4.2 手動で行なう方法・細かい設定

goRua を動かすには

~/.goRua_2ch/ ディレクトリ
~/.goRua_2ch/subject/ ディレクトリ
~/.goRua_2ch/thread/ ディレクトリ
~/.goRua_2ch/board_info ファイル

が必要です.

ブックマーク用のファイルとして
~/.goRua_2ch/bookmarks ファイル
を利用します.

~/.goRua_2ch/sessions ファイル
があるとそのセッションを復元します.

~/.goRua_2ch/gtkrc ファイル
~/.goRua_2ch/config ファイル
で設定ができます.
サンプルの gtkrc ファイルでは Widget に対し Font を設定しています.
サンプルの config ファイルに設定できる項目の詳細が書かれています.

version を変更した際は
新しい .goRua_2ch/config ファイルに目を通すことを
お勧めします.

パッケージ中の .goRua_2ch ディレクトリをそのままコピーして
ください.

connect2ch.rb ファイルが goRua.rb や new_2ch_bbsmenu.rb
が読みこめる場所にある必要があります.
環境変数 RUBYLIB に connect2ch.rb ファイルのあるディレクトリを含めるか,
connect2ch.rb ファイルのあるディレクトリで起動してください.
しばらくは connect2ch.rb もいじることになると思いますので,
upgrade のたびに更新をお願いします.

~/.goRua_2ch/board_info ファイル は 
http://www6.ocn.ne.jp/~mirv/2chmenu.html を 添付の new_2ch_bbsmenu.rb に
(以前は http://www.2ch.net/newbbsmenu.html,
http://www.2ch.net/2chmenu.html だった.今後も変わる可能性があるので 
http://www.2ch.net/2ch.html から判断してください.)
食わせて作ることもできます. (たぶん) new_2ch_bbsmenu.rb の引数は
URL でもファイル名でもかまいません.


5. goRua の使い方

準備ができたら goRua.rb を起動します.

無事起動したら左上でカテゴリーを選びます.
次にその下のツリーで掲示板を選択します.
すると掲示板にサブツリーがつくので展開してスレッドを選択します.
すると右に内容が表示されます.
100 を超える発言がある場合は 右上部の '1-','Prev', 'Next' ,'最新'で
操作できます.
'1-','Prev', 'Next' ,'最新' は スレッド表示部末尾にもあります.

(スレッド一覧が展開されている時に右クリックすると
展開を閉じるようにしました.)


右上部の Entry に 4,1-100,>>1,>>2- などの指定を行なうことで
表示する発言群を指定できます.
この指定をすると その後の Prev,Next などの操作も先の指定に
引きずられた形となります.
また (h) ttp://... という文字列の場合は goRua で開けそうな場合は
goRua でそうでない場合は外部のブラウザを起動します.

発言内容上で右クリックすると
メニューが出て, URL (h?ttp://..) や >> 文字列を処理します.
発言内容以外のスレッドの内容表示部では 
右クリックメニューで'Prev'と'Next'の操作ができます.


再度掲示板やスレッドを"選択"すると再読込します.
(選択されている状態での選択では"非選択"状態になるのでご注意を)
スレッドは右上部 '再読込' で同じビューを利用したまま再読込を行います.

'ブックマークの追加' で ブックマークにファイルを追加します.

スレッドごとにビューを持ちタブにより切り替えられるようになっています.
選択したいスレッドのタブの上で左クリックをするとスレッドを選択できます.
タブの右クリックするとすべてのスレッドの中から選択できます.
×を押すとそのスレッドの表示を消します.
'File'-'全部閉じる'ですべてのスレッドの表示を消します.

Subject を読みこんである場合 スレッド のタイトルから検索が行えます.
左上部の Entry に正規表現を入れてください.
'検索結果'カテゴリで検索結果が表示されます.

右上部の '新着から表示' が選択されていると (デフォルト)
以前取得したスレッドの情報がある場合スレッド情報を取得した際に
その以前の情報の最後から表示します.

どのスレッドを閲覧しているかの情報は ~/.goRua_2ch/sessions に
書きこまれます. 起動時にはこのファイルが読むこまれ,
前回みていたスレッドを表示します. 起動時に ~/.goRua_2ch/sessions
があると ~/.goRua_2ch/sessions_backup ファイルにバックアップを取ります.

起動時にスレッドを読みこみに行く際掲示板のサーバが落ちているなどの場合
goRua が起動後操作できないことがあります.
その際は ~/.goRua_2ch/sessions を移動するか 
-s オプションを付けて goRua を起動してください.
その後 スレッド を見ると sessions ファイルが上書きされます.
ご注意を.

HPaned を利用して
スレッド 選択用・ スレッド 内容表示用 Box の大きさを
Window 内で変化できるようになっています.
しきいの部分の下部のボタンを左右に動かして調整できます.

スレッドを閲覧している際に '書きこむ' でスレッドに書きこむことができます.
掲示板のローカルルールをふまえて書きこみましょう.
(いまのところ goRua ではローカルルールは取れません)

5.1 注意点

・文字化けする

モナーフォントを導入するか
~/.goRua_2ch/gtkrc ファイルで
適切なフォントの指定を行なってください.

・ Subject,スレッド取得方式

Subject (スレッド一覧) の取得は subject.txt を,
スレッドの取得は read.cgi の raw モードを利用しています
(ruby-zlib がある場合.ない場合は dat 直読み).
掲示板にたいして dat 直読みを使うよう指定することができます.

・ ~/.goRua_2ch/board_info
   ~/.goRua_2ch/bookmarks
   ~/.goRua_2ch/sessions の形式

2ch の掲示板サーバは時々変更するようなので
"subject ファイルの取得に失敗しました. "
というエラーが出る場合は, 2ch_bbsmenu.rb にて
board_info ファイルを作りなおしてください.
将来, goRua 本体に組みこむかもしれません.

A フィールド: 掲示板 (read.cgi,raw モード未対応)
B フィールド: 掲示板 (read.cgi,raw モード対応)
C フィールド: カテゴリー
D フィールド: 仮想掲示板 (bookmarks 用)
E フィールド: 掲示板 (したらば)
S フィールド: スレッド (read.cgi,raw モード未対応)
T フィールド: スレッド (read.cgi,raw モード対応)
U フィールド: スレッド (したらば)
(sessions ファイルでは S,T のみ有効)

bookmarks ファイルで 最後の D フィールドの後に S,T フィールド以外
のフィールドがあると 'ブックマークの追加' がうまくファイルに反映
されません.

D フィールドが複数ある場合, goRua 内では最後のものに
'ブックマークの追加' がなされますが,
ファイルの上では bookmarks ファイルの末尾に追加するだけなので
整合性がない場合があります.

# 将来は整合性を取るかな?

bookmarks ファイルの編集は goRua 終了後にエディタなどで
行なってください.

・ Proxy サーバを利用する場合

goRua.rb 中で $proxy_addr,$proxy_port 変数を設定してください.

6. 既知の問題点

・~/.goRua_2ch/以下に沢山のファイルができる

  subject や thread の情報がどんどん追加されるため,
  沢山のファイルができることになります.
  将来 goRua で条件を指定して消すことができるように
  したいと思います.
  現在 添付の goRua_cache_clean.rb によって
  30 日以内にアクセスされていないファイルを消せます.
  Makefile を利用して
  % make cache-clean
  としても構いません.

・ 多くの情報を表示しようとするとおかしな表示になる

  一度に表示する発言を 100 に制限してるのはこのためですが,
  それでもおかしく場合があります.
  Gtk のバグのようです.
  今後一度に表示する発言を 100 未満にすることもできるようにすること
  で対応します.
  右上部の entry widget で 1-50 などと指定するとうまくいくかもしれません.

・ 発言内容が折り返されて AA などがうまく見れない または下にはみだす

  姑息な手段である程度は対応していますが,
  もしだめな場合は Window を広げるなどしてください.

・ IPv6 環境でうまくうごかない.

  IPv6 環境でうまくうごかないとのご報告を頂きました.
  Net::HTTP 次第だと思われますので
  特に対応はしません.
 
・ 内容が消える
 
  Gtk の widget で対応できない文字があると
  Text や TreeItem のすべての内容が消える場合があります.
  ある程度は対応して表示されるようにしていますが,
  完全ではありません.


7. TODO

上のほうを優先するわけではありません.

EUC 以外への対応
オフラインモード (一応実装されたが)
プログラムの整理 (また汚なくなってきた)
ドキュメントも整理
待ち時間に読み込み中のマーク (砂時計とか,現在は文字列で状態表示) 
文字符号参照や表示できない文字にもっと対応 (ある程度行なった)
board_info ファイルの goRua 内での更新・その際のキャッシュの移動
(キャッシュの形式を変更するかも,
http://www.2ch.net/2ch.html も処理しないとだめかな)
たくさん subject を持っているカテゴリの描画が遅くなるのでなにか対処
(カスタマイズ対象に?)
などなど.....

UI の洗練もそろそろ?

認証が必要になったら, それもやらないと.

8. いいわけ

・発言内容が Gtk::Text なのはなんかへん

簡単にコピーアンドペーストできるようにしたかったので.

・では全部 Gtk::Text にすれば?

mailto を見たいときだけ見たかったので.

・ UI がいまいち

Gtk についてよくわかっていないので調査して
今後修正していきます. たぶん大幅にかわりそう.
(自分個人が使う分には現状でも結構満足ではある)

・そもそもなぜ Ruby/Gtk ?

なんとなく.

・すごく富豪的プログラミングですね
(富豪的プログラミング: http://www.csl.sony.co.jp/person/masui/fugo.html)

まったくそのとおり.

9. 更新履歴

別ファイル ChangeLog としました

10. 参考文献

仕様について:
http://members.jcom.home.ne.jp/monazilla/document/index.html
http://64.71.134.227/computer/479/monazilla.html
http://www.skipup.com/~niwatori/
#メモ: html 化されてないのを読むには offlaw.cgi を使う
#しかし変更されたようだが...
http://www.fmfm.binboserver.com/tech/rawmode.txt
#まだ connect2ch.rb いじるところ多いな...
monazilla のメーリングリスト

Ruby,Ruby/Gtk について:
「オプジェクト指向スクリプト言語 Ruby 」
(まつもとゆきひろ 石塚 圭樹, アスキー出版局)
http://ruby-gnome.sourceforge.net/
http://www.ruby-lang.org/gtk/ja/index.html
http://ruby.freak.ne.jp/gtk/
http://home2.highway.ne.jp/mutoh/tips/

Gtk+ について:
http://www.gtk.org/rdp/download.html
http://www.gtk.org/faq/

文字符号参照について:
http://www.asahi-net.or.jp/~bd9y-ktu/html4rec_f/charset.html
(文字符号参照にどこまで対応するかは未定です)
http://channel2.tripod.co.jp/etc/check.html

