Paradigm Shift Design

ISHITOYA Kentaro's blog.

M2EclipseとTeeda

なんか,
Page has moved
のMaven2IntegrationPluginがアップデートされていて,コードネームがTychoとか.
隊長としか読めない.


これ,昔の0.0.9のときのプラグインと同じなんだと思うんだけど,だいぶ変わっている.
Teedaをインストールしていて,このプラグインを入れると結構設定をちゃんとしないといけないみたい.


まず,0.0.9をインストールしていた場合は,パッケージエクスプローラープロジェクト名を右クリックして,Maven->Disable Dependency Managementを選択し,一回Mavenプロジェクトを解除する.
そのあと,パッケージエクスプローラーからパッケージ名を右クリックして,Maven->Enable Dependency Managementをクリック.


こうしないと,Mavenをクリックしたとき,プロジェクトの設定でMavenタブを開いたときにInvalid Valueがなんちゃらと言われてしまう.


ここで,UpdateSourceFoldersを行うと元のJava Build Pathの設定が消し飛ぶ.
ので元に戻さないといけないのだけど,Teedaの場合の設定を書き残しておく.僕はこれでapp.diconが見つからん!と怒られてちょっとハマった.

Default output folder: target/test-classes
main/java,main/resources: src/main/webapp/WEB-INF/classes
どのパスも,Included:All, Excluded:None

となっている.
また,Jarの設定もすべて消されるが,MavenDependencyのほうで解決してくれているような気がするので,無視.


で,Eclipse起動時にJDKがどうのこうの言われるが,無視してもあんまり問題ないような気がする.
ほかは問題なく.M2_REPOとか設定しなくていいみたいだし.いーんでないかい?

Maven Additional Plugin

2008-03-03 - udagawaの日記で知った.
いつも,めんどくさいなーと思っていたんだけれども,Mavenのdependencyに入っているライブラリをsrc/main/webapps/WEB-INF/lib以下にコピーしてくれるプラグイン.
検索しても見つからなかったんだけれども,本家はどこだろう.


Find And Installで,
http://www.skirnir.net/eclipse/updates/3.2/
を指定すればインストールできます.


q4eっていうのもあるのね.
Eclipse Integration - Maven User - Codehaus
をみるに,tychoが勝っているみたいだけど.

S2BlazeDSの導入

id:higayasuoさんに挑発(?)されてしまったので,人柱.
指摘歓迎.
Teeda+BlazeDSです.はじめに断わっておきますが,私は諸事情によりFlex3を使えないのでFlex2での導入記です.
まだ成功していません…orz

BlazeDSとは

まず,BlazeDSとはというところから.
Home Project for Open @ Adobe / Home / Projectsで公開されていて,要するにJavaのオブジェクトとFlexのオブジェクトを透過的に扱うための仕組み.
S2Flex2との違いは…あまりよくわからないけれど,BlazeDSはAdobe Open Sourceなので公式から出ているものであるというところがちがうのかな.

S2BlazeDSとは

SeasarコンポーネントをBlazeDSで取り扱うためのライブラリ.
ほかのDIコンテナを使っているなら,まずSeasarに乗り換えてください.

BlazeDSのインストール

さすがにTomcatEclipseはインストールされてる前提で.
Adobe - Error PageからBinary Distributionの最新版を落としてきます.


TomcatがないならTurnkeyというオールインワンパッケージをダウンロードするといいみたい.


解凍すると

  • blazeds.war
  • blazed-bin-readme.htm

というファイルができます.
突っ込んでおくと,確かにインストール方法は自明だが,blazed-bin-readme.htmの中にはライセンス条項しか書いていない.READMEじゃなくてLICENCE.


インストール方法は
Home Project for Open @ Adobe / Home / Projects*1
TomcatにBlazeDSをインストールする。 » サイキョウライン
あたりを参考に.

C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps

に放り込むだけでいいです.

S2BlazeDSのサーバー側設定

ライブラリの設定

環境としては,Doltengとか全部入ってる状態を想定しています.
また,最近更新されたMaven - Maven 2.x Integration for EclipseのTycho*2をインストールしてあります.


ChuraのSuper Agile(Teeda+S2Dao)でblazedsTestというプロジェクトを作成.
で,M2EclipseとTeeda - Paradigm Shift Designを参考に,Mavenの設定をします.


…とおもったら,まだMavenで配布されてない*3ので,
S2BlazeDS - Download
から,アーカイブをs2blazeds-1.0.0-rc1.zipをダウンロードして展開.

mvn install:install-file -DgroupId=org.seasar.blazeds -DartifactId=s2blazeds \
-Dversion=1.0.0-rc1 -Dpackaging=jar -Dfile=s2blazeds-1.0.0-rc1.jar

を実行し,ローカルリポジトリにインストールした上で,pom.xmlに

<dependency>
  <groupId>org.seasar.blazeds</groupId>
  <artifactId>s2blazeds</artifactId>
  <version>1.0.0-rc1</version>
</dependency>

と書き加えて保存します.


…さらに,Flex関係のjarもmavenリポジトリにはないようなので,ローカルでインストール.最初にダウンロードしたblazeds.warを解凍して,blazeds/WEB-INF/lib以下のflex-*をローカルリポジトリにインストール.コマンドはさっきと同じように

mvn install:install-file -DgroupId=flex \
                         -DartifactId=flex-messaging-common \
                         -Dversion=3-0-0-544 -Dpackaging=jar \
                         -Dfile=flex-messaging-common.jar
mvn install:install-file -DgroupId=flex \
                         -DartifactId=flex-messaging-core \
                         -Dversion=3-0-0-544 -Dpackaging=jar \
                         -Dfile=flex-messaging-core.jar
mvn install:install-file -DgroupId=flex \
                         -DartifactId=flex-messaging-opt \
                         -Dversion=3-0-0-544 -Dpackaging=jar \
                         -Dfile=flex-messaging-opt.jar
mvn install:install-file -DgroupId=flex \
                         -DartifactId=flex-messaging-proxy \
                         -Dversion=3-0-0-544 -Dpackaging=jar \
                         -Dfile=flex-messaging-proxy.jar
mvn install:install-file -DgroupId=flex \
                         -DartifactId=flex-messaging-remoting \
                         -Dversion=3-0-0-544 -Dpackaging=jar \
                         -Dfile=flex-messaging-remoting.jar

pom.xmlは

<dependency>
  <groupId>flex</groupId>
  <artifactId>flex-messaging-common</artifactId>
  <version>3-0-0-544</version>
</dependency>  
<dependency>
  <groupId>flex</groupId>
  <artifactId>flex-messaging-core</artifactId>
  <version>3-0-0-544</version>
</dependency> 
<dependency>
  <groupId>flex</groupId>
  <artifactId>flex-messaging-opt</artifactId>
  <version>3-0-0-544</version>
</dependency> 
<dependency>
  <groupId>flex</groupId>
  <artifactId>flex-messaging-proxy</artifactId>
  <version>3-0-0-544</version>
</dependency> 
<dependency>
  <groupId>flex</groupId>
  <artifactId>flex-messaging-remoting</artifactId>
  <version>3-0-0-544</version>
</dependency>

と追記します.


あと,commons-httpclientとbackport-util-concurrentが必要なので,pom.xml

<dependency>
  <groupId>commons-httpclient</groupId>
  <artifactId>commons-httpclient</artifactId>
  <version>3.1</version>
</dependency>
<dependency>
  <groupId>backport-util-concurrent</groupId>
  <artifactId>backport-util-concurrent</artifactId>
  <version>3.0</version>
</dependency>

を追記すればライブラリの設定は終わりです.

s2blazedsの設定

S2BlazeDS - Downloads2blazeds-server-example-1.0.0-rc1.zipをダウンロードして,src/main/webapps/WEB-INF/flexを自分のプロジェクトへコピーします.


次にweb.xmlに次の設定を書き加えます.

    <context-param>
        <param-name>flex.class.path</param-name>
        <param-value>/WEB-INF/flex/hotfixes</param-value>
    </context-param>

    <!-- Http Flex Session attribute and binding listener support -->
    <listener>
        <listener-class>flex.messaging.HttpFlexSession</listener-class>
    </listener>


    <!-- MessageBroker Servlet -->
    <servlet>
        <servlet-name>MessageBrokerServlet</servlet-name>
        <display-name>MessageBrokerServlet</display-name>
        <servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>
        <init-param>
            <param-name>services.configuration.file</param-name>
            <param-value>/WEB-INF/flex/services-config.xml</param-value>
        </init-param>
        <load-on-startup>4</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>MessageBrokerServlet</servlet-name>
        <url-pattern>/messagebroker/*</url-pattern>
    </servlet-mapping>

S2BlazeDSFlex側設定.

ここでは,サンプルを利用して説明します.
…で,S2BlazeDS - Downloadで配布されているクライアントサンプルをFlex2でインポートしないでください.
インポートするとワークスペースを更新していますというメッセージが,出続けてプロジェクトを閉じることすらできなくなります.
Flex3では問題ないのだと思います.


Flex2では,まずプロジェクトの作成をクリックして
ファイル->新規->プロジェクトで,このFlexアプリケーションはどのようにデータにアクセスしますか?で「Flexデータサービス」,「Flex Builderでアプリケーションをローカルにコンパイル」を選択して次へ.
「ローカルFlexデータサービスのデフォルトの場所を使用する」のチェックを外し,コンテキスト名がblazedsTestなら,

ルートフォルダ:サーバー側プロジェクトのルート/src/webapps
ルートURL:http://localhost:8080/blazedsTest/
コンテキストルート:/blazedsTest

のように設定してください.


で,ビルドパスのoutput folderはサーバー側プロジェクトのルート/src/webapps以下のアプリケーション名を設定.


で,ここまで来て,Flex側でプロジェクトを実行しようとしたら,

Unexpected attribute 'url' found in 'endpoint' from file: services-config.xml.

とか言われる.
Flex3じゃないと動かないのか・・・?*4
と,,hotfixがあるじゃないか!hotfixのくせに151MBもあるじゃないか!…アフォか.
でHotFixをあてる…これ,ほんとにマルっとコピーなんだな.差分じゃない.


これで動くだろーと思ったら,今度は

チャンネル定義 mx.messaging.channels.StreamingAMFChannel が見つかりません。

とのこと.


とりあえずこの辺でタイムリミット.
後で追記します.
DIが効いてないのかなぁ

*1:これをreadmeとして突っ込んでおくべきではないか

*2:隊長としか読めない.きっとあなたも!

*3:4/5現在

*4:今のプロジェクトがFlex2から乗り換えられないので,Flex3で試しても意味がない

CGMに最も適したメディアとは?

前々から,落語を読みたいと思ってたんだけれど,夢屋でみつけて思わず買ってしまった.

落語百選―春 (ちくま文庫)

落語百選―春 (ちくま文庫)


落語,本当に面白い.最近ハマり気味.
話芸ってすごいよね.



昔稚内に体験入学にきて帰って行ったワンダーうたげやんが,音がもつ不変な軸は時間軸だけだから,一次元だ.一次元だからこそ自由で豊かな表現ができ,かつ単純だから伝わりやすいと言っていた.


音声というメディアはほかのメディアと比べて「自由度」という点において特別なんだなとおもう.


こないだ久しぶりに高専の人と飲んでいて、

人間は生まれながらにして視覚を持っていて,最初のコミュニケーションはボディーランゲージで行われていただろう.だんだんと社会ができてくると,物事を仔細に伝えるために,音声を用いてコミュニケーションするようになった.さらに音声による文化が発達してそれを記録する必要が生じ文字ができた.
だから,メディアの抽象度としてはビデオが一番低くて,その次に音声,イメージ,テキストという順番じゃないだろうか.
でもインターネットの文化はテキストとイメージの文化が12-3年続いて,ここ4-5年でビデオ文化になっていて,音声の時代はなかったような気がしないかな.
ビデオは制作のコストが高い,テキストはもう飽きた.
CGMに適したメディアとして,ここは音声に注目するのがいいんじゃないか.

というようなことをuzullaに言ったら「おれは騙されないけど,そりゃなんとなーく正しい感じがするなw」とか嘲笑された.
でも,ワンダーうたげやんのMixi日記を読んで改めて考えてみると,やっぱり音声はCGMにとって最適なメディアなんじゃないかなとおもった.



ある情報について,表現する方法をたくさん持つメディアほど,人間にとっては自由度が下がる.それは人間がその情報をメディアの表現に基づいて解釈しているからで,

「はげでひげを生やしたおじさん」

というテキストと
TAKA-­Qの広告から.かっこいいオジ(イ?)サン­.ボールペン画.
というイメージと

というビデオでは,どれもはげでひげを生やしたおじさん*1が出てくるが,取得できる情報量に違いがある.


ビデオは自由度がもっとも低い.時間軸+イメージ+音声+テキスト(テロップ)で構成されていて,様々なメディアが複合されてできている.だから表現できることの幅が広くて,ほぼ現実の世界と同等なものをそのまま写し取ることができる.
抽象度が低いという理由は,受け手の人間が「そこに映っているものの中で映像を解釈」することを前提として求められているからだ.なんというかメディアの表現の幅が拡がれば拡がるほど,受け手に許された想像の幅が狭くなっていく感じ.


イメージは,ビデオよりも自由度が高く,テキストよりも自由度が低い.時間軸がなくて,2次元空間の中に視覚情報を詰め込んで表現が行われ時にテキストを含む.だから,ビデオよりも表現できることの幅は狭くなる代わり,人間が想像しなければならないことは多くなる.だけれども,イメージには膨大な量の情報が含まれていて,やはりある程度,想像に枠をはめられる.


テキストは,もっとも自由度が高い.時間軸もイメージもなく,人間が想像しなくてはならないことがとても多い.よほど熟練の表現者でなければ伝えたいことを伝えきれないし,いくら洗練された表現でも受け手が解釈できなければ意味をなさない.
表現者にも受け手にも,求められている能力の閾値は高い.


音声は,テキスト・イメージ・ビデオと違って視覚情報を含まない.
だから,聞こえてくる音声から映像を想像しなければならない.日本人は漢字があるために,聞こえてくる音声をコンテキストを利用してテキストに変換してから理解している.
全部脳みそでやっているから,人間に求められていることが多く,ビデオより自由度が高い.
ただ,テキストでは直接的に表現できない感情や雰囲気を,抑揚や音色に乗せて表現することができるから,テキストよりも表現の幅が広い.



うーん,思考が散らばってきた.
いや,これらのメディアを芸術の分野とかプロフェッショナルなレベルで比較するのは,なんとなく違うと思う.
音声の

  1. ビデオよりも自由度が高く・制作のコストが低い
  2. イメージよりも「感情や雰囲気」を伝えやすい
  3. テキストよりも表現者・受け手の能力を要求しない

という特徴は,CGMに最も適しているのではないかなと思う.



ちょうどタイムリーに,Nothing found for 2008-03-24-3で,

ブログはラジオと違って、気軽に繰り返し読むことができるし、聴覚中心ではなく視覚中心です。
ラジオの方がパーソナリティの感情が伝わりやすそうですね。

ブログとラジオは接種できる情報の質は全然違うと思いますが、
ブログを書き物として扱うのではなく、ラジオのようにも伝える方向に、
より面白い記事を書く技術の一端があるような気がしたのです。

ととしのりさんがおっしゃっているが,「音声」と「テキスト」のあいだを探るともっと面白いサービスができるのではないかなと思う.



ところで,冒頭にあげた話芸は音声というメディアのいいところを余すところなく使い切っていて,先述の落語百選に載っている「花見酒」なんかは,もー日本酒が飲みたくて飲みたくて堪らなくなる.
NHK落語シリーズ,六代目春風亭柳橋の「花見酒」お勧めです.


#だめだなぁ
#やっぱテキストは能力がないとかけないんだよ.
#受け手の方の超絶補完能力に期待します

*1:はげでひげを生やしたおじさんに注目して