Just another Ruby porter,

〜2001年3月中旬〜


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

2001-03-11 (Sun)

mkmf.rb

sslhttp.rbがnet/にインストールされてない。 まずい。2/8での変更が原因だ。というわけでcommit。

RubyWin 0.0.3.0

更新。

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,]

2001-03-12 (Mon)

nifget.rb

最初は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

2001-03-13 (Tue)

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が見つからないというエラーになる。

pack('s*')

big endianなmachineだとまずいです。ここはpack('v*')を使いましょう。 あとchopしたほうがいいかも。

JARH

'abcdefghijklmnopqrstuvwxy'.tr('a-y','Just another Ruby hacker,').display

2001-03-14 (Wed)

rubyist ML

何度も出たり入ったりしてごめんね。まただめだった。 今度はfreemlのMyPageとかいうのもやめてから入り直してみた。 MyPageが元凶か?

Cygwin mkisofs

winsup/cygwin/path.ccとか見ると
strrchr (src, '\\'))
のように'\\'があちこちにちりばめられてるので、どうにもならないと思います。 statを自前で持つのも現実的じゃないし。

JARH

',rekcah ybuR rehtona tsuJ'.scan(/.{1}/).reverse.display

2001-03-15 (Thu)

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,'%%; (^_^;;;

2001-03-16 (Fri)

Cygwin/XFree86

一年前に試したときはAltキーに触った瞬間に落ちてしまったけど、 結構安定してきたようだ。愛用のIceWMをmakeして入れてみた。 が、ちょっとサーバとして使うのは遅いかな。 ktermだけにしよう。 でなんだかんだでVNCを使うことにした。 って今まで通りX Visionでいいんだけど。

JARH

print('Just another Ruby hacker,'% %- ;-)

2001-03-17 (Sat)

Cygwin mkisofs

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

2001-03-18 (Sun)

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/)

2001-03-19 (Mon)

LZW compressor

え、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')

2001-03-20 (Tue)

make install

Win98でtargetをi386-mingw32にしてmake installしたら、 一時間経っても終わらなかった。Cygwinのzsh上だと特に遅くなる気がする。 というか全く使いものにならないので、 独断と偏見によりwin32/win32.cとは訣別したい。つまり-UNTだ。
どうせなら

  1. binmodeのみサポート
  2. スピード重視
  3. Ctrl-Cで止まらなくても気にしない

でどう?

stat

'/'とか':'で終わってたら'.'を足すというのが、 意外といいんじゃないかという気がする。 で、UNCの場合は逆に
\\host\share
\\host\share\.
のように足してからstatする。 なんでもかんでも'.'で終わるようにしてしまう。 commitしちゃったけど、WinNTではどうかなあ。明日試そう。

JARH

print 'uJtsa onhtreR bu yahkcre,'.gsub(/(.)(.?)/, '\2\1')

<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!