1

年末年始作ったもの

年末年始、田舎に帰省して温泉入ったりおいしい物食べたりして、そしてなによりネットがなかったので色々作ってしまった。(含む改良)

とりあえずあとで詳しく書くリスト

Flash AS3でカメラ入力/画像処理最小サンプル

むずかしい事はなく、マウスを置いた位置のピクセルを取るだけ。研究室にAS3を広めたいので。

LineTrace.as for AS3

Lineを引いて、MovieClipをTraceさせるクラスのAS3移植版

XMLSocket.NET



せっかく.NET使ってるので、C#2.0+AS3.0 – XMLSocketCommandをDLL化してみた。C++とVBからも使えた。

PutPinHere

GoogleEarth上に表示したKMLを動的に書き換えるテスト。

普通にGoogle Earth COM APIのLoadKMLData()を送ると、古いKMLが残ってしまうので、一旦ファイルに書き出して定期的にLoadKMLFile()を使う方法を採用。

GpsTracker

これ。

GPS CS1Kで保存したGPSデータを全部KMLで書き出して、Google Earth上にプロットする。

Simplate

シンプルなTemplateエンジン。{%line_name%}で変数、{%[lines]%} ~ {%[/lines]%}でイテレータ。

上の2つでKMLを書き出すために使った

ThreadManager

スレッドがたくさんになると、殺すのが面倒になるのでまとめて管理できるマネージャを作った。1000個程度はいけた。

0

C#2.0+AS3.0 – XMLSocketCommand

(2008/12/2追記)XMLSocketServer最新版はbitbucketにあります。.NET用のXMLSocketClientも実装しました



前に作ったAS2.0用のこれ → s.h.log: C#に埋め込んだFlashと通信するライブラリ

のかわりに、最近AS3をメインに使っているので、C#2.0とFlash(AS3.0)間でメッセージをやりとりするための「XMLSocketCommand」というものを作った。

両者からオブジェクトをXMLにして送って、もう片方で受け取ったらまたオブジェクトに戻す事が簡単にできるC#とActionScript用のクラス群と、そのサンプルプロジェクトを用意したので公開しておきます。

■ソースコード&サンプルプロジェクト

AS3.0 sample+source code (FlashCS3), archive

C#2.0 sample+source code (VisualStudio2005), archive

■サンプルプロジェクトの中身

こんなもの。詳しくは中の、それぞれForm1.csとCommandTest.asから呼び出しているのでコード読

XMLSocket Command

コマンド受信してからの処理が結構綺麗に書けるようになってる

publicfunctioncmd_onRecv(e:CommandEvent){

trace(“Receive:”+e.command.toString());//受信したコマンド

switch(e.command.name){

case”zanmai”:

trace(“今年はざんまいに”+e.command.value+”回行く!”);

break;

case”kazusuke”:

trace(“かず助にも”+e.command.value+”回行きたい”);

break;

default:

trace(“知らないコマンドが来た”);

break;

}

}

C#の方は、前に作ったC#用のXMLSocketServerクラスをラップした、Org.Shokai.Net.XMLSocket.Commanderというクラスが全部やってくれる。

ASの方は、XMLSocketを継承したCommanderクラスが全部やってくれる。

AS,C#両方ともそれぞれ持っているCommandというクラスにparseXML()、toXML()、toXMLString()というメソッドがあって、そこでオブジェクト/XMLの変換方法を定義している。

今はnameとvalueの2つの値だけをやりとりする様になっているだけだが、もっと複雑なデータをやりとりしたければ自分でCommandを継承してparseXML()、toXML()、toXMLString()をoverrideすればいい。

Read more

0

AS3 – EventDispatcherクラスの使い方

ActionScript3.0から、「ボタンを押した」とか「XMLSocketを受信した」の様なイベントを登録・実行するしくみとしてEventDispatcherというのが使われるようになった。addEventListener(MouseEvent.CLICK, onClick); しておくと、文字通りイベントがDispatch(発行)されるアレの事。

で、今C#用のXMLSocketServerクラスの上で動くFlashとC#を接続するコマンドメッセージ系を実装してて、それのFlash側のラッパーのコマンド受信イベント等をEventDispatcherで実装してaddEventListenerできる様にしたかったので、調べてサンプルを作ってみた。

■EventDispatcherサンプルのソースコード

EventDispatcherTest (AS3 / FlashCS3)

■参考サイト

上から順に読んだらわかりやすいと思う。

akihiro kamijo: EventDispatcher クラス

akihiro kamijo: カスタムイベントのディスパッチ

feb19.jp blog – AS3でEventDispatcherを使う

■EventDispatcherサンプルの動作

今回はtrace()に出力するだけ。毎フレーム、 framecount:フレーム番号 をtrace出力する。

FrameEvent.ON_COUNTFRAME イベントに関数を登録しておくと、10フレーム毎に登録しておいた関数が呼び出される。

イベントを受け取った関数は”receive dispatched Event!: フレーム番号” とtrace出力する。

サンプルを動かすとこうなる

framecount:1

framecount:2

framecount:3

framecount:4

framecount:5

framecount:6

framecount:7

framecount:8

framecount:9

framecount:10

receive dispatched Event!:10

framecount:11

framecount:12

framecount:13

framecount:14

framecount:15

framecount:16

framecount:17

framecount:18

framecount:19

framecount:20

receive dispatched Event!:20

framecount:21

framecount:22

(ずっと続く)

Read more

0

C# – XMLSocketServer Class

Org.Shokai.Net.XMLSocket

を作ったよ!あとついでにAS3でのXMLSocketクライアントのサンプルものせておく。

■これは何?

FlashのXMLSocketクライアントを受けるためのC#用のサーバークラス。

Threadの事を考えないで、簡単に使えるようにしてある。同時に複数クライアント受け入れ可能。

XML Parserは内蔵していないので、受け取ったデータは

s.h.log: C#でRSSリーダを作ってみるテスト

を参考にしてParseして欲しい

■XMLSocketって何?

FlashはAS3から普通のSocketが使えるようになって、バイナリデータを送ったりするのが簡単になったんだけど

昔からXMLSocketというのがあってよく使われていた。

まあ結局 ‘\0’ を末尾に付けたただの、文字列でXMLを送るSocketなんだけど。

■サンプル

Flash側 (Flash CS3 / AS3.0)

C#側 (VisutalStudio2005 / C#2.0)

XMLSocket

あと、最近FlashDevelopをAS3エディタとして使い始めたんだけど凄く良い。

■使い方

基本的にKY(コード嫁)だけど、やっぱ自分用にメモ。

この辺を読み込んでおく

usingOrg.Shokai.Net.XMLSocket;

usingSystem.Net;

usingSystem.Net.Sockets;

起動前の準備。同時接続数などを設定する。

xmlSocketServer=newXMLSocketServer();

xmlSocketServer.MaxClients=5;

Read more

0

モノ作る時に気をつけている事とか

10月半ばごろに、適当に飲みながら?話した事を郡山さんがテープ起こししてくれたので

コピペしてみる。

ただし、ほんのちょっとだけ(暴言とか)編集した。

あと、俺は普段語尾は「である」調ではないんだけど、郡山さんが文字起こしするとそうなる。

—————-

情報世界と物理世界を同じもののように、タコの足のようにくっつけて、ひとつのものとして作る必要がある。そのための考え方であり技術の選び方を考えなければならない。「ウェブのサービス」などのように分けて考えるものではなくて、全てが一つのものである。「ウェブサービスを作りたい」と言うのではなくて、何か作りたいものの中の部品としてウェブサービスがある。

プログラムを書いている時に試行錯誤している。プログラミングは実装ではなくて、プログラムを書くことが設計である。書いてすぐ試して、というスケッチしているような中でデザインをしていく。

Pileusをつくっている時に、いきなり「こういうもの」として頭で描こうとしても、詳細に踏み込めない。作った後の今だったら、こういう傘があってこっちに振ったらこうなって歩くのにあわせて地図が動いて読んで、表示が変わって、撮影したものがアップロードされた時に自動的にタグがついて、などは分かる。

それらは、つくってみるまで具体化してなかった。「flickrの写真が出る」とかまでは言っていて、それがどう出るかとかどういう時に出ないのかとか、そういう条件を叩き出さないといけなかった。しかし、作らないとそれができない。

なぜ作らないとできないか。それは、人間の言葉は表現力に限界があるからである。普通の人間の言葉は、同時に並列にものごとが起こっていることとか、凄く複雑な論理構造(それとこれ、かつ、そうでない、など)を表現することができない。

この2つができないから、最初からPileusの完全な設計図を書くことができない。そのため、簡単にユースケースを書いた段階からどんどん作る必要がある。作ることが設計図を書くことになる。

作らないとインタラクションの詳細が分からない。むしろ、例えば影電話の場合、作ってすぐコンパイルして実機で影の行灯の表示やぼかしをかけたほうがいいなとか、ゆらぎを入れた方がいいなとか、やってみたら無い方がいいなとか、そういうことが分かる。そういったことは絶対に試しながらじゃないと分からない。設計する時には、人間の言語では表現することができない。設計はコンピュータの言語で行う。

Read more