Just another Ruby porter,

〜2004年7月中旬〜


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

2004-07-11 (Sun)

[Ruby] max_by

MHフォルダのように次に作るべきファイル名を生成するにはふつうmaxを使う。 文字列を整数として扱うので

foo.max {|x, y| x.to_i <=> y.to_i}

という処理が出てくるが、sort_byの影響か

foo.max_by {|x| x.to_i}

と直したくなる。ってそんなmethodはない。

to_i自体遅い処理じゃないし、 そもそも最大値を求めるにはそれぞれ何度も計算しないので、 あまり意味がないような気もするが、 to_iを二度書くというのがなんかいけてないというか。

module Enumerable
  def max_by
    map{|x| [yield(x), x]}.max.last rescue []
  end
end

ぐぐったら、 青木さんも同じこと を思っていたらしい。って、 なかださんのとは同じ処理 だし。で、青木さんのは

module Enumerable
  def max_by
    max {|a,b| yield(a) <=> yield(b) }
  end
 
  def min_by
    min {|a,b| yield(a) <=> yield(b) }
  end
end

となっていた。なぜこっちを真っ先に思い浮かばないかな。

ruby-talk MLでもつい最近 話題になってる。 %Rubyのログを見るとknuさんまでもが。

[Ruby] ranges

ちょっと考えてみた。

def ranges(a)
  a.inject([]) do |x, i|
    if Array(x.last).last == i - 1
      i = Array(x.pop).first..i
    end
    x << i
  end
end

でどうかなと思ったら、(ranges of three or more)という条件があった。 じゃ、2個のときはばらしてあげよう。

def ranges(a)
  a.inject([]) do |x, i|
    last = Array(x.last)
    if last.last == i - 1
      i = Array(x.pop).first..i
    elsif last.size == 2
      x.concat Array(x.pop)
    end
    x << i
  end
end

今度は[1,2]が[1..2]になってだめ。

def ranges(a)
  a.inject([]) do |x, i|
    if Array(x.last).last == i - 1
      i = Array(x.pop).first..i
      i = i.to_a if i.first.next == i.last
    end
    x << i
  end.flatten
end

も、いまいちだな。そもそもArray化してる時点で無駄だ。


2004-07-12 (Mon)

[GNU] glibc 2.3.2その後

結局gcc 3.3.2, 3.3.3, 3.3.4といろいろ作ってみたが、全部SEGVだった。 あ、よくよく調べてみると、SEGVしてるのはgcc自身じゃなくて、 できあがったld-linux.so.2なんだけど、もういいや。 Plamo 4.0のglibc 2.3.2のバイナリをそのままインストールしてみるか。 ちょっと恐いよなあ。 考えてみるとマシンが全然別の場所にあるから失敗したらアウトだ。 ってことは次に行く2週間後までは手を出せないか。

あ、そうそう。 gcc 3.3.4なんてのがいつのまにか出てることに気づいたんだった。

[Blog] Bloginesの縦棒

右側を広くしたいんだけど、あの縦棒がなかなかつかめない。 めったにマウスカーソルが左右の矢印に変化しない。どうなってんだ? あ、変化しなくてもそのままドラッグすればいいのか。


2004-07-13 (Tue)

[Soft] CMSimple

About:

CMSimple is a simple content management system for simple maintainance of small commercial or private sites. It has a simple installation, is easy to modify, and offers an unique combination of features. It uses an HTML-file for storing the entire site, which can be edited in your favorite editor. It has a dynamic TOC and document locator, a WYSIWYG editor (no plugin--functions in IE and Mozilla), a search function, link validation, image handling, and automatic backup. It is easy to set up your own layout; just edit the template and stylesheet.

[夏] クーラーのリモコン

壊れかけのリモコンの替わりがやってきたが、 夜になったら急に涼しくなって使う機会がない。 まあ、リモコンなんてそんなに使うもんでもないが。


2004-07-14 (Wed)

[Mail] comp.lang.rubyからのspam

ruby-talk MLは最近どうもcomp.lang.rubyからのspamが通ってしまっていやな感じだ。 通ってしまうと一々いらぬ反応するやつが出てくるからうっとうしい。 まあ、spamassassinが学習しても100%ブロックできるわけでもないし。

とりあえず今回の一連のspamを見るとalt.*にもクロスポストしてるようなので

&DEFINE_FIELD_PAT_TO_REJECT("Newsgroups", ".*alt\..*");

を入れた。

クロスポストはcomp.lang.*だけを許すべきかなあ。 いっそのことcomp.lang.rubyだけにしちゃえばという気もしないでもない。

[YAML] YAML日記

YAMLが好きな人はYAMLで日記を書いてたりするんだろうか? ぐぐってみると日記じゃないけど YAMLで見る護身術奥傳 が見つかった。なかなか濃い。

ちょっと形式を考えてみる。

2004-07-14:
- Title: yamlで日記
  Content: |-
   こんな感じの形式で日記を書くとyaml日記になったりする?
   なんとなくRDのようなChangeLogのような気がしないでもない。
   書きやすいかどうかは微妙だ。vimだと色がつくのは利点か。
- Title: リンクはどうする?
  Content: |-
   RDの((<...>))のようにインラインで展開してくれるものがないと苦しい。
   適当にテンプレートを定義しないと。

これで何が嬉しいかというと、何が嬉しいんだろう? そういえばyaml.rbにはYAMLからxmlへ変換する機能はないな。 まあ、YAML::loadしてREXMLかxmlscanでほげればどうにでもなるか。

[Ruby] Enumerableのmax_byとmin_by

なんと。1.9にmax_byとmin_byが追加された。

------------------------------------------------------ Enumerable#max_by
     enum.max_by {| obj| block }   => obj
------------------------------------------------------------------------
     Returns the object in _enum_ that gives the maximum value from the
     given block.

        a = %w(albatross dog horse)
        a.max_by {|x| x.length }   #=> "albatross"

2004-07-15 (Thu)

[Mail] bogofilter 0.92.2

なんか知らないうちに0.92へ飛んでいた。ええと、今までは0.17.5を使っていたのか。 NEWSを読んでたら

* Fix self-test suite ("make check") when bogofilter is compiled
  with QDBM or TDB as the data base engine.

とあったので、いい機会だからQDBMにする。

まずはBerkeley DBのデータベースをdumpしておく。 インストール前にやっておかないと後の祭りになるので注意。

% bogoutils -d ~/.bogofilter/wordlist.db > /tmp/wordlist.txt

configure時にQDBMを指定。

% CFLAGS=-Os ./configure --with-database=qdbm
% make
% make check
./t._abort: line 6: 23116 Aborted                 ( ./abortme )

と出てちょっと驚いたが、中身はabort()だったのでそういうものらしい。 make installして

% bogoutils -l ~/.bogofilter/wordlist.qdbm < /tmp/wordlist.txt

でQDBM用のデータベースを作り直し。これで移行完了。

% bogofilter -V |& head -2
bogofilter-qdbm version 0.92.2
    Database: QDBM (version 1.8.13, Depot API)

早速spamをブロック問題なさそう。

X-Bogosity: Yes, tests=bogofilter, spamicity=1.000000, version=0.92.2

2004-07-16 (Fri)

[Ruby] class Foo < Bar all; end

[ruby-dev:23911]を見てて不思議に思った。なぜ

% ruby -wce 'class Foo < Bar all; end'
Syntax OK

となるのか。syntax errorにならない。実行してみる。

% ruby -e 'class Foo < Bar all; end'
-e:1: undefined local variable or method `all' for main:Object (NameError)

まず、allから評価してる。ならばとallを0にしてみる。

% ruby -e 'class Foo < Bar 0; end'  
-e:1: undefined method `Bar' for main:Object (NoMethodError)

なるほど。Bar(all)なのか。make testでエラーにならないわけだ。


2004-07-17 (Sat)

[Ruby] Ruby 1.8.2

久し振りにtest/runner.rbが全部通るようになった。いつ以来だろう?

[Ruby] WEBrickでURLからlily.cgiを隠す

WEBrickでlilyを動かしたときにURLからlily.cgiを隠すにはmountすればいい。

require 'webrick'

httpd = WEBrick::HTTPServer.new(:DocumentRoot=>Dir.pwd, :Port=>10080)
httpd.mount("/lily/", WEBrick::HTTPServlet::CGIHandler, 'lily.cgi')
trap(:INT) do
  httpd.shutdown
end
httpd.start

あとはlily.cfgのurlを

url                 http://localhost:10080/lily

とすればhttp://localhost:10080/lily/でアクセスできる。

Buzy

Buzyのメインボーカルの娘の声ってCOLORの娘にそっくりだなと思ったら本人だった。 というかCOLORが名前を変えてBuzyになったのか。


2004-07-18 (Sun)

[Ruby] test/openssl/test_ssl.rbがcygwinでかたまる件

test/openssl/test_ssl.rbのstarttlsを

def starttls(ssl)
  ssl.puts("STARTTLS")
  sleep 0.1
  ssl.connect
end

とすれば、とりあえず進むことがわかった。 で、 ねんのため1秒待つことになった。


2004-07-19 (Mon)

[Ruby] vrswin 040314

久し振りに更新。

[Ruby] vruby 040717

こちらは例によって自力でinstall

% mkdir lib
% mv vr lib
% i386-cygwin-ruby -rmkmf -e 'create_makefile("vr")'
% make install
% i386-mingw32-ruby -rmkmf -e 'create_makefile("vr")'
% make install

[Ruby] xmlscan 0.3.0 20030502

なんとなく0.3.0に上げてみる。


2004-07-20 (Tue)

[夏] フェーン現象

22時に帰宅。室温が35℃ってどういうことよ?

[Perl] Perl 5.8.5

ついこの間RC2が出たと思ったら、もうリリースだ。

% ./configure.gnu -Dcc=gcc -Dccflags=-DDEBUGGING -Duseshrplib=true

としてみた。 後でvimも作り直そう


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