2011年11月29日火曜日

GAEなのか?

GAEは制限が多い。1000件までしかデータベースから取得できない。抽出条件を複雑化するのはindexをつくれば出来るが、いずれにしても1000件までしか取得できない。またエンティティの検索条件設定については部分一致はできない。1万件と1万件のデータをそれぞれ取得して、両方のデータに存在するデータを抽出したいとしても、それは1000件ずつしか取得できないので、残りのそれぞれ9000件にはアクセスできない。これは大いなる問題である。GAEを使わないのであればAmazonEC2なのか、はたまた昔ながらのレンタルサーバーが以外といいのか?という話がでてくる。Amazonは遅いが自由度は高いらしい。またもし大きなWEBサービスとなるのであればスケールアウトというやつで圧倒的なメリットをAmazonは提供してくれる。でももし大きくなる見込みが低いWEBサービスなのであれば、それは速い、安い、うまい昔ながらのレンタルサーバに軍配が上がる可能性が高い。

さて、それでも尚GAEを使おうというのであれば、上記のデータベースの設計はよろしくない。クエリの複雑化はインデックスで対応するとして、データベースから取得したデータをいじるのではなく、可能な限りクエリによって最終的に取得したいデータを取得できるように設計する必要がある。が、どう考えてもいまつくろうとしているアプリケーションがGAEで作れるとは思えない。GAEはやめよう。

python リストの追加 append()

list = [1,2,3,4,5]
list.append(6)
これは list += [6] よりも効率的らしい

2011年11月27日日曜日

めんどくさいjQueryを研究する

もうjQueryって色んな括弧がごちゃごちゃしてて見ていて腹立つよ。 しかし、色んなブラウザの違いなども吸収してるらしいし、とりあえず使えるところはjQuery使った方がいい気がするし、そもそもDOMとかって大体分かるけどその使い方は全然勉強してないから、何しろjQuery勉強しないといけないと思ってるんです。最近WEBサービスつくるとき一番つまずくのがjQueryなもんで、一度研究して頭を整理しておかないといつまでたっても、遅々として先に進まないんだよね。いつも止まって適当に調べてなんとか出来たら次に行くっていうやり方が結局のところ最も非効率的なやり方だと思うんです。

さて、はっきりいってjQueryでAjaxとかやってるわりには、全然基本すらわかってないので、基本から始めたいと思う。まずはjQeryで#homuに"homuhomu"とインプットしてみよう。ちなみに、このブログは最初からjQueryを読み込んでいたはず。あと、jQueryを学ぶならやはりきっとここは外せないだろう。『jQuery日本語リファレンス』だ。

↓これがdiv#homuです

homuhomuhomuhomuhomuhomuhomuhomu



empty

<div id="homu"><p>homuhomuhomuhomuhomuhomuhomuhomu</p></div>
<script type="text/javascript">
$('#homu').empty();
</script>

ちょっと最初に宣言したことと違うことをしているが、#homuのhomuhomu...という文字列をjQueryを使って削除した様だ。ところでブログに書くに当たりそもそもDOMとは何を意味するのかについて念のため確認したい。
文書オブジェクトモデル(DOM)とは、HTML文書およびXML文書のためのアプリケーション=プログラミング=インターフェイス(API)である。これは、文書の論理的構造や、文書へのアクセスや操作の方法を定義するものである。
何言ってるのか分からん。文書を構成する個々のタグというかタグで構成される要素のことをDOMっていうのかなと思ったんだけどDOMはタグで文章を作ること自体をいうようだな。まあDOMの詳細は置いておいて、何しろDOMの構成要素を$('#homu')といった形で表すのだ。そして要素の選択方法についてはSelectors/API/jQueryに書いてあるようだ。

Androidゲーム『Dodge Mouse』つくりました!

Androidゲーム『Dodge Mouse』をつくりました!第一弾目です。シューティングゲームの敵の弾を避ける要領で、敵をよけつづけるシンプルなゲームです。Pankiaをつかってスコア共有できるようになっていて、スコアはtwitterでつぶやけるようになってます。Pankiaの使い方はsuumo jumpを参考にしました。よかったらダウンロードしてください!
Discover more Android apps

2011年11月13日日曜日

Android 開発 マルチ画面対応の研究

Androidは多種多様な端末があり、それらはそれぞれ画面サイズやDPIといったものが全然違います。マルチ画面に対応する為のルールや手法について研究します。

研究の為の簡単なプロジェクトを作成しましました。DpiTestActivityとDpiTestViewの2つのクラスから構成されます。res/drawable-mdpiに、tw.pngを格納しています。tw.pngはtwitterのbirdのフリーのイメージで、サイズは幅70(px)x高さ85(px)です。
DpiTestActivityクラス
package com.homuhomu.dpitest;

import android.app.Activity;
import android.os.Bundle;

public class DpiTestActivity extends Activity {
 private DpiTestView dView;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        dView = new DpiTestView(this);
        setContentView(dView);
    }
}
DpiTestViewクラス
package com.homuhomu.dpitest;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.View;

public class DpiTestView extends View {
 private Bitmap img;
 private Paint paint;
 
 public DpiTestView(Context context) {
  super(context);
  //paintの設定
  paint = new Paint();
  paint.setAntiAlias(true);
  paint.setTextSize(70);
  paint.setARGB(255, 255, 255, 255);
  //imgの登録
  Resources res = context.getResources();
  img = BitmapFactory.decodeResource(res, R.drawable.tw);
 }
 
 @Override
 protected void onDraw(Canvas c){
  c.drawBitmap(img,0,0,null); //imgの描画
  c.drawBitmap(img,70,0,null); //imgの描画
  c.drawText("A", 70, 85, paint);
 }
}