GAE上でデータ扱うのが面倒だったので,PHP+SQLでやりたいなと思ったところ「PHP4G」と「SQL4G」にたどり着きました.
基本的に下記記事の通りにすればOKですが,はまったところをメモとして記載し,2013年4月9日現在の最速と思われるサンプル実行までの手順をまとめておこうかと思います.
http://www.atmarkit.co.jp/fcoding/articles/gaephp/02/gaephp02a.html
1.GAE実行環境を準備する.
(これは大前提なので,ほかの記事参考にしてください.)
2.GAEプロジェクトを作成する.
3. リトルソフト様よりPHP4GとSQL4GをDLする.
4.PHP4Gのwar配下を「appengine-web.xml」以外全部GAEのプロジェクトのwar配下にコピーする.(eclipseにドラッグドロップでOK)
5.「appengine-web.xml」はマージする.
こんな感じなので,作成したプロジェクト側でも下記修正を加え,マージする.
★8~12行目:同様にしてコメントアウトにする.
★14~27行目:追記
6. プロジェクト右クリック→ビルド・パス→ビルド・パスの構成より「ライブラリー」にjarファイルを追加します.追加するファイルはwar/WEB-INF/lib/より下記の通り.
commons-codec-1.4.jar
commons-fileupload-1.2.1.jar
jetty-6.1.17.jar
jetty-util-6.1.17.jar
log4j-1.2.15.jar
lsj-1.3.jar
lucene-core-2.4.1.jar
org.osgi.core-1.2.0.jar
php4g.jar
quercus.jar
resin-util.jar
script-10.jar
servlet-api-2.4.jar
slf4j-api-1.5.0.jar
sql4g.jar
velocity-1.6.2-dep.jar
7.この状態でも,eclipse上でのテスト実行であれば動きます.
>http://localhost:8888/sql4gadmin
8.ただしこのままだとGAE上では下記サイトでも記載の通り
「Unable to find resource ‘sql4gadmin/MainPage.html’」がでます.
>http://blog.aqn.jp/2011/03/gaephpsql4g/
上記サイトの記載を参考におそらく最短でエラー回避の方法を記載しますのでご参考ください.
9.SQL4Gのプロジェクトファイルよりwar/WEB-INF/web.xmlを参照し,下記記載を作成したプロジェクトのweb.xmlに追記する.
10.さらに下記の通りコメントアウトする.(これやる必要あるのかは謎ですが)
以上の流れでPHP4GとSQL4Gのサンプルは動作するかと思います.
意外とはまる箇所があったので記載しておきました.
※地味に@ITにしたがっているだけだとはまりました...(僕だけ?)
基本的にはweb.xmlとappengine-web.xmlの記載にだけ注意を払えば
あとは全部コピーとビルド・パスだけで動くはずです.
このブログを検索
2013年4月9日火曜日
2013年1月3日木曜日
[Android]DrawableをID指定で読み込んだ時のResources$NotFoundException
掲題の件に関してドハマりしたので記録として残しておきます.
原因はわかってしまえばアホなお話でした.
【発生事象】
ImageViewにDrawableの画像を指定する際にどの画像を指定しても
Caused by: android.content.res.Resources$NotFoundException: File res/drawable-hdpi/ic_launcher.png from drawable resource ID #0x7f020001
のようなエラーが発生し画像が表示されない.
【原因】
assets内のファイルを読み書きした際にAssetsManagerをclose()していたため.
AssetsManagerを意図的にclose()すると,画像リソースを拾う際にも影響が出る模様です.
おそらくこれは利用者が意図してclose()しなくてもよいものなのだと解釈しておきます...
原因はわかってしまえばアホなお話でした.
【発生事象】
ImageViewにDrawableの画像を指定する際にどの画像を指定しても
Caused by: android.content.res.Resources$NotFoundException: File res/drawable-hdpi/ic_launcher.png from drawable resource ID #0x7f020001
のようなエラーが発生し画像が表示されない.
【原因】
assets内のファイルを読み書きした際にAssetsManagerをclose()していたため.
AssetsManagerを意図的にclose()すると,画像リソースを拾う際にも影響が出る模様です.
おそらくこれは利用者が意図してclose()しなくてもよいものなのだと解釈しておきます...
2012年9月17日月曜日
[Android]ProcessとTaskに関して
Androidにおいて、現在表示されているアプリを取得したいと思い、Processに関して調べました。
結論から言うと、getRunningTasks(int n)を使います。
調べてみたところ、プロセス関連では、
ActivityManagerからgetRunningTasks(int)を使うものと
getRunningAppProcesses()を使うものがあるということです。
getRunningTasks(int)は指定数を最大数として、runningのタスクを取得することができます。
詳細説明は こちら のブログより参考にさせていただきました。
これでバックグラウンドにて動いているものも含め、Activityが取得できます。
(SH-12CとGalaxyS2で試したところ、ホーム画面も検出する模様。)
これで先頭の物が現在表示されているアプリである。
ちなみにgetRunningAppProcesses()は現在動いているProcessの一覧を取得しているものと思われます。
取得できる項目は リファレンス 参照。
気になる項目としては、「pid」「processName」「importance」があります。
pid:プロセスの固有ID
processName:プロセス名
importance:状態
特にimportanceはそのプロセスがどのような状態かを表し、なかなか有用です。
たとえばimportanceが
100:動作中のアプリケーション
300:動作中のサービス
400:バックグラウンドにいるアプリケーション
みたいな感じで、状態を区別できます。
あとは英語ができないのでよくわかりません。
サービスも含めて動作中のProcess等詳細に調べたい場合はこちらのが有用でしょう。
最後に、 サービスで動作し、接近センサーをトリガーとして、プロセスの出力を確認する
アプリを創りました。どんなものが出力されるか観察できます。
観測データはSDカード内部にCSVで保存されます。
EXCELで適当にさばいてください。
ソースコードは こちら より。
ソースのみlayoutファイルは含みません。
サービスの起動停止を行うonClickのついたボタンを適当に2つおいてください。
結論から言うと、getRunningTasks(int n)を使います。
調べてみたところ、プロセス関連では、
ActivityManagerからgetRunningTasks(int)を使うものと
getRunningAppProcesses()を使うものがあるということです。
getRunningTasks(int)は指定数を最大数として、runningのタスクを取得することができます。
詳細説明は こちら のブログより参考にさせていただきました。
これでバックグラウンドにて動いているものも含め、Activityが取得できます。
(SH-12CとGalaxyS2で試したところ、ホーム画面も検出する模様。)
これで先頭の物が現在表示されているアプリである。
ちなみにgetRunningAppProcesses()は現在動いているProcessの一覧を取得しているものと思われます。
取得できる項目は リファレンス 参照。
気になる項目としては、「pid」「processName」「importance」があります。
pid:プロセスの固有ID
processName:プロセス名
importance:状態
特にimportanceはそのプロセスがどのような状態かを表し、なかなか有用です。
たとえばimportanceが
100:動作中のアプリケーション
300:動作中のサービス
400:バックグラウンドにいるアプリケーション
みたいな感じで、状態を区別できます。
あとは英語ができないのでよくわかりません。
サービスも含めて動作中のProcess等詳細に調べたい場合はこちらのが有用でしょう。
最後に、 サービスで動作し、接近センサーをトリガーとして、プロセスの出力を確認する
アプリを創りました。どんなものが出力されるか観察できます。
観測データはSDカード内部にCSVで保存されます。
EXCELで適当にさばいてください。
ソースコードは こちら より。
ソースのみlayoutファイルは含みません。
サービスの起動停止を行うonClickのついたボタンを適当に2つおいてください。
2012年7月21日土曜日
不定期にもほどがあるブログですが、たまには記載。
現在Androidアプリ開発を好んで行っております。弥太郎です。
なんとなく、業務で利用しているToDoListを公開してみます。
Excel2007以降で動作します。
別に大したものではないですが、どうぞ。
ToDoList.xlsx
現在Androidアプリ開発を好んで行っております。弥太郎です。
なんとなく、業務で利用しているToDoListを公開してみます。
Excel2007以降で動作します。
別に大したものではないですが、どうぞ。
ToDoList.xlsx
2011年9月19日月曜日
[iAppli][Doja][Star]ドコモアプリの画面サイズ
アプリストアでアプリを販売する際に、
意外と面倒なのが画面サイズを考慮することです。
対応機種を選ぶ際に、どの機種が、どのサイズだから許可できる~~だとか、えーいもうって感じです。
ちなみに画面サイズは こちら 参照でどの機種がどんなサイズか~ってのが一応わかります。
アプリ登録時に、機種のチェックボックスをちまちま押していくところは、楽になりませんが、
どの機種が、この解像度を満たしているか、みたいなことはExcelでうまいことできるんじゃないかなぁと。
とりあえず、ドコモページから表ぶっこぬいて、 こちら にまとめてみました。
フィルタで、好きな画面サイズだけ選べば、あとは機種をチェックするだけかな?
まぁ使えるか微妙だけど、ご自由にどうぞ。
意外と面倒なのが画面サイズを考慮することです。
対応機種を選ぶ際に、どの機種が、どのサイズだから許可できる~~だとか、えーいもうって感じです。
ちなみに画面サイズは こちら 参照でどの機種がどんなサイズか~ってのが一応わかります。
アプリ登録時に、機種のチェックボックスをちまちま押していくところは、楽になりませんが、
どの機種が、この解像度を満たしているか、みたいなことはExcelでうまいことできるんじゃないかなぁと。
とりあえず、ドコモページから表ぶっこぬいて、 こちら にまとめてみました。
フィルタで、好きな画面サイズだけ選べば、あとは機種をチェックするだけかな?
まぁ使えるか微妙だけど、ご自由にどうぞ。
2011年2月3日木曜日
Java3d での動的な物体の追加と削除 ~その2~
はい。
アクセス解析を見ていると、この記事に引っかかってくる人がやたら多いので
前回の記事をわかりやすくしてみました。
(前回のやつわかりにくいよねー)
はい。
何をするかっていうと
プログラム内でたとえばスイッチを押したときとか、
何か条件が起きた時にオブジェクトを追加表示、削除を行いたいということです。
ということでおさらい。
重要なことは2つ
追加される側のBranchGroupでは
branchG0.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
branchG0.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);
を行うこと。
追加する側では(削除したいならば)
branchG0.setCapability(BranchGroup.ALLOW_DETACH);
と記述します。
そして追加する際は追加するBranchGroupに対し
branch.addChild(branchG0);
とする。(追加できるのはBranchGroupのみだった気がします)
削除する際にはすでに追加したBranchGroup(グローバル化するなどしてとっておく)に対し
branchG0.detach();
とする。
とそんだけなんです。
ということで珍しくサンプルソース。
AddTest.java
このソースでは元のBranchGroupと、追加するBranchGroupを
branchとbranchArに保存しておき
Threadで適当に追加削除を繰り替えすプログラム。
チェックする点は元のBranchGroup作成時と
追加するBranchGroup作成時。
createSceneGraph()
getObject()
に注目である。
アクセス解析を見ていると、この記事に引っかかってくる人がやたら多いので
前回の記事をわかりやすくしてみました。
(前回のやつわかりにくいよねー)
はい。
何をするかっていうと
プログラム内でたとえばスイッチを押したときとか、
何か条件が起きた時にオブジェクトを追加表示、削除を行いたいということです。
ということでおさらい。
重要なことは2つ
追加される側のBranchGroupでは
branchG0.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
branchG0.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);
を行うこと。
追加する側では(削除したいならば)
branchG0.setCapability(BranchGroup.ALLOW_DETACH);
と記述します。
そして追加する際は追加するBranchGroupに対し
branch.addChild(branchG0);
とする。(追加できるのはBranchGroupのみだった気がします)
削除する際にはすでに追加したBranchGroup(グローバル化するなどしてとっておく)に対し
branchG0.detach();
とする。
とそんだけなんです。
ということで珍しくサンプルソース。
AddTest.java
このソースでは元のBranchGroupと、追加するBranchGroupを
branchとbranchArに保存しておき
Threadで適当に追加削除を繰り替えすプログラム。
チェックする点は元のBranchGroup作成時と
追加するBranchGroup作成時。
createSceneGraph()
getObject()
に注目である。
2011年1月12日水曜日
[Doja]iアプリ開発でArrayList
Dojaでiアプリを開発しているとArrayListが使えないことに気付く。
(あれ?つかえたっけ?)
そこでそれに代わるのがVectorである。
ArrayListはまぁJavaでよく使われるリストです。
リストとは 簡単に追加削除ができる可変長配列的な?
普通の配列は最初に定義したサイズになり、後々中身が多かったり少なかったり、はたまた追加したかったり削除したかったりすると、サイズを定義しなおしてコピーしてと手間がかかるがリストならそれを自動でやってくれちゃうってことですな。
そんな便利なArrayListがDojaでは使えないので代わりに同じような使い方ができるVectorを使います。
VectorとArrayListの違いは型を固定しないことで、ArrayList<クラス名>と型を指定せずなんでも突っ込めちゃう代わりに取り出すときはキャストしないといけません。
簡単に使い方紹介
Vector vector = new Vector();
String str = {"test1","test2","test3","test4","test5","test6"};
for(int i=0;i<str.length;i++)
vec.addElement(str[i]);
for(int i=0;i<vector.size();i++)
System.out.println( i + "番目のVectorは" + (String)vector.elementAt(i));
とするとVectorにStringが配列のようにたくさん入っている感じになるわけです。
注意点は最後の行の(String)vector.elementAt(i)で、ちゃんとキャストしないとだめです。
とくにインスタンスをぶち込んだ場合は
((クラス名)vector.elementAt(i)) としないと内部メソッド?が使えません。
たとえばStringのcharAt(i)を使いたいときは
(String)vector.elementAt(i).charAt(i); ではなく
((String)vector.elementAt(i)).charAt(i); にしないといけません。
なんとまぁ括弧の多いことめんどくさいこと。
まぁでもVector便利なんで使ってくださいVector
(あれ?つかえたっけ?)
そこでそれに代わるのがVectorである。
ArrayListはまぁJavaでよく使われるリストです。
リストとは 簡単に追加削除ができる可変長配列的な?
普通の配列は最初に定義したサイズになり、後々中身が多かったり少なかったり、はたまた追加したかったり削除したかったりすると、サイズを定義しなおしてコピーしてと手間がかかるがリストならそれを自動でやってくれちゃうってことですな。
そんな便利なArrayListがDojaでは使えないので代わりに同じような使い方ができるVectorを使います。
VectorとArrayListの違いは型を固定しないことで、ArrayList<クラス名>と型を指定せずなんでも突っ込めちゃう代わりに取り出すときはキャストしないといけません。
簡単に使い方紹介
Vector vector = new Vector();
String str = {"test1","test2","test3","test4","test5","test6"};
for(int i=0;i<str.length;i++)
vec.addElement(str[i]);
for(int i=0;i<vector.size();i++)
System.out.println( i + "番目のVectorは" + (String)vector.elementAt(i));
とするとVectorにStringが配列のようにたくさん入っている感じになるわけです。
注意点は最後の行の(String)vector.elementAt(i)で、ちゃんとキャストしないとだめです。
とくにインスタンスをぶち込んだ場合は
((クラス名)vector.elementAt(i)) としないと内部メソッド?が使えません。
たとえばStringのcharAt(i)を使いたいときは
(String)vector.elementAt(i).charAt(i); ではなく
((String)vector.elementAt(i)).charAt(i); にしないといけません。
なんとまぁ括弧の多いことめんどくさいこと。
まぁでもVector便利なんで使ってくださいVector
登録:
投稿 (Atom)