〜2006年6月下旬〜
なぜか終わってから思い出す。今日も見れず。
なんか初めてみるメッセージ。
- Server Error
- Gmail is temporarily unavailable. Cross your fingers and try again in a few minutes. We're sorry for the inconvenience.
全部Gmailに送ってるだけにちょっと困る。
早朝にそなえて起きてるか寝るかどっちにしよう迷ったが、早く寝ることにした。おやすみ。
最近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なんて立ち上げてないし、なんか面倒だな。 放っといてみる。
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"
yum updateしたらzshを立ち上げるたびに文句を言われるようになった。 3日ほど放置してたがいい加減調べることにした。 問題のメッセージは
/etc/profile.d/kde.sh:4: = not found
で、該当する行は
if [ "$PRELINKING" == yes ] ; then
だ。==がまずいね。bashならありだけど。
if [ "$PRELINKING" = yes ] ; then
が正解。
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は整数も受け付けて欲しいな。
あまり知られてないけどArray#*で整数じゃなくて文字列を渡すとjoinになる。
% ruby -e 'p [0,1,2]*" "' "0 1 2"
Ruby Golfでよく使われる。
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。
ELECOMの安い光学式マウスを買った。1500円ぐらい。 今度は 無駄に青白く光らない。 ちょっと小さめで小さめのマウスパッドとの相性もいいようだ。 ただ、PS/2に差すとなぜかあっちこっちに飛ぶようで、 USBで使うようにしてる。やっとUSBハブが役に立つときがきた。
久し振りに戻したら、やはりまつもとさんのとこではブロックしてしまったらしい。 でも、とりあえずこのままで様子見ということで。
現在の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
大宮駅に着くととてつもない轟音が響き渡っていた。
その音の源を探ると天窓を叩く雨だった。
このままじゃ帰れそうもないので、
駅ビルの本屋で時間を潰そうとエスカレータを3階ほど昇る。
突然停止しあたりも真っ暗に。
停電だ。雷が落ちたか?
そこでどういう行動をとるかというと、とりあえず目的階までは歩いて昇る。
なぜかみんなそんな感じ。
で、この突然止まったエスカレータってのがやたらと歩きづらい。
動いてるときは手摺りに捕まらなくてもまったく問題なく歩けるのに。
たびたび話題になるけど、これってなんでだろうねえ。
早速更新。
% 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
いいみたい。
変なことを思いついた。 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で書くにはどうすればいいのか? つづく(かもしれない)。