2010年2月22日月曜日

[Android] 加速度センサーをつかってみた。

Android加速度センサーをつかってみた。

加速度センサーを登録するとSensorEventのvalues配列にx, y, zの加速度が順番(0:x,1:y,2:z)で取れるから、以外に簡単に使えた。

テストとして作ったアプリは加速度センサーで画像が動く簡単なアプリ



Activityを登録するとき画面を縦に固定した。(縦のほうが計算しやすかったので)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.babukuma.android.test" android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".SensorActivity" android:screenOrientation="portrait"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="4" />
</manifest>


イベントが取れる度に画像の座標を変更する。

package com.babukuma.android.test;

import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;

public class SensorActivity extends Activity implements SensorEventListener {
private static final String LOG_TAG = "BABUKUMA";

private SensorManager sensorManager;
private SensorView sensorView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sensorView = new SensorView(this);
setContentView(sensorView);

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

// 加速度センサー
List<Sensor> sensors = sensorManager
.getSensorList(Sensor.TYPE_ACCELEROMETER);
if (sensors.size() > 0) {
sensorManager.registerListener(this, sensors.get(0),
SensorManager.SENSOR_DELAY_GAME);
}
}

@Override
protected void onDestroy() {
super.onDestroy();
sensorManager.unregisterListener(this);
}

@Override
public void onAccuracyChanged(final Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}

@Override
public void onSensorChanged(final SensorEvent event) {
Sensor sensor = event.sensor;
switch (sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
// Log.d(LOG_TAG, "ACCELEROMETER : " + event.values[0] + ","
// + event.values[1] + "," + event.values[2]);
sensorView.move(event.values[0], event.values[1]);

break;
default:
break;
}
}

class SensorView extends View {
private static final int KUMA_SIZE = 50;
private Bitmap kuma;
private int w;
private int h;
private float x;
private float y;

public SensorView(Context context) {
super(context);
requestWindowFeature(Window.FEATURE_NO_TITLE);
kuma = BitmapFactory.decodeResource(context.getResources(),
R.drawable.icon_kuma_50);
}

/**
* クマを移動する。
*
* @param mx
* @param my
*/
public void move(float mx, float my) {
this.x -= (mx * 4f);
this.y += (my * 4f);

if (this.x < 0) {
this.x = 0;
} else if ((this.x + KUMA_SIZE) > this.w) {
this.x = this.w - KUMA_SIZE;
}

if (this.y < 0) {
this.y = 0;
} else if ((this.y + KUMA_SIZE) > this.h) {
this.y = this.h - KUMA_SIZE;
}

invalidate();
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
this.w = w;
this.h = h;
this.x = (w - KUMA_SIZE) / 2f;
this.y = (h - KUMA_SIZE) / 2f;
}

@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(kuma, x, y, null);
}
}
}

[Android] 가속도센서를 사용해보다.

Android 가속센서를 사용해보다.

가속도센서를 등록하면 SensorEvent의 values배열에 x, y, z의 가속도가 순서대로 들어오기 때문에 의외로 간단하게 사용할 수 있었다.

가속도센서에 따라 이미지가 움직인다.



Activity를 등록할 때 화면을 수직으로 고정시켰다.(수직방향이 계산하기 쉬워서)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.babukuma.android.test" android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".SensorActivity" android:screenOrientation="portrait"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="4" />
</manifest>


확인하기 편하도록 화면에는 간단한 이미지를 출력하고 가속도에 따라 위치를 변경시키도록 하였다.

package com.babukuma.android.test;

import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;

public class SensorActivity extends Activity implements SensorEventListener {
private static final String LOG_TAG = "BABUKUMA";

private SensorManager sensorManager;
private SensorView sensorView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sensorView = new SensorView(this);
setContentView(sensorView);

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

// 加速度センサー
List<Sensor> sensors = sensorManager
.getSensorList(Sensor.TYPE_ACCELEROMETER);
if (sensors.size() > 0) {
sensorManager.registerListener(this, sensors.get(0),
SensorManager.SENSOR_DELAY_GAME);
}
}

@Override
protected void onDestroy() {
super.onDestroy();
sensorManager.unregisterListener(this);
}

@Override
public void onAccuracyChanged(final Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}

@Override
public void onSensorChanged(final SensorEvent event) {
Sensor sensor = event.sensor;
switch (sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
// Log.d(LOG_TAG, "ACCELEROMETER : " + event.values[0] + ","
// + event.values[1] + "," + event.values[2]);
sensorView.move(event.values[0], event.values[1]);

break;
default:
break;
}
}

class SensorView extends View {
private static final int KUMA_SIZE = 50;
private Bitmap kuma;
private int w;
private int h;
private float x;
private float y;

public SensorView(Context context) {
super(context);
requestWindowFeature(Window.FEATURE_NO_TITLE);
kuma = BitmapFactory.decodeResource(context.getResources(),
R.drawable.icon_kuma_50);
}

/**
* クマを移動する。
*
* @param mx
* @param my
*/
public void move(float mx, float my) {
this.x -= (mx * 4f);
this.y += (my * 4f);

if (this.x < 0) {
this.x = 0;
} else if ((this.x + KUMA_SIZE) > this.w) {
this.x = this.w - KUMA_SIZE;
}

if (this.y < 0) {
this.y = 0;
} else if ((this.y + KUMA_SIZE) > this.h) {
this.y = this.h - KUMA_SIZE;
}

invalidate();
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
this.w = w;
this.h = h;
this.x = (w - KUMA_SIZE) / 2f;
this.y = (h - KUMA_SIZE) / 2f;
}

@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(kuma, x, y, null);
}
}
}

2010年2月16日火曜日

[Android] SharedPreferencesで保存したファイルを確認する方

SharedPreferencesで保存したファイルを確認する方法
Emulatorのみ確認できる。
HT-03Aの場合は権限がない為、確認できなかった。

① EclipseのDDMSを利用する方法
DDMSの「File explorer」を開いて保存されたファイルを取得することができる。
例えば、あるアプリケーションで保存したデータを見るには
「/data/data/{アプリケーションパーケージ}/shared_prefs」をみると
(今回は「ApiDemos」で試してみた。「/data/data/com.example.android.apis/shared_prefs」)


SharedPreferencesで保存したデータがXMLファイル形式で保存されている。
コピーしたいXMLファイルを選んで「Pull」ボタン(画像参照)をおすと取得できるので、中身を確認することができる。

確認したファイルは「com.example.android.apis_preferences.xml」

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<boolean name="default_toggle" value="true" />
<string name="default_edittext">Default value</string>
<string name="default_list">beta</string>
</map>


② 「adb shell」を利用する方法
もう一つの方法はandroid sdkに入ってるツール「adb」を利用する方法。
ご覧のとおり。

「vi」や「more」などがなかったので「cat」で確認することができた。

2010年2月15日月曜日

[Oracle] ORA-12162

接続時のエラー
ORA-12162: TNS:net service name is incorrectly specified

確認
- tnsnames.oraが正しいのか
- 環境変数:ORACLE_SIDはエクスポートされているのか

僕の場合はORACLE_SIDがエクスポートされてなかったのでエクスポートしたら直った。
ありがとうkiku3kiku3kiku3

2010年2月5日金曜日

Mac OS XにMySQLをインストールしてみる

環境
OS : Mac OS X 10.6.2
MySQL : 5.1.43

1. MySQLダウンロード
  - http://dev.mysql.com/downloads/mysql/ からダウンロード
  - mysql-5.1.43-osx10.6-x86_64.dmg

2. インストール
  - ダウンロードしたファイルをダブルクリック実行


  - 「mysql-XXXXXX.pkg」(ここでは「mysql-5.1.43-osx10.6-x86_64.pkg」)を実行

  - MySQL.prefPane設置(ダブルクリックで。。)



3. MySQLサーバ起動と停止
  - コマンドでもできるけど、システム環境設定画面から起動と停止ができる。



4. MySQLアンインストール
  - MySQL.prefPaneを削除


  - mysqlインストール先を削除
    デフォールトなら「/usr/local/mysql-5.1.43-osx10.6-x86_64」と「/usr/local/mysql」を削除すればいい。

Mac OS X에 MySQL 설치

환경
OS : Mac OS X 10.6.2
MySQL : 5.1.43

1. MySQL 다운로드
  - http://dev.mysql.com/downloads/mysql/ 에서 다운로드
  - mysql-5.1.43-osx10.6-x86_64.dmg

2. 인스톨
  - 다운로드한 파일을 실행


  - 「mysql-XXXXXX.pkg」(여기서는 「mysql-5.1.43-osx10.6-x86_64.pkg」)을 실행

  - MySQL.prefPane을 설치(더블클릭으로.)



3. MySQL서버 시작과 정지
  - 콘솔창에서 커맨드로도 가능하지만 시스템환경설정화면에서 간단하게 조작가능.



4. MySQL언인스톨
  - MySQL.prefPane제거


  - mysql이 설치된 디렉토리를 삭제
    디폴트면 「/usr/local/mysql-5.1.43-osx10.6-x86_64」와 「/usr/local/mysql」를 삭제하면 된다.

2010年2月1日月曜日

[Django] DjangoをTomcatで実行してみた。

JythonとDjangoを使ってTomcat上で動くものを試してみた。

1. Jythonをインストール
  - http://jython.org からダウンロード
  - 2.5.1バージョンをインストールした。
  - 環境変数に 「JYTHON_HOME」を追加
  - [Jython] MACでjythonをインストールしてみた。を参照。

2. Djangoをインストール
  - http://www.djangoproject.com
  - Django-1.1.1.tar.gzをダウンロードした。
  - # sudo jython setup.py install

3. django-jythonをインストール
  - DjangoとJythonの連携ライブラリ
  - http://code.google.com/p/django-jython
  - # sudo jython setup.py install

4. Django用プロジェクトを作成。(プロジェクト名は「django_test」にした。)
  - # jython $JYTHON_HOME/bin/django-admin.py startproject django_test

5. 「settings.py」ファイル修正

INSTALLED_APPS = ( 'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'doj', # これを追加
)


6. Hello Djangoページを作成。
  - hello_view.py

'''
Created on 2010/02/01

@author: babukuma
'''

from django.http import HttpResponse

def hello(request):
"""Hello Django"""
message = "<html><body>Hello, Django on Jython!</body></html>"
return HttpResponse(message)


7. 「urls.py」ファイル修正。

from django.conf.urls.defaults import *
from hello_view import * # 追加部分

# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()

urlpatterns = patterns('',
# Example:
# (r'^django_test/', include('django_test.foo.urls')),

# Uncomment the admin/doc line below and add 'django.contrib.admindocs'
# to INSTALLED_APPS to enable admin documentation:
# (r'^admin/doc/', include('django.contrib.admindocs.urls')),
(r'hello/$', hello), # 追加部分

# Uncomment the next line to enable the admin:
# (r'^admin/', include(admin.site.urls)),
)


8. 開発用サーバで確認
  - # jython manager.py runserver



9. warファイル作成。
  - # jython manager.py war
  - 「django_test.war」ファイルが作成される。

10. Tomcatで動作確認

[Django] Django를 Tomcat에서 실행하기.

Jython을 사용하여 Django프레임워크를 Tomcat에서 실행하여 보았다.

1. Jython을 설치
  - http://jython.org 에서 다운로드
  - 2.5.1버젼을 인스톨하였다.
  - 환경변수에 「JYTHON_HOME」작성
  - [Jython] MACでjythonをインストールしてみた。를 참고.

2. Django를 설치
  - http://www.djangoproject.com
  - Django-1.1.1.tar.gz을 다운로드하였다.
  - # sudo jython setup.py install 로 설치

3. django-jython을 설치
  - http://code.google.com/p/django-jython
  - # sudo jython setup.py install

4. Django용 프로젝트를 작성(여기서는 django_test로)
  - # jython $JYTHON_HOME/bin/django-admin.py startproject django_test

5. 「settings.py」파일 수정

INSTALLED_APPS = ( 'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'doj', # 이부분을 추가함.
)



6. Hello Django페이지를 작성
  - hello_view.py

'''
Created on 2010/02/01

@author: babukuma
'''

from django.http import HttpResponse

def hello(request):
"""Hello Django"""
message = "<html><body>Hello, Django on Jython!</body></html>"
return HttpResponse(message)


7. 「urls.py」파일을 수정

from django.conf.urls.defaults import *
from hello_view import * # 추가부분

# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()

urlpatterns = patterns('',
# Example:
# (r'^django_test/', include('django_test.foo.urls')),

# Uncomment the admin/doc line below and add 'django.contrib.admindocs'
# to INSTALLED_APPS to enable admin documentation:
# (r'^admin/doc/', include('django.contrib.admindocs.urls')),
(r'hello/$', hello), # 추가부분

# Uncomment the next line to enable the admin:
# (r'^admin/', include(admin.site.urls)),
)



8. 테스트용 서버에서 확인
  - # jython manager.py runserver



9. war파일 작성
  - # jython manager.py war
  - 「django_test.war」파일이 작성된다.

10. Tomcat에서 테스트


Tomcat위에서도 Django가 문제없이 돌아가는 것 같다.