Just another Ruby porter,
〜2001年3月中旬〜
■
mkmf.rb
sslhttp.rbがnet/にインストールされてない。
まずい。2/8での変更が原因だ。というわけでcommit。
■
SSLSocketでNifty
_ wget2.rb:
というわけでsslhttpのお世話になるわけなんだけど、
sslhttpは内部的にnet/httpをrequireし、
必要なmethodだけ置き換えることでhttpsでのアクセスを可能にしてる。
これでnet/httpのHTTP#getやHTTP#postが使えるわけだ
*1。
sslhttpを使ってwget.rbを書き換えたものがwget2.rbだ。
その前にNet::NetPrivate::HTTPResponseがその当時とは違うみたいなのでパッチ。
--- lib/net/sslhttp.rb.orig Wed Feb 7 08:25:05 2001
+++ lib/net/sslhttp.rb Sun Mar 11 01:01:42 2001
@@ -46,3 +46,3 @@
resp = ::Net::NetPrivate::HTTPResponse.new(
- status, discrip, @socket, false)
+ status, discrip, @socket, false, @http_version)
_ nifget.rb:
iw.nifty.comは
POST https://iw.nifty.com:443/iw/nifty/mylist/nifty.log HTTP/1.1
ではURLエラーになってしまい
POST /iw/nifty/mylist/nifty.log HTTP/1.1
としないといけない。
これに対応するにはnet/httpにはちゃんとmethodが用意されていて、
POSTに渡すpathは
module Net
class HTTP
module ProxyMod
alias orig_edit_path edit_path
def edit_path( path )
if use_ssl
if /^iw\.nifty\.com/ =~ addr_port
path
else
'https://' + addr_port + path
end
else
'http://' + addr_port + path
end
end
end
end
end
のようにedit_pathで決まる。
あとgetservbynameを使わない、~/.netrcを見るとか
*2、いろいろ改造してできあがったのが
httpsget.rbだ。
% ruby httpsget.rb -v -a -o 'nif%Y%m%d'.log \
https://iw.nifty.com/iw/nifty/mylist/nifty.log \
save=on \
logout=on \
/iw/nifty/fgalts/mes/all/index.html=checked \
/iw/nifty/fext/mes/all/index.html=checked \
/iw/nifty/funix/mes/all/index.html=checked \
/iw/nifty/flinux/mes/all/index.html=checked \
/iw/nifty/fpl/mes/5/index.html=checked
という感じで使う。urlだけだとGET methodになる。-vはverbose。
-oで出力ファイル名の指定(Time.now.strftimeしてるので%Yとかが使える)、
さらに-aをつければアペンドモードになる。デフォルトはpathのbasename。
% ruby httpsget.rb http://www.ruby-lang.org/~rubikitch/refm/ruby162-refm.rd.gz
で今話題のリファレンスマニュアルのRD版が取ってこれる。
*1:
get2, post2を使うほうがいいかもしれない。
*2:
machine, login, passwordは必ず一行でなければならないという制限があり、
かなりなんちゃってではあるが。
■
rubyist ML
変更したとたんメールが来なくなって様子見どころじゃなくなっていたが、
今日久し振りに来た。が、やはり2通ずつ来るなあ。
一旦やめて入り直してみよう。
■
JARH
print '%s %s %s %s' % %w[Just another Ruby hacker,]
最初はnifty専用のつもりだったけど、
別にそうする必要もないのでhttpsget.rbという名前に変えたのだった。
■
rubyist ML
入り直したらよさげ。
freemlってなんかわけのわからんメールをデフォルトで毎週送ってくるし、
あまり感蝕はよくない。
■
gcc-2.95.2-8, gcc-2.95.2-9
gcc-2.95.2-8が土曜日にテストリリースされたらしい。
-mno-cygwinを指定すれば-mwin32と-D__MSVCRT__が自動的につく。
早速mirror siteに行ってみたらすでにgcc-2.95.2-9になってた。
なんだろう?--dll-search-prefix=cygの追加かなあ。
でもmingw packageはまだ更新されてないから
stat問題は何も解決されない。
■
JARH
'cker,by haer RuanothJust '.scan(/.{5}/).reverse.display
■
gcc-2.95.2-9
今日もちょっとspecsに変更あり。
てゆうか昨日までは-mno-cygwinがエラーになってた。
そういえばspecsの*startfile:の最初は
%{shared|mdll: %{mno-cygwin:dllcrt2%O%s}}
となってるけどcrt2.oと同じように
%{shared|mdll: %{mno-cygwin:mingw/dllcrt2%O%s}}
じゃないとgcc -sharedでdllcrt2.oが見つからないというエラーになる。
big endianなmachineだとまずいです。ここはpack('v*')を使いましょう。
あとchopしたほうがいいかも。
■
JARH
'abcdefghijklmnopqrstuvwxy'.tr('a-y','Just another Ruby hacker,').display
■
rubyist ML
何度も出たり入ったりしてごめんね。まただめだった。
今度はfreemlのMyPageとかいうのもやめてから入り直してみた。
MyPageが元凶か?
winsup/cygwin/path.ccとか見ると
strrchr (src, '\\'))
のように'\\'があちこちにちりばめられてるので、どうにもならないと思います。
statを自前で持つのも現実的じゃないし。
■
JARH
',rekcah ybuR rehtona tsuJ'.scan(/.{1}/).reverse.display
■
SSLSocket 0.2.2
proxy経由だと
write "CONNECT iw.nifty.com:443 HTTP/\r\n"
write "\r\n"
という感じでバージョンが入らない。ひょっとしてこれが正解?
--- lib/net/https.rb.orig Mon Mar 12 04:16:05 2001
+++ lib/net/https.rb Fri Mar 16 00:57:55 2001
@@ -113,3 +113,3 @@
if proxy?
- resp = Conn.new.exec(@socket, @address, @port, @http_version)
+ resp = Conn.new.exec(@socket, @address, @port, @curr_http_version)
if resp.code != '200'
httpsget.rbはNet::HTTP::Get, Net::HTTP::Postを使ってみた。
CVS(ruby_1_6)最新じゃないとだめかも。
■
JARH
print 'Just another Ruby hacker,'%%; (^_^;;;
一年前に試したときはAltキーに触った瞬間に落ちてしまったけど、
結構安定してきたようだ。愛用のIceWMをmakeして入れてみた。
が、ちょっとサーバとして使うのは遅いかな。
ktermだけにしよう。
でなんだかんだでVNCを使うことにした。
って今まで通りX Visionでいいんだけど。
■
JARH
print('Just another Ruby hacker,'% %- ;-)
cygwin1.dllの中の話なのでmkisofs側ではたぶん対処しようがないと思います。
mkisofsのソースを見たわけじゃないけど。
% cat stat.c
#include <stdio.h>
#include <sys/stat.h>
main()
{
struct stat buf;
printf("%s: %d\n", "\x95\x5c", stat("\x95\x5c", &buf));
}
% gcc stat.c -o stat
% touch `printf "\x95\x5c"`
% ./stat
表: -1
% gcc -bmingw stat.c -o mstat
% ./mstat
表: 0
つまりCygwin版rubyも対処しようがないわけで、
ことある毎にCygwin自体が対応してないから日本語のファイル名は使えません、
といいわけしているのはこれが理由です。
■
Uconv 0.4.6
折角なので-DUSE_WIN32APIを追加した。
■
紛らわしい名前
今更ながら気づくのが遅いが、芸能界には
水野真紀と水野美紀
坂井真紀と酒井美紀
酒井若菜と酒井彩名
後藤理沙と須藤理彩
椎名桔平と椎名純平
西村雅彦と西村和彦
がいる。字は間違っているかも。
■
ドラえもん
ドラえもんは常に3mm宙に浮いてるらしい。
■
S.O.S
がーん。最終回は15分拡大版だったのか。
■
JARH
'r,keac hbyRur heotant usJ'.scan(/.{1,2}/).reverse.display
■
emacs 21.0.100
gcc-2.95.2-9でもmakeできるようにしてみました。ってemacs21-users-ja MLに出すべきか。
これはleimの対応も入ってます。
_ 無限ループ:
command.comだと無限ループになるのはラベルは8バイトまでしか有効でないから。
つまりcheckw32apiというラベルはcheckw32までしか認識されない。
:checkw32api
:checkw32api1
:checkw32api2
と3つラベルがあってもgoto checkw32api1は、
一番最初に現われるcheckw32apiへ飛ぶ。
cmd.exeだとちゃんとcheckw32api1へ飛ぶ。
Win9x/MEとWinNT/2kとの違いだから注意しよう。
プラットフォームSDKのwin95cmd.exeだとcmd.exeという名前を含んでいるだけあって問題ない。
Win98上でもふだんはCygwin版のzshを使っているので、
configure.batは
% win95cmd /c configure.bat --no-debug
という感じで実行している。
だから無限ループに関してはしばらく気づかなかった。
_ $(CURDIR):
Cygwin版makeは当然Cygwin流のpath表現になるわけで、
これをmingw版emacsに渡してもjapan-utilは見つからない。
leimでこけるのはこれが原因。cygpath -wで変換してあげよう。
ただし\はquoteする必要があり面倒なので/に変換してしまおう。
というわけで$(CURDIR)は全部
$(subst \,/,$(shell cygpath -w $(CURDIR)))
にした。
_ bmingw:
bmingw packageでmakeしたいときは
make NOCYGWIN=-bmingw
とする。があまり意味はない。
■
Racc 1.3.8
未だにclean問題は残っているけど、このままでいいのかな?
毎回setupする度にcleanするんじゃmakeの意味がないし、
何のためにcleanしてるのかよくわからない。
できればsetup.rbはsrcdir対応してくれるとうれしいんだけどなあ。
% tar xfvz racc-1.3.8.tar.gz
% mkdir linux cygwin mingw
% cd linux
% ruby ../racc-1.3.8/setup.rb config
% ruby ../racc-1.3.8/setup.rb setup
% sudo ruby ../racc-1.3.8/setup.rb install
% cd ../cygwin
% i386-cygwin-ruby ../racc-1.3.8/setup.rb config
% i386-cygwin-ruby ../racc-1.3.8/setup.rb setup
% i386-cygwin-ruby ../racc-1.3.8/setup.rb install
% cd ../mingw
% i386-mingw32-ruby ../racc-1.3.8/setup.rb config
% i386-mingw32-ruby ../racc-1.3.8/setup.rb setup
% i386-mingw32-ruby ../racc-1.3.8/setup.rb install
てな具合にできるとありがたい。
■
termios
versionがないので今日の日付をversionにしとこう。
■
syslog
Cygwinでもsyslogが使えるみたいなので
*1、
syslog拡張モジュールを入れようかなと思ったが、
どれを入れればいいんだろう?
よしだむさんのとRAAに登録されているのと2つある。
実は自分でも作ってたりするので3つある。
module Syslogなところはよしだむさんのと同じ仕様だけど、
Syslog::syslogはrb_f_sprintfを使っているのでAmos Gouauxさんのと同じだ。
*1:
WinNT/2kだとイベントとして登録されるのでイベントビューワで見ることができる。
Win9x/MEだとC:/CYGWIN_SYSLOG.TXTというファイルに書かれる。
inetdとかsshdとか動かすと実はちゃんとlogが残ってる。
■
GREATEST HITS
LOVE PSYCHEDELICOのGREATEST HITSを借りてきた。
ついでにS.O.Sも終わって聞けなくなってしまったのでABBAのGREATEST HITSも借りた。
どちらもGREATEST HITSだと気づいたのは家に帰ってから。
■
JARH
print 'Just another Ruby hacker,' * ('Just another Ruby hacker,' =~ /u/)
え、6行でできちゃうの?見てみたいなあ。
qrpffのような感じだと見てもわからないけど。
■
ruby 1.6.3
MLでのアナウンスはないが、http://www.ruby-lang.org/にもすでにリリース
したと書いてあるので、cygwin,mingw,djgpp版を用意した。
■
vrswin010302, vruby010307
更新。
■
JARH
print 'uJtsa onhtreR bu yahkcre,'.unpack('v12c').pack('n12c')
■
make install
Win98でtargetをi386-mingw32にしてmake installしたら、
一時間経っても終わらなかった。Cygwinのzsh上だと特に遅くなる気がする。
というか全く使いものにならないので、
独断と偏見によりwin32/win32.cとは訣別したい。つまり-UNTだ。
どうせなら
- binmodeのみサポート
- スピード重視
- Ctrl-Cで止まらなくても気にしない
でどう?
■
stat
'/'とか':'で終わってたら'.'を足すというのが、
意外といいんじゃないかという気がする。
で、UNCの場合は逆に
\\host\share
は
\\host\share\.
のように足してからstatする。
なんでもかんでも'.'で終わるようにしてしまう。
commitしちゃったけど、WinNTではどうかなあ。明日試そう。
■
JARH
print 'uJtsa onhtreR bu yahkcre,'.gsub(/(.)(.?)/, '\2\1')
わたなべひろふみ
Key fingerprint = C456 1350 085F A320 C6C8 8A36 0F15 9B2E EB12 3885