- Rubyでワンライナーを書く方法のまとめ (349)
- 博士のための「けものみち」就職活動ガイド (266)
- ほぼ確実に内定をゲットできる意外な就活戦略 (231)
- 自然言語処理をやっている人なら必ず読むべき論文100 (185)
- 最強のメモツール Evernote の API を使ってみた (152)
- JavaScriptでマリオのテーマを演奏する (133)
- 英語論文執筆にも役立つ、技術翻訳用の環境を惜しげもなく紹介 (97)
- 今更ながらAutoHotKeyが便利すぎる (67)
- Amazon EC2を使ってみた (58)
- Rubyでメール受信+解析 (54)
Category Archives: Uncategorized
RubyとPerlとPHPと…、どの言語が最も「愛されて」いるか? – Love/Hate Ratio
mixiのほうにも書いたけど、昨日はRuby作者のまつもとゆきひろさんの講演 中京大学公開講座「世界に広がるRuby」 http://www.rubyist.net/~matz/20070917.html#p01 を聞きに行ってきました。研究にWeb開発に、Rubyヘビーユーザーの自分としてはこれは見逃せないイベントでした。 Matzさんの講演の中でも、特に自分の興味を惹いたのが、”Love/Hate Ratio”というお話です。(もちろん、他の話も全て興味深かったのだけれども。) これは、「Rubyがいかに愛されている言語か」というものを、ある意味定量的に示した指標で、簡単に言うと、Googleで「”i love ruby”」というクエリで検索したときのヒット数と、「”i hate ruby”」というクエリで検索したときのヒット数との比です。だからLove/Hate Ratio。この”ruby”のところを他の言語の名前に変えれば、その言語のLove/Hate Ratioが求まります。この値が大きいほど、その言語は愛されている、というわけ。で、Rubyはダントツだと。 「愛されてる度」の正確さはともかく、インパクトあって実に分かり易い指標ですよね。で、調べてみると、Matzさんの [Ruby] Ruby is the “Most Loved” programming language http://www.rubyist.net/~matz/20050427.html#p01 のエントリから派生して、独自にこのLove/Hate Ratioを求めている記事がいくつか見つかります。 HOW DO YOU LIKE SILICON VALLEY? | まつもとゆきひろさんに会った http://kaeruouji.jugem.cc/?eid=39 NI-Lab.’s ヅラッシュドット: Yahoo!検索Webサービスを利用していろいろなプログラミング言語の Love Hate Ratio … Continue reading
(29)
(5)
(5)
(0)
Total: 39Emacs上で文字数/単語数/行数をカウントする word-count-mode
英語で論文などを書いてると、特にアブストラクトのところで、単語数の指定(何単語以内というような)がある場合があります。 自分は文書+プログラムを書く時には全てEmacs(Carbon Emacs)を使っているのですが、Emacsにこの機能が標準で付いてないので少し不便でした。Microsoft Wordには単語を数えてくれる機能があるので、わざわざ文章をコピー&ペーストして確認したりとか。1ファイル単位なら、wcコマンドで簡単に数えられるんですが、書いてる論文のこのセクションだけ、という場合には色々と不便です。ちなみに、文字数と行数だけを数えてくれる機能なら、Emacsに標準装備で付いてます(リージョンを選択してM-=を押してみよう)。 調べてみたら、Emacsで文字数をカウントできるEmacs Lispスクリプトを発見したので、それを使わせてもらうことにしました。 word-count-mode http://taiyaki.org/elisp/word-count/ リンク先のページ、ダウンロード先が404になってしまうのですがアドレスをこのように↓変更するとうまくいきます。 http://taiyaki.org/elisp/word-count/src/ word-count.elパスの通ってるところにおいて.emacsを指示通りに設定すればOK. M-+を押すとマイナーモードが起動して、M-+を押したところから現在のカーソル位置までの「文字数/単語数/行数」のフォーマットで、モードラインに表示してくれます。 もちろん、日本語の単語は数えることができませんし(そもそもの日本語の「単語」ってなんだよ、ってなる)、数えるときの正規表現も単純ですが、ちゃんとやろうとすると「そもそも単語とは何か」っていう深みにハマるのでこれで良しですね。これからも愛用してみます。
(13)
(0)
(0)
(0)
Total: 13Rubyでメール受信+解析
あるメールアカウントに届くメールを定期的に監視して、届いたメールに対して何かアクションしたい、というのはよくある要望ですね。Rubyでこれをやる必要が生じたので調べつつ、兼自分用メモです。 Rubyの場合、受信はNet::POP3クラスで一発です。リファレンスに丁寧なサンプルが載っているので困らないはず。 Rubyリファレンスマニュアル – net/pop http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=net%2Fpop 問題はその後。メールというのはそもそもテキストの固まりで、それを解析してヘッダー情報を取り出したり、本文を取り出したり、添付ファイルを分けたりしなければいけません。実はこれを全部自前でやろうとするともの凄く大変。なにせmultipartやらMIMEやら考えなきゃいけないことがたくさんあるし、色々なパターンのメールに全て対応していたらとても間に合いません(RFCを自分しっかり理解したい、というドMな要求があるなら別ですが...)。 ということでRubyの場合は TMail http://i.loveruby.net/ja/projects/tmail/ というメール解析ライブラリを使うと楽です。Debianの場合apt-getでlibtmail-rubyパッケージをインストールして終了。その他のOSの場合も上記からダウンロードしてきて ruby setup.rb config ruby setup.rb setup (su) ruby setup.rb install でインストールが完了します。こうすると、Mail.parseで一発で解析、変換してくれます。たとえば添付ファイルを取り出すならmail.parts[1].body, それをBase64.decode64でデコードすればそのままファイルに保存できます。こりゃ便利。 ということで、このTMailライブラリで全く不自由を感じないので、今後も愛用していきたいと思います。 おまけに。 上記TMailページの インターネットメールの基礎 http://i.loveruby.net/ja/projects/tmail/doc/basics.html というところを読むと面白いです。メールというシステムがいかにバッドノウハウの固まりかがわかります。TMailライブラリのソースコードは、なんと数千行(!)あるそうです。Rubyなのに。 まるでインターネットの負の仕様が積み重なってできているかのよう。上のページにも「メールは現在あるなかではほとんど最古参の古いシステムですから、特有の問題が死ぬほどあります。」とあります。 ふと思ったのが、今現代、もしも「インターネットを全て設計し直せる」としたら、少なくともアプリケーション層では様子は一変するだろうなぁ、ということです。自分はそっちの専門家ではないので何とも言えないのですが、少なくとも全てのプロトコルがXMLベースになるのは確実だと思いますね。ていうか、少なくともメールがXMLベースになってくれればどんなに楽でしょう。
(43)
(8)
(2)
(1)
Total: 54偶然の出会いを演出するモバイルSNS – Serendi
先日、僕が開発者として参加しているプロジェクト「Serendi」の第2回ユーザーテストが都内で実施されました。非常に暑いなか、多くの人にご参加いただきました。ありがとうございます。 このSerendiについて少し紹介しますと、このプロジェクト、2006年後期未踏ソフトウェア創造事業に採択されたもので、GPS携帯を用いて参加するモバイルSNSです。位置やユーザーの嗜好に基づいて、ユーザー同士の偶然の出会いを演出してくれるという機能が特徴です。もちろん、メッセージを送ったり友人を登録できたり、と、ごく普通のSNSとして使えます。モバイルながらGoogle Mapsに対応してますので、近くにいる友人が地図上にレーダーのごとく表示される様はなかなか圧巻ですよ。 Serendi http://serendi.org/ Serendi: A Location-Aware Social Networking Platform http://www.ipa.go.jp/jinzai/esp/2006mito2/gaiyou/6-10.html このSerendi、他のSNSにはないユニークな機能がありまして、そこを僕が主に担当しているのですが、そのユーザーの興味・趣味や友人関係などの情報から、ユーザー同士の「相性(Compatibility)」を自動で計算してくれる、というものです。上に書いた「偶然の出会い」というのは、このCompatibilityが重要なトリガーとなっています。 Compatibilityの計算アルゴリズムには色々ファクターが絡んでるのですが、大きく分けて(a)興味(interests)と(b)友人間ネットワークの2つの要素に基づいて計算されてます。(a)の興味については、「自動抽出」に対応していて、もしSerendiのユーザーがmixiやGREEなどのSNSに参加していれば、そこから日記をインポートして自動で解析してくれます。(b)についても同じで、mixiのマイミクのネットワークから、ユーザー間の「近さ」を計算してくれます。(a)については僕の専門分野である自然言語処理、(b)については共同開発者の中村さんの専門分野であるネットワーク解析を応用して実装しています。 まだまだアルゴリズムがナイーブなので、出てくるCompatibilityの値は「???」なことも多いんですが、この精度が上がっていけば、SNSを通じて趣味の友人をどんどん増やす、ということも可能になるかもしれません。もし、興味を持たれた方はぜひ使ってみてくださいね。
(1)
(0)
(0)
(0)
Total: 1