TitaniumのWebViewでProcessing.jsを使ってみる。

タイトルの通りTitaniumのWebView内でprocessing.jsを動かしてみました。
Titanium側からevalJSを使ってprocessingのloopを操作 しています。
それだけですが、思ってたより全然簡単で驚きました。簡単なリズムゲームとか作ったら楽しそう。
webViewでやった方が簡単だから…的記事時々見かけるのなんでかなんとなくわかった気がする。

processingに慣れてないなら普通にjavascriptでやった方がいい気もします。僕は慣れてない方の人です。おいおい!って。

雑なコードは以下。

app.js

Ti.UI.setBackgroundColor('#000');
var tt = {}
tt.ui = {};
tt.ui.createProcessingView = function() {
	var win = Ti.UI.createWindow();
	var web = Ti.UI.createWebView({top:0,right:0,bottom:0,left:0});
	web.url = '/src/processing.html';
	win.add(web);

	var controller = Ti.UI.createView({
		bottom: 0,
		width: Ti.Platform.displayCaps.platformWidth,
		height: 50,
		layout: "horizontal"
	});
	var labelSetting = {
		width: controller.width/2,
		textAlign: "center",
		backgroundColor: "#FFF",
		font: {fontSize:16, fontWeight:'bold', fontFamily:'Helvetica'},
		height: controller.height,
		text: "start"
	};
	var startLabel = Ti.UI.createLabel(labelSetting);
	startLabel.text = "start";
	controller.add(startLabel);
	var stopLabel = Ti.UI.createLabel(labelSetting);
	stopLabel.text = "stop";
	controller.add(stopLabel);
	win.add(controller);

	startLabel.addEventListener("click", function() {
		web.evalJS("startSketch()");
	});
	stopLabel.addEventListener("click", function() {
		web.evalJS("stopSketch()");
	});

	return win;
}

var wwin = tt.ui.createProcessingView();
wwin.open();

processing.html

<!DOCTYPE html>
<html>
<head>
	<title>Hello Web</title>
 	<script src="processing-1.3.6.min.js"></script>
 	<style>
 		* { margin:0; padding:0; }
		html, body { width:100%; height:100%; }
		canvas { display:block; }
 	</style>
</head>
<body>
<canvas id="sketch"></canvas>
<script type="application/javascript">
	function sketchProc(processing) {
		var Ps = processing;
		var width = window.innerWidth;
		var height = window.innerHeight;
		Ps.setup = function(){
			Ps.size(width, height);
			Ps.smooth();
		};
		Ps.draw = function() {
			Ps.background(100);
			Ps.fill(200);
			Ps.noStroke();
			for(var i=0; i<100; i++){
				var c = Ps.random(10, 15);
				Ps.ellipse(Ps.random(width), Ps.random(height), c, c);
			}
		};
	}

	var canvas = document.getElementById("sketch");
	var processingInstance = new Processing(canvas, sketchProc);

	function startSketch() {
		processingInstance.loop();
	}

	function stopSketch() {
		processingInstance.noLoop();
	}
</script>
</body>
</html>

目が悪くなりそうなcanvasなのはお許しをば。
テキトーに書き換えて実行しましょ。 

safariでWebGLを有効にするのはまだ面倒。2012/01

面倒っていうほどじゃないんだけど。

processing.jsで3dを描く、ちょっとだけ。 | 脱兎.dat

先日、WebGL使った記事書いてみたんだけど、対応してないブラウザに配慮が足りてなかった。

そもそもcanvasタグに対応してないブラウザのためにcanvasタグを飾ってメッセージを入れてあげなきゃなんない。
以下の記事が参考になる。

HTML5 Canvas & Processing JS
http://joeycadle.com/blog/article/1/2012/22/01/html5-canvas-and-processing-js#comments 

Chromeに誘導しちゃうのね。

それでもなんなのこの記事わけわかんない!って言われたから
うちのSafari見てみたらcanvasタグが空き地になってた。
canvasタグには対応しているけどWebGLが有効になってないの原因?

safariでWebGLを有効にする方法。(2012/01現在)

1.メニュー「環境設定 > 詳細」より「メニューバーに”開発”メニューを表示」をオンに。
2.メニュー「開発」より「WebGLを有効にする」をオンに。

以上。
いちいち、有効にしてくださいね。ってcanvas外に書くのもcoolじゃないし
設定取得する方法とかないのかな。ま、早めにデフォルト有効になることを願ってます。

titanium mobile 入門にあたって参考になったURL

titaniumいじってます。
iPhoneとandroidアプリをjavascriptで書ける開発環境です。軟弱者なんでとりあえず簡単なのないかなとphoneGap試した後、titaniumに辿り着きました。

phoneGapについて

自分はphoneGapの中身をjQueryMobileで作って、実行速度、固定タブあたりに不満を感じ、titaniumに移りました。
最近はjQmobiとか出てきたりjQueryMobileアップデートしてるようなので、また試してみたいなとも思ってます。

スマフォのHTML5環境向けに作られたjQueryライクな軽量フレームワーク・jQ.Mobiの日本語サンプル作った – かちびと. net
http://kachibito.net/software/jq-mobi.html

はじめてのtitanium

とりあえずざっと理解するためには以下のサイトがめちゃ役に立ちました。全体的に目を通せば何が出来るかわかると思います。

titanium-mobile-doc-ja – Appcelerator Titanium Mobileに関するドキュメントを日本語でまとめていくプロジェクト – Google Project Hosting
http://code.google.com/p/titanium-mobile-doc-ja/

次に実機にインストール出来る人は公式デモのKitchenSinkをインストールして電車の中とかで触ってみればいいと思います。
インストールできなくてもローカルに保存しておけば今後お世話になるはずです。

appcelerator/KitchenSink – GitHub
https://github.com/appcelerator/KitchenSink

モバイルアプリは場所問わず実際に触りながら考えまとめられるから良いですね。風呂でUI考えられたりね。

やってみよう、そのまえに

やや、これは楽しそう、作ってみようと思ったら、まず逸る気持ちを抑えて「titanium シングルコンテキスト」でググってみましょう。僕はこれで軽く衝撃を受けました。以下のサイトがわかりやすいですが、KitchenSinkのような構造がオススメされているわけではないようです。特に自分の場合、androidでのパフォーマンスはシングルコンテキストじゃないと納得できない状態でした。まぁ、このへんは自分の書き方にも寄るのでしょうけどね。精進。

[Titanium] window.urlは推奨されないプログラミング手法らしい – もぎゃろぐ
http://blog.mogya.com/2011/08/window-url-is-not-recommended.html

titanium でシングルコンテキストな書き方にチャレンジ – インターネット時代のキャリアプランとは?
http://d.hatena.ne.jp/h5y1m141/20110930/p1

で、シングルコンテキストに心奪われたならばtweetaniumのソースを眺めてみると良いと思います。
シングルコンテキストの書き方以外にも大いに参考になります。特に独自タブ周りでしょうか。
androidの環境依存のタブはださダサ可愛いので、独自実装したくなります。そんな時は以下ソースのApplicationWindow.jsが参考になるでしょう。

appcelerator-titans/tweetanium – GitHub
https://github.com/appcelerator-titans/tweetanium

さいごに

あとは公式リファレンスとか見ながらガシガシ作れる気がします。気がするだけかもしれないのでググッても良いと思います。日本語情報も結構あります。日本にユーザー多いってどこかで見かけたけどそうなのかな。
あと、同じコードでマルチデバイス対応は無理です。具体的な完成イメージがあるならば尚更。当然かもしれませんが、titaniumでプロトタイピングやるならiPhone、androidどちらかでやるべきだと思います。(こだわりなければiPhone)UIまで含めると両対応させるのは想像以上に時間とられます。

Appcelerator Developer Center – API for (version 1.0)
http://developer.appcelerator.com/apidoc/mobile/1.0/

以上、
自分もようやくスタートな感じなんで頑張ります。

processing.jsで3dを描く、ちょっとだけ。

ちょっと確認したいことあって書いてみたのだけど、当初の目的には使えなそう。残念。

chromeでしか確認してませんぜ。


Please upgrade your browser to something newer, like Google Chrome

ソースは以下。

<script type="text/javascript" src="processing-1.3.6.min.js"></script>
<script type="text/processing" data-processing-target="pjs">
void setup() {
	size(540, 200, OPENGL);
	frameRate(50);
	noStroke();
	fill(153, 0, 0);
	smooth();
}
void draw() {
	background(0);
	ambientLight(63, 31, 31);
	lights();
	for(int i = 1; i < 5;  i++){
		pushMatrix();
		translate(i * width/5, height/2, 0);
		rotateX(mouseX * 0.05);
		rotateY(mouseY * 0.05);
		box(45);
		popMatrix();
	}
}
</script>
<canvas id="pjs"></canvas>

今年はprocessingもちゃんと使ってみよう。

ロリポップのmysqlにconnect出来なかった理由。

なんやかんややろうと思って、とりあえずロリポップのmysqlにphpのpear使ってアクセスしようとしてみました。

ナウでヤングなレンタルサーバーのロリポップです。

wordpressはインストールしたけれど、自分でちゃんとコード書いてデータベース接続はしたことなかったので苦戦。

Pearはすでにインストールされているのだとか、
MDB2.phpをrequireすればいいのだとか、
ロリポップのmysqlのサーバーアドレスはmysql…で始まるのでいいんだよね?とか、
今週のジャンプ読んだっけ?とかラー油辛いな、とか

試行錯誤しました。以下のサイト参考にしながらです。

「MDB2でsqlクエリ発行を簡単にする。」
駆け出しアフィサイト管理人のつぶログ

「PEAR MDB2を使ってみよう」
PEAR MDB2でPHPからデータベースを操作する(2/4):CodeZine

それでもやっぱりconnectすら出来ない。

あーイヤだ、明日に持ち越したくないと思いおもむろにエラーログを取得。初めからそうすればいいのにね。

$mdb2->getUserInfo()
$mdb2->getDebugInfo()

このあたりでしょうか。よくあるサンプルコードだとgetMessage()しか取得してないから 詳しいことわからないけれど、おまけして、もちっと詳しく訪ねてみたら、


Access denied for user: 'root@localhost' (Using password: YES)

とかおっしゃってる。 お金を払ってレンタルしてるサーバーにまで拒否られる日が来たのか... 孤独だな、とか思いつつ、検索。

Access denied for user: ‘root@localhost’ (Using password: YES)

パスワードが違う、らしい。
そんなことはない。

鳩と大きさを争ったらそれなりに白熱するかもしれないサイズの脳みそをフル回転させると、数日前、ロリポップの管理パスワードを変更したことに思い当たる。

もしやと思い昔のパスワードを叩く。

接続成功。

んー、てな感じで解決はしましたが原因はいまいちわかりません。
FTPも新パスワードでアクセス出来るし、phpMyAdminにも新パスワードで入れるんですよね …
MySQLは変更方法が異なるのでしょうか?または時差?サーバーが火星あたりにあったり?

rootパスワードとユーザパスワードの違いが理由だよ!とかいう匂いがビンビンするけれど、とりあえず似たような現象に陥った方の参考になれば幸いです。