Just another Ruby porter,

〜2003年8月中旬〜


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

2003-08-11 (Mon)

[LLS][Ruby] Apacheのログ

LL土曜でApacheのログの話のときにtime.rbが使えないかという質問があったけど、 だめだねえ。 ParseDate::parsedateがというかDate::_parseが対応してない。

Date::_strptimeを使えば以下のように書ける。

% ruby -rdate -rpp \
    -e 'pp Date._strptime(ARGV[0], "%d/%b/%Y:%T %Z")' \
    '11/Aug/2003:22:36:08 +0900'
{:zone=>"+0900",
 :sec=>8,
 :year=>2003,
 :hour=>22,
 :offset=>32400,
 :mday=>11,
 :min=>36,
 :mon=>8}

これをTimeオブジェクトにするにはparsedateのようにvalues_atを使うのが簡単。

% ruby -rdate -e '
  p Time.mktime(*Date._strptime(ARGV[0], "%d/%b/%Y:%T %Z").
  values_at(:year, :mon, :mday, :hour, :min, :sec, :zone))' \
  '11/Aug/2003:22:36:08 +0900'
Mon Aug 11 22:36:08 JST 2003

[GNU] GCC 3.3.1

GCC 3.3を作ったときと同じ手順。

Rubyで試す。問題なし。


2003-08-12 (Tue)

[Ruby] un.rb

実はun.rbにはワイルドカードを展開する処理が入っている。 これはmkmf.rbで作られたMakefileの中に

CLEANOBJS     = "*.{o,a,s[ol],pdb,bak}"

という記述があることからもわかるように、 shellに依らないワイルドカードを使いたいがためである。 でもshellに展開されないようにquoteしなきゃいけないってのは、 ちょっと気持ち悪いかもしれない。


2003-08-13 (Wed)

[Ruby] pack("U")

UTF-8に変換するなら、pack("U")を使う手もある。

% ruby -e 'p [0xf1].pack("U")'             
"\303\261"
% ruby -riconv -e 'p Iconv.iconv("UTF-8", "ISO-8859-1", "\xf1")'   
["\303\261"]

2003-08-14 (Thu)

[Ruby] cygruby18.dll

raa:ruby-serialportバイナリが欲しいという話なので、1.8用を用意しとこう。で、ここではたと気づく。 今現在うちで作っている環境のインポートライブラリはcygruby18.dllに依存しているから、 これで作ってしまうと1.8のリリース版では使えないってことになる。 うーむ。リリース版に逆forwarding DLLを含めるべきか。


2003-08-15 (Fri)

[Ruby] PragProgRuby用の拡張ライブラリをMinGWで作る

今頃になってまとめるのもなんだけど、なんとなく形になってきた。 アイディアとしてはRUBY_PLATFORMと$LOAD_PATHのmswin32をmingw32に置き換えて、 $prefix/lib/ruby/i386-mingw32に偽のrbconfigを置けば、

% ruby -rfake-mingw32 extconf.rb

で、いけるはずだという算段。fake-mingw32.rbはこんな感じ。

class Object
  platform = RUBY_PLATFORM.dup
  remove_const :RUBY_PLATFORM
  platform.sub!(/mswin32/, "mingw32")
  RUBY_PLATFORM = platform
  if defined? PLATFORM
    remove_const :PLATFORM
    PLATFORM = RUBY_PLATFORM
  end
  $LOAD_PATH.each do |x|
    x.gsub!(/mswin32/, "mingw32")
  end
end

でrbconfig.rbはこんな感じ。

require File.join(RUBY_PLATFORM.sub(/mingw32/, "mswin32"), "rbconfig")

module Config
  no_isocext = nil
  open(File.join(CONFIG["archdir"], "win32", "win32.h")) do |win32|
    no_isocext = win32.find do |x| /__NO_ISOCEXT/ =~ x end
  end
  if RUBY_VERSION < "1.7"
    MAKEFILE_CONFIG["LDSHARED"] = "dllwrap --target=mingw32 -mno-cygwin -s"
    MAKEFILE_CONFIG["CFLAGS"] = "-DNT -Os"
    MAKEFILE_CONFIG["DLDFLAGS"] = ""
  else
    MAKEFILE_CONFIG["LDSHARED"] = "gcc -mno-cygwin -shared -s"
    MAKEFILE_CONFIG["CFLAGS"] = "-Os "
    MAKEFILE_CONFIG["DLDFLAGS"] = " -Wl,--enable-auto-import,--export-all -L$(bindir)"
  end
  MAKEFILE_CONFIG["CPPFLAGS"] << " -D__NO_ISOCEXT" unless no_isocext
  MAKEFILE_CONFIG["LDFLAGS"] = "-Wl,--stack,0x02000000"
  MAKEFILE_CONFIG["LIBS"] = "-lwsock32"
  MAKEFILE_CONFIG["CC"] = "gcc -mno-cygwin"
  MAKEFILE_CONFIG["CPP"] = "gcc -mno-cygwin -E"
  MAKEFILE_CONFIG["GNU_LD"] = "yes"
  MAKEFILE_CONFIG["CPPOUTFILE"] = "-o conftest.i"
  MAKEFILE_CONFIG["OUTFLAG"] = "-o "
  MAKEFILE_CONFIG["YACC"] = "bison -y"
  MAKEFILE_CONFIG["RANLIB"] = "ranlib"
  MAKEFILE_CONFIG["AR"] = "ar"
  MAKEFILE_CONFIG["ARFLAGS"] = ""
  MAKEFILE_CONFIG["NM"] = "nm"
  MAKEFILE_CONFIG["DLLWRAP"] = "dllwrap"
  MAKEFILE_CONFIG["AS"] = "as"
  MAKEFILE_CONFIG["DLLTOOL"] = "dlltool"
  MAKEFILE_CONFIG["WINDRES"] = "windres"
  MAKEFILE_CONFIG["LN_S"] = ""
  MAKEFILE_CONFIG["SET_MAKE"] = ""
  MAKEFILE_CONFIG["OBJEXT"] = "o"
  MAKEFILE_CONFIG["XLDFLAGS"] = ""
  MAKEFILE_CONFIG["CCDLFLAGS"] = "-DIMPORT"
  MAKEFILE_CONFIG["DLEXT"] = "so"
  MAKEFILE_CONFIG["DLEXT2"] = "dll"
  MAKEFILE_CONFIG["LIBEXT"] = "a"
  MAKEFILE_CONFIG["LINK_SO"] = ""
  MAKEFILE_CONFIG["LIBPATHFLAG"] = " -L%s"
  MAKEFILE_CONFIG["LIBARG"] = "-l%s"
  MAKEFILE_CONFIG["LIBRUBYARG_SHARED"] = "-l$(RUBY_SO_NAME)"
  MAKEFILE_CONFIG["LIBRUBYARG_STATIC"] = "-l$(RUBY_SO_NAME)-static"
  MAKEFILE_CONFIG["STRIP"] = "strip"
  MAKEFILE_CONFIG["LIBRUBY_A"] = "lib$(RUBY_INSTALL_NAME).lib"
  MAKEFILE_CONFIG["LIBRUBY_SO"] = "$(RUBY_SO_NAME).dll"
  MAKEFILE_CONFIG["LIBRUBY_ALIASES"] = ""
  MAKEFILE_CONFIG["LIBRUBY"] = "$(RUBY_SO_NAME).lib"
  MAKEFILE_CONFIG["LIBRUBYARG"] = "-L. -l$(RUBY_SO_NAME)"
  MAKEFILE_CONFIG["TRY_LINK"] = ""
  MAKEFILE_CONFIG["COMPILE_C"] = ""
  MAKEFILE_CONFIG["COMPILE_CXX"] = ""
  MAKEFILE_CONFIG["COMPILE_RULES"] = ""
  MAKEFILE_CONFIG["COMMON_LIBS"] = "m"
  MAKEFILE_CONFIG["COMMON_MACROS"] = "WIN32_LEAN_AND_MEAN="
  MAKEFILE_CONFIG["COMMON_HEADERS"] = "windows.h winsock.h"
  MAKEFILE_CONFIG["SOLIBS"] = "$(LIBS)"
  MAKEFILE_CONFIG["configure_args"] = "--enable-shared"
  MAKEFILE_CONFIG["sitearch"] = "i386-msvcrt"
  remove_const :CONFIG
  CONFIG = {}
  MAKEFILE_CONFIG.each{|k,v| CONFIG[k] = v.dup}
  CONFIG.each_value do |val|
    Config::expand(val)
  end
  CROSS_COMPILING = nil unless defined? CROSS_COMPILING
end

基本はmingw32のrbconfig.rbを読んで差分だけを置き換えるという方針。 一応1.6,1.7にも対応してる(はず)。win32oleで試してみたら、これでrequireもできた。 よさげだ。


2003-08-16 (Sat)

[Linux] curl 7.10.7

今回はちゃんとopensslを認識。

今日も寒い。10月下旬の陽気。

[Ruby] fileutils

fake-mingw32に簡単なinstallerをつけよう。 fileutilsを使って書き上げてから、1.6だとだめだと気づいた。 ftoolsで書き直せばいいんだけど、どうせならでっちあげるか。

require 'ftools'
module FileUtils
  def self.makedirs(d, opt={})
    File.makedirs(d, opt[:verbose])
  end
  def self.install(s, d, opt={})
    File.install(s, d, opt[:mode], opt[:verbose])
  end
end

インストール用ならこの程度で十分でしょ。

[Windows2000] NTP

Windows 2000にはNTPサーバはないけど、時刻同期なら

> net time /setsntp:NTPサーバ

で可能。Windows Timeはこの同期を裏でやってくれるサービスなので、 これも動かしておく必要がある。


2003-08-17 (Sun)

[Win32] PDCurses 2.60

mingw,bcc32用のバイナリを用意。

[Ruby][MinGW] fake-mingw32

zipファイルを用意。


2003-08-18 (Mon)

[GCC] --with-local-prefix

Gentoo Linuxのgccを-vつきで実行してたら

存在しないディレクトリ "/usr/local/include" を無視します

が気になった。 prefixを/usrにしたら/usr/local/includeは最初から見ないはずなのにどうなっているのか? もう一度よく見るとconfigure時に

--with-local-prefix=/usr/local

と指定されてるようだ。こんなオプションがあったのか。 なるほどねえ。


2003-08-19 (Tue)

[Ruby] ASRでfake-mingw32

なるほど。 ASRはヘッダとライブラリがついてこないわけですね。 インポートライブラリが全部noになるのはmsvcrt-ruby18-static.libがないからです。 mkmf.logで確認してください。

> copy $ACTIVESCRIPTRUBY\bin\msvcrt-ruby18.dll $ACTIVESCRIPTRUBY\lib\msvcrt-ruby18-static.lib

とすればごまかすことも可能です。


2003-08-20 (Wed)

[Ruby] libcygwin-ruby18-static.a

結局おれが原因だったわけだよ。まぬけすぎ。

[Ruby] fake-mingw32 0.3

fake-mingw32をraccで試してみた。

ruby -rfake-mingw32 setup.rb config

と実行しても、setup.rbから呼ばれるrubyに-rfake-mingw32がつかない。 できあがったMakefileはmswin用になってしまう。 まあ、そんなに凝る必要もないので、環境変数RUBYOPTで対応。

ENV['RUBYOPT'] = 'rfake-mingw32'

をfake-mingw32.rb自身に追加することにしよう。

[Virus][Worm] Sobig.F

70通を越えた。凄まじい感染力だ。

TinyURL

長いURLを短くするサービス。これは面白い。


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