トップ «前の日記(2012-07-31) 最新 次の日記(2012-08-02)» 編集

ヨタの日々

2001|08|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|12|
2024|01|02|03|04|

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月の読書メーターまとめ詳細
読書メーター

_ 午前

0550 起床

0800 出勤

0900 検討

_ 午後

1300 検討

1630 退勤

_

1830 pkgsrcほげ

2000 満月

2100 飯

_ 満月

ということで撮影してみた。

ピンぼけ

IMG_0636

_ [NetBSD][pkgsrc][migemo][ruby1.9]pkgsrc textproc/migemo ruby 1.9 対応作業ログ

FreeBSD ports からパッチをパクるだけの簡単な

ports/japanese/migemo/files/

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 とある。はい

投げた textproc/migemo ruby 1.9 support

_ [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))

続きません。