〜2004年7月中旬〜
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さんまでもが。
ちょっと考えてみた。
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化してる時点で無駄だ。
結局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なんてのがいつのまにか出てることに気づいたんだった。
右側を広くしたいんだけど、あの縦棒がなかなかつかめない。 めったにマウスカーソルが左右の矢印に変化しない。どうなってんだ? あ、変化しなくてもそのままドラッグすればいいのか。
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.
壊れかけのリモコンの替わりがやってきたが、 夜になったら急に涼しくなって使う機会がない。 まあ、リモコンなんてそんなに使うもんでもないが。
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で見る護身術奥傳 が見つかった。なかなか濃い。
ちょっと形式を考えてみる。
2004-07-14: - Title: yamlで日記 Content: |- こんな感じの形式で日記を書くとyaml日記になったりする? なんとなくRDのようなChangeLogのような気がしないでもない。 書きやすいかどうかは微妙だ。vimだと色がつくのは利点か。 - Title: リンクはどうする? Content: |- RDの((<...>))のようにインラインで展開してくれるものがないと苦しい。 適当にテンプレートを定義しないと。
これで何が嬉しいかというと、何が嬉しいんだろう? そういえばyaml.rbにはYAMLからxmlへ変換する機能はないな。 まあ、YAML::loadしてREXMLかxmlscanでほげればどうにでもなるか。
なんと。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"
なんか知らないうちに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
[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でエラーにならないわけだ。
久し振りにtest/runner.rbが全部通るようになった。いつ以来だろう?
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のメインボーカルの娘の声ってCOLORの娘にそっくりだなと思ったら本人だった。 というかCOLORが名前を変えてBuzyになったのか。
test/openssl/test_ssl.rbのstarttlsを
def starttls(ssl) ssl.puts("STARTTLS") sleep 0.1 ssl.connect end
とすれば、とりあえず進むことがわかった。 で、 ねんのため1秒待つことになった。
久し振りに更新。
こちらは例によって自力で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
なんとなく0.3.0に上げてみる。
22時に帰宅。室温が35℃ってどういうことよ?
ついこの間RC2が出たと思ったら、もうリリースだ。
% ./configure.gnu -Dcc=gcc -Dccflags=-DDEBUGGING -Duseshrplib=true
としてみた。 後でvimも作り直そう。