今年から、 Flex の技術者として Adobe Community Professional ( 旧 Adobe Community Expert ) の一員になりました。
推薦してくださった轟さんありがとうございます。
2010 年現在、リストを見る限り、日本人は野中先生と私の 2 人のみらしく、実際どのような活動をするのかまだよく分かっていませんが、今後も引き続き頑張ります。
ひとまず、ブログのサイドバーにロゴを貼り付けてみました。
今年から、 Flex の技術者として Adobe Community Professional ( 旧 Adobe Community Expert ) の一員になりました。
推薦してくださった轟さんありがとうございます。
2010 年現在、リストを見る限り、日本人は野中先生と私の 2 人のみらしく、実際どのような活動をするのかまだよく分かっていませんが、今後も引き続き頑張ります。
ひとまず、ブログのサイドバーにロゴを貼り付けてみました。
先日公開された 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 イベント・セミナー レポートページに掲載されました。
Adobe AIR Day イベントレポート
http://www.adobe.com/jp/joc/events/airday/
今まで書いてきた記事の中で、過去最多ページ数のレポートになりました。
当日イベントに参加できなかった方はもちろん、参加された方にも是非見ていただけばと思います。
先月 11 月 26 日に行われた Adobe AIR Day の資料をアップしました。
http://labs.taiga.jp/presentationMaterial/FxUG/AIRDay20091126Slide.pdf
口頭での解説がメインだったため、Adobe AIR デベロッパーセンターに掲載されている記事と、内容に大差はありませんが置いておきます。
Touch Viewer リリース後に作った副産物ですが、Win/Mac 両対応するように強化したので晒しておきます。
下記画像のような Flex プロジェクトのフォルダ構造を保っていれば、build.xml を実行するだけで、各 OS に対応した .exe や .dmg を書き出すことができます。
<?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 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 の署名に日本国内で唯一対応している証明機関は GMO グローバルサイン株式会社なのですが、残念なことに個人/個人事業主からの申し込みは受け付けられないようです。 ( 2010 年 3 月 3 日追記 : この記事を書いた時点での内容です。現在、GMO グローバルサイン株式会社でも、個人向けの証明書の発行が可能になっています。 )
なので、私のような個人事業主がコード署名証明書を取得するためには、海外の証明機関に申請する必要があります。
証明機関に関する情報は Adobe AIR のヘルプに記載されていますが、Ryan Stewart 氏のブログを読む限りでは、 Chosen Security 社がおすすめらしいので申し込んでみました。以下手順になります。
Chosen Security 社の AIR コード署名証明書購入ページを開きます。
http://www.chosensecurity.com/tc-publisher-id-for-adobe-air
[Buy TC Publisher ID for Adobe Air for Individual Developers] をクリックして購入手続きへ移動します。
必要な情報を入力して決済手続きを終えると、入力メールアドレス宛に 2 通メールが届きます。 ( 1 通は個人識別番号 (PIN) が記載されたメール、もう 1 通は証明書発行申請 PDF ファイルが添付されたメール )
証明書発行申請 PDF ファイル内記述箇所に必要な情報を入力して、メール本文に記載されている ChosenSecurity Support のメールアドレス宛に送付します。 ( 添付 PDF が送られてくるメールアドレスとは異なるので、注意が必要です )
証明書発行申請 PDF ファイルの記述例をアップしておきます。( 記述例はこちら )
メールの本文に悩む方は、下記文章を参考にしてください。
Dear Sir/Madam
I request a TC Publisher ID for Adobe AIR.
Please confirm an attached PDF file.
Sincerely,
Chosen Security 社の担当者から、証明書発行申請の受理通知メールが届きます。
2 営業日くらいで、証明書ダウンロードサイトの URL が記述されたメールが届きます。
個人識別番号 (PIN) を入力すると、証明書をダウンロードすることができます。
この個人識別番号 (PIN) は、AIR ファイルを書き出すためのパスワードにもなります。
以上で、怪しい「オレオレ証明書」付きの AIR アプリケーションともサヨナラです。
自分の作った AIR アプリで、以下のような画面を晒すこともなくなります。
参考
ClockMaker Blog
個人向けのコードサイニング証明書
http://clockmaker.jp/blog/2009/01/certificates-for-indivisuals/
Ryan Stewart – Rich Internet Application Mountaineer
Adobe AIR Certificates for Individuals Now Available
http://blog.digitalbackcountry.com/2009/01/adobe-air-certificates-for-individuals-now-available/
Adobe AIR 1.5
AIR ファイルへの電子署名
http://help.adobe.com/ja_JP/AIR/1.5/devappsflash/WS5b3ccc516d4fbf351e63e3d118666ade46-7ff0.html
ご存知の方も多いと思いますが、先月上旬に参加してきた 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 回@東京参加受付
前回のエントリに引き続き、今回は MXML で TLF に埋め込みフォントを適応させるサンプルをアップします。
TLF が使用されている Spark コンポーネントは、RichText と RichEditableText の 2 つで、AS で使用するのと比べてかなり楽に使えます。その代わり、Linked Containers 機能のみ使用できない仕様になっているため、注意が必要です。
サンプル ( 画面とソース : Flex 4.0.0.10485 でビルド )
http://labs.taiga.jp/flex4/TLFSample08/
http://labs.taiga.jp/flex4/TLFSample08/srcview/
アップしたサンプルでは、埋め込み許可リストに記載されている内容に基づき、小塚ゴシックを SWF に埋め込んでいます。
http://www.adobe.com/jp/type/browser/legal/embeddingeula.html
参考
Adobe Open Source : Spark Text Primitives – Flex SDK
http://opensource.adobe.com/wiki/display/flexsdk/Spark+Text+Primitives
TLF に埋め込みフォントを適応させるための手段について書きます。
FTE の仕様上、TLF の埋め込みフォントフォーマットは DefineFont4(CFF) フォーマットである必要があります。( 従来の TextField に使用されているフォントフォーマットは DefineFont3 フォーマットです )
AS, MXML のどちらを使用しても CFF 形式でフォントを埋め込むことは可能ですが、Flash Builder 4 β 2 付属の SDK(4.0.0.10485) で確認したところ、フォント埋め込み時の Embed メタデータタグの引数 cff が、embedAsCFF と名称変更されていたので注意が必要です。
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 に取得したフォント名を定義します。
サンプル ( 画面とソース : Flex 4.0.0.10485 でビルド )
http://labs.taiga.jp/flex4/TLFSample07/
http://labs.taiga.jp/flex4/TLFSample07/srcview/
アップしたサンプルでは、埋め込み許可リストに記載されている内容に基づき、小塚明朝を SWF に埋め込んでいます。
http://www.adobe.com/jp/type/browser/legal/embeddingeula.html
参考
Adobe Open Source : Font Embedding Reprise – Flex SDK
http://opensource.adobe.com/wiki/display/flexsdk/Font+Embedding+Reprise
Adobe Open Source : FontTranscoder.java
http://opensource.adobe.com/svn/opensource/flex/sdk/trunk/modules/compiler/src/java/flex2/compiler/media/FontTranscoder.java
zenoplex : UNICODE RANGE GENERATOR
http://www.zenoplex.jp/tools/unicoderange_generator.html
高橋文樹.com : TextlayoutFrameworkやFlash.text.engineで埋め込みOpenTypeフォントを使う方法
http://takahashifumiki.com/web/programing/710/