このブログを検索

2012年7月21日土曜日

不定期にもほどがあるブログですが、たまには記載。


現在Androidアプリ開発を好んで行っております。弥太郎です。


なんとなく、業務で利用しているToDoListを公開してみます。


Excel2007以降で動作します。


別に大したものではないですが、どうぞ。


ToDoList.xlsx

2011年9月19日月曜日

[iAppli][Doja][Star]ドコモアプリの画面サイズ

アプリストアでアプリを販売する際に、
意外と面倒なのが画面サイズを考慮することです。

対応機種を選ぶ際に、どの機種が、どのサイズだから許可できる~~だとか、えーいもうって感じです。

ちなみに画面サイズは こちら 参照でどの機種がどんなサイズか~ってのが一応わかります。

アプリ登録時に、機種のチェックボックスをちまちま押していくところは、楽になりませんが、
どの機種が、この解像度を満たしているか、みたいなことは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()
に注目である。

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

2010年12月31日金曜日

ドコモマーケットでアプリ売り始めました。

私は卒研でJava3Dをやりつつ、趣味でiアプリを作っています。

先日ドコモマーケットがオープンしまして、一般人がアプリを作って売ることができるようになりました!アップルストアやアンドロイドマーケットみたいなもんですね。こうスマートフォン旋風に逆らっていく感じが好きです。

そこで、せっかくしばらく登録費が無料なので、アプリを公開してみることにしました。

http://killingtime00.web.fc2.com/iAppli/StandardMemo/StandardMemo.html

こんな感じ。


省略して説明すると、このアプリを待ち受け画面に設定しておくと、その待ち受け画面に付箋メモのように簡単なメモをペタペタ貼っていくことができるようになるアプリです。
 このアプリ便利なのかってそれはもう私自身が使うっちゃうくらい便利です。
ちょっと思い出した買い物リストを書くときとか、待ち受け画面でクリアキー押して、右ソフトキーオスだけでメモ作成ができます。
しかも待ち受け画面に表示されるのでちょいちょい見れて忘れにくい。
私みたいに忘れっぽい方にはもってこいですね。

とCMしたところで、別にこのブログ誰が見てるわけじゃないんですがw

自分で作っておいてなんですが、便利です。
ですが、ソース自体はめちゃくちゃ簡単なことやってるだけです。
こんな感じでアイデアがマーケットで売れるのってすごいやってみて感動しました。

かんたんなので、もう少しいろいろ作ってみようかなと思います。

ちなみにアプリは105円で売ってますw
私へのお小遣いと思って寄付する気持ちで・・・w

2010年11月6日土曜日

Java3dと加速度センサ1 ~傾斜器として使ってみる~

研究でJava3d+加速度センサを使っているので、そのテクニックをちょっと記してみようと思います。

(常識であることが多いです。当たり前の確認としてみてください。)
てか、自分の議事録用だからまぁなんでもいいですよね。



一番初めに、軸の指定ですが、
加速度センサの話をする際、
上下(重力方向)をZ、奥行きをX、左右をYとして話をしています。
実際にJava3dで扱う際は、表示にもよりますが基本
上下がY、奥行きをZ、左右をXとして数学の座標系を扱うようです。
今回は加速度センサの話なので、上を使いました。プログラムに起こす際は気をつけましょう。


まず使用。

自分が愛用しているセンサは こちら です。
使用は、本体から3軸に向けた加速度が取得できます。



取得できる値に関して、簡単なイメージですが、



基本状態だとこんな感じで、角軸に加速度がかかっています。

停止しているときは、重力加速度1G分がZ方向に加わるので、センサはZに1を示すはずです。


それを横(Z軸)に若干回転したのち、Y軸に若干回転すると以下の図になります。


まぁなんとなくこんな感じで、加速度センサに表示される数値は

停止しているときは、重力加速度の分解値になるわけですね。



と、いうことは



停止時にこのセンサ値を何とかすると、加速度センサの傾きが検出できるのではないか?


ということにはまぁ、みなさんなりますよね。当たり前ですよね。


はい。ということでやってみましょう。





と、言いたいところですが、


残念ながらできません。


なぜかというと、Z軸に関する回転がとれないからです。





(図中のZ軸とは上下に伸びる線、すなわち、重力がかかる方向を指します。)
 


たとえば、初期の状態(図1)だと、センサの値はZに1です。さっきも言いました。


ですが、Z軸に対してπ/8回転してみましょう。
こ、これは。

横方向に開店したところで、センサの検出値はZに1のままなのです。

結局センサ自体の状態は変わっていないから当たり前ですが。

すなわち、この方向の回転は加速度センサだけではさばききれないというわけです。




はい。前置きはここまでで、実際何ができるの?



1、傾斜器ができます。



1軸に対する傾斜器は、簡単で、横から見た図を思い浮かべましょう。


こんな感じで、θだけ傾けた場合を考えます。

この状態で停止していると、黄色ベクトルのように地面方向に1Gの加速度がかかっているので
センサはX、Yにピンクベクトルのように値を示します。

元の大きさが1Gだとすると、自然と

X=1*sinθ  Y=1*cosθ
と、なります。

X、Yの値が検出されるということなので、逆に

θ=arcSinX となるわけです。

こう考えるとセンサの状態を角度で取得するのは(1軸だけならば)簡単で、

検出された値をarcSinするだけになります。


したがって計算したθの値を、Java3Dなどでオブジェクトに反映させることで

1軸だけならば、加速度センサの状態と、表示するオブジェクトの状態を対応させることが可能となるわけです。
たとえば加速度センサをくるくる回すと、表示されているオブジェクトもくるくる回るみたいな。


θが計算できるので、もちろん加速度センサの角度を数値で取得することも可能となります。


以上。

2010年11月1日月曜日

Java3d での動的な物体の追加と削除

Java3dで物体を追加すると


 こういう構造になっていると思います。

物体の追加は、まぁいろんなところに書いてある通りです。

普通に追加したいのであれば、
branchG.addChild(new ColorCube(0.3));

とすればBranchGroupの下にColorCubeが追加されます。

座標変換が必要であれば、図のようにTransformGroupを挟めばよいですが略。

ただ、動的にとなるとひとつ加えます。

BranchGroupのほうに

branchG.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);

みたいに書きます。
オブジェクトの動的追加を許可しますよ的なね。
branchG作った直後に書けばいいです。

そうするとbranchGにならば動的にオブジェクトを追加できるようになります。


例
BranchGroup branchG = new BranchGroup();
branchG.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);

んで動的処理のところに
branchG.addChild( Node );



で、意外とあんまり書かれてなかったので削除方法

同様に動的追加を許可します。branchG0.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);

そんでもって削除はたぶんBranchGroup単位でしかできません。
(てかremoveChild()は動的に使えないの??わからない。)
ですので、上の図の構造だとBranchGroup以下の部分全部消えてしまいます。
てかできないかもしれない。やらなくていいし。

なので、消したい部分をまた別のBranchGroupにわけて、元のBranchGroupの下に置きます。

こんな感じ

すると、今までの部分は削除せずに
以下BranchGroup2に追加していく部分だけ、動的に削除することが可能となります。

何ができるかというと、
一度描画してあるCubeなどを、ボタン操作で消すことができたりします。
~注意~
まず許可が増えます。
増えるのは、親のBranchGroupのほうで

branchG.setCapability(BranchGroup.ALLOW_CHILDREN.WRITE);
branchG.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);

としておきます。
書き込みと、追加の許可?みたいな。

そして、BranchGroup2のほうでも

branchG2.setCapability(BranchGroup.ALLOW_CHILDREN_DETACH);

と、しましょう。

そして動的処理のところで

branchG2.detach();

とするとBranchGroup2以下の部分が削除されます。

ちなみにもっかい表示したかったら

branchG.addChild(branchG2);

ともう一回すればよいです。(当たり前ですよね)