2012-08-01 :-(
_ 読書メーター
7月の読書メーター
読んだ本の数:9冊
読んだページ数:1769ページ
ナイス数:3ナイス 日本の毒きのこ (フィールドベスト図鑑)
日本の毒きのこ (フィールドベスト図鑑)
キノコ狩りは命がけのエクストリームスポーツであるとしか思えない (´Д`;) 毒キノコは、マリオがよく食べる毒キノコのように分かりやすくはない。むしろ食用と似ている毒キノコが多数あるので要注意 / ヒメアジロガサ(猛毒。食べると死ぬ)なんてエノキタケ(食用)と見分けつかないんですけど (´Д`;)
読了日:07月30日 著者: 地魚大全
地魚大全
魚図鑑。魚を食べたくなる (*´Д`)
読了日:07月29日 著者:野村 祐三 虫といっしょに庭づくり―オーガニック・ガーデン・ハンドブック
虫といっしょに庭づくり―オーガニック・ガーデン・ハンドブック
虫との共生。虫たちの食物連鎖を理解し、無闇に駆除するのはやめたげてよ / ナメクジ対策として雑草を根絶やしにしない、などなど。一家に一冊どうぞ
読了日:07月25日 著者:ひきちガーデンサービス ゾーンに入る技術 (Forest2545Shinsyo 34)
ゾーンに入る技術 (Forest2545Shinsyo 34)
ゾーンというかセルフコントロールというかメンタルコントロールというか / ゾーンに入ったときの感情を記録し、デザインパターンとして身に付ける / 今日から君もキセキの世代!
読了日:07月23日 著者:辻秀一 パークマネジメント: 地域で活かされる公園づくり
パークマネジメント: 地域で活かされる公園づくり
読了日:07月19日 著者:田代 順孝,中瀬 勲,林 まゆみ 図説 英国庭園物語 (ふくろうの本)
図説 英国庭園物語 (ふくろうの本)
英国でグダグダしたい
読了日:07月17日 著者:小林 章夫 イタリア庭園の旅―100の悦楽と不思議 (コロナ・ブックス)
イタリア庭園の旅―100の悦楽と不思議 (コロナ・ブックス)
イタリアでグダグダしたい
読了日:07月16日 著者:巌谷 国士 河川の科学 (図解雑学)
河川の科学 (図解雑学)
治水について考えよう
読了日:07月16日 著者:末次 忠司 リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
|ω・) レビュー参加しました / コーディング規約のようなものからリファクタリングまで。「他人が理解しやすいかどうか」に注力してコードを改善していく
読了日:07月05日 著者:Dustin Boswell,Trevor Foucher
2012年7月の読書メーターまとめ詳細
読書メーター
_ [NetBSD][pkgsrc][migemo][ruby1.9]pkgsrc textproc/migemo ruby 1.9 対応作業ログ
FreeBSD ports からパッチをパクるだけの簡単な
pkgsrc patches 用にファイル名変更。
% for f in `ls extra-*`; do mv $f `echo $f | sed -e 's/extra-//'`; done
make すると怒られる。
ARNING: [license.mk] Every package should define a LICENSE.
http://0xcc.net/migemo/ にある書庫に含まれている COPYING には GNU GENERAL PUBLIC LICENSE Version 2, June 1991 とある。はい
_ [NetBSD][pkgsrc][migemo][ruby1.9]pkgsrc textproc/migemo ruby 1.9 対応作業ログ(未遂)
はじめに
当初は自力で作業しようとしたんだけど途中で挫けたうえに「どうせ ports にパッチがあるだろう」と思って探してみたらあった( ports/japanese/migemo/files/ )ので ports から patch を貰ったので、ここに書いた作業は却下したんだが記念に書いておく。
作業
RUBY_VERSION_SUPPORTED を変更して
rin@mogu[/usr/pkgsrc/textproc/migemo]% diff -bu Makefile.common.orig Makefile.common --- Makefile.common.orig 2012-07-29 15:27:17.000000000 +0900 +++ Makefile.common 2012-07-29 15:50:49.000000000 +0900 @@ -12,4 +12,5 @@ MAINTAINER= yamajun@ofug.net HOMEPAGE= http://0xcc.net/migemo/ -RUBY_VERSION_SUPPORTED= 18 +#RUBY_VERSION_SUPPORTED= 18 +RUBY_VERSION_SUPPORTED= 192 193 rin@mogu[/usr/pkgsrc/textproc/migemo]%
make する
config.status: creating migemo.rb ===> Building for ruby193-migemo-0.40nb1 Making all in tests ruby -I.. ../migemo-index.rb test-dict > test-dict.idx ../migemo-index.rb:19:in `<main>': invalid byte sequence in UTF-8 (ArgumentError) *** Error code 1 Stop. make: stopped in /usr/pkgsrc/textproc/migemo/work/migemo-0.40/tests *** Error code 1
エラーになるので work/migemo-0.40/tests/Makefile を眺める。
test-dict.idx: test-dict ../migemo-index.rb
        ruby -I.. ../migemo-index.rb test-dict > test-dict.idx
テキトーに手当たり次第 .rb に coding を追加していく。
#coding: euc-jp
make する。
rin@mogu[/usr/pkgsrc/textproc/migemo/work/migemo-0.40/tests]% sudo make
ruby -E euc-jp -rromkan -ne 'puts $1.to_roma if /^(.+?) /' test-dict | while read line; do echo $line | ruby -E euc-jp -ne 'chomp!;1.upto($_.length) do |x| puts $_[0,x] end'; done | ruby -E euc-jp -I.. ../migemo-cache.rb test-dict
-e:1:in `<main>'/usr/pkg/lib/ruby/1.9.3/rubygems/custom_require.rb:36:in `require': cannot load such file -- jcode (LoadError)
        from /usr/pkg/lib/ruby/1.9.3/rubygems/custom_require.rb:36:in `require'
        from /usr/pkgsrc/textproc/migemo/work/migemo-0.40/migemo.rb:18:in `<top (required)>'
        from /usr/pkg/lib/ruby/1.9.3/rubygems/custom_require.rb:36:in `require'
        from /usr/pkg/lib/ruby/1.9.3/rubygems/custom_require.rb:36:in `require'
        from ../migemo-cache.rb:2:in `<main>'
: undefined method `chomp!' for main:Object (NoMethodError)
-e:1:in `<main>': undefined method `chomp!' for main:Object (NoMethodError)
-e:1:in `<main>': undefined method `chomp!' for main:Object (NoMethodError)
-e:1:in `<main>': undefined method `chomp!' for main:Object (NoMethodError)
-e:1:in `<main>': undefined method `chomp!' for main:Object (NoMethodError)
-e:1:in `<main>': undefined method `chomp!' for main:Object (NoMethodError)
-e:1:in `<main>': undefined method `chomp!' for main:Object (NoMethodError)
-e:1:in `<main>': undefined method `chomp!' for main:Object (NoMethodError)
-e:1:in `<main>': undefined method `chomp!' for main:Object (NoMethodError)
-e:1:in `<main>': undefined method `chomp!' for main:Object (NoMethodError)
*** Error code 1
Stop.
make: stopped in /usr/pkgsrc/textproc/migemo/work/migemo-0.40/tests
jcode って?
ruby-list jp - [ruby-list:44396] ruby-1.9.0-0-i386-mswin32にjcode.rb が入っていない
> ruby-1.9.0-0-i386-mswin32.zip (11,507KB) > をダウンロードしましたが、 > jcode.rb が入っていないようです。 > これは何故でしょうか? 削除されたからです。 1.9.0ではM17N機能を使ってください。
jcode を探す。
rin@mogu[/usr/pkgsrc/textproc/migemo/work/migemo-0.40]% grep jcode * migemo.rb:#require 'jcode' migemo.rb.in:require 'jcode'
migemo.rb の jcode をおもむろに削除
make する。
/usr/pkgsrc/textproc/migemo/work/migemo-0.40/migemo-dict.rb:48:in `decompose': unhandled exception
        from /usr/pkgsrc/textproc/migemo/work/migemo-0.40/migemo-dict.rb:75:in `block in lookup'
        from /usr/pkg/lib/ruby/vendor_ruby/1.9.3/bsearch.rb:53:in `bsearch_lower_boundary'
        from /usr/pkg/lib/ruby/vendor_ruby/1.9.3/bsearch.rb:115:in `bsearch_range'
        from /usr/pkgsrc/textproc/migemo/work/migemo-0.40/migemo-dict.rb:74:in `lookup'
        from /usr/pkgsrc/textproc/migemo/work/migemo-0.40/migemo.rb:164:in `expand_words'
        from /usr/pkgsrc/textproc/migemo/work/migemo-0.40/migemo.rb:181:in `block in lookup0'
        from /usr/pkgsrc/textproc/migemo/work/migemo-0.40/migemo.rb:178:in `each'
        from /usr/pkgsrc/textproc/migemo/work/migemo-0.40/migemo.rb:178:in `lookup0'
        from /usr/pkgsrc/textproc/migemo/work/migemo-0.40/migemo.rb:216:in `lookup'
        from /usr/pkgsrc/textproc/migemo/work/migemo-0.40/migemo.rb:225:in `regex_tree'
        from ../migemo-cache.rb:20:in `block in <main>'
        from ../migemo-cache.rb:13:in `each'
        from ../migemo-cache.rb:13:in `<main>'
*** Error code 1
Stop.
make: stopped in /usr/pkgsrc/textproc/migemo/work/migemo-0.40/tests
デバッグする。
migemo-cache.rb に pp 仕込む
    22   puts "-----------------------------------------------------------"
    23   pp migemo
    24   puts "--
印字はこうなる。
----------------------------------------------------------- #<Migemo:0xbb3397ec @dict_cache=nil, @insertion="", @optimization=3, @pattern="k", @regex_dict=nil, @static_dict= #<MigemoStaticDict:0xbb339ecc @dict=#<File:test-dict>, @index=[34, 46, 57, 70, 81, 92, 111, 119, 132, 144]>, @type="ruby", @user_dict=nil, @with_paren=false> -----------------------------------------------------------
MigemoStaticDict がファイル開いてる。
File.new がいくつかあるので File.new(filename, "r:EUC-JP") にしてしまう。
あと migemo-dict.rb のここで
   range = @index.bsearch_range do |idx|
     puts "get_line: idx=#{idx} line=#{get_line(idx)}"
     key, values = decompose(get_line(idx))
     key.prefix_match(pattern)
   end
index=[34, 46, 57, 70, 81, 92, 111, 119, 132, 144]>, の bsearch_range が返す 81 のときにエラーになってるらしい。
81 バイト目を返す?
test-dict.idx の中身はこう。
% cd /usr/pkgsrc/textproc/migemo/work/migemo-0.40/tests % hexdump -C test-dict.idx 00000000 00 00 00 22 00 00 00 2e 00 00 00 39 00 00 00 46 |...".......9...F| 00000010 00 00 00 51 00 00 00 5c 00 00 00 6f 00 00 00 77 |...Q...\...o...w| 00000020 00 00 00 84 00 00 00 90 |........| 00000028
Makefile からコピペして test-dict.idx を手作りしてみる。
ruby18 で作成
% ruby18 -Ke -I.. ../migemo-index.rb test-dict > test-dict.idx.18 % hexdump -C test-dict.idx.18 00000000 00 00 00 22 00 00 00 32 00 00 00 40 00 00 00 52 |..."...2...@...R| 00000010 00 00 00 61 00 00 00 70 00 00 00 83 00 00 00 8f |...a...p........| 00000020 00 00 00 a5 00 00 00 bb |........| 00000028
ruby193 で作成。ruby18 とだいぶ異なるんですけど。
% ruby193 -E euc-jp -I.. ../migemo-index.rb test-dict > test-dict.idx.193 % hexdump -C test-dict.idx.193 00000000 00 00 00 22 00 00 00 2e 00 00 00 39 00 00 00 46 |...".......9...F| 00000010 00 00 00 51 00 00 00 5c 00 00 00 6f 00 00 00 77 |...Q...\...o...w| 00000020 00 00 00 84 00 00 00 90 |........| 00000028
じつはエンディアンを明示しないといけない? 2進数にしてみる。エンディアンは関係なかった。
% xxd -b test-dict.idx.18 0000000: 00000000 00000000 00000000 00100010 00000000 00000000 ...".. 0000006: 00000000 00110010 00000000 00000000 00000000 01000000 .2...@ 000000c: 00000000 00000000 00000000 01010010 00000000 00000000 ...R.. 0000012: 00000000 01100001 00000000 00000000 00000000 01110000 .a...p 0000018: 00000000 00000000 00000000 10000011 00000000 00000000 ...... 000001e: 00000000 10001111 00000000 00000000 00000000 10100101 ...... 0000024: 00000000 00000000 00000000 10111011
% xxd -b test-dict.idx.193 0000000: 00000000 00000000 00000000 00100010 00000000 00000000 ...".. 0000006: 00000000 00101110 00000000 00000000 00000000 00111001 .....9 000000c: 00000000 00000000 00000000 01000110 00000000 00000000 ...F.. 0000012: 00000000 01010001 00000000 00000000 00000000 01011100 .Q...\ 0000018: 00000000 00000000 00000000 01101111 00000000 00000000 ...o.. 000001e: 00000000 01110111 00000000 00000000 00000000 10000100 .w.... 0000024: 00000000 00000000 00000000 10010000
migemo-index.rb の line.length を印字させてみる。
while line = gets
  unless line =~ /^;/
#    print [offset].pack("N")
  end
  offset += line.length
  puts line.length
end
length が異なる!
% ruby18 -Ke -I.. ../migemo-index.rb test-dict 3 4 27 16 14 18 15 15 19 12 22 22 25
% ruby193 -E euc-jp -I.. ../migemo-index.rb test-dict 3 4 27 12 11 13 11 11 19 8 13 12 14
length の実装が変わったのか?
Rubyist Magazine - Ruby M17N の設計と実装
String#length も文字を意識するように変わりました。1.8 では String のバイト列としての長さを返していましたが、1.9 では文字列としての長さを返すようになっています。 なお、バイト列としての長さが欲しい場合は新しく追加された、String#bytesize メソッドを使用します。
とりあえず line.bytesize を puts
puts line.bytesize
先ほどと同じ値になったし、1.8 でも 1.9 でも同じ値になる。ok
% ruby18 -Ke -I.. ../migemo-index.rb test-dict 3 4 27 16 14 18 15 15 19 12 22 22 25
% ruby193 -E euc-jp -I.. ../migemo-index.rb test-dict 3 4 27 16 14 18 15 15 19 12 22 22 25
length を使っているのは他にもたくさんある。
% cd /usr/pkgsrc/textproc/migemo/work/migemo-0.40
% grep length *
ChangeLog:      (migemo-use-frequent-pattern-alist, migemo-pattern-alist-length)
ChangeLog:      * jrsearch.pl (process): Abolish the condition of length($roma) == 1;
Makefile:           echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
Makefile:               am__skip_length_check=: \
Makefile.in:        echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
Makefile.in:            am__skip_length_check=: \
config.status:  len = length(field[1])
config.status:    keylen = length(key)
config.status:      len += length(value) + length(field[++i])
configure:# confdefs.h avoids OS command line length limits that DEFS can exceed.
configure:  len = length(field[1])
configure:    keylen = length(key)
configure:      len += length(value) + length(field[++i])
configure.lineno:# confdefs.h avoids OS command line length limits that DEFS can exceed.
configure.lineno:  len = length(field[1])
configure.lineno:    keylen = length(key)
configure.lineno:      len += length(value) + length(field[++i])
migemo:  unless ARGV.length == 1 or options['static-dict']
migemo:    if segments.length <= 1
migemo:    elsif segments.length > 1
migemo-cache.rb:  output = [pattern.length].pack("N") + pattern +
migemo-cache.rb:    [data.length].pack("N") + data
migemo-cache.rb:  idx += output.length
migemo-dict.rb:    self[0, string.length] <=> string
migemo-grep:  if ARGV.length < 2
migemo-grep:  files = ARGV if ARGV.length > 0
migemo-grep:    print file + ":" if files.length > 1
migemo-index.rb.orig:  offset += line.length
migemo-regex.rb:      if charclass.length == 1
migemo-regex.rb:      elsif charclass.length > 1
migemo-regex.rb:      if regex.length == 0
migemo-regex.rb:      elsif regex.length == 1
migemo.el.in:(defvar migemo-pattern-alist-length 512
migemo.el.in:  "*Maximal length of migemo-pattern-alist.")
migemo.el.in:    (let ((l (length string))
migemo.el.in:    (set-text-properties 0 (length word) nil word)
migemo.el.in:                (> (length pattern) 1)
migemo.el.in:                (eq ?\r (aref pattern (1- (length pattern)))))
migemo.el.in:         (when (and migemo-pattern-alist-length
migemo.el.in:                    (> (length migemo-pattern-alist)
migemo.el.in:                       (* migemo-pattern-alist-length 2)))
migemo.el.in:           (setcdr (nthcdr (1- (* migemo-pattern-alist-length 2))
migemo.el.in:   (when (and migemo-pattern-alist-length
migemo.el.in:              (> (length migemo-pattern-alist) migemo-pattern-alist-length))
migemo.el.in:     (setcdr (nthcdr (1- migemo-pattern-alist-length)
migemo.el.in:                       (put-text-property 0 (length str)
migemo.el.in:      (put-text-property 0 (length str) 'face migemo-message-prefix-face str))
続きません。









