Debian4.0にEmacs22をインストール

Debian4.0の環境を整えてたら、Emacs22のトコでちょっと引っかかったのでメモメモ。

目的

Emacs22を端末上で動かせるようにする。Xは使わない。

引っかかったトコ

makeでコンパイルが終わった後の動作テストにて。。。

$ ./src/emacs
emacs: Cannot open termcap database file
$

となり、Emacsが起動しない。

やり方

順番に説明する。Debian4.0には、標準パッケージしか入っていないとする。


  1. Emacs22をコンパイルするためのパッケージをaptitudeでインストール

    # aptitude install gcc libncurses5 libncurses5-dev 



  2. Emacs22のダウンロード、解凍

    # wget http://ftp.gnu.org/pub/gnu/emacs/emacs-22.1.tar.gz
    # tar xzf emacs-22.1.tar.gz
    # 



  3. コンパイル

    # cd emacs-22.1.tar.gz
    # ./configure
    # make
    # 



  4. 動作テスト→インストール

    # ./src/emacs

    問題なく起動したら、Emacsを終了して、

    # make install


また、http://packages.debian.org/lenny/emacs22-noxを使う手も考えたが、aptitudeがうるさく警告してきたので、怖くて断念。
自分がうまくいかなかった原因はどうやら、パッケージにlibncurses5-devがなかったカラのようだ。実際、そのパッケージをインストールし、configureからやり直したらうまくいった。


しかしあれですね、今気がつきました。Debian4.0のstableでサポートされる上記のパッケージ群のバージョンって、http://packages.debian.org/lenny/emacs22-noxで必要とされているバージョンに足りてませんね。
よく動いてるなぁ。。。

DBWeb2007に行ってきた1日目

DBWeb2007というシンポジウムに行って来ました。
以下ページから引用した趣旨です。

 近年,人類が創出する情報量が爆発的に増大しており,大量かつ多様な情報から必要な情報を効率的に利活用するための技術が重要になってきました.本シンポジウムでは,昨年に引き続き,文部科学省科学研究費補助金特定領域研究「情報爆発時代に向けた新しいIT基盤技術の研究」との共催により,情報爆発時代におけるDBとWeb技術をテーマにシンポジウムを開催します.本シンポジウムでは,情報爆発時代に向けた各種特別セッションや,この分野における産学連携に関連する各種企画,Web情報システムやデータベース技術についての最新研究成果の一般発表セッション等を通じて,招待講演,研究発表,パネル討論などの形態で議論する場を設けます...

DBWeb2007

こういったものに参加するのは二回目で、自分にとって少々情報過多で、一回の発表ごとに記憶が揮発していく感触を覚えてしまいます。

イマイチメモの取り方に慣れていなくて、あれこれ試してみましたが、どうもしっくりこない。最後にはtwitterに簡単に纏めつつ垂れ流してみましたが。。。今見返してもさっぱり。
今後の課題ですな。


とりあえず後半のtwitterに流した情報を元に後半部分だけでも書き出しておきたい。
後半の特別セッションでは、企業が持っている研究部門について現場の方(?)からお話(パネルディスカッション形式)を頂きました。全体的に興味深かった。就職説明会って言ったことないけど、こんな雰囲気なんだろうか。

Microsoft Research Asia

とっても丁寧に英語を話してくれている印象でした。が、如何せん僕の腹立たしいくらい乏しいヒアリングでは、すべてを聞き取ることは出来ませんでした。中国にあること、たくさんの論文を出していること、インターン学生もたくさん抱えていること位しか聞き取れませんでした。頑張らないとナー

Yahoo!JAPAN研究所

一番注意を惹かれてしまった。なぜかと言うと

  • 今年4月に設立されたばかり
  • また研究内容も研究者本人の裁量による部分が多い

って話が気になってしまったから。後者の方はちょっと怪しいです。セッションが終わった後パネラーに後者のお話について質問をさせていただいて、自分の中では理解したつもりです。。。が、上手く書き表せられない。。。

楽天技術研究所

楽天というとデッカイショッピングサイトの楽天市場のイメージしかなく、研究してますってイメージはありませんでした。話を聞くと、楽天のサイト運営などは外注せず、全部自分達で仕事をこなしているとの事。研究についても、今年はレコメンデーションや動画解析などを行なったとの事。
印象に残ったのは、「バベル17(1977発売のSF小説)」はテーマ(?)として「言語が思考に影響を与える」を掲げていて、Rubyの作者まつもとさんもそのテーマから影響を受けRubyを書いていたって話。ほ、、、ほんとだろか。

きざしカンパニー

この辺から僕自身が息切れし始めていて、twitterのメモがあまり残っていない。以下の1投稿のみ。。。

やってること:ブログのクローリング・分析。Yhaoo!JAPAN、価格.comYOMIURI ONLINEと連携してる。

kizasi.jpは僕のiGoogleのフィードに入ってる。コレで世間一般の話題との同期を図っている。
ブログのクローリングをしていて、競馬関係の記事がとっても強いことを発見したらしい。実際kizasi.jpでは、競馬の時期になると馬の名前が上位に上がって来ます。。。切り出したブログ群に偏りがあったからじゃ無いよなぁ。。。


以上です。
「研究」と名の付くものでご飯を食べたいと思っている僕には、何れの話も興味深いものでした。

セッション終了後、Yahoo!JAPAN研究所のパネラーの方と話をさせて頂き、チームラボの取締役の方とも話をさせて頂きました。
資料もイタダイタ!


そんなこんなで情報過多の状態で、後半あれこれハシャイでしまったため、帰りはグッタリでした。おかげで強力な睡魔を前に唯唯僕は乗り換えのタイミングを逃してしまうのでありました。(日本語お菓子)

明日もあるからさっさと寝ましょ。ねむいねむい。

RubyリファレンスをFirefoxの検索バーに追加する

Ruby リファレンスサイトの検索機能が無くなってしまったので,この記事に書かれていることはできません!

右のようにFirefoxの検索窓からRubyのリファレンスの検索を行う方法について書こうと思う。

背景

Rubyでコードを書いているとき、メソッドをスッカリ忘れてしまう人間にとってはRuby リファレンスマニュアルの右上の全文検索フォームや、ReFeは重宝します。
んで、Firefoxを使っている人は恐らく「Ctrl + k」で右上の検索バーにカーソルを合わせgoogleで検索したり、Yahooで検索したりしているかもしれません。(ちなみに、「Ctrl + 上下キー」で検索エンジンの切り替え)
僕は、Googleくらいしか使わないので他の検索エンジンは削除しています。


と言うことで、RubyのリファレンスをFirefoxの検索バーから行う方法を示します。
対象はFirefox2。

方法

  1. ruby_reference.xmlをダウンロード。
  2. んで、以下の場所に配置します。

    • マイコンピュータ
    • → ローカル ディスクC(ここは人によってはCだったりDだったり)
    • → Documents and Settings
    • → (ユーザー名)
    • → Application Data (隠しフォルダになっています。見えない場合はエクスプローラの設定を変更してください。)
    • Mozilla
    • Firefox
    • → Profiles
    • → (ランダムな文字列).default
    • → searchplugins

    と辿った、searchplugins内にruby_reference.xmlを置いてください。



  3. Firefoxを再起動する。


  4. 検索エンジンの中にRubyのアイコンがあれば成功です。

以上です

初めて検索窓の拡張プラグインを書いてみたけどそんなに難しくないですね。
しかし、Rubyリファレンスのサーバが高い頻度で502エラーを返すのはいただけない。自分用にReFeをCGIから使えるようにしてみようかな。

おまけ:全く別の検索方法


  1. 新しいブックマークの追加
  2. プロパティを以下に設定

    • 名前 → (好きな名前)
    • URL → http://www.ruby-lang.org/ja/man/?cmd=view&name=search&navi=search&key=%s
    • キーワード → r



  3. ロケーションバーで「r Array」と入力してエンターキーを押すと「Array」でRubyリファレンス内を検索できます。

  4. ブックマークプロパティのキーワードを「refe」にすると、ロケーションバーには「refe Array」と入力することになります。

これは最近知った方法。同様の方法で「g (検索文字)」でGoogle検索できるのもよさそう。

今更FizzBuzz

だって眠れないんだモノ。

class Fixnum

  def foo
    case 0
    when self-101
      return
    when self%15
      return self.hoge('fizzbuzz')
    when self%5
      return self.hoge('buzz')
    when self%3
      return self.hoge('fizz')
    else
      return self.hoge
    end
  end

  def hoge(str=self)
    puts str
    self.next.foo
  end

end

1.foo

fizzbuzzメソッドが気に入らない。
ぬぬぬ。書いたら書いたデ眠れない。修正しました。

Windowsアプリの時だけ英字配列になる問題

普段(Firefoxなど)は問題なく日本語配列として入力ができるのですが、Officeソフトや、IEを使っているときだけ勝手に英字配列として認識される。。。最近まで我慢していたんですが、ソロソロ我慢の限界なので解決に乗り出してみた。
意外と検索に手間取ってしまって、、、最終的に意外と簡単な「キーボード 入力 おかしい」で検索したら見つかってちょっと自分の検索能力に絶望しました。

解法

1. [スタート]→[ファイル名を指定して実行] から regedit を起動します。
2. HKEY_LOCAL_MACHINE \SYSTEM \CurrentControlSet \Control \Keyboard Layouts \00000411 を開きます。
3. 右の Layout File 文字列値のデータが kbdjpn.dll であることを確認します。(違っていたら修正します。)
4. レジストリを変更したら、Windows を再起動します。

キーボード入力がおかしい

だそうです。
補足すると恐らく僕と同じ症状の方は「jbdjpn.dll」ではなく「jbdus.dll」になっているのでは無いでしょうか?しかしレジストリを弄る知識ってどうやって手に入れてるんでしょうね。。。不思議です。

原因

キーボードレイアウト dll を指定したレジストリに不正な値が記録された場合、この問題が発生するらしいのです。

キーボード入力がおかしい

らしいが。。。Scancode Mapを加えたせいだろうか?それくらいしかキーボード入力を弄ってないけどなぁ。
しかし、別環境では問題ないな。

謎だ。

DebianにFUSE・FuseFSを入れるまで

自分の手元のDebianFUSERubyバインドであるFuseFSを使いたくなったため、ココにメモ。んなに難しくなかった。
この記事ではrootが、FuseFSのサンプルを動かせるようになるまでをつらつら書いております。

環境

とりあえず環境を示しておく。最近Debianを使い出したので新しいDebian。(日本語ガッ!

# uname -a
Linux debian 2.6.18-5-686 #1 SMP Wed Oct 3 00:12:50 UTC 2007 i686 GNU/Linux
# whoami
root
# pwd
/root

自分が行なった手順

動きさえすればいいという方はココを飛ばして、下のまとめへ
aptitudeという便利なものがあるのでそれでFuseFSを入れれば終わりじゃないか?と推測・実行

# aptitude install libfusefs-ruby
・・・・・・・
・・(イロイロ)
・・・・・・・

んで付いてくるサンプルでも動かしてテストしてみましょう。

# cd /usr/share/doc/libfusefs-ruby1.8/exsamples
# ls 
# ruby hello.rb mnt
demo.rb  dictfs.rb  hello.rb  openurifs.rb  railsfs.rb  sqlfs.rb  yamlfs.rb
#

それぞれのファイルで、1つのサンプルになっております。それぞれどんなサンプルかは以前記事で書いたので参照していただけると喜びます(僕が
当然このままでは上手く行きません。(でないとこんな記事にしません)

# mkdir mnt     # マウント先のディレクトリを用意
# ls mnt
(何も無い)
# ruby hello.rb mnt
fuse: failed to exec fusermount: No such file or directory
/usr/lib/ruby/1.8/fusefs.rb:13:in `for_fd': no implicit conversion from nil to integer (TypeError)
        from /usr/lib/ruby/1.8/fusefs.rb:13:in `run'
        from hello.rb:20

FUSEを使ったプログラムをマウントするためにはfusermountってのが必要なんですね。これは"fuse-utils"ってパッケージの中に入ってます。

# aptitude install fuse-utils
# ruby hello.rb mnt
fusermount: failed to open /dev/fuse: No such file or directory
/usr/lib/ruby/1.8/fusefs.rb:13:in `for_fd': no implicit conversion from nil to integer (TypeError)
        from /usr/lib/ruby/1.8/fusefs.rb:13:in `run'
        from hello.rb:20

まだ出ます。これは、、、、実はよく理屈が分かっていませんが、fuseがモジュールとして読み込まれていない。との事なので。。。

#  modprobe fuse
# ruby hello.rb mnt
(プロンプトが返ってこない)
(ctrl+cでプロセスを中断)
# ruby hello.rb mnt &
# ls mnt
hello.txt       # 何も無いはずのmntの中にテキストファイルががが!
# cat mnt/hello.txt
Hello, World!
#

といった感じ。
アンマウントする時は。。。

# fg
(プロンプトが返ってこない)
(ctrl+cでプロセスを中断)
#

でかまわない。

まとめると

インストールからサンプルの起動の流れを書くと。。。

# aptitude install libfusefs-ruby fuse-utils
# modprobe fuse
# cd /usr/share/doc/libfusefs-ruby1.8/exsamples/
# mkdir mnt
# ruby hello.rb mnt & 

だろか。

問題・不満

mp3のタグ操作ライブラリの比較

mp3のタグ(id3って言うんですね)を操作するためのライブラリを少し弄って、二つのライブラリの比較をしてみた。その二つのライブラリとは。。。

それぞれの長所短所を挙げ、改良の余地について触れようと思う。

ただし、今回タグの値の抽出だけに焦点を絞っていることに注意して欲しいです。

そもそもの背景

手元のmp3ファイルをしまっているディレクトリの構成が混沌としてきているため。
手元のCDから落としたmp3ファイルは、きちんと「~/mp3/(アーティスト名)/(アルバム名)/(トラック番号)-(曲名).mp3」となっている。
しかし、別の方法で手に入れたmp3ファイルはそうはいかない。いわゆるネットレーベルと呼ばれるものに属しているアーティスト*1の楽曲は、うれしいことに無料でmp3ファイルがダウンロードできるケースが多い。しかし、mp3ファイルそのものをダウンロードするため手動で上記のファイル構成にしなければならない。これが面倒で、wgetをつかってmp3ファイルをダウンロードして、そのまま使っていた。

このままでは気持ちが悪いので、id3を見て上記のファイル構成を自動で行ってくれるスクリプトを作ろうと決心。言語は最近良く使っているRubyを使おう。次にid3を操作するためのライブラリだけど。。。。RAAやrubyforgeを見たら。。。。

多いよ!!
僕の環境はdebianなので、aptitudeで探してみたら

# aptitude search id3 | grep ruby
(何にもない)
# aptitude search mp3 | grep ruby
p   libmp3info-ruby1.8              - a pure ruby library for access to mp3 file
p   libmp3tag-ruby1.8               - Reading and writing ID3V1.1 tags in MP3 fo

libmp3tag-ruby1.8はv1.1だけみたいなので、上のlibmp3info-rubyをインストールしてみました。
しかし、後述となりますがlibmp3info-rubyには問題がありまして。。。結局Rubyforgeにあった、id3lib-rubyをgemでインストールすることに。

インストール方法の比較

二つのライブラリのインストール方法の比較をします。その前に僕の環境を示しておきます。

自分の環境
# uname -snr
Linux debian 2.6.18-5-686

# ruby -v
ruby 1.8.5 (2006-08-25) [i486-linux]
#
libmp3info-rubyのインストール

aptitudeで一発。

# aptitude install libmp3info-ruby1.8
・・・・・(いろいろ表示される)・・・・・
# 
id3lib-rubyのインストール

C++のライブラリlibid3を使うので一発とは行かない。

# aptitude install libid3-dev
・・・・・(いろいろ表示される)・・・・・
# gem install id3lib-ruby
・・・・・(やっぱりいろいろ表示される)・・・・・

となります。id3libはgem、libid3が必要である一方、libmp3infoは必要なものはせいぜいruby環境とaptitude
libmp3infoの方が楽ですね。

APIの評価

各ドキュメントを以下に示しておきます。

僕は初めにlibmp3infoを使ってみたのですが。。。使い勝手に不満を覚えました。たしかに、v1とv2の両方の情報をハッシュとして取得ができるのですが、アーティスト名を示すキー値が、v1とv2で違っているためv1とv2が混在する環境では使いにくい。
一方id3libは、使う側がv1v2の違いを意識しなくても「インスタンス.artist」でアーティスト名が取得できる。

結論

  • libmp3info-ruby
    • インストール簡単(debianならば)
    • API面倒
  • id3lib-ruby
    • インストールが比較的面倒
    • APIがいい感じ

ということで、僕はid3lib-rubyを推したいと思います。
暇があったならば、このライブラリのラッパーとして、いずれのバージョンのid3タグも取得できなかった時は、musicbrainzmusicDNSに音響指紋を送って楽曲情報を取得するライブラリでも作ってみてもいいかも。
余談だけどlast.fmも音響指紋を使って類似サービスを展開しようとしてますねぇ。。。これは楽しみ。(参考リンク1参考リンク2)

*1:例えばLast.fmのタグで8bitってタグが付いてるアーティストなんかがそれ。