Adobe Community Professional の人になりました

Adobe Community Professional

今年から、 Flex の技術者として Adobe Community Professional ( 旧 Adobe Community Expert ) の一員になりました。

推薦してくださった轟さんありがとうございます。

2010 年現在、リストを見る限り、日本人は野中先生と私の 2 人のみらしく、実際どのような活動をするのかまだよく分かっていませんが、今後も引き続き頑張ります。

ひとまず、ブログのサイドバーにロゴを貼り付けてみました。

Touch Viewer v1.1 released

先日公開された Adobe AIR 2 Beta 2 に対応した Touch Viewer v1.1 をリリースしました。
下記 URL より取得できます。

http://www.adobe.com/jp/joc/air2/samples/

インストール時の注意ですが、自動アップデート機能に対応していないので、旧バージョンをインストールされている方は、事前にアンインストールする必要があります。

なお、ソースコードは、Google Code にて公開しています。

現バージョン (v1.1) のソース
http://touchviewer.googlecode.com/svn/trunk/

旧バージョン (v1.0) のソース
http://touchviewer.googlecode.com/svn/tags/release_1.0/

Adobe AIR Day イベントレポートを寄稿しました

スピーカー / 写真撮影 / 記事執筆と、一通り携わらせていただいた Adobe AIR Day のイベントレポートが、Adobe イベント・セミナー レポートページに掲載されました。

Adobe AIR Day イベントレポート
http://www.adobe.com/jp/joc/events/airday/

今まで書いてきた記事の中で、過去最多ページ数のレポートになりました。
当日イベントに参加できなかった方はもちろん、参加された方にも是非見ていただけばと思います。

AIR 2.0 用ネイティブインストーラ生成 Ant 設定ファイル

Touch Viewer リリース後に作った副産物ですが、Win/Mac 両対応するように強化したので晒しておきます。

下記画像のような Flex プロジェクトのフォルダ構造を保っていれば、build.xml を実行するだけで、各 OS に対応した .exe や .dmg を書き出すことができます。

Flash Builder 4 β 2 で作成したサンプル Flex(AIR) プロジェクト

<?xml version="1.0" encoding="utf-8"?>
<!--
build.xml
-->
<project name="≪ プロジェクト名 ≫" basedir="." default="init">

   <condition property="os" value="≪ Flex SDK のフルパス (Windows) ≫">
       <os family="windows" />
   </condition>
   <condition property="os" value="≪ Flex SDK のフルパス (Mac) ≫">
       <os family="mac" />
   </condition>

   <condition property="suffix" value=".exe">
       <os family="windows" />
   </condition>
   <condition property="suffix" value=".dmg">
       <os family="mac" />
   </condition>

   <property name="FLEX_HOME"           value="${os}"                                  />
   <property name="ADT.JAR"             value="${FLEX_HOME}/lib/adt.jar"               />
   <property name="AIR_CONFIG"          value="${FLEX_HOME}/frameworks/air-config.xml" />
   <property name="FLEX_TASKS_JAR"      value="${FLEX_HOME}/ant/lib/flexTasks.jar"     />
   <property name="APP_ROOT_DIR"        value="src"                                    />
   <property name="ASSET_DIR"           value="asset"                                  />
   <property name="ICON_DIR"            value="${ASSET_DIR}/icon"                      />
   <property name="APP_NAME"            value="${ant.project.name}"                    />
   <property name="AIRI_NAME"           value="${APP_NAME}.airi"                       />
   <property name="DESCRIPTOR_NAME"     value="${APP_NAME}-app.xml"                    />
   <property name="NATIVE_APP_NAME"     value="${APP_NAME}${suffix}"                   />
   <property name="SWF_NAME"            value="${APP_NAME}.swf"                        />
   <property name="APP_ROOT_FILE"       value="${APP_ROOT_DIR}/${APP_NAME}.mxml"       />
   <property name="APP_ROOT_DESCRIPTOR" value="${APP_ROOT_DIR}/${APP_NAME}-app.xml"    />
   <property name="KEYSTORE"            value="≪デジタル証明書ファイル名≫.p12"       />
   <property name="STORETYPE"           value="pkcs12"                                 />
   <property name="STOREPASS"           value="≪デジタル証明書のパスワード≫"         />

   <taskdef resource="flexTasks.tasks" classpath="${FLEX_TASKS_JAR}" />

   <target name="resources">
       <copy
           file   = "${APP_ROOT_DESCRIPTOR}"
           tofile = "${APP_NAME}-app.xml"
        />
       <replaceregexp
           file    = "${APP_NAME}-app.xml"
           match   = "<content>.+?</content>"
           replace = "<content>${APP_NAME}.swf</content>"
        />
       <copy toDir="${ICON_DIR}">
           <fileset dir="${APP_ROOT_DIR}/${ICON_DIR}" />
       </copy>
   </target>

   <target name="amxmlc" depends="resources">
       <mxmlc
           file                       = "${APP_ROOT_FILE}"
           output                     = "${SWF_NAME}"
           configname                 = "air"
           actionscript-file-encoding = "UTF-8"
           incremental                = "true"
           debug                      = "false"
           optimize                   = "true"
           target-player              = "10"
       >
           <load-config filename="${AIR_CONFIG}" />
       </mxmlc>
   </target>

   <target name="prepare" depends="amxmlc">
       <java jar="${ADT.JAR}" fork="true" failonerror="true">
           <arg value = "-prepare"           />
           <arg value = "${AIRI_NAME}"       />
           <arg value = "${DESCRIPTOR_NAME}" />
           <arg value = "${SWF_NAME}"        />
           <arg value = "${ICON_DIR}"        />
       </java>
   </target>

   <target name="package" depends="prepare">
       <java jar="${ADT.JAR}" fork="true" failonerror="true">
           <arg value = "-package"           />
           <arg value = "-storetype"         />
           <arg value = "${STORETYPE}"       />
           <arg value = "-keystore"          />
           <arg value = "${KEYSTORE}"        />
           <arg value = "-storepass"         />
           <arg value = "${STOREPASS}"       />
           <arg value = "-target"            />
           <arg value = "native"             />
           <arg value = "${NATIVE_APP_NAME}" />
           <arg value = "${AIRI_NAME}"       />
       </java>
   </target>

   <target name="clean" depends="package">
       <delete dir  = "${ASSET_DIR}"       />
       <delete file = "${AIRI_NAME}"       />
       <delete file = "${SWF_NAME}"        />
       <delete file = "${SWF_NAME}.cache"  />
       <delete file = "${DESCRIPTOR_NAME}" />
   </target>

   <target name="init" depends="clean" />

</project>

Adobe AIR 2.0 beta サンプルアプリケーション

昨日、Adobe Labs にて Flash Player 10.1 と AIR 2.0 のパブリック beta 版が公開されましたが、このリリースに併せて、日本のアドビのサイトより、AIR 2.0 beta のサンプルアプリケーションと解説記事が公開されました。
http://www.adobe.com/jp/joc/air2/samples/

私も、サンプルアプリケーション開発と記事執筆に携わっています。
http://www.adobe.com/jp/devnet/air/articles/touchviewer.html

元々、先月 (10/31) と今月 (11/5) に行われた FxUG 勉強会 ( 熊本、東京 ) のために用意していたサンプルアプリだったのですが、アドビさんのご厚意により、今回の公開に至りました。

また、来週 (11/26) に Adobe AIR Day という AIR 2.0 beta のお披露目イベントがありますが、その場で開発 Tips やデモを行います。平日のお昼から開催されるイベントですが、興味のある方は是非お越しください。

Adobe AIR Day
http://www.info-event.jp/adobe/air/

ちなみに、Mac 版のサンプルアプリケーション (Touch Viewer) には、『タイルのリストを選択したとき、2 回目以降に開いたネイティブウィンドウからジェスチャーイベントを取得できない』という既知のバグがあります。ランタイムの問題か SDK の問題か定かではありませんが、現在問合わせ中です。

Adobe AIR コード署名証明書を取得しました

証明書付き AIR アプリケーション インストールダイアログ

Adobe AIR の署名に日本国内で唯一対応している証明機関は GMO グローバルサイン株式会社なのですが、残念なことに個人/個人事業主からの申し込みは受け付けられないようです。 ( 2010 年 3 月 3 日追記 : この記事を書いた時点での内容です。現在、GMO グローバルサイン株式会社でも、個人向けの証明書の発行が可能になっています。 )

なので、私のような個人事業主がコード署名証明書を取得するためには、海外の証明機関に申請する必要があります。

証明機関に関する情報は Adobe AIR のヘルプに記載されていますが、Ryan Stewart 氏のブログを読む限りでは、 Chosen Security 社がおすすめらしいので申し込んでみました。以下手順になります。

  1. Chosen Security 社の AIR コード署名証明書購入ページを開きます。
    http://www.chosensecurity.com/tc-publisher-id-for-adobe-air

  2. [Buy TC Publisher ID for Adobe Air for Individual Developers] をクリックして購入手続きへ移動します。

  3. 必要な情報を入力して決済手続きを終えると、入力メールアドレス宛に 2 通メールが届きます。 ( 1 通は個人識別番号 (PIN) が記載されたメール、もう 1 通は証明書発行申請 PDF ファイルが添付されたメール )

  4. 証明書発行申請 PDF ファイル内記述箇所に必要な情報を入力して、メール本文に記載されている ChosenSecurity Support のメールアドレス宛に送付します。 ( 添付 PDF が送られてくるメールアドレスとは異なるので、注意が必要です )

    証明書発行申請 PDF ファイルの記述例をアップしておきます。( 記述例はこちら )

    メールの本文に悩む方は、下記文章を参考にしてください。

    Dear Sir/Madam

    I request a TC Publisher ID for Adobe AIR.
    Please confirm an attached PDF file.


    Sincerely,
  5. Chosen Security 社の担当者から、証明書発行申請の受理通知メールが届きます。

  6. 2 営業日くらいで、証明書ダウンロードサイトの URL が記述されたメールが届きます。

  7. 個人識別番号 (PIN) を入力すると、証明書をダウンロードすることができます。
    この個人識別番号 (PIN) は、AIR ファイルを書き出すためのパスワードにもなります。

以上で、怪しい「オレオレ証明書」付きの AIR アプリケーションともサヨナラです。
自分の作った AIR アプリで、以下のような画面を晒すこともなくなります。

オレオレ証明書付き AIR アプリケーション インストールダイアログ

参考

Adobe MAX 2009 参加レポートを寄稿しました

ご存知の方も多いと思いますが、先月上旬に参加してきた Adobe MAX 2009 のレポートが、Adobe イベント・セミナー レポートページに掲載されました。

Adobe MAX 2009 デベロッパー視点で見る、Adobe MAX 2009 の見所
http://www.adobe.com/jp/joc/events/max2009/users_report/developer/

あと、ノンクレジットではありますが、下記記事の執筆、写真撮影に携わっています。

基調講演1日目
http://www.adobe.com/jp/joc/events/max2009/

基調講演2日目
http://www.adobe.com/jp/joc/events/max2009/page2.html

Adobe Office in San Francisco “Japan Session”
http://www.adobe.com/jp/joc/events/max2009/session/japan/

明日の FxUG 東京勉強会では、参加レポート報告と AIR 2.0 のデモを行います。
Flex 勉強会 第 89 回@東京参加受付

TLF (Text Layout Framework) と戯れる #10

埋め込みフォント サンプル MXML 版

前回のエントリに引き続き、今回は MXML で TLF に埋め込みフォントを適応させるサンプルをアップします。

TLF が使用されている Spark コンポーネントは、RichText と RichEditableText の 2 つで、AS で使用するのと比べてかなり楽に使えます。その代わり、Linked Containers 機能のみ使用できない仕様になっているため、注意が必要です。

TLF (Text Layout Framework) と戯れる #09

埋め込みフォント サンプル

TLF に埋め込みフォントを適応させるための手段について書きます。
FTE の仕様上、TLF の埋め込みフォントフォーマットは DefineFont4(CFF) フォーマットである必要があります。( 従来の TextField に使用されているフォントフォーマットは DefineFont3 フォーマットです )

フォント埋め込み方法

AS, MXML のどちらを使用しても CFF 形式でフォントを埋め込むことは可能ですが、Flash Builder 4 β 2 付属の SDK(4.0.0.10485) で確認したところ、フォント埋め込み時の Embed メタデータタグの引数 cff が、embedAsCFF と名称変更されていたので注意が必要です。

AS での埋め込み例

package {
import flash.display.Sprite;
public class TaigaFont extends Sprite {
    [Embed(
        source               = "asset/font/KozMinPro-Bold.otf",
        fontName             = "testFont",
        mimeType             = "application/x-font",
        embedAsCFF           = "true",
        advancedAntiAliasing = "true",
        unicodeRange         = "U+5927, U+96c5" //大雅
    )]
    public static const FONT:Class;
}
}

上記コードは、フォントを埋め込んだクラスを SWF に書き出して、Loader クラスから外部読み込みして使用することを想定したものですが、この場合、基底クラスは Sprite または MovieClip クラスである必要があります。( Font クラスを基底クラスにしても mxmlc は SWF を書き出せますが、Loader が読み込んでくれません )

読み込み完了後、作成した TextFlow インスタンスの fontLookup プロパティの値を “embeddedCFF” (FontLookup.EMBEDDED_CFF) に定義して、TextLayoutFormat の fontFamily に取得したフォント名を定義します。