全自動無限ルイズコピペ生成器搭載!
もくじ
これは何?
Linux2.6(32bit/64bit)用デバイスドライバです(2.6.32で動作確認しています)。インストールすると/dev/louise_loveが現れ、読み出すとルイズコピペをマルコフ連鎖アルゴリズムに基づいて無限に自動生成し続けます。
ちなみに/dev/louise_loveへ書き込むとすべて書き込みを読み捨てますので、自分の書いたポエムも安心して読んでもらえます。
デモ
ソースコード
- GitHubリポジトリ
- ドライバ本体
ubuntu10.04 LTS 64bit/32bitでの動作を確認。ライセンスはGPL3。 - 辞書作成ユーティリティ
Ruby1.9系での動作を確認。
動作にはYahoo!デベロッパーネットワークのアプリケーションIDが必要です。
(形態素解析に使います)
- ドライバ本体
使い方
まずはダウンロードして解凍し、フォルダを移動しましょう。
% git clone https://github.com/ledyba/louise_love_driver.git % cd louise_love_driver/driver
コンパイルするには、普通のプログラムのようにmakeしてください。
% make
デバイスドライバドライバと同時に、ユーザランドで動くアプリケーションとしてもコンパイルされているので、いきなりデバイスドライバとして組み込むのが不安な方は、安全なユーザランドで試すことができます。それには、
% make test もしくは % ./userland_louise_love
として実行してください。
では、実際にデバイスドライバとしてインストールしてみましょう。root権限が必ず必要です。
% sudo make install
おめてとうございます、インストールが完了しました。ルイズたんへの愛を得るにはこのようにしてください。
% cat /dev/louise_love
ゆっくりルイズたんへの愛を噛み締めたい場合は、moreコマンドなどを使うと良いでしょう。
ハードディスクやSSD、USBメモリをルイズたんへの愛で埋める場合には、次のようにしてください(注意:これをやるとHDDのデータが壊れます)。
% dd if=/dev/louise_love of=/dev/sda
/dev/louiseのパーミッションは666なので、書き込みも行うことができます。書き込んだデータはすべてスルーしますので、恥ずかしいポエムも安心して書き込むことができます。
% cat my_poem.txt > /dev/louise_love
昨今はアニメが多いですから、ルイズたんへの100年の恋も冷めてしまうかもしれません(一期やってたのもう4年くらい前だし)。でも大丈夫、アンインストールは次のように簡単にできます。
(インストール時に解凍したフォルダで) % sudo make uninstall
今後の展開
簡単なソースではあるんで、デバドラやマルコフ連鎖の超簡単なサンプルとしてご活用ください。適当に書いたのでソースコードはむちゃくちゃ汚いですがw なお、/dev/yoshinoyaなども(つくろうと思えば)簡単にできます。
任意の文章に置き換えるには、ユーティリティをダウンロードして、
% ruby make_c_source.rb <文章ファイル> > c_source.txt
として出力結果のc_source.txtの中身を、louise_love.cの該当部分に適当に貼りつけてください。
ちなみに、
% ruby markov.rb <文章ファイル>
とするとrubyを使っていくつか文章を作ってくれます。
反省点
あまりカーネルランドをいじった感が無いのがちょっと…。8割のコードはAPIの名前さえ変えればユーザランドでも動きますし、そもそもデバイスドライバなのに、ハードウェアを触っていません。
解説記事
- [自動文章生成について]磯野ー!ワードサラダ作ってアフィリエイト付スパムブログしようぜー!
- [Linuxのデバドラについて]「一応動く」Linux用デバイスドライバをつくろう
ちなみに:ユーラランドとカーネルランド時のパフォーマンスの違い
ユーザランド時
% ./userland_louise_love | dd of=/dev/null 1130544+0 記録始め 1130544+0 記録終わり 578838528 バイト (579 MB) コピー終了, 25.5481 s, 22.7 MB/s
カーネルランド時†1
% cat /dev/louise_love | dd of=/dev/null 3619712+0 記録始め 3619712+0 記録終わり 1853292544 バイト (1.9 GB) コピー終了, 25.9583 s, 71.4 MB/s
単純比較していいのかわからないけどさすがカーネルランド3倍はえーw
- †1: 条件を近づける?ために、一回パイプ通してます。でもddで直接やっても変わらなかった。