hack

QSWassr

July 3rd, 2008  |  Published in hack

さいきんのTwitterの狼藉には目が余るわッッ! wassr やろうぜ!! みたいな意見をよく目にするようになったので、QSTwitterのwassr版、QSWassrをつくってみました。15分間ハッキング。

やったこと

ほとんど s//api.wassr.jp/gなだけです。APIのエンドポイントを差し替えただけですね。QSTwitterは送信専用クライアントなので、おきらくでした。 とってもダーティなハック (following処理とかtwitterのがそのまま残ってる) なのですが、とりあえずでも動くものがあるほうがよいと思って公開しています。 興味をもたれた物好きな方は、ためしてみてください。

つかいかた

インストール方法、トリガーの設定方法なんかは、QSTwitterのやり方がほとんどそのまま使えます (s/QSTwitter/QSWassr/に注意)。

注意

QSTwitterといっしょに動かせません。 どういうわけか、Quicksilverのプラグインとして、RubyCocoaで書かれたものが複数存在できないようなのです (軽く調べた程度でですが)。

今後

やるとすれば。

  • QSTwitterと融合
    • Twitter, wassr の (両方に | 選択的に) ポストできるように
    • そうすると、ほかのミニブログとも融合したいところ
  • following対応
    • 融合させた場合も、ちゃんとTwitter,wassrそれぞれのfollowingをうまく扱えるようにしたい

その他

ミニブログを移ると、これまで築いてきたfollow関係がもっていけないから… と躊躇しがちですが、そこはそれ、心機一転すっきりと人間関係をつくりなおすのも面白いとおもいます。ナンバーポータビリティなんか気にしない! 人間関係は定期的にリセットするんだ! 的な心情ですね。

まとめ

wassrはTwitter ライクなAPIをもってるので、Twitterクライアントをつくってるひとは対応してみては! (夏ラ希望)

Tags: ,

Rubigraph 0.1.0

May 29th, 2008  |  Published in hack

Rubigraph を 0.1.0 にバージョンアップしました。 gem install rubigraph でアップグレードできます。

変更点

Ubigraph alpha-0.2.2 に対応

Rubigraph 0.0.1 だと、Ubigraph alpha-0.2.2 でうまく動きません。(XML-RPCの返り値が変わったため) バージョンアップ推奨です。


Ubigraphの中の人と、ブログコメントやメールでのやりとりを行い、Ubigraph alpha-0.2.2 から、Rubigraph が含まれることになりました。やった!

証拠魚拓:

公式ドキュメントの中に、ちゃんとクレジットはいってます。


しょぼくてもいいから、とにかくなんかつくって素早く公開する、ということが大事ですね。最初からすごくなくてもいい。公開したあと、徐々に良いものにしていけばいい。

Tags: ,

Rubigraph

May 25th, 2008  |  Published in hack

一行でサマリ

Rubigraph という、Ubigraph のRubyラッパを書きました。

Ubigraphとは

Ubigraph というグラフ生成ツールを最近見つけました。 Graphvizが静的なグラフ生成をしてくれるのに対して、Ubigraphは動的にノードやエッジを追加/削除/属性変更できるのがミソです。これがたのしい。 どれくらい楽しいかについては、デモを見ていただければと思います。

クライアントサーバ型であり、サーバのコードは非公開だけれどXML-RPCのAPIが用意されているので簡単にクライアントがつくれます。なので、クライアント側の言語は問わないと謳ってるわけですね。サーバのバイナリはMacとLinuxが用意されてます。

Rubigraphとは

ですが、いちいちAPIリファレンス見ながらXML-RPCを書いてられない。 なので、簡単なクラスをつくってラップしたものをRubigraphとして公開します。

インストール

Rubyforgeにプロジェクトをつくっておきました。 gem install rubigraph としてインストールできます。

コード

どう書けるようになるのか

require 'rubigraph'


Rubigraph.init # XML-RPCクライアントの初期化などする
v1 = Vertex.new v2 = Vertex.new e12 = Edge.new(v1, v2)
v1.color = '#003366' v2.shape = 'sphere' e12.label = 'edge between 1 and 2'

かんたんですね!

まとめ

ダイナミックにグラフで可視化するのはたのしいものです。ぼくは関数コールトレーサにつかっていて、とても便利に感じています。 Ubigraph++。

Tags: ,

Safariの文字列検索を追う

May 5th, 2008  |  Published in hack

Safariで、ページ内検索がどのように行われているかを、ちょっと追ってみました。以下かんたんなメモ。

準備

Safari.appはリリースビルドなので、WebKit をつかいます。 Debugging WebKit の手順どおりやると、デバッグシンボルのついたWebKitでSafariがつかえるようになります。

set breakpoint

search というキーワードで、WebKit の中を検索してみたところ、いくつかひっかかります。 WebView:searchFor というのが怪しいんじゃないか、と勘であたりをつけ、ブレークポイントを張り、デバッグ実行 (Cmd-Y)。

実際に、Cmd-F してページ内検索を実行し、ブレークポイントにひっかかったところ: break

まんまとひっかかりましたね。

最終的には、WebCore::CircularSearchBuffer::isMatch という関数内で文字列の比較がmemcmpで行われています。

まとめ

ソースを静的に解析してブレークポイントにあたりをつけ、実行時の挙動を見てハックするポイントをさがす、という例でした。 次は、じっさいにこのあたりに手を入れてみます。

Tags: safari

夏ライオンのおれおれビルド

May 4th, 2008  |  Published in hack

Twitterクライアントの夏ライオンを、きわめて自分好みに改造しました。作者の 曰く、 だそうなので、ここで公開しておくことにしました。

ダウンロード

  • NatsuLion-tweaked-GW.zip
  • ソース

夏ライオンに従って、修正BSDライセンスです。

なにがちがうか

その1: 詰め込み表示

以下の画像の左がオリジナル、右がここで公開してるもの。

tweaked

いっぺんに表示できるメッセージを増やして、より世界の風を感じることができるようになっています。

その2: メッセージフィルタリング

夏ライオンにメッセージフィルタリングをつけるハック で書いたパッチを適用しています。


ほんと、ソースが公開されてるってすばらしいですね! akr++。

Tags:

IDAvailability updated

April 24th, 2008  |  Published in hack

おととい公開した IDAvailability にいくつか改善を施しました。

1. IDをURLのどこにでも書けるようにした

チェックするURLの末尾にしかIDを書けなかった (‘http://website/user/ここ‘) ので、登録できないサイトがいくつかありました。 そこで、#{ID} という値があれば入力されたIDで置換するようにしました (‘http://#{ID}.website/ → ‘http://置換された.website/’)。 mattnさんのコメントによる指摘 を反映させたものです。

2. HTTP 404 以外を返すサイトへの対応

ユーザがいない場合に、HTTP 404 を返すのではなく、3xx などを返してくるサイトがあります。 これまでサイトのHTMLをとってくるのには、サーバサイドのRubyスクリプトでopen-uri をつかっていました。 open-uri はとても手軽でよいのですが、3xx を受け取ると自動的にリダイレクトし、その結果が返ってきます。 これだと、正常にリクエストが行われたように見えてしまい、ユーザがいるかいないかの判定に使えませんでした。

よりローレベルなNet::HTTPをつかうことで、HTTP レスポンスのstatus codeをチェックするようにして問題を回避しました。

3. 横並びに

縦にずらずらっとサイトを並べていたのを横に並べることで、俯瞰性を高めました。


2008.04.24 8AM 現在で、サイト数が28 になりました。 wedataというオープンなデータストアだからこそですね。

ToDo

Tags: id, idAvailability, webapp

Aipo4 on Debian etch

March 11th, 2008  |  Published in hack

Aipo4というオープンソースのグループウェアがなかなかいかしてます。 Linux版のインストーラは、RedHat系のものしか用意されていないんですが、Debian etchなマシンにインストールできたのでやりかたを書いておきます。

1. パッチあて

aipo4-debian-patch を展開して出てきた installer-debian.patch を、aipo/bin/fc にて

# patch -p0 < installer.sh-debian.patch

のようにしてあてます。下に貼りつけときますが、やってることは単に必要なrpmがインストールされてるかどうかのチェックをコメントアウトしてるだけ、というもの。

2. 必要なライブラリのインストール

libreadline-dev, zlib1g-dev が必要ぽいので、apt-get install しておきます。

3. install

# cd aipo/bin/fc && sh installer.sh

でOK。


と書いてきましたが、まとめるほどのことではないですね。コメントアウトしておわり。簡単ですね。

パッチ

--- installer.sh.orig   2008-03-10 14:45:28.000000000 +0900
+++ installer.sh    2008-03-10 14:46:36.000000000 +0900
@@ -183,31 +183,31 @@


rpm -qa --qf "%{GROUP},%{NAME}\n" > $path/bin/rpmlist

-tmp_str=cat $path/bin/rpmlist | grep readline-devel



-if [ "$tmp_str" != "" ]; then - echo "checking readline... ok" -else - echo "checking readline... error" - check_str="ERROR"

-fi



-tmp_str=cat $path/bin/rpmlist | grep zlib-devel -if [ "$tmp_str" != "" ]; then - echo "checking zlib... ok" -else - echo "checking zlib... error" - check_str="ERROR"

-fi



- -if [ "$check_str" != "AIPO_INSTALL_OK" ]; then - if [ "$1" != "check_pass" ]; then - echo "Aipo$aipo_versionのインストールに失敗しました" - userdel -r ${postgres_user} - exit 0 - fi -fi +#tmp_str=cat $path/bin/rpmlist | grep readline-devel +# +#if [ "$tmp_str" != "" ]; then +# echo "checking readline... ok" +#else +# echo "checking readline... error" +# check_str="ERROR" +#fi + +#tmp_str=cat $path/bin/rpmlist | grep zlib-devel +#if [ "$tmp_str" != "" ]; then +## echo "checking zlib... ok" +#else +# echo "checking zlib... error" +# check_str="ERROR" +#fi + + +#if [ "$check_str" != "AIPO_INSTALL_OK" ]; then +# if [ "$1" != "check_pass" ]; then +# echo "Aipo$aipo_versionのインストールに失敗しました" +# userdel -r ${postgres_user} +# exit 0 +# fi +#fi

Tags:

Ticket2RTM

January 18th, 2008  |  Published in hack

A Trac plugin that synchronizes Trac tickets and Remember the Milk tasks.

  • when a ticket is created, a RTM task also will be added.
  • when you close a ticket, the associated RTM task will be completed.

Screenshot

Screencast

Download

The source code is on github: http://github.com/mootoh/ticket2rtm/

Benefits

  • unified Task List
  • check tickets from mobile

Install

build

  1. edit Makefile and set PLUGINS_DIR to your Trac plugin dir
  2. make

or:

  1. python setup.py –bdist_egg
  2. copy dist/TracTicket2RTMPlugin*.egg into your Trac plugin dir

RTM API key, token

This plugin requires RTM API key, shared secret, and write-permitted token. You can obtain your API key and shared secret from here.

After acquired key and shared secret, you can get your token by using bundled script. Run as follow:

% python get_token.py  

Configuration

  1. copy/paste contents of trac_ini_sample.txt to your trac.ini
  2. set rtm_api_key, rtm_api_secret, rtm_api_token to ones acquired above
  3. enjoy !
Tags:

Ticket2RTM 0.1

January 18th, 2008  |  Published in hack

TracのチケットからRemember the Milkのタスクを自動生成するTracプラグインをつくりました。 詳しくは trac:Ticket2RTMに。

スクリーンショット

チケットがつくられたら、自動的にRTMのタスクがつくられます。

スクリーンキャスト

ダウンロード

ticket2rtm-0.1.zip

動機

やることリストを1つにしたいと思ったのでした。

  • RTMで日々のやることを管理しつつ、何かつくるときはTracでチケットを切ってる → タスクがあちこちに分散
  • 複数のプロジェクトを同時にTracですすめる → チケットがあちこちにありすぎ

あちこちにタスクが散らばっていては、やらなきゃいけないことを見落としてしまったり、やらないことを決めるためのコストが増えてしまったりで、ストレスフリーな状態になかなかなれません。

ぜんぶまとめて1つのインターフェイスで見られたら幸せだろうな、RTMのインターフェイスはいいよな、と考えてプロトタイプをつくってみたのでした。

あと、RTMはモバイル版もあるので、チケットをケータイからも確認できるという副作用的メリットもあります。

学んだこと

Python

Pythonのコードをまともに書くのは始めてでした。selfうっとうしいとか、正規表現めんどいとか、インタラクティブ環境でのreloadを最初しらなくてえらい非効率だったりとか、switchないの? とか驚きの連続でしたが、なんとかなるもんですね。 プラグインをつくるためにTracのコードを読んでたのですが、インデント強制な言語はコードリーディングにいいですね。 ものの見方を増やせたのはよかったかなと。

RTM連携させるために、RTM APIのPythonラッパの一部を書くことになりました。 これには1年ほど前にrtmilk.rbというRuby版をつくっていた経験が活きました。多少言語のsyntaxが変わろうが、やりたいことがはっきりしてれば考え方は同じ。

Trac Plugin

TracでPluginを書くのは思っていたよりも簡単でした。 これをとっかかりにして、いろいろなアイデアを形にしていこうかなと。


今年のアウトプット第一弾はTrac+RTMハックでした。 1/14から始めて、夜なべでつくり、1/18に0.1リリース。思いつき駆動だなー。 しかしこれで明日のShibuya.trac ミーティング1.0、明後日のRemember The Milk 交流会 in 東京で話せるネタができたということで。

Tags: , trac

QSTwitter 1.1 (Quicksilver Twitter Plugin)

December 22nd, 2007  |  Published in hack

QSTwitter (Quicksilver Twitter Plugin) 1.1を公開します。

QSTwitter.zip をダウンロードしてダブルクリック!

変更点は、Twitterエントリの”from=…”のところに、”QSTwitter”が入る、というものです。ユーザーエージェントみたいなものですね。


おまけ : どうやって自作Twitterアプリでfrom=”…”に自分のアプリ名を入れるか

  • Twitterの中の人にメールを送る
  • 自分アプリで投稿するときに “source=YourAppName“というパラメータを追加
  • Twitter側の対応を待つ

でした。 僕の場合は、10日ほどで対応してもらえました。Twitterの中の人に感謝!

参考 :

Tags: , , , ,