!kiyoka.blog.2011_08 RSSPLAIN

Related pages: !kiyoka.blog.list
5555555333333333333333333233330333444444444404445555555555555555555555555555551055555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555550555555555555555555555555555555555555555555555555555555505555555555555555555555555555505555555555555555555555555055555555555555550555555555555055555555550555555555555555555555555555555555550555555555555555555555555555555555555555505555555555555555555555555555555555555555555555555555055555555555555555555555555555555555555555555555555555555555550555555555555555555555555555555555555555555555555505
5

kiyoka日記。NendoSekkaの開発や、最近思うことなど

5

最新10件!kiyoka.blog   過去記事一覧!kiyoka.blog.list

5

kiyoka.blog_header 

5

このブログを書いている人: 西山 清香(kiyoka) - twitter: @kiyokaEXT

5

5

 

5

 

3

kiyoka.2011_08_30[Life] ガラケーを買い替える

3

もう携帯電話がどうしようも無く物理的にボロボロになってきたので買い替えることにした。

3
 qH2O  5年くらい使ったかも。頻繁にリセットがかかる。
3
 zaCG  修理不能。二度水没したがまだ動いている。
3

経済的な理由から、スマートフォンには行かずガラケーの中古品を買うことにした。

3

本来ならプログラマとしてはiPhoneなどを買ってプログラムし、iTune StoreにSubmitして楽しみたいところだけど、そうもいかない。

3

モバイルの技術と、インフラの技術の両方がわかっていたら、いろいろと「きのこる先生」的にはいいのだろうが…

3

 

3

どうもきのこる先生になるには時間が物理的に足りないので、インフラ系とプログラミングの効率化を中心に何かできればと思いっている。

3

まあそうはいってもそういう道は狙って選んでいくものではなく興味の赴くままに進んでいくと後に道ができていくものだなんだろう。

3

 

3

話は戻って、携帯は家族間で安くメールができればいいので、入力のストレスの少ないSH-03Bにした。月額基本料金1500円は今とかわらずが必須。

3

docomoショップに行くと、SH-03Bは製造中止で最後の在庫も6万円台という。自分の予算範囲じゃない。

3

中古で買うと1万5千円程度と、まあいいかという値段になる。

3

なんか中古の携帯を買うというのは、勤務先のビジネスから考えると困った(賢いユーザ)ということになるのだけど、まあ時代の流れということで許して頂きたい。

3

(SH-03Bを開発していた人の顔が思いうかんだりするわけです)

3

生活は生活、会社の生き残りは別途時代にあわせて考えていかんとなーと思うのが現実なわけです。

3

 

2

もうすぐ、SH-03Bが届くけど使いやすいんだろうか。

3
 SH-03B - WikipediaEXT
3
 270px-SH-03B
3

 

3

 

0

comment (disabled)

3

3

 

3

 

4

kiyoka.2011_08_29[オープンソース] ZFSが遂に真価を発揮した

4

実用段階。しかも、ZFSのメリットが活きた応用だと思う。

4

いつZFSが使えるようになるのかなと思っていたが、もうそろそろ自分のサーバでも使っていいのかも。

4
 http://www.itmedia.co.jp/enterprise/articles/1108/22/news061.html
4
 ドワンゴ、「ニコニコ動画」のストレージにSun ZFS Storage Applianceを採用
4
 単一ボリュームで250テラバイト以上の容量を構築できる拡張性などが評価されたという。
4

 

4

ただ、オープンソースのディストリビューションのうち、どれが安定しているのかが問題。

4

やっぱりFreeBSD?それともNetBSDに正式に入るのを待つ?

4

 

0

comment (disabled)

4

4

 

4

 

5

kiyoka.2011_08_27[Sekka] 平仮名フレーズを辞書として持つのは失敗?

5

平仮名フレーズ辞書を含めた、Sekka 0.9.0をリリースして少し経つが、平仮名フレーズを辞書に持つのは良いことなのかわからなくなってきた。

5
 NbpKsE
5

 

5

平仮名のフレーズというのはあまりにパターンが多く、やはり普段使うフレーズ全てを辞書に収録するというのは無理がありそう。

5

平仮名フレーズ辞書の影響で、Sekkaが勝手にユーザの意図しないフレーズに引きこんでしまうという問題が結構ある。

5

例えば、上の文章に出てきた「ありそう」というフレーズ。

5

辞書には、「ありそうな」しか入っていないため、

5

 

5
arimsou
5

 

5

と入力すると、

5

 

5
第一候補「ありそうな」
5
第二候補「ありそう」
5

 

5

となり、ついつい第一候補で確定して見落してしまう。

5

第二候補に「ありそう」も存在しているのだけど、Sekkaは第一候補でとりあえず確定するのが基本。

5

間違いがあれば、後で戻って修正するというユーザ・インタフェースになっているので間違いを見落としやすい。

5

結果として、ユーザの意図しない文章になってしまうのだ。

5

 

5

対策として、未知語(というか未知フレーズ)を見つけた時点でユーザが簡単に辞書登録できるユーザ・インタフェースを追加するという方法を考えている。

5

今のSekkaは単語登録処理が重いという課題もあるので、単語の登録頻度が上がれば、それがストレスになる可能性もあるが、長期的に見て、辞書が蓄積されていくと文章入力時のストレスは減る方向になるのでそこはトレードオフだと思う。

5

 

5

うーん。いろいろグダグダ書いたけど、実は日々使ってみて紆余曲折の末、問題が解決できたりするのは非常に楽しい。

5

これが自分でユーザ・インタフェース込みの日本語入力システムを作る楽しさなんじゃないかと思うのだ。

5

なんというか自分を発見するというか、使いやすいユーザ・インタフェースはどんなものかというような。

5

一緒に実験に参加させられているユーザはたまったものではないが(笑)

5

そんなタイミングでSKKに戻っていったりするんだろうな〜(笑)

5

 

1

COMMENTAuth

Just the type of isnghit we need to fire up the debate.

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2011_08_25[Sekka] バグ原因調査: sekka-serverの起動時に辞書の読み込みに失敗する問題

5

 

5

@mori_devEXTさんからSekkaのバグ報告があったので調査。

5
 sekka の不具合(?)報告 — GistEXT
5
 => sekka-serverの起動時に辞書の読み込みに失敗する。
5

 

5

たぶんこれだろうと当たりがついているので、再現させてみる。

5

現象から、Tokyo Cabinetのバージョン不整合の問題だと考えられる。

5

新しいバージョンのTokyo Cabinetで作ったデータベースを古いTokyo Cabinetで開けようとしている可能性がある。

5

 

5

環境

5

この記事で使った環境は次の通り。

5

Rubyはrvmは使わず、ソースからインストールしている。(厳密にはstowというパッケージマネージャを使っている)

5
$ cat /etc/debian_version 
5
6.0.2
5
$ uname -a
5
Linux genkan.sumibi.org 2.6.34.1 #2 PREEMPT Thu Jul 22 16:04:48 JST 2010 i686 GNU/Linux
5
$ ruby --version
5
ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux]
5
$ which ruby
5
/usr/local/bin/ruby
5
$ gem --version
5
1.8.8
5

 

5

 

5

Sekka 0.8.8 / 0.9.0の辞書データ

5

 

5

辞書データはTokyo CabinetのHashDBのデータベースファイルそのもので提供している。

5

作成に使ったTokyo Cabinetのバージョンは 1.4.47 だ。

5

Tokyo Cabinetはソースコードからインストールした最新版だ。

5

 

5

バージョン表示

5
$ tchmgr version
5
Tokyo Cabinet version 1.4.47 (910:1.0) for Linux
5
Copyright (C) 2006-2011 FAL Labs
5

 

5

辞書の内容を表示する。

5
$ tchmgr inform ~/.sekka-server/SEKKA-JISYO.SMALL.tch
5
path: SEKKA-JISYO.SMALL.tch
5
database type: hash
5
additional flags:
5
bucket number: 131071
5
alignment: 16
5
free block pool: 1024
5
inode number: 6554277
5
modified time: 2011-08-25T06:30:09+09:00
5
options:
5
record number: 3686019
5
file size: 296903328
5

 

5

古いTokyo Cabinetでオープンしてみる

5

これをDebian squeezeに入っているバージョンでオープンしてみる。

5

 

5
$ dpkg --list | grep -i tokyo
5
rc  libtokyocabinet 1.2.1-1         Tokyo Cabinet Database Libraries [runtime]
5
rc  libtokyocabinet 1.4.37-6        Tokyo Cabinet Database Libraries [runtime]
5
$
5

 

5

aptitudeでインストールする

5
$ su -
5
# aptitude install tokyocabinet-bin libtokyocabinet8 libtokyocabinet-dev 
5
# exit
5

 

5
$ dpkg --list | grep -i tokyo
5
ii  libtokyocabinet-dev                    1.4.37-6                               Tokyo Cabinet Database Libraries [development]
5
rc  libtokyocabinet3                       1.2.1-1                                Tokyo Cabinet Database Libraries [runtime]
5
ii  libtokyocabinet8                       1.4.37-6                               Tokyo Cabinet Database Libraries [runtime]
5
ii  tokyocabinet-bin                       1.4.37-6                               Tokyo Cabinet Database Utilities
5
$
5

 

5
$ tchmgr version
5
Tokyo Cabinet version 1.4.37 (827:1.0) for Linux
5
Copyright (C) 2006-2009 Mikio Hirabayashi
5

 

5
$ tchmgr inform ~/.sekka-server/SEKKA-JISYO.SMALL.tch
5
/usr/bin/tchmgr: -: 5: invalid meta data
5

 

5

やはりSekkaの辞書は読みこめない。エラーが出る。

5

 

5

sekka-serverではどのようなエラーになるか。

5

 

5

tokyocabinetのGemを再度ビルドしなおす。

5

そのためには、再インストールすればよい。

5
$ gem uninstall tokyocabinet
5
$ gem install tokyocabinet
5
Fetching: tokyocabinet-1.29.gem (100%)
5
Building native extensions.  This could take a while...
5
Successfully installed tokyocabinet-1.29
5
1 gem installed
5
Installing ri documentation for tokyocabinet-1.29...
5
Installing RDoc documentation for tokyocabinet-1.29...
5

 

5

結果、@mori_devさんの環境と同じエラーが出た。

5

 

5

$ sekka-server

5
/usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/sekka-0.8.8/lib/sekka/jisyo-db.nnd:176: TokyoCabinet::HDB.open error: file=/home/kiyoka/.sekka-server/SEKKA-JISYO.SMALL.tch (RuntimeError)
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/sekka-0.8.8/lib/sekka/kvs.rb:56:in `open'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/sekka-0.8.8/lib/sekka/jisyo-db.nnd:216:in `block (2 levels) in initialize'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/sekka-0.8.8/lib/sekka/jisyo-db.nnd:461:in `call'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/sekka-0.8.8/lib/sekka/jisyo-db.nnd:461:in `block in initialize'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/nendo-0.5.2/lib/nendo.rb:1598:in `call'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/nendo-0.5.2/lib/nendo.rb:1598:in `callProcedure'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/nendo-0.5.2/lib/nendo.rb:1336:in `openSekkaJisyo'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/nendo-0.5.2/lib/nendo.rb:1336:in `openSekkaJisyo'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/sekka-0.8.8/lib/sekkaserver.rb:57:in `initialize'
5
        from ./lib/sekka.ru:37:in `new'
5
        from ./lib/sekka.ru:37:in `block in <main>'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/rack-1.3.2/lib/rack/builder.rb:51:in `instance_eval'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/rack-1.3.2/lib/rack/builder.rb:51:in `initialize'
5
        from ./lib/sekka.ru:1:in `new'
5
        from ./lib/sekka.ru:1:in `<main>'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/rack-1.3.2/lib/rack/builder.rb:40:in `eval'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/rack-1.3.2/lib/rack/builder.rb:40:in `parse_file'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/rack-1.3.2/lib/rack/server.rb:200:in `app'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/rack-1.3.2/lib/rack/server.rb:301:in `wrapped_app'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/rack-1.3.2/lib/rack/server.rb:252:in `start'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/rack-1.3.2/lib/rack/server.rb:137:in `start'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/sekka-0.8.8/bin/sekka-server:90:in `main'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/sekka-0.8.8/bin/sekka-server:100:in `<top (required)>'
5
        from /usr/local/bin/sekka-server:19:in `load'
5
        from /usr/local/bin/sekka-server:19:in `<main>'
5

 

5

原因

5

古いlibtokyocabinetでは、新しいlibtokyocabinetで作ったデータベースフェアを読み込めない。

5

=> @mori_devさんところでは発生しないので、@mori_devさんの環境はどうも別の原因っぽいが…

5
 dbca051b95918ceeae9ad7b79d74eff2
5

 

5

 

5

対策

5

配布する辞書は Debian と Ubuntuに入っているバージョンのTokyo Cabinetで作る。

5

それによって、Sekkaをより広い環境で使える様にする。

5

 

5

Debian squeeze ... tokyo cabinet 1.4.37

5
  http://packages.debian.org/squeeze/tokyocabinet-bin
5

Ubuntu 10.10   ... tokyo cabinet 1.4.37

5
  http://packages.ubuntu.com/maverick/tokyocabinet-bin
5

このあたりで作ればいいかな。

5

 

5

Debian lennyはtokyo cabinet 1.2.1と古すぎるので対応しない。

5

 

5

Sekka 0.9.1の辞書からtokyo cabinet 1.4.37で作って提供するようにしよう。

5

@mori_devさんところの原因は個別に追っていく。こちらで議論して解決できればいいなぁ。

5
  sekka-serverの起動時に辞書の読み込みに失敗する問題 -   sekka_users EXT
5

 

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2011_08_24[Sekka] Sekka 0.9.0 リリース

5

SKKライクな日本語入力メソッド Sekka 0.9.0をリリースしました。(リリースノート Sekka.ReleaseNote)

5
 NbpKsE
5

 

5

目玉は、「平仮名フレーズ」と「スペースキーでの変換確定」です。

5

 

5

平仮名フレーズ

5

Sekka 0.8.8 では、

5
nateimasu
5

を変換すると辞書が無いので、入力通り「なています」となります。

5

まあよくあるタイプミスですね。

5

 

5

Sekka 0.9.0 では、

5
nateimasu
5

を変換すると平仮名フレーズ辞書から一番近い「なっています」を第一候補に挙げてきます。

5

 

5

まあ、この機能を入れたからといって、いつも人間に都合の良い結果になるとは限らないのは他のIMEと同じくSekkaもその限りでは無いのですが、まあものは試しでしばらく使ってみて、辞書の内容を微調整していこうと思います。

5

※ 辞書が新しくなっているので、確固バージョンのSekkaをお使いの場合はSekka.VersionUpを参考に、辞書も更新してください。

5

 

5

 

5

スペースキーでの変換確定

5

Ctrl-J以外にスペースキーでも変換確定できるようになりました。(但し、サジェストモード期間中のみスペースキーが効きます)

5

これまではCtrl-Jだけしか使えなかったためCtrl-Jを大量に押す必要があり、かなり慣れが必要でした。

5

これで、MS-IMEやことえりなどの一般的な日本語入力システムに近いタイピングで変換ができるようになりました。

5

 

5

※ サジェストとは以下のようにリアルタイムで第一変換候補フィードバックされる機能のことです。

5
 
5

 

5

 

5

version 0.9.0 変更点

5
平仮名入力時も平仮名フレーズ辞書でスペルミスを救済するようにした。
5
 辞書ソースはWebCorpusとipadic-2.7.0を使用した。
5
  N-gram コーパス - 日本語ウェブコーパス 2010EXT
5
  Index of /stable/ipadicEXT
5
  [経緯など]
5
   kiyoka.2011_07_06[Sekka] 平仮名フレーズ辞書を追加してみようかな(1)
5
   kiyoka.2011_07_07[Sekka] 平仮名フレーズ辞書を追加してみようかな(2)
5
   kiyoka.2011_07_13[Sekka] 平仮名フレーズ辞書を追加してみようかな(3)
5
   kiyoka.2011_08_10[Sekka] 平仮名フレーズ辞書を追加してみようかな(4)
5
gemの依存規則で、Nendoの必須バージョンを0.5.3に限定した。
5
継続的インテグレーションを開始した。
5
  Travis CIEXTでCRuby 1.9.2とCRuby 1.9.3のテストを通るようにした。
5
  Travis CIのテスト環境用にkvs.rbにdbmとRubyのHash(オンメモリ)での辞書管理を追加した。
5
リアルタイム候補表示中(サジェスト期間中)はスペースキーで変換可能なユーザ・インタフェースにした。
5
 カスタマイズ変数 sekka-kakutei-with-spacekey で有効/無効を制御できる。
5
 デフォルトは有効。
5

 

5

次の目標

5

ユーザ・インタフェースを少しづつ改善していきます。

5

また、辞書用ストレージとしてredisも選択できるようにしたいと考えています。

5

 

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2011_08_23[Sekka] RSpecのformatterのカスタマイズ

5

最近RSpecによるテストを Emacs の M-x compile で実行するようにした。

5

何がいいかというと、エラー行に飛べるようになる。

5

TDDによる開発を行う時は、先にテストケースを書いて、まだ製品コードが未実装の状態でテストがFailすることを確認してから製品コードを書き始める。

5

そんな中、あまりにもFailした行に飛ぶのが面倒臭くなったのでEmacsが使えないか模索してみた。

5

 

5

 

5

M-x compileを実行する

5

 

5

RSpecの標準フォーマッタでは、RSpecが出力する飾りの # 記号が邪魔をしてEmacsが正しいファイル名を取得できない。

5

また、#を取るだけでは、RSpecツール本体の内部関数まで出てしまってじゃまだった。

5

それら直した結果、以下のように該当する行だけをエラー行と認識し、タグジャンプできるようになった。

5

yJg6

5

次のエラーメッセージにTabキーで移動、Returnキーでエラーソース行に移動する

5

GOXT

5

ここまで作ってみたけど、EmacsにはRSpec実行するモードがあるんだろうな。ちょっと調べた限りでは見つかならなかったけど。

5

せっかく作ったのでカスタマイズしたフォーマッタをRSpecの本家にpull requestしてみるかな。

5

しかし、ちょっとしたローカルの変更とpull requsestダブリューするまでの敷居が以外と高いのでどうするか迷い中。

5

 

5

今回書いたフォーマッタはこのソース。

5

RSpec formatter for Emacs E-x compile feature — GistEXT

5

 

5

次のように特別なオプションを指定してRSpecを実行する。

5
time rspec -I ./lib -b ./test/nendo_spec.rb  -r ./test/rspec_formatter_for_emacs.rb -f CustomFormatter
5

 

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2011_08_21[Sekka] スペースキーによる変換確定を試す

5
 NbpKsE
5

Sekkaのユーザ・インタフェースの欠点として、単語単位でCtrl-Jを押す必要があるところ。

5

アルファベットキーの合間にCtrl-Jを上手に入力するのは、なかなかの慣れがいる。

5

あまりにもCtrl-Jを押す回数が多すぎてしんどいので、これをなんとか改善できないかと思っていた。

5

 

5

この改善策を試してみている。

5

試しているのは、候補サジェスト期間に限りスペースキーで変換確定できるというユーザ・インタフェース。

5

(候補サジェスト期間というのは、Ctrl-J押下後、約30秒間続く状態で、この間は変換候補がリアルタイムで表示される。Ctrl-Gで中止できる)

5

 

5

自分は普段Emacsの外の世界ではGoogle日本語入力やMS-IMEを使っているので、実際やってみるとそれほど違和感が無いことに気がついた。まあ似たキー操作になるしね。

5

これはデフォルトで有効にしておいて問題なさそう。気に入らない人は初期設定で無効にしてもらう。

5

もう少し慣らし運転してみて、問題無さそうなら0.9.0に入れようと思う。

5

 

5

次のSekkaのバージョンは0.9.0になる。つまりマイナーバージョン番号が上がる。

5

平仮名フレーズ変換を理由にメジャーバージョン番号を上げるのは大袈裟な気がしていたのだけど、このユーザ・インタフェースは大きいので、まあ適当だろう。

5

 

5

そうえば、Sekkaのユーザーがどれだけいるのか見えないのだけど、フィードバックが欲しいなぁと思っているところ。

5

もしかしてユーザーって自分だけ?(笑)

5

一応新バージョンをリリースする度に30ダウンロードぐらいはあるんだけど、その可能性は大きい。

5

 

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2011_08_19[Nendo][Scheme] 例外の捕捉について

5

オレ処理系のNendoについての開発メモ。

5
 SYKjVO
5

 

5

Gaucheのguardに似せたsyntaxになるようにトライしているところ。

5

たぶん、guardとunwind-protectはGaucheと同等のsyntaxになると思う。

5

実際には、例外クラスにはRubyのクラスが設定されるので、ソースコードレベルで互換性が確保できるわけではない無いけど…

5

Gauche脳とRuby脳の両方を持つ人にはGaucheのリファレンスをちらっと見ただけでコードが書けるレベルは保てるだろう。(Nendoのリファレンスも書く予定だけど…)

5

 

5

どういう風にRubyのコードにマッピングするかは実装しながら考える。

5

ちなみに、今回初めてsyntax-rules使ってシンタックスを定義しているのだけど、これは楽だ〜。

5

やっとブロックが積みあがってきた感じがするよ〜。

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2011_08_18[Sekka] グダグダ変換

5

Sekkaの次の機能として「なっています」等の、よく使う平仮名フレーズも辞書に持つことでミスタイプを救済しようとしているところ。

5

ミスタイプしまくりでグダグダになった場合でもなんとか救済して変換できてしまうことを称して、「グダグダ変換」と呼ぼうと思う。

5

たぶん「グダグダ変換」というキーワードは流行らないけれども、Sekkaのキャッチコピーとしては、わかりやすいのではないかな?

5

 

5

誰もがこの動画のようなスピードで入力してみたいと一度は夢見るだろう。

5
   ‪Yuki Typing
5

Sekkaはここまで無茶な入力をしてもなんとか変換できるレベルを目指しています。(嘘です)

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2011_08_17[CI][Ruby][Lisp] いまやTravis-CIでビルドできるLispはClojureだけじゃないぜ

5
 twitter.icon_reasonably_small    
5
  Travis CI - Distributed build platform for the Ruby communityEXT
5

 

5

Nendoも使える。

5

Nendoで書いた日本語IME、SekkaがTravis-CIでビルド・テストできるようになったことがその証明だ。

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2011_08_15[Nendo] Nendo 0.5.3 リリース

5

Nendo 0.5.3をリリースしました。(リリースノート: Nendo.ReleaseNote)

5

rubygems_icon_128

5

リリースの目玉

5

高階関数の第二引数にEnumerable型を渡せるようになりました。(但し、map filter for-eachのみ)

5

これにより、巨大なIOに対する逐次処理をfor-eachで書けるようになったり、list型だけでなくvector型に対して高階関数を適用できるようになります。

5

エラーが発生した時、正確な行番号がバックトレースに出るようになりました。

5

これまでは実行速度を優先して、バックトレース用の情報をあまり格納していませんでした。(未定義変数のエラー時は正確でした)

5

 

5

 

5

以下リリースノートです。

5

version 0.5.3

5
map filter for-each の第二引数に RubyのEnumerable型を渡せるようにした。
5
 例)
5
nendo> (map (lambda (x) (+ x 1)) '#( 10 20 30 ))
5
#(11 21 31)
5
nendo> (define f (.open "VERSION.yml"))
5
#<File:0x84b74d8>
5
nendo> (map (lambda (x) (+ "# " (x.chomp))) f)
5
#("# ---" "# :major: 0" "# :minor: 5" "# :patch: 3")
5
例外が発生したソースファイルと行番号が正確にbacktrace表示されるようにした。
5
 但し、0.5.2から実行速度が後退した(約1/2程度)
5
以下のバグを修正した。
5
引数ゼロの関数に、1つ以上の引数を渡した時、Nendo::Nilが引数に渡される。
5
  ArgumentError例外で引数の指定個数に謝りがあることを通知するようにした。
5
JRuby1.6.xで通らないいくつかのテストケースを修正した。
5

 

5

 

5

次の目標

5

前回と変わらず、例外処理まわりを何とかしたいです。

5

(参考:kiyoka.2011_07_30[Nendo] Nendo 0.5.2 リリース)

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2011_08_13[Ruby] Travis CIを使ってみた

5

Travis CIはRubyのオープンソースプロジェクトの継続的インテグレーション(CI)を行うプラットフォーム。

5

Travis CI - Distributed build platform for the Ruby communityEXT

5
 An open-source, distributed build system for the Ruby community.
5

 

5

使ってみて、非常に便利だったので紹介したい。

5

といっても、現段階では複数versionのRubyでビルドとテストを行う機能に限定されている。

5

Github上のオープンソースプロジェクトを持っている人に特化している。

5

Ruby + GitHubでない人はゴメン。

5
 At7b
5

私は、Rubyで書かれたNendoというLisp処理系を開発していて、これまで複数のRuby処理系で全部テストするの面倒だった。

5

リリースの度に複数の処理系を切り替えてテストをするのが面倒くさくなってきて、「今回はJRubyのテスト端折ろうかな」と考えたことは一度では無い。

5

Travis CIを使えば、そのような面倒なプロセスを自動化してくれる。スゲー。

5

GitHub上の指定したブランチのpushタイミングで、自動的に複数のRubyバージョンのビルド&テストが開始する。

5

 

5

まずは試しに、NendoのテストスイートをCRuby 1.9.2とCRuby 1.9.3の両方でテストする設定をした。

5

早速、1.9.3側だけエラーが出た。

5
 P1FE
5

 

5

なんと Dateクラスで1970年からの通算秒のフォーマットが変わっているようだ。

5

そんなテスト項目を設定している自分が悪いのだけど、まあこういう仕様変更も発見できるわけだ。

5
 yqX6
5

 

5

 

5

その後、調子に乗ってJRubyもテストするように設定した。

5

しかし、自分の手元の環境とは違い Travis CIの環境では正しく動かないテスト項目がある。

5

多分JRubyの基本的なバグだと思うが、手元で再現しないのでいったん保留にしておくことにした。残念…

5
 cbFv
5

 

5

 

5

まあ、まだTravis CIはalphaサービスなので今後の改善に期待したい。きっと直るんじゃないかな。

5
 z2tG
5

それにしても、このようなサービスが無料で利用できるのは凄いことだ思う。

5

やっぱ、Rubyのように勢いのあるコミュニティ周辺で遊ぶのはメリット大きいなぁと感じる今日この頃です。

5

それと、Rubyコミュニティには自動テストをてんこ盛り書くという文化は良いです。

5

 

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2011_08_10[Sekka] 平仮名フレーズ辞書を追加してみようかな(4)

5
 NbpKsE
5

 

5

先日来のエントリ 

5
 「kiyoka.2011_07_06[Sekka] 平仮名フレーズ辞書を追加してみようかな(1)」
5
 「kiyoka.2011_07_07[Sekka] 平仮名フレーズ辞書を追加してみようかな(2)」
5
 「kiyoka.2011_07_13[Sekka] 平仮名フレーズ辞書を追加してみようかな(3)」
5

の続き。

5

 

5

前回、6-gram Webコーパスから平仮名フレーズを抜きだしてSekkaの辞書にする件を書いた。

5

それらは、実際にSekkaに組み込んでみて使いやすくなったので採用した。(未だリリース版には入っていないので注意)

5

今、この文章は平仮名フレーズ辞書が入った開発版のSekkaを使って入力している。

5

平仮名のフレーズもスペルミスを救済してくれるので、非常に気を抜いて入力できる。非常によいです。

5

 

5

さて、さらに追加でWebコーパスだけでは得られないフレーズをIPADICから取得しよう考えている。

5

ここまでやって初めてSekkaのフレーズ辞書データが揃う。

5

 

5

例えば、ipadic-2.7.0のtarボールに格納されているデータから拾うと、

5

 

5

Noun.adverbal.dicからは、

5
  (品詞 (名詞 副詞可能)) ((見出し語 (いつか 2576)) (読み イツカ) (発音 イツカ) )
5
  (品詞 (名詞 副詞可能)) ((見出し語 (すべて 1464)) (読み スベテ) (発音 スベテ) )
5
  (品詞 (名詞 副詞可能)) ((見出し語 (おとつい 3278)) (読み オトツイ) (発音 オトツイ) )
5
  (品詞 (名詞 副詞可能)) ((見出し語 (このごろ 2305)) (読み コノゴロ) (発音 コノゴロ) )
5

 

5

Noun.others.dicからは、

5
  (品詞 (名詞 非自立 副詞可能)) ((見出し語 (ところ 896)) (読み トコロ) (発音 トコロ) )
5
  (品詞 (名詞 非自立 副詞可能)) ((見出し語 (うち 950)) (読み ウチ) (発音 ウチ) )
5
  (品詞 (名詞 特殊 助動詞語幹)) ((見出し語 (そう 6)) (読み ソウ) (発音 ソー) )
5
  (品詞 (名詞 非自立 一般)) ((見出し語 (とき 2740)) (読み トキ) (発音 トキ) )
5
  (品詞 (名詞 非自立 副詞可能)) ((見出し語 (はず 2915)) (読み ハズ) (発音 ハズ) )
5
  (品詞 (名詞 非自立 副詞可能)) ((見出し語 (かぎり 2149)) (読み カギリ) (発音 カギリ) )
5
  (品詞 (名詞 非自立 副詞可能)) ((見出し語 (ため 428)) (読み タメ) (発音 タメ) )
5

 

5

Verb.dicからは、

5
  (品詞 (動詞 自立)) ((見出し語 (さしだす 3505)) (読み サシダス) (発音 サシダス) (活用型 五段・サ行) )
5
  (品詞 (動詞 自立)) ((見出し語 (わりきる 3505)) (読み ワリキル) (発音 ワリキル) (活用型 五段・ラ行) )
5
  (品詞 (動詞 自立)) ((見出し語 (ひしめきあう 3505)) (読み ヒシメキアウ) (発音 ヒシメキアウ) (活用型 五段・ワ行促音便) )
5

 

5

などの単語を取り出せればと考えている。

5

 

5

それにしても、なんでipadicのデータはS式っぽいフォーマットになっているのだろう。

5

まあ、Lisperにはそのまま(read)できて処理しやすいのでいいのだけど。他の言語で読み込む場合はどうするんだろ。まあいいか。

5

 

5

ここらでipadicの生データをmongoDBとかに入れて検索しやすくすると試行錯誤する時、レスポンスが速くていいのではと思っていたが、Nendo処理系をチューニングして速くなったのと、一旦手順が確立した後の再現性を考えると、Nendoでスクリプトを作ったほうがいいだろう。

5

 

5

Nendoが手に馴染むようになって、Rubyでプログラミングとかは、もうする気が起きないなぁ。

5

gemは作ったり、使ったりするんだけど。

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2011_08_04[アイデア][KVS] SQLiteをKVSのストレージに使う(アイデアのみ)

5
 nosql-logo
5

SQLiteのテストスイート項目数の多さは有名だ。項目数の多さが欠陥の少なさを示しているわけではないが相関はあるだろう。

5

こいつをKVSのストレージとして使えば、ソフトウェアのバグによるデータ破損が発生しにくいKVSが実現できるのではないかというアイデア。

5

 

5

KVSは星の数ほどあるが、コードの信頼性の評価は難しい。

5

普及率も把握できないし、参考にできるのは、どこそこのサイトで実運用しているという情報だけというのが正直なところ。

5

そこで、SQLiteをバックエンドに持つKVSを使えばSQLiteの枯れたコードを利用して信頼性を確保できる。

5

SQLiteはiPhoneやAndroid、ThunderBirdにも入っているため、コードはななり枯れていると推測できる。

5

 

5

そのようなソフトウェアをちゃっちゃとでっち上げるとすれば、きっとNoSQLiteという名前になるだろうなー。

5

と思ってGoogleで検索してみると… もう既にあった。

5

 

5
 DBIx::NoSQL - search.cpan.orgEXT
5
  DBIx::NoSQL - NoSQL-ish overlay for an SQL database
5
 
5
 DESCRIPTION
5
  DBIx::NoSQL is a layer over DBI that presents a NoSQLish way to
5
  store and retrieve data. It does this by using a table called
5
  __Store__. Once connected to a database, it will detect if this
5
  table is missing and create it if necessary
5
  
5
  When writing data to the store, the data (a HASH reference) is first
5
  serialized using JSON and then inserted/updated via DBIx::Class to
5
  (currently) an SQLite backend
5
  
5
  Retrieving data from the store is done by key lookup or by searching
5
  an SQL-based index. Once found, the data is deserialized via JSON
5
  and returned
5
  
5
  The API is fairly sane, though still beta
5

 

5

同じ作者のgithubを見に行ってみると。

5

過去の作品だと思われる、同様のものがあった。

5

 

5
 robertkrimen/FutonDb - GitHubEXT
5
  FutonDb - A NoSQL-ish overlay for an SQL database
5

 

5

作った動機はわからないけれども、作品はあるわけで、同じことを考える人はいるんだなぁと思った。

5

 

5

ついでにPythonにも同様のものがあったり。これはオブジェクトをシリアライズして保存するやつだけど。

5
 y_serial – warehouse compressed Python objects with SQLite — y_serial v0.60 documentationEXT
5
  y_serial = serialization + persistance. In a few lines of code,
5
  compress and annotate Python objects into SQLite; then later
5
  retrieve them chronologically by keywords without any SQL. Highly
5
  useful NoSQL “standard” module for a database to store schema-less
5
  data.
5

 

5

さて、SQLiteをバックエンドストレージにした場合、パフォーマンスは出ないだろうからKVSである必要性が無いんだよなーという、やはり本質的なところに戻ってきてしまった。

5

きっと、超高速なKVSの裏方でレプリケーションスレーブにしてバックアップ専用に使うとかが現実的なのかな。

5

例えば、次のような構成かな。

5
 Tokyo Tyrant => レプリケーション => NoSQLite(SQLite内蔵)
5
 または
5
 Kyoto Tycoon => レプリケーション => NoSQLite(SQLite内蔵)
5

 

5

なんか、KVSのインタフェースを持つ必要性がうぃんあらなくなってきたぞ。あれれアイデアが破綻した…(笑)

5

 

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2011_08_02[翻訳][アイデア] アサハカな日英翻訳プログラムのアイデア

5

だいぶ前から考えているアサハカなアイデアがあるのだが、いくら考えてもあまり良いアイデアに昇華しない。

5

この狭い日本語圏には、きっと同じことを考えてはボツにしている人がもうひとりくらいは居るだろう。私のアイデアを晒しておこうと思う。

5

アイデアは「あるルールの範囲内で日本語文章を書けば正確な(読める)対訳英文が出力される」というシステム。というか翻訳ツール。

5
 xBGruU
5

 

5

概要

5

オープンソースソフトウェアなどのマニュアルなど、技術的なドメインでは定型の文章が大半を占める。

5

よほど奇をてらったようなチュートリアルを書こうと思わない限り、使うフレーズのパターンは増えないと考える。

5

そこで、ある制限されたルールの範囲内で日本語文章を書けば、正確な(読める)対訳英文が出せるのではないか、というのが発端。

5

 

5

コンパイラ(翻訳プログラム)がルールを逸脱した文章が検出すればエラーを報告してくれれば、制限を確認しながら原文を書いていくことができる。

5

※ Emacsのflymakeのようなものを使って、リアルタイムのフィードバックを見ながらシステムに文章を入力するようなイメージ。

5

 

5

メリット

5
翻訳ターゲットの言語の知識が無くても、翻訳後の文章の品質をツールが担保してくれる。(特に、a the on of in with などの用法が正確になる)
5
あらかじめ日英両方の言語でメンテナンスしたい技術ドキュメントの原文を一元管理できる。
5
「読める」英語を書くスキルが無い人でも英語圏に向けて発信可能なドキュメントを作ることができる。
5
翻訳に人的コストが発生しない。
5

 

5

さらなるメリット(かなり眉唾)

5

日本語の原文に使える語彙や文法を限定することによって、原文の意味の解析が容易になる。それにより、英語の文章の生成だけでなく、数十言語への翻訳が可能となる。

5

 

5

問題点

5

解決できる課題は限定的

5

英語圏の人間がドキュメントを読めるようになったとしても、ドキュメントを書く人間が英語でコミュニケーションできない場合、英語のメーリングリストなどを使ってコミュニケーションを取れるようになるわけではない。

5

 

5

原文の言語は日本語のみ

5

例えば、英語での校正文章をフィードバックされても、日本語がソースになっているためそのまま取り込めない。

5

 

5

考察

5

このアイデアが解決する課題は非常に限定的なため、実際的な言語の壁を越えるためのツールとはなりえない。

5

ただし、その第一歩を踏み出すための補助ツール、翻訳の労力を削減するツール、複数言語の同期を維持管理するコストを削減するためのツールとしては十分有用と考えられる。

5

したがって、英語の読み書きのスキルが高い人であっても、うまく活用すれば非常に有用なツールとなる可能性がある。

5

 

5

まとめ

5

翻訳後の文章の品質をツールが担保してくれるシステムがあれば非常に有用である。

5

誰か作ってください。こんなツールがあれば使いたいです。

5

 

5

対訳コーパスを使った翻訳システムが全盛の時代に、今更このようなヒューリスティックな手法は費用対効果の観点から問題がありそう。

5

また、翻訳システム関連の論文を読んでいるわけではないので、似たようなことをやった論文はあるかもしれない。調べていません。あしからず...

5

 

5

COMMENTshiro

おもしろいアイディアですが、言語的に制限してしまうとそれはピジン日本語のような新たな方言 (および、それが翻訳される先の、独特な英語の方言) を産み出すことになって、人間の読み書きの負荷が減るかどうか疑問です。

翻訳ツールが訳しにくい部分、解釈しきれない部分をon the flyで指摘してくれて、対話的に解決できる (例えば曖昧な文脈にアノテーションをつけるなど) ようなツールならいいかも。人工言語のように制限内/外というのを厳密に判断するのではなくて、何らかのヒューリスティックに基づいた翻訳評価関数があって、そのスコアが低い場合に注意してくれる、というような。

5

COMMENTkiyoka

コメント頂けて嬉しいです。どなたからも反応ないだろうなと思っていたので。^_^

ピジン日本語をWikipediaで調べてみたら、「私、中国人あるね。」のような方言のことですね。ぎりぎり通じる中国語脳にやさしい日本語表現みたいな。ちがうかな。

確かに、翻訳ツールのコンパイルエラーを回避するために原文をいろいろこねくりまわしていたら、結果的にそういうバッドノウハウ的な日本語ライティングテクニックが見つかって、とりあえず「やりすごす」みたいなことが頻発しそうです。その結果、日本語版のマニュアルはちょっと違和感のある文章が混在している、とかはありそうです。

このコンパイルエラー回避で試行錯誤する時間と、変な日本語を読む負荷を考えると結構キビシいかもです。

さすが実際に翻訳をされたり、日英両方のドキュメントをメンテし続けていらっしゃる方ならではの鋭い指摘です。

時々、日本人でも英語の訳文のような文体の方がいますが、(私もちょっとそういう感じかも)それと似た、書き言葉としての方言が発生するような状況が予想できます。

shiroさんの案のように、評価関数のスコアの閾値で注意してくれるというのは良さそうですね。私の案は自然言語を、まるでプログラミング言語のようにパースできるものとして扱う前提になっています。

いつかは、自然言語処理や機械翻訳を研究されている方々が技術を前進させてくれて、私の要望に近い翻訳ツールが出てくるといいなと思っていますが、それはいつごろなのでしょうね。

自分で作るのはきっとムリなので期待して待ちたいと思います。

5

COMMENTshiro

プログラミング言語のように形式的に言語を決めてマニュアルを書くってことは、そのマニュアルの内容を(翻訳が可能な程度に)コンピュータが理解できる意味論も定義されるってことで、ということは結局新しい仕様記述言語を作っているのと変わらないんじゃないかって気がします。それならそういう言語の構文とセマンティクスを定めてやれば、いちいち翻訳するよりその言語を人間が直接読んで理解する方が速いし正確だ、ってことになりそうな。

5

COMMENTkiyoka

なるほど、翻訳原文用の仕様記述言語を作ったほうが、目的を達成する近道になりそうというということですね。

確かにそんな気がします。

意味論まで定義しようとすると、原文が自然言語ではかなり効率が悪そうです。

達成したい目的から考えるとやりかたはいろいろありそうですね。

0

comment (disabled)

5