2008年 07月 06日

Wassr 用の IRC ゲートウェイ

http://coderepos.org/share/browser/lang/ruby/net-irc/trunk/examples/wig.rb

いままで tig.rb を継承して wig.rb を作っていたのですが、割と API に互換性がないのと、「チャンネル」とかに対応させるたりしたいために wig.rb は tig.rb をコピペしながら書きなおしました (ヘタに混在させてカオスにするよりはコピペのほうが健全)

tig.rb からの変更点

  • グループ機能をさくじょ (/join #foo とかは、ワッサーのチャンネルをヲチるようにするため)
  • ワサチャンネルへの対応 (jabber つかってても api 使っててもいけるはず。ただ api のほうは制限つけたりをちゃんとやってないのでそのうちだめなになるかも。今は wassr は api 制限ないので問題ない)
  • いろいろリファクタリング (tig.rb にも書き戻す予定)

ちゃんと説明すると (というか忘れそうなので現状の整理)

  • チャンネル名は、ワサチャンネルの英語名 (id) です。
  • jabber を使わない場合
    • 明示的に join したワサチャンネルだけが通知される ( /join #wassr_request ) とか
    • 現状ではワサチャンネルに参加する API がないので、先に web から参加しておく必要がある
    • 参加していないワサチャンネルでも、更新情報だけは /join するだけで見れる (単純に json feed みてるだけなので)
    • 入れば入るほど API アクセスが増えます
  • jabber を使う場合
    • 明示的にチャンネルに join しなくても、参加しているワサチャンネルのメッセージ自体は送られてくる (サーバメッセージの欄に表示されたりするはず)
    • いくらワサチャンネルに参加してても jabber コネクションは常に一つです
    • jabber 使うのが現状では一番効率的です。

IRC の「チャンネル」とワッサーの「チャンネル」が混ざるので、ワッサーのチャンネルは「ワサチャンネル」と書きなおしました

IM からでも /me fav id が使えるようにした。

  • ユーザごとにカウンタをもつ
  • 発言するたびにカウンタをインクリメント
  • id -> [nick, counter] のハッシュをつくっておく
  • /me fav id をしたときに nick の人の user_timeline をとってきて、counter の示す位置の status の id を取得
  • イイネの API を叩く


問題点

  • user_timeline がキャッシュされてる?っぽいので、ズレることがある。
  • タイミングによってはズレる。
  • とりあえずズレる

リア充大学生が羨ましい。

だめ

土日はずっとニコニコみながらコード書いてた。非常に充実していた。

Terminal.app にもどった

iTerm 重すぎてだめだ…… 軽くなるパッチがつくれたらもどろう。。。

2008年 07月 05日

アロエ

レンズの話ばかりのやつはおもしろくない。

発見と演出

普通の日常の中からおもしろいことを「発見」することと、そこらにあるつまらないものをおもしろく見せる「演出」の境界はどこにあるんだろう。写真を撮ってると思う。

ホウレンソウって、言葉を見るだけでとても憂鬱になる。

造花に見えるけどちがいます。「造花」っていう言葉がなぜかすぐに浮かんでこなくて、「造花」っていう概念だけが浮遊して困った。

make -j 2

make するとき常に gcc とかが一個しかうごいてなくて、マルチコア CPU だと 50% までしか使わなくて残念なかんじだなーっておもったら、make するとき -j 2 とか渡すと依存関係中で平行できるところは平行してやってくれるみたいだった。make -j だけだと起動しまくって重すぎなので、コアの数を指定するとよさそう?

2008年 07月 04日

正しい振舞い(笑

そろそろ殺されそう……

ひだまりスケッチ<a class="okeyword" href="g:subtech:keyword:×">×</a>365

やばいなぁ…… ほんといい。なんかやたら1期に比べてうごくなーっておもった。これだけはリアルタイムで放映見る。なんか、なぁ、ほんといい。ほんといい。余韻に浸っている。いろいろ、書きたいけれど、余白が65535バイトほど足らないので書かない。

log (じぶんいがいのだいたいさくじょしてるのでコンテキストがよめない)

01:25 <@cho45> XUL/Migemo
01:25 <@cho45> いれてみたけどいろいろすげええええ
01:25 <@cho45> Safari みたいなハイライトかっこよす
01:27 < g****> 365
01:30 <@cho45> migemo ためしてたらはじまってあせった > 365
01:30 <@cho45> 何度かためしたんですけど、慣れなくてだめだった > migemo
01:34 < m****> migemoとかいい365をみるんだ
01:34 <@cho45> なんかやたらうごきますね!
01:35 <@cho45> おれにチョコくれ! ゆの! ゆのー!
01:36 <@cho45> ゆのっちまじかわいい
01:36 <@cho45> ゆのっちまじかわいい!
01:36 <@cho45> ゆのっちまじかわいい!!!1
01:37 <@cho45> ほんとうごくなー
01:37 < m****> 来週から富士山です。
01:37 <@cho45> 来週からwww
01:37 <@cho45> no more 富士山

気付いたらはじまってて急いでヘッドフォンつけた。

もっと! もっと! キモく!!!!

git-svn dcommit を自動的に行う

svk で mirror レポジトリに直接コミットするような感じにしたいときがいくらかありますよね。普通に git ci / git svn dcommit をやるんでもいいんですが、これだと git の軽さが損なわれてしまい、とても残念な気持ちになります。なので、git svn dcommit は非同期で裏に回すようにします。


しかし、けっこうこういう、裏にまわして非同期で実行して結果だけみたい場合っていうのはあるので、汎用化しておきます。結果表示はうまくいったかどうかだけわかればいいので、screen のラインに表示させることにしました。

backtick は wait を 0 に設定すれば screen と密着したデーモンみたいに使えるので、そこの中で DRb サーバをたちあげ、随時リクエストを実行していくようにします。(ただし :source で終了してくれたりはしないので、自分で過去の自分を kill するようにしています)

#!/usr/bin/env ruby

require "drb/drb"

DRb.start_service

o = DRbObject.new(nil, "druby://localhost:9999")
o.add_queue(ENV.to_hash, ARGV.join(" "))

こんな感じでリクエストをなげると、実行されて、一行ずつ screen の backtick エリアに表示されます。実際実行されているかどうかは、ps aux | grep AsyncDRb とかやると、wating... とか実行中のコマンドとかが表示されます。


でもって、これを有効にしたうえで、~/.gitconfig に alias を書きます。

[alias]
	ci      = !sh -c 'git commit -av && [ "$(git config --bool svn-remote.svn.autodcommit)" = "true" ] && $HOME/.screen/asyncrun.rb git svn dcommit && echo "dcommit done!"'
	svn-ad  = config svn-remote.svn.autodcommit true
	svn-ado = config svn-remote.svn.autodcommit false

自動的に dcommit したくない場合も十分あるので、svn-remote.svn.autodcommit の設定をみて、実行するかどうか決めています。

あとは普通に git ci とかやれば裏で dcommit が走りながら編集できるのでとても便利です。