Just another Ruby porter,

〜2006年6月下旬〜


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

2006-06-21 (Wed)

[WC] ASCII-WM 2006

なぜか終わってから思い出す。今日も見れず。

[Gmail] Gmail不調

なんか初めてみるメッセージ。

Server Error
Gmail is temporarily unavailable. Cross your fingers and try again in a few minutes. We're sorry for the inconvenience.

全部Gmailに送ってるだけにちょっと困る。


2006-06-22 (Thu)

早寝

早朝にそなえて起きてるか寝るかどっちにしよう迷ったが、早く寝ることにした。おやすみ。


2006-06-23 (Fri)

[FC5] カウントダウン

最近Subject: The certificate for xxxxxxxx will expire in 24 days というメールがrootから来てるんだけど、あと24日以内になんとかしないといけないらしい。

 ################# SSL Certificate Warning ################

  Certificate for hostname 'xxxxxxxx', in file:
     /etc/pki/tls/certs/localhost.crt

  The certificate needs to be renewed; this can be done
  using the 'genkey' program.

  Browsers will not be able to correctly connect to this
  web site using SSL until the certificate is renewed.

 ##########################################################
                                  Generated by certwatch(1)

http serverなんて立ち上げてないし、なんか面倒だな。 放っといてみる。


2006-06-24 (Sat)

[Mail] Your account access has been limited !

PayPalからきたメールがなんともあやしい。 ヘッダを確認してみるとpaypal.comからじゃないし、 HTMLメールになっているのもおかしい。

Security Center Advisory!

PayPal is constantly working to ensure security by regularly screening
the accounts in our system. We recently reviewed your account, and we
need more information to help us provide you with secure
service. Until we can collect this information, your access to
sensitive account features will be limited or terminated. We would
like to restore your access as soon as possible, and we apologize for
the inconvenience.

Why is my account access limited?

Your account access has been limited for the following reason(s):

# Jun 24, 2006: We have reason to believe that your account was
accessed by a third party. Because protecting the security of your
account is our primary concern, we have limited access to sensitive
PayPal account features. We understand that this may be an
inconvenience but please understand that this temporary limitation
is for your protection.


Click here to Remove Limitations


Completing all of the checklist items will automatically restore your
account access.

Thank you for using PayPal! The PayPal Team
Please do not reply to this e-mail. Mail sent to this address cannot
be answered. For assistance, log in to your PayPal account and choose
the "Help" link in the footer of any page.

To receive email notifications in plain text instead of HTML, update
your preferences here.

文面に名前がない。Click here to Remove Limitationsのリンクが

http://2080409283/secure/redirect.to/以下省略

といかにもあやしげ。IPアドレスを10進で表現してるあたりもせこいな。

% ruby -e 'p [2080409283].pack("N").unpack("C4").join(".")'
"124.0.134.195"

2006-06-25 (Sun)

[Zsh] /etc/profile.d/kde.sh:4: = not found

yum updateしたらzshを立ち上げるたびに文句を言われるようになった。 3日ほど放置してたがいい加減調べることにした。 問題のメッセージは

/etc/profile.d/kde.sh:4: = not found

で、該当する行は

if [ "$PRELINKING" == yes ] ; then

だ。==がまずいね。bashならありだけど。

if [ "$PRELINKING" = yes ] ; then

が正解。

[Ruby] 100までの整数から素数を列挙せよ

OpenSSLだと2が素数にならないのが痛い。

% openssl prime 2
2 is not prime

一応RubyのOpenSSLを使ったバージョン。

% ruby -ropenssl -e 'puts((1..100).select{|i|OpenSSL::BN.new(i.to_s).prime?(0)||i==2}*" ")'       
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

やっぱOpenSSL::BNは整数も受け付けて欲しいな。

[Ruby] Array#*でjoin

あまり知られてないけどArray#*で整数じゃなくて文字列を渡すとjoinになる。

% ruby -e 'p [0,1,2]*" "'
"0 1 2"

Ruby Golfでよく使われる。


2006-06-26 (Mon)

[Ruby] headとtail

Rubyの場合は富豪的には

print ARGF.to_a.first(10)
print ARGF.to_a.last(10)

でheadとtailができるが、もっと変なのを考えてみた。

print ARGF.read[/(^.*\n){1,10}/]
print ARGF.read[/(^.*\n){1,10}\Z/]

でheadとtail。

[PC] マウス

ELECOMの安い光学式マウスを買った。1500円ぐらい。 今度は 無駄に青白く光らない。 ちょっと小さめで小さめのマウスパッドとの相性もいいようだ。 ただ、PS/2に差すとなぜかあっちこっちに飛ぶようで、 USBで使うようにしてる。やっとUSBハブが役に立つときがきた。


2006-06-27 (Tue)

[CVS] loginfo_version.rb

久し振りに戻したら、やはりまつもとさんのとこではブロックしてしまったらしい。 でも、とりあえずこのままで様子見ということで。

現在のversion.h自動更新のloginfoは

ALL $CVSROOT/CVSROOT/loginfo_version.rb %p %s

という感じでloginfo_version.rbはこんな感じ。

#! /usr/bin/ruby

require 'tmpdir'
require 'fileutils'

def workdir
  dir = File.join(Dir.tmpdir, 'tmp-' + Process.pid.to_s + '-' +
    Time.now.to_i.to_s)
  Dir.mkdir dir
  Dir.chdir dir do
    yield dir
  end
  FileUtils.rm_rf dir
end

#def system(*args)
#  print args, "\n"
#  super
#end

mod = ARGV.shift
exit unless %r{^ruby(/|$)} =~ mod
ARGV.each do |x|
  exit if x == 'version.h'
end
mod = mod[/^(.*?)\//] if /\// =~ mod

while line = STDIN.gets
  case line
  when /Tag: (.*)/
    branch = '-r ' + $1
  when /(Modified|Added) Files:/
    doit = true
  end
end

exit unless doit

version_h = File.join(mod, "version.h")
now = Time.now
today = now.strftime("%Y-%m-%d")
formats = {
  'DATE' => '"%Y-%m-%d"',
  'TIME' => '"%H:%M:%S"',
  'CODE' => '%Y%m%d',
  'YEAR' => '%Y',
  'MONTH' => '%m',
  'DAY' => '%d'
}

workdir do |work|
  print "checking out version.h\n"
  system "cvs -Q co #{branch} #{version_h}"
  print "modifing version.h\n"
  all = File.read(version_h)
  ret = all.gsub!(/RUBY_RELEASE_(#{formats.keys.join('|')})(\s+)(.+)/) do
    "RUBY_RELEASE_" + $1 + $2 + now.strftime(formats[$1]).sub(/^0/, '')
  end
  if ret
    open(version_h, "w") do |fh| fh.print all end
    print "checking in version.h\n"
    system "cvs -Q ci -m #{today} #{version_h}"
  end
end

2006-06-28 (Wed)

止まったエスカレータ

大宮駅に着くととてつもない轟音が響き渡っていた。
その音の源を探ると天窓を叩く雨だった。
このままじゃ帰れそうもないので、
駅ビルの本屋で時間を潰そうとエスカレータを3階ほど昇る。
突然停止しあたりも真っ暗に。
停電だ。雷が落ちたか?
そこでどういう行動をとるかというと、とりあえず目的階までは歩いて昇る。
なぜかみんなそんな感じ。
で、この突然止まったエスカレータってのがやたらと歩きづらい。
動いてるときは手摺りに捕まらなくてもまったく問題なく歩けるのに。
たびたび話題になるけど、これってなんでだろうねえ。


2006-06-29 (Thu)

[Ruby] RubyGems 0.9.0 Release

早速更新。

% gem env
Rubygems Environment:
  - VERSION: 0.8.11 (0.8.11)
  - INSTALLATION DIRECTORY: /usr/local/lib/ruby/gems/1.8
  - GEM PATH:
     - /usr/local/lib/ruby/gems/1.8
  - REMOTE SOURCES:
     - http://gems.rubyforge.org
% gem up --system
Upgrading RubyGems...
Updating Gem source index for: http://gems.rubyforge.org
Attempting remote upgrade of rubygems-update
Attempting remote installation of 'rubygems-update'
Successfully installed rubygems-update-0.9.0
Updating version of RubyGems to 0.9.0
Installing RubyGems 0.9.0
<途中略>
As of RubyGems 0.8.0, library stubs are no longer needed.
Searching $LOAD_PATH for stubs to optionally delete (may take a while)...
...done.
No library stubs found.

  Successfully built RubyGem
  Name: sources
  Version: 0.0.1
  File: sources-0.0.1.gem
RubyGems system software updated
% gem env
Rubygems Environment:
  - VERSION: 0.9.0 (0.9.0)
  - INSTALLATION DIRECTORY: /usr/local/lib/ruby/gems/1.8
  - GEM PATH:
     - /usr/local/lib/ruby/gems/1.8
  - REMOTE SOURCES:
     - http://gems.rubyforge.org

いけてるようだ。railsを上げてみよう。

% gem up -y rails
Updating installed gems...
Attempting remote update of rails
ERROR:	While executing gem ... (Gem::GemNotFoundException)
    Could not find rails (> 0) in the repository

なぜか失敗する。

% hexdump -C $(gem env gempath)/source_cache
00000000  04 08 7b 06 22 1e 68 74  74 70 3a 2f 2f 67 65 6d  |..{.".http://gem|
00000010  73 2e 72 75 62 79 66 6f  72 67 65 2e 6f 72 67 6f  |s.rubyforge.orgo|
00000020  3a 1e 47 65 6d 3a 3a 53  6f 75 72 63 65 49 6e 66  |:.Gem::SourceInf|
00000030  6f 43 61 63 68 65 45 6e  74 72 79 07 3a 0a 40 73  |oCacheEntry.:.@s|
00000040  69 7a 65 69 03 e4 b9 3a  3a 12 40 73 6f 75 72 63  |izei...::.@sourc|
00000050  65 5f 69 6e 64 65 78 6f  3a 15 47 65 6d 3a 3a 53  |e_indexo:.Gem::S|
00000060  6f 75 72 63 65 49 6e 64  65 78 06 3a 0a 40 67 65  |ourceIndex.:.@ge|
00000070  6d 73 7b 00                                       |ms{.|
00000074

こんなに小さいわけないしなあ。キャッシュがこわれてるようだ。消そう。

% rm $(gem env gempath)/source_cache
% gem up -y rails
Updating installed gems...
Bulk updating Gem source index for: http://gems.rubyforge.org
Attempting remote update of rails
Successfully installed rails-1.1.3
Successfully installed rake-0.7.1
Successfully installed activesupport-1.3.1
Successfully installed activerecord-1.14.3
Successfully installed actionpack-1.12.2
Successfully installed actionmailer-1.2.2
Successfully installed actionwebservice-1.1.3
Installing ri documentation for rake-0.7.1...
Installing ri documentation for activesupport-1.3.1...
Installing ri documentation for activerecord-1.14.3...
Installing ri documentation for actionpack-1.12.2...
Installing ri documentation for actionmailer-1.2.2...
Installing ri documentation for actionwebservice-1.1.3...
Installing RDoc documentation for rake-0.7.1...
Installing RDoc documentation for activesupport-1.3.1...
Installing RDoc documentation for activerecord-1.14.3...
Installing RDoc documentation for actionpack-1.12.2...
Installing RDoc documentation for actionmailer-1.2.2...
Installing RDoc documentation for actionwebservice-1.1.3...
Gems: [rails] updated

いいみたい。


2006-06-30 (Fri)

[Ruby] dl/win32.rbをLinuxで使ってみる

変なことを思いついた。 dl/win32.rb自体はwin32に依存してるものはなにもない。 単にWin32APIとAPI互換のライブラリを用意したものだけなので。

というわけで試してみる。 unameの話題が出てた ので、これのLinux版。man 2 unameしてみると

#include <sys/utsname.h>
int uname(struct utsname *buf);

で、/usr/include/{sys,bit}/utsname.hを見ると、なんだかんで

struct utsname {
        char sysname[65];
        char nodename[65];
        char release[65];
        char version[65];
        char machine[65];
};

ということらしい。つまりバッファとしては65*5バイトあればいいわけだ。

require 'dl/win32'

uname = Win32API.new('/lib/libc.so.6', 'uname', 'P', 'I')
ptr = " " * 65 * 5
uname.call(ptr)
p ptr.unpack("A65" * 5)

というのを実行してみると

["Linux", "cow.localdomain", "2.6.16-1.2133_FC5smp", "#1 SMP Tue Jun 6 01:52:09 EDT 2006", "i686"]

と無事得られた。

さて、これをRuby/DLで書くにはどうすればいいのか? つづく(かもしれない)。


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