2012-08-01 :-(
_ 読書メーター
7月の読書メーター
読んだ本の数:9冊
読んだページ数:1769ページ
ナイス数:3ナイス日本の毒きのこ (フィールドベスト図鑑)
キノコ狩りは命がけのエクストリームスポーツであるとしか思えない (´Д`;) 毒キノコは、マリオがよく食べる毒キノコのように分かりやすくはない。むしろ食用と似ている毒キノコが多数あるので要注意 / ヒメアジロガサ(猛毒。食べると死ぬ)なんてエノキタケ(食用)と見分けつかないんですけど (´Д`;)
読了日:07月30日 著者:地魚大全
魚図鑑。魚を食べたくなる (*´Д`)
読了日:07月29日 著者:野村 祐三虫といっしょに庭づくり―オーガニック・ガーデン・ハンドブック
虫との共生。虫たちの食物連鎖を理解し、無闇に駆除するのはやめたげてよ / ナメクジ対策として雑草を根絶やしにしない、などなど。一家に一冊どうぞ
読了日:07月25日 著者:ひきちガーデンサービスゾーンに入る技術 (Forest2545Shinsyo 34)
ゾーンというかセルフコントロールというかメンタルコントロールというか / ゾーンに入ったときの感情を記録し、デザインパターンとして身に付ける / 今日から君もキセキの世代!
読了日:07月23日 著者:辻秀一パークマネジメント: 地域で活かされる公園づくり
読了日:07月19日 著者:田代 順孝,中瀬 勲,林 まゆみ図説 英国庭園物語 (ふくろうの本)
英国でグダグダしたい
読了日:07月17日 著者:小林 章夫イタリア庭園の旅―100の悦楽と不思議 (コロナ・ブックス)
イタリアでグダグダしたい
読了日:07月16日 著者:巌谷 国士河川の科学 (図解雑学)
治水について考えよう
読了日:07月16日 著者:末次 忠司リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (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))
続きません。