Mixiの日記をRSSにするときにmechanizeを使ってそれぞれの日記ページを取ってくるところでThreadが複数になるとInterrupted system call (Errno::EINTR)というエラーが出てうまくいかない。(1スレッドの場合は大丈夫)

↓こんな感じのコード。

# diary_urls --- MIXI日記のURLの配列
# agent ---Mixiに ログイン済みのmechanizeのインスタンス
diary_urls.each do |url|
  threads << Thread.new(agent, url) do |a, u|
    page = a.get(u)
    res = page.root.seach(...)
    entry = {
      "url" => "...",
       "title" => "...",
       "body" => "..." 
    }
  end
end

entries = []
threads.each {|t| entries << t.value }

Threadを使ったコードをあまり書いたことが無いので良くわからなくて難しい。

JavaからRubyへ ―マネージャのための実践移行ガイド

実務でJavaからRubyへ移行するための実践的な幾つかの作戦。

それとは別に気になったのがRubyを使った継続サーバについて何度か言及してるとこ。Wee、Borges、Iowaなど聞いたこと無いけど気になるなあ。でもIowaはちょっと聞いたことある気がする。ちょっとのぞいてみようかな

hello_world.rb

#!/usr/local/bin/ruby
require 'iowa'
#require 'iowa_webrick' #Uncommment here and comment above to use WEBrick

class MySession < Iowa::Session
  def initialize(*args)
    #####
    #// One can setup special per/session objects or data items here.
    #####
    super
  end
end

class MyApplication < Iowa::Application

  def initialize(*args)
    #####
    #// Initialize any application wide items here.
    #// An example would be a database connection
    #// connection pool.
    #####
    super
  end
end

Iowa.startDaemon('hello_world.cnf')
Iowa.run

hello_world.cnf

socket:
  hostname: localhost
  port: 9988
logging:
  basedir: /var/log/iowa/hello_world
  minlevel: 0
  maxsize: 10000000
  maxage: 86400

だめだぁ、[あとでよむ]

ちょっと暇になるとすぐWindows入れたりUbuntu入れたり意味不明なOSの往復をしてるわけですが、今またUbuntu期です。(会社のパソコン)

以前、MacBookを使ってた方が退社されて、「誰か使いますか?」と募集があったところに、

⊂(゚Д゚⊂`つズザー ⊂(゚Д゚⊂`つズザー(俺)

と二人滑り込みました。そしてジョジョばりの渾身のじゃんけんの末、俺が敗北したわけですが、最近になって勝っただんだnさん

「やっぱり交換してくれないスカ」 「キーボードが打ち辛い」 「ThinkPadにUbuntuが良いんじゃないかと」

などとMacに挫折気味の様子。そこでまず俺がUbuntu試してみることに。とりあえず覚えたばかりのScreencast作成方法でよくあるBeryl動画を作ってみました。

かなり使い易いのでMacと交換するか悩むところです・・・。

最速インターフェース研究会

手間をかけずに日本語表示を試したい人は

Documents and Settings\username\Application Data\Apple Computer\Safari\WebKitPreferences.plist を編集してフォント名を指定している箇所を全て「MS UI Gothic」に変更すると良さげ。

こちらを参考にUbuntuのVMWareのWindowsにSafari3入れて日本語見えるようにしてみました。

safari3_on_windows_on_ubuntu

おおー、結構ちゃんと動いてる!

これでTracにあがってるSafari系のバグが潰せるぞと・・・。(面倒)

「Wikiで昔のデータから戻すのはどうすればいいんですか?」という質問を受けました。何か丁度LinuxでのScreencastの録画方法を探してるところだったのでScreencastで、「↓こんな感じです」と返したら意外と喜ばれました。

LinuxでのScreencast作成用ソフトをいくつか試してみました。

  • Wink
    Linux版もあるおなじみツール、注釈を入れられたりswfだったりしてWebサービスの紹介用には良さそう。ちょっと録画って用途には少し面倒かもしれない。
  • Istanbul
    synapticで入るし、使いかたもGnome標準のスクリーンキャプチャとほとんど同じと、かなり使い易いが出力形式がOgg-Theoraなのがちょっと・・・(Youtubeはogg非対応、Google VideoならOK!)
  • xvidcap
    リポジトリには無いけどdebは提供されてるのでインストールは簡単。気軽にmpeg形式のScreencastができる。おすすめ!

Winkとか結構手間がかかるイメージだったんですが、Youtubeにアップするの前提だからswfよりmpeg吐いてくれた方が都合がいいんですよね。自分サーバーの容量も食わないしブログ貼り付けも楽。もっと活用できないかな。

はてなブックマーク – ウノウラボ Unoh Labs: MySQL5からのインデックス結合で1テーブル複数インデックスを使う

kubi

うわぁ、ショックだし理由が気になるわあ。追記:

$php→rails (rails に憧れる phper のブログ) – 複合インデックスと複数インデックス

でも、上の構造で、name, age を元に抽出するつもりだとすると、

自分の感覚では複合インデックス付ける。

こちらを見てて気づいたんですが、「あの例なら複合インデックスを使う方が良い、もしくは複合インデックスの存在を知らないのか?うちらならクビ」ってことなのかな?

文字コードや品詞IDの問題があってDebianパッケージのMeCabは使わず、ソースから入れてたんですが、mecab_dict_indexという辞書をコンパイルするコマンドが付いていることを知ったのでパッケージから入れた辞書をリコンパイルしてみました。(なるべくパッケージで管理したい)

パッケージのやつ(Ubuntu 7.04)だと文字コードがEUC_JPで品詞IDが使えない状態。

$ mecab -F"%m\t%h\t%H\n" 
すもももももももものうち
すもももももももものうち        0       ????,????,*,*,*,*,*

mecab-dict-indexに”辞書の元テキストの場所”、”辞書ファイルの出力先”、”辞書の元テキストの文字コード”、”辞書ファイル文字コード”、”品詞IDを使うためのオプション”を指定してやる。

/usr/lib/mecab/mecab-dict-index -d /usr/share/mecab/dic/ipadic -o /var/lib/mecab/dic/ipadic -f euc-jp -t utf-8 -p
$ mecab -F"%m\t%h\t%H\n" 
すもももももももものうち
すもも  38      名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も      16      助詞,係助詞,*,*,*,*,も,モ,モ
もも    38      名詞,一般,*,*,*,*,もも,モモ,モモ
も      16      助詞,係助詞,*,*,*,*,も,モ,モ
もも    38      名詞,一般,*,*,*,*,もも,モモ,モモ
の      24      助詞,連体化,*,*,*,*,の,ノ,ノ
うち    66      名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ

ちゃんと出るようになった。

各言語のバインディングはlibmecab-devを入れとけば通るハズ。たぶんrpmでも似た感じでいけるハズ。

YouTubeの次期APIには、GDataを採用

YouTube APIの開発者ブログを見ていたら、そんなことが決定されたようだ。

ΩΩΩ < な、なんだっ(略

この瞬間に標準のWeb APIはGDataにきまっちゃった・・・?

MicrosoftがWin32 APIで開発者を取り込んで、(Windowsアプリが沢山出来たために)デスクトップOSで大成功したみたいに標準Web APIは糞重要なのにもう決まってしまった感が・・・。

候補としてはこんな感じ。

この候補にMicrosoft提案が入ってないのが悲しいですがしょうがない。とにかくGDataがかなりリードか!?

それとは別に野良APIの方でも今仕事で使ってますが、jester.jsのjsonp対応とか利便性が凄いのでこういうとこから新たな標準が出来ちゃうかもしれないですね。

RailsでRubyのl10n用ライブラリRuby-GetTextでハマってmasatoさんに助けられたのでメモります。

sudo gem install gettext

config/environment.rbに下記追加

$KCODE = 'u'
require 'jcode'
require 'gettext/rails'

app/controller/application_controller.rbに下記追加

class ApplicationController &lt; ActionController::Base
  init_gettext "my_app_name" # 自分のアプリ名
end

こんな感じのgettext.rakeタスク作成

require 'gettext/utils'

desc "Update pot/po files." 
task :updatepo do
  GetText.update_pofiles(
    "my app name",
    Dir.glob("{app,config,components,lib}/**/*.{rb,rhtml}"),
    "my app name 0.0.1" 
  )
end

desc "Create mo-files" 
task :createmo do
  GetText.create_mofiles(true, "po", "locale")
end

potファイルを作成

rake updatepo

potから各言語用ファイルを生成(cpでもいいがmsginitを使うといい感じのヘッダを入れてくれる)

msginit -i po/my_app_name.pot -o po/ja/my_ap_name.po -l ja

今回糞ハマったのは foo.pot → ja/foo.po としなければならないところを foo.pot → ja/foo.pot とそのままの名前でコピってたとこ。これだと当然moはできねえ・・・。

poを適当にいじってmoを生成

rake createmo
ls locale/ja/LC_MESSAGES/my_app_name.mo
locale/ja/LC_MESSAGES/my_app_name.mo

エラーメッセージが勝手に多言語化されてたりと、poいじる前からかなり便利ですな。追記:

Ruby-Gettextの翻訳具合が気に食わない場合はそっちのpoをいじればOK。大体この辺に入ってるハズ。

/var/lib/gems/1.8/gems/gettext-1.9.0/po/ja/rails.po

MeCabを使う時、辞書のインストールでこちらを参考にしてMakefileをいじらないと品詞IDが使えなくてはまる。

念のためこのページにも書いておこう。

http://keihanna.dl.sourceforge.jp/mecab/20904/mecab-ipadic-2.7.0-20060707.tar.gz
tar zxvf mecab-ipadic-2.7.0-20060707.tar.gz
cd mecab-ipadic-2.7.0-20060707
./configure --with-charset=utf8
vi Makefile
make
sudo make install

ipadicのMakefileの250行目あたりを変える

$(mecab_dict_index) -d . -o . -f euc-jp -t utf8   # 変更前
$(mecab_dict_index) -d . -o . -p -f euc-jp -t utf8   # 変更後

品詞IDが使えるとこんな感じで書けるので便利!

# 名詞かどうか
if (37..66).include?(node.posid)

それにしても最近はWebアプリのアイデアで、「その文章を形態素解析してリンクを張ろう」とか簡単に言うけど、完全にMeCabとかChaSenとかのおかげで、もしこういった成果が公開されてなかったら俺のような糞プログラマーには絶対無理ですな。大学と研究所の共同プロジェクトらしいですが、ナイス税金の使い方って感じです。国益です。

条件付き確率場?無制限多階層品詞?bi-gram マルコフモデル?ひとっつもわかんねえ・・・。これらのアプリがオープンソースであることに感謝します・・・。