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 が含まれることになりました。やった!
証拠魚拓:
公式ドキュメントの中に、ちゃんとクレジットはいってます。
しょぼくてもいいから、とにかくなんかつくって素早く公開する、ということが大事ですね。最初からすごくなくてもいい。公開したあと、徐々に良いものにしていけばいい。
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++。
YAPC::ASIA 2008 2日目
May 16th, 2008 | Published in Uncategorized
昨日に続いて2日目も行ってました。
さいごにLarryがゾンビになって壇上にのぼったときに、Perlが愛されてるのはこの人がつくっているからなのだ、と感じました。あのときの会場の暖かさ。
内容はもちろんのこと、イベント自体のクオリティがとてもすばらしかった。スタッフのみなさまありがとうございました。ぼくもPerlに貢献できるよう、ドメインとってSEOしてPHPアプリをインストールしようと思います。
YAPC::ASIA 2008 1日目
May 16th, 2008 | Published in Uncategorized
YAPC::ASIA 2008の1日目に行ってきました。
Perlを書くことはほとんどない (最後に書いたのは10年前) ぼくですが、Perlコミュニティというのはどんなものだろうという好奇心で参加しています。 現実の問題にとりくむプラクティカルなハッカー集団、という印象ですね。
おもしろかったのは Parrot の話でした。用途別にレジスタが4種類あるのですね。ぼくが今つくってるレジスタベースのバーチャルマシンでは、なんでもありオブジェクトが入るレジスタの1種類しかなかったので、参考になります。 ParrotとLLVMを比較してみるのもおもしろそう。
ぼくはというと、話を聴きながらひたすらはてぶCore Dataをつくってました。CodeReposに置いてます。(Changeset 11654あたり)
エクスポートしたはてぶファイルを読み込んで、タグとエントリを一覧表示します。 キーワードによるフィルタリングやタイトルによるソートなどができます。 YAPC中にViewerとしての機能をひととおりつくりあげました。 制約がある方が集中できるものですね。明日は編集の実装に取り組んでみようかな。
懇親会では、くじ引きに当たってDeNAのプレゼントであるゆびクッションをいただきました。ありがとうございます!
うちに泥棒が入ってきたときには、これで撃退しようと思います。
明日も参加します。大岡山とおい… ><
黒いMacBookでXcodeを広げてごにょごにょしてる人がいたら、きっとぼくです。声をかけてもらえるととてもうれしいのです (識別しやすいように、名札にいつものアイコンを描いておきました)。
TopCoder::SRM::401
May 7th, 2008 | Published in Uncategorized
ひさびさにTopCoderについて書き残してみます。 自分はまだまだへぼいのでDiv2の話。
Easy
問題, コード
二次元座標上の2点が与えられて、その線分上にある格子点 (端点は含まない) の数をかぞえる問題。
2点を通る線分は、
y = (y2-y1)/(x2-x1) * (x-x1) + y1
( x1 < x < x2 )
で表現できるので、(x, y) が格子点かどうかは (y2-y1)*(x-x1) が (x2-x1) で割り切れるかどうかで判断できます。
というコードを10分くらいで書いてsubmitし、200ptsを得たものの何か不安を感じて、
(x1, y1) = (0, 0), (x2, y2) = (0, 50), 期待する返り値: 49
のテストケースをローカルにつくったところ、みごとにアウト。 x2=x1 のケースが境界条件でした。
いそいでこの場合だけを特殊化して再びsubmitし、結果は150pts。ペナルティきつい ><
Medium, Hard
どちらも問題は分かるし、解決策の背中は見えてくるんだけど、コードにできず。これじゃまだまだDiv2から抜けられないな…
Challenge
今回のEasyは、きっと境界条件の処理が甘いコードがあるにちがいないと踏み、さっきやったテストケースでchallengeしてみました。初めてchallengeに成功し、+50pts。
他のひともがんがんchallengeしており、Room内は死屍累々としていました。
結果
System Testで無事にEasyがとおり、こんなところ。 Ratingは前回よりも+30で894ptsになりました。あと+6で緑コーダー。
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 してページ内検索を実行し、ブレークポイントにひっかかったところ:
まんまとひっかかりましたね。
最終的には、WebCore::CircularSearchBuffer::isMatch という関数内で文字列の比較がmemcmpで行われています。
まとめ
ソースを静的に解析してブレークポイントにあたりをつけ、実行時の挙動を見てハックするポイントをさがす、という例でした。 次は、じっさいにこのあたりに手を入れてみます。
Tags: safari
夏ライオンのおれおれビルド
May 4th, 2008 | Published in hack
Twitterクライアントの夏ライオンを、きわめて自分好みに改造しました。作者の 曰く、 だそうなので、ここで公開しておくことにしました。
ダウンロード
-
NatsuLion-tweaked-GW.zip
-
ソース
夏ライオンに従って、修正BSDライセンスです。
なにがちがうか
その1: 詰め込み表示
以下の画像の左がオリジナル、右がここで公開してるもの。
いっぺんに表示できるメッセージを増やして、より世界の風を感じることができるようになっています。
その2: メッセージフィルタリング
夏ライオンにメッセージフィルタリングをつけるハック で書いたパッチを適用しています。
ほんと、ソースが公開されてるってすばらしいですね! akr++。
つくりたいものがない人のために
May 3rd, 2008 | Published in Uncategorized
プログラムを書きたいけど、何をつくったものか思いつかない症候群というのがあると聞きます (参考:TopCoderが流行ってるみたいなので)。 一方で、つくりたいものがたくさんありすぎて時間が足りない、このままだと死んでも死にきれない、というひともいます。
じゃあ、アイデアが余りあまっているひとはどんどん公開して、コードを書きたいひとはそれをがんがん実装すればみんな幸せになりますね!
よーしアイデア共有サイトみたいなのをつくろうかと考えてたら、CodeReposのticketに登録すればいいじゃないか、と思い当たりました。さっそくideaというticket typeをつくって、どう直す.orgについての案 を登録しておきました。
先のエントリにも書いた (再掲)
- いいアイデアを思いつく
- コードを書き起こす
- どこにバグがあるか見つける
- バグに適切な処置をする
の、1と2の間に橋が架かるといいですね。
Tags: idea
どう直す.org
May 3rd, 2008 | Published in Uncategorized
どう書く.org は与えられたお題をどのようにプログラムするかにフォーカスしているんだけど、自分で書くことよりも他人のコードを直すことのほうが得意としてるひとも世の中にはたくさんいるはず。
そこで、どう直す.org というデバッグ力を競うサイトをつくることを考えてみます。
- お題は壊れたコード
- 問題がどこにあるかを指摘
- TopCoder の Challenge Phase みたいなもの
- 問題に対する解決策となるコードを貼る
アイデアをCodeReposにticketとしてつくっておきました。
プログラミングには、
- いいアイデアを思いつく
- コードを書き起こす
- どこにバグがあるか見つける
- バグに適切な処置をする
という異なる能力が必要になります。 2についての情報はたくさん溢れていますが、それだけじゃプログラムは完成しない。 1については別に考えるとして、3と4の能力を高めることももっと重視されるべき。 デバッグのテクニックというのはなかなか表に出てこないものなので、こうした暗黙知を共有できるとよいですね。
Tags: debug, idea, web