bananajour を Ubuntu hardy 上で動作させる

bananajour は乱立しがちな git レポジトリを集中管理しよう、というプログラムです.
まず、gemcutter というホスティングサービスを使っているので、これを利用するように gem の設定ファイルを書き換える必要があります.

$ gem source -a http://gemcutter.org

その上で、gem 経由で bananajour をインストールします.

$ gem install bananajour

ここまでは良いのですが、 bananajour の利用しているパッケージのうちの1つ、 dnssd が Ubuntu hardy 上でコンパイルが通りませんでした. 原因は以下通りです.
http://groups.google.com/group/bananajour/browse_thread/thread/5f0153ca765d0e03

結局、dns_sd.h を含んでいるパッケージ libavahi-compat-libdnssd-dev をインストールする必要があります.

aptitude install libavahi-compat-libdnssd-dev
$ gem install bananajour

あとは、bananajourのgithubにある指示通りに操作を進めれば、無事動作させることができます.

Pragger用Wikiが誕生

ドキュメントを整備したい!
http://d.hatena.ne.jp/big-eyed-hamster/20090919/1253320767

という声が届いたのか、PraggerWikiが誕生しました.
http://ikejima.org/wiki/pragger/

時間があるときに書いていこうと思います.

それと mixi voice用のプラグインですが、本家統合希望です. よろしくお願いしますー.

RSS::Maker.make に失敗する =>設定ミスと判明

2009/09/20 追記
完全に設定ミスでした><
失礼しました.


なんぞこれ>< 何か設定を忘れているのかな??

config.yaml
- module: Feed::mixi::get_echo_list
  config:
    id: xxxxxxx
- module: RSS::save
  config:
    filename: output.rdf
    title: mixi echo
$ ./pragger.yaml
/usr/local/ruby/lib/ruby/1.8/rss/maker/1.0.rb:56:in `setup_items': required variables of maker are not set: items (RSS::NotSetError)
        from /usr/local/ruby/lib/ruby/1.8/rss/maker/1.0.rb:38:in `to_feed'
        from /usr/local/ruby/lib/ruby/1.8/rss/maker/base.rb:215:in `_set_default_values'
        from /usr/local/ruby/lib/ruby/1.8/rss/maker/base.rb:351:in `_set_default_values'
        from /usr/local/ruby/lib/ruby/1.8/rss/maker/base.rb:208:in `set_default_values'
        from /usr/local/ruby/lib/ruby/1.8/rss/maker/1.0.rb:30:in `to_feed'
        from /usr/local/ruby/lib/ruby/1.8/rss/maker/base.rb:370:in `setup_channel'
        from /usr/local/ruby/lib/ruby/1.8/rss/maker/1.0.rb:21:in `setup_elements'
        from /usr/local/ruby/lib/ruby/1.8/rss/maker/base.rb:406:in `to_feed'
        from /usr/local/ruby/lib/ruby/1.8/rss/maker/base.rb:397:in `make'
        from /usr/local/ruby/lib/ruby/1.8/rss/maker/base.rb:361:in `make'
        from /usr/local/ruby/lib/ruby/1.8/rss/maker.rb:11:in `make'
        from plugin/RSS/save.rb:20:in `save'
        from pragger.rb:27:in `send'
        from pragger.rb:27:in `eval_pragger_find_pragger_backup'
        from pragger.rb:13:in `inject'
        from pragger.rb:26:in `each'
        from pragger.rb:26:in `inject'
        from pragger.rb:26:in `eval_pragger_find_pragger_backup'
        from (eval):9:in `eval_pragger_loggnizer_backup'
        from (eval):9:in `eval_pragger'
        from pragger.rb:4

mixiボイス用のPraggerプラグインを作ってみた

追記:「本家統合希望」と書いておくと、マージされるらしいので、統合希望にしておきますw

twitterからmixiボイスにマルチポストするRubyスクリプト書いた

それ、Praggerでできるよ!ってなわけで、Praggermixiエコーのソースを元にmixiボイスに対応させてみました.

## config.yaml sample
## - module: const_list
##   config:
##     - test_dayo
## - module: Publish::mixi::voice
##
## regist.yaml sample
## mixi:
##  username: hogehoge@hugahuga.aaa
##  password: xxxxxx

begin
  require 'kconv'
  require 'rubygems'
  require 'mechanize'
  require 'logger'
rescue LoadError
end

def voice( config, data )
  username = $reg['mixi']['username']
  password = $reg['mixi']['password']

  # login.
  agent = WWW::Mechanize.new
  page = agent.get( 'http://mixi.jp/' )
  form = page.forms[0]
  form.fields.find { |f| f.name == 'email'    }.value = username
  form.fields.find { |f| f.name == 'password' }.value = password
  form.fields.find { |f| f.name == 'next_url' }.value = "/home.pl"    
  page = agent.submit( form, form.buttons.first )

  # move to mixi echo page, and...
  page = agent.get( 'http://mixi.jp/recent_echo.pl' )
  form = page.forms[1]
  form.fields.last.value = data.to_s.toutf8

  # post it!
  agent.submit( form,form.buttons.first )
end

get_echoとget_echo_listも試してみたかったのですが、RSS::Maker がエラーをはかれたのでちょっと放置. 一番苦労したのは regist.yaml の使い方を調べたことだったりするw ドキュメントを整備したい!

カーネルのコンパイルなしにカーネルモジュールをコンパイルする環境を作る

Linuxカーネル用のモジュールをコンパイルする際には、通常 /lib/modules/`uname -r`/build をカーネルのソースディレクトリとして指定し、それを make コマンドに引数として渡す必要があります. カーネルモジュールは、カーネル側の保持しているシンボルテーブルを知っている必要があるからです. シンボルテーブルは linux-src/Modules.symver に保持されています. また、このファイルの他にも、いくつかカーネルモジュール用に必要なファイルが存在します.

ところが、kernel.orgから直接ソースコードを落としてくる場合、上記のカーネルモジュールのコンパイルに必要なファイルが存在しません. これらはコンパイル時に動的に決定するからです. かといって、毎回ソースからカーネル本体をコンパイルするのも時間がかかってしょうがないです. こういったときには、以下のようなコマンドを使用します:

$ cd kernel-src
$ make modules_prepare

make modules_prepare は、先述の「カーネルモジュールをコンパイルに必要なファイル」のみを吐き出すことができます. このあと、kernel-src へのパスをカーネルモジュール側の Makefile に渡すことで、カーネルコンパイルすることなく、カーネルモジュールをコンパイルすることができます.

Writing kernel modules in Haskell

LWN.netで、大変頭のおかしいプロジェクトが紹介されていました(いい意味で). Writing kernel modules in Haskellというもので、カーネルモジュールのインターフェースとGHCを合わせることで、Haskellを用いてカーネルモジュールを書くことができるんだとか. つまり、これってカーネル上でガベッジコレクタが走り、メモリ管理を行ってくれるということですよね... 先述の記事には、型安全なカーネルモジュールをかけるぜ、なんてことも書いてあります. 私はCで十分ですが、もし試したい方がいたら試してみると良いかもしれません. 導入方法は、こちらのページに書いてあります.