2009年05月31日

ブログの全記事URL取得方法考え中

指定したブログの全記事URLを取得するのってどうやればいいのだろうと考えていたのだけど、各ブログによって構成とか違うし、どうするのが正解かよく分からんかった。

とりあえず、Googleでサイト検索すればだいたい全記事引っかかるので、こんなフローならいけるのだろうか。

1. そのブログのトップページと記事URLを1つ指定
2. トップページでサイト検索をして、全URLを取得
3. サイト検索結果から、1で指定した記事URLと階層が同じものを抽出

なんともGoogleさん頼みの構成だけど、よそ様のページをクロールせずに記事一覧が作れるのでスマートな気はする。今度試してみよう。

日記的なもの(2009/05/31)

今日はずっとパソコンの前に座り、眠くなると倒れこんで眠り、眼が覚めるとコードを打つ。夜になると心が病んできた。人は面倒なことに、他人と接触を持たない状態にいると閉塞していく傾向がある。

これを解決するには、他人と話をする必要がある。特に親しい異性と話をすると短時間で閉塞感が打開できる。今週は誰とも会う約束をしていなかったので酒に頼ることにする。来週は誰かと約束しておこう。


以下、普通の日記

2009年05月30日

人工無脳学習用リンク集

人工無脳リンク集(浦島雑誌)
http://www.uraxima.com/notes/20090208a.html
ここから辿るといろんな場所へ行ける。2009年2月更新なので割と新しい。

[AI開発ノート] 人工無脳
http://masazo.blog44.fc2.com/blog-entry-3.html
参考サイトがとても役に立つ。

人工無脳メモ
http://www.saturn.dti.ne.jp/~npaka/robot/muno/index.html
非常に分かり易いので、学習スタート時に見ると良さそう。

マルコフ連鎖による文章の自動生成(antipop)
http://d.hatena.ne.jp/antipop/20040415/1081998210
PHPから茶筅を呼んで文章生成するソースがいる。

ところでサポートベクターマシンって何なの?(きしだのはてな)
http://d.hatena.ne.jp/nowokay/20080801/1217556122
JavaのSVMソースの例がいる。適度な長さの役立つ記事とサンプルが豊富。

カーネル(朱鷺の杜Wiki)
http://ibisforest.org/index.php?%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB
ここの関連項目を辿っていくといろんなモデルが見られる。

人工無脳ししゃも
http://yowaken.dip.jp/sixamo/
Rubyで書かれている。入門時に手軽に読める。

人工無脳うずら
http://www.din.or.jp/~ohzaki/uzura.htm
日本の人工無脳の中では有名な子。ソースは未公開らしい。

人工無脳酢鳥の4月1日なニュース
http://internet.watch.impress.co.jp/static/uocchi/2009/04/01/chatbot.htm
癒されるニュースです。

NII論文情報ナビゲータ
http://ci.nii.ac.jp/
n-gramとか形態素解析で検索するといろいろな考えが出てくる。

Rubyでn-gram的なことをする

昨日は酔っ払いながらn-gramと遊ぶ。

お陰で、とある自殺回数が多い作家様が書いた斜陽という作品は「お母さま」が325回出きたり(お母さま言い過ぎ)、ギロチンが24回出てくる(そんなに使ってたっけ?)ことが分かった。

分かったからどうだと言われると困る。語尾とかの傾向を見て「女性っぽい小説」、「男性っぽい小説」とかを見分けるくらいはできるかもしれないが。

にしても、文章解析の為にはやるべき下準備が多い。他人様の書いたソース読んだり、知らない概念を勉強したり。自分は頭悪いと1日5回くらい思う。その後、俺って天才と2回くらい思う。そんな日々。


n-gramっぽい簡易なソース

2009年05月29日

RubyでZIPの解凍

青空文庫から文書を読み込んで形態素解析して、結果(出現単語、出現数、当該センテンス)をDBに登録するという処理を書く。

青空文庫は著作権が消滅した作家と、著作権が残っているけど了承を得て掲載している作家の2種類を扱っている。著作権が消滅している作家については再配布や改変も可能らしいので、こういう処理をしても問題ないはず。

青空文庫にいるのはXHTML版とテキスト版(ZIP圧縮)の2つなんだけど、XHTMLは扱うのが面倒なので、ZIPファイルのURLを指定して、解凍、テキストファイルの保存、形態素解析、DB登録という一連の流れを行うプログラムを作ることにする。

で、ZIPファイルをRubyで扱う方法を知らなかったので、調べる。

以下、コードとか

2009年05月28日

言語を変えた時にとりあえずつまづくこと

最近、3つの言語(Ruby, Perl, JavaScript)を並列で使っているので、文法が頭の中で混ざり合って、Perlを使っているのにうっかりRuby的な書き方をしたり、Rubyの文字列処理で間違えてJavaScriptの関数名を指定してしまったりして、インタプリタさんにけっこう怒られている。

そこで、言語を変えた時にうっかりしたり悩んだりすることを適当に並べてみた。

・セミコロンを忘れる
文末にセミコロンを打たない言語(RubyとかVBScriptとか)を使ってから打つ言語(CとかJavaとか)を書くと、面白いほどセミコロンを付け忘れてエラーの海に溺れます。何度使用言語を変えても毎回やってしまう。

・$がしっくりこない
PerlとかPHPのような変数の前に$を付ける言語にスイッチした時に、しばらく馴染めない感覚がする。2週間も書いていれば逆に$がない方が不自然に見えるようになる。

・「else if」の書き方を忘れる
「if」と「else」の書き方はだいたい覚えているのですが、「else if」の書き方はさっぱり覚えられません。「else if」だったり「elif」だったり「elsif」だったり、いろいろあり過ぎです。そろえておくれ。

・文字列処理の関数の名前を忘れる
substringとか、indexofとか、replaceみたいな当たり前の関数の名前を忘れる。言語ごとに微妙に違ったりするところが厄介。適当な名前でtry and errorしてみて、たいていうまく動かずググることになる。

・配列の扱い方が分からなくなる
配列の初期化の仕方で一瞬悩んだりする。連想配列の初期化はもっと悩む。「=>」で区切ったり、「:」で区切ったり。

・括弧を付ける場所がわからなくなる
関数に引数を渡して実行する時に、引数を括弧で囲む必要がある言語と無い言語、それからどちらでもOKな言語がある。自分が使っている言語はどういうルールだったかしばし悩む。

・どの開発環境が良いかで悩む
エディタ最強説の人は関係ないかもしれないが、いろいろな開発環境を試している人間は言語が変わるたびに面倒な調査をすることになる。自分が目を離していた隙にデファクトスタンダードが変わってないかとか、使っていたソフトが寿命を迎えていないかとか。良い選択肢が見つからないと、調べた情報を放棄してエディタに還ることになる。

・処理速度の勘が狂う
多少重い処理をさせる時に、この処理なら実行時間はこの程度だろうということを頭の中で考えるのだが、言語を切り替えると意外とその通りにいかないことが多い。特にVBScriptやJavaScript、ActionScriptあたりを使った時は「まぁ、大丈夫だろう」と思って処理を実行してみると一向にレスポンスが返ってこなかったりしてびっくりする。

・値渡しされてるのか参照渡しされてるのか悩む
関数に渡したオブジェクトがどう渡されてるのかで悩む。どっちかというと参照が主流だけど値もけっこういる。PHPとかはバージョンで違ったりする。全部真面目に勉強するのはけっこう面倒。

・関数なのかメソッドなのか分からない
私は何も意識しないと「メソッド」と呼んでしまうJavaグラマーですが、時々、関数と呼んだ方が良いのではないかと悩む。クラス変数とかメンバ変数の呼び方はもっと悩む。

JavaScriptで文字を降らせてみる

UIについて考え事をしていて行き詰った。気晴らしにJavaScriptであまり意味のないものを書く。

コーヒーとかヘビをクリックすると、なんか降る。
http://mwsoft.jp/sandbox/js/character_dance.html
Firefox3, IE8, IE7, Chrome1にて動作確認。

何を作りたくてこうなったのか、自分でもよく分からない。たぶん、文中の印象的な言葉が降ってきて、箱に入るとそれを含んだDescriptionになってるみたいな感じにしたかったんだと思う。


最近、少し夜更かししている気がする。起きるのが遅いからまぁ良いか。

2009年05月27日

日記的なもの(2009/05/26)

仕事の後、普段は途中で何か食べてから帰っているのに、今日はボケていたのか食事を忘れたまま家に着いてしまった。再度出かけるのも面倒だったので久々に家で食事をする。

冷蔵庫を開けると、枝豆、カクテキ、トマト、魚肉ソーセージ、ビールがあった。なんてダメ人間な品揃えなんだろう。

以下、普通の日記

2550億単語に後ろ髪引かれてみる

最近、私もようやく言葉に興味を持つ年頃(おそらく3歳ぐらい)になったので、文字に対する良いデータがないかと思って探していた。

すると、Googleが膨大な量のn-gramのデータを公開していることが分かった。公開したのはもう2年も前の話らしい。こういう系統のニュースはけっこう見ていたつもりだったのだけど覚えていない。見逃したか、それとも当時は興味が薄かったから記憶からデリートされたか。


大規模日本語 n-gram データの公開
http://googlejapan.blogspot.com/2007/11/n-gram.html

>このたび、Web から抽出した約200億文(約2550億単語)の
>日本語データから作成したn-gramデータ(1〜7 gram)を
>公開致しました。

だそうです。2550億単語。未知の世界です。ひょっとしたら人の頭の中にはそれに近い単語数が埋まっているのかもしれないけど。


モノ自体は言語資源協会にて有料で配布しているそうです。商用利用不可、学術目的限定で、お値段たったの42,000円

http://www.gsk.or.jp/catalog.html

大学とかで使うなら予算も気軽に申請できるような値段だけど、個人で買うにはちと高い。でも、払えなくもない。

ついでに気になる容量の方は、DVD6枚で、gzip圧縮済みで、たったの26GB

なんとも萌え系の容量です。圧縮して26Gの文字データとか言われると、少し興奮しますよね。

RMagickを使ってみる

ImageMagick(語尾のkを忘れて検索したら、間違っていると気づかせない程度に結果が出てきて悩んだ)を入れて、文字の画像化をしてみる。

「あ」

ここに表示している「あ」という文字は画像ではなくテキストであり、文字コードの何番目とかでしかない。プログラムはそれをコードとしては捉えられるけど、形として捉えてはいない。

だからプログラムは片仮名の「ヘ」と平仮名の「へ」を全く違うものとして捉える。けど、画像化して類似画像を検索すれば似たものとして捉えられる。うちの子にはそういう目線で文字を見て欲しい。親である私の希望である。

というわけで、受け取った文字列をその場で画像に変換して、その場で見て、何に近いか連想してもらうという実に意味のないことを考える。

とりあえず画像にするとこまで。Ruby経由なのでRMagick使用。

以下、インストールとかサンプルコード

2009年05月26日

パワポっぽいJavaScript

所用があって、昔作ったパワポっぽいJavaScriptを久々に使った。せっかくなのでまたリンクを貼ってみる。

MwDocViewer(IMAP説明資料)
http://www.mwsoft.jp/mwdocviewer/?url=imap

IEだとちと表示がもたついたり(先読みしてないから)、文字サイズ変更のロジックが中途半端だったり(ブラウザの拡大機能あればいらない気もする)、改善すべき点はかなりあるけど、それなりに使い易いなぁとも思う。自分が作ったものが自分に合うのは当然か。


そういえばここ数年、自分が書いたソースはファイル名やクラス名の冒頭に「MW」の2文字を付けるのが習慣になっている。仕事でソースを書く時は、プロジェクト名から2文字を引っ張って頭文字に付けている。どこかから落としてきたライブラリと名前が被って嫌な思いをするのを避ける為。

StringUtilは必ず被る。

geditのショートカット

geditを使用している時に、選択タブを移動するショートカットが分からなかった。Ctrl+TabでもCtrl+PageUpでも動かず、なんだろうと思ってメニュー開いて調べたらAlt付きだった……

タブの移動
Ctrl + Alt + Page Up
Ctrl + Alt + Page Down

タブを閉じる
Ctrl + W


あと、アンドゥした後のリドゥでCtrl + Yしても動かなかった。まぁ、これは予想できるけど。

アンドゥ
Ctrl + Z

リドゥ
Shift + Ctrl + Z


他にWindowsユーザ的に直感が効かなくなるのは、検索辺りだろうか。検索事態は普通だけど、次を検索が違う。

検索
Ctrl + F

次を検索
Ctrl + G

前を検索
Shift + Ctrl + G

強調表示のクリア
Shift + Ctrl + K


こういった違いはOSまたいで使っていると、よく忘れます。忘れた時はメニュー開いて回るよりここ見た方が早いかもしれない。

http://library.gnome.org/users/gedit/stable/gedit-shortcutkeys.html.ja

2009年05月25日

日記的なもの(2009/05/24)

目が覚めると8時。平日の起床時間。疲れが溜まっている気がしたのでそのまま2度寝。2度寝は疲労回復に良くないって噂を聞いたけど本当だろうか。

11時に起きて水分取ったりロデオボーイに乗ってうだうだした後、半身浴。Railsの本を持って風呂に入ったのだけど、10分ほどして発汗が活発になってくると、頭がボーっとしてうまく読めなくなる。


以下、普通の日記

2009年05月24日

NetBeansはわりと使い易い

Railsを使ったスクリプトをちまちまと書く。Rails開発はNetBeansが良いという噂を聞いたので入れてみる。確かに使い易かった。新規プロジェクト作成を選ぶと、中に「Ruby on Rails」という項目がいて選べばRails用のプロジェクトが作成できる。

generateとかもGUIから簡単に実行できるし、ソースの閲覧もしやすい。コンソールも立ち上げれる。

ダウンロードからインストールも簡単だった。Java用、Ruby用、C++用などが用意されていて、選ぶ時に迷うこともない。

ただ、最初にメモリ512MBしかないマシンに入れてみたところ、三日三晩降雨が続いた後の重馬場みたいな動きになってしまった。推奨1GBらしい。ある程度メモリに余裕があるマシンで使いたいところ。

Rails学習中

最近、Ruby on Railsなんていうライトな子と戯れている。

Railsは「設定よりも規約」というキャッチコピーを持つように、プログラマが勝手に名前を付けてweb.xmlやらstruts-config.xmlみたいなものにそれを書き込むのではなく、リクエストとController、テーブルとModelなどが規約通りに命名されていれば勝手に繋がってくれる。

それがあるので「10分で簡単なアプリケーションが出来る」とかいう「売り文句としては上等な」長所を実現できたりする。

「手軽に出来る」こともあるが「手軽にソースを追える」メリットも大きい。URLからrewriteを見て、web.xmlやら何やらを見て、Actionを見つけて、という手間が省けるし、自動生成の雛形から物を作るという経路を皆が経験すれば、誰もが似た構成のアプリケーションを作るようになる。


以下、簡単な使い方

2009年05月23日

Felicaを使っていて思うこと

最近、Felicaを使用してEdyでネット決済をすることがある。クレジットカードを持っていない自分にとって、ネットで数百円の小額決済をする時にはありがたい存在だ。

もしFelicaがなければ、私は間違いなくそれらを購入していないだろう。欲しくてもそれに至るまでの道が面倒だからだ。そのサイトを運営している会社が信頼できるか確認し、SSLの情報が間違っていないか疑いつつ、個人情報やクレジットカードの番号を入力する。まったくもって、手間がかかる。

それにクレジットカードは個人情報に繋がるので多少の警戒感が残る。昔、そういった情報が存在する場所で働いていた身としては、特に。Edyなら例え失くしても盗まれても、チャージしてある数千円が消えるだけで、溜息をついて新しいカードを買えば済む。

今後、世の中は物ではなくコンテンツを売る機会が増えてくる。でも、コンテンツを売るにはカードやコンビニ決済などの手段を用意するか、販売を行っている代行会社のようなところを頼ることになる。駅前で似顔絵や銀細工を売るような手軽さでネットで物を売るのは難しい。ヤフオクなどはだいぶそれに近い部分があるが。

全ての個人が様々な小額決済をネット上で手軽にこなし、逆に受け取れるシステムが存在したら、世の中の資本の動きは今までよりもだいぶスムーズになるのではないだろうか。

2009年05月22日

TODO 2009/5/22

・ブログのTOPから全エントリーを探査して本文のみをデータベース化する

・言葉の言い換え、言い間違いを判定する(音にして一致率が近いものをうほっと提示する)

・濁点、スラッシュ、中黒などのありなしを無視して比較を実行するメソッドを書く

作りたいソフトウェア

作りたいソフトウェアを思いついたので、概要をまとめておく。他にもやりたいことが溜まってるので後回しになりそうだけど、いつか手を付けたい。


■目標
全米が泣くようなブログを自動で書いてくれるソフトウェア。
メールを受信するといい感じに返信してくれるソフトウェア。

■名前
プロジェクト名を「Kotoko」と名づける。
女性のイラストと一緒に公開すれば人気が出るに違いない。

■やること1
言語の連想モデルを作る。
とりあえずニューラルなのとSVMを調べてみたけど、イマイチ。
手馴れたところでデータベース(SQLite)と、フルテキスト検索(Sennaとか?)を使うことになるだろうから、そこで実現できそうなモデルを作る。頭の中にあることを実現しようとすると、酷く冗長で、言葉だけで何ギガも使いそうな状態が想像される。「花」という1つの言葉をSELECTすると1MB分のデータが湧いて出てくるような。

■やること2
文章を蓄積する。
読み込ませる文章によって性格がズレそうなので、「Kotoko」という名前に合いそうな文章を読ませたい。確か青空文庫に斜陽がいたか。あとは上品な感じのブログ書いてる人を探して、全エントリー読ませたりする。
ということで、ブログのTOPから全エントリーを探査して本文のみをデータベース化する処理をさっさと作っておく。ついでに簡易な上品判定スクリプトも書いておく。

■やること3
日記を書いて、「Kotoko」に読み込ませて、それを言い換えるプログラムを作る。
「今日は二日酔いで会社に行った。昼過ぎまでけっこう辛かった」と書いたら、「今日、例のブログ書いてる人は二日酔いでふらふらしながら会社に行ったらしい。仕事に対して不誠実です。後で殴っておきます」と出力してくれる感じ。

■やること4
連想モデルと文章データベースを利用して、1つのテーマを広げて文章を書かせてみる。ワードサラダにならないように注意。

2009年05月20日

WindowsでBeep音を消す

Windowsの方のBeep音の消し方を見かけたので書いておく。対象はXPです。

・デバイスマネージャを開く
・メニューの「表示」 → 「非表示のデバイスを表示」を選択
・プラグアンドプレイではないドライバを開く
・「Beep」を右クリック → プロパティ
・ドライバ → 現在の状態を「停止」にし、スタートアップを「無効」に

これで消せるらしい。

2009年05月19日

RubyでTimeout::Errorを拾う

とあるルールに基いてWEBのリンクを辿りながらページを取得する処理をRubyで書いて、寝ている間にゆったりと回していたのですが、起きたら「Timeout::Error」で止まってました。わーい、やり直しだー。

普通に「begin 〜 rescue」でくくっても「Timeout::Error」は拾わないそうです。(使用バージョン、1.8.7)

begin
hoge
rescue => e
p e
retry
rescue Timeout::Error => e
p e
retry
end

みたいな感じで両方拾ってあげないといけないそうです。今晩は無事に処理を完了してくれますように。

Fedora10でBeep音を消す

これまでFedoraでBeep音を消す時に

$ modprobe -r pcspkr

でとりあえず止めて

$ sudo vi /etc/modprobe.d/blacklist

でブラックリスト開いて

modprobe pcspkr

を追加してた気がするのだけど(たぶん。インストール後に1回やるだけだから少し記憶が薄い)、「設定」→「ハードウェア」→「サウンド」を開いて「警告音のサウンドを演奏する」のチェックを外せばだいたい消えるような話を見かけた。

http://djlab.sakura.ne.jp/mydiary/?p=508


GUIでいろいろ出来るようになっているのだなぁ。でも、とりあえずCUIで覚えておいた方がディストリビューション変えた時の戸惑いが少なくて良いような気もしつつ。

フリーエンジニアの落としどころ

今年に入ってから正社員にならないかという誘いを4件ほど受けた。景気の悪い中でそういう話が来るということは、30歳のエンジニアというのは売り頃の商品なのだろう。

このままフリーでやっていった場合、私はあと5年は売れ筋商品でいられると踏んでいる。が、その後の見通しは暗い。例えば10年後、40歳になったフリーエンジニアに仕事をくれる会社はあるだろうか。無くはないだろうが、需要はかなり減ると思われる。

20年後。50歳になっても売れるだろうか。その歳でエンジニアとして仕事がもらえるとしたら、相当スペシャルでなければいけないだろう。

ということは、正社員にならないと宣言している私は、スペシャルにならなければいつか仕事を失い路頭に迷うことになるわけだ。なんともハードルが高い話である。

それでも「人脈」、「時代に合った技術」、「知名度」があれば、生涯現役でいることもけして不可能ではない、と思っている。特に「知名度」。ジェームズ・ゴスリン(Javaの生みの親。50は超えてると思う)が「エンジニアとして働かせてくれ」と言ってあなたの会社の門を叩いたらどうなるか。「是非」という話になるだろう。

そこまで知名度がなくても「ああ、あの人ね」と言われるレベルの知名度があれば、なんとか仕事を得られるんじゃないだろうか。「あのいい加減な本を書いた人」とか「JavaScriptで変なプログラム書いてる人」とかで知られても難しいだろうけど。


そんなことを帰りの電車で考え、自分の人生って意外と余裕ないんだなぁということを、ちょっと嬉しく思ったりしましたとさ。人間、余裕なんてあったっていいことないと思うので。

2009年05月16日

ポメラコーナーを見かける

今日、知り合いと会った帰りに秋葉原を通りかかったので、プログラマらしく降り立ってみる。

軽く散策した後、有隣堂と夕食を目当てにヨドバシへ行ったら、途中、エスカレーターから見える非常に目立つ場所にポメラコーナーがあるのが目に入った。

いつも電子辞書とかUMPCとかスマートフォンとかの間で所在なげにしているあの子が、堂々と1つのコーナーを持って鎮座ましましていたのを見て、少し微笑ましくなった。

あれがもう少し目立ってしまうと、今度は「おまえ、目立ち過ぎ」という感情が生まれるのでしょうが、ニッチな製品なのでそこまで持てはやされることはないでしょう。たぶん。

個人PCは何台まで必要になるのだろう

今日は3時間ほどかけて部屋の模様替えをする。我が家にはPCが5台ほどいて、全てを配置するのが机の大きさ的に難しかった為、いろいろ苦慮する。

結局、こんな感じになった。(知り合いにデジカメを貸してしまったので、携帯で撮影。見づらいです……)

wagaya_pc_20090516.jpg
(クリックで実画像表示)


5台の使い分けはこんな感じ。

1. ノートパソコン
ファイルサーバ兼プリンタサーバ。音楽や動画再生も行う。Zaurusとの通信用ソフトが入っていたり、FeliCaを繋いでいたりもする。XP Home。

2. メインPC
一番パワフルなPC。XP Pro。ブラウザやメーラーの使用から、VisualStudioやEclipseを使った開発など、幅広い用途で使用。

3. 開発機
先日までWindowsサーバ関連の副業をやっていた時は、その会社の構成をこのマシンで再現していた。今はFedora10を入れてRubyやPythonのプログラムを動かすのに使っている。

4. 生贄機
5年くらい前に買ったスローライフな動きをするCeleron機。メインPCに入れたくないソフト(素性の知れないフリーソフトとか、レジストリにゴミが残る代物とか)を使いたくなった時にお呼びがかかる。月に2〜3回呼ばれるくらいで普段は眠っている。

5. 携帯用ノート
昔の携帯用VAIO(重量1kgくらい)。Zaurusを購入してから影が薄くなり、ポメラ購入後は完全に存在価値を失ってしまった感がある。


と、5つのマシンを持っているわけだけど、1〜3はほぼ毎日起動しているし、生贄機もなくなってしまうと困る。携帯用ノートは今は使ってないけど、代わりにZaurusやポメラを使っているので、私は今、5つの端末を必要だと感じていることになる。

昔は「1台で十分」と言っていたのが、「2台は必要」になり、「3台は欲しい」になり、気が付けば5台になってしまった。

使われなくなったVAIOが眠っているところを見ると、さすがにこれ以上は増えないと思うのだけど、どうだろう。そのうちいろんなOSが動くVMが入った検証用マシンが欲しいとか言い出さないだろうか。心配だ。もう置き場所がない……

2009年05月15日

Mecabを入れる(Ruby版)

Windows側にしか入れてなかったので、Linux(Fedora10)にもMecabを入れる。その時に打ったコマンド等。(Rubyはインストール済み)


○ダウンロード
ここから、「mecab」(本体)と「mecab-ipadic」(辞書)と「mecab-ruby」(Ruby用モジュール)をダウンロードする
http://sourceforge.net/project/showfiles.php?group_id=177856


○Mecab本体のインストール
$ ./configure
$ make
$ sudo make install
という代わり映えのしないコマンド


○Mecab辞書のインストール
$ ./configure --with-charset=utf8
$ make
$ make install
デフォルトだとEUC-JPになるので、お好みに応じてデフォルトキャラセットを指定。我が家はもっぱUTF-8。


○mecab-rubyのインストール
$ ruby extconf.rb
$ make
$ ruby test.rb

うちでは「ruby test.rb」で以下のようなエラーが出た。
./MeCab.so: libmecab.so.1: cannot open shared object file: No such file or directory - ./MeCab.so (LoadError)

対応
$ sudo vim /etc/ld.so.conf
で、一行目にこれを追加
/usr/local/lib
$ sudo ldconfig

この後、「ruby test.rb」をすれば通った。

最後にこれ
$ sudo make install


○サンプルソース
require 'MeCab'
mecab = MeCab::Tagger.new()
puts mecab.parse("俺たちに明日はない(たぶん)")

これを実行して動けば成功。




【20091012追記】
こちらにもう少し詳しい内容を書きました。
http://www.mwsoft.jp/programming/munou/mecab_linux.html

ブログの記事本文のみを取得する

先日、Googleブログ検索で泳いだ話を書きましたが、そうやって収集した情報を活かそうとした時に、ブログの「記事本文のみを取得する」方法が欲しくなりました。

フィードに本文が全て含まれていれば良いのですが、そうでない場合も多いので、プログラムで抽出することに。車輪の再発明を避けるべく(断じて作るのが面倒だったわけではない)、既に作られていそうなものを探してみた。

その中で精度、手軽さ、共に良かったのがこれ。

ExtractContent(BSDライセンス)
http://labs.cybozu.co.jp/blog/nakatani/2007/09/web_1.html

文中における句読点の存在や、ブロック内の文章の長さなどを元にスコアを付け、スコアが低いものを除去した状態で返してくれる。


これを使ってどの程度の精度が出るのか確認したかったので、テスト用のソースを書く。概要はこんな感じ。

・URLを指定して、HTMLページを取得する
・ExtractContentを使って取得ページを解析する
・取得ページのBODYタグの直下に解析結果を挿入して、ファイルに保存する
・そのファイルをブラウザで見ると、ページの全体と解析結果が一望できる

ソースはこちら(動作確認はかなり適当です。自己責任でご使用ください)
mwextractcontenttest.rb

Hpricot使ったりしてます。あと引数指定するとリンクを辿って解析をしたりします。詳細はソースのコメントにて。


ということをしていたらいつのまにやら午前3時。明日は寝不足気味に出勤すること確定。いかんですな。この世界は楽し過ぎます。

2009年05月13日

3万人のポメラ使い

ニッチなユーザに大人気な携帯電子メモ、ポメラ。3万台を売り上げたそうです。

「ポメラ」3万台突破
http://www.itmedia.co.jp/news/articles/0905/13/news046.html

我が家でも相変わらず手放せない存在として頑張ってくれています。トトロの音楽に合わせて「ポッメラ♪ ポ〜メ〜ラ♪」と歌いだしてしまうくらい頑張ってます。

5月21日からはCMも始まるとか。売り込みフレーズは「インターネットやメール、ゲーム、音楽、これすべて、できません。できるのは1つだけ。文字を打つこと」だそうです。見事だ。短い文字の中にポメラが凝縮されている。

新機種も企画しているらしい。高機能版にはどんな機能が付くのだろう。とりあえずディレクトリは切りたい。字数は今のままでもそれほど困らない。むしろ増えるとメモじゃなくなってしまう。Functionキーをなくしてキーピッチを広げられないだろうか。予算は3万2千円まで確保。

あと、ポメラってちょっと視点を変えるとKindleになれそうな気がしました。たまに通勤中に読む用のテキストをSDカードに入れたりしてます。閲覧専用モードを使うと書き込み時より多めのテキストを閲覧できるとかあると良いなぁ。まぁ、それはこの子が持つべき機能じゃないような気もしますが。

Firefoxもマルチプロセス化するらしい

@ITの記事に、こんな情報が載っていた。


Firefoxのタブも、Chromeに似たマルチプロセス化へ
http://www.atmarkit.co.jp/news/200905/08/mozilla.html


といっても、まだ始まったばかりの話で実際に対応が終わるのは何年も先になるようだ。

Fireofxはけっこう不安定で落ちることもあるけど(特にアドオンいろいろ入れると)、素早くリカバーできるのが強みの1つ。落ちるのがタブ単位になってくれれば、尚良い。


他のブラウザではChromとIE8辺りがマルチプロセス化されている。この2つのブラウザ、同じマルチプロセスでも若干の動きの違いがあって、ChromはCtrl+Tで新しいタブを開いた時点ではプロセスは出来上がらず、URLを叩くなりしてリクエストが発生した時にプロセスが発生する。そのお陰で、新しいタブを立ち上げた時の速度が非常に軽快。

IE8は我が家の環境では一度立ち上げたタブを閉じた際に、プロセスが解放されていないように見える。つまり4枚タブを開きうち3枚を閉じても、閉じたはずの3つのプロセスは残り続ける。その分、再度タブを開く際は高速になるようだ。

プロセスを終わらせない場合は、メモリの断片化に関する長所が削がれることになるような気がするけど、どうなのだろう。

しかし比較しながら見ていると、Chromは良く出来ていると思ってしまう。速度へのこだわりがそこかしこに見える。

2009年05月11日

Googleに嫌われる

Googleブログ検索にRSSが付いているのを見かけた。

RSSを見たら人は何をするか。とりあえずクロールしたくなるのが人情というものじゃないだろうか。

というわけで、ブログにおける興味のある用語の出現状況なんかを調べれるようなスクリプトが出来上がってしまったのだが、何度か実行していたらあっという間にアク禁食らいました……


We're sorry... but your query looks similar to automated requests from a computer virus or spyware application.

訳すと「あんたのとこから変なリクエストが来てるけど、ウィルスにでも感染してんじゃない?」だそうです。ウィルスじゃありません。ただのスクリプトです。

リクエスト間隔は5秒くらいは空けたし、リクエスト数自体も数百程度だったと思うのですが、駄目ですか。すいません、すいません。

調べてみると、ブログ検索だけでなくGmailやgoogle.co.jpの検索でも似たような現象が発生しているという内容の記事を見かけた。Googleさんもスクリプトによる攻撃には手を焼いているようだ。

ブログ移設準備中

Seesaaでやっていたブログをこちらに移そうと思い、現在、準備中。