8月 30
User Streamsで受信したデータをWebSocketでリアルタイムにやりとりするTwitterクライアントを作ってみました。

特徴
- 新着ツイートをリアルタイムにプッシュ
- タブによるユーザ振り分け
- タブごとの未読管理
- LDR風のキーボード操作
- in_reply_toを辿ってインライン表示
- 画像のインライン表示
ソースコード
GitHubでソースコードを公開しています。
mono0x's TwinkleSnow at master – GitHub
インストール
利用にはruby 1.9.2, TokyoTyrantが必要です。また、gitがあるとソースコードの入手・更新が容易です。以下の説明ではこれらはあらかじめインストールされているものとします。
gem install em-http-request em-websocket erubis eventmachine oauth tokyocabinet tokyotyrant twitter twitter-stream
git clone git://github.com/mono0x/TwinkleSnow.git twinklesnow
cd twinklesnow
wget http://labs.cybozu.co.jp/blog/mitsunari/2007/07/24/js/sha1.js -O static/sha1.js
wget http://flesler-plugins.googlecode.com/files/jquery.scrollTo-1.4.2-min.js -O static/jquery.scrollTo-min.js
cp data/config-example.rb data/config.rb
vi data/config.rb
# Twitterアカウント
@account = ''
# クライアントにログインするためのパスワードをSHA-1でハッシュ化したもの
@password = ''
# WebSocketの設定
# この情報は外部に公開される (Webサーバで認証を行えば隠すことは可能)
@web_socket = {
:host => '',
:port => 1,
}
@tokyo_tyrant = {
:host => 'localhost',
:port => 1978,
}
@oauth = {
:consumer_token => '',
:consumer_secret => '',
:access_token => '',
:access_secret => '',
}
# im.kayac.comを利用したプッシュ通知設定
# プッシュを利用しない場合はnilを設定しておく
# @im_kayac = nil
@im_kayac = {
:user_name => '',
:handler => '',
:secret_key => '',
}
# ブロックに関する設定
@block = {
# ここで設定した語を含むツイートは表示されない
:words => [
"word1",
"word2",
],
}
# ユーザを振り分けタブ設定
@tabs = [
# 先頭のタブは2番目以降のどれにも当てはまらないユーザが集められる特殊なタブ
# usersは無視される(が、削除するとエラーになる)
{ :name => 'timeline', :users => [], },
# usersに記述されたユーザがタブに振り分けられる
{
:name => 'tab',
:users => [ 'user1', 'user2', ],
},
]
以下のページからスクリプトをダウンロードしてstatic/jquery.mousewheel.min.jsとして配置します。
MOUSE WHEEL EXTENSION
また、Webサーバの設定で適当なドメインのルートにtwinklesnow/staticを割り当てておきます。
実行
サーバを起動するには以下のコマンドを実行します。
ライセンス
MITライセンスとしておきます。
リンク
利用しているライブラリの一覧です。
8月 26
これらのサイトを参考にインストールしてみました。
インストール
Dropbox – Downloading Dropbox – Online backup, file sync and sharing made easy.
x86とx64環境向けにdebファイルが用意されているので、適切なものをダウンロードします。
sudo dpkg --force-depends -i nautilus-dropbox_0.6.3_amd64.deb
dropbox start -i
dropbox stop
設定データベースからhost_idを読み出し、Dropboxのサーバに登録します。
wget http://dl.getdropbox.com/u/6995/dbreadconfig.py
python dbreadconfig.py
host_id = HOST_ID
last_revision = None
schema_version = 6
このように表示されるので、以下のURLのHOST_ID部分を表示された文字列に書き換えてアクセスします。この作業は別のマシンのブラウザから行えばOKです。
https://www.getdropbox.com/cli_link?host_id=HOST_ID
最後に、同期用のディレクトリを作成しておきます。
daemontoolsで管理
この状態でdropbox startとすれば利用可能ですが、daemontoolsを利用してOS起動時に自動的に起動するようにしておきます。
cd /etc/service
sudo mkdir dropbox
sudo vi dropbox/run
#!/bin/sh
cd /home/mono
exec 2>&1
exec setuidgid mono /home/mono/.dropbox-dist/dropbox
sudo chmod +x dropbox/run
最新バージョンに更新
Dropboxのフォーラムには最新のバージョンのファイルが公開されているので、そちらに切り替えてみます。
Dropbox Forums
フォーラムのLatest Forum Buildから最新バージョンのバイナリをダウンロードして置き換えます。
wget http://dl-web.dropbox.com/u/17/dropbox-lnx.x86_64-0.8.95.tar.gz
tar vzxf dropbox-lnx.x86_64-0.8.95.tar.gz
sudo svc -d /etc/service/dropbox
rm -rf ~/.dropbox-dist
mv .dropbox-dist ~/
sudo svc -u /etc/service/dropbox
フォーラムで公開されている0.8系列のDropboxにはSelective Syncという機能が実装されており、必要なディレクトリのみを同期することが可能になるため、日常的に他のPCで利用しているデータは同期せず、ソースコードリポジトリやブログのデータなどをDropbox経由で送信してバックアップするといった利用方法が考えられます。
しかし、現在のところSelective Syncの設定をGUI無しで行う方法は提供されていません。興味のある方は以下のリンクから投票するとより実現が早まるかもしれません。
I'd like to see selective sync for the linux cli text based client
8月 22
他に説明している記事を見つけられなかったのでメモ。
rvmで構築した環境を利用するためには、初期化用のシェルスクリプトを実行して環境変数を設定しておかなければなりません。
以下のrunファイルの例では、まずbashを起動して初期化用のシェルスクリプトを読み込み、rvmコマンドで利用したい環境を指定してから目的のスクリプトを起動しています。
#!/bin/sh
exec setuidgid mono bash -c '
cd /home/mono/work/rubyist_bot;
rvm_path=/home/mono/.rvm;
source /home/mono/.rvm/scripts/rvm;
rvm 1.9.2;
exec ruby rubyist_bot.rb
'
なんだかあまりスマートではない気がしますが、とりあえずこれで動いているのでよしとしています。よりよい方法があれば教えていただけるとありがたいです。
8月 10
今年も例年通りHSPプログラムコンテスト2010にエントリーしています。
今年は作品ごとのパーマリンクが用意されているようなので、そちらにリンクしておきます。
frame – HSPプログラムコンテスト2010

遊ぶためにはHSPTVが必要でかなり面倒なのですが、もし暇があれば遊んでみてください。以前のようにexeファイルも配布していただけるとありがたいんですけどね。
作ってみた感想など
いつも通りであまり代わり映えしないビジュアルではありますが、今回はOBAQを利用しているので大量のオブジェクトが飛び交うようになっており、割といい感じになったんじゃないかと思います。OBAQいいですね。移動や当たり判定などオブジェクトの制御をすべて自動化できるので容量的にもとてもありがたいです。
さらに、割と邪道な方法ではありますが実験的にリプレイのアップロード・再生機能を実装しています。ゲーム本編の強化と比べるとかなり地味な機能なのですが、実現しつつゲームとして仕上げるのはかなり厳しいものがありました。容量が厳しいからと言ってゲーム内容を削ってしまうと、遊んでもらえなくなりそもそもリプレイが活用されないという悪循環に陥りかねないですからね。frameではそれなりに工夫したつもりですが、このあたりの調整にはまだまだ改善の余地があると考えており、もし機会があれば次回以降に生かしていきたいと思います。
ソースコードについて
説明文の中にソースコードのURIを含めるのを忘れていたのでこちらに書いておきます。次回更新時には説明文も修正されていると思います。
frameのソースコード
7月 27
企業などが行っている大規模なUSTREAM中継でソーシャルストリームが有効になっている場合、不特定多数の発言が流れてくるため、中には不愉快に思うものも多くあります。また、それぞれの発言につながりがないので読んでいてもあまり面白くありません。読まなければいいという話なのかもしれませんが、画面上で動画以上の領域を占めているため、視界に入ることを避けるのは困難です。
そこで、ソーシャルストリームやチャットが表示されるソーシャルタブを非表示にするスクリプトを書いてみました。ソーシャルタブを表示したい場合も多いと思うので、ブックマークレット形式にしています。
以下のリンクをブックマークに追加するか、コードの文字列をコピーすれば利用可能です。
Hide SocialTabs
javascript:(function(){document.getElementById('socialTabs').style.display='none'})()
再度表示するBookmarkletも一応置いておきます。
Show SocialTabs
javascript:(function(){document.getElementById('socialTabs').style.display='inherit'})()
画面から消しているだけで通信は止まりませんが、実用上特に問題はないと思います。
Recent Comments