admin

息子が通っている保育園で夏祭りがありました。

保育園では、「父母の会」ってのがありまして。まぁいわゆるPTA的なものなんですけど、園内で行われるいろいろな行事に結構かかわっていて。。。

まぁ、正直面倒な面はあるんですけど、ここは子供たちが楽しみにしてるので、がんばろうかと。

で、今年、うちは夏祭りの係になりまして。うちのクラスは「パン・ジュース・ゼリー」の販売をすることに。毎年同じような内容なんですけど(^^;

業者にパンやジュースを発注したり、ゼリーを袋に詰めたり、事前注文で受け付けた商品を家族ごとに袋詰めしたり。。。まぁ、この辺はアナログな作業なんで、人手さえあればなんとかなるんですが、、、

問題は、当日にテントで販売する際の会計。
その場で注文を受け付け、計算し、会計する形になるんですけど、、、商品アイテムは以下の通り。

ジュース 80円
パン単品 100円
パン詰め合わせ 400円
ゼリー 50円

これをその場ですぐに計算して、会計しなきゃならないんですが、暗算は・・・(^^;電卓を使うにも単価が違うし、、その場でお釣りも計算して渡さなきゃいけないし。。。
前年の実績から、当日はお店にたくさんのお客さんが殺到し、続々と購入されるということなので、会計をスムーズにしないとならない。。。

ということで、ここは一つ、Androidでシステムを作ってしまおうと、、、当日の朝3時に思いつき(^^;1時間ほどで作っちゃいました。

「会計システム」なんて大げさな書き方しましたが、実際はこの夏祭り用に特化した電卓を作るだけのものです。
会計内容を記録したり、レシートを発行したり、、、やろうと思えばできますが、今回は時間もないので、会計補助システム的な位置づけで作りました。

作成する際に気をつけたのは、「いかにユーザーインターフェースを単純にするか?」
余計な機能は設けず、機械が得意でない人でも、ちょっと説明すればすぐ使えるように心がけました。

画面は以下のような感じ。

動作は以下の画像をクリックすると動画で確認できます。

ボタンは極力少なくし、操作方法は以下のように説明しました。

・注文があった商品の数を「+」ボタン「-」ボタンで調整してください
・赤い文字が合計金額です。下にお釣りの情報が出ます。
・会計が終わったら「クリア」ボタンを押してください。

これなら誰でも使えるかな?ということで。

・預かり金を入力する
・商品の個数を入力する

などの機能は、ソフトウェアキーボードを出さないとできないので、やめておきました。
なにより素早く会計をするためなので、、、

実際に使ってみて、初めて触ってもらってもすぐに使い方を理解していただき、非常にスムーズに会計処理が行えました(^^)

プログラムそのものをアップロードしておきます。商品名や価格は組み込みで作ってますので、他では使えませんが(^^;

natumaturi.apkのダウンロード

ご希望があれば、このプログラムを発展させて
・商品や価格を編集できるようにしたもの
・会計結果を端末に保存したり、通信してサーバーに残したりする
・レシートをその場で発行する
などしたものも提供することも可能です。

タイトルまんまですが(^^;
http://www.simple-sys.com/blog/mailtorikomi/
のコメントでいただきました内容について、サンプルで作ってみました。
BSMTP.DLLは今回も必要となります。上記の記事をご参考にインストールしてください。

設定する内容はこんな感じです。
メールを受信するとサーバー内のすべてのメールを削除してしまいますので、注意してください(受信対象メールであろうが無かろうが、添付ファイルがあろうが無かろうがです。)

テスト専用のメールアカウントを作成してお試しください。
「ダウンロード実行」のボタンを押すと

このように受信したメールを一覧で表示し、添付ファイルがあった場合は、その1つ目のデータを貼り付けます。

添付ファイルが複数ある場合や、画像ファイルではない場合、HTMLメールなどには一切対応していません。また、エラー処理も手抜きで作っていますので、実際にお使いになる際は、プログラムを修正して使ってください。

お約束ですが、このプログラムを使った事による一切の保証はございません。ご了承ください。
以下のリンクからダウンロードしてください。
phototorikomi.xls

Javaど素人の自分がなんとか作り上げました(^^;
まず、本体のmokomokomoko.java

JAVA:
  1. package com.simple_sys.Mokomokomoko;
  2.  
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.view.Window;
  6.  
  7. public class Mokomokomoko extends Activity {
  8.     /** Called when the activity is first created. */
  9.     @Override
  10.     public void onCreate(Bundle savedInstanceState) {
  11.         super.onCreate(savedInstanceState);
  12.         requestWindowFeature(Window.FEATURE_NO_TITLE);
  13.         setContentView(new MokoView(this));
  14.     }
  15. }

どこぞのサンプルをほぼまる写し・・・(^^;

続いて、上記から呼ばれる、MokoViewクラス

JAVA:
  1. package com.simple_sys.Mokomokomoko;
  2. import android.app.Activity;
  3. import android.app.AlertDialog;
  4. import android.content.res.Resources;
  5. import android.content.Context;
  6. import android.content.DialogInterface;
  7. import android.graphics.Bitmap;
  8. import android.graphics.BitmapFactory;
  9. import android.graphics.Canvas;
  10. import android.graphics.Color;
  11. import android.graphics.Rect;
  12. import android.media.MediaPlayer;
  13. import android.view.View;
  14. import android.view.MotionEvent;
  15. import android.util.Log;
  16. import android.media.MediaPlayer;
  17.  
  18. public class MokoView extends View {
  19.     private Bitmap image;
  20.     private int max=17;
  21.     private int page=1;
  22.     private Resources r;
  23.     private String pkgname;
  24.     private MediaPlayer player;
  25.     private int touchStart;
  26.     private int touchEnd;
  27.    
  28.    
  29.     public MokoView(Context context){
  30.         super(context);
  31.         setBackgroundColor(Color.WHITE);
  32.         r=context.getResources();
  33.         pkgname=context.getPackageName();
  34.         image=BitmapFactory.decodeResource(r,getResources().getIdentifier("moko"+page, "drawable", pkgname));
  35.         setFocusable(true);
  36.     }
  37.  
  38.     @Override
  39.     protected void onDraw(Canvas canvas){
  40.  
  41.         int w=image.getWidth();
  42.         int h=image.getHeight();
  43.         Rect src=new Rect(0,0,w,h);
  44.         Rect dst=new Rect(0,0,getWidth(),getHeight());
  45.         canvas.drawBitmap(image,src,dst,null);
  46.  
  47.         //メディアファイルの再生
  48.         try {
  49.             player=MediaPlayer.create(getContext(), getResources().getIdentifier("moko"+page+"s", "raw", pkgname));
  50.             player.prepare();
  51.         } catch (Exception e){
  52.            
  53.         }
  54.         player.seekTo(0);
  55.         player.start();
  56.    
  57.     }
  58.    
  59.     @Override
  60.     public boolean onTouchEvent(MotionEvent event){
  61.          if (event.getAction()==MotionEvent.ACTION_DOWN){
  62.              //押された。押された時点での位置を取得
  63.              touchStart=(int)event.getX();
  64.          }
  65.          else if (event.getAction()==MotionEvent.ACTION_UP){
  66.              //離された
  67.              touchEnd=(int)event.getX();
  68.  
  69.              if (touchStart>touchEnd){
  70.              //右から左に指が移動した(次のページへめくった)
  71.              this.page+=1;
  72.              if (this.page>this.max){this.page=1;}
  73.              } else {
  74.                  //左から右に指が移動した(前のページをめくった)
  75.                  this.page-=1;
  76.                  if (this.page==0){this.page=this.max;}
  77.              }
  78.  
  79.              image=BitmapFactory.decodeResource(r,getResources().getIdentifier("moko"+page, "drawable", pkgname));
  80.              invalidate();
  81.  
  82.             
  83.          }
  84.         return true;
  85.     }
  86.    
  87.  
  88.    
  89. }

一応、指でめくる機能はつけました。
あと、ページが表示されると同時に音声もなるようにしています。

画像と音声の情報ですが、本当はSDカードに入れて、簡単に入れ替えられるようにしたかったのですが、ちょっと力つきまして(^^;アプリケーションの中に埋め込む形になっています。
エラー処理とか手抜きまくりとは思いますが、とりあえず自分で作ったアプリがandoroid上で動くという目的は達成しました。

肝心の息子の反応は・・・今は、もこもこもこより電車の絵本に夢中・・・ f^_^;
次は電車アプリか? (^_^;)

次、ADTのインストール。
Eclipseを立ち上げ、ヘルプ→新規ソフトウェアのインストール。
追加ボタンを押し、名前は「Android Plugin」、ロケーションは「https://dl-ssl.google.com/android/eclipse/」で、OK。
しばらくすると、「Developer Tools」と表示されるので、チェックして「次へ」→「次へ」→「使用条件の条項に同意します」をチェックして「完了」ボタン。
Eclipseを再起動して、ウィンドウ→設定→Android→参照ボタン→Android SDKのパスを指定(今回はC:¥android¥android-sdk-windows としました。)して「OK」。これで完了。

次に、Android SDKのインストール。
http://developer.android.com/sdk/index.htmlへ行き、PlatformがWindowsのもの、Packageが「android-sdk_r07-windows.zip」をダウンロード。
ZIPファイルなので、適当なツールで解凍。

こんな中身です。適当なフォルダに移動します。とりあえず。C:¥android¥ を作成し、その下にフォルダごとコピーします。
次、コマンドラインで上記のSDKのtoolsの中のコマンドを使うので、そこにパスを通します。
スタートボタン→設定→コントロールパネル→システム→
で、システムのプロパティを開き、詳細設定タブ→環境変数→システム環境変数→変数「Path」のところをクリックして編集
今表示されている変数値の一番最後に「 ;C:¥android¥android-sdk-windows¥tools 」を追加して、OK→OK→OK。

きちんと設定できたかどうかの確認をします。スタートボタン→プログラム→アクセサリ→コマンドプロンプト
を表示して、「adb version」と入力してエンター

こんな感じで表示されればおっけい。SDKのインストールはここまで。

次にEclipseのインストール。
http://developer.android.com/sdk/index.html
によると、「3.4か3.5」ってあるので、
http://www.eclipse.org/downloads/
の右下にある、「Related Links」から、Eclipse Galileo (3.5)のリンクをクリック。
「Download Now」をクリックし、http://www.eclipse.org/downloads/packages/release/galileo/rから、「Eclipse IDE for Java Developers」をクリック。
Download Linkから「Windows 32-bit」を選んで、「eclipse-java-galileo-win32.zip」をダウンロードし、適当なところに解凍。今回は「c:¥eclipse3.5¥」に解凍しました。
で、http://www.myeclipseide.jp/blog/2009/07/eclipse35-download-install.htmlこのあたりを参考に日本語化しました。

環境作りから。
必要なのは、
・Java Developent Kit(JDK)
・Eclipse
・Android SDK
・Android Development Tool(ADT)
とのこと。まずはJDKのインストール。
http://developer.android.com/sdk/index.html
によると、「JDKの5か6」をインストールってあるので、http://www.oracle.com/technetwork/java/javase/downloads/index.htmlから、JDK 6 Ipdate22の「Download JDK」ボタンを押して、ダウンロード。プラットフォームを選んで、「jdk-6u22-windows-i586.exe」をダウンロードしました。ダウンロードしたファイルを実行し、
で「次へ」ボタン。

で「次へ」ボタン。

で「完了」ボタン。
次、PATHの設定。
スタートボタン→設定→コントロールパネル→システム→
で、システムのプロパティを開き、詳細設定タブ→環境変数→システム環境変数→変数「Path」のところをクリックして編集
今表示されている変数値の一番最後に「 ;%JAVA_HOME%¥bin 」を追加して、OK。

あと、JAVA_HOMEという変数を新規に追加。
「新規」のボタンを押し、変数名に「JAVA_HOME」、変数値に「C:¥Program Files¥Java¥jdk1.6.0_21」を入力し、OK→OK→OK。

正常にインストールされたかのチェックは、スタート→プログラム→アクセサリ→コマンドプロンプトから
「javac -version」と入力し、Enter。

こんな感じに出ればおっけい。

一気にblogの毛色が変わりますが(^^;

「これからの時代はandroidだ!」と思い、docomoのHT-03Aを購入したのが去年の11月。
しばらく本業の仕事が忙しく、アプリを使うことしかしていなかったのですが、
ようやくここへ来て、アプリの開発のほうに手を出すことに。

ただ。。。androidで開発するにあたり、とりあえず必要な知識、Javaだと思うんですが、
当方、まったくJavaについて知識がない状態でして・・・(^^;
こんな状態で、作れるようになれるのかな・・・?

とりあえず、Javaの本は、以下を購入。

明解Java 入門編

新品価格
¥2,730から
(2010/10/8 01:39時点)

解きながら学ぶJava 入門編

新品価格
¥2,520から
(2010/10/8 01:36時点)

一通り、読む・・・。なかなか頭に入ってきません(^^;
未だに、「メソッド?」「クラス変数?」「継承?」「implements?」わけわからん状態。。。(^^;

んでも、わからないところは調べながら、やっていくということで。
androidの本は、

Android 1.5プログラミングバイブル

新品価格
¥2,940から
(2010/10/8 01:40時点)


を購入。。。ちょっと前に買ったので、今はこれより新しいバージョン対応の本も出ているようです。

Android2.1プログラミングバイブル

新品価格
¥3,129から
(2010/10/8 01:49時点)


で、作りたいアプリなんですけど、ずばり「絵本アプリ」

というのも、私、息子(1歳)がおります。
その息子が生まれた直後、出産祝いに戴いたものがありまして、それがこの絵本。

もこもこもこ (ぽっぽライブラリ みるみる絵本)

新品価格
¥1,365から
(2010/10/8 01:42時点)


月齢が小さいころは、読んであげてもまったく反応しないし、こんな本面白いのかなぁ?と思っていたら、このところ、本に書いてあるセリフを私が読むと、息子も一緒に読むようになりました。

息子の今一番のお気に入りの絵本なんですが、、、いかんせん、赤ちゃん、本の扱いが乱暴で、そこかしこに折り目、破れ、よだれで汚れ・・・だんだん見るも無残な状態に(^^;

で、考えたのが「androidで絵本を見せるアプリを作ればいいんではないか?」

こんな動機でアプリを作成していきます。
次回、アプリの開発環境設定から始めます。

せっかく記事を書くのだから、その更新情報を、twitterで呟いてみることにしました。

記事を更新したときに、自動的にtwitterにPostしてくれる、Tweetly Updaterを導入してみました。
今回このブログ用に新たにアカウントを取得し記事を投稿してみましたが、うまくできたかな?

追記・うまくできました(^^)v

しばらくブログの更新を行ってきませんでしたが(^^;
本業のシステム開発が忙しく、なかなかblogの更新に手をつけられない状態でした。
今ちょっと余裕ができたので、久しぶりにblogを更新。

ついでにデザインも変更してみました。あと、アフェリエイトも張ってみたり。
この右側→に表示されている、ExcelVBA関係の本のリンク、リロードするたびに
ランダムに商品内容が変わるような仕組みになっています。

wordpressでそういうプラグインがあるとは思うのですが、探してもいまいちピンとくるものが
なかったので、、、。特定のフォルダに表示対象となるアフェリエイトのコードが記述されたテキストファイルを複数枚おいて、それをランダムに読み込んで表示させるになっています。
あまりphpでプログラムを書いたことがないので(^^;、ネットで検索、本を読みながら組み込んでみました。

PHP:
  1. <?php
  2.     $filesuu=file_get_contents('/xxx/xxx/filesuu.txt');
  3.     $fileno=rand(1,$filesuu);
  4.     $hyoujifile=file_get_contents("/xxx/xxx/$fileno.txt");
  5.     echo $hyoujifile;
  6. ?>

まず特定のディレクトリ(上記では/xxx/xxx/)に、(数字).txtというファイル(この中にアフェリエイトのコードが入っています)があり、
また、filesuu.txtというファイルに、上記のファイルが何個あるかが登録されています。
$filesuuという変数の中に、file_get_contents関数を用いてファイルの中身(ファイル数の数字)を取り込み、
その後$filenoで1から$filesuuまでの乱数を発生させています。
その後、$hyoujifileの中に表示したいテキストファイルを読み込みechoで表示する、という感じです。

これでリロードするたびにランダムに表示されるようになりました(^^)

© 2011 simple blog いろいろ勉強中 Suffusion theme by Sayontan Sinha