ご挨拶

 この記事はAdobe AIR Advent Calendarの2日目なります。 担当はKazushi Tominagaでお送り致します。

 今回は私が愛用しているFlashDevelopと、非常に注目しているHaxeで、Adobe AIRアプリケーションを作る方法を書きたいと思います。 Haxeの解説はJavaScript実行環境の記事が主で、ActionScript実行環境の記事が少ないように感じたのがその理由です。

FlashDevelopって何?

 オープンソースで開発が進められている素晴らしいIDEです。 Windowsで動作します。
http://www.flashdevelop.org/

 非常に完成度が高く、私がAdobe AIRアプリケーションを作る際は主に利用しています。 詳しく知りたい方は@bkzen氏のブログを読むと良いでしょう。 最新情報が丁寧にまとめられております。

Haxeって何?

 ActionScript3に近い文法を持つトランスコンパイル言語です。
http://haxe.org/index.n?lang=jp

 ActionScript3の良いところはできるだけそのままに、強力なパターンマッチや型推論などをサポートしています。

 詳しく知りたい方は、

JSXよりHaxeがイケてる5つの理由(実践編) もしくは Real World Haxe - みずぴー日記
http://d.hatena.ne.jp/mzp/20120613/jsx

Haxe の特徴 - Haxe
http://haxe.org/doc/features

 を、読むと良いでしょう。 特に@mzp氏の記事は実際の開発に基いた有用な記事です。

FlashDevelopでHaxe AIR AS3 Projectを作ろう

 何も難しい事はありません。 FlashDevelopを導入して起動したら、新規プロジェクトを作成して下記を選ぶだけです。

2013-12-01_144933.jpg

 プロジェクトを作成したら既に実行できる状態になっています。 試しにメニューから[プロジェクト]->[プロジェクトをテスト]を選んでみましょう。

2013-12-01_145947.jpg

 実行できました! もしここでエラーが表示される場合、メニューの[プロジェクト]->[プロジェクトの設定]からプレイヤーのバージョンを下げてみてください。

 実行できる事を確認できたら、後はActionScript3でAdobe AIRアプリケーションを作る時と同じように、Haxeで書いていくだけです。 PackageApp.batを実行する事で.airに変換できます 詳しくはFlashDevelopでAIRを作る際の下ごしらえレシピなどを読むと良いでしょう。

おまけ : UIはどうするの?

 上記の@mzp氏の記事にある通り、Adobe Flexは利用できません。 記事中のAsWingが安定だと思いますが、私はHaxe UIに注目しています。

Haxe UIって何?

 Haxe用のUIコンポーネントライブラリです。
https://github.com/ianharrigan/haxeui

 Swingの移植であるAsWingと違い、Adobe Flexを元にしているらしくほぼ同じコンポーネントを持つ他、XMLで画面定義できたりするあたりもAdobe Flexと同じで、馴染んだ人には非常に使い易い造りになっています。

荻野浩次郎氏と衆議院議員の宮崎謙介氏の送ったメールの全文。

前略

 初めまして、冨永和志と申します。
突然メールを差し上げました御無礼をどうかお許しください。

 現在、検討が進んでいる
「児童買春、児童ポルノに係る行為等の処罰及び児童の保護等に関する法律の一部を改正する法律案」
 について、懸念している事がありメールを御送りさせていただきました次第です。

 上記法案には「児童ポルノに類する漫画等」と「(児童ポルノの)所持」を加える旨が書かれておりますが、
この二つはどちらも「児童虐待を行なっていない、行なう気もない」人間を"児童を虐待から救う為の法で"
犯罪者として扱ってしまう恐ろしい内容であるばかりか、現実に虐待に苦しむ児童に何の救済を齎さない
大変危険な内容であり、一人の国民として反対を表明させていただきます。

 追伸
 少々本題から逸れてしまいますが、少々私情を書かせていただきたく思います。
 かつて私はいじめの被害を受けており、毎日が地獄のような日々を送っておりました。
そしてそんな私が、そんな児童が心の底から願っていた事は、
「誰か早く助けて」
 なのです。 加害者の制裁とか、それを題材として扱う創作物の規制とか、現実に被害にあっている人間はそんな事を望んでおりません。 被害者が望むのは、他の何よりも速やかな救いなのです。

 「児童買春、児童ポルノに係る行為等の処罰及び児童の保護等に関する法律」が、どうか現実に苦しむ児童を救う為の力でありますように、私は心から望みます。

 このメールが、上記法案の見直しに繋がれば幸いです。

早々

所属(Factions)について

| コメント()

所属(Factions)とは?

 これはゲーム「The elder scrolls series 4 : Oblivion」のMOD「Oscuro's Oblivion Overhaul」をモデルにしたもので、そのキャラクターが依存する組織や群に当たります。

 omake_overhaulでは更に拡大解釈されており、「そのキャラクターが依存する何か」の総称という事になっています。
具体的には信仰やギルド、組織や派閥といったものから、群れや性格、体質など全てが所属に当たります。

 所属の情報はfaction***.s?という名前のファイル名で保存され、既存のセーブデータに変更を加えません。 これにより、vanillaや他のヴァリアントへの移行を可能にしつつ、様々な機能拡張を実現します。

所属「アライメント」について

 これはTRPG「ダンジョンズ&ドラゴンズ」をモデルにしたものです。

 将来的には町人や行商人との取り引きや、ガードや冒険者との友好や敵対に大きな影響を与える要因にしたいと思っています。 しかし、今のところは、ほとんどお飾りに過ぎません。

所属「類」とそれによる敵対関係

 現状で重要なのはこちらです。 類とは群れの一つであり、モンスターの種族を最も大まかに分類したものです。

 vanillaでは全てのモンスターが一つの場所に集まり、何の問題もなく素直に共存していました。 しかし、もうそんな事は起こりません。 モンスターは派閥争いの結果それぞれの住処を定め、住処の定まっていないモンスターは自らの生存の為に、他のモンスターと命がけで闘います。

 具体的な話をしましょう。 あなたは強力なアンデッドモンスターと遭遇した。 あなたの実力では彼に敵わない。 しかし、あなたは彼を退けて先に進む必要がある。 そこであなたは野生召喚の魔法を使った。 出現した野生動物はあなたを無視し、アンデッドモンスターに突撃する。 その隙にあなたは脇道を抜け、階段に到達する事ができるでしょう。

 これは、ほんの一例に過ぎません。 類とそれによる敵対関係により、起こりえるゲームの筋書きは幾通りにもなります。

 どのモンスターがどの類に所属しているのかはあえて書かれていません。 しかし、概ね想像通りの類に所属しています。

所属「信仰」について

 omake_overhaulでは、信仰を所属の情報として管理しています。 これにより、移行を可能としつつ、vanillaには存在しない神の信仰が可能になりました。 財のイナリや水のダナリン、カスタムゴッド機能はその成果です。

所属「性格」について

 全てのNPCはいずれかの性格を得るようになりました。 「特徴と体質」のページで見る事ができます。

 今のところ、性格はゲームバランスとは何の関係もない、ただのお飾りです。 性格による能力ボーナスや思考ルーチンの切り替えも考えましたが、検討の末、却下しました。 性格とは非常に多種多様なもので、omake_overhaulでもそのようにしたいと思います。 それを能力ボーナスや思考ルーチンで表現するのは現実的ではないからです。

 正しい手続きを踏んでいる筈なのに何故かGoogle+が外部サービスに現れず、四苦八苦。


  • ドライブとドキュメント、Google カレンダー、Google トーク([コア Google Apps スイート] の下にあります)。これらのサービスのいずれかが一覧に表示されていない場合は、組織の Google Apps アカウントにそのサービスを追加する必要があります。詳細
     
  • [Picasa ウェブ アルバム]([その他のサービス] の下にあります)。[その他のサービス] セクションが表示されない場合、組織の Google Apps アカウントを新しいインフラストラクチャに移行する必要があります。詳細
     

Google+ の使用を開始する - Google Apps ヘルプ

 駄目元で関係なさそうなサービスの設定も変更してみたら、唐突に使えるようになった。

 上記のページには書かれていないが、コアサービスの「ドライブとドキュメント」も有効する必要があった。

 Java Advent Calendar 2011 の9日目を担当する事になりました冨永です。
8月末をもってタイレルシステムズを退社しまして、現在お仕事募集中です。

 今回の記事は去年に引き続きJoda-TImeの紹介です。

 Javaの標準APIでは日付だけ、時間だけを扱う事はできませんが、Joda-TImeでは日付だけ、時間だけを扱う事ができます。
また、日付情報と時間情報から日時情報を作成する事も可能です。

import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.joda.time.LocalTime;


public class JodaSample {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// 日付のみ
		LocalDate date = new LocalDate();
		System.out.println("date: " + date.toString());
		// 時間のみ
		LocalTime time = new LocalTime();
		System.out.println("time: " + time.toString());
		// 日付情報と時間情報から日時情報を作成
		DateTime datetime = date.toDateTime(time);
		System.out.println("datetime: " + datetime.toString());
	}

}

 出力は下記のようになります。

date: 2011-12-09
time: 14:39:18.913
datetime: 2011-12-09T14:39:18.913+09:00

 日付のみの情報はLocalDate、時間のみの情報はLocalTimeを使います。
LocalDateとLocalTimeはその性質上、TimeZoneと関連付いていないので注意してください。

 Java7では見送られてしまったJoda-Timeを参考にした新しいDate/Time APIがJava8には搭載されるそうなので、楽しみですね。

 お次のJava Advent Calendar 2011は10日目、担当はykubotaさんになります。
 google-ime-skkが素晴らしく便利なので、Windowsサービス化する事にした。
意外とつまずいたので、忘れないように下記にその手続きを書いておく。
なお、ActiveRubyが導入されており、google-ime-skkが正常に動作する前提で話を進める。

  1. win32-serviceのインストール

    こちらの記事を参考にインストール。 ここが一番つまずいた。
    「nmakeがコマンドとして認識されていないだの」「winsock2.hが見つからない」と言われてなかなか上手くいかなかったが、Microsoft Visual C++ 2010 ExpressをインストールしてVisual Studio コマンド プロンプト (2010)から実行であっさり成功した。
  2. サービスに登録するRubyスクリプトの作成

    google-ime-skkファイルを参考に下記の内容のスクリプトを作成
    #!D:/bin/ruby-1.8/bin/ruby.exe -Ku
    #
    # This file was generated by RubyGems.
    #
    # The application 'google-ime-skk' is installed as part of a gem, and
    # this file is here to facilitate running it.
    #
    
    require 'rubygems'
    require 'win32/daemon'
    include Win32
    
    class Daemon
      def service_main
    	version = ">= 0"
    
    	gem 'google-ime-skk', version
    	load Gem.bin_path('google-ime-skk', 'google-ime-skk', version)
      end
    
      def service_stop
        exit!
      end
    end
    
    Daemon.mainloop
  3. スクリプトをサービスに登録

    2.で作成したクリプトを上記の記事を参考にサービスに登録。
 巷で話題の"sleep sort"をAS3で実装してみた。

クリップボード01.jpgクリップボード02.jpg

 なけなしの収入をはたいてXperia arcを購入したので、さっそくAdobe AIR for Androidで作ってみました。
作った物は「音声を指定位置から再生する機能」が付与されているだけのごく単純なアラームアプリ。

 分かった事は、

  • 単純なアプリケーションであれば、少なくともXperia arc上での実行速度は問題ない
  • PC向けのAdobe AIRアプリケーションのコードぼそのままで問題なく動く
  • UIライブラリ「MadComponents」を試してみたが、意外と使い易い

 正直、かなりの好感触。

 実行速度については充分な検証が必要だけれども、ActionScriptは物理演算ライブラリが充実しているので、Adobe AIRで作る事で少なくともPCとAndroid端末間でのソーシャルアプリの移植が容易になりそう。

 これでAdobe AIR for iOSが期待通りの物であるならさらにAndroid端末とiPhone間でのソーシャルアプリの移植が楽になり、事実上ソーシャルアプリのマルチプラットフォーム化が可能に。 これからに是非期待したい。

Joda-Timeで期間を扱う

| コメント()
 java-jaの末席を汚す冨永和志と申します。 この度は25日分の担当をする事になりました。 よろしくお願い致します。

 堅苦しい挨拶はここまでにしまして、本題に入ります。

 今回の記事で取り扱うJoda-Timeライブラリの概要については、


 を、ご参照ください。

 今回私が書くのは、上記のマイコミジャーナルの記事には書かれていない期間情報の取扱についてです。

 Joda-Timeライブラリで期間情報を扱いたい場合、PeriodとIntervalDurationの2つのクラスがあります。 IntervalDurationは「期間の経過情報」で、Periodは単純に「期間の日時の比較情報」にあたります。

import org.joda.time.DateTime;
import org.joda.time.Duration;
import org.joda.time.Interval;
import org.joda.time.Period;


public class JodaSample {

/**
* @param args
*/
public static void main(String[] args) {
DateTime startDT = new DateTime();
DateTime endDT = startDT.plusDays(1).plusMillis(1);
Interval interval = new Interval(startDT, endDT);
Duration duration = interval.toDuration();
System.out.println("duration: " + duration.getMillis());
Period period = interval.toPeriod();
System.out.println("period: " + period.getMillis());
}

}

 上記のコードでは、日時情報を作成し、その日時から1日と1ミリ秒だけ進めた日時情報をもうひとつ作成して、二つの日時情報から期間情報を作成してミリ秒を出力しています。 結果は下記の通りになります。

duration: 86400001
period: 1
 Intervalが経過ミリ秒数を出力したのに対し、Periodは「日時情報におけるミリ秒の単位」の増減値を出力しました。

 Joda-Timeは日時情報を取り扱う際、大変便利で有用なライブラリなのでこれからもっと日本語の情報が増えると良いなと思います。

 さて、次のJava Advent Calendar -ja 2010は26日目、担当はshuji_w6eさんです。

 2011.10.24 追記
 IntervalとDurationを間違えていたので修正。
 初めまして、冨永和志と申します。
この度、大変危険な条例案が可決の危機にある旨、
一国民として憂いを覚え、メールを差し上げました。

 件の青少年健全育成条例改正案は前案の時点で大変危険な代物であり、
国民の思想の自由、表現の自由といった基本的人権に踏み躙るものであったにも
かかわらず、より適用範囲を広くし、かつ相変わらず曖昧な基準で、広く創作を
取締る事が許される修正案が再び提出され、あまつさえ可決されようとしています。

 そもそも、強姦や児童姦淫をテーマとした創作により性犯罪が増加し、子ども
の人権が
脅かされるという主張自体、「無根拠で乱暴な主張である」と、幾度となく指摘
されているにも
関わらず、行政が身勝手に口を出してはならない筈の「倫理」を盾に、反論を許さず
強引に指摘を殺そうとしている様は、正に「創作者の人権侵害」の構図です。

 表現はすべからく自由であるとは、私も思ってはおりません。
しかし、憲法第18条、憲法第31条に定める通り、刑事罰は合理的且つ
必要最小限の範囲に留める責務が、全ての国民にはあります。
 一部の人間の一部の勝手な倫理観により、全ての創作者の自由が侵害される
青少年健全育成条例改正案修正稿に、私は反対します。
(以下住所・氏名)

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。