197x timer with your messages
TRANSCRIPT
あなたのメッセージで世界をつなぐTimer
Kuniaki IGARASHI/igaiga2009.7.4 @GREE 197x
自己紹介いがいが1977年生まれ
動画系組み込みプログラマ趣味:量子力学
高専カンファレンス運営
高専カンファレンス高専をキーワードに学生、教員、社会人が集まる勉強会
科学雑誌Natureのように各自の得意分野を分かりやすく説明http://kosenconf.jp/
基調講演(予定)
航空高専超小型衛星開発高専関係者以外でも参加OK!
高専カンファレンスin 東京 2009.11.7
開催実績東京 2008/6, 122009/4
北海道 2008/9
福井 2009/2九州 2009/5
全国各地で開催するので
ustreamでつないでチャットで会場とコラボする
でも、会場でPCを持ってる人はいいけど、ない人はチャットを読めない
PCがないなら表示すればいいじゃない
おk。
つくった。
TwYMTimerwithYour
Messageshttp://code.google.com/p/twym/
TwYMIRCメッセージを表示できるタイマー
動作環境Mac OS X Leopard
Quartz Composerruby 1.8.6 / 1.8.7
Quartz Composermacに標準で入ってる
グラフィカルなデモを作成できる開発環境
TwYM frontend タイマーIRC/ustreamメッセージ
TwYM QC code
問題はどうやってIRCからQCへ
データを送りこむか
QC は外から入力できる形式が非常に限られている
最初のバージョンの通信方式
IRC (ustream chat)
nadoka(ruby IRC bot)
YAMLRSSQuartzComposer
問題点一定時間発言をまとめて1つのRSSにしていたので発言→表示の遅延が
最大20秒
なんとかしたい
案:mootoh さんの
SocketReaderPatchつかわせてもらう
これであっさり解決とおもいきや・・・
現在のQuartzComposerではなぜか動かない
orz
案:unix shell patch
QCのsampleについてくる
unix shell commandの結果を表示するpatch
/Developer/Examples/Quartz Composer/Plugins/CommandLineTool
しかし
使っていると
画面が勝手に拡大されていく
バグに遭遇
1ヶ月足踏みorz
やさぐれていたある日
なんか使えそうなpatchをみつけた
Network Receiver
Leopardあたりで入ったみたい
Network Receiver
別の Network Broadcasterからデータを受け取れる
Network Receiver
This patch receives the text sent on the local network by the Network Broadcaster patch.
Network Broadcaster
Network BroadcasterThis patch sends text over the local
network using UDP broadcasting or multicasting. The sent text can be received by compositions on other computers using the Network Receiver patch.
つまりこいつらはUDPできゃっきゃうふふ
通信している
NetworkBroadcaster
Network Receiver
UDP
Broadcasterをさしかえればおk
UDP
Network Receiver
IRCBot
どんなフォーマットで送ってるのか調査
NetworkBroadcaster
Network Receiver
UDP
“Apple”って送る場合は“\0\0\0A\0\0\0p\0\0\0p\0\0\0l\0\0\0e”
って送ればいいよ
http://arrifana.org/blog/2007/11/leopards-quartz-composer-and-network-events/
やってみた
rubyで送ってみる
require 'socket'socket = UDPSocket.open()socket.connect("225.0.0.0", 50001) # address , portsocket.send("\0\0\0A\0\0\0P\0\0\0P\0\0\0L\0\0\0E", 0)
NetworkReceiver
NetworkReceiverへは\0\0\0[英字]
で送れることが判明
・・・日本語は?
さらに調査
UTF-32BE(BE:BigEndian)で送ればいいよ
http://arrifana.org/blog/2007/11/leopards-quartz-composer-and-network-events/
UTF-32BEって聞き慣れない
どんなライブラリを使えばいい?
ruby1.9は組み込みライブラリkconvでUTF-32BEに変換できる!!
キタ━━━( )━(ω・́ )━(・ω・́)━(`・ω・́)シャキーン━━!!
ruby1.8.6の場合は外部ライブラリのrbuconvを使えばおkhttp://www.yoshidam.net/Ruby_ja.html
さらにやってみた
ruby1.9.1で送ってみる# -*- coding: utf-8 -*-require 'socket'require 'kconv'socket = UDPSocket.open()socket.connect("225.0.0.0", 50001) # address, portstr_u32BE = Kconv.kconv('いがいが', Kconv::UTF32, Kconv::UTF8)socket.send(str_u32BE, 0)
http://igarashikuniaki.net/tdiary/20090420.html
NetworkReceiverへは
UTF-32BEで送れることが判明
"\0\0\0A"はUTF-32BEでASCII範囲を指定してたのね
ここまでわかれば・・・
IRC側にNadoka
(Ruby IRC Bot Library)を使って発言をQCへ送りこむ
IRC (ustream chat)nadoka(ruby IRC bot)
UDP通信(UTF32-BE)
QuartzComposer
TwYMTimerwithYour
Messageshttp://code.google.com/p/twym/
採用実績札幌Ruby会議01
Genesis Lightning Talks勉強会カンファレンス高専カンファレンス
Genesis Lightning Talksさとうようぞうさんの手で音が出る機能が追加されましたありがとうございます!
注:ustreamは
同アカウントが複数いるとkickされる
別のIRC client でustream にログインするときは注意
まとめ
QuartzComposerへはNetwork Receiver を使うと
UDP通信でUTF-32BEで入力できる
ustreamニコニコ生放送
空間の制限を外す
youtubeニコニコ動画
時間の制限を外す
TwYM
時間と想いを共有
TwYMopen source
(New BSD License)で公開中!
http://code.google.com/p/twym/