‘Web’ カテゴリーのアーカイブ

ActionScript 3.0 のイベント伝播を学ぶ

2008 年 4 月 14 日 月曜日

AS3 のイベント処理。AS2 時代の EventDispatcher 経験で、なあなあに作って来たのですが、諸般の事情で bubble とか useCapture を知る事に決めました。

何はともあれ Adobe の公式資料です。しっかり書いてあります。

まず Flash CS3 ドキュメンテーションですっきり紹介されていて、イベント伝播の往路と復路が関係してくる事が分かります。
  1. キャプチャ段階: Stage からイベントターゲットまでのオブジェクトに於けるイベント伝播
  2. ターゲット段階:イベントターゲットに於けるイベント伝播
  3. バブリング段階:イベントターゲットから Stage までのオブジェクトに於けるイベント伝播
イベントフローは三段階に見立てられる、と言う定義が分かりました。



そしてイベントを実際に扱うクラス・メソッドの解説も読みます。


EventDispatcher



addEventListener(type:String, listener:Function,

useCapture:Boolean = false):void




useCapture:Boolean (default = false) ― リスナーが、キャプチャ段階、またはターゲットおよびバブリング段階で動作するかどうかを判断します。useCapture を true に設定すると、リスナーはキャプチャ段階のみでイベントを処理し、ターゲット段階またはバブリング段階では処理しません。useCapture を false に設定すると、リスナーはターゲット段階またはバブリング段階のみでイベントを処理します。3 つの段階すべてでイベントを受け取るには、addEventListener を 2 回呼び出します。useCapture を true に設定して 1 度呼び出し、useCapture を false に設定してもう一度呼び出します。



Event



Event(type:String, bubbles:Boolean = false)



bubbles:Boolean (default = false) ― Event オブジェクトがイベントフローのバブリング段階で処理されるかどうかを判断します。デフォルト値は false です。


それぞれもっと引数が付くのですが、今回の話では割愛です。



addEventListener の useCapture についてまとめます。
  1. デフォルト( false )ではターゲット/バブリング段階のみ処理が行われる。
  2. true ならキャプチャ段階のみ処理が行われる。
  3. 故に、総ての段階を対象とするなら true / false で addEventListener を二回呼ぶ。


それでは次にEvent の bubbles 。

デフォルトの Event オブジェクトはバブリング段階で処理されない事が分かります。



ここは更に Event の定数らを見る事にします。すると、イベントによっては bubbles = true のイベントオブジェクトが在る事が分かります。

例えば Event.REMOVED は true です。

(ちなみに Event.REMOVED_FROM_STAGE は false )



ここまで得られた情報でイベント伝播の概要は掴めたので、何か書いてみます。



あるオブジェクトで Event.REMOVED_FROM_STAGE と Event.REMOVED が発生する毎に trace するコードです。

addEventListener の解説に在った様に true / false で二回呼んで総ての段階を対象とします。


package {

import flash.display.Sprite;
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.text.TextField;

public class ExeEvent extends MovieClip{
var _grid:Sprite;

public function ExeEvent(){

_grid = new Sprite();
_grid.graphics.lineStyle( 4, 0x333333 );
_grid.graphics.drawRect( 0, 0, 200, 200 );
addChild( _grid );

var addTF:TextField = new TextField();
addTF.text = "ADD";
var removeTF:TextField = new TextField();
removeTF.text = "REMOVE";
removeTF.x = addTF.width;
addChild( addTF );
addChild( removeTF );

addTF.addEventListener( MouseEvent.CLICK, _addButton );
removeTF.addEventListener( MouseEvent.CLICK, _removeButton );

stage.addEventListener( Event.REMOVED, _onRemoved, true );
stage.addEventListener( Event.REMOVED, _onRemoved, false );
_grid.addEventListener( Event.REMOVED, _onRemoved, true );
_grid.addEventListener( Event.REMOVED, _onRemoved, false );

stage.addEventListener( Event.REMOVED_FROM_STAGE, _onRemovedFromStage, true );
stage.addEventListener( Event.REMOVED_FROM_STAGE, _onRemovedFromStage, false );
_grid.addEventListener( Event.REMOVED_FROM_STAGE, _onRemovedFromStage, true );
_grid.addEventListener( Event.REMOVED_FROM_STAGE, _onRemovedFromStage, false );

}

private function _onRemoved( event:Event ):void {
trace( “# _onRemoved ” + event.currentTarget.name);
trace( event.toString() );

}

private function _onRemovedFromStage( event:Event ):void {
trace( “$ _onRemovedFromStage ” + event.currentTarget.name);
trace( event.toString() );

}

private function _addButton( event:MouseEvent ):void {
var button:Sprite = new Sprite();
button.graphics.beginFill( 0xcccccc );
button.graphics.drawCircle( 10, 10, 10 );
button.graphics.endFill();
button.x = _grid.width * Math.random();
button.y = _grid.height * Math.random();
_grid.addChild( button );

button.addEventListener( Event.REMOVED, _onRemoved, true );
button.addEventListener( Event.REMOVED, _onRemoved, false );

button.addEventListener( Event.REMOVED_FROM_STAGE, _onRemovedFromStage, true );
button.addEventListener( Event.REMOVED_FROM_STAGE, _onRemovedFromStage, false );

}

private function _removeButton( event:MouseEvent ):void {
if ( _grid.numChildren > 0 ) {
_grid.removeChildAt( 0 );
}
}
}
}


次が出力例です。


# _onRemoved null
[Event type="removed" bubbles=true cancelable=false eventPhase=1]
# _onRemoved instance1
[Event type="removed" bubbles=true cancelable=false eventPhase=1]
# _onRemoved instance4
[Event type="removed" bubbles=true cancelable=false eventPhase=2]
# _onRemoved instance1
[Event type="removed" bubbles=true cancelable=false eventPhase=3]
# _onRemoved null
[Event type="removed" bubbles=true cancelable=false eventPhase=3]
$ _onRemovedFromStage null
[Event type="removedFromStage" bubbles=false cancelable=false eventPhase=1]
$ _onRemovedFromStage instance1
[Event type="removedFromStage" bubbles=false cancelable=false eventPhase=1]
$ _onRemovedFromStage instance4
[Event type="removedFromStage" bubbles=false cancelable=false eventPhase=2]


event.currentTarget.name を出力させましたが、Stage は name 属性が無いので null 出力です。

eventPhase の1・2・3がキャプチャ・ターゲット・バブリング段階に対応しています(eventPhase参照)。



  1. キャプチャ段階: Stage からイベントターゲットまでのオブジェクトに於けるイベント伝播
  2. ターゲット段階:イベントターゲットに於けるイベント伝播
  3. バブリング段階:イベントターゲットから Stage までのオブジェクトに於けるイベント伝播
以上、まさしく解説の通りにこの三段階を経てイベントが伝播する事を確認しました。

SNSの世界的な流行分布:Consumer Trends in Social Networking

2007 年 10 月 27 日 土曜日


Consumer Trends in Social Networking (comScore Voices)



comScoreと言うインターネット調査会社さんが調べた所に因ると、SNSユニークビジタ数の多い地域はアジア・太平洋で、少ない地域は中東アフリカ。しかし増加率は中東アフリカもアジア・太平洋と同じくらい伸びている。等と言った結果が公開されています。



そして、SNSの視聴時間の結果も出て居るんですが、ちょっと比率を計算しました。各地域の最大SNSを1として、他のサービスがどのくらいの比率かを示すと次の結果です。


アジア 太平洋
Friendster1.00
CyWorld0.82
Orkut0.73
Mixi.jp0.40
MySpace0.23


Friendsterはmixiの倍以上ですね。

Cyworldは韓国のSNSで、こちらで出会った韓国人らがみんなやっているので俺も登録しようかと思ったのですが、パスポートをFAXとかしないと行けないみたいなのでやめました(これは外国人なので)。日本にもcyworldドメインは進出していますが、SNSとしては繋がっていません。これもmixiのほぼ倍はいってますね。



ヨーロッパ
Bebo.com1.00
MySpace0.65
SkyrockNetwork0.62
Facebook0.59
Netlog.com0.37


北アメリカ
MySpace1.00
Facebook0.78
Bebo.com0.10
GalaOnline.com0.04
Nexopia.com0.03


ラテンアメリカ
Orkut1.00
HIS.com0.29
Metroflog.com0.15
MySpace0.07
WindowsLiveSpaces0.03


中央-東アフリカ
Facebook1.00
HIS.com0.27
Netlog.com0.24
Yonja.com0.22
SkyrockNetwork0.18


MySpace、Facebook、Orkutが人気ですかね。

WiredのGeekipedia: Social networkingで扱われているのは、Facebook、Friendster、LinkedIn、MySpace、Twitterの五つ。そもそも何の為のSNS?風な考えを持つと、日本国内で繋がるって為ならmixiだけで問題ないですけどね。



ちなみにテーブルの色は以前書いたshknock: Tango Icon Theme Guidelines - Tango Desktop Projectのカメレオン使いました。う~ん、どうだろ。

《YouTubeビューア》:youtubesearch

2007 年 10 月 26 日 金曜日


youtubesearch



名前は《search》ですが、俺としてはビューアです。

おそらくコードとしては簡単な部類だと思いますが、綺麗ですね。う~ん、作りたいなぁ。



これでぽっと思い出しましたが、日本でiPod touch向けのコンテンツ産業は如何な様子なんでしょう。Wii向けコンテンツでぱっとした話題も聞かないので、そこも含めて未開拓なままですか?

Tango Icon Theme Guidelines - Tango Desktop Project

2007 年 10 月 26 日 金曜日


Tango Icon Theme Guidelines - Tango Desktop Project



Tangoアイコンテーマが目指すのは、どんなデスクトップ環境にも違和感の無いアプリケーションです。マルチプラットフォーム対応のアプリケーションを使うユーザには、雑然とか不釣り合いな感覚を覚えない様にすべきです。それには、総てのデスクトップの様式に揃える、と言う遣り方ではなく、それぞれのプラットフォーム上で極端な相違が出るのを防ぐ事から始めたいと考えています。

先日Gimpのバージョンアップを眺めていましたが、このテーマをベースに作っているらしいですね。色々と論理的にデザインを解体しているので、俺には丁度良い参考と成りそうです。ここにはカラーパレットだけ。何故かサイトではすっげぇ右にずれていましたけど。

style="text-align: center;" border="0" cellpadding="10" cellspacing="10">
Tango: カラーパレット Butter #fce94f #edd400 #c4a000 Orange #fcaf3e #f57900 #ce5c00 Chocolate #e9b96e #c17d11 #8f5902 Chameleon #8ae234 #73d216 #4e9a06 Sky Blue #729fcf #3465a4 #204a87 Plum #ad7fa8 #75507b #5c3566 Scaelet Red #ef2929 #cc0000 #a40000 Aluminium #eeeeec #d3d7cf #babdb6 #888a85 #555753 #2e3436
これの灰色の微妙な色感覚と言うのは俺には無理だなぁと思います。

ウェブ開発向け二〇のツール:20 tools for web application development

2007 年 10 月 23 日 火曜日


20 tools for web application development



先日公開されたA List Apart: Articles: Findings From the Web Design Surveyを見たら、《Web Designer》より《Developer》の回答者が多くて時代の移り変わりを感じました。

いや、《Designer》を加えたら結局デザイナの方が多いんですが。



そんな(自分含め)デベロッパさんらの参考ツールが紹介されていて丁度いいやと思ったら、OSX向けが多い。未だにMac派は多いのでしょうか。そういえばその結果は先述の調査項目には無かった筈。そもそもOSを気にして仕事する時代では無いのかも知れないです。

有償製品も在るので、まさしく参考までに。

音楽業界、五つのビジネスモデル:Music industry: five alternative business models

2007 年 10 月 21 日 日曜日


Music industry: five alternative business models | last100



これもずっと訳そうと思いつつ保留にしていた記事です。日本では著作権分科会の中間報告について騒がれている様子なのを最近までずっと見過ごしていました。創造者へ適切にお金が送れるならそれでいいんですけど…その辺も後で読もう。



さて、取り敢えずレコード業界が生き残る道とは、この様な意見があるみたいです。

無料
楽曲以外のチケット等、関連する物から収益を騰げる。
Jamendo

アーティストはクリエイティブ・コモンズ・ライセンス下で楽曲を配布する。ユーザはそれらについて評価を下せ、好きなアーティストへは直接送金が出来る。加えてアーティストはサイト上で店舗展開も可能である。
Prince

先日、Princeがアルバムを無料で配った、正確に言うならイギリスの新聞社が配った、と言うべきか(デイリー・メールの日曜紙のおまけとしてCDが附いた)。

金額は定かではないが、Prince曰く、ツアーの告知も兼ねて出来るだけ多くの人へ届ける事が目的だった、との事である。

しかしこの動きは業界としては歓迎されていない。Sony BMGはイギリス国内へのアルバム出荷を拒み、HMVや小売店舗では総じて遺憾の意を示している。
SpiralFrog

広告の視聴を代価として無料ダウンロードが出来る。それに加えて、ユーザは三〇日毎にログインしては広告を見なければ成らない。さもなければアカウントが失効となる。
払いたいだけ払う
Radiohead

“無料”にも似た”払いたいだけ払う”モデルは先日のRadiohead/In Rainbowsだろう。
Jane Siberry

似ている配信方法だが、違いは先にダウンロードしてから値段を考えて貰う遣り方だ。
Magnatune

オンライン音楽サービスのMagnatune、ここは”払いたいだけ”モデルで成り立っている。標準は$8とされているが、$5で買うユーザも居る。しかし、結局は一度に幾つもアルバムを買ってより多くの収益に繋がる。
人気∝値段
AmieStreetはアーティストがそのファンと結びついて販促や販売を行えるソーシャル・マーケットで、”人気による値段付け”の先駆者である。総ての楽曲はまず無料から始まるが、ダウンロード数が増えるに従って値段が上がり、最大98cまで上がる。iTunesと値段は同じでも、人気か否かが分かると言う点で大きく違う。
購聴
月に幾らか払い、購聴、のサービスも考えられる。しかしRhapsodyの認知が覚束無い事からも分かる通り、人々は音楽を賃貸する準備が揃っていないらしい。もう一つ理由を挙げるとすれば、未だ世界はユビキタスなインターネット社会では無いと言う事だ。
音楽税
古い考えで、最近噂にも成った音楽税。ISPや携帯電話キャリアがその使用料金に音楽税を含めて徴収してしまうと言う遣り方だ。他にも音楽プレイヤーや空CDに含めるとか、直接税と言う考え方も在る。

しかしこれは政府や大手レーベルを巻き込んでの話だから実現性は薄いだろう。そもそも税収で賄われたレコード会社からアーティストが生まれるなんて到底考えつかない。

払いたいだけ払うモデルは試してみたいです。


スプラッシュの意義を問うた:Splash Pages: Do We Really Need Them?

2007 年 10 月 21 日 日曜日


Splash Pages: Do We Really Need Them? | Design Showcase



書こうと思いながら先延ばしにしていたサイト。HD新規購入したり、Nvuの使い方に今ひとつ慣れなかったりしていたのですが…関係のないことです。



スプラッシュページ。

俺は不要派です。極力サーバ側で自動化して必要条件などはユーザで構うことなくアクセス出来るサイトが良いなと思います。そもそもこれこそ誰が始めたんでしょうかね?

制作者が嘆きながら作った数十万や数百万のスプラッシュもユーザにとっては1クリックの障壁でしかないですから。

存在意義

  1. 警告の表示
  2. 重要な通達
  3. 言語選択
  4. 回線速度(或いはアクセシビリティ)を考慮しての選択
  5. サイト閲覧推奨環境の表示
  6. 表示方法の選択(通常/全画面)
  7. ドメインを複数持つサイト
  8. サイト閲覧の手引き
  9. 興味を掻き立てる
  10. 音声についての注意
  11. 広告
  12. デザインとして必要
訪問者数を減らす悪い例(1)
無意味。

“Enter”それだけのページ。

(»Hrubes.com
訪問者数を減らす悪い例(2)
不可解。

クリックすべきが分からない。

何を見るのか分からない。

(»FunkyPunky

最低限目的を果たす為に存在しているスプラッシュページ
  1. 更なる広告
  2. 重要なお知らせ
  3. 注意/警告/必要条件
  4. デザイン勝負
  5. 言語選択/サイトバージョン
  6. サイトの説明
  7. 最小限表現的
  8. 飛躍して
そして存在意義を理解しかねるけど
ブログにすら必要だろうか?うん、そうなのかも知れない。


やるならデザイン勝負か最小限ですね。何を言ってもきっとスプラッシュは続く。

リダイレクト虎の巻:Redirect Cheatsheet - mod_rewrite, javascript, cfm, perl, php 301 Redirects

2007 年 10 月 19 日 金曜日


Redirect Cheatsheet - mod_rewrite, javascript, cfm, perl, php 301 Redirects



きっと《そんなこともあろうかと》便利。

  • meta http-equiv tags
  • javascript
  • PHP
  • Perl
  • ColdFusion (CFM)
  • ASP (VB Script)
  • shell script
  • mod_rewrite in apache htaccess
  • mod_alias in apache htaccess
  • ErrorDocument in apache htaccess
以上でのリダイレクト方法が解説されてます。

電子メールの有り様を切り替えるサービス達:Four startups ready to change the face of email

2007 年 10 月 17 日 水曜日


VentureBeat » Four startups ready to change the face of email



メール、SNS、IM、携帯電話、手段は違うけれど、遣り取りする相手は結局同じ人だったりします。それらを見直すと次の時代のコミュニケーションが見えて来るのでは無いか、きっとそんなサービスだと思います。


けれども、未だ明確に何がとは言えませんが、日本と(簡略して言うと)英語圏とでは、SNS・携帯電話と利用者との関わりが随分と違っている様に感じます。そもそも日本のSNSとは形骸化しているんじゃないでしょうか。どうなんでしょう。

こう言ったコミュニケーションの集約サービスも、やるとすれば携帯電話主導でそろそろ出て来るでしょうかね。朧な形の文ばかり。

AS2描画系拡張API:Extending the ActionScript 2.0 Drawing API

2007 年 10 月 17 日 水曜日



Object Oriented Vancouver » Extending the ActionScript 2.0 Drawing API



最近仕事でちょこちょこと参考にしているので、こっちにも載せておきます。星形とか歯車なんてのも在ります。