〜2001年3月上旬〜
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だけとても変だ。
% 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を使うよりは速いだろう。 特にデータライブラリなんかは。
machine iw.nifty.com login ABC00000 password ひみちゅ
で~/.curlrcはこんな設定にしてある。
--netrc
実際に送られてくるHTMLファイルを解析しながらの思考錯誤だから、
未読の管理がいまいちよくわからん。
あ、終わったらちゃんとlogoutしないと。
https://iw.nifty.com/iw/nifty/bye.html
放っておくとタイムアウトするまで課金される。
MultiByteToWideChar
とか
WideCharToMultiByte
を使えばUnicodeのテーブルを抱く必要はない気もする。
#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
% 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.logmes 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.logokだ。
#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
$libs = append_library($libs, "hoge")という感じかな。 あ、という意味ではなぜ$LIBSという名前じゃないのという疑問はあるかもしれない。 てゆうかおいらも今そう思ったし。
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だのは面倒なので試してない。
% 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で終わったら自動的にログアウトできる。
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のようにすれば簡単に会議室の巡回ができる。
% 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もあっさり通った。
have_library("crypto")
で済む話が
have_library("crypto", nil)
か
have_library("crypto", "")
としなきゃいけないし。もちろんちゃんと
have_library("crypto", "crypt")
と書けばいいんだけど、ライブラリの存在だけ調べれば十分でしょう。
% 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自体は正しくインストールされてると考えていいだろう。
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になかったから。