わんくま同盟 Blog's

わんくま同盟

メニュー

わんくま同盟

  勉強会情報

  メンバリスト

掲示板

ブログ

リンク

統計

わんくま同盟メンバ

わんくま同盟わんくま同盟

わんくま同盟メンバの最新の記事

Eclipseで作成するAndroidアプリケーションの問題?

色々と書いていたけれど、最後の最後で、どうしても、うまく行かなくなったの。

プロジェクトからapkを作成すると、自作クラスが含まれない。

怪しいとおもって、Eclipseから新規のandoroidアプリケーションプロジェクト作成からやり直したのだけれど、どうしても、うまくいかない。

Unable to Instantiate Activity: ClassNotFound Exception を発生して、アプリケーションが起動できない。

で、クラスやソースのコーディングならともかく、プロジェクト構成の問題のようで、一日かけても解決できなかったの。

そこで、発想を変えてみた。

開発IDEをeclipseからAndroid Studio に変えて、プロジェクトを新規に作成して、コーディングソースをコピペで移植。

 

動いたーーーー!

 

デバッガも動くし、エミュレーターにも接続できるし、さくさくapkもビルドしてくれる。

問題は、Gitの実行エンジン「git.exe」を外部から登録する形なので、Eclipseプラグインでgitしていたようなことはできない、ってことくらい。

でもそれも、SouceTreeで解決。これ、内部実行Gitエンジンもってるので、インストする必要ないんだわ。

Git、Mercurial 対応 無料 DVCS Mac、Windowsクライアント | Atlassian
https://www.atlassian.com/ja/software/sourcetree/overview

SouceTree から、AndroidStudioで作成したプロジェクトをgitプロジェクト化したうえで、BitBucketにリモートするよう設定しておけば、Gitで管理できる状態にできる。うむ、便利だ。

さて、さくさく続きを作っていくぞー。

posted @ 2014/07/25 17:14 by 片桐 継(Tugu Katagiri)

[Kinect2DP]マイク配列

image

Kinect 2 for Windows Developer Previewで入手した先行ハードだとオーディオ入出力にマイク配列がでないのに、Xbox One付属のKinect 2センサーつけるとマイク配列が表示されるので、これは、もしかしてDeveloper Previewで入手したハードがアタリひいちゃった?

当然サンプルも動くわけですよ。。。。。
image

posted @ 2014/07/25 6:42 by 初音 玲

[EV3]ロボロボ”祭り”2014に参加します。

https://sites.google.com/site/roborobomaturi/

8/2(土)に開催されるNPO法人主催の子供向け体験型科学イベント「ロボロボ”祭り”2014」に参加します。

今回は、Leap + EV3で手軽で機敏に反応するロボット操作を体験してもらおうと思っています。

その他にも様々なイベントやセッションがありますので、ぜひ、お子様がいるかたは足を運んでいただけると幸いです。

posted @ 2014/07/24 1:34 by 初音 玲

JUnitのassertはどうして書くのが良いんだろうか?

ちょっと、迷って困ってた。

JUnitのテストを書いてて、

  • とある整数型リストは、1,2,3,4 の四つの要素を持っているはず。
  • リストの要素の順番はどうでもいいが、要素の中身はこうであるはず。

ってのを、JUnitのassertで検証したい、となった時、書き方としては、

  1. assertTrue(actItem.getRolled().containsAll(Arrays.asList(1, 2, 3, 4)));
  2. assertThat(actItem.getRolled().containsAll(Arrays.asList(1, 2, 3, 4)), is(true));
  3. assertThat(actItem.getRolled().toArray(new Integer[0])
            , IsArrayContainingInAnyOrder.arrayContainingInAnyOrder(1, 2, 3, 4));

と、こんな風に、色々とあるんだけど、どれが判りやすいんだろうか、正しいんだろうか。

考えるネタとして、逆に、このassert文はこれをテストしたいんだな、と、assert文から読み下してみたらどうなるのかなぁと思って、やってみたの。

  1. 1234の値で構成されたリストを引数としたContainsAllメソッドの実行結果が、trueであることを確かめたい。
  2. 1234の値で構成されたリストを引数としたContainsAllメソッドの実行結果が、戻り値trueであることを確かめたい。
  3. リストの構成要素を整数配列型にキャストした結果が、並び順関係なく1234の要素で構成されていることを確かめたい。

こうなった。なので、この場合、確かめたいことをassertしているのは、3ってことになる。

だって、テストしたいのはContailsAllメソッドじゃないし。リストの要素だし。

といいつつも、私は個人的な好みでシンプルな1が好き。何をassertしたいのか、コメントしとけば良いもん。<我儘w

でも、個人のお気楽開発ならこんな風に好きにして良いけど、チームでの開発であるなら、こういうの、きっと、どれにしときましょ?とすり合わせた方がいいね。

assertの書き方は、チーム内なり、プロジェクト内なりで、ある程度基準を作っておくと、ここで何を確認したかったのか、仕様の要点が何なのかが判りやすくなって、後から来た人にも、作って忘れちゃってる人にも、親切なテストコードになると思うの。よくある「好きにしていいよ」が一番よろしくないオチ。後で混乱したり、なんでこうなってるの?、これはなにをテストしてるの?が起きちゃうこと請け合い、つか、経験則w

posted @ 2014/07/23 10:20 by 片桐 継(Tugu Katagiri)

Androidアプリで、画面に数字を表示したい。

変にハマったので、メモ。

サイコロのアプリを作ってて、サイコロの数を画面に出したかった。

// Dice Count
TextView diceCountTextView = (TextView) convertView.findViewById(R.id.dice_count);
diceCountTextView.setText(diceRecord.getDiceCount());

そして、テストも書いた。

TextView diceCountTextView = (TextView) act.findViewById(R.id.dice_count);
assertThat(diceCountTextView.getText().toString(), is(6));

実行したら、

android.content.res.Resources$NotFoundException: unknown resource 6
	at org.robolectric.shadows.ShadowAssetManager.getAndResolve(ShadowAssetManager.java:272)
	at org.robolectric.shadows.ShadowAssetManager.getResourceText(ShadowAssetManager.java:62)
	at android.content.res.AssetManager.getResourceText(AssetManager.java)
	at android.content.res.Resources.getText(Resources.java:235)
	at org.robolectric.shadows.ShadowResources.getText(ShadowResources.java:369)
	at android.content.res.Resources.getText(Resources.java)
	at android.widget.TextView.setText(TextView.java:3844)
....more

ちょっと、悩んだんだけど、「unknown resource 6」って、期待値は6……ん?数は正しい?

TextViewのsetTextメソッドについて、改めてjavadocを見てみると

setText
http://developer.android.com/reference/android/widget/TextView.html#setText

パラメータの型がintだと、値をリソースIDのkeyと考えてリソースを探しに行っちゃうってことかーーっ!

// Dice Count
TextView diceCountTextView = (TextView) convertView.findViewById(R.id.dice_count);
diceCountTextView.setText(diceRecord.getDiceCount().toString());

グリーンになったよ。

textのsetter/getterってつい、軽視しちゃうメソッドだ。暗黙キャストとか、地雷。

そもそも、数字をカンマや単位でフォーマットして表示すれば、こういったことで悩むのはないし、気をつけろよ、自分orz

判ってしまえば、たいしたことない、ちょっとしたことなんだけどね。

posted @ 2014/07/22 10:56 by 片桐 継(Tugu Katagiri)

[AED]AED検索データに愛知県のデータを登録しました。

image

愛知県の4000件近いデータが一気に入りました。

全国表示は、県グループで市区町村単位にAED件数を表示していたのですが、このグルーピングだとちょっとアレなのが分かりました(笑)。

アプリの方は直さないとですが、オープンデータ側は問題ありませんので、是非ご活用ください。

posted @ 2014/07/22 3:25 by 初音 玲

[AED]AED検索のデータをオープンデータとして公開開始します。

http://hatsunejournal.jp/w8/aedSearch/

AED検索で使用しているAED位置情報をオープンデータとしてREST/JSON形式で公開しています。

最大で県単位でデータを取得できます。

詳しくは上記URLの「AED位置情報オープンデータ」をご一読ください。

なお、直近AEDや周辺AEDについてもエンドポイントを追加する予定です。

posted @ 2014/07/21 16:25 by 初音 玲

[CodeZine]Doc-To-Helpを活用した手を抜かないヘルプファイルの手抜き術

WordファイルからレスポンシブWebデザインなサイトを作ってしまえる優れものDoc-To-Helpの紹介記事がCodeZineい掲載されました。

http://codezine.jp/article/detail/7878

 

単なるWebページ生成ツールの域を超えた優れものだと思います。

もしかしたら、これでWebサイトを作った方が良さげなケースとかすらあるんじゃないでしょうか?

posted @ 2014/07/19 21:50 by 初音 玲

[Kinect2DP]Kinect2 Developer Previewのマイクアレイが生きしていない件

image

センサーから音声データあがってこないのはSDKの問題かなーと思っていたら、どうやらDeveloper Previewでおくられてきたセンサー本当のマイクアレイが認識できないだけのようです。

 

これ、どうしたらいいでしょうか。交換してくれるのかなぁ。

posted @ 2014/07/18 1:00 by 初音 玲

[AED]AED検索の更新機能画面(作成中)

image

作成中のAEDの新規登録/更新画面を公開します。

このスナップショットは更新時の画面ですが、AED位置を地図上でタップすることで緯度経度を抽出しています。

また、住所が分かるようであれば住所をいれたところで「住所からの位置測定」ボタンをタップして住所から緯度経度を求めることができ、地図表もその位置に移動するので、そこからさらに正確ない位置をタップするというようなこともできます。

すでに登録されているのに位置情報が異なっているため結果として二重登録となってしまうようなケースを考慮して、該当する緯度経度の周辺に登録されているAEDも一覧表示されます。もちろん、この一覧表示されているところからも編集対象として選択できます。

 

情報を入力したら【登録】ボタンをタップすればFacebookのIDとパスワードの確認画面が開き、その認証が通ればAzure SQL Databaseが更新できます。認証したときのIDは更新者としてDBに記録され、更新履歴としても保存されます。

 

画面上では必要最小限度の位置情報しか入力欄を設けていませんが、時期エンハンスでは、その他の属性情報も詳細入力として更新可能にする予定です。

総合試験や更新履歴部分のブラッシュアップが終わればアプリ配布予定です。

posted @ 2014/07/17 12:55 by 初音 玲

Robolectric を Eclipse with ADT で使ってみる。

Androidアプリを作るのに、低スペックPCで エミュレーターを使ってテストしていると、遅いorz 重いorz もうやだ;;

となったので、テスト環境を考え直すことにした。

で、見つけたのが、これ、Robolectric

Robolectric
http://robolectric.org/

エミュレートせずに、Junitで片付けてしまおうぜ!というモノらしいw

まぁ、あの重いのを使わずに済むなら、と早速導入。

pomに依存関係を追加する、いつもの方法でMavenからの導入をすると、pom.xml がエラー。

簡単に解釈すると、[android-support-v4.jar]が依存関係にあるのだけれど、これを集めてくることが出来ないらしい。

しょうがないので、pomからの導入を諦めて、

The Central Repository Search Engine
http://search.maven.org/#search|ga|1|g%3A%22org.robolectric%22

から、jar-with-dependencies.jarを取ってくることにする。

このjarファイルだと、欲しいjarが全部入りなので、取りこぼしも無いし。

というわけで、ダウンロードしたjarをプロジェクトの参照ライブラリに追加して、テストを記述。

@RunWith(RobolectricTestRunner.class)
public class ClassRecordTest {
	@Test
	public void testToString() {	
		Record act = new Record();
		assertThat(act, is(notNullValue()));
		assertThat(act.toString(), is(notNullValue()));
	}
}

Junit4のテストランナーで起動を確認!……できたのにorz

java.lang.UnsupportedOperationException: Robolectric does not support API level 19, sorry!
    at org.robolectric.SdkConfig.<init>(SdkConfig.java:24)
    at org.robolectric.RobolectricTestRunner.pickSdkVersion(RobolectricTestRunner.java:320)
    at org.robolectric.RobolectricTestRunner.getEnvironment(RobolectricTestRunner.java:296)
    at org.robolectric.RobolectricTestRunner.access$300(RobolectricTestRunner.java:61)
    at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:202)

明るく「sorry!」とか言ってんじゃねぇっ!とツッコミしつつ、

@Config(emulateSdk = 18) 
@RunWith(RobolectricTestRunner.class)
public class RecordTest {
	@Test
	public void testToString() {
		Record act = new Record();
		assertThat(act, is(notNullValue()));
		assertThat(act.toString(), is(notNullValue()));
	}
}

これで、なんとか動くようになった。本来のテストのコードはもっと色々と入ってるけど、ここでは割愛してまするw

さて、テストごりごり書いていこう。

テストプロジェクトの環境設定まとめ

もっとスマートな方法があるかもしれないけど、ベタな方法でw

使いたいJunitとツールは次のもの。

  • Junit4
  • Robolectric
  • Mockito
  • Dexmaker

Robolectricはpom.xmlから導入すると先述の問題が出ているので、それ以外をpom.xmlにセット。

  <dependencies>

	<dependency>
		<groupId>com.j256.ormlite</groupId>
		<artifactId>ormlite-android</artifactId>
		<version>4.48</version>
	</dependency>

	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.11</version>
	</dependency>
	

	<dependency>
		<groupId>org.mockito</groupId>
		<artifactId>mockito-all</artifactId>
		<version>1.9.5</version>
	</dependency>
	
	<dependency>
		<groupId>com.google.dexmaker</groupId>
		<artifactId>dexmaker-mockito</artifactId>
		<version>1.1</version>
	</dependency>
	
  </dependencies>

これを追加。バージョンについては、それぞれの最新を以下のサイトより。

Maven Repository: Search/Browse/Explore
http://mvnrepository.com/

そして、次の作業をして、テスト時に参照するクラスを一か所に集結。

  • ダウンロードしてある、roborectricの with_all_dependencies.jar をプロジェクトの参照ライブラリにセット。
  • テストで使用したいバージョンのAndroidライブラリ(ここでは18)を参照ライブラリにセット。
  • その上で、プロジェクトのgen、src、testの出力先ビルドパスを/target/classesに統一。

これで、Junitを実行した時に、Junitに参照させたい全部のクラスが読み込める状態になる。これが出来てないと、Junitテストを実行すると No class not found で例外が起きちゃうので、気を付けておきたい設定だよね。

後は、テストを書いて、Junitテストの実行でOK。これならいつもの方法だから、早いし、低スペックPCでも安全。

たとえば、OrmLiteSqliteOpenHelperを継承して作ったヘルパークラスのテストを書いてみると、

/**
 * Test for DatabaseHelper
 * @author esten
 *
 */
@SuppressLint("InlinedApi")
@Config(emulateSdk=18)
@RunWith(RobolectricTestRunner.class)
public class DatabaseHelperTest {

	/**
	 * Test for onCreate
	 */
	@Test
	public void testOnCreate() {
		// get Context
		Context context = Robolectric.application.getApplicationContext();
		
		// assert Constructor
		DatabaseHelper act = new DatabaseHelper(context);
		
		assertThat(act, is(notNullValue()));
		
		assertThat(act.getContext(), is(context));

		// assert DAO class generate
		RuntimeExceptionDao<DiceRecord, Long> actDao = act.getDiceRecordDao();
		
		assertThat(actDao, is(notNullValue()));
		
		// assert 4 Records in Database after initialize
		long actRecCount = actDao.countOf();
		
		assertThat(actRecCount, is(4L));
		
		List<DiceRecord> actList = actDao.queryForAll();
		
		assertThat(actList.size(), is(4));
		
	}
}

これでJunit実行で確認OK。

テスティングペアも同プロジェクトにあるから、QuickJunitで行き来できるし、エミュも動かないから軽い。

これで引き続き、作業を進めようw

posted @ 2014/07/16 12:00 by 片桐 継(Tugu Katagiri)

[Kinect2PP]Kinect for Windows SDK v2 Public Preview

日本以外の国でKinect for Windows v2のプレオーダーが始まり、日本ではいつ予約できるのかやきもきしていたところ、日本時間2014年07月15日からプレオーダーではなくオープンβ版のKinect for Windows v2センサーのオンライン販売が始まりました。

そして、ついにシアトル現地時間2014年07月15日、日本時間2014年07月16日に「Kinect for Windows SDK v2 Public Preview」が公開されました。

まだまだ正式版ではないので安定していないところはあるようですが、誰でもが手に入れられるようになったのは大きいですね。

posted @ 2014/07/16 8:59 by 初音 玲

AndroidのListViewについて考えた

Androidの画面部品に、ListViewってのがある。

ここに、必要な項目を表示させるための仕組みとして、Androidアプリのテンプレ?があることを覚えた。

Model-Adapter-ListView、というキーワードで結びつきがあって、これ、そのままMVC。

そう考えると、すぐに、どんなクラスをどの役割でどういう関係で使うのか、が判る。

なんて簡単に書いてるけど、MVCとかMVVMとか、デザインパターンを知っていたからできたこと。

逆に言うと、それらを覚えていないと、仕組みや作りについての理屈というか理解というか勘所がきっと難しい。

積み重ねてくるって大事で、知らないなぁってことを知ろうとして、ほんのちょっとでも触れているというか経験を積んでおくだけで、新しい事もまるで知ってたことみたいに知ることができるって楽しいし、こんなにも面白いんだね。

とか思いながら、最近は、ここいら辺のサイトに出入りしてるw

Android Tutorials for Beginners: ListView with Custom Adapter
http://www.learn-android-easily.com/2013/06/listview-with-custom-adapter.html

サンプルコードが豊富なのって、本文ゆっくり読みでも理解しやすくていいよね。

私もできるだけ、サンプルコードを載せられるように頑張ってみようw

サンプルコードが必要なテーマというか、お話の時は、だけど。

posted @ 2014/07/15 18:10 by 片桐 継(Tugu Katagiri)

[Kinect2]Kinect for Windwos v2の先行発売が開始されました

http://www.microsoftstore.com/store/msjp/ja_JP/pdp/Windows-8.1/productID.298959900

SDKがまだβだからなのか、「オープンβ」ということで一応は数量限定のようです。

税込みで\21,578

申し込みをすると2-4営業日でお手元に届くようですよ。

posted @ 2014/07/15 2:36 by 初音 玲

Androidアプリケーションでリソースを呼び出してみる

作り始めて、意外と楽しくてメモが増えてるw

Androidアプリケーションを作るためのプロジェクトをEclipseで新規作成すると、一杯フォルダができる。

そして、このフォルダたち、それぞれ役割があって、きっと、それらの中でも良くお世話になるのが、resource関連だと思うの。

たとえば、サイコロアプリをつくりたいなーとか考えた時、画面やボタン、メッセージなんかは日本語かもしれないし、他の国の人が使えば、他の国の言葉の表示も必要になる。

そんな時、このリソースファイルに定義をまとめて作っておくことで、色々と作業が楽になるんだなってことが判ってきた。

たとえば、/res/value フォルダのstrings.xml

今は日本語でつくってるけど、国際化対応では、このファイルをフォルダごと増殖させてフォルダ名に国コードを設定して中身を対応しておけば、あとはAndroidさんが使っている人のネイティヴ言語と比較して、使えそうなものをチョイスしてくれる仕掛けみたいね

とりあえず、日本語で今は作ってるけどw

で、話を戻して、そのstring.xmlに、ちょこっと登録。

<resources>
    <string name="app_name">Simple Dice</string>
    <!-- ErrorMessage -->
    <string name="DRIE0001">日本語だよ</string>
    <!-- Setting -->
    <item name="DSIZE_MAX" type="integer">200</item>
</resources>

これだけで、ソースコードからはID:DRIE0001、ID:DSIZE_MAX のリソースとして中身が認識できるようになる。

そこで、Contextオブジェクトを参照できるクラスで、取得用のメソッドを作っておいて、

	public String getResourceString(int ID){
		return getContext().getString(ID);
	}

	public Integer getResourceInteger(int ID){
		return getContext().getResources().getInteger(ID);
	}

あとで、このメソッドにIDを渡してやれば、リソースファイルで定義した内容が取れる仕掛け。IDもR.stringクラスやR.integerクラスに登録された状態になっているのでインテリセンスにでてくるから探しに行かなくても大丈夫。

ソースの中で定数定義やら、メッセージ定義やら、そういう固定リソースなものはファイルに出してしまおうね、って事がお作法。うん、覚えた。

後で国際化するにしても、メンテするにしても、リソースファイルの中で完結してくれるなら何よりだよね。

おもしろいなー。こういう仕組み。

以下、呟き。

リソース読み取ればいいって判ったけど、その取得元になるアプリケーションコンテキストの実体は、どこが保持しているんだろう?

アプリケーション起動時、onCreateの段階でもうすでに実体が存在しているので、OSからアプリケーション起動時に、恐らくはシングルトンで作られて、後はそれを提供していく形になってるんじゃないかなぁと考えてる。まぁ、動かして、アドレス見ればわかることだけど、まだきちんと調べてないw

とすると、後続?のクラスたちからコンテキスト使わせるには、そのアドレスを判るように提供する仕組みさえ作っておけば、どこからでもリソース取得できるようになる。具体的には、コンストラクタでコンテキストのアドレス渡してやれば良いってだけだけどね。

ただ、そうすると、反・祖結合、というか、クラス同士の結びつきが相当ベタな形になっちゃうのが、感覚的にどうよ、とか思ったりする。

できるだけ、クラス間って密接な関係取らない方がコード書く時考えること少なくて済むし、バグ探しやすくなるし、リファクタリングしやすくなるし。

そんな風に考えた時、SpringFrameworkってほんと、良くできた仕組みだなぁって思った。

うん、なんとなく、そんなことを思っただけ。

posted @ 2014/07/14 10:46 by 片桐 継(Tugu Katagiri)

サイトの追加

異なるネットワークにドメインコントローラーを追加する場合、ネットワーク内のように頻繁に複製させたくないならサイトを追加します。

※すべての図はクリックすると新しいウィンドウで拡大図が表示されます。

Site3

 

現在は上の図でいうと、ドメインを作ってドメインコントローラー DC1 とサイト TokyoSite ができて、ドメインコントローラー DC2 を追加したのでサブネット 192.168.0.0/24 を作った という状態です。

今回はフォレスト内の別のネットワークに新しいドメインを作るために、事前に上の図でいう サイト OsakaSite を追加(サイトリンク Tokyo-OsakaLink を指定)して、サブネット 172.16.0.0/24 を追加します。

 

管理ツール「Active Directory サイトとサービス」を起動し、左のペインから「Sites」を右クリックして「新しいサイト」を選択

01-01Site

 

サイト名を入力しサイトリンクを選択して「OK」をクリック

01-02SiteName1

 

メッセージが表示されるので「OK」をクリック

01-02SiteName2

 

サイトが追加されたので、左のペインから「Subnets」を右クリックして「新しいサブネット」を選択

02-01Subnet

 

プレフィックスを入力し、先程作ったサイトを選択し「OK」をクリック

02-01SubnetName

 

サブネットが追加されました。

02-02Site

 

サイトリンクを確認してみます。

左のペインから「Sites」-「Inter-Site Transports」と展開して「IP」を選択

03-01SiteLink

 

右のペインにあるサイトリンクのプロパティを表示

03-01SiteLinkSites

 

既存のサイトと先程作ったサイトがリンクされてるのが確認できます。

コストについては今はサイトリンクが 1 つなので気にしなくていいです。

サイト間にサイトリンクが複数ある(複数の複製経路がある)場合は、コストの小さい方が優先されるので、回線の速度やトラフィックなどに合わせて設定するようにします。

OSPF でのルーティングの設定と考え方が似てるのかなぁと思います。

レプリケートの間隔も回線の速度やトラフィックなどを考慮して決めればいいと思います。

posted @ 2014/07/12 16:46 by mitchin(mitchin@wankuma.com)

ADTのLayoutEditerを使いたい。

Androidの画面はXMLで出来ている。

XAMLと同じだね。書くコードは微妙に違ってるけど、考え方というか、やり方はほぼ同じ。

XAMLよりはテンプレ化が進んでないから、自分でテンプレつくる気持ちでちまちま作ればOK。

メンドクサい時には、ぐぐってサンプルとってきて、ちまちまいじって自分用にすればOK。

と、気楽に思って使っていたら、

EclipseのAndroid Layout Editerの画面の挙動がおかしい。

image

部品一覧がでないし、レイアウトのプレビューも表示されない。

ま、いっかーと進めてて、やっぱり、無いとメンドクサイ、と堂々巡り。

ふと、ふと思いついて、日本語化をやめてプラグインを外してみたら、綺麗に動いた

日本語化をするなら、ほどほどに、ってことでw


で、再度、日本語化してみたら、今度は画面が日本語化されるようになったよ。

image

ここから、Android XML レイアウト・ファイルを選んで、名前をつけてテンプレを選択して完了ボタン。

image

おー、部品名も日本語化してる!ってことで、作業を引き続き。

つまり、Eclipse立ち上げる時に、特にプラグイン入れた後とかは、-clean をしとけって事だ。

posted @ 2014/07/11 16:02 by 片桐 継(Tugu Katagiri)

Androidエミュレーターでアニメーションが動かないorz

やりたかったこと。とある画像を、ずっとくるくると回転させていたかった。

起きた現象。エミュレーター上では、画面に画像が出るだけで、うんともすんとも言わないorz

ある日、テストの設定を間違えて、充電中だったUSB接続の実機にテストアプリを配置してしまった。

動いてるやん!

悩んだ半日を返せ;;

教訓。低スペックPCではエミュレーターの画面表示が正しいとは限らない。時々は実機で試そう。

覚えたorz

posted @ 2014/07/10 12:19 by 片桐 継(Tugu Katagiri)

Eclipse開発環境のGitに、AtlassianのBitbucketを使ってみる。

さくっとできたので、嬉しくてメモ。

Software Development and Collaboration Tools | Atlassian
https://www.atlassian.com/

ここで、5Userまでのプライベート利用なら無料で使えるクラウドのGitサーバー環境が手に入るの。

私はGoogleのIDを持っているので、それでOAuth認証してすぐにアカウントを作ることができたよ。

とりあえず、アカウントができてログインしたら、リポジトリを作ろうか。

image

そんなに操作は困らない。

ここのサイトの素敵な所は、ヘルプや説明が充実してて、操作への誘導というか説明が判りやすいって所だと思う。

できあがったら、EclipseのGitからここへ対して操作を送ることが出来るように設定。

私は、間にローカルのリポジトリをはさんだけれど、直接の人もいるかもね。

image

作成しておいたローカルGitからリモート先として、作ったリポジトリ(画面だとtest_rep)を設定して送り込むだけ。

これでBitbucketのGitを使えるようになる。

なんてお気軽&便利♪

自分用Trac作っちゃったけど、どうしようw 連携できると良いんだけど……。

できるのかしらん? それはまたおいおい調べよう。

posted @ 2014/07/09 12:55 by 片桐 継(Tugu Katagiri)

今月も来ました^^

Blog復旧記念^^

毎月のお仕事の時間ですよ♪

マイクロソフトさん
http://www.microsoft.com/ja-jp/security/default.aspx

アドビさん
http://helpx.adobe.com/security.html

posted @ 2014/07/09 8:46 by ちゅき

[AED]AED検索データに静岡県裾野市のデータを登録しました。

image

静岡県裾野市さんがAED位置情報をオープンデータとして公開してくれていたので投入しました。

posted @ 2014/07/08 20:42 by 初音 玲

Androidアプリケーション開発にORMLiteを使う。

というわけで、Androidアプリでデータベース機能を気軽に使うために? ORMLiteを使ってみるw

OrmLite - Lightweight Object Relational Mapping (ORM) Java Package
http://ormlite.com/

使い方は次のとおりで良いみたい。

  1. プロジェクトへライブラリ参照を組込み
  2. マッピングするテーブルクラスを作成
  3. リソースにConfigファイルを設定
  4. DatabaseOpenHelperクラス作成
  5. ORMLiteが提供するクラスを継承して、ServiceやActivityの処理クラスを作成

大まかにはこんな感じ。まぁ細かい事はまだまだこれからお勉強なので、今は、ほんの触りだけ。

プロジェクトへライブラリを組込み

Maven使っていれば簡単。

Maven Repository: com.j256.ormlite ≫ ormlite-android ≫ 4.48
http://mvnrepository.com/artifact/com.j256.ormlite/ormlite-android/4.48


ここにリポジトリ定義があるので、pom.xmlへコピペして保存。その後でプロジェクト更新すれば組込み完了。

自力の人は、jarファイルをダウンロードして、各自、プロジェクトから参照。依存関係は都度、解決してやってくださいまし。

マッピングするテーブルクラスを作成

いつものORMマッピングクラスと一緒w 使うアノテーションについては、ここにリファレンスが。

ORMLite Documentation: 2. How to Use
http://ormlite.com/javadoc/ormlite-core/doc-files/ormlite_2.html#Class-Setup

シンプルな方法は、@DatabaseTableアノテーションでテーブル名を指定して、各マッピングフィールドに@DatabaseFieldアノテーションを追加していくこと。ID列の存在はORMするときにはお約束。作っておくと後々楽に対応できるので、持たせる方が吉。

リソースにConfigファイル設定

ORMLiteのConfigファイルはテキスト形式なんだけど、雛型を作るためのクラスが提供されてるの。

OrmLiteConfigUtil っていうんだけど、これをつかってConfigファイルをリソースフォルダに生成するとミスが無く簡単。

/**
** /res/raw/ormlite_config.txt Gen.
** !! /res/raw directory is exists before running !!
**/
public class DatabaseConfigUtil extends OrmLiteConfigUtil {
  private static final Class<?>[] classes = new Class[] {
    // Add your ORM-Mapping classes (ex.SimpleData.class)
    SimpleData.class,
  };
  public static void main(String[] args) throws Exception {
    writeConfigFile("ormlite_config.txt", classes);
  }
}

さくっとクラスを作成して、Javaアプリケーション起動すると作ってくれる。

image

そして、作成したテキストファイルに対してアクセスできるように、次のクラスにもgenフォルダ配下のRクラスにエントリーが出来てる。

image

これでConfigファイルの設定が完了。

DataBaseHelperクラスの作成

データベースへの接続とか、初回のテーブルオブジェクト生成とか、コードにするとメンドクサそうなデータベース関連の処理をまとめてやってくれるお助けクラスがAndroidアプリケーションには準備してある。それが SQLiteOpenHelperというクラス。このクラスをラップしたORMLiteSqlliteOpenHelperクラスっていうのがORMLiteから提供されているので、これを使うとデータベース周りのことをORMLiteにお任せできる仕組みになってるんだね。

ここで、ORMLiteを使う最大のメリット? といえると思うのだけれど、色々と毎回作るのが面倒くさいDaoクラス、DAOパターンを使うとなると必ずついて回るこのクラスをここで定義しておくと、わざわざクラスを定義する必要が無くなる!。実はORMLiteはDAOクラスのひな型を中で持っていて、データベーステーブルクラスと紐づけさえしておけば、そのクラスのDAOとして機能するあるの。つまり、FindAllとIDを条件とするSELECT、INSERT、UPDATE、DELETEの処理だけなら、わざわざ自分で作らなくても、ORMLiteのDAOクラスを使うことで書く手間もテストの手間も省ける寸法。

たしかにねー。毎回、FindAllとFindByIdとsaveとupdateとdeleteのために書いて、テストして、じゃねぇ(遠い目

ソースは長いので、サンプルのURLで割愛しとくw

ormlite-examples/android/HelloAndroid/src/com/example/helloandroid/DatabaseHelper.java at master ・ j256/ormlite-examples ・ GitHub
https://github.com/j256/ormlite-examples/blob/master/android/HelloAndroid/src/com/example/helloandroid/DatabaseHelper.java

Helperクラスができてくれれば、後は、いつもと一緒?<を

ORMLiteが提供するクラスを継承して、ServiceやActivityの処理クラスを作成

せっかく作ったHelperクラスを使用できるように、後はORMLiteXXXX系クラスを継承して、自分の欲しい処理クラスを書いて、動かしていくだけw

後の詳しい事は、また触りながら色々と覚えていくことにしてみようw

気持ち、ActivityはViewのつもり、でいるので、ModelとViewModelの層でのみHelperを参照するようにしたいなぁ、というのが本音。

ORMLiteXXXクラスはActivityで継承して使うから、コンストラクタで渡していくしかないけど、なんとかなりそうな感じだし、この方針でやってみよう。

SpringFrameworkを使うなら、HelperクラスをSingleで持っておいて、アプリケーションコンテキストにぶら下げてガンガン使っていけるんじゃないかなーとも思うんだけど、今回は使わなかったのでそのあたりはちょっと不格好というか不器用な作りになっちゃうけど、まぁいいやw

今日はここまでw

posted @ 2014/07/08 11:23 by 片桐 継(Tugu Katagiri)

Androidアプリケーションでデータベースを使いたい。

さて、アプリケーション作る上で必要なもののひとつ、データベースにデータ格納して、取り出して使いたい、なんて時。

まぁ普通にORMでゆとりして、DAOパターン使えばいいよね、とか考えるんだけど、Androidだとどうなんだろう。

調べてみて、判ったことは

  • データベースにはSQLiteを使う。
  • SQLiteを使うように、処理クラスが用意されている。
  • ORMするには、追加jarライブラリが必要。

ってことまで判った。

ORMしなくても、地道にSQL書いたり、用意されてるメソッド読んだりして処理できるらしいけど、書くソースコードが多いので疲れそう。あとでメンテするのもメンドクサそう。

なのでやっぱり、ORMしようかな。

Hibernateは使い慣れているけれど、Android環境ではどうなんだろう。

なんて考えながら、ネットをうろうろして、ちょっとみつけたものがあるので使ってみようと思う。

OrmLite - Lightweight Java ORM Supports Android and SQLite
http://ormlite.com/sqlite_java_android_orm.shtml

軽そう&面白そう。使い方はアノテーション&Configファイルで良さそう。

試してみることにするw

話変わるけど、Mavenってツールがあるのね。これは、コンパイルするときに必要なリンクライブラリをかき集めて取ってきてくれるツール。他にも色々と便利な機能があるけど、複雑になっちゃうので割愛。依存関係とかあると、これを使うならこれが必要、あれリンクするならあれも必要、とか、人力でやってると、ライブラリがないよエラー連発でキーーッてなるような事故がよく起きる。それを「これ使います」と特定のファイルに書いておくと、関係ライブラリもひっくるめて、探して全部まとめて取ってきてライブラリパスからリンクできるようにしてくれるから、ストレスが減っておすすめ。

つまりは、リンクライブラリで苦労したくないなら、入れておけってことだw

話を戻して、さっきのOrmLiteを追加してみる。

で、Mavenプロジェクトにしていると、リソースに、pom.xmlってファイルができる。ここにOrmLite用の依存ライブラリを追加すればいい。

Maven Repository: Search/Browse/Explore
http://mvnrepository.com/

というサイトを知っておくと、この作業がとっても幸せ&楽ちん。

実はこのサイトは、検索してMaven用のリポジトリをpom.xmlにコピペできるように提供してくれるサイト。

ここで検索すると大概のリポジトリ定義は見つかるので、さっそくコピペ追加して、プロジェクト更新。

必要なjarライブラリが追加されるので、プロジェクトの準備完了。

さっそく、OrmLiteのサイトの説明を見ながら、ちょっとサンプルアプリを作ってみようw

でも、疲れたから、今日はここまでorz 

posted @ 2014/07/07 13:33 by 片桐 継(Tugu Katagiri)

[WiX] WiX 3.9 release candidate

ネタ元:WiX v3.9 release candidate

3.0がリリースされて5年だそうです。。。もうそんなになるのねー。感慨深いものが。。。

ということで、お知らせでした。

posted @ 2014/07/07 13:07 by とっちゃん

AED検索データに京都府舞鶴市のデータを登録しました。

京都府舞鶴市AED位置データを公開してくれている方がいたので登録しました。

image

posted @ 2014/07/06 18:03 by 初音 玲

[AED]編集機能作成中

住所から緯度経度を求めると学校などの大きな施設では必ずしも適切な位置にポイントされません。

例えば、下記の情報だと「玄関」という情報がポイントに反映されていません。

image

 

そこでまずマップ上で「玄関」の位置をダブルクリックします。

 

するとピンの位置が「玄関」の位置に移動し、緯度経度の値も変化しました。ここまで細かく指定ができるならAED位置の登録も張り合いがでますよね。

image

ピンの位置がよければ(本当は現地に赴き、まさにAEDを見ながらポイントするのがいいでしょう)、[登録]ボタンをクリックします。

 

Microsoft Azrue Mobile Service側でPOSTについてはFacebook認証が必要なように作成してあるので、Facebookログインダイアログでログインします。なお、ユーザ認証が通ったIDについてはデータ更新者としてAzure SQL Databaseに更新日時とともに自動記録されます。

image

Mobile Services SDKを使っていますがなぜか横枠が狭くてスクロール表示になっているのがちょっとカッコ悪いですね。

 

登録が完了すれば「登録成功」と表示されます。

image

 

現在は、CSVからデータ投入後の位置精度向上のために使用していますが、新投稿や廃止されたAEDの削除(物理削除ではなく論理削除になります)などにも対応してから一般公開する予定です。

 

一般公開時の仕様で、ちょっとだけ、どうしようかなーと思案中なのはGPSで現在位置を取得してその周辺の場合だけ編集できるようにするかです。

なお、編集機能についても認証必須な形でREST/JSONなPOSTでAED検索アプリ外からも使っていただけることも検討しています。

posted @ 2014/07/06 9:13 by 初音 玲

Androidアプリケーションを作るためのプロジェクトを作ってみる

まだ手探りで、とっても、とっても、ゆっくりとw

とりあえず、ここのサイトからスタート。


http://developer.android.com/tools/workflow/index.html

Androidアプリ開発の簡単な手順について説明しているページね。

難しい英語じゃないから、ビビらず、ゆっくり読んでいけばOK。

要約すると、こんな感じらしい。

  1. 開発環境とテスト環境を作る
  2. プロジェクト作る
  3. コード書いて、デバッグして、テストして、また書いて、デバッグして(ry
  4. アプリできたよー、使ってねー、リリース

なんだ、いつものアプリ作りとあんまり変わらないね。私の場合は、3の所がまるっとTDDになるけどw

で、これをEclipseの環境で、どう使っていくのかなぁと思っていたら、テスト環境にはエミュレータが必要で、これが動くようになってないと先々に困りそう。実機使うの、なんだか怖いしw とりあえず、Androidアプリに必要なファイルについては、一括して、Android SDK マネージャーってツールで色々とお助けしてくれるらしいので、早速起動。

image

そして、気が付くw エミュレータ―に必要なSystemImageはuninstallだったw

2014070401


時期的に、ちょうど、まだ未リリースの次バージョン、Android L のSDKも公開されてたので選択。何も考えずにSDKインストールすると、4.4Wだけが入るみたい。Wearなアプリなんて考えてないから、手持ち実機と近いバージョン4.4.2を追加。そして、エミュレートの肝になるSystemImageも選んで、中身をのぞいてみたいからSDKのソースも確保w このソース読むだけで楽しいだろうなぁとワクワク。

後はそれぞれの使用許諾をAcceptして、インストール開始。無事終了したら再起動。Android仮想デバイスマネージャーを使ってエミュレートするデバイス端末を登録して、仮想でのテストが出来るように準備。といっても、仮想デバイスマネージャーに雛型が登録済なので、そこからテスト用の端末を作るだけなんだけどね。

2014070403

ここまでで1のフェーズが終了。

さて、じゃ、プロジェクト作ろうかな。ちょっとサイトを読み進めると、

http://developer.android.com/tools/projects/index.html

このページでお約束事発見。Androidアプリのプロジェクト構成として、アプリケーションプロジェクトと、そのアプリケーションと紐づけたテストアプリケーションプロジェクトの二つを作るってことみたい。テスト専用プロジェクト作るとか、面白すぎw 

さて、なんとなく作業がイメージできたし、サクサクすすんじゃおう。 でも、疲れたから、休憩なw

posted @ 2014/07/04 10:46 by 片桐 継(Tugu Katagiri)

【チラ裏】MSさんのLTE機器ってやっぱりLTE版Surfaceなんですかね? 教えてくださいえらい人^^;

個人的にずっとWktkが止まらないんだけれど、微妙に……
これって何のことなんだろうか。時期的にすでに販売とか発表とかされていてもいいはずなんですがねぇ…。
LTE版のSurfaceってまだ売っていないんでしたっけ。
電波見る限り、携帯電話ではなさそうなんですよね^^;

Microsoft Corporation
第2条第1項第19号に掲げる無線設備
1616
007-AC0073
F1D 2402~2480MHz(2MHz間隔40波) 0.000231W
http://www.tele.soumu.go.jp/resource/j/material/proof/2014/373ul.pdf

第2条第1項第19号に掲げる無線設備だとぉ?!
証明規則第2条第11号の19に規定する特定無線設備    LTE用陸上移動局
「証明規則第2条と種別名の対応表」
http://www.tele.soumu.go.jp/j/sys/equ/tech/rule/rule.htm

posted @ 2014/07/02 11:58 by ちゅき

Androidアプリケーション作成のための開発環境(IDE)を準備してみた

唐突に、Androidアプリケーションを作ろうになったわけで、とりあえずサーバー側の開発環境(Trac&Git)はできあがり。

では、クライアントはどうしようかな、と。

Android Developers
http://developer.android.com/index.html

ここで色々と調べた結果、次の方法で良いみたい。

  1. Android SDKを導入する。
  2. 開発用IDEに関連付けする。

そして、開発用IDEは、次の二つ。

  • Eclipse
  • Android Studio

Android Studioっていうのは、Intellij IDEA をベースにしたIDE。

なので、使い慣れている人はそっちを選んでダウンロードすれば、SDKやら何やらパッケージ済でOK。

Eclipseはもう何でも来い状態だから、今、自分の愛用している奴にのっけてもいいんだけど、プラグインや対応言語環境を増やすと、どんどんパフォーマンスが落ちてしまうので、ここはAndroid開発用に新しく作る方が無難

てなわけで、私はAndroid開発用IDEとしてのEclipseを作ることに。

Eclipse with ADT を導入する

まぁ、Android Developersサイトに、SDK環境セット済のEclipseパッケージがあるので、これをダウンロードすればいいだけ、なんだけどね。

http://developer.android.com/sdk/index.html

ここからWindows用開発環境がダウンロードできるの。

ダウンロードしたzipファイルを解凍して、ディレクトリにセットでOK。

ただし、セットするディレクトリには「スペース」が入らないようにね。これ、大事なお約束ね。

必要であればJavaのSDKも入れておく。これも、できれば、「スペース」の無いディレクトリ配下に作る方が良い。

落ちにくいEclipseを作るためにも、関係するファイルのディレクトリ名にスペースは入れない、護っておきたい経験的お約束。

とりあえず、いつもの方法で日本語化。その後、立ち上げてみよう。すると、このEclipseはJunoをパッケージしたものだってことが判るw

2014063001

Android SDKは導入済で、他に入っているものとしては

  • Android SDK
  • Java
  • Git
  • Maven

と、最低限が揃ってる。でもちょっと色々と足りない。

そして、なんでこれが入ってないのよ、と突っ込みたい。Eclipseマーケットプレイスが無いorz。

これが無いとEclipseのバージョンにあうプラグインを入れるのが激しく面倒くさくなるので、何よりそれを最初に追加。

その後、足りてないなぁ的プラグインをマーケットプレイスから追加。

2014063002

Mavenあるのに、Android用Mavenが無いとか、それは……使いづらいと思うのw

Gradleはこの際だし使いたい、という願望で導入。

私はTDDで作る派なので、QuickJunitとJMockitは必須。Junitを書くのも作るのもになるし。

プラグイン導入後にEclipse再起動すれば、開発用IDEは完成v やっと作業に入れそうな感じ。

まとめ?

WindowsでAndroid開発用Eclipseを設定する方法。

  1. Android Developersサイトから、Eclipse ADT をダウンロードして解凍後にディレクトリにセット。
  2. 日本語化はpleiadesを使用。
  3. プラグインにEclipseマーケットプレイスクライアントを追加。
  4. 再起動後、Eclipseマーケットプレイスから作業に必要なプラグインを追加。

残っている問題。

Eclipseの設定で、クライアントの外観設定を選択するとNPEが発生。

といっても、見た目だけの話で動作に影響ないので、私はほったらかしだったりw

posted @ 2014/07/02 10:19 by 片桐 継(Tugu Katagiri)

[AED]AED検索データに秋田県横手市のデータを登録しました。

image

オープンデータの取り組みが進んでいる秋田県横手市のAEDデータを追加しました。

posted @ 2014/07/01 22:06 by 初音 玲

Ubuntu LTSにGitサーバーを構築する

さくっと、やっちゃいますかw まずは Git本体?とデーモン起動用のプログラムをインストール。

# apt-get install git
# apt-get install git-daemon-sysvinit

そして /etc/default/git-daemon に設定を追加。Gitのパスは自分で作った、/var/git で。

2014061905

まぁ本来なら、/var/gitにはもっと厳密なパーミッション設定するんだろうけど、自宅用だし、テケトーに 777 にしとくw

そして、gitをデーモン実行。

# service git-daemon start

プロセスを確認。

image

起動を確認できたら、サービスを自動起動に登録。

# sysv-rc-conf git-daemon on

gitの設定にいろいろ追加w

2014061903

ユーザーを切り替えて、始めの一歩のgitリポジトリの初期化

$ mkdir /var/git/project.git
$ cd /var/git/project.git
$ git --bare init --shared
$ touch git-daemon-export-ok

gitクローンのテスト

image

gitの立ち上がり~♪

今日はここまで♪ 次はTracとGitの連携設定ねv

この辺りの操作やお勉強については、

Git
http://git-scm.com/

の本家サイトにあるドキュメントと

開発ツール徹底攻略 (WEB+DB PRESS plus)
http://www.amazon.co.jp/dp/4774156167

の二本立てで、ちょこっとサイト読み&読書で行けました。良ドキュメントと良書に感謝♪

閑話休題

いやーもうなんか、gitサーバー立てメンドイわー、trac連携、どっちでもいいわーって気分の時に探してて見つけたのだけれど、

Git チュートリアルとトレーニング| Atlassian
https://www.atlassian.com/ja/git/

通しで読んでおくと、さらに判りやすくなってお勧めかと。

個人で、少人数の共有であれば、ホスティングも可能だったりしてw

無料ソースコードホスティング - Bitbucket | Atlassian
https://www.atlassian.com/ja/software/bitbucket/overview

のほほんと、ぼっち開発やるには、こっちの環境使っても良いんじゃないかなー。

にしても、この会社名、どっかで聞いた気がするなーw、「さぁ、Gitショータイムだ」

posted @ 2014/07/01 7:36 by 片桐 継(Tugu Katagiri)

[AED]AED検索データとして岐阜県中津川市を追加しました。

image

Excelデータをご提供いただいたので、岐阜県中津川市のデータを投入しました。

 

ご協力いただきデータがふえてきたのでAED検索の全国表示はそろそろ当初の予定通り非同期読み込みに変更しないとですね。

設計はできているので実装、テスト、そしてストア申請していきます。

posted @ 2014/06/22 17:43 by 初音 玲

[AED]AED検索データとして岐阜県中津川市を追加しました。

image

Excelデータをご提供いただいたので、岐阜県中津川市のデータを投入しました。

 

ご協力いただきデータがふえてきたのでAED検索の全国表示はそろそろ当初の予定通り非同期読み込みに変更しないとですね。

設計はできているので実装、テスト、そしてストア申請していきます。

posted @ 2014/06/22 17:43 by 初音 玲

[AED]AED検索データとして福井県全県を追加しました。

image

福井県全体のAED位置のオープンデータがCC-BYで公開されていましたので対応いたしました。

本来であれば非常に重要なAEDの利用可能時間ですが、利用可能時間がないので位置情報を登録しないというのも本末転倒のため、利用可能時間がないものでも登録を進めていきたいと思います。

AED検索のページについても記載を訂正したいと思います。

※利用開始時間が把握できているかどうかはDB上で表現可能ですので、利用開始時間が設定されていない場合のAED検索のふるまいについても早急に検討します。

 

ちなみにCSVデータからどのように投入しているかといえばSQL文の仕立て直して投入しています。

posted @ 2014/06/22 15:42 by 初音 玲

[キャラミん♪]プロ生 x キャラミん♪

?

プロ生ちゃんが3D化したのでさっそくキャラミん♪に取り込んでみました。

そうしたら公式でたけどね(笑)。

posted @ 2014/06/22 3:26 by 初音 玲