December 29, 2008

Termtter – ターミナルエミュレータ上で動作する Twitter クライアント

追記
以下の情報はかなり古くて、今はいろいろ変わっちゃってます。
最新の情報については http://github.com/jugyo/termtterhttp://termtter.org/ を参照してください。

ターミナルエミュレータ上で動作する Twitter クライアントを作りました。

指定した間隔(デフォルト5分)毎にデータを取りに行ってターミナルに出力します。
ユーザー毎に色が変わるようになっていて、そこそこ視認性にすぐれていると思います。

termtter_0

また、hook を追加することでデータ更新の際の動作をカスタマイズできるようになっていて、例えば Linux の notify-send コマンドで新着メッセージをさりげなく画面に表示したりといったことも簡単にできます。
標準で、ターミナルエミュレータ上にメッセージを出力するための hook と、notify-send を実行する hook が実装されています。

ソースコード

http://github.com/jugyo/termtter

インストール

gem パッケージとして github からインストールできます。
インストールするには以下のコマンドを実行します。

sudo gem source -a http://gems.github.com
sudo gem install jugyo-termtter

使い方

設定ファイル

Termtter を動作させるためには、ホームディレクトリに .termtter という名前の設定ファイルを用意しておく必要があります。
設定ファイルには最低限、ユーザ名とパスワードを書いておく必要があります。
以下に例を示します。

vim ~/.termtter
require 'termtter/notify-send' # notify-send 機能を有効に

configatron.user_name = 'ユーザー名'
configatron.password = 'パスワード'
configatron.update_interval = 120 # 更新間隔を120秒に

起動

Termtter を起動するには以下のコマンドを実行します。

termtter

コマンド

便利なコマンドをいくつか用意してあります。

exit
プログラムを終了します。
help
ヘルプを表示します。
list, l [ユーザーID]
follow しているユーザーの最近のタイムラインを表示します。
コマンドの引数にユーザー名を指定することで、特定のユーザーの発言だけを表示することもできます。
replies, r
Replies を表示します。
search, s 検索クエリー
検索します。
show ステータスID
指定されたIDのメッセージを表示します。
update, u メッセージ
メッセージを送信します。

注意点

Twitter API は1時間に100回までしかリクエストを投げれないので、その点を考慮してコマンドを実行する必要があります。

問題点

名前がダサい。。

スクリーンショット

list
termtter_list

replies
termtter_reply

search
termtter_search

notiry-send による通知

termtter_notify-send

December 24, 2008

Tokyu.rb の忘年会に参加してきました(12月17日)

12月17日に Tokyu.rb の忘年会に参加してきました。

あとで書く。

東京Ruby忘年会2008に参加してきました。

東京Ruby忘年会2008に参加してきました。

あとで書く。

Tokyu.rb の人とか笹田さんとか arton さんとか来月入社する会社の社長さんとか未来の同僚とかとたくさん話せて非常に楽しい忘年会でした(何話したかあんまり覚えてないですけど…)。

幹事のもろはしさんお疲れ様でした。

Rails勉強会@東京第36回に参加してきました

Rails勉強会@東京第36回 に参加してきました。

あとで書く。

詳細なレポートはこちらをどうぞ。
Rails勉強会@東京第36回に行ってきた – なんとなく日記

前半セッション – Cucumber

Cucumber はテストツールのようです。
自然言語でテストを書くことが可能だそうです。
日本語でも書けるらしいです。
自然言語といっても正規表現でマッチさせてるだけらしいです。
自然言語で書ける、さらに日本語で書けると何が嬉しいのかというと、プログラムがわからない人にも理解できるテストを作成できることなんだと思います。
「システムがこのように動作する」という仕様そのものがテストケースとして動作するイメージでしょうか。
これがその通りに実現すれば実に素晴らしいですね。

Cucumber では Webrat というライブラリを使って実際にテストを動作させています。
僕はこの Webrat のほうにすごく興味を持ちました。
Webrat については以下の記事が詳しいです。
Webratがスゴい(続:Cucumberがアツい) – moroの日記
えーっと、要するに Webrat を使うと Web アプリケーションのテストが簡単に書けるみたいです。
例えば、clicks_button("送信") と書くことで「送信」ボタンを押したときの挙動を再現できるとか、なんかそういったものらしいです。
僕は Web アプリのテストによく Selenium IDE を使ってますがあんな感じでしょうか。
Selenium は実際にブラウザを動かしてるので、厳密に言うと Webrat とはちょっと違いますが、あんな感じのことを Ruby だけできるということなのであればかなり便利かもしれません(ていうか mechanize 使えばできるか)。

後半セッション – Merb

Merb というか DataMapper の説明でした。
DataMapper は ActiveRecord に比べていろいろ書きやすそうです。
検索メソッドも簡単で、取っつきやすい感じです。
ActiveRecord は :conditions => ... なんて書かないといけないのがプチストレスなんですよねぇ。
DataMapper は全体的に見て ActiveRecord よりも楽に使えそうな印象です。
ActiveRecord を理解している人であれば DataMapper を使い始めるのは簡単だと思います。
でも DataMapper にも問題がないわけではなくて、バグがあったりあやしい動きのところがあったりして実用に耐えるかどうかはまだ微妙みたいです。

その他

角谷さんの「実践Rails」の話も聞きたかった。

ていうか、
MerbはRails3にマージされる事になった – Hello, world! – s21g
らしいです(ビックリ〜)。
OR マッパーとかどうなるんですかね。
Merb 調べないとなぁ〜。

第4回Smalltalk勉強会に参加してきました

第4回Smalltalk勉強会に参加してきました。
12月19日(金) に株式会社豆蔵で行なわれました。

あとで書く。

いや〜、面白かったです。
いろんな Smalltalk 処理系を見れて非常に楽しかったです。
ていうか Smalltalk 処理系多すぎ(笑)
でも見た目はどの処理系も Squeak に似てるんですねぇ。
Squeak がそれほど昔と変わってないということなんですかね、見た目に関して。

阿部さんのプレゼンが熱くて良かったです。
Smalltalk に対する情熱がビシビシ伝わってきました。

いろいろなSmalltalkでフィボナッチベンチ

梅澤さんによる、各処理系・言語によるベンチマークの結果が非常に興味深かったです。
ていうか VisualWorks 早すぎ。
それに比べて Squeak はかなり遅くて、Python(3.0) はもっと遅くて Ruby はもっともっと遅い。
Smalltalk の古い VM でも Python や Ruby なんかよりも断然早い。
梅澤さん曰く、VisualWorks の VM はものすごく最適化されているらしいです。
その技術が Java にも使われているとこのこと。
Squeak が若干遅めなのは VM のポータビリティを重視しているかららしいです。

いまやマシンの性能が非常に良くなっているので、遅いスクリプト言語でもあまり遅く感じなくなってるんですかねぇ、僕たちは。
ちょっと Smalltalk を使い込んでみて体感でどのくらいスピードの差があるのか確かめてみたくなりました。

GNU Smalltalkの紹介

林さんの GNU Smalltalk の話も興味深かったです。

GNU Smalltalk ですが、そこそこ動くみたいです。
X Window を使ってクラスブラウザも起動できるようです。
C 言語で書かれたプログラムとの連携もできるようになってるらしいです。

あとで Ubuntu にインストールしてみるつもりです。

December 21, 2008

Mac + Ruby + net/http + readline でおかしな動作

Mac に入っている Ruby(ruby 1.8.6)だと以下のコードが意図したとおりに動かない。
なんでだろ。

http://gist.github.com/38344

open-uri を使わずに net/http でリクエスト投げるようにした場合もダメだったので open-uri は関係なさそう。
readline 使うのやめて gets を使うようにすれば意図したとおりに動く。

追記:
記事のタイトルや上記のソースはちょっと誤解をまねきそう。open-uri とか net/http とかは今回の件には全く関係なかった。
ていうか、そもそも OSX に入っている readline っておかしいというか、実態は libedit というライブラリで、readline のヘッダーファイルに見えるものは libedit のそれへのシンボリックだったりする。
GNU の readline を使うようにしたいんだけど、どうしたらいいんだろう?readline 自体は MacPortsで簡単に入れられたんだけど。

追記:
MacPorts で Ruby を入れたら期待通りに動くようになりましたー。めでたしめでたし。
ちなみに、以下のようにしました。

まず readline をインストール。

sudo port install readline

続いて ruby をインストール。

sudo port install ruby

MacPorts のほうの ruby が常に実行されるようにシンボリックリンクを作成。

sudo ln -f -s /opt/local/bin/ruby /usr/bin/ruby
sudo ln -f -s /opt/local/bin/irb /usr/bin/irb
sudo ln -f -s /opt/local/bin/ri /usr/bin/ri
sudo ln -f -s /opt/local/bin/erb /usr/bin/erb

追記: PATH の先頭に「/opt/local/bin/」がくるようにしておけば別にシンボリックリンクを作る必要はないですね。

正常に動作するかどうかを以下のコードで検証しました。

http://gist.github.com/42885

Leopard 標準の ruby(というか readline というか libedit) だと「puts ‘hoge’」してるスレッドが途中で止まってしまうといった現象が起きていました。
そのために Termtter がうまく動かなかったんですよねー。

December 20, 2008

Fieldrunners 攻略法

ここ数日 Fieldrunners という iPhone/iPod touch アプリにはまってたんですが、攻略法を発見しました。
どうやるかというと、えーっと、つまり、敵を行ったり来たりさせるんです。

以下のような陣形で、右端にある二つの出口を交互に開閉します。

fr_1.png

fr_2.png

要するに、敵に以下のルートを何度も往復させるわけです。

fr_3.png

簡単ですね。

ていうか、こんなの誰でも気づきそうだよなぁ。
実際、ネットで調べてみたけどこのテクニック(ジャグリング)はすでに常識っぽい。