‘Flash’ タグのついている投稿

chumby用ふぁぼったーwidget

2008 年 5 月 19 日 月曜日

ふぁぼったーのwidgetを作った。

ダウンロード → Favotter Widget (Flash AS2 / CS3)

favotter on chumbyDSCF2209

■設定方法
今回もUSBメモリから起動するんだけど、特に設定項目も無いのでzipの中身をそのままUSBメモリに入れてchumbyに刺して、しばらくしてからchannel -> reloadで良い。

人気favと注目favをそれぞれ表示するために、swfが2つ入っている。
前のTwitter widgetと共存させるには、同梱のprofile.xmlを見れば2つのwidgetを読み込ませる設定の参考になると思う。widget_instanceのidが重複しないように注意。

■ダイナミックテキストにHTML表示とか
実装は、前のTwitter widgetの時とほぼ同じというか見た目を白黒にしただけなんだけど
ふぁぼったーのFeedにCDATAでHTMLが埋め込んであるので、せっかくなのでそれを利用する事にした所だけが違う。

FlashのダイナミックテキストのhtmlTextプロパティにHTMLを突っ込むと、そのままwebブラウザのようにレンダリングしてくれる。何のエンジンを使っているかは不明だけど、とりあえずそのまま突っ込んでみたらfont colorやimgは読み込めていた。
で、そのままだとchumbyの画面には文字が小さすぎるのでfont size=”22″ぐらいまで大きくしたいんだけどAS2に正規表現などがなかったのでsplitとstrReplaceでがんばった。

あとCDATA内のHTMLは>が>のように実体参照になっているが、それを変換するメソッドがAS2に無かった。
無かったのだが、ダイナミックテキストのhtmlTextプロパティに代入してからtextプロパティから読み直すとなぜか変換されている事を発見、解決した。

chumbyで日本語TwitterにIPAフォントを埋め込んだ

2008 年 5 月 19 日 月曜日

Flashにフォントそのものを埋め込むのはライセンス的にどうなのかよくわからなかったのでchumbyで日本語twitterの時はswfの公開はしていなかったのだけど、IPAフォントならライセンス的にokだとわかったので埋め込んで再公開しました。

これでFlash CS3を持っていない人も、chumbyでTwitterを日本語で読めますね!!
ダウンロード → Chumby Twitter Widget (AS2 / Flash CS)

DSCF2213

設定の仕方は変更無し。
s.h.log » chumbyで日本語Twitterを読めるwidgetを作った

profile.xmlのusernumの数値を、自分のtimeline用に書き換える。これはtwitter上でのID。
twitter.com/homeで、自分のRSSフィードを見ると 123456.atom みたいな感じになっているので、その数値に書き換える。
intervalの秒数だけ、次の記事を読むまでwaitがかかる。デフォルトは8秒。

そしてUSBメモリから起動してください
ちなみにこないだchumby用に、PQI製の超小さいUSBメモリを買ったんだけど相性なのか、認識しなかった。MacBookでは普通に使えているので、財布にも入るサイズだし重宝してるけどどうしようかなあ…USBメモリが正直邪魔だ。

chumbyでLDR未読数を表示するwidget

2008 年 5 月 18 日 日曜日

LDR unread countがchumby.comのwidgetとして公開された。
Livedoor Readerのアカウント名を設定すると、未読数が表示されて焦らされるが、1万超えたあたりからどうでもよくなった。
アップロードしたwidgetは基本privateで、publicにした後審査が入ってwidgetsの検索画面から他のユーザに使ってもらえるようになる。今回はだいたい4時間ぐらいで審査が通ったみたい。

DSCF2199

ダウンロード → SourceCode(Flash AS2 / CS3)

(うおお、前の記事書いてから1週間たってる・・・)
前のTwitter widgetより前に作って投稿してあったものなんだけど、これは数字が出るだけなので、Flash的にも手抜き。

Flashは手抜きだけど、chumby widget固有のノウハウである
1.クロスドメイン許可されていない外部のサーバーのデータを読みに行く
2.chumby.comにデータを保存できる設定画面を作る
3.chumby.comに保存したデータをwidgetから読み込む

という事をやってみたので、まとめておこう。

■1.クロスドメイン許可されていない外部のサーバーのデータを読みに行く
Livedoor Readerの未読数を取得するAPIを使う。

パラメータにuser=shokaishokaiなどすると未読数が出てくる。
特にXMLとかではないので、AS2の場合LoadVarsを使えば良い。

ローカルドメインで動かす分にはこれで構わないが、セキュリティの事もあってサーバーに置いてあるFlashは別のサーバーにあるデータを読みに行く事ができないようになっている。そのため、rpc.reader.livedoor.comを読みに行けない。前のtwitterで使ったXMLクラスなんかは例外。

そのため、大学院棟のサーバーにchumby.comからのアクセスを許可するcrossdomain.xmlを置いて、RubyでproxyするCGIを置いてそれをchumby上のFlashから読むようにした。

crossdomain.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*.chumby.com"/>
</cross-domain-policy>

*.chumby.com からのアクセスのみ許可すればよい

このサーバーにRuby適当に作ったproxyを置いて、Flashから読ませる。

これで外部ドメインのデータを読めるようになった。

■2.chumby.comにデータを保存できる設定画面を作る
widgetの管理画面で、設定値を入力するダイアログを出すようにした。
データはchumby.comに保存され、自作widgetがchumby上でロードされたしばらく後に設定値が_root直下の変数として現れるという仕様らしい。
LDR unread count customize

この辺のドキュメントを参考にした。

サイズは320×240 pixelで、Sample Parameter Example(AS2)に同梱されてた com.Chumby.WidgetParams.as を使うのが楽らしいので作ってみた
configure.fla
まあ今回はユーザ名を保存するだけなのでサンプルを削っただけなんだけど、送信が終わったらgetURLでjavascriptを呼んで自分自身を閉じたりとかしていて面白い。

■3.chumby.comに保存したデータをwidgetから読み込む
chumby.comに保存されたデータは、widgetが画面に読み込まれてからしばらくたってから、_rootに現れる。
どうやら毎回読み込みに行っているらしい。

値が_rootに現れるまで待たないと、undefinedになってしまうので待つ。
this.onEnterFrame = function(){
    if(username == null) return; // 待ちます
    ldr_loadUnread(username);
    delete this.onEnterFrame
}

こんな感じで、chumby+サーバーサイドができました。

chumbyで日本語Twitterを読めるwidgetを作った

2008 年 5 月 9 日 金曜日

chumbyは日本語フォントが入っていないので日本語が表示できないが、Flashの中のダイナミックテキストそのものにフォントを埋め込めば日本語が出せる。

ちょうどIMのAPIが動いてなかったので、twitterのfriends timelineを表示するchumby widgetを作ってみた。ただしフォントデータそのものを埋め込んで配布するのはライセンス的にまずそうなので、flaファイルのみの公開になります。自分の環境でコンパイルしてくださいIPAフォントを埋め込んで、swfも公開しました

ダウンロード → SourceCode (Flash CS3 / AS2)

(AS2が久しぶりすぎてやばかった)

twitter on chumby

ただしこの方法だとファイルサイズが100kb(chumby widgetの容量制限)を超えるので、USBから起動するしかない。
s.h.log » chumbyで自作widgetをUSBメモリから起動する

japanese twitter on chumby

profile.xml
profile.xmlのusernumの数値を、自分のtimeline用に書き換える。これはtwitter上でのID。
twitter.com/homeで、自分のRSSフィードを見ると 123456.atom みたいな感じになっているので、その数値に書き換える。

intervalの秒数だけ、次の記事を読むまでwaitがかかる。デフォルトは8秒。

■Twitter APIをAS2で読む
XPath4AS2でxml版のフィードを読んだ。
FlashでBasic認証を通る方法がわからなかったので、protectをかけているユーザのtimelineは読めないかも知れない。
前に作ったXPath4AS2テスターが役に立った。

■favorite
どうしてもふぁぼりたかったんだけど、FlashからBasic認証を通る事ができなくて無理だった。
http://user:pass@twitter.comの方法も、Base64エンコードしてLoadVarsにaddRequestHeaderするのも、getURLも駄目。
ブラウザの中で動いているわけではないのでログイン済みのcookieを共有するも出来ない。
cgiでproxyすればいいんだけど。

■thumbnail
USBから起動した場合、サムネイルが読めない。
同じ画像ファイルでwebにアップした場合は読めたので、profile.xmlの記述ミスかも。

■setIntervalがおかしい
PC上で実行している時は問題ないんだけど、ChumbyのFlashLite3上でsetIntervalを使ってタイマ処理を行っている時、4秒以上待てない。10秒などを指定すると、4秒ぐらいでタイマ処理が回ってしまう。調べても特にFlashLiteは特別という記述は見あたらなかったので、なんだかわからないけど、さすがに4秒はchumbyから目を離せなくなってしまうので今回は1秒を数えるsetIntervalを作ってさらにカウントアップする変数を用意して、時間を数えるようにした。

■プログラム
全部twitter.flaの1フレーム目に書いた

import com.xfactorstudio.xml.xpath.*;

if(!interval) interval = 10;
if(!usernum) usernum = 3631571;

var twitterXml:XML = new XML();
twitterXml.ignoreWhite = false;

var xmlUrl = "http://twitter.com/statuses/friends_timeline/"+usernum+".xml";

twitterXml.onLoad = twitterXml_onLoad;
twitterXml.load(xmlUrl);

var int_id;
function twitterXml_onLoad(success:Boolean) {
    if(success){
        trace("XML load success!!");
        loading._visible = false;
        preLoadIcon(twitterXml);
        int_id = setInterval(count_sec, 1000);
        loadNextStat();
    }
    else{
        trace("XML load error!!");
    }
}

function preLoadIcon(stats:XML){
    //trace(stats);
    var icons:Array = XPath.selectNodes(stats, "statuses/status/user/profile_image_url/text()");
    trace(icons.length);
    for(var i:Number = 0; i < icons.length; i++){
        var loader = new mx.controls.Loader();
        loader.contentPath = icons[i];
        //loader.load();
        //trace(loader.autoLoad);
        trace(loader.contentPath);
    }
}

var stat_id = 0;
var fav = "false";
function loadStats(stats:XML, num:Number){
    var len = XPath.selectNodes(stats, "statuses/status").length;
    if(num > len){
        clearInterval(int_id);
        loading._visible = true;
        twitterXml.load(xmlUrl);
        n = 1;
        return;
    }
    var update = XPath.selectNodes(stats, "statuses/status["+num+"]/text/text()");
    fav = XPath.selectNodes(stats, "statuses/status["+num+"]/favorited/text()");
    var iconUrl = XPath.selectNodes(stats, "statuses/status["+num+"]/user/profile_image_url/text()");
    var userName = XPath.selectNodes(stats, "statuses/status["+num+"]/user/name/text()");
    var screenName = XPath.selectNodes(stats, "statuses/status["+num+"]/user/screen_name/text()");
    var date = XPath.selectNodes(stats, "statuses/status["+num+"]/created_at/text()");
    stat_id = XPath.selectNodes(stats, "statuses/status["+num+"]/id/text()");
    iconLoader.contentPath = iconUrl;
    //favStar.gotoAndStop(fav); // labelで移動
    labelUpdate.text = update;
    labelUserName.text = userName + "(" + screenName + ")";
    labelDate.text = date;
    trace(fav);
}

var sec = 0;
function count_sec(){
    sec++;
    if(sec >= interval){
        sec = 0;
        loadNextStat();
    }
}

var n = 1;
function loadNextStat(){
    trace("loadNextStat");
    loadStats(twitterXml, n++);
}

chumbyで自作widgetをUSBメモリから起動する

2008 年 5 月 9 日 金曜日

MakerFaireで買ってきたchumbyにFlashLite3が入っていて、ActionScript2.0が動く。
ちょうど良い事に俺がFlasherなので、自分でwigetを作って動かしてみた。

yoggyさんに教えてもらったScott Janousekさんのスライドが凄くまとまっている。chumby独自の変数(内蔵の加速度センサー、タッチパネル等)の取得の仕方なども書いてある
Developing Flash Lite Widgets For The Chumby Platform » SlideShare

あと、Scottさんの作ったFlash CS3用のデバイスプロファイルを入れると、ケータイ用Flashを試すエミュレータであるAdobe Device Centralでchumbyが動く様になる。
Scott Janousek » Blog Archive » Chumby Device Profile for Adobe Device Central CS3

■USBメモリで動かす
chumby.comのsubmit a widgetからprivate設定でuploadして試す方法もあるが、ローカルで開発する方法としてUSBメモリからブートする方法もある。今回はUSBメモリが余っていたのでそれでやってみた。

Chumby tricks - ChumbyWiki - Mixing local widgets into a channel
を参考に、USBメモリの中にprofile.xmlというファイルを置くと、USBメモリ内のswfを読み込まれる。

chumby usb boot

USBメモリに入れたファイル(Flash AS2 / CS3)

FlashはFlashLite3とのことだったんだけど、ChumbyWikiのwidgetサンプルを見たら、みんなパブリッシュ設定でFlashPlayer6 + AS1.0の組み合わせを指定していた。なんとなくAS1は嫌だったので俺はFlashPlayer6+AS2.0で書き出してみた。

そして、USBメモリを刺して動かしてみた結果がこれだよ!
channelのreloadをすれば読み込まれた。

あと、profile.xmlでwidget_parameterタグで値を渡す事ができる。
上のビデオではやってなかったけど、例えば適当なダイナミックテキストを置いて
labelParam1.text = param1;
などとすれば、下のprofile.xmlだったら zanmai というテキストが読み込める。この辺はFlashをActiveX Objectとして埋め込む時に使うSetVariableとかと同じ感じ。

profile.xml<profile>
<widget_instances>
<widget_instance id="1">
<widget>
<name>Test Widget</name>
<description>this is test widget hellohello</description>
<version>1.0</version>
<mode time="30" mode="timeout"/>
<access sendable="false" deleteable="false" access="private" virtualable="false"/>
<user username="myusername"/>
<thumbnail href="file:////mnt/usb/thumb.jpg" contenttype="image/jpeg"/>
<movie href="file:////mnt/usb/test.swf" contenttype="application/x-shockwave-flash"/>
</widget>
<access access="private"/>
<mode time="30" mode="timeout"/>
<widget_parameters>
<widget_parameter>
<name>param1</name>
<value>zanmai</value>
</widget_parameter>
<widget_parameter>
<name>param2</name>
<value>kazusuke</value>
</widget_parameter>
</widget_parameters>
</widget_instance>
</widget_instances>
</profile>

RailsにFlashからpostしたり取り出したりする

2008 年 3 月 29 日 土曜日

Railsのscaffoldでさくっと作ったインタフェースって、HTTP-POSTからSQLに保存したり取り出したりもできて色々プロトタイプを作るのに便利なのでまとめておく。
ためたデータの管理もできるし。

■Rails側の準備
まずrailsを入れる。
Macの人は既に入っているはず。Windowsなら、ActiveScriptRubyを入れてパス通すと、gemコマンドが入るのでgem install railsすればrailsコマンドが使えるようになる。DBはSQLiteのdll版をc:\windows\system32に入れればできる様になるはず。

railsでtestbbsというプロジェクトを作って、そこにscaffoldでentry(投稿)というmodelを作る。entryには、name(投稿者)とmessage(本文)が入る。

rails testbbs
cd testbbs
ruby script/generate scaffold entry name:string message:text
rake db:migrate

(単数形に注意)

webサーバーを立ち上げる

ruby script/server

http://localhost:3000/entriesから見れるようになっている。はず。(複数形に注意)

こんなページができている。ここからentryを増やしたり消したりもできる。
post from flash to rails

ここまでで、http://localhost:3000/entries/newから投稿できるのと、http://localhost:3000/entries.xmlから一覧を取得できるようになった。

Source Code (Ruby on Rails 2.0.2)

■Flashから投稿する
HTTP POSTで行う。

今回作ったもの(動きます)

Source Code (AS3 / Flash CS3 + Flashdevelop)
今回もFlashDevelop上でAS3書いて、FlashCS3オーサリング/コンパイルした。

こいつでPOSTすると、http://localhost:3000/entriesに結果が出るようになる。
post from flash to rails

どうやってるかというとまず
http://localhost:3000/entries/newを見ると

<form action="/entries" class="new_entry" id="new_entry" method="post"><div style="margin:0;padding:0"><input name="authenticity_token" type="hidden" value="a360f92a6a91d6c588d319f1ab475e9abbb22d9d" /></div>
  <p>
    <b>Name</b><br />
    <input id="entry_name" name="entry[name]" size="30" type="text" />
  </p>

  <p>
    <b>Message</b><br />

    <textarea cols="40" id="entry_message" name="entry[message]" rows="20"></textarea>
  </p>

  <p>
    <input id="entry_submit" name="commit" type="submit" value="Create" />
  </p>
</form>

という風にPOSTしているので、entry[name]とentry[message]をパラメータで渡せばいいとわかる。

(more…)

AS3 - あらためてラベリング処理

2008 年 1 月 31 日 木曜日

火曜に、imglのうっちーとあらためてラベリング処理ってどうやんのよという話をしていて、あらためてAS3で書き直した。
ただし、ラベルの衝突処理はまだやっていない。

ラベリング処理について→s.h.log: Proce55ing - 2値化画像を4近傍ラベリング処理してパーツ抜き出し

今まで、ラベルそのものを2次元のint配列で管理してたけど、今回はBitmapDataオブジェクトとして保存する様にしてみた。BitmapDataならx,y座標で要素にアクセスできるし、ピクセルはuint型なので都合がいい。

■できたもの
download => fla, as, swf (FlashDevelop3.0.0 Beta5 + FlashCS3)

年末年始作ったカメラから画像処理のサンプルを元に改造した。
webcamから撮影してBitmapDataにして、1ピクセルずつ走査して真っ白(0×00FFFFFF)のピクセルを検出。
さらにラベリング処理をして、「ピクセルのかたまり」毎に番号をつける。

(0×00FFFFFFは蛍光灯を撮影すると良いです)
labelinglabelinglabeling

今回はノイズを飛ばしたりしていないので、右の本棚の小さな白にも反応してしまって28個とか検出される
labeling

ラベルの衝突時の処理もしていないので、左上が空いた弧の様な形の時に割れてしまう
labeling
この辺はまたの機会に。

(more…)

Adobe AIRの開発環境を整えて、カメラで撮影してJPEGで保存するソフトを作った

2008 年 1 月 12 日 土曜日

AIRを使うと、flash.filesystemやflash.desktopなどのデスクトップアプリ用のクラス群が使えるようになるので、やってみた。

Air beta3で開発する環境を作って、前からやってみたかった
・半透明で変な形をしたウィンドウ
・USBカメラで撮影してJPEGにエンコードしてファイル出力
を作った。

撮影した写真はプログラムと同じフォルダに保存される。

できたもの => CameraSaveJpeg.air (Adobe AIR beta3)Archive

Air app
なお、半透明ウィンドウにするとスクリーンショットに写らなくなるので、デジカメで撮った。

■開発環境を整える
Adobe Labs - Downloads: Adobe AIR
AIRの実行環境

AIR:Flash CS3 Professional Update - Adobe Labs
Japaneseを選んでインストール

Jinten Blog » Blog Archive » FlashDevelop Beta5
FlashDevelp3.0 Beta5で、AIRとmx系クラスのコード補完を有効にする方法
[Project]→[Properties]→[Compiler Options]→[Intrinsic Libraries]に

Library\AS3\frameworks\Flex3
Library\AS3\frameworks\AIR

を追加する

で、普通にFlashDevelopでFlash IDE用のプロジェクトを作成。
さらにFlashCS3からもAIRプロジェクトを作成。FlashDevelopと同じフォルダを指定する。

Flex3.0のコンパイラはとりあえず必要ない。

■証明書を作る
AIR Beta2でWEBCAMの画像をjpgに保存するサンプル - hatayanlog
が詳しい。AIR Beta2から証明書を作らないとならなくなった。

(more…)

AS3 - BitmapMirror.asでYouTubeを鏡写しにする

2007 年 9 月 30 日 日曜日

右下の「Load」を押して再生。

Source Code (Flash CS3 / AS3)

土善開発合宿(ゆーすけべー日記: 奥出研’07秋合宿@土善旅館に部外者(OB)の開発合宿も兼ねて参入してきた)で作ってたBitmapMirror.asを公開しておきます。

宴会直前に到着したのであんまり時間がなかったけど、今回やったことは3つ
1.YouTubeのビデオ(flv)をGoogleVideo経由で取得して
2.AS3のBitmapDataとして扱って
3.鏡面反射させる

ビデオはこれを読み込んでいます。ひゃあ゛ああああうまい゛いいいいい

■1.YouTubeのビデオをGoogleVideo経由で取得する
数ヶ月前にGoogleに買収されて以来、
http://www.youtube.com/watch?v=YRY0M5cgDG8
のビデオは
http://cache.googlevideo.com/get_video?video_id=YRY0M5cgDG8
から取れる様になりました。
以前はWebService::YouTube使って
スクレイピングしなければならなかったけど、素直になった。

(more…)

Flash CS3 - 背景差分法

2007 年 9 月 4 日 火曜日

昨日Flash CS3を買ったので、さっそくAS3でやってみた。

自分で1からBitmapDataクラスを使うのは初めてだったけどprocessingやってたお陰ですぐわかった。

一旦カメラの前からどいて、Save Backgroundボタンを押してみてください

うまくいくとこうなってるはず
BackgroundSubtraction

SourceCode (Flash CS3 / AS3)

(more…)