Archive for June, 2007

IRCのメッセージをQuartzComposerに表示

June 17th, 2007  |  Published in hack

SocketReaderPatchの応用例として、IRCで流れるメッセージを、QuartzComposerに表示させてみました。

qcbot

ScreenCast (QuickTime)

ダウンロード

qc.rb

インストール

  • を Rubygem などでインストールする
  • インストールしたrbotのディレクトリ (Rubygemの場合は /opt/local/lib/ruby/gems/1.8/gems/rbot-0.9.10) の /data/rbot/plugins/ に、qc.rb をコピーする

つかいかた

  • SocketReaderPatch を使うQuartzComposerのCompositionを開いておく (サーバ側のSocketをlistenしておく)
  • 適当なサーバ、チャンネルにrbotを常駐させる (rbotのマニュアルを参照)

これで、QuartzComposerにIRCのログが表示されるようになります。

コード

たったこれだけ。

    require 'kconv'

class QCPlugin < Plugin
  PORT = 12345

  def initialize
    super
     = TCPSocket.new('localhost', PORT)
  end

  def listen(m)
    return unless m.kind_of?(PrivMessage)

     Kconv.toutf8(m.message)
  end

  def help(plugin, topic="")
    "QuartzCompositor from IRC log"
  end

  def privmsg(m)
    #puts m.message
  end
end
plugin = QCPlugin.new
plugin.register("qc")


その他

元々は、Ruby会議2日目に思いついたネタだったので、かれこれ1週間たってしまいました。長かった。 RubyCococaでやろうとか、dRubyだとか何かと野心的にアプローチをとってみたのですが、けっきょくはSocketでごりごり書くというオーソドックスなスタイルに。

それにしても、SocketReaderPatchをつくるときにもqc.rbのときにも、オブジェクト指向の生産性の高さを実感しました。 既存の振舞いをほんの少しカスタマイズしたいときの継承の威力というか。

Tags: IRC, ,

SocketReaderPatch 0.1

June 16th, 2007  |  Published in hack

SocketReaderPatch

Mac OSX の Quartz Composer で、Socketから文字列を読み込んで後段に渡すGeneratorパッチ

を書きました。

晴れた土曜の勢いで書いたのでなにかとバグがあるかもしれませんが、プロトタイプを出すことがたいせつなので公開します。フィードバックいただけるとたいへん喜びます。

2007.06/16 20:34 追記

英語の説明文も追加。QuartzComposer CustomPatch Xcode template 配布サイトに感謝のコメントを残しておいた。

2007.06/16 22:50 追記

ScreenCast を追加しました。

ScreenCastには、 Making Free Screencasts on OS X を参考にして、vnc2swfを使いました。マウスカーソルはでないのだけど、フリーでScreenCastがつくれるのは著しく便利です。

swf → mpeg4 には、QuickTime Proをつかって。なぜかH.264ではエンコードできなかったのでMPEG-4。

Tags: , ,

SocketReaderPatch

June 16th, 2007  |  Published in Uncategorized

SocketReaderPatch

SocketReaderPatch とは (What is SocketReaderPatch ?)

Mac OSX の Quartz Composer で、Socketから文字列を読み込んで後段に渡すGeneratorパッチです。


A Coustom Quartz Composer Patch that recieves strings from TCP Socket.

ダウンロード (Download)

  • Plugin File : SocketReaderPatch.plugin
  • Source (Xcode Project) : SocketReaderPatch

インストール (Install)

/Library/Graphics/Patch に、SocketReaderPatch.plugin をコピーしてください。


Copy SocketReaderPatch.plugin into /Library/Graphics/Patch .

つかいかた (How to use)

QuartzComposerにて、左側の Patch Library から SocketReader を探します。 Search in Libraries に「Socket」などと入力すると絞り込まれるはず。

あとは、SocketReaderを右側に放り込んで、いろいろと遊びます。 デフォルトでは、ポート番号 12345 でSocketのlistenをしています。適当なクライアントを書いて、UTF-8な文字列をSocketに叩き込めば、QuartzComposerに文字列が入力されます。


Open QuartzComposer, find SocketReader from the Patch Library list (type “Socket” in Search in Libraries field to search it) .

Then drag SocketReader into right pane, and play it. SocketReader listens port number 12345 in default. Make some client application and write UTF-8 strings into the socket, and Quartz Composer will show that strings.

例 (Example)

つかってみたシンプルな例

ScreenCast !

注意 (Note)

  • ざっくりつくったので、2つ以上のSocketをつなごうとするとおかしな挙動をしたりします。
  • ポート番号を変えたい場合には、SocketReaderPatch.m の port_ の値を変えればOKです。

  • Very buggy. If two or more sockets are connected, CPU usage will be so high.
  • To change the port number, edit port_ variable in SocketReaderPatch.m.

参考 (Reference)

QuartzComposerのカスタムパッチ作成には、fdiv.net:Xcode Template for Custom Quartz Composer Patches のXcodeテンプレートを用いました。

CocoaでのSocketプログラミングには、O’Reilly Network::mac devcenter::Networking in Cocoa を大いに参考にしました。


I used Quartz Composer Custom Patch Xcode template from fdiv.net:Xcode Template for Custom Quartz Composer Patches. (Thanks!)

In order to play with socket in Cocoa, O’Reilly Network::mac devcenter::Networking in Cocoa was pretty helpful.

動機 (Motivation)

Ruby会議2007 で IRC をしていて、ふとQuartzComposerでIRCのログをかっこよく流せたらおもしろいんじゃない? と思いついたのがきっかけです。 あと、QuartzComposerには、RSSを受信するくらいしか動的にテキストを流し込む方法がなさそうだったので、なんとかしてみようと。


I came up to an idea that IRC messages flow beautifully by using QuartzComposer, in RubyKaigi2007 . To push dynamic text into QuartzComposer, it seemed to be only RSS feed out there.

ライセンス (License)

上記のXcodeテンプレートが CC : Attribution-NonCommercial-ShareAlike だったので、それに従います。


CC : Attribution-NonCommercial-ShareAlike, because above Xcode template claims that license.

連絡 (Contact)

バグやその他の連絡は、まで。


Any feedbacks are welcome, .

Tags:

ThinkPad Reserve

June 16th, 2007  |  Published in Uncategorized

ThinkPad Reserve Edition

牛革で包まれていて、特別な保障がついてる、選ばれたひとにしか買うことのできないスペシャルThinkPadなのだとか。

その昔、ThinkPad X24 を使っていたのですがあの無骨感がよかった。ガワが固い、キーボードもかっちり、という。あとPC-UNIXをインストールしやすい、とか。

しかしなんでまた皮にくるんだんだろう。かっこいいのかかっこよくないんだか、実物みてみないとわかんないな。

SocketReaderPatch

June 16th, 2007  |  Published in Uncategorized

SocketReaderPatch

What is SocketReaderPatch ?

A Coustom Quartz Composer Patch that recieves strings from TCP Socket.

Download

  • Plugin File : SocketReaderPatch.plugin
  • Source (Xcode Project) : SocketReaderPatch

Install

Copy SocketReaderPatch.plugin into /Library/Graphics/Patch .

How to use

Open QuartzComposer, find SocketReader from the Patch Library list (type “Socket” in Search in Libraries field to search it) .

Then drag SocketReader into right pane, and play it. SocketReader listens port number 12345 in default. Make some client application and write UTF-8 strings into the socket, and Quartz Composer will show that strings.

Example

Simple Example

ScreenCast !

Note

  • Very buggy. If two or more sockets are connected, CPU usage will be so high.
  • To change the port number, edit port_ variable in SocketReaderPatch.m.

Reference

I used Quartz Composer Custom Patch Xcode template from fdiv.net:Xcode Template for Custom Quartz Composer Patches. (Thanks!)

In order to play with socket in Cocoa, O’Reilly Network::mac devcenter::Networking in Cocoa was pretty helpful.

Motivation

I came up to an idea that IRC messages flow beautifully by using QuartzComposer, in RubyKaigi2007 . To push dynamic text into QuartzComposer, it seemed to be only RSS feed out there.

License

CC : Attribution-NonCommercial-ShareAlike, because above Xcode template claims that license.

Contact

Any feedbacks are welcome, .

Tags:

RubyCocoaでQuartzComposerパッチ

June 13th, 2007  |  Published in Uncategorized

という小プロジェクトを今週はやっています。

RubyCocoa, CocoaProgramming, Ruby, QuartzComposer, XCode, dRuby といった様々なテクノロジーをいっきに学んでいて、かなりお腹いっぱいになってきます。

* IRCのメッセージをrbotで拾ってdRubyで投げる
* サービス側のdRubyでメッセージを受け取る
* RubyCocoaでbundleを書く
* QuartzComposerのbundleインターフェイスから、RubyCocoaでつくったクラスを指定する方法が分からなくてめげる ← いまここ

フレームワークは便利なんだけれど、なんというか全体が見えなくてもどかしく、できないことが積もっていくうちにめげ気分になるのが難点です。僕だけ?

Tags: ,

Ruby on TopCoder SRM 329

June 12th, 2007  |  Published in Uncategorized

Ruby会議2007の余韻から醒めないまま、TopCoderのPracticeを風呂に浸かりながら解いていたりします。 僕はふだんC++を使って解答を書くのですが、はてRubyで書いたらどんなくらい簡潔に書けるもんだろ、とやってみました。

お題

TopCoder::SRM::329 VowelEncryptor

平たく言うと、

与えられた文字列の配列のそれぞれに対して、含まれる母音をすべて取り除いたものを返せ

というものです。

C++

#include 
#include 
#include 
using namespace std;

vector  encrypt(vector  text) {
  const string vowels("aiueo");
  vector  ret;

  for (size_t i(0); i"");
      for (size_t j(0); j
              

Ruby

def encrypt(text)
  vowels = 'aiueo'.freeze
  text.collect do |src|
    src.length == src.count(vowels) ? src : src.delete(vowels)
  end
end

問題文を読んで、解法を考え、コードに移すというときに、C++でふつうに書き下していったのが上のコードです。 それに対して、同じことを実現しているのがRubyの4行コード。

まぁ、C++による解答があまりにも泥臭すぎるし、いくぶん恣意的なきらいはありますが、 それでもRubyの簡潔さは際立つところです。 ライブラリの勝利、とも言えるかな。 それboostで、とかいうのもありだとは思いますけど。

C++脳で考えるのと、Ruby脳で考えるのとでは、ずいぶんと違いがあるように思います。

Tags: ,

Leopard

June 12th, 2007  |  Published in Uncategorized

WWDC 2007 でいろんな発表があったみたいなので、Appleのサイトをのぞいてみました。

Finderの進化とかはふーん、というところで、気になるのはTechnologyとかDeveloper Toolsですよね。

Terminal 2

  • InputManagerとCoreText をつかった多言語入出力
  • LayoutEngineを書き直したので、高速な表示になるよ
  • 新しいUIで、設定とかラクになるよ

ここにまず期待。いまのTerminal.appは遅いんですよね。

Ruby

  • RubyCocoa !!
  • RubyでもDTraceつかえます

あたりでしょうか。ZFSは?

XCode

lightweight API overview ってのが気になります。 いつもAPIリファレンスを読みながら開発してるわけですが、いまのヘルプ方式はなかなかやりにくかったりするんですよね。ディスプレイが1つだけのときには。

Xray

vTuneみたいなパフォーマンス解析ができそう。


ところで、QuartzComposerのパッチを作成するテンプレートは、まだXCodeに入らないのかな。

Tags:

Ruby会議 2007 2日目

June 10th, 2007  |  Published in 日常

今日もあやしい同時通訳などで参加してきました。来年は組込みビジュアル系になって参画したいと思います。

  • 今年のRuby会議は愛Mac+マスコット
  • よしおかさんのOProfile話はもう少し聞きたかった。EnterpriseRubyの次はEmbeddedRubyかなんかで。
  • secondlifeさんのvimプレゼンモードいい
  • RubyCocoaのプレゼンすごい。思わずMLに入ってしまった

QuartzComposerで、IRCのログをリアルタイムで派手に表示するよ計画の続き

前回のあらすじ:

  • なんとなく、IRCログをQuartzComposerでリアルタイムにビジュアライズしたらおもしろいかもな、とか思った
  • rbotというRuby版IRCボットがあったので、メッセージをファイルに吐くようなプラグインを書いた
  • QuartzComposerでファイルから文字列を読み込むパッチがあった ので、さっそくつかってみた。
  • でも、リアルタイムに書き込まれるファイルの内容が、QuartzComposer側に更新されずにめげる
  • QuartzComposerのパッチを自分で書くかと思い、いろいろ調べて書き中 ← ここまで

その後:

  • QuartzComposerで、数値をfpsごとにincrementするだけの俺Genetatorパッチを書いてプチ満足
  • テキストのリアルタイム入力は、ソケットから受け取るようにしたいと思い、Cocoaでのソケットプログラミング方法を調べる
  • やっぱしめんどうなので、Rubyで書きたいと思う
  • QuartzComposerのパッチは、OSX的にはPluginでありBundleなので、BundleからRubyのコードを書く方法を調べる @帰りの中央線
  • よくわからないので、RubyCocoaのMLに登録しておいた ← いまここ

ということで、Reject会議にはぜんぜん間に合わなかったわけですが、モチベーションの続く限りRubyCocoaで戯れてみます。


勢いと愛のある場に参加させてもらったことで、あたまがなにかと触発されていい状態です。すばらしかった。

Tags: ,

Ruby会議 2007 1日目

June 9th, 2007  |  Published in 日常

参加してきました。

LightningTalkの、

  • ファミコンはVMだからいろんなプラットフォームで動く
  • dRubyによるマルチコアRubyでほとんど線形のスケーラビリティ

あたりにやられました。おもしろかった。

IRCでたまに訳したりしょうもないコメントを入れていたのは僕です。すみません。 明日も懲りずに茶々入れしようと思います。

懇親会は家庭の事情で参加できなかったのですが、行きたかったなぁ。

明日のReject会議に、rtmilk.rbとcartesianTask (旧taskMap) で話しようかと思ったんだけど、ロビーのポストイットに書くのを忘れて帰ってきてしまったという。しまった。

あと、会場で俺電源タップを快く使わせて頂いた、名も知らぬ方、たいへんありがとうございました。 Rubyはみんなの愛でできているのですね。 なんか貢献しようということで、るりまに参加することにしました。仕事しよう。

Tags: ,