Debian4.0にEmacs22をインストール
Debian4.0の環境を整えてたら、Emacs22のトコでちょっと引っかかったのでメモメモ。
目的
Emacs22を端末上で動かせるようにする。Xは使わない。
引っかかったトコ
makeでコンパイルが終わった後の動作テストにて。。。
$ ./src/emacs emacs: Cannot open termcap database file $
となり、Emacsが起動しない。
やり方
順番に説明する。Debian4.0には、標準パッケージしか入っていないとする。
Emacs22をコンパイルするためのパッケージをaptitudeでインストール# aptitude install gcc libncurses5 libncurses5-dev
Emacs22のダウンロード、解凍# wget http://ftp.gnu.org/pub/gnu/emacs/emacs-22.1.tar.gz # tar xzf emacs-22.1.tar.gz #
コンパイル# cd emacs-22.1.tar.gz # ./configure # make #
動作テスト→インストール# ./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、価格.com、YOMIURI ONLINEと連携してる。
kizasi.jpは僕のiGoogleのフィードに入ってる。コレで世間一般の話題との同期を図っている。
ブログのクローリングをしていて、競馬関係の記事がとっても強いことを発見したらしい。実際kizasi.jpでは、競馬の時期になると馬の名前が上位に上がって来ます。。。切り出したブログ群に偏りがあったからじゃ無いよなぁ。。。
以上です。
「研究」と名の付くものでご飯を食べたいと思っている僕には、何れの話も興味深いものでした。
セッション終了後、Yahoo!JAPAN研究所のパネラーの方と話をさせて頂き、チームラボの取締役の方とも話をさせて頂きました。
資料もイタダイタ!
そんなこんなで情報過多の状態で、後半あれこれハシャイでしまったため、帰りはグッタリでした。おかげで強力な睡魔を前に唯唯僕は乗り換えのタイミングを逃してしまうのでありました。(日本語お菓子)
明日もあるからさっさと寝ましょ。ねむいねむい。
RubyリファレンスをFirefoxの検索バーに追加する
Ruby リファレンスサイトの検索機能が無くなってしまったので,この記事に書かれていることはできません!
右のようにFirefoxの検索窓からRubyのリファレンスの検索を行う方法について書こうと思う。
背景
Rubyでコードを書いているとき、メソッドをスッカリ忘れてしまう人間にとってはRuby リファレンスマニュアルの右上の全文検索フォームや、ReFeは重宝します。
んで、Firefoxを使っている人は恐らく「Ctrl + k」で右上の検索バーにカーソルを合わせgoogleで検索したり、Yahooで検索したりしているかもしれません。(ちなみに、「Ctrl + 上下キー」で検索エンジンの切り替え)
僕は、Googleくらいしか使わないので他の検索エンジンは削除しています。
方法
以上です
初めて検索窓の拡張プラグインを書いてみたけどそんなに難しくないですね。
しかし、Rubyリファレンスのサーバが高い頻度で502エラーを返すのはいただけない。自分用にReFeをCGIから使えるようにしてみようかな。
おまけ:全く別の検索方法
- 新しいブックマークの追加
- プロパティを以下に設定
- 名前 → (好きな名前)
- URL → http://www.ruby-lang.org/ja/man/?cmd=view&name=search&navi=search&key=%s
- キーワード → r
ロケーションバーで「r Array」と入力してエンターキーを押すと「Array」でRubyリファレンス内を検索できます。- ブックマークプロパティのキーワードを「refe」にすると、ロケーションバーには「refe Array」と入力することになります。
今更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を入れるまで
自分の手元のDebianでFUSEのRubyバインドである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 &
だろか。
問題・不満
- /dev/fuse を自動で作ってくれない(fuse-utilsのドキュメントをみると。。。仕様っぽい?)
- 一般ユーザはサンプルプログラム使えない(アドホックな解法はこちら)
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] #
APIの評価
各ドキュメントを以下に示しておきます。
僕は初めにlibmp3infoを使ってみたのですが。。。使い勝手に不満を覚えました。たしかに、v1とv2の両方の情報をハッシュとして取得ができるのですが、アーティスト名を示すキー値が、v1とv2で違っているためv1とv2が混在する環境では使いにくい。
一方id3libは、使う側がv1v2の違いを意識しなくても「インスタンス.artist」でアーティスト名が取得できる。