UIEngine だ

技術者諸君これを使い給え。UIEngine(ユーアイエンジン)は携帯電話上でAJAX的なインタフェースを簡単に実現できる技術です。このブログではUJMLサンプルの紹介 UIEngineについて UJMLで作る便利なツール 等を載せています。

[UJML2.0]UJMLを学ぶ上での心構えのようなもの

Ujml2onlinedocs UJMLに限らず開発言語一般を学ぶときにいえるのだが、「使いながら慣れろ!」である。SDKに付属しているサンプルを当てにしない方が良い。それは、それで出来上がっているソースコードなので参考になるが、最初から学ぼうとするには長すぎる代物だ。

 できれば、とりあえずサンプルコードを引っ張りだしてきて、必要そうな所だけ10行程度残してデバッガー上で走らせて見るのが良い。だいたい、コンポーネントのときはexportじゃなきゃだめ!とか、コンポーネントは一つ以上のインタフェースをインプリメントしなきゃだめ!といったことはソースコードには書いていない。最後はドキュメントを読むことにはなるが、そんなことは誰かがまとめてWEB上にアップしてくれるので気にする必要は無い。

 だいたい、eclipseベースでオリジナルのSDK作るようなエンジニアがHelloWorld!的なソースを何本も系統立て手書くのが好きなはずがない(好きな人もいるかもしれないが)。つまり、SDKに初心者向けサンプルが付属されていることを期待してはいけない(いまのところ)。

 いま現在UJMLを学ぶのに最も効率的な方法は何か?自分でごりごりHelloWorldから始めて、色々書けるようにし(ここまでは自力でがんばれ)、しばらくたったら隣でUJML触っている人間をできれば4,5人引っ張りだしてきて、Tipsを洗い出すブレスト1時間するのだ。ブレストは月に2回もすれば充分。これでUJMLスキルは驚くほど向上するのは間違い無い。

2006/10/14 カテゴリー: UJML 初心者向け | 個別ページ | コメント (0) | トラックバック (0)

[UJML2.0]コンポーネントでインタフェースをaccess="export"としない場合のエラー

Interfaceerror_1  「[UJML2.0]オブジェクト指向関係まとめ」エントリーでオブジェクト指向についてポイントをまとめた。そこで紹介した3つ目のポイント

3.コンポーネント内で<interface>要素を書くときは、access="export"としなければならない。

について補足する。仮に間違ってimportと書いたり、access属性を省略するとコンパイル時に次のようなエラーメッセージが表示される。

ERROR 'file:///C:/work/UIE/samples/151_interface/hoge.ujml'  at line 8 ( Cannot implement member function "getX" on imported interface "IHoge" )

コンポーネント内でインタフェースを実装する際に、インタフェースの雛形をインタフェースのソース内からコピーすることが多いだろう。そうなると、access属性値は無いのでそのままにしやすいし、UJMLにおけるimport/exportはわかりにくいので間違えて逆に書くことも大いにある。

 気をつけよう。

2006/10/13 カテゴリー: UJML 初心者向け | 個別ページ | コメント (0) | トラックバック (0)

[UJML2.0]オブジェクト指向関係まとめ

Ujmllanguageref 前回及び前々回のエントリー

[UJML2.0] オブジェクト指向の最初の一歩

[UJML2.0]コンポーネントのロード方法について

それぞれのポイントをまとめた。

1.2つの重要な抽象概念「インターフェース」と「コンポーネント」がある。
2.コンポーネントを使うには一つ以上のインタフェースが必要である。つまり、コンポーネントには必ず一つ以上のインタフェースをインプリメントしなければならない。
3.コンポーネント内で<interface>要素を書くときは、access="export"としなければならない。
4.コンポーネントは一ファイルにひとつである。
5.コンポーネントを使用する手順をまとめると次の5段階となる。
 手順1.インタフェースをincludeする。
 手順2.インタフェースをimportする。
 手順3.<resource>を使ってコンポーネントをロードする。
 手順4._createInstance()を使ってコンポーネントをインスタンスを作成する。
 手順5.後はメソッドを呼ぶなりお好みで。

以上

2006/10/13 カテゴリー: UJML 初心者向け | 個別ページ | コメント (0) | トラックバック (1)

[UJML2.0]コンポーネントのロード方法について

Ujmlcomponent 前回のエントリー「[UJML2.0] オブジェクト指向の最初の一歩」で書いたことの続きを書く。前回エントリーは時間切れで途中で終わったのでその続きである。

 まず、書き忘れたことから。

「コンポーネントは必ずファイル別に定義する。」

つまり、一ファイル一コンポーネントということだ。コンポーネントファイルのファイルの拡張子はujmcとかなると思ったが、SDK付属のサンプルでは無難にujmlとなっている。

 さて、今回はコンポーネントを使う側の話だ。使う側は何をどう書くべきか?include?import?それとも他の何か?だろうか?まず、簡単にまとめると

1.インタフェースをincludeする。
2.インタフェースをimportする。
3.<resource>を使ってコンポーネントをロードする。
4._createInstance()を使ってコンポーネントをインスタンスを作成する。
5.後はメソッドを呼ぶなりお好みで。

の5ステップだろうか。サンプルを以下に掲載。そのままではコンパイルできないので注意。★部分を削除すればコンパイルできるはずだ。

<ujml>
    <interfaces>
        <include interface="IHoge" file="hoge.ujmi"/> ★1
    </interfaces>
    <application>
        <interfaces>
            <interface name="IHoge" access="import"/> ★2
        </interfaces>
        <state-variables>
            <state-var name="sLoad" type="int"/>
            <state-var name="sStart" type="boolean"/>
        </state-variables>
        <variables>
            <var name="mHoge" type="IHoge"/>
        </variables>
        <script>
            sLoad = 0;
        </script>

        <states>
            <state var="sLoad">
                <transition value="0">
                    <resources> ★3
                        <resource type="component">
                            <name>Hoge</name>
                            <url>hoge.ujbc</url>
                            <event name="onResourceAvailable">
                                <script>
                                    sStart = true;
                                </script>

                            </event>
                        </resource>
                    </resources>
                </transition>
            </state>
            <state var="sStart">
                <transition value="true">
                    <script>
                        _trace(
"start");
                        mHoge = _createInstance(
"Hoge");★4
                        _trace(_strcat(
"hoge.getX=",mHoge.getX(4)));★5
                    </script>

                </transition>
            </state>
        </states>
    </application>
</ujml>

2006/10/13 カテゴリー: UJML 初心者向け | 個別ページ | コメント (0) | トラックバック (1)

[UJML2.0] オブジェクト指向の最初の一歩

 UJML2.0より言語仕様にオブジェクト指向が取り入れられた。いきなりそんなこと言われても初心者は困るが、さわりだけ簡単に解説しよう。

 まず、2つの抽象的な概念が重要だ。

その1.インターフェース
その2.コンポーネント

この2つの概念があることを覚えたら、次に、覚えるべきは、

「コンポーネントを使うには必ず一つ以上のインタフェースが必要である。」

ということだろう。コンポーネントは一つ以上のインタフェースをインプリメントしなければならないのだ。

 これだけ覚えれば基礎は整った。後は書き方の問題が残っているだけだ。それでは解説しよう。まず、インタフェースの書き方。

--- ihoge.ujmi

<ujml>
<interfaces>
  <interface name="IHoge">
   ここにインタフェースの内容を記述
  </interface>
</interfaces>
</ujml>

のように書く。もちろん<interfaces>要素内に複数の<interface>要素を記述可能。関数<function>要素と<event>要素を記述可能。インタフェースファイルの拡張子はujmiとするのが慣例となるようだ。

 そして、このインタフェースIHogeをインプリメントしたコンポーネントHogeの書き方。

--- hoge.ujml

<ujml>
    <interfaces>
        <include interface="IHoge" file="ihoge.ujmi"/>
    </interfaces>
   
    <component name="Hoge">
        <interfaces>
            <interface name="IHoge" access="export"/>
        </interfaces>
        <functions>
            <!--
                Initializes the block.
            -->
            <function name="IHoge.getX" type="int">
                <parameters>
                    <var name="x" type="int"/>
                </parameters>
                <script>
                </script>
                <return><eval>x</eval></return>
            </function>
        </functions>
       
        <script>

        </script>
       
    </component>
</ujml>

のように書く。インタフェースIHogeにはgetXという関数が宣言されているので、コンポーネント内でgetXを実装している。ちなみに、最初の3行ぐらいにあるinclude文はJAVAで言うところのimportと同等?厳密に言うと違うが同じようなものだと覚えれば良いだろう。ここではincludeするのでコンパイル時にコンパイラーが分かるようにファイル名のパスをしっかり指定しよう。

 <component>要素内でIHogeをインプリメントしてexportする。コンポーネント書くときはここは必ずexportと書かなければならない。

 と、ここまで書いたところで時間が無くなったので続きは次回に。

2006/10/13 カテゴリー: UJML 初心者向け | 個別ページ | コメント (0) | トラックバック (1)

UJML/UIEngineの紹介解説が開始

Kami  UIEジャパンの中の人、それも結構初期の人、がUJMLの解説をブログで始めた。UIEngine/UJMLに対する視点が違うからか、最初に紹介する内容が私とは全く異なっていて興味深い。

 「神は細部に宿り給う」では、まず、docomoの携帯でアプリを走らせる近道を紹介している。

神は細部に宿り給う UJML第1回 はじめの一歩
http://tkido.blog43.fc2.com/blog-entry-193.html

ちなみに私の初エントリーはこちら、

UIEngine だ: 書初め
http://uiengineda.blogs.com/uiengine_/2006/01/post.html

最初の頃は文句ばかり書いている感があるが、それがこのブログを継続させようと決意するに至ったのだから不思議なものだ。

2006/10/06 カテゴリー: UJML 初心者向け | 個別ページ | コメント (0) | トラックバック (0)

UIEngine/UJML開発環境のバージョンについて

Sdkdownload  開発環境としてUIEより提供されているSDKには2種類のバージョンがあるのだが、両方のバージョンをインストールしても全く問題無い。SDK2.0はEclipseプラットフォームを利用したSDKだが、1.5は独自のSDKゆえ、1.5をインストールした後、2.0をインストールしても1.5はそのまま使用できる。

 敢えて古いバージョンを使う必要も無いと思うが、1.5を使用しなければならなくなったとしても気軽に1.5をインストールして良いだろう。

 このエントリーは以前から書こうと思っていたのだが今日やっと思い出すことができた。

UIEvolution Developer :: Developer - UIE® SDK Download
http://developer.uievolution.com/developer/download.php

2006/10/06 カテゴリー: UJML 初心者向け | 個別ページ | コメント (0) | トラックバック (0)

コメントに何を残すべきか?まず、ステート変数の設定時には何かコメントを残そう。

 前回のエントリーでは、

[UJML2.0] コメントに何を使いますか?まずはコメント要素の使用を優先的にすべし!

コメントを残すときに<comment>要素を使うことを推奨した。

 その中ではコメントとして何を残すべきか?ということには触れていない。コメントに残す内容は基本的には他の言語と同じで良いが、本ブログで推奨するのは、ステート変数に値を設定したら、そこにコメントを残すことである。

 というのも、UJMLを学ぶ上でのくせものはステート変数、慣れてしまえばどうということは無いが、いきなりプログラム文中での処理が飛ぶという意味でも、ステート変数の値設定箇所にコメントを残すことを推奨する。

 例えば、次のようにするだけで良い。

// 中央の画像を再描画する。
sImage=true;

これで可読性がかなりあがる。

2006/10/04 カテゴリー: UJML 初心者向け | 個別ページ | コメント (0) | トラックバック (0)

[UJML2.0] コメントに何を使いますか?まずはコメント要素の使用を優先的にすべし!

 UJML2.0ではコメントの記述方法として新しく<comment>要素が追加された。当ブログではコメントを記述する際、まず<comment>要素を使うことを強く推奨する。できれば、このエントリーを読んだ方に強制したい。(1.5では使えないが)

 これまで、<script>要素中での、

一行コメント //
複数行コメント /* */

や、どこにでも書ける、

複数行コメント <!-- -->

がサポートされてきた。最新のUJML2.0から<comment>要素が仕様として追加された。その意図はさておき(知りたい人はフォーラムで聞いてくれ)、繰り返すが<comment>要素の使用を強く推奨したい。

 というのも、UJMLはxmlベースゆえスタイルシート変換等で俗に言うプログラムやモジュール仕様書(例えばJavaDocのようなHTML等)を簡単に生成できる。このとき<comment>要素を使用していれば、簡単に仕様書にコメントを載せたりできるが、<!-- -->や//、/* */を使われると困る。

 もちろん<comment>要素を書けない場所も多いので、その場合にはそれ以外の方法で書かなければならないのだが。

 今後大規模なUIEngineアプリ開発に従事するエンジニアが増えると思う。まず<comment>要素を使っておくほうが今後の為に良いのでそうして欲しい。(参加プロジェクトにおいてスタイルシート変換で仕様書作成していなくても、いつかの誰かの為に)

 と、具体例で説明したが、<comment>要素を使うということは、「意味あることを書いているよ!」と高らかに宣言しているのだ、と感じる。しつこいようだが、とにかく、<comment>要素を使って欲しい。

2006/10/04 カテゴリー: UJML 初心者向け | 個別ページ | コメント (0) | トラックバック (3)

[UJML2.0]動的配列について _resizeArray()という関数

 UJML2.0では動的な配列を使えるようになった。但し、ステート変数は動的配列をサポートしない。使えるのは普通の変数のみである。

 動的配列を使用するときには、変数の宣言時に配列の要素数を0(ゼロ)とする。配列の要素数を変更する場合にはスクリプト要素内で_resizeArray()という関数を呼ぶ。

 例えば、

<var name="mListeners" type="ITimerListener" size="0"/>

のように宣言し、

_resizeArray(mListeners, 10);

と要素数を変更する。この関数の第一引数には配列変数名を、第二引数には変更後の要素数を渡す。

 配列要素数を変更した場合、既存要素の値には何の影響も与えない。例えば、5要素の配列を10要素に _resizeArray() しても、0-4の要素の値は変わらないということだ。配列の要素数を減らしたときでも同じことが言える。

参考リンク:

UJML2.0言語リファレンス _resizeArray()
http://developer.uievolution.com/docs/en/LangRef/_resizeArray().html

2006/10/01 カテゴリー: UJML 初心者向け | 個別ページ | コメント (0) | トラックバック (0)

« | »

UIEngine/UJML初心者向け

  • 01 初心者向けまとめページ
  • 02 UJMLサンプル一覧(001-025)
  • 03 UJMLサンプル一覧(026-050)
  • 04 UJMLサンプル一覧(051-075)
  • 05 UJMLサンプル一覧(076-100)
  • 06 UJMLサンプル一覧(101-125)
  • 07 学ぶ前に読む10の記事
  • 08 UIEに入りたい人用10の記事
  • 09 UIEngine関連10のブログ

最近の記事

  • 2013年になっておりました
  • 2010年もあと少しですね
  • Bellevue
  • 事業の譲渡とか情けとか
  • Google App Engine Java と Axis
  • プログラミングの楽しさ
  • いろんな変化とか - linkedin 使えない -
  • More Joel on Software
  • 浦島太郎とチップスター
  • 自分の足跡について考えてみた tracのtimelineとGoogleの検索履歴

ブログリンク

  • HOW DO YOU LIKE SILICON VALLEY?
  • It's not about the DBMS

カテゴリー

  • centos
  • FlashLite^^
  • gnizr
  • JAVA
  • PHP
  • Pligg
  • SDKを使い込む
  • Seasar
  • UIEngine 疑問
  • UIEngine注目指数
  • UJML Samples
  • UJML Source解説
  • UJML 初心者向け
  • wordpress
  • ひたすら開発
  • インサイド UJML
  • ブログ(お知らせ)?
  • プログラム
  • プロトタイプ
  • ユーザーインターフェース
  • 働きやすい環境整備\(^^)/
  • 勉強while(true)
  • 技術全般++;

おまけ

フィードを購読
Blog powered by TypePad

アーカイブ

  • 1 月 2013
  • 12 月 2010
  • 6 月 2010
  • 4 月 2010
  • 11 月 2009
  • 10 月 2009
  • 6 月 2009
  • 5 月 2009
  • 1 月 2009
  • 12 月 2008

もっと見る