RubyKaigi 2009 Reject Talk 1

July 29th, 2009  |  Published in Uncategorized

I made a presentation at RejectKaigi 2009 in RubyKaigi 2009 day 2. The talk was about Rubigraph which I created a year ago.

Slide:

View more from .

Video:

Sample Code:


Enjoy!

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: ,

DokuWikiのタグクラウドをバックリンクにするパッチ

October 1st, 2007  |  Published in hack

1行パッチなんですけど。

DokuWikiのtag pluginと、cloud pluginをあわせると、タグクラウドができます。 なんだけど、デフォルトではタグクラウドのリンク先が /tag/tagname へのPermaLinkとなってしまいます。そのタグを用いているページのリストが表示されてほしい、というのがよくあるケースなのではないでしょうか。

ということで、パッチを書きました。 tagcloud-backlinkpatch.zip

内容は、これだけのもの:

--- syntax.php.orig     2007-10-01 00:01:07.000000000 +0900
+++ syntax.php  2007-10-01 00:01:03.000000000 +0900
@@ -78,7 +78,7 @@
         if ($type == 'tag'){
           $id = $word;
           resolve_pageID($tag->namespace, $id, $exists);
-          $link = wl($id);
+          $link = wl($id, 'do=backlink');
           $title = $id;
           $class .= ($exists ? '_tag1' : '_tag2');
         } else {

$DOKUWIKI/lib/plugins/cloud にて、patch -p0 < tagcloud-backlink.patch みたいにしてあててください。

Tags: , wiki

ApacheLogPatch

July 9th, 2007  |  Published in Uncategorized

Apache の ログ を、リアルタイムに QuartzComposer で表示するものをつくりました。 tail -f /var/log/httpd/access.log の代わりにつかう、みたいな。

Download

httpd2qc package (Universal Binary, tested on Tiger)

Screencast

プライバシーをまもるために、リモートホストのIPアドレスは “xxx.xxx.xxx.xxx” にしています。実際にはばっちり表示されます。

Quick Start

  • ApacheLogPatch.plugin を、/Library/Graphics/Patches にコピー
  • Apacheの設定ファイル (httpd.conf とか) に、filter.rb へ カスタムログ を パイプするような設定を加える
    例:
      LogFormat "%h \"%{Referer}i\" %U" httpd2qc
      CustomLog "|/opt/local/httpd2qc/filter.rb" httpd2qc
  • ApacheLogDisplay.qtz を 開く
  • Apache を restart
  • 眺める

Detail

overview.png

  1. ApacheのカスタムログをパイプでRubyスクリプトに流しこむ
  2. Rubyスクリプト (filter.rb) は、文字列のURI デコードなどをして、QuartzComposerのカスタムパッチ用にデータをつくる (ここでもうちょっと賢いことができそう)
  3. QuartzComposerのカスタムパッチ (ApacheLogPatch) は、流れてきたデータをQCStructureのスロット (とりあえず3つ) に詰め込む

ApacheLogPatch は、QCStructureのオブジェクトを出力します。実際には、[リクエストパス、リモートホストのアドレス、リファラー、検索キーワード] の要素をもつQCStructure の配列になっています。

より詳しくはソースを。

ToDo

  • 背景に世界地図を描いておいて、ログが来たときにIPアドレスから地理情報を取得して、それらしき場所を点滅させる (IP2Location とかをつかえばよさそう)
  • もうちょっとカスタマイザブルに
  • もうちょっとかっこよく

きっかけ

Google本社では、検索キーワードがリアルタイムに画面を流れているのが見れるとか聞きました。僕が行ったときには、そんなディスプレイは見当たらなかったのだけれど。

せっかく自宅サーバをMacで動かしているのだし、なにか面白いことはできないもんかなー、と風呂でぼんやり考えていて、最近遊んでいる QuartzComposer の CustomPatch と組み合わせてみたら? と。

Tags: ,

taskMap 0.1.0

March 21st, 2007  |  Published in hack

cartesianTaskを公開してみます。 ほんとまだまだの出来なんですけれど、公開することに意味があると思うので。

既知のバグがたくさんあるので、多少のことには目をつぶれる寛容な方のみお試しください。

cartesiantask専用ページ → こちら

(x,y)の属性 → Note

どうやって(x,y)の値を保持するか? と考えた結果、各TaskのNoteを用いることにしました。

  • すべてのTaskに(taskMapX, taskMapY)という2つのタイトルのNoteを追加します。
  • taskMapを試して、もういいやと思ったら menu にある reset を押してください。

注意事項

  • 初回起動時がもの凄く遅い (すべてのTaskにNoteを加えるため)
  • resetがものもの凄く遅い (すべてのTaskからNoteをはぎとるため) 。タイムアウトしてしまうと、いくつかのTaskにNoteが残ったままになってしまう場合がある

懸念事項

すべてのTaskのNoteにアクセスを行うため、RTMから怒られるかもしれません。 RTM APIの注意事項には、平均して1秒間に1回のAPIアクセスにせよとあるので。

このへんは、0.2.0リリースあたりでうまく解決する予定です。

関連エントリ

  • taskMap – Taskを2次元で可視化
  • taskMap (2)

追記

  • 公開してから6時間で22アクセス、少しでも試して頂いた人は2人。
  • 1日たち、69アクセス、試して頂いた人は12人。
Tags: , ,

cartesianTask

March 21st, 2007  |  Published in Uncategorized

cartesianTask は、Remember the MilkのTaskを二次元座標にドラッグアンドドロップで配置することにより、重要度や緊急度をひとめで分かるようにするものです。

旧名称 : taskMap

紹介ビデオ

更新情報

0.1.0 を公開しました。

  • Blog

免責

自分ではたくさんテストを行っていますが、いかんせん1人で行っているので漏れがあると思います。

TaskやListを消したりはしませんが、Noteのadd/deleteは行っています。 cartesianTaskの管理外のNoteは触れていませんが、万が一NoteやTask、Listが消失しても勘弁してください。

2007.05/26 追記

taskMapという名称は、商標登録されているとのことなので、名前を変更しました。 taskMap → cartesianTask

Tags: ,

rtmProgress 復活

March 21st, 2007  |  Published in hack

ここ数日、rtmProgressがダウンしていましたが、復活させました。

ダウンしていた理由は、rtmProgressがbackendで用いているrtmilkというライブラリのバージョンを0.3.0に上げたからです。rtmilk 0.3.0 では、それまでのバージョンとの互換性をぶったぎってしまったので、rtmProgressが動かなくなってしまっていたという不恰好な顛末でした。

Tags: ,

rtmProgress : RTMの進捗状況を棒グラフで見える化

February 20th, 2007  |  Published in hack

RTM Hackシリーズです。

今回は、RTMのUIではなかなか分かりづらいタスクの進捗状況を、棒グラフで見える化してみました。 いまのところ、期間は (今週/今月/今年) で切り替えることができます。

実装

  • サーバサイドのRubyスクリプトで全てのTaskをRTMから取得し、JSONフォーマットでブラウザに送信
  • ブラウザでタスクの範囲を絞りこんで、棒グラフを描画
  • 期間の切り替えはAjaxでさくっと

というシンプルなつくりです。

ToDo

  • 任意の範囲の進捗の表示
  • 認証の仕組みを実装して、リリース

自分がいまどこにいるのかが分かると、やる気が出ます。 「今週はこれだけやった!」みたいなものをぱっと見ることができればいいかな、と思ってつくってみました。

Tags: , ,

taskMap (2)

February 12th, 2007  |  Published in hack

taskMap – Taskを2次元で可視化 の続き。

List一覧と、個々のListに応じた色付けをTaskに割り当てるようにしました。 これで、

  • 何のTaskが
  • どんな状態に

あるのかが分かるようになります。 ある色のTaskが多いと、なにかの種類に行動が偏っているとかいうのが一目瞭然。 自分でちょこちょこ試してみているのですが、なかなか便利です。

だいぶ公開できるレベルになってきているので、もうすぐソースごと公開しようと思います。

flow

  1. RTMからList一覧を取得
  2. Listの各要素に対して、Taskのリストを取得
  3. Taskのリストを並べる

内部のつくり

Model

  • RTMのAPI を用いて、List/Taskのデータを取得
  • 独自のパラメータ (x, y) をローカルでSQLiteを用いて管理
  • RTMと独自のパラメータとは、RTMのidを通して同期

View

  • Yahoo UI をつかったDragDrop

Controller

  • Railsなんて使わない生CGI
  • DragDropのendDragイベントのタイミングで、(x, y) の値をサーバに送信 -> サーバでDBにstore

ToDo

  • デモのScreenCast を撮る (どうやったらいいんだろう)
  • 公開

メモ

これからのWeb2.0時代では、データが重要なんだってよく言われるけれど、 そのデータを活かすのがViewだと思います。 たしかに、Modelはすごい勢いで充実してきているし、それを公開するAPIもじゃんかじゃんか出てきていますが、Viewが著しく貧弱だと思うのです。 ブラウザのDivなんかによる矩形表示やリスト表示だけなんてナンセンスだと。 もっといろんなViewの可能性を求めて、ひとに優しいUIをつくりたいなとか。


しかし眠いのです。

Tags: , ,