鬼軍曹.el を少しだけ饒舌に

id:MIZUNO:20110222:1298392472 に触発されて、pos-tip 化に加えて罵倒までしてくれるようにいじってみた。

.emacs の drill-instructor 用設定に、

(setq drill-instructor-cuss-file "~/hartman.txt")
(setq drill-instructor-alert-expression 'pos-tip)

とかすると、pos-tip が有効にされていれば pos-tip で罵倒してくれるようになる。サンプルも一緒においたけど、別途 fortune 形式 (% 区切り) の辞書ファイルが必要なので、そこは自分色に染めるということで。

誰得というかほぼ私信という感じだけど気にしない。

skkserv に愛を

SKK advent calendar の 9 日目です。

8 日目は ponkotuy さんの「辞書結合〜SKK-JISYO.LLを作ってみる」(id:ponkotuy:20101214:1292343807) でした。ここでは同じ問題 (辞書増やしたい) を解決できる、別のアプローチを紹介してみようと思います。

skkserv

SKK では、辞書データをフロントエンドにもたせるか、辞書サーバにもたせるかを選ぶことができます。

最近はクライアントマシンの性能はあり余っているし、個人利用がメインでマシンを共用することなんてなくなってきている上に、cdb をそのまま elisp に読ませてしまえ的な流れもあるようだし、検索しても二昔前くらいの辞書サーバ関連記事しかでてこないし、そもそも辞書サーバは需要がなくなってきてるのかなー、なんて気がしなくもないのですが、手元の emacs がわざわざ辞書ファイルを開いて抱えるのが気にいらないので、私は未だに辞書サーバから離れられません。

[Ad]依存が高じて、debian で yaskkserv という skkserv のパッケージをメンテナンスしていたりもします。

「えー、別に手元に辞書ファイルおいとけばよくね?」というあなた向けに、いくつか辞書サーバのメリットをば。

  • emacs の荷物が減る (場合がある)
  • 複数の辞書を簡単に扱える (ものもある)
  • 動作中に辞書を更新できる (ものもある)
  • 後述する server completion が使える (ものもある)
  • 据置ノードを複数飼っているなら、辞書サーバを集約できる

普段の作業をゲロ非力な Atom でやっていると emacs を軽く維持することは重要ですし、L 辞書だけじゃやっぱり足りないし、新しい辞書を反映させるために elscreen の広がった emacs を再起動するのもゾッとしない話です。
また、持ち歩くこともあってノート PC では個別に辞書サーバを動かしてしまうのですが、仮想環境なんかで複数ノードを飼っているなら、辞書サーバを集約しておくと、ある程度育った個人辞書を放りこむ先として使えたりもします。

どうでしょう。「ちょっと skkserv 使ってみようかな」という気になったりならなかったりしないでしょうか。

[Ad]yaskkserv は登場してから結構たっていながら、未だにOpenlab の辞書サーバページで紹介してもらえない不遇の辞書サーバですが、軽快でフットプリントも小さく、余計な依存もないので、これから skkserv を使おうという方にはオススメです。ご明察の通り、yaskkserv では先にあげたようなメリットを全て享受することができます。debian では

sudo aptitude install yaskkserv
sudo vi /etc/default/yaskkserv
sudo /etc/init.d/yaskkserv restart

とやって使いたい辞書を選ぶだけで良いようになってますのでご利用ください。

ちなみに、このエントリでは yaskkserv を推していますが、他に mecab-skkserv とか gtskkserv といった変態的な辞書サーバもありますので、試してみると面白いかもしれません。SKK 辞書サーバは仕組みがシンプルらしいので、腕に覚えのある人であれば、自分で実装するという楽しみ方もできるでしょう。

server completion

で、せっかくなので、skkserv を使っているあなただけがアクセスできる機能ということで、server completion というものを紹介します。*1

すごく大雑把に一言でいえば、「辞書サーバを前方一致で全検索」する機能です。とても簡単なので、さくっと .emacs に設定を追加してみましょう。個人辞書への学習はお好みで。

;;; server completion を有効にする
(add-to-list 'skk-search-prog-list
             '(skk-server-completion-search) t)
(add-to-list 'skk-completion-prog-list
             '(skk-comp-by-server-completion) t)

;; 個人辞書への学習をしない
(add-hook 'skk-search-excluding-word-pattern-function
          #'(lambda (kakutei-word)
              (eq (aref skk-henkan-key (1- (length skk-henkan-key)))
                  skk-server-completion-search-char)))

eval-buffer とか適当にしたら、何はともあれ試してみましょう。適当な見出し語を少しだけ変換モードで入力し、最後にチルダ(~)を入力してから変換します。

例えば「▽すうがく~」で候補をたぐっていくと、結構なんじゃこりゃな感じでニヤリとできるのではないかと思います。

普段の入力で使う実用性がそんなにあるわけではないのですが、クソ長い専門用語を何度も使わないといけないとき、あやしげなエイリアスで個人辞書を汚すことなく、打鍵数を節約できたりするかもしれません。

なお、この機能はクライアントとサーバを選びます。クライアントは今のところ ddskk 限定のようです。*2
サーバの方は、上でプッシュした yaskkserv の他には、Windows 向けの実装である wceskkserv でもサポートされているようです。まぁ yaskkserv を選んでおけばいいよ!

というわけで、10日目は cloneko さんです。よろしくお願いします。

2010-12-18追記

Openlab の辞書サーバページに yaskkserv が追加されたので、一部記述を訂正しました。

*1:とはいっても、存在を知ってさえいれば、skk-server-completion.elを一目見るだけで終わってしまいますけど。

*2:AquaSKK では実装の検討は行なわれたようですが、その後どうなっているのかはよくわかりません。

OmegaT の用語集と翻訳メモリを作ってみる

maint-guide の翻訳を PO 形式で更新することにしたので、ずっと後回しにしていた OmegaT いじりも兼ねて、翻訳をはじめる人向けのサポートになるかなーと思って、表題のようなことをやろうとしてみた。

用語集

Debian JP では対訳表というのを……作って……いて……、skk の辞書データという形でマスターが管理されている。もとのデータも簡単な key/value で、すでに他の形式に変換するスクリプトがいくつかあるので、それを真似て OmegaT の用語集形式 (tsv) に変換するスクリプトを作ってみた。変換したデータは

http://www.debian.or.jp/community/translate/

にある tsv のリンクからダウンロードできるようにしてある。

これを、OmegaT の PROJECT/glossary ディレクトリに置いておくと、用語集にある単語が翻訳文中にあると、右下の窓に訳語の候補を出してくれるようになるので、翻訳をやりはじめた最初のうちは役に立つんじゃないかと思う。

翻訳メモリ

こちらが本命なのだけど、debconf po の翻訳が結構進んでいるので、その結果を翻訳メモリとして流用したいなぁ、と企んでいる。うまくいってないので、とりあえず今やってみたことだけメモ。

まずは、OmegaT を起動して、新しいプロジェクト (EN → JA、「文レベルで文節化する」のチェックを外す) を作成したら、コンソールに移動する。プロジェクトフォルダの下にsources ディレクトリが作成されているので、そこに

http://i18n.debian.net/material/

に置かれている現時点の debconf po 全部の tar 玉をダウンロードして、展開する。他の言語は不要なので全て消し、euc-jp と UTF-8 が入り乱れているので UTF-8 に揃える。

# 確かこんな感じでやったけど細かいところは覚えてないので適当
cd /path/to/project/sources
wget http://i18n.debian.net/material/po-debconf-unstable.tar.gz
tar zxf po-debconf-unstable.tar.gz
find . -name \*.po.gz | while read FILENAME
do
  if echo $FILENAME | grep -qv ja.po
  then
    rm $FILENAME
  else
    gunzip $FILENAME
    nkf -w --overwrite `echo $FILENAME | sed -e 's/\.gz$//'`
  fi
done

OmegaT文字コード判別はあまりあてにならないので、「設定>ファイルフィルタ>POファイル>編集」と辿って、*.po ファイルのエンコードを両方明示的に UTF-8 に変更し、確定。

再度読み込むか、みたいなことを聞かれるので、そのようにさせると、翻訳済の po ファイルをデータとしてのみこんだ omegat プロジェクトのできあがり。保存して一旦 omegat を終了する。

最終的に、/path/to/project/projectname-po-*.tmx というのが 3 ファイルできている。これが欲しかった翻訳メモリのデータファイルのはず。この *.tmx を翻訳したいプロジェクトの tm/auto/ に配置すると、すでに翻訳された英文をもとに参考訳文とか出してくれるはずなんだけど……そううまくはいかないみたい。

データとしてはちゃんと tmx として読みこんでくれている。ただし、元の po の一単位 (msgstr)が複数文章をもってて長いせいか、ほとんど参考訳文としてマッチしていない模様。

宿題

  • PO ファイルのフィルタが改善されているらしい新バージョンで試してみる
  • 「。」で区切った状態で認識させる方法を追求する
  • omegat 内のブラウザが UTF-8 を文字化けさせる謎を解く

それにしても、今回は mentors に再 put しようと手元でいじっていた omegat 2.0.5.4 を使ったけど、omegat の新バージョンはいつまでも Beta がとれなくて困る……。

2010-10-21追記

omegat のマニュアルが文字化けするのは、現在の debian パッケージが何か悪さをしている気配。svn checkout して ant build したら、きちんと表示された。

関西 Debian 勉強会 #26

関連イベント紹介と自己紹介

最近のイベントについて、nogajun さんにざっと紹介してもらった。Debconf は関西メンツからの参加者がなかったので、主に OSC Kyoto と オープンフォース徳島について。

資料作成の依頼はしたけど、それについて喋る、という意識はなかったとのことで、ここは反省点。とはいえそれでもちゃんと喋ってくれるあたりはさすが。

この後、毎度恒例の自己紹介。今回は、初参加の方もおられたのだけど、こういう場合は、順番は後ろの方に回してあげた方がいいよね。考える時間ができるし、常連さんのを見て「あぁ、好きに喋ればいいのか」ということもわかるだろうし。

lintian でパッケージをチェックする (大浦さん)

続けて大浦さんによるセッションで、helloworld パッケージを題材に、lintian の読み方や対処の方法などについての説明。

lintian は Debian ポリシーに最低限準拠した形になるまでパッケージャーを矯正してくれるので、パッケージングに手を出した時にはそのありがたさに感動したのを思い出すなぁ。

lintian の表示が日本語になっていたら、パッケージャの卵にはすごく嬉しいんじゃないか、と思うけど、Debian ポリシーへの追従とか考えると、鮮度を維持するのは大変かもしれない。もっとも、現時点で lintian にはそもそもメッセージ翻訳の仕組みはないらしいけど。

DDTSS を使ってみよう (自分)

ここで少し休憩を挟んでから、DDTSS のハンズオン実習を行った。説明資料は、東京で綺麗にまとめられているのでそれを流用して、とにかく参加者に実際に DDTSS を使ってレビューと (できれば) 翻訳をやってもらおう、という目的。

時間に余裕があったのと、DDTSS ネタへのニーズもあるようだったので、じっくりみっちりゆっくりと進めた。なんだかんだで、最終的にはほとんどの人に何らかのレビューや操作はしてもらえたと思う。

「ID 作るのが面倒」とか「英語の画面でどこをどう操作したらいいかさっぱり」とか、そういう壁はとっぱらえたはず。気がついたら気軽に使っていける道具、になっていればいいけど。

DDTSS にアクセスするために、PHS-300 を使って手持ちのイーモバ回線を無線 LAN 環境として提供した。よく無線接続が黙り込んで、ifdown/up する必要があったりしたものの、なんとか目的は果たせた、かな。今日くらいの人数・内容が限界という感じ。

宴会

駅近くの坐・和民にて。id:sasakyh の大学院残酷物語が涙を誘う。

運営

いろいろあって運営担当を引き継いでの実施だったので、講師の手配と資料準備、会場設営、司会進行をやってみた。とはいえ、資料が完成したのが前日とか、プレゼン用の映写資料がないとか、やっぱりバタバタした感じになってしまった。

他はどうとでもなりそうだけど、資料の準備と印刷がネックかなぁ。

資料の印刷

一応、作業手順をメモとして残しておく。今回は東梅田の Kinko's で印刷した。

Kinko's は 24 時間営業なので時間や曜日を気にしなくてもいいのがありがたい。カンプリは日曜やってなかった。

  1. 勉強会リポジトリの今回分資料を完成させて、make する
  2. pdf ファイルが生成されるので、簡単に中身を確認する
  3. pdf ファイルを SD カードにコピーして、Kinko's にもっていく
  4. Kinko's でセルフ PC 操作を依頼し、SD カードからデスクトップに pdf ファイルをコピーする
  5. pdf ファイルを開いて Acrobat を起動する
  6. 印刷設定で、次の内容を設定
    • 指定されたモノクロプリンタ
    • 印刷用紙のサイズ (今回は B4 を指定:冊子にすると B5)
    • 中綴じのオプション
    • 一部ごと出力のオプション
  7. テスト用に一部印刷して仕上がりを確認する
  8. 問題なければ必要な部数を印刷する
  9. 出力された用紙を受けとって、折る
  10. ホチキスで綴じる (今回はなかったので折っただけ)

「レガシーコード改善ガイド」読書会

久しぶりに、読書会に参加してきた。盆休みのおかげか、こころにも余裕があったので、しばらくぶりに息継ぎした気分。


初回ということで、14:00 前くらいから 17:00 頃までで、6 章まで (P.86) を読んだ。
イントロ的な部分ということもあり、みんなすごいペースで読み進めてしまい、もっぱら selenium や cucumber といった別の話題で盛り上がっていたみたい。


リファクタリングとかデザインパターンの知識を前提にしてるわりには、単体テストや xUnit について説明/紹介してたりして、ちょっとアンバランスな感じ。原書の出版時期の問題かな?
実際のところ、オブジェクト指向言語テスト駆動開発について多少聞きかじっていれば、5 章までは読み飛ばしても問題なさそう。

6 章の「時間がないのに変更しなければなりません」で紹介されている内容は、実際にもよく遭遇するパターンらしいので、今日は活用できなかった相互参照も含めてもう一回くらい読み直しておこう。

関西 Debian 勉強会 #24

今日の参加者は 18 名。地理的な条件とか、ちょっとした興味とか、OSC でブースを見たなど、常連さんじゃない方がチラホラ。ネタ (live-helper) に惹かれた人も。

例によって、私は少し遅れて参加。

ハッカーに一歩近づく TIPS: bash 編 (山下康成さん)

インタラクティブシェルでのちょっとした TIPS の紹介と実演など。
事前に実機の持参をお願いしていたので、手元で試した人が「おおー」と歓声があげていたり、会場から「こんなのもあるよ」とツッコミがあったり。

ちなみに、宿題になった bash-completion は、自分の .bashrc なんかに

. /etc/bash_completion

を入れておけば使えるようになる。

色んなパッケージが、コマンドの bash_completion 関数を提供してくれているので、いつの間にかコマンドの補完が便利になってくれたりするかも。ssh なんかだと、接続先のホスト名を補完してくれて幸せな感じ。

普段使いは zsh なんだけどね……。zsh が使えない環境には bash_completion はおろか bash すらなくて ksh を強いられたりするし。

DebianJP 版 Debian Live を作るよ (のがたじゅんさん)

Live システム構築フレームワークとしての Debian Live の紹介。

基本の使い方からカスタマイズのあれこれ、さらにこれまであまり説明されていなかった scripts ディレクトリの活用方法まで。結構気合い入れて作ったとのことで、資料が詳細に書かれているので、後から見るにも便利そう。

宴会

これから行ってきます。

Dropbox for Linux

nautilus 必須かー、と思って避けていたけど、回避できるようなので入れておく。

をダウンロードして適当な場所に配置し、

$ dbcli.py status &

とすると起動して同期をはじめる。ちゃんと trayer にアイコンも出るね。