vadplus_x64 公開 (http://labs.lpm11.net/wiki/index.php?vadplus_x64)

 再生している音がそのまま渡される「ステレオミキサー」 (別名「再生リダイレクト」とか「Wave出力ミックス」等) が Vista に全然無いのですが、なんと typewriter 様がそれを実現するドライバ vadplus を作りました: http://kram.dip.jp/#vadplus

 しかし、残念ながら 64bit 対応していないのでコンパイルしてみました。説明及びダウンロードはこちらからどうぞ

Rails+MySQL @ Windows で migration がうまくいかない件

 libmysql.dll が無いと怒られたから入れてあげたところ、今度は↓のようなエラーが帰ってきてうまくいかなかった場合。

> rake db:migrate --trace
(in 〜/どこか)
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:migrate
** Invoke db:schema:dump (first_time)
** Invoke environment
** Execute db:schema:dump
rake aborted!
Mysql::Error: Commands out of sync; you can't run this command now: SHOW TABLES
〜/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/connection_adapters/abstract_adapter.rb:212:in `log'
〜/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/connection_adapters/mysql_adapter.rb:320:in `execute'
〜/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/connection_adapters/mysql_adapter.rb:436:in `tables'
...

 libmysql.dll は MySQL 5.0 付属のものだとちゃんと動くようです。5.1 だと↑のようになりました。

「ボッコちゃん」を実装する (1)

 「ボッコちゃん」とは星新一ショートショートに出てくるロボットの名称で、作品のタイトルにもなっている。しかしロボットとは言っても反応は「簡単な受け答えができるだけ」である。

「きれいな服だね」
「きれいな服でしょ」
「何が好きなんだい」
「何が好きかしら」
「ジンフィーズ飲むかい」
「ジンフィーズ飲むわ」

 この反応が人工無脳そっくりなので、衝動的に作ってみようと考えてみた。

★ 実態

 実際にやってみた (似非ボッコちゃん: 今回実装を試みたプログラム)。

客の発話 似非ボッコちゃんの発話 ボッコちゃんの発話
名前は ボッコちゃん ボッコちゃん
としは まだ若いのよ まだ若いのよ
いくつなんだい まだ若いのよ まだ若いのよ
だからさ…… - まだ若いのよ
きれいな服だね きれいな服でしょ きれいな服でしょ
なにが好きなんだい なにが好きかしら なにが好きかしら
ジンフィーズ飲むかい ジンフィーズ飲むわ ジンフィーズ飲むわ

★ ボッコちゃんの動作

 基本的には以下の様な仕組みになっているようである。

この「簡単な受け答え」というのが非常に上手くできている。

  1. 5W1Hの質問に対しては、相手の台詞を繰り返しはぐらかす。
  2. Yes/Noの質問に対しては、全てYesで答える。
  3. 質問ではない台詞に対しては、ただ繰り返す。

たとえば、こんな感じだ。

  1. 「お客のなかで、だれが好きだい」→「だれが好きかしら」
  2. 「ジンフィーズ飲むかい」→「ジンフィーズ飲むわ」
  3. 「もう来られないんだ」→「もう来られないの」
我田引水:ボッコちゃん 星新一 - livedoor Blog(ブログ)

なお、答えられない場合は「マスター (開発者) に知らせる」と言う機能がある。

以上の情報を元にボッコちゃんの実装を試みた。環境は Ruby形態素解析には Mecab*1 を利用した。また、品詞の活用が必要となる際には茶筅*2の cforms.cha を利用した (続く)。

openSUSE 11.1 で syslog-ng の program とかが上手く行かない問題

 例えば php-syslog-ng を使うために program を使って MySQL サーバにログを入れようとしても、

Feb  7 09:56:13 hogepc syslog-ng[6626]: I/O error occurred while writing; fd='11', error='Broken pipe (32)'
Feb  7 09:56:13 hogepc syslog-ng[6626]: I/O error occurred while writing; fd='10', error='Broken pipe (32)'
Feb  7 09:56:13 hogepc syslog-ng[6626]: I/O error occurred while writing; fd='11', error='Broken pipe (32)'
Feb  7 09:56:13 hogepc syslog-ng[6626]: I/O error occurred while writing; fd='10', error='Broken pipe (32)'

みたいなエラーが大量に出て上手く行かない。
 時間を掛けまくって分かったが AppArmor の設定が厳しいのが悪いらしい。と言う訳でこんな設定を /etc/apparmor.d/sbin.syslog-ng に追記 *1

  #include 
  /usr/bin/mysql rmix,
  /etc/my.cnf r,
  /bin/bash rmix,

 プロファイルの reload は↓で可能。

# apparmor_parser -r /etc/apparmor.d/sbin.syslog-ng

 一応これで動いた。アクセス拒否のログは /var/log/audit/audit.log に書かれているので動かない際は要チェック。面倒なら「complain syslog-ng」とか打って監視を止める方法もある (もちろんセキュリティ的にはよろしくないけど…)。

*1:openSUSE 11.1 の yast から編集しようとしても上手く行かないので直接編集

ATOK で Ruby の実行結果を返すプラグイン (id:secondlife:20081030:1225344730)

 「ATOK で入力中に Ctrl + Insert で Ruby の実行結果が変換され」る、id:secondlife さん作の素敵なプラグイン。簡易電卓としても便利。

 変換候補が全角だと怒られるので、実コードも公開されている事だし折角だから私用に全角→半角ルーチンを仕込んでみた (Ctrl+Insert を押す前に F8 を押せば良いだけの話なのですが!)。と言う訳でダウンロードはこちらからどうぞ
 コードはこちら。私の変更部分に関しては好きにして下さい。

#!/usr/bin/ruby

$KCODE = 'u'
require 'timeout'
require 'jcode'
module Atok_plugin
  def run_process( a_request_data )
      res = nil
      composition_string = a_request_data['composition_string']
      composition_string.tr!('a-zA-Z0-9−,.!”#$%&’()=〜|^@[`{;:]+*}/<>?_¥','a-zA-Z0-9\\-,.!"#$%&\'()=~|^@[`{;:]+*}/<>?_\\')
      timeout(3) do 
        res = eval composition_string
      end
      {'candidate' => [{'hyoki' => res.to_s, 'comment' => res.to_s}]}
    rescue Exception => e
      {'candidate' => [{'hyoki' => 'エラーが発生しました', 'comment' => e.to_s }]}
  end
end

 多分高度な使い方をしなければ副作用は目立たないかと (副作用が気になる方は F8 を押しましょう :P)。

ATOKDirect API for Perl/Ruby 公開

 「ATOKダイレクト」のプラグインを自由に作る事ができる API が公開された: 概要|ATOKダイレクト API|ATOK.com
 折角なので何か作ろうと思ったが思いつかないので、利用者側に回る事にする。現在公開されているプラグインの例は id:atzy さんの id:atzy:20081101 が詳しい。

メタ的物忘れ

K:「…最近出てこないんだよなぁ…<店A>とか<店B>とか…店とかの名前…個別の名前…と言うか…」
M:「固有名詞?」
K:「そう、固有名詞だ… ('A`)」

 にしても、ど忘れした際は関連した事を思い浮かべると思い出しやすいらしいが、何が関連しているのかすら分からなかった際はいよいよ八方塞がりである。