Just another Ruby porter,

〜2001年3月上旬〜


<Prev(,) | Next(.)> | Recent(/)>> | RDF

2001-03-01 (Thu)

cURL

niftyのflinuxで紹介されてた cURLを後で試してみよう。これでnif.rbよりは速くアクセスできる?

_stat

ホスト名が違うけど気にしないでね。
WinNT:
//eban/pub: -1
//eban/pub/: -1
//eban/pub\: 0
//eban/pub/ruby: 0
//eban/pub/ruby/: 0
//eban/pub/ruby\: -1
\\eban\pub: -1
\\eban\pub/: -1
\\eban\pub\: 0
\\eban\pub\ruby: 0
\\eban\pub\ruby/: 0
\\eban\pub\ruby\: -1

Win2K:
//eban/pub: -1
//eban/pub/: 0
//eban/pub\: 0
//eban/pub/ruby: 0
//eban/pub/ruby/: -1
//eban/pub/ruby\: -1
\\eban\pub: -1
\\eban\pub/: 0
\\eban\pub\: 0
\\eban\pub\ruby: 0
\\eban\pub\ruby/: -1
\\eban\pub\ruby\: -1
とやっぱりWinNTだけとても変だ。

JARH

print %%\%s%%%%Just another Ruby hacker,%%%%%%%%%

2001-03-02 (Fri)

cURL

そのまま取ってくるとHTML形式になり、しかも余計な情報が多くついてくる。 「保存」というボタンを押すと1メッセージがそのまま保存できるようだ。 つまりPOSTできればいい。
たとえばnifty fgalts mes 7の8446番の発言なら
% curl --sslv2 -F msg000='7?8446' -F download=message \
  https://iw.nifty.com/iw/nifty/fgalts/mes/7/fgalts_7_8446.log
てな感じでいける。余計なものは
この発言に対するコメント
https://iw.nifty.com/iw/nifty/fgalts/mes/7/com.cgi?8446
だけなのでこれなら許せる。最後のfgalts_7_8446.logはなんでもいいみたい。 この形式はtelnet r2.nifty.ne.jpと同じなので、 nif.rbのlog2mailを通せばmbox形式に変換できる。 未読がどーのこーのというボタンもあるから、 まとめてダウンロードすることもできると思う。 たぶんr2.nifty.ne.jpを使うよりは速いだろう。 特にデータライブラリなんかは。
そういえばRubyにもSSLを扱うモジュールがあったよね。

strftime

(format-time-string "%y%m%d.rrd")

JARH

print !?????:???%?Just another Ruby hacker,?:??

2001-03-03 (Sat)

cURL

昨日書き忘れたけど、パスワードとかは~/.netrcに書いてある。

machine iw.nifty.com login ABC00000 password ひみちゅ

で~/.curlrcはこんな設定にしてある。

--netrc

実際に送られてくるHTMLファイルを解析しながらの思考錯誤だから、 未読の管理がいまいちよくわからん。
あ、終わったらちゃんとlogoutしないと。

https://iw.nifty.com/iw/nifty/bye.html

放っておくとタイムアウトするまで課金される。

_stat

_ msvcrt.dll:

そのほうがいい気がしますね。 ってこれでstdioもRubyが持つって例の話が実現したりすると、 なんだかんだで最終的にはRubyCRT.DLLになってしまうのだろうか?

_ Cygwin:

ところで例のテストプログラムをs/_stat/stat/gしてCygwinで試すと 全部成功する。ということはCygwinを参考にすればいいのか。

RubyWin 0.0.2.9

いつものように -mwin32パッチをあてて作ったらなんかサイズが大きい。なるほどuconvを組み込んだんだ。
うーむ。こういうのって難しいね。 ruby-talk MLでもXMLParserとexpatを標準配布に含めようという 提案もあったりするけど。
Windowsだったら

MultiByteToWideChar

とか

WideCharToMultiByte

を使えばUnicodeのテーブルを抱く必要はない気もする。

JARH

({}.default='Just another Ruby hacker,')[0].display

2001-03-04 (Sun)

RubyWin 0.0.2.9

なぜかCygwinだとeval bufferが動かない。 しかたないので0.0.2.7に戻すことにした。 既にtarballも消してたが、 作業ディレクトリは残ってたのでパッケージし直すだけで済んだ。

AW:, SV:

最近SubjectにAW:やSV:がついてるメールをたまに見かけるようになった。 なにかと思ったらそれぞれの言語でのRe:という意味らしい。 AWはドイツだな。SVはわからん。そういえば「返:」というのも見たことがある。 ったくOutlookってやつは余計なことばかりする。

特異メソッド

()をつければ大文字でも呼び出せます。

Perl for Win32

ActivePerl

JARH

print Hash['Just another ', 'Ruby hacker,']

2001-03-05 (Mon)

AW

Antwort

rubyist ML

なんか同じようなメールが来るなあとまぬけなことに今日になって気づく。 どうも土曜日あたりから2通ずつ来てる気がするけど、みなさんのとこではどう?

JARH

#include <stdio.h>
#if 0
=begin
=end
def main() yield end
<<sub
=cut
sub
#endif
main(){ printf("Just another Ruby hacker,"); }
#if 0
=begin
=end
<<main
=cut
main
#endif

2001-03-06 (Tue)

cURLでnifty

結局こんな感じでまとめてダウンロードできることはわかった。
% curl --sslv2 -F download=room \
  -F roomlist="0102030405060708091011121314151617181920" \
  -F room05='1580?1586?1' -F room07='8000?8005?1' -F save=on \
  -o q.log https://iw.nifty.com/iw/nifty/fgalts/mes/fgalts.log
mes 5の1580から1586までとmes 7の8000から8005までという意味。 ?1は本当は未読の数を指定するんだと思うんだけど適当に1にしてみた。 0だとエラーになる。ダウンロードしても未読位置は変化しない。 既読の設定はsave=の代わりにread=を指定する。valueはなんでもいいようだ。 というわけで未読の管理はniftyに任せるのではなく、 自前で管理したほうが簡単かもしれない。
あ、だとするとものすごい大きな数を指定してもエラーにならないと助かる。
% curl --sslv2 -F download=room \
  -F roomlist="07" -F room07='8480?99999?1' -F save=on \
  -O https://iw.nifty.com/iw/nifty/fgalts/mes/fgalts.log
okだ。
お次はSSLSocketを使ってダウンロードかな。

昨日と今日のJARH

Ruby, Perl, Cで解釈できる。 さらにshを追加しようとしてるんだけど、なかなかうまくいかない。

JARH

#include <stdio.h>

#if 0
eval "def main() yield if block_given? end;def sub() end" if $KCODE;
sub
#endif

main(){ printf("Just another Ruby hacker,"); } 

#if 0
main
#endif

2001-03-07 (Wed)

mkmf.rb

のバグではないです。そもそもライブラリを$LDFLAGSに追加してはいけません。 mswin32も考慮に入れるなら
$libs = append_library($libs, "hoge")
という感じかな。 あ、という意味ではなぜ$LIBSという名前じゃないのという疑問はあるかもしれない。 てゆうかおいらも今そう思ったし。

LINE

Cygwin MLでは LINEがちょっとしたブームになってる。 yendotでも昨日紹介されてた。
LINE Is Not an Emulator. LINE is a utility which executes unmodified
Linux applications on Windows by intercepting Linux system calls. The
Linux applications themselves are not emulated. They run directly on
the CPU just like all other Windows applications.
っつーことなんだけど、BOWみたいなもんだな。 LinuxのバイナリをそのままWindows上で動かすソフトだ。 早速minirubyをstaticにlinkして試したらちゃんと動いた。 /lib/*.soだのは面倒なので試してない。
Screen Shotsを見るとX Serverも動いているような印象を受けるが、 あれはWindows上のX Serverを使っているのでそのあたりは誤解しないように。

iw.nifty.com

お気に入りを使うと未読の管理も簡単になる。 一括保存するとGOだのMREADだの裏の事情がわかる。 ってそんなとこまで見せてくれなくてもいいんだけど。
% curl --sslv2 \
  -F save=on \
  -F /iw/nifty/fext/mes/1/index.html=checked \
  -F /iw/nifty/flinux/mes/1/index.html=checked \
  -F /iw/nifty/fgalts/mes/1/index.html=checked \
  -F /iw/nifty/funix/mes/1/index.html=checked \
  https://iw.nifty.com/iw/nifty/mylist/nifty.log > nifty.log
のように巡回したいところを追加すればok。 あ、未読管理中にしておけば未読位置もいっしょに更新される。 そのあたりはあらかじめ設定しておいたほうがいい。
  -F logout=on
で終わったら自動的にログアウトできる。
ひょっとして会議室番号ってallもあり? やってみると
MREAD ROOM:1
が単に
MREAD
になった。ってことは最終的には
% curl --sslv2 \
  -F save=on \
  -F /iw/nifty/fext/mes/all/index.html=checked \
  -F /iw/nifty/fgalts/mes/all/index.html=checked \
  -F /iw/nifty/flinux/mes/all/index.html=checked \
  -F /iw/nifty/funix/mes/all/index.html=checked \
  https://iw.nifty.com/iw/nifty/mylist/nifty.log > nifty.log
のようにすれば簡単に会議室の巡回ができる。
コメントや新規発言はどうする?それはnif.rbでいっか。

Ruby,Perl,C JARH

おお、ナイスです。

JARH

print 'Just ' 'another ' 'Ruby ' 'hacker,'

2001-03-08 (Thu)

SSLSocket

RAAに登録されてる SSLSocketはちょっと古いようだ。今日現在の最新はssl-0.2.0.tar.gzだ [ruby-list:27560]。 これを使えばcurlのようなことも可能なはず。

_ まずはLinux:

% ruby extconf.rb
checking for ssl.h... no
あら?いきなりnoか。おもむろにextconf.rbを見ると決め打ちで
$CFLAGS += "-I/usr/include/openssl "
$LDFLAGS += "-lcrypto "
となってる。うーむ。どうもdir_config()が浸透してないなあ。 それとまた$LDFLAGSにライブラリを指定してる。
dir_config("openssl")
$CFLAGS += "-I/usr/include/openssl "
$libs = append_library($libs, "crypto")
に変更。
% ruby extconf.rb --with-openssl-dir=/usr/local/ssl 
checking for ssl.h... no
まだだめか。あ、opensslって変則的な構造になってるのか。
/usr/local/ssl/include/openssl
/usr/local/ssl/lib
じゃ、別々に指定するしかないね。
% ruby extconf.rb \
  --with-openssl-include=/usr/local/ssl/include/openssl \
  --with-openssl-lib=/usr/local/ssl/lib
checking for ssl.h... no
だめ。/usr/local/ssl/include/openssl/ssl.hを見ると
#include <openssl/comp.h>
てな感じになってる。それじゃ
-I/usr/local/ssl/include
も必要じゃん。てゆうか元々
#include <openssl/ssl.h>
で使ってくれという意味なんだろうか? そういう方針でssl.cも書き換えて、 extconfig.rbも"openssl/ssl.h"を試すようにすると
% ruby extconf.rb --with-openssl-dir=/usr/local/ssl 
checking for openssl/ssl.h... yes
checking for SSLv23_method() in -lssl... yes
creating Makefile
いけてるじゃん。makeもあっさり通った。

rubyist ML

ってことはおいらのとこだけか。うーむ。 とりあえず違うメールアドレスを送信先として設定してみた。 これでしばらく様子を見てみよう。

JARH

print File.dirname 'Just another Ruby hacker,/Just another Ruby porter,'

2001-03-09 (Fri)

SSLSocket

あ、append_libraryじゃなくて素直にhave_libraryでいいよね。 have_libraryは第2引数を省略すると"main"になるけど、 これって失敗したなあ。当然nilにすべきだった。

have_library("crypto")

で済む話が

have_library("crypto", nil)

have_library("crypto", "")

としなきゃいけないし。もちろんちゃんと

have_library("crypto", "crypt")

と書けばいいんだけど、ライブラリの存在だけ調べれば十分でしょう。

JARH

def $_.singleton_method_added(*) print 'Just another Ruby hacker,' end

2001-03-10 (Sat)

SSLSocketでNifty

_ svr.rb, cli.rb:

SSLSocketにはsample/にいろいろ例がある。 まずはsvr.rb, cli.rbでSSLSocket自体がちゃんと動くか試してみよう。
% ruby svr.rb
["2000", "sample.key", "sample.crt"]
で待ちに入る。別のターミナルから
% ruby cli.rb
connect to 127.0.0.1.
SSLSocket initialized.
SSLSocket connected.
serialNumber = 1
subject      = /C=JP/ST=Some-State/L=Some-City/O=Some-Group/CN=J. Random User
issuer       = /C=JP/ST=Some-State/L=Some-City/O=Some-CA/CN=GOTOU YUUZOU
notBefore    = Jan  1 20:46:13 2001 GMT
notAfter     = Jan  1 20:46:13 2002 GMT
することでセッションが始まる。このときにサーバ側には
connect from 127.0.0.1.
SSLSocket initialized.
SSLSocket accepted.
と表示される。 ここでクライアント側でなにか入力するとサーバ側はそのままpで表示する。 helloなら"hello\n"という具合に。 ここまで動けばSSLSocket自体は正しくインストールされてると考えていいだろう。

_ wget.rb:

wget.rbをちょっと書き換えて簡単に試してみよう。 まずはユーザ名とパスワードだ。 curlは-vオプションをつけるとverbose modeになる。 これを見ると
Authorization: Basic QUJDMDAwMDA6cGFzc3dvcmQ=
がそれにあたる。 見るからにbase64でエンコードされてることがわかる。
% ruby -e 'p "QUJDMDAwMDA6cGFzc3dvcmQ=".unpack("m")'
["ABC00000:password"]
つまり
'Authorization: Basic' + ["#{username}:#{password}"].pack('m').chomp + "\r\n"
をヘッダに追加すればいい。 これでデータライブラリのダウンロードは可能になる。 なぜか直接ダウンロードするのは許されてないので
https://iw.nifty.com/iw/nifty/iwforum/index.html
であらかじめログイン操作をしておく。
最初のほうにある
print "pid = #{$$}\n"
はリダイレクトするとまずいのでSTDERRに出すか削除しよう。
とりあえずは直接
sock.write "Authorization: Basic QUJDMDAwMDA6cGFzc3dvcmQ=\r\n"
をGETの次の行に入れて実験。これで
% ruby wget.rb \
  https://iw.nifty.com:443/iw/nifty/fgalts/lib/1/DLB.259/FDVR0303.LZH \
  > fdvr0303.lzh
という感じでダウンロードできる。 ポート番号を指定してるのはhttpsというschemeが/etc/servicesになかったから。
GET methodの場合はこれくらいで済んだけど、 POST methodだともうちょっとやることが増える。

JARH

print ['Just another Ruby hacker,'].delete_at(0)

<Prev(,) | Next(.)> | Recent(/)>> | RDF


WWW を検索 jarp.does.notwork.org を検索

わたなべひろふみ
Key fingerprint = C456 1350 085F A320 C6C8 8A36 0F15 9B2E EB12 3885
Valid HTML 4.01!