〜2002年7月上旬〜
241通。そのうち韓国から74通。
やはり聞かれてしまったか。 Digital Marsはfunction prototypeに関して変な癖があって面倒なんだよね。 ちゃんと全部宣言を用意すればいいだけの話かもしれないけど。
こんなにしゃべる中田を初めて見た。
The Mingw32 Alternate C Runtime Library is being developed as a replacement for the Microsoft C Runtime Library (MSVCRT.DLL) because there is a need for a C Runtime Library for Mingw32 users which is not dependent on the Microsoft C Runtime Library, open-source, not licensed under the GPL or LGPL, and can be used freely for commercial use. It will be released under the BSD license. This library will be 100% ANSI/ISO compliant, including Unicode functions and ISO C99 functions.
なかなかよさげだ。
更新。
結局domainにlogonするのはやめた。 所有権だなんだと変更しまくってるうちにsshdの調子もよくなったようだ。 予想外の展開だ。
MS_CALLBACKは<openssl/e_os.h>で定義されてるのでossl.hでincludeするようにした。 でもRuby 1.6.7でnet/http.rbが激しく変更されててhttps.rbが使えない。
そういえば1.6.7になってget_responseが使えなくなったってだれか言ってたよね。 前田さんだった 。
更新。
今頃になって録っといたビデオを見る。 小泉今日子はどこにいたんだろう? 景品交換所の女か?
しまった。--with-ssl=/usr/local/sslを忘れてたか。
curl: (1) libcurl was built with SSL disabled, https: not supported!
でも以前はちゃんと自動的に認識してくれたような気がするんだけどなあ。
cURLはこれを試すためだったりするんだけど *1。 あらかじめ~/.netrcに
machine enter.nifty.com login ABC01234 password himitsu
を、~/.curlrcに
--netrc
を追加し、
% curl --sslv2 -o fgalts.log -F save=on -F logout=on \ -F /iw/nifty/fgalts/mes/all/index.html=checked \ https://enter.nifty.com/iw/nifty/mylist/nifty.log
という感じで、ダウンロード可能。
-F /iw/nifty/fgalts/mes/all/index.html=checked
の部分を複数用意すれば巡回も簡単。 allの部分はMREAD ROOM:で指定できるものが書けるというわけではなく、 会議室番号で指定するなら1個しか見てくれない。
-F /iw/nifty/fgalts/mes/1/index.html=checked \ -F /iw/nifty/fgalts/mes/3/index.html=checked \
と面倒でも全部個々に指定するしかない。でも実際は
MREAD ROOM:1,3
になるからそれほど馬鹿じゃないようだ。 形式は見るとわかるんだけど、 なぜかhtmlではなくNIFTYでは見慣れた例のテキスト形式になる。
この発言に対するコメント https://enter.nifty.com/iw/nifty/FGALTS/mes/1/com.cgi?885
と余計なものがつくのがあれだが、ここに発言の方法のヒントもあるしね。 あとはnif.rbのNifty::log2mailをちょっといじればok。 で、今は Ruby/libcurl が使えるか模索中。
てゆかおれは様子を見てNIFTYをやめる気だったはずじゃ?ま、いいか。
AntをC++で実装しなおしたのかと思ったがそういうわけでもなさそう。
% make cd ./Objects; g++ -DGCC -I../ -c ../StdAfx.cpp cd: can't cd to ./Objects g++: ../StdAfx.cpp: No such file or directory g++: no input files make: *** [Objects/StdAfx.o] Error 1
とあらかじめObjects/を掘らないといけないようだ。 あ、configureもあるね。ここでmkdir Objectsしてた。
../CmdLine.cpp: In member function `bool CCmdLine::IsSwitch(const char*)': ../CmdLine.cpp:144: `isdigit' undeclared (first use this function) ../CmdLine.cpp:144: (Each undeclared identifier is reported only once for each function it appears in.) make: *** [Objects/CmdLine.o] Error 1
<ctype.h>をincludeしてないな。 VC++ではなくても許されるってことか?
添付のmakefile.xmlにはVC++用しかないのが痛い。すぐに試せない。 でもこのmakefile.xmlを見てもわかりやすくなったとも思えないんだけど。
PATH=/usr/bin:$PATH make SHELL=/bin/bash bzImage \ 2959.83s user 220.48s system 97% cpu 54:24.66 total
2.4だと1時間10分ぐらいかかってたので-Mp,-MD効果はかなりあるな。 depもmodulesも指定しなくていいのは楽だ。
curlで実行していたのをそのままscriptに置き換えればいい。
require 'curl' curl = Curl.new curl.url = 'https://enter.nifty.com/iw/nifty/mylist/nifty.log' curl.netrc = true curl.postfields = 'save=on&logout=on&/iw/nifty/fgalts/mes/all/index.html=checked' curl.file = 'fgalts.log' curl.perform
curl.body_strを使ってもいい。
たとえばfgaltsの3番会議室なら
https://enter.nifty.com/iw/nifty/fgalts/mes/3/uploadgo.cgi
へPOSTすればよさそう。でPOST内容は
title=題名 text=内容 comment=番号
の3つでいいのかなあ。 textはCGI::escapeHTMLする必要あり。 改行もそのまま入れる。 新規発言の場合はcommentは要らない。 で、試すのはちと恐いね。でも試してしまった。
sigtext=
も必要のようだ。 でtextはCGI::escapeHTMLするんじゃなくて、 CGI::escapeぽいことをしないといけない。 日本語はしなくてもいいけど、SJISに変換したほうがよさそう。 そのままCGI::escapeでもいいのかなあ。 これがテストスクリプト。
#!/usr/local/bin/ruby -Ks require 'curl' curl = Curl.new curl.url = 'https://enter.nifty.com/iw/nifty/fgalts/mes/3/uploadgo.cgi' curl.netrc = true curl.verbose = true curl.postfields = 'title=interwayからのテスト&sigtext=&text=わたなべです。 Ruby/libcurlを使った発言テスト。 %26 -- わたなべひろふみ' curl.file = 'say.html' curl.perform
%26は&のテスト。
更新。なぜかext/gettext/gettextがコンパイルされないと思ったら、 *.oや*.soが残っているのであった。Linux以外の人は注意。
Ruby/libcurl を使って発言のテストをするときは、POSTの
sigtext=
を省略する。このときに
『戻る』ボタンまたはログアウト後に、直接発言を登録することはできませ ん。再度作成から行ってください。
というエラーになり、発言内容が表示されるので確認できるわけだ。
とりあえずnif.rbを使わなくてもいい環境はできそうだ。
こっそり用意されてる。
gcc 3.1.1だけど、 syslimits.hがないとか、 specsの変更で-mwin32しないと<windows.h>がみつからないとか、 いろいろまずいとこがある。 特に-mwin32に関してはwindresと絡むため、かなりまずい。
書き忘れてた。specsの-mwin32の部分だけどこうなってる。 例によって見やすいように適当に改行を入れる。
%{mwin32|mno-cygwin: \ -DWIN32 -D_WIN32 -D__WIN32 -D__WIN32__ \ %{!ansi:-DWINNT} \ -isystem ../include/w32api%s \ -isystem ../../include/w32api%s \ }
この-isystemなんだけど、%sは
/usr/lib/gcc-lib/i686-pc-cygwin/3.1.1
からの相対を意味する。展開し、正規化すると
-isystem /usr/lib/gcc-lib/i686-pc-cygwin/include/w32api \ -isystem /usr/lib/gcc-lib/include/w32api \
となるが、もちろんそんなとこにはない。全くの無駄な指定だ。この場合の正解は
-isystem ../../../../include/w32api%s \
だと思う。
実はそのあたりの個数を数えるのが面倒なので
-isystem /usr/include/w32api \
としてしまった。すでにuninstallしちゃったから次の更新時に確認しよう。
更新。
UNIX USERの8月号から:
autoload history-search-end zle -N history-beginning-search-backward-end history-search-end zle -N history-beginning-search-forward-end history-search-end bindkey '^p' history-beginning-search-backward-end bindkey '^n' history-beginning-search-forward-end
これでtcshと同じ挙動になる。
あぁ、全然違う。
-isystem ../include/w32api%s \ -isystem ../../include/w32api%s \
で合ってる。見つからないのは
%{mwin32|mno-cygwin: \
の所為だったんだ。%sは
Current argument is the name of a library or startup file of some sort. Search for that file in a standard list of directories and substitute the full name found.
なので、これっていろいろ試しまくるんだね。どういう順番になるのかな。 gcc --print-search-dirsのlibrariesがどうもあやしい。 Linux上で実験してみる。
% gcc --print-search-dirs |\ ruby -ne '$_.split(/[ :=]+/)[1..-1].each{|i|puts File.expand_path(i)} if /^lib/' /usr/local/lib/gcc-lib/i586-pc-linux-gnu/3.1 /usr/lib/gcc/i586-pc-linux-gnu/3.1 /usr/local/i586-pc-linux-gnu/lib/i586-pc-linux-gnu/3.1 /usr/local/i586-pc-linux-gnu/lib /usr/local/lib/i586-pc-linux-gnu/3.1 /usr/local/lib /lib/i586-pc-linux-gnu/3.1 /lib /usr/lib/i586-pc-linux-gnu/3.1 /usr/lib/
存在しない/usr/lib/gcc/i586-pc-linux-gnu/3.1で試そう。
% sudo mkdir -p /usr/lib/gcc/i586-pc-linux-gnu/3.1/foo % echo '*cpp: -isystem foo%s' >foo.specs % gcc -specs=foo.specs -v -E hoge.c |& sed -n '/^#i/,/^End/p' #include "..." search starts here: #include <...> search starts here: /usr/lib/gcc/i586-pc-linux-gnu/3.1/foo /usr/local/include /usr/local/lib/gcc-lib/i586-pc-linux-gnu/3.1/include /usr/include End of search list.
やっぱそうみたいだ。
rubyがエラーになるのには変わらないけど、
%{mwin32|mno-cygwin:
を
%{!mno-win32:
とすればとりあえずいける。 でも、systemがNoMemoryErrorになるので拡張ライブラリがmakeできない。 file.cだけgcc-2でコンパイルすれば大丈夫だ。なんかいやな感じ。