2011年5月27日金曜日

An Open Source, HTML5 Framework for iPad E-books

A group of Italian developers has just released a free and open-source framework for creating e-books for the iPad.

The Baker E-book Framework allows designers and developers to turn fixed-width HTML5 pages into an e-book format and publish the finished product. After that, all you need to do is follow the App Store submission guidelines, and you're on your way to e-book greatness.

To design for the Baker Framework, simply build HTML5 pages with a fixed width of 768 pixels. You can test your HTML versions on an iPad using the Safari browser and iterate accordingly.

Don't own an iPad? No problem. You can even test your e-book in a regular web browser without an iPad; just download the 768px-support ZIP file from Baker's site.

E-book files are then packaged in the HPub format. You give Baker one folder containing all your HTML files and other materials, named 1.html, 2.html, etc. The HPub format is still under development; the developers on this project say the final format won't require every page to be named in this way.

Finally, you download the Baker Framework, rename the Xcode project and include your book and icon. At that point, your e-book is ready for App Store submission.

To see an example of a Baker-created e-book, check out this free title, 5×15 Tokyo [iTunes link]:

"HTML5 is out there," co-founder Davide Casali wrote us in an e-mail. "Why is nobody really making the convergence between the publishing industry and the web, and why are we confined to those crappy designed epubs?" he asks.

Casali and his team hope their creation will lead to more beautiful e-books and digital magazines on the iPad, and for other WebKit-enabled devices later.

You can download all the Baker Framework files at the official site, and you can get involved with the project itself on GitHub(https://github.com/simbul/baker).

Do you think this will lead to more and better designed e-books on the iPad and possibly even play a role in the rise of tablets as e-readers? Let us know what you think of the Baker Framework in the comments.

完全なモバイル Web ソリューションとして Sencha Touch を利用する

概要: モバイル Web アプリケーション開発には、モバイル・プラットフォームに依らない 1 つのアプリケーションの作成を通じて多数のユーザーを得られるという期待に溢れています。そんなモバイル Web アプリケーションの開発を支援する優れたフレームワークとして、この連載ではこれまでいくつかのフレームワークを取り上げてきました。サポート対象とする機器を Android または iOS に絞り込むことによって、アプリケーションの複雑さは大幅に減り、実現可能な機能の数は増大します。これがまさに、Sencha Touch の背後にある理念です。以前は Ext JS と呼ばれていた、JavaScript ライブラリー・ベースのモバイル Web アプリケーション・フレームワーク、Sencha Touch は、実際のところ、ハイエンドのスマートフォン向けの完全なモバイル Web ソリューションを提供します。

Web 開発の経験がある方ならば、Sencha の名前は耳にしたことがあるでしょう。あるいは、Ext JS と呼ばれていた頃、さらには YUI-Ext (Yahoo! UI フレームワークの拡張機能) と呼ばれていた時代に使用したことがある方もいるかもしれません。ここ数年の間に、このフレームワークは YUI-Ext、Ext JS、Ext 2.0、Ext 3.0 とさまざまに名前を変え、現在の Sencha Touch という名前に至っています。モバイル Web アプリケーションに新たに重点を置くようになった理由は、一部に jQTouch が Ext JS に「マージ」されたことによりますが、この記事を読むとわかるように、Sencha Touch は jQTouch とはまったく異なります。

まず、Sencha Touch は jQuery にはまったく依存せずに、Ext JS をベースに作成されています。言うまでもなく、Ext JS はこれまでずっと、jQuery や Prototype などの他の JavaScript ライブラリーとの親和性に定評がありました。また、Ext JS のセールスポイントには、よりオブジェクト指向な API 一式を完備したウィジェット・ライブラリーも含まれます。これらの機能は Sencha Touch にも備わっていますが、Sencha Touch のウィジェット・ライブラリーは一新されていて、特に iOS および Android 機器のモバイル・ブラウザーを対象に最適化されています。Sencha Touch をモバイル Web アプリケーションに利用する方法について理解を深めるには、サンプル・アプリケーションを見てください。このサンプル・アプリケーションは、連載のこれまでの記事のそれぞれで構築したイントラネット用の従業員ディレクトリー・アプリケーションを新しくしたバージョンです。サンプル・アプリケーションのソース・コードについては、「ダウンロード」を参照してください。

Sencha Touch アプリケーションの開発
この連載では、これまでクライアント・サイドの Web アプリケーション・フレームワークをいくつか取り上げてきました。これまで取り上げたフレームワークと Sencha Touch とを区別するものは何かと言うと、その答えは、Sencha Touch は Ajax 呼び出しを行うためのユーティリティーから、豊富な UI ウィジェットまでのすべてを揃えた完全なフレームワークであるとともに、モバイル Web ブラウザー用に作成されているという点です (具体的には、Sencha Touch は iOS および Android 機器の WebKit ベースのブラウザー用に作成されています。けれども、モバイル分野では WebKit ベースのブラウザーが優勢を保っていることから、Sencha Touch が対象とするモバイル機器のリストは将来的に拡大される可能性があります)。この Sencha Touch とモバイル Web ブラウザーとの組み合わせは独特であり、極めて魅力的でもあります。
さらに、Sencha Touch は、まだその真価が問われていない新しいモバイル Web フレームワークというわけではありません。Sencha Touch に進化するまでのフレームワークは、長年にわたって Web 開発者たちの間で人気を誇ってきました。Sencha Touch はアクティブな開発者たちによって支えられ、このフレームワークを中心とした大きなコミュニティーも広がっています。しかも、Adobe の ColdFusion のような大規模な開発フレームワークが Sencha Touch を再パッケージ化して再利用しています。
ご推察の通り、Sencha Touch が Web 開発者の間で大きな人気を博している理由は、Ext JS の多くの機能を引き継いでいるためです。Sencha Touch はアプリケーションを開発するための完全なフレームワークとなるだけでなく、オブジェクト指向のフレームワークにもなります。遥か以前の Smalltalk-80 の時代まで遡ると、当時のユーザー・インターフェース・フレームワークではオブジェクト指向モデルが使用されていました。オブジェクト指向プログラミングはすべてのプロブラミング問題にとって最善の解決策となるわけではありませんが、大多数のユーザー・インターフェースの問題には適しています。JavaScript はオブジェクト指向であると見なせるものの、通常のオブジェクト指向のようにクラスをベースにしてはいません。JavaScript が使用しているのは、プロトタイプ・ベースのオブジェクト指向プログラミングです。したがって、開発者はクラスを継承する代わりに、クラスのインスタンスを複製してそのプロトタイプを変更し、既存のオブジェクトをオーバーライドするか、新しい振る舞いを追加するという方法を採ります。大抵の開発者は、このようなスタイルのオブジェクト指向プログラミングには慣れていません。慣れているのは、クラス・ベースの継承です。そこで、Ext JS は、開発者がクラス・ベースのオブジェクト指向プログラミングを行えるようにする、JavaScript をベースとしたユーティリティーを提供しています。しかもさらに踏み込んで、従来の (クラス・ベースの) オブジェクト指向コンポーネント・モデルを使用する広範な UI ウィジェット・ライブラリーまで作成しています。それと同時に、Ext JS はイディオムのような JavaScript を使用します。例えば、ほとんどのExt JS オブジェクトのコンストラクターは、唯一の入力引数としてJavaScript オブジェクト・リテラルを取ります。このオブジェクトは構成オブジェクトであると見なせますが、多くの点で、名前付きパラメーターを引数に持つコンストラクターを使用しているのと同様です。これは、オブジェクトを正しく構成するためにコンストラクターに渡す必要のある値のリストがかなりの長さになる可能性がある場合には極めて好都合です。
もちろん、Sencha Touch は単なる Ext JS ではなく、モバイル Web 用に最適化されています。これは、そのウィジェットが小さな画面を念頭に設計されているというだけでなく、タップやスワイプなどのタッチ・イベント、そして機器の向きの変化に対処するように設計されていることも意味します。全体的に見て、これは非常に強力な機能セットです。ただし、ほとんどの開発者にとって百聞は一見に如かずなので、実際に Sencha Touch で駆動するサンプルのモバイル Web アプリケーションを紹介します。

データ・モデル、ストア、Ajax
この記事で用いるサンプル・アプリケーションは、連載で使用してきた従業員ディレクトリー・アプリケーションとはまた別の実装です。このアプリケーションは従業員とそれぞれの連絡先情報のリストを表示することを思い出してください。Sencha Touch では、アプリケーションのデータ・モデルを定義することができます。Employee のデータ・モデルは、リスト 1 のようになります。

リスト 1. Sencha Touch スタイルの Employee データ・モデル

Ext.regModel('Employee', {
fields: [
{name:'firstName', type: 'string'},
{name: 'lastName', type: 'string'},
{name:'email', type:'string'},
{name: 'phone', type: 'string'}
]
});

Sencha Touch では簡単にモデルとそのフィールドを定義できるようになっており、それぞれ名前と型を定義するフィールドの配列を指定すればよいのです。その結果、この後説明するように、このモデルを UI コンポーネントと併せて使用できるようになりますが、とりあえず今のところは、構文解析して Employee オブジェクトにすることができるリモート・データをロードします。このタスクには、Sencha Touch のデータ・ストア・オブジェクト (そして、ちょっとした Ajax) を使用します。データ・ストアを定義する方法は、リスト 2 のとおりです。

リスト 2. Sencha Touch データ・ストアの作成

var store = new Ext.data.JsonStore({
model : 'Employee',
sorters: [
{property: 'lastName', direction: 'ASC'},
{property: 'firstName', direction: 'ASC'}
],
getGroupString : function(record) {
return record.get('lastName')[0];
},
proxy : {
type : 'ajax',
url : 'app/employees.json',
reader : {
type : 'json',
root : 'employees',
idProperty : 'email'
}
},
autoLoad : true
});

データ・ストアは、Sencha Touchフレームワークに欠かせない重要な部分です。データ・ストアが提供するモデル・オブジェクトのクライアント・サイドのキャッシュは、このフレームワークのさまざまな UI コンポーネントで利用することができます。その役割は、リモート・データの取得、データのクエリー、データのソートなど、さまざまです。リスト 2 のストアは、そのモデルとしてリスト 1 で登録された Employee を宣言し、続いてそのデータ (lastName および firstName) に対するソーターを宣言しています。これにより、データの自然なソートが行われ、lastName を基準に昇順でソートされてから、同じく昇順で firstName を基準にソートされることになります。次にストアが宣言しているのは getGroupString 関数です。この関数をストア内の各レコード (Employee) に適用することで、それらのレコードをグループ化することができます。上記の例ではこの関数に対し、lastName を引数に取り、その最初の文字を使用するように指示しています。こうすることによって、例えばラストネームが「G」で始まるすべての従業員が 1 つのグループにされることになります。この関数が使用されるのは、グループ化をサポートする UI コンポーネントのなかでのみです。これから使用するコンポーネントはグループ化をサポートするので、この関数をストアに追加して、グループ化を利用できるようにしてください。

次のセクションでは、ストアのプロキシーを記述します。Sencha Touch には、数種類のプロキシーがあります。その 1 つは、HTML5 の localStorage オブジェクトを使用する Ext.data.LocalStorageProxy というプロキシーです。localStorage を使ってデータをローカルに保存してある場合、そのデータを LocalStorageProxy を使ってロードして、Sencha Touch の UI コンポーネントで使用することができます。これは、Sencha Touch が iOS と Android のブラウザーで使用可能な HTML5 機能を提供する方法を説明する好例です。
リスト 2 の例に使用するデータは、まだローカルに保管されていません。データはリモート・サーバー上にあり、Ajax を使用してロードする必要があります。そこで、このストアには Ext.data.AjaxProxy のインスタンスとなるプロキシー・オブジェクトを宣言します。このようなオブジェクトを明示的に作成して、それをストア・オブジェクトの config オブジェクト (コンストラクター) 内に指定することもできますが、ここではプロキシーにconfig オブジェクトを指定し、よりイディオムに近い JavaScript を使用する方法を選びました。AjaxProxy インスタンスを取得するには、プロキシーの type プロパティーを指定し、続いてデータを取得するための URL を指定すればよいのです。
次に指定するのは、Ext.data.Reader のインスタンスを指定する reader プロパティーです。このオブジェクトを使用して、サーバーから受信した状態のデータを処理し、プロキシーがストアに提供するモデル・オブジェクトのインスタンスに変換します。ここでもまた、ストアとそのプロキシーの前に明示的に Reader のインスタンスを作成することもできましたが、代わりに config オブジェクトとして渡される JavaScript オブジェクト・リテラルを使ってリーダーを構成するという方法を採りました。リーダーを作成するには、想定するデータの種類 (JSON)、データ構造のルート要素、そして ID として使用するモデルのプロパティーを指定します。そして最後に、データの autoLoad を実行するようにストアを構成します。つまり、ストアができるだけ早くデータを取得できるようにします。これで、ストアの作成が完了し、ストアをサポートするリモート・データがロードされました。次はこのデータを使って、モバイル用に最適化されたユーザー・インターフェースを作成します。
モバイル用に最適化されたウィジェット
Ext JS はこれまで常に、直観的なオブジェクト指向の API 一式によって支えられた豊富な UI ウィジェットを提供するフレームワークとして知られてきました。Sencha Touch もこの伝統を引き継いでいますが、このフレームワークに含まれているのは、モバイル機器を対象に設計されたウィジェットです。このサンプル・アプリケーションでは、モバイル機器で最適に表示されて円滑に機能する、何らかの形の従業員リストを作成する必要があります。このような一般的な使用例に対応するために Sencha Touch が提供しているのが、Ext.List コンポーネントです。リスト 3 に、List コンポーネントを使用して、このアプリケーションで従業員オブジェクトを表示する方法を示します。

リスト 3. List コンポーネントの使用

var list = new Ext.List({
store : store,
tpl : new Ext.XTemplate(
'<tpl for=".">',
'<div class="contact">',
'{firstName} <strong>{lastName}</strong>',
'</div>',
'</tpl>'
),
itemSelector : 'div.contact',
singleSelect : true,
grouped : true,
indexBar : true,
floating : true,
width : 350,
height : 370,
centered : true,
modal : true,
hideOnMaskTap: false,
fullscreen : true
});

List コンポーネントに最初に指定するのは、このコンポーネントの store プロパティーです。データ・ソースとなるのはリスト 2 で作成した store インスタンスなので、単純にこのインスタンスをプロパティーに指定します。次に指定するのは tpl プロパティー、つまりテンプレートです。tpl は、ストア内の従業員オブジェクトのそれぞれに適用されます。Sencha Touch では単純なテンプレート言語を使って、動的データ要素を組み込んだ HTML を作成することができます。これは、JSP (Java Server Pages)、PHP、または ERb (Embedded Ruby) テンプレートと同様の仕組みです。例として、firstName = 'John' および lastName = 'Smith' となっている従業員がいる場合、上記の tpl プロパティーはリスト 4 の内容を生成します。

リスト 4. Sencha Touch テンプレートで生成された HTML の例

<div class="contact">
John <strong>Smith</strong>
</div>

リスト 3 に話を戻すと、次に指定するのは itemSelector プロパティーです。これは、コンポーネントがイベントを発生させたときに、Sencha Touch が処理対象のノードを判断するために使用する CSS セレクターです。この後すぐにわかるように、Sencha Touch にはカスタマイズできる有用な多くの振る舞いが組み込まれていますが、これらの振る舞いを利用するには、itemSelector プロパティーを指定する必要があります。この例では、リストに含まれる従業員オブジェクトのそれぞれが、contact クラスを指定した div の中にラップされるという点を利用します。
リスト 3 では、List コンポーネントを作成するために、他にもいくつかのプロパティーが config オブジェクトに設定されています。これらのプロパティーのほとんどは、単純な UI 関連のプロパティーですが、興味深いプロパティーとしては singleSelect と grouped の 2 つがあります。前者はリスト内の複数の項目を一度に選択できるかどうかを指定するプロパティーです。後者はリスト内の項目をグループ化するかどうかを指定するプロパティーで、この例では true に設定されています。このグループ化を処理する関数 (getGroupString) を指定する方法は、リスト 2 に記載したとおりです。最後にもう 1 つ注意しておく点として、indexBar プロパティーはリスト内を移動するための索引を生成します。

Sencha Touch は iOS 機器の場合でも、Android 機器の場合でも、同じように魅力的な UI を作成します。リスト 1 で登録したモデルをもう一度見てみると、アプリケーションが保管しているデータは、リスト・ビューに示されているデータよりも多いことがわかります。そこで、ここからは、ユーザーがリスト・ビューから開くことのできる従業員の詳細ビューを作成する方法を説明します。

イベント処理とテンプレート
Sencha Touch は、タップ、スワイプ、ピンチ・ズーム、さらにはローテーションなどのモバイル機器やタッチ機器に固有の便利なイベントを数多く提供しています。このサンプル・アプリケーションで最終目標とするのは、ユーザーがリスト・ビュー内の従業員をタップすると、その従業員に関する詳細情報が表示されるようにすることです。リスト 5 に、この目標を達成する方法を示します。

リスト 5. 詳細パネルのオープン

list.on('itemtap', function(dataView, index, item, e){
var employee = dataView.store.data.items[index].data;
var template = new Ext.XTemplate(
'<p>Name: {firstName} {lastName}</p>',
'<p>Email: {email}</p>',
'<p>Phone: {phone}</p>'
);
var str = template.apply(employee);
var panel = new Ext.Panel({
floating : true,
width : 250,
height : 155,
centered : true,
modal : false,
hideOnMaskTap: false,
dockedItems: [{
dock: 'top',
xtype: 'toolbar',
title: employee.firstName + ' ' + employee.lastName
},{html:str}]
});
var btn = new Ext.Button({
text: 'Close',
ui: 'action',
handler: function(){
panel.hide();
}
});
panel.addDocked(btn);
panel.show();
});

タップ・イベントを処理するには、list の on 関数を使用して itemtap イベントをリッスンすればよいのです。Sencha Touch に含まれるすべての UI コンポーネントにはこれと同様の on 関数がありますが、リッスンする対象にできるイベントは、コンポーネントによって異なります。ここでは単純に itemtap をリッスンして、このイベントが発生したときに実行する関数 (closure) を渡してください。この関数には Ext.DataView オブジェクト (Ext.List の親クラス)、タップされた項目の索引、タップされた UI ノード、そしてイベント・オブジェクトが渡されます。リスト 5 では、dataView (つまり、List コンポーネント) が、タップされた従業員の名前に対応する Employee オブジェクトを取得します。ここでも Sencha Touch のテンプレート・システムを利用して、タップされた従業員の連絡先情報を表示する HTML を作成します (この例では、template の apply メソッドを使って直接 HTML を作成することに注意してください)。次に、 Ext.Panel オブジェクトを作成します。これも、Sencha Touch でよく使用されている UI ウィジェットの 1 つです。パネル内のタイトル・バーと閉じるボタンの両方を作成し、この 2 つのオブジェクトを HTML テンプレートと一緒にパネルに配置します。閉じるボタンには、単にパネルを閉じるだけのハンドラー関数を指定してください。これで、後は単純にパネルを表示すればよいのです。

このように、100 行足らずの JavaScript で、Ajax を使用してリモート・データをロードするインタラクティブなモバイル Web アプリケーションを作成しました。このアプリケーションは、iOS 機器でも、Android 機器でも同じように上手く機能します。これで、Sencha Touch に大きな関心が集まっている理由がわかったはずです。Sencha Touch は、不要なボイラープレート・コードを省いた有用な機能をふんだんに提供してくれます。

まとめ
この記事では、Sencha Touch が完全なモバイル Web アプリケーション・フレームワークとなっている経緯と理由を見てきました。Sencha Touch はデータの取得からモバイル対応の UI の作成、そしてタッチ・イベントの処理に至るまで、あらゆる作業を引き受けてくれます。Sencha Touch は、アプリケーション開発者にとって親しみやすいオブジェクト指向プログラミングのパラダイムを提供すると同時に、オブジェクト・リテラルやクロージャーなどの JavaScript が持つ強力な機能の多くを利用します。新しく進化している分野、つまりモバイル Web の分野でのこのフレームワークの完成度と機能は注目に値します。Sencha Touch は多くの点において瞬く間に、他のフレームワークを評価する際の究極の基準となりました。

HTML5 mapping

Tile5 is an opensource HTML5 mapping javascript library that gives developers the ability to use existing mapping engines and provide a rich HTML5 experience. Tile5 can also be used to create more generic HTML5 tiling interfaces.

Tile5 is targeted primarily at mobile devices that support HTML5. Our goal is to achieve compatibility with all mobile devices considered "Class A" on the jQuery Mobile GBS chart. Longer term we intend to support the various desktopbrowsers as well (some even work right now).
Tile5 also plays nice with a variety of Mobile Web UI Frameworks.

http://www.tile5.org/
https://github.com/sidelab/tile5

5 Ways HTML5 Is Changing Mobile Advertising

Close to five years have passed since the early mobile ad networks emerged with basic banners on mobile screens. Despite numerous attempts at innovation, there are still very few mobile ad unit technologies being used by major networks or agencies. Many have just relied on the same basic banner ads that were used five years ago.
When Apple's iAds came on the scene several months ago, it was considered a game-changer. While Apple believed it was setting a new standard for the quality of ads on the mobile device with its use of animation, sound and video, the company has since drawn criticism for production delays of initial iAd campaigns. Apple has managed to introduce a few campaigns from top brands including Nissan and Unilever in the past few months, but its early challenges underscore the struggles with innovation that have plagued the industry over the years. The question is, why?

The Introduction of HTML5

A large part of the issue is that many rich media ad technologies are proprietary and closed platforms. None of the mobile ad integration kits for apps are interoperable with each other. The technical barrier for running a mobile rich media ad campaign is very high.
With iAds demonstrating that HTML5 is a viable option for mobile ad development today, the industry will see more progress. HTML5 and compatible HTML5-based ad formats will have a major impact on the future of the mobile ad industry. Here are the five reasons why HTML5, an open standard, will change mobile advertising the way Flash changed it for the desktop.

1. Open Systems Support Speed And Scale

When ads are programmed using HTML, agencies can give the work to their own designers and developers. It saves time and money to put the creative control back in their hands instead of having to go back and forth with third-party vendors or ad networks.
Some rich media ad technologies may be based on open standards, but they are generally all closed systems where it often takes one or two months to get the ad unit developed and tested. After all, earlier HTML versions resolved the content creation bottleneck in the early days of the world wide web as well.

2. HTML Can Run Anywhere

HTML can be downloaded from an ad server and displayed on the web and in apps. The ability of apps to render HTML is a huge boost. Android and iOS support HTML5, and soon all major smartphone platforms will follow suit. The same can't be said for Flash and other Flash lookalikes. One of the key issues in extending desktop campaigns to mobile is dealing with the fragmentation of that audience by diverging technologies.
Let's take the recent extension of the Nissan Leaf campaign to mobile platforms. One vendor could have developed a Flash creative for the desktop web. Another vendor could have converted it to run in Android apps. Yet another vendor might support it to run on mobile web browsers. Apple could also use iAd to run the campaign on iPhone apps. Imagine the headache a media agency would have customizing that ad to run across all of these different platforms. HTML5 can be leveraged to solve that.

3. Tracker Compatibility

What's the point of extending a campaign to mobile devices if you can't get the delivery and brand interaction metrics right? This is another point easily solved by the unifying nature of HTML/JavaScript-based ad units. Agency ad servers can track banner impressions and clicks across many devices and technologies and produce a single report.
This is a more reliable approach than collecting various reports out of different mobile platforms, which are all calibrated according to different methodologies. For example, most in-app mobile ad servers count an impression every time an ad is requested from the server, while web servers track an impression only after the ad is displayed.

4. Lightweight Ad Display Engine

You may well be aware of the ongoing HTML5 vs. Flash debates happening across the industry and the web. One of the arguments in that debate is the potential quality and performance problems that plug-in technologies can suffer. With rich media advertising for mobile, much of the same concept stands.
When a mobile application developer integrates a rich media ad kit, it adds weight and can cause application performance issues. On the other hand, the code involved in leveraging the browser as the ad rendering engine is comparatively lighter and simpler, thus more suitable for resource-constrained mobile devices.

5. Design Flexibility

Last but not least, HTML5, CSS3 and JavaScript offer remarkable design flexibility and capability, which is unlikely to be trumped by a single technology compatible with so many mobile devices. It doesn't require downloading of potentially insecure pre-compiled binaries and it doesn't necessitate any heavy UI framework to be bundled with the app. For instance, the iPad apps for The Wall Street Journal and Popular Mechanics use HTML5 exclusively for their advertisers.
Based on a dozen or so major app publishers I've spoken to, the majority are either already serving HTML5-based display ads in their mobile tablet or smart phone apps, or they are considering it in the near future. There are even app developers who are collaborating on open source software development kits to create a rich media mobile advertising standard based on HTML5 with some extra native application hooks.
While display advertising on mobile devices may not reach full maturity for a while, the need to de-fragment the platforms on a technical level is key right now. Bridging the gap between the mobile web and apps has pushed the technology to evolve towards a cross-platform architecture. It is an exciting time for interactive developers and designers.