2012年7月28日土曜日

whooshのインデックス

whooshのMLを見ていたら、言語毎にanalyzerを使い分けたいという話の流れの中で、自分でtokenizeして書き込む例(test)が紹介されていました。
その例は、Schemaの定義にはanalyzerを設定せずにインデックスを構築するものでした。igo-pythonを使うとtokenizerがインデックスにpickleされて保存されるので、インデックスが大きくなるのが悩みだったのですが、この方法なら肥大化を避けられます(pickle時に細工して回避する手段は入れてありますが)
なので、実際にどのくらい変わるか確認してみました。tocファイルのサイズが全然違う(41186237 vs 996)ことがわかります。

ソース(gist)

結果(gist)

2012年7月22日日曜日

chrome.tts(text-to-speech)で日本語よみあげ

少し前ですが、chrome.ttsを使って日本語の読み上げが出来ました。試作のchrome extensionのソースはtest-chrome.tts(github)に置いてあります。Chrome Tech Talk Night #3に参加したことですし、せっかくなのでManifest Version 2のbrowser actionで実装してみました。ダウンロード後、chromeの拡張機能設定のところで、
  1. デベロッパーモード on
  2. パッケージ化されていない拡張機能を読み込む
とやれば登録できます。

以下メモ
Microsoft Speech Platform 11+HarukaをSAPI5登録した64bit版のWindows7で試しました。はまりどころは、Chromeが32bitアプリなので、HarukaのSAPI5登録を32bit環境(WOW64)にもすることぐらいでしょうか。なので、ちゃんとSAPI5に対応している日本語読み上げ環境があればはまりどころは無さそうです。
HarukaのSAPI5登録の方法は
  • x86版のSpeech Platform 11をインストール
  • Harukaをインストール
  • レジストリのコピー reg COPY "HKLM\SOFTWARE\Wow6432Node\Microsoft\Speech Server\v11.0\Voices\Tokens" "HKLM\SOFTWARE\Wow6432Node\Microsoft\Speech\Voices\Tokens" /s /f
勘違いで、

  • chrome.tts.getVoicesがSAPI5の音声を全て列挙してくれる
  • lang属性でja-JPで指定すれば日本語対応のを選んでくれる
と思っていたのですが、ttsEngineレベルで列挙してくれるだけであって、SAPI5のものはnativeとして1つだけ出てくるだけです。また、lang属性はnativeなものでは見てくれない+提供されない(undefined)ようなので(複数言語に対応するttsEngineが切替に使うもの)、コントロールパネルの音声認識→音声合成で選択した音声をHarukaにしておく必要がありました。Macだとどうなのかは不明。

2012年7月16日月曜日

MoinMoin2.0で日本語コンテンツを検索する

MoinMoin2.0 は検索機能に Whoosh を使っています。 なので、日本語用のAnalyzerを使ってやれば検索出来るはず。ということでやってみました。
日本語が検索出来るだけのとりあえずのものですが https://bitbucket.org/hideaki/moin-2.0 にあります(変更点) 日本語用のAnalyzerには以前作った whoosh-igo のTinySegmenterTokenizerを使いました。

セットアップの記録(フォークしたやつからcloneするなら変更は不要です):
hg clone http://bitbucket.org/thomaswaldmann/moin-2.0 moin-2.0
cd moin-2.0/
DIR=env-pypy PYTHON=/opt/pypy/pypy-c ./quickinstall
. ./env-pypy/bin/activate
pip install whoosh-igo # TinySegmenterTokenizer用
wget https://mhagiwara.googlecode.com/svn/trunk/nltk/jpbook/tinysegmenter.py
vi MoinMoin/storage/middleware/indexing.py
# ↑indexを作る前に使うanalyzerを指定する必要がある
moin index-create -s -i
moin load --file contrib/serialized/items.moin
moin index-build
moin # サーバ起動

初期状態

編集中

編集完了

単語で検索出来る

複数単語でも検索出来る

丸ごとでも検索出来る
変更前だと単語で検索出来ない
変更前も文全体の一致なら検索可能

2012年7月5日木曜日

最近のvmwgfx(Arch Linux)

VMWare上で動かしているLinuxなゲストで3d accelerationを有効にしたりする話です。Arch Linuxでvmwgfxを使うの続き。

Linux 3.4で新しいvmwgfx kernelドライバが入ったので、gitでもってきてビルドする必要は無くなりました。

SVGAドライバも extra/svga-dri をインストールすれば使えるので、簡単に使えるようになっています(前から存在していたようだけど知らなかった…。カーネルドライバもあったのかも…)

2012年6月21日木曜日

JVM GCログのrotate

最近のJavaVMはGCログをrotate出来ます。長時間動かすサービスでGCのログを記録したいときに便利です。

/tmp/gc.log.0-4の5世代で、約1MBでrotateさせる例
-Xloggc:/tmp/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=1048576

2012年6月14日木曜日

Emacs24のパッケージ管理システムをproxy経由で使う

Emacs24で入ったパッケージ管理システムをHTTP proxyが必須な環境で使うには

M-x customize-variable → url-proxy-services
または
(setq url-proxy-services '(("http" . "proxy:8080")))

2012年3月6日火曜日

Kuromoji(Lucene3.6版)をJava7で使ってみた

Lucene 3.6(nightly build)に入っているKuromojiをJava7で使ってみました。 期待通りJava7ではtry-with-resoucesで扱えますね。

2012年3月5日月曜日

rst2bloggerのテスト

rst2blogger というのがあったので試してみます。 その名前の通りreStructuredTextで書いた文章をbloggerの記事にしてくれるものです。 この記事は rst2blogger を使って投稿してみています。

ドキュメント をみると引数はreSTファイルだけでよくて、ドラフトに突っ込んでくれるようで、 タイトルが同じであれば、同じエントリの更新になるので直したら普通にアップロードしなおせば良いようです。

公開までは一気に行けませんが、記事をreSTで書いておいてアップロードすれば良くなるので、便利そうです。

[hideaki@archbox ~]$ rst2blogger blog.rst

Title: 'rst2bloggerのテスト'

Please choose the authorization mechanism you want to use.
1. to use your email address and password (ClientLogin)
2. to use a web browser to visit an auth web page (AuthSub)
3. if you have registed to use OAuth
: 1
Please enter your username: アドレス
Password:
Retreiving blog list
Looking for existing post to be updated
Creating new post
Uploaded new draft

2012年2月4日土曜日

OMakeでlualatexをつかう


最近TeX(LuaLaTeX)を使って文章を書いています。以前platexを使っていたときにはOMakeを使っていたので、今回もOMakeを使おうと思ったのですが、使うコマンドをlualatexにするだけ(LATEX=lualatex)では出来ませんでした。ちゃんとわからず人のをコピペしてたためなのですが、OMakeマニュアル(日本語)をみてやり方がわかったのでメモします。

通常の設定では、TeXのソースからPDFを作成するのにtex(latex)→dvi(dvipdfm)→pdfというルールになっています。texから直接PDFを生成するpdflatex用の設定が用意されているので、その設定を使います。
  • USEPDFLATEX=true (PDF生成にdvipdfmではなくpdflatexを使う)
  • PDFLATEX=lualatex (.texから.pdfを生成するコマンド)

うまくいく例

最初にやった(ダメな)例

2012年1月20日金曜日

最近買った本

私はソーシャルデータ自体にはあまり関係がないのですが、興味があったので買ってみました。Pythonとグラフの本でもあり勉強になりました。
グラフ理論の勉強用に買いました。売っている場所をネットで調べて取り寄せてしまいました。丁寧なのと問題の解答があるので自習できます。
心理学にはずっと興味があるのですが、そのとっかかり・心理学とは何かと言う点に興味があったので買ってみました。とてもおもしろかった。
シリアスゲーム―教育・社会に役立つデジタルゲーム
gamificationよりserious gameに興味があったので。普通。

2012年1月15日日曜日

TrueImageでバックアップするときに特定のフォルダ以下を除外する方法

バックアップにTrue Image Home 2010 Plus Packを使っています(キャンペーンをやってたときにacronisから直接買った英語版です)

多分最新版の2012でも同じだと思いますが、バックアップ時に除外するディレクトリの指定がいまいちわかりにくかったので、今度忘れたときのためにメモしておきます。

パターンディレクトリディレクトリ内のファイルサブディレクトリメモ
C:\dir or C:\dir\*除外除外除外丸ごと除外
C:\dir\*.*バックアップ除外バックアップファイルだけ除外、サブディレクトリはバックアップされる
C:\dir\*\*バックアップバックアップ除外サブディレクトリだけ除外
C:\dir\*\* and C:\dir\*.*バックアップ除外除外ディレクトリだけバックアップ

2012年1月14日土曜日

Lucene ソースコードリーディング会に参加しました

Lucene ソースコードリーディング会に参加しました。

最近のAnalyzer/Tokenizerの変更点が知りたかったので、Lucene 3.5のそこら辺を中心に読みました。
見ながら気になったことだけみたので、まとまりがありませんが箇条書きでメモします。

  • Analyzer#assertFinalの存在
    • privateなのでAPIドキュメントにはありませんが、tokenStream, reuseableTokenStreamがfinalかどうかをチェックするものです。以前はなかったと思うので、いつ、どういった意図で入ったのかを調べました。
    • これはLUCENE-2389 Enforce TokenStream impl / Analyzer finalness by an assertionによるものでした。Decorator patternで使えないオブジェクトを実体化できないようにするためのようです。ちなみに、Lucene in Action, 2nd editionは3.0対象なのでここら辺には触れられていません。また、この変更によってそのまま使える(abstractではない)Analyzerを継承して拡張することが出来なくなりました。
  • Analyzerがtry-with-resourcesで扱える
あとは、前と変わっていないことを確認したぐらいでした。

追記
CharReaderの使い方も調べましたが、追い切れませんでした。@shinobu_aokiさんに話を聞いたところ、基本的に自分でAnalyzer作って入れないとダメとのことでした。Solrは設定ファイルで設定できるのでそういう仕組みが入っているようです。Solrの方もみないと…。

X201sのHDDをSSDに換装しました

メインで使っているX201sのHDDをSSDに換装しました。HDDに代替処理済みのセクタが出来ていて、一度発生してからは増えてはいなかったのですが、不安なのでいずれ交換しようと思っていました。で、SSDの値段を見たら思った以上にこなれてきていたので買ってみました。いまのHDD使用容量から考えると最低160GB,出来れば256GBクラスが欲しかったのでもうしばらく安くなるのを待とうかと思っていたのですが、秋葉原方面に行く用事があったので買ってしまいました。

私が買ったのはPlextorのPX-256M2Pです。とりあえず、とても静かになり、起動とVM(ArchLinux/VMWare)が快適になりました。まだ換装してから開発作業は行っていないのですが、開発環境とかで快適さが体感できるのではないかと思います。

換装はUSB-SATA変換アダプタでSSDをつないで、TrueImage2010でHDDからCloneして換装しました。ちょっと検索してみたところクラスタサイズとか開始オフセットはうまいことやってくれるとのことだったので、全部TrueImage任せにしました。はまりどころはclone中にスタンバイしてしまったことぐらいでしょうか。それ以外は何事もなかったのであっさり終わりました。