Archive for the ‘Java’ Category

GAE/J で opensocial-java-client の OpenSocialRequestValidator#getRequestUrl 使ってみたら

http://hogehoge.appspot.com:0

のような感じになった。ポートがおかしい。
# version : opensocial-20091229.jar

ソースを追いかけてみると、80, 443 でないポートの場合はポート番号をくっ付けるコードになっていた。
てことは、GAE がポート0を返しているのか。

とりあえずポート0番も無視するようにコードを書き換えると、意図した挙動になった。
もう少し検証したら Issue で投げてみてもいいかも。

いろいろ調べていたんだけど、GAE/J でアプリを作成するなら slim3 が良さそう。
以下、雑多なメモ

slim3 + Lift というのはどう? どちらもDatastore 操作は Enhancer だし、うまくやれば動くんでない?
これをやるなら Lift(scala) + slim3(java) を行き来することになりそう。
Scala のアノテーションが完璧になるのは 2.8 なので, もう少し待ちたい肝。
GAE/J は何でもない処理でもエラーが出る!なにこれ仕様なの?
memcacheの信頼性が低い。
memcache のインクリメントがatomic
memcache から引っ張るのと、Datastore から引っ張るのはそこまで速度変わらない
Datastoreは異なるテーブル間でjoinできない
10秒の壁、30秒の壁

さて、面白くなってきた

Android SDK (android-sdk_m5-rc15_windows) に入っている OpenGL のサンプルコードがビルドできませんでした。
で、下記のような方法でとりあえずプリミティブ出せたのでコード残しておきます。

null

JAVA:
  1. import java.nio.FloatBuffer;
  2.  
  3. import javax.microedition.khronos.opengles.GL10;
  4.  
  5. import android.app.Activity;
  6. import android.os.Bundle;
  7. import android.util.Log;
  8. import android.view.SurfaceHolder;
  9. import android.view.SurfaceView;
  10. import android.graphics.OpenGLContext;
  11. import android.content.Context;
  12. import android.opengl.GLU;
  13.  
  14.  
  15. public class GlTest extends Activity {
  16.     @Override
  17.     public void onCreate(Bundle icicle) {
  18.         super.onCreate(icicle);
  19.         setContentView(new SurfaceTest(this));
  20.     }
  21. }
  22.  
  23. class SurfaceTest extends SurfaceView implements SurfaceHolder.Callback, Runnable {
  24.     final static private float SCREEN_WIDTH  = 320;
  25.     final static private float SCREEN_HEIGHT = 320;
  26.  
  27.     private OpenGLContext glContext_;
  28.     private GL10          glObject_;
  29.     private Thread        thread_;
  30.     private boolean       threadRunnable_;
  31.  
  32.     public SurfaceTest(Context c) {
  33.         super(c);
  34.         Log.i("userlog", "SurfaceTest.SurfaceTest()");
  35.  
  36.         getHolder().addCallback(this);
  37.     }
  38.  
  39.  
  40.     private boolean initialize() {
  41.         try {
  42.             glContext_ = new OpenGLContext(OpenGLContext.DEPTH_BUFFER);
  43.             glContext_.makeCurrent(getHolder());
  44.             glObject_  = (GL10)(glContext_.getGL());
  45.  
  46.             glObject_.glMatrixMode(GL10.GL_PROJECTION);
  47.             glObject_.glLoadIdentity();
  48.  
  49.             GLU.gluOrtho2D(glObject_, -1.0f, 1.0f, -1.0f, 1.0f);
  50.             glObject_.glViewport((int)(getWidth()-SCREEN_WIDTH)/2, (int)(getHeight() - SCREEN_HEIGHT)/2,
  51.                                  (int)SCREEN_WIDTH, (int)SCREEN_HEIGHT);
  52.         } catch (Exception e) {
  53.             Log.i("userlog", e.toString());
  54.             return false;
  55.         }
  56.         return true;
  57.     }
  58.  
  59.  
  60.     @Override
  61.     public void run() {
  62.         Log.i("userlog", "SurfaceTest.run()");
  63.  
  64.         if (initialize() == false) return;
  65.  
  66.         final float[] vertex = new float[] {
  67.             -0.0f,  0.6f, 0.0f,
  68.             -0.6f, -0.6f, 0.0f,
  69.              0.6f, -0.6f, 0.0f,
  70.         };
  71.  
  72.         final float[] color = new float[] {
  73.             1.0f, 0.0f, 0.0f,
  74.             0.0f, 1.0f, 0.0f,
  75.             0.0f, 0.0f, 1.0f,
  76.         };
  77.  
  78.         final FloatBuffer colors = FloatBuffer.wrap(color);
  79.         final FloatBuffer squareBuff = FloatBuffer.wrap(vertex);
  80.  
  81.         threadRunnable_ = true;
  82.  
  83.         while (threadRunnable_) {
  84.             glObject_.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  85.             glObject_.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
  86.  
  87.             glObject_.glMatrixMode(GL10.GL_MODELVIEW);
  88.             glObject_.glLoadIdentity();
  89.             glObject_.glTranslatef(0.0f, 0.0f, -1.0f);
  90.  
  91.             glObject_.glVertexPointer(3, GL10.GL_FLOAT, 0, squareBuff);
  92.             glObject_.glEnableClientState(GL10.GL_VERTEX_ARRAY);
  93.             glObject_.glEnableClientState(GL10.GL_COLOR_ARRAY);
  94.             glObject_.glColorPointer(3, GL10.GL_FLOAT, 0, colors);
  95.             glObject_.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 3);
  96.  
  97.             glContext_.post();
  98.  
  99.             try {
  100.                 Thread.sleep(100);
  101.             } catch (InterruptedException e) {
  102.                 Log.i("userlog", e.toString());
  103.             }
  104.         }
  105.         glContext_.makeCurrent((SurfaceHolder)null);
  106.     }
  107.  
  108.  
  109.     @Override
  110.     public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
  111.         Log.i("userlog", "-- SurfaceTest.surfaceChanged");
  112.     }
  113.  
  114.  
  115.     @Override
  116.     public void surfaceCreated(SurfaceHolder holder) {
  117.         Log.i("userlog", "-- SurfaceTest.surfaceCreated");
  118.         thread_ = new Thread(this);
  119.         thread_.start();
  120.     }
  121.  
  122.  
  123.     @Override
  124.     public void surfaceDestroyed(SurfaceHolder holder) {
  125.         Log.i("userlog", "-- Surface.surfaceDestroyed");
  126.         threadRunnable_ = false;
  127.         try {
  128.             thread_.join();
  129.         }
  130.         catch (InterruptedException e) {
  131.             Log.i("userlog", e.toString());
  132.         }
  133.         thread_ = null;
  134.     }
  135. }

# いやぁ、Java は久しぶりです。