Sekka.DONE RSSPLAIN

Related pages: Sekka Sekka.TODO
55551111555555555555555555555555550000055544455555555555522222222222555444444555555555552255555555500000555555555511111111333333444445555555555555555555555555555555555555555555554555555555551111111155555555550000000
5

Sekkaの完了済項目

5

TODOリストはSekka.TODOを参照してください。

5

 

5

仕様関連

1
done sekka-kakutei-with-spacekey のデフォルト値を nil に戻す。
1
 やはり、Sekkaのアイデンティティは modeless だったはず。
1
 それにもとなって、sekka-muhenkan-key も nil にする。
1
 spacekeyで変換したい人は有効にすればいい。
5
done 辞書中の#0から#9 を使った数値付き変換をサポートする
5
 例えば、数字+ローマ字 (例:"1kagetu") は #かげつ /#ヶ月/ の辞書エントリを使う。
5
done AZIKの撥音 "っ" を usキーボードでは ";" とそのシフトは ":" で対応できるようにする。
5
 => sekka-serverには、キーボード種別に依存したコードは書かない。
5
 => クライアント側でusキーボード設定時、":" を単純に "+" に置きかえてサーバーに送信する手段をとる。
5
done AZIKの棒線 "ー" を usキーボードでは "'" で入力できるようにする。
5
 => ローマ字の解釈として "ー" を "'" でも入力できるようにして対応する。キーボードの種類は関係ない。
5
done クエリの先頭2文字が大文字であった場合でも、送り仮名ありの変換とみなす。
5
 AUと入力した場合でも『合う』と変換できるようにする。(SKKと同じルール)
5
done 大文字で始まるクエリは漢字優先。全小文字のクエリは平仮名優先のルールにし、大文字指定を忘れてもそれなりに使えるようにする。
5
done 大文字で始まるクエリにも、平仮名と片仮名の変換候補を付加する。
5
 "Nihongo"  => 変換候補 ( "日本語"  ... 漢字仮名交じり候補 ...   "にほんご" "ニホンゴ" )
5
 また、変換候補選択モードにて Ctrl+I と Ctrl+U でそれぞれ片仮名、平仮名候補が直接選択できるようにする。
5
done 送り仮名付きのクエリにも、平仮名と片仮名の変換候補を付加する。
5
done sekka-serverのポート番号のデフォルトを12929にする。
5
done sekka.el: Meta+j でカーソル直前のローマ字をキャピタライズ(先頭大文字化)したり、アンキャピタライズ(先頭小文字化)する。トグルする。
5
done 全角アルファベットの入力をサポートする
5
 どのローマ字表記であっても、元のアルファベットの半角と全角候補も含むようにする。
5
done 通常のローマ字、AZIK、sticky-shiftの全てが整合した仕様を考える。
5
 => sticky-shiftを";"で、AZIKの"っ"を"@"で表現する。 "@" の大文字指定は日本語キーボード上でのShiftしたキーとして "`" とする。
5
 => 例) "かっこ" は "ka@ko" と入力する。 "勝った" は "ka`ta" と入力する。
5
done AZIKの撥音 "っ" を ";" と "+" でも指定できるようにする。
5
done REST APIの引数に、返却するフォーマットを指定する format= を用意する。
5
 取り敢えず、ファーストリリースでは format=sexp しかサポートしない。
5
done WebAPIの/flush /kakutei は queue にコマンドを詰むだけにして、実際のDBの更新はバックグラウンドで行う
5
done http_proxy環境変数を読んで、proxyサーバー経由のアクセスができるようにする。
0
done .sekka-jisyoファイルに次の平仮名フレーズの書式を追加する。
0
 既存仕様
0
  ひらがな  //[改行]
0
 追加仕様
0
  ひらがな[改行]
5

 

5

 

5

sekka.el

4
done Ctrl-gで変換候補のリアルタイム表示を終了する。
4
done リアルタイム候補表示中のみスペースで変換可能なユーザインタフェースを試す。
4
 設定はcustomize変数にする。
5
done ~/.sekka-jisyo が無い場合は、新規にファイルを作成する。
5
done リリースバージョンをソースコードに自動埋め込みする。(rake compile)
5
done 2つ以上前に確定した単語を何度でも候補選択できるようにする。
5
 変換済の場所ならどこでも過去にさかのぼって候補選択モードに入れるようにする。
5
 バッファローカル変数に記憶して実現する。(Emacsを終了したら消えてよい)
5
done sekka.el: Sticky-shiftの動作として ";" バックスペースはStickyのキャンセル扱いとする。
5
done viperのサポートを廃止する
5
done sekka.el: 変換候補のリアルタイム表示の終了トリガとして、カーソルの移動距離(行数)もサポートする。
5
done 単語登録UIを追加する。
5
done 候補選択モード: popup.elなどを使って候補一覧から選択できるようにする。
5
 [Ctrl-J]を何十回も押して探すのは大変。
5
done proxyを参照しないドメインを指定できるようにする。
2
done スペースキーを素早く2回連打するとサジェストモードを抜ける操作を試す。
2
 マウスのダブルクリックという操作からの連想。
2
  => プロトタイプを作ってみて実際に実験した結果、没とした。
2
  =>2回連打の間隔をいくらに設定しても、人間が1回のキーシーケンスと2
2
    回のキーシーケンスを使いわけることは困難だと思われたため。
2
done 'q'キーで無変換でスペースをひとつ入れるユーザ・インタフェースを試す。
2
 qでキャンセルして抜けるという操作の連想。 (unixのlessコマンドなど)
2
  => 操作しやすいことがわかったため、0.9.2のsekka.elのデフォルトは有効にした。
2
done 接続先ホストを第一候補、第二候補くらいまで設定して、ダウンしていても代替ホストで変換するようにする。
2
done 候補選択モード時、Ctrl-RでGoogleIME経由の辞書登録と平仮名フレーズの登録の両方を行えるようにする。
2
 GoogleIMEで取得した単語以外に(「平仮名フレーズを登録する」という選択肢が出てくるようにする)
5

 

5

 

5

機能追加

4
done sekka-server起動時にTokyo Cabinetの辞書ファイルの最適化(optimize)を自動的に実行する。
4
 OSのリブートタイミングによってはTokyo CabinetのDBファイルが壊れることがあったため自動修復の意味もある。
4
done Tokyo Cabinetだけでなくgdbmやndbmなどの普及したライブラリに辞書を構築できるようにする。
4
 SekkaはKVS部分が抽象化してあるので可能だと思う。
4
  => Tokyo Cabinetを入れなくても動くように。
4
  => Travis-CIでテストを通せるように。
5
done gemでインストールしたsekkaのホームディレクトリを返す sekka-path を追加する。
5
 それにより、バージョンアップしても .emacsの設定を変更しなくても良いようにする。
5
done Sekka Web APIのベンチマークを行うコマンドを追加する
5
done 辞書学習をサポートする。(最終確定した単語を第一候補に持ってくる)
5
done Sticky-shiftをサポートする。
5
done リアルタイムの変換候補表示をサポートする。
5
done 辞書学習で、変換候補の順番が更新された場合、memcachedのキャッシュをクリアする。
5
done 辞書学習情報をユーザー別に分離する。
5
done ~/.sekka-jisyoのフォーマットチェックを厳密に実施する。
5
done ユーザー辞書の登録機能を実装する。
5
done 辞書変換ツールに変化処理の進捗状況を表示する。
2
done 辞書用ストレージとして、Redisに対応する。
2
 メモリが潤沢なマシンではDiskIO waitが高くても重くならないように。
5

 

5

 

5

実験

5
done カタカナ語を登録する実験をやってみる。
5
 SKKでひらがなからカタカナ語に変換する - (rubikitch loves (Emacs Ruby CUI))EXT
5
 => 結論としてこれは必須ということが判明した。
5
done sekka.el: 設定でSandSを一発で有効にする機能を追加する。
5
 参考: 親指を有効活用space-chord.el~スペースを押しながら~ - (rubikitch loves (Emacs Ruby CUI))EXT
5
 => 結論: Sekkaは常に動き続けているので、space-chord.elを有効にすると、shellのコマンドラインなどが使い難くなるため。やめた。
0
done Sekkaの辞書からAZIKサポートを抜いたらどれくらいメモリ削減できるか実験
0
 圧縮前
0
  Redis-2.5.8 の消費メモリ          1.40GByte
0
 圧縮後
0
  Redis-2.5.8 の消費メモリ          0.46GByte       67%減
5

 

5

 

5

高速化

5
done ユーザー語彙の登録処理が遅いので、Emacsとは別コマンドによる登録か、サーバー内でバックグラウンド登録に変更する。
5

Emacsからの一括登録だと、語彙数に比例して投稿時間が延びてしまう。

5
done 無条件で全ての変換候補を返さずに、APIのパラメータに返却する変換候補リストの数を指定できるようにする。
5

Emacsからリアルタイムで第一変換候補を表示するだけの目的には 1 を指定し、変換(Ctrl-J)した時は全リストを要求する。

5

 

5

 

5

バグ修正

1
done sekka.el: url-host関数が呼びだせず、mode-lineのSekka[]の表示が消える。
1
 きっとurl-parse.elのrequireが必要だと推測。
1
done Debianパッケージにすると以下のエラーが出て動かない。
1
 Debian testing上でgem2debでdebに変換した。
1
~ $ sekka-server 
1
/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- /usr/lib/sekkaconfig (LoadError)
1
        from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
1
        from /usr/bin/sekka-server:8:in `<main>'
3
done M-x 20 [space] でスペースが20文字入るはずが、1文字しか入らない。
3
done sekka-pathが正常に動かない問題を調査する。 https://gist.github.com/1168173
3
done sekka-pathが正常に動かない問題を調査する。 https://gist.github.com/1168173
3
done "2011nen9gatu"など # つき辞書エントリの処理で、sprintfの引数の指定数のランタイムエラーが出る。
3
  #ねん#がつ#か という辞書エントリに対して、2011nen9gatuなどのクエリを発行すると出るようだ。
3
  (apply sprintf ... ) というコードが問題。
4
done M-x sekka-flush-userdictしてもsekka-server側の辞書の全クリアがうまくできない場合がある。
4
done 変換候補の中に漢字候補(type=j)が含まれない場合、候補選択ができない。
4
 後で平仮名から片仮名に選択し直そうと思ってもできない。
4
 例えば、「とらとらとら」を「toratoratora」で入力・確定したあと、Ctrl-Jで変換候補選択に入れない。
4
done Sekka 0.9.0リリース候補のLARGE辞書で「Kumikomu」を変換すると、「  」空白文字になる。
5
done ユーザー辞書に "ゆーざーじしょ /ユーザー辞書/" を登録しても変換候補に出現しない。
5
done AZIKの"dr" => "である" の定義が抜けている。
5
done skk-azik.elのテーブルからテストスイートを生成して、テーブルに抜けが無いかチェックできるようにする。
5
done ユーザー辞書から消した単語がDBに残ってしまう。(単語の追加しかできない)
5
done "Icchi"で "一致"が候補に出てこない。
5
done "Kuni"で "国"が候補に出てこない。
5
 => "n" と "nn" の両方で "ん"を表現するようなローマ字テーブルにした。
5
done "eRu"で "得る" に変換しようとするとエラーになる。
5
 => 結論は、DB作成のバグ。自前のindexテーブルに"eR"というエントリが入ってなかったことが原因だった。
5
done "wo" を変換しようとすると、nilをsplitできないというエラーが出る。
5
done "gitHuB" など、送り仮名ありのローマ字表記ルールにマッチしないものがあると、変換メソッドでエラーが発生する。
5
done sekka.el: sekkaの初期化時にカスタマイズ変数 sekka-sticky-shift が効かない。
5

=> 結論: カスタマイズ変数をやめた。

5
done "Issyun"で "一瞬" が候補に出てこない。"Isshun" なら出てくる。
5
done "DeT" または "MiR" で 変換すると、TypeErrorが出る。
5
done "AU"で合うという候補しか出てこない。「会う」も出てきてほしい。
5
done sekka.el: カーソル位置に変換対象が無い場合でも変換候補の枠 "[]" だけ出てしまう。
5

その場合は何も出さなくてよい。

5
done "Saki" で変換すると"策" "柵" などの変換候補が "先" よりも優先されてしまう。
5
 [現象]
5
  amatch 0.2.5のバグだった。時々、Jaro-Winkler distanceの結果が狂う。
5
  再現確立は低いが、"saki"と"saku"の距離が 1.0(完全一致) と判定されることがある。メモリ破壊等が起きているのか?
5
 [解決策]
5
  => amatchは使わない。自前でJaro-Winklerを用意する。
5
done "kiKU" を変換し、"効く"で何度確定しても"聞く"が第一候補に出てくる。
5
  => 送り仮名付きの確定のアルゴリズムにバグがあった。
5
done "Innyou" を変換し、"引用" で確定しても "飲尿"が第一候補に出てくる。
5
 => 原因: "innyou Cいんにょう/いんよう" というエントリが存在したので、"innyou"というキーワードには
5
          必ず、先に登録されているいんにょうのほうが先に出てくるようになっていた。
5
 => 対策: ヒューリスティックとして、n 1個よりも nn 2個のほうが "ん" を強く表現すると評価するようにした。
5
          結果として "Inyou" で "飲尿" が "Innyou" で "引用" が先に出てくるようになった。
5
done "Shinnyou" を変換しようとすると、sekkaserverが例外で落ちる。
5
 => 原因: 変換候補数が増えると、append-map関数内でstack level tool deepとなることがわかった。
5
 => 対策: srfi-1のappend-mapの代替を自分で定義して回避した。
5
done 優先ローマ字の設定を azikとnormalの切りかえをしてもmemcachedにキャッシュされたクエリが切りかわらない。
5
done "ブログt" と "ブログr" の両方をユーザー辞書に登録しても "ブログr" のほうがインデックスに登録されない。
5
done memcachedサーバーが停止している時にsekkaserverに例外が発生して正しい変換結果を返さない。
5
 クライアントに対してエラーメッセージを返すべき。
5

 

5

 

5

リファクタリング

5
done sekka.elの不要な機能、関数を削除してコードをすっきりさせる。(sumibi.elから持って来たままの残骸がある)
5

 

5

 

5

ドキュメント

4
done .sekka-jisyoをDropboxに置いて、全クライアントで辞書同期する方法を追記する。
5
done サーバー側インストール手順
5
done クライアント側インストール手順
5
done Emacsの操作マニュアル
5
done ユーザー辞書の管理方法
5
done 公開している作成済辞書の解説
5
done SKK辞書からのコンバート手順 (Athron64での処理時間を書きこむ)
5
done Sekka Web API仕様
5
done InputMethod勉強会の発表資料作成
5

 

5

 

5

その他

1
done 公開辞書データの提供URLをsumibi.orgからgithubに移行する。
1
 結果:
1
  githubに233MByteのtsvファイルを置いて、curl https://raw.github...で取
1
  る実験をした結果githubがblob is too bigというエラーメッセージを出して
1
  データ取得できなかった。この件は失敗。
1
done 公開辞書データの提供URLをsumibi.orgから安定したサイトに移行する。
1
 github上に、取得先ダウンロードリンクを記載したファイルを置いて、
1
 自前でリダイレクトするようにした。
5
done 使っているSKK辞書を全てGithubに上げる。
5
done ライセンス表記を全てのファイルに設定する
5
done gem化する
5
done Sekkaサーバーのセットアップ用スクリプトを用意する
5
 (変換済みの辞書をダウンロードして所定のパスにインストールするなど)
5
done SekkaサーバーをBSDLに設定するためにNoSQL DBをKyotoCabinetから別のDBに移行する。
5

条件は、クライアントライブラリが、GPLv2 GPLv3 などでないこと。

5

クライアントライブラリがBSDLやLGPLなら良い。(クライアントライブラリをリンクしてもGPL感染しないこと)

5
done amatchライブラリの代替製品を探す。GPLでなくメモリリークしないもの。無ければ自分で作る。
5
 => fuzzy-string-matchというライブラリを作った。lucene-3.0.2のポーティング版
0
done Sekkaの辞書ストレージを圧縮する方法を考える(文字列の圧縮)
0

※ zlibによるKVSのValue側の圧縮を試したが、圧縮後のほうが大きくなる。不採用。

0

別の方法を考える必要がある。

0
 圧縮前
0
  Redis-2.5.8 の消費メモリ          1.40GByte
0
 圧縮後
0
  Redis-2.5.8 の消費メモリ          1.54GByte       10%増