goRua -- Gtk+ on Ruby User Agent for 2ch version 0.11d
$Id: README,v 1.23 2002/01/28 03:27:15 haruyama Exp $
春山 征吾 haruyama@unixuser.org

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

Note: goRua-0.11a以前におけるセキュリティの問題(goRua-0.11bで解決?)

goRua-0.11以前には,チェックをせずに外部コマンドを
呼し出している箇所がありました.
goRua-0.11aのチェックは不完全だと思われます.
goRua-0.11bよりgoRua-0.11cのほうが好ましそうです.
goRua-0.11cではパッケージ作成に誤りがありました。
goRua-0.11d同梱のconnect2ch.rb 0.08ではURLに空白が含まれている場合
にもparseする問題も潰しました。
goRua-0.11d以降をお使い下さい


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

・書きこみができるようになった

掲示板への書きこみができるようになりました.
掲示板のローカルルールをふまえて書きこみましょう.
(いまのところ goRua ではローカルルールは取れません)

・右クリックによる操作の追加

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

・ session のバックアップ

起動時に ~/.goRua_2ch/sessions を ~/.goRua_2ch/sessions_backup に
コピーするようにしました.

・カテゴリ選択の処理を変更

・'全部閉じる'ボタンを右上部の'File'メニュー中に追加 (Thanks: 63 さん)

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 ファイルを
				取得するライブラリ
  new_2ch_bbsmenu.rb		board_info ファイルを生成するスクリプト
  COPYING			GNU GENERAL PUBLIC LICENSE (GPL)
  .goRua_2ch/ ディレクトリ   「使い方」にて説明

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

3. 動作環境

モナーフォントが使える X Window System
(モナーフォントのページ: http://members.tripod.co.jp/s42335/mona/)
EUC を正しく処理表示できる Gtk
Ruby/Gtk
が必要です. 
locale についてはスクリプトの変更によって対処できるとは思います.
モナーフォントがない場合は goRua.rb 中のフォントの定義を変更してください.

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 を起すことがあります.

4. 使い方

まず

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

が必要です.

~/.goRua_2ch/bookmarks ファイル
があると ブックマークを作れます.

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

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

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

~/.goRua_2ch/board_info ファイル は 
http://www.2ch.net/newbbsmenu.html を 添付の new_2ch_bbsmenu.rb に
食わせて作ることもできます. (たぶん) new_2ch_bbsmenu.rbの引数は
URLでもファイル名でもかまいません。

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

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


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

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

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

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

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

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

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

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

スレッド 選択用・ スレッド 内容表示用 Box の大きさを
Window 内で変化できるようになっています.

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

4.1 注意点

・ 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 用)
S フィールド: スレッド (read.cgi,raw モード未対応)
T フィールド: スレッド (read.cgi,raw モード対応)
(sessions ファイルでは S,T のみ有効)

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

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

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

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

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

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

5. 既知の問題点

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

  subject や thread の情報がどんどん追加されるため,
  沢山のファイルができることになります.
  将来 goRua で条件を指定して消すことができるように
  したいと思います.

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

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

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

  Ruby/Gtk の Gtk::Text では line_wrap を制御することができないようです.
  Window を大きくするなどしてください.
  姑息な手段である程度は対応していますが.
  
・ IPv6 環境でうまくうごかない.

  IPv6 環境でうまくうごかないとのご報告を頂きました.
  Net::HTTP 次第だと思われますので
  特に対応はしません.
 
・ 内容が消える
 
  Gtk の widget で対応できない文字があると (?)
  Text や TreeItem のすべての内容が消える場合があるようです.
  一文字の「トン」や「 III 」が含まれている場合で確認
  このチェックをするのはいやだなぁ...

・ /home/haruyama/bin/goRua.rb:113:in `gets': invalid compressed data -- crc error (GzipReader::CRCError) のようなエラーが出る

手元で二度起きたのですが, 再現性がありませんでした.
HTTP の GET で失敗したか,あるいは ruby-zlib のバグか?
頻発するようであれば対策します.

・ /home/haruyama/bin/goRua.rb:???: [BUG] Segmentation fault というエラーが出る

非常に長い発言があるスレッドを表示しようとしたときに起きます.
ruby-zlib 0.4.0 に対して
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-ext/2041
のパッチをあてて下さい.


6. TODO

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

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

UI の洗練もそろそろ?

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


7. いいわけ

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

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

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

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

・ UI がいまいち

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

・そもそもなぜ Ruby/Gtk ?

なんとなく.

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

まったくそのとおり.

8. 更新履歴

1/28

0.11d リリース (connect2ch.rb version 0.08)

セキュリティの強化(parse_http_urlの修正)

1/27

0.11c リリース (connect2ch.rb version 0.07)

セキュリティの強化

0.11b リリース (connect2ch.rb version 0.07)

セキュリティの強化

0.11a リリース (connect2ch.rb version 0.07)

セキュリティの強化,バグ修正,スペルミス修正


1/21

0.11 リリース (connect2ch.rb version 0.07)

$main_window.signal_connect ("destroy") do exit end   に修正 (Thanks: 73 さん)

全部閉じる アイテムを追加 (Thanks: 63 さん)


1/20

発言内容上の右クリックメニューで goRua で処理,外部ブラウザで処理 を追加 (Thanks: 66 さん)
2ch のホストからは read.cgi を使って subject 情報を入手する用に変更

1/19

newbbsmenu.html で掲示板名に<br>が入っている場合があることに対処
parse_url メソッドを connect2ch.rb に移動
new_2ch_bbsmenu.rb:      新しい board_info ファイル生成スクリプト (Thanks: 63 さん)


1/18 

スレッド一覧が展開されている時に右クリックすると展開を閉じるようにした
発言内容以外のところでも右クリックメニューを追加 (Prev,Next)

1/17

session のバックアップ
発言内容上で右クリックした際に
メニューを出し, URL (h?ttp://..) や >> 文字列を処理するように
2ch と bbspink のそれらしい URL を goRua 内で処理できるように.

1/15

カテゴリ選択の処理を修正

1/14

カテゴリ選択の処理を変更

1/13

Net::ProtoRetriableError に対処
timeout 処理を追加

1/8

書きこみに対応
bookmarks の例外的処理を追加

1/6

0.10 リリース (connect2ch.rb version 0.06)

goRua からブックマークを設定できるようにした

1/4

honeto@mail.goo.ne.jp さんのご提案とパッチにより
Gtk::HPaned により スレッド 選択用・ スレッド 内容表示用 Box の大きさを
Window 内で変化できるようにした.

1/1

ThreadTreeItem に tooltips を付けた

12/30

>>31 さんの示唆をうけて
見ている Thread の情報を終了時に保存・起動時の復帰をサポート

12/25

Thread の bookmark に対応
2ch_bbsmenu.rb のバグを修正
新着から表示をデフォルトに

2001/12/18

0.09a リリース (connect2ch.rb version 0.05)

・壊れた入力で落ちることがあったのに対処
・デバッガに注意された点を修正

2001/12/17

0.09 リリース (connect2ch.rb version 0.04)

細かい修正

2001/12/16

decode_html_escape_char の修正 (Thanks: >>22,メソッド名を unquote に)
すでにキャッシュがある場合最新のものをいきなり表示できるように (connect2ch.rb も更新)
現在の状態の表示
その他修正,整理

2001/12/15

Thread に対する検索を左上部の Entry でできるようにした.
いま見ている Thread の URL を表示するボタンを追加,
右上部の Entyr を 100-や http://.. といった入力に対応させた.
その他整理

2001/12/13

キャッシュの利用 (Thanks: >>7)
Text のサイズ変更
line_wrap 時の処理の変更

2001/12/10

0.08 リリース (connect2ch.rb version 0.03)

タブのサポートの整理
'再読込'メニューを追加

2001/12/8

タブのサポート

2001/12/7

0.07 リリース (connect2ch.rb version 0.03)

バグ修正など, 変更
connect2ch.rb ライセンスを GPL に


2001/12/3


0.06 リリース (connect2ch.rb version 0.02)

発言ナビゲート用 entry の追加
title に発言数を追加
ruby-zlib なしでも動くように
dat 直読みに再び対応
差分取得でファイルに変更がなかった際の処理を修正
connect2ch.rb で tmp ファイルを余計に作っていたのを修正


2001/12/1

0.05 リリース

connect2ch.rb ファイルに 2ch_bbsmenu.rb の内容も追加 (未テスト)
各種整理

2001/11/30

connect2ch.rb ファイルの導入
差分読込のバグを修正

2001/11/29

Gtk::Combo の変更の取りかたがわかったので"選択"ボタンを廃止

0.04a 公開

.goRua_2ch/board_info ファイル更新

0.04 公開

名前を goRua に
バグ修正
内部的な整理 (まだ途中)
ライセンスを GPL に

2001/11/28

0.03 公開

2001/11/27

dat 直読みをやめ read.cgi の raw モード対応
(差分読み込み対応,これにより ruby-zlib が必須に)
Proxy 対応
バグ修正

ver 0.02 公開

その他整理
名前中の</b>...<b>などを除去 (とりあえず)
「最新」メニューを追加
バグ修正

2001/11/26

gzip 圧縮されたストリームに対応

ver 0.01 公開

9. 参考文献

仕様について:
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

