2011年3月30日水曜日

学べるニュース プルトニウム

池上彰の学べるニュースで原子力特集、またやっていたのでまとめよう。

■プルトニウムについて
・プルトニウムは自然界にないもので核分裂の時にできるもの。
・プルトニウムも核分裂を起こす。
・プルトニウムとウランを混合した燃料をMOX燃料という。
・MOX燃料を使用した原子炉をプルサーマル原子炉といい、福島第一原発の3号機はこれ。
・核燃料からプルトニウムを増幅させようとしたものが、高速増殖炉(もんじゅ)である。
・プルトニウムは重いが出すアルファ線は人体影響を及ぼしやすい。

■放射線について
放射線には
・アルファ線
・ガンマ線
・ベータ線
・中性子線
がある。

アルファ線は紙とかも貫通しにくい。
ガンマ線はアルミニウム箔は貫通しにくい。
ベータ線は厚い鉄鋼は貫通しにくい。
中性子線は水やコンクリートを貫通しにくい。

プルトニウムはアルファ線。

2011年3月29日火曜日

Android  MapViewへキー発行

ひさびさMapViewをつかってAndroidアプリを作成しようとおもったら、MapViewが表示されなかった。
理由は認証キーが変わっていたためでした。

念のため以下、認証キーの発行方法。
ただし、デバッグ用と正式版はちがいます!!これ注意しないと、実際にストアに上げた後に
地図が表示されない!っと騒ぐ羽目になっちゃいます。(自分はその口でした・・)

■発行手順(デバッグ用)
①Javaのkeytoolでandroidのフィンガープリントを発行
②①でandroidサイトから発行てもらう。


①Javaのkeytoolでandroidのフィンガープリントを発行
keytoolはJavaのbinに存在しますー。


 cd "C:\Program Files\Java\jdk1.6.0_10\bin"
 keytool -list -alias androiddebugkey -keystore "C:\Documents and Settings\KENZY\.android\debug.keystore" -storepass android -keypass android

 androiddebugkey, 2011/03/25, PrivateKeyEntry,
 証明書のフィンガープリント (MD5): DC:A0:9C:F1:10:xxxx.....


②①でandroidサイトから発行てもらう。

あとは以下にアクセスし、上記の認証情報を入力して同意するとキーがもらえる。

http://code.google.com/intl/ja/android/maps-api-signup.html


■発行手順(androidストアアップ用)
手順はおなじだけど、①のフィンガープリントの発行方法が違います。

フィンガープリント発行する元となるkeystoreをAndroidMarketにアップする際に使用するkeystoreを使えばよいのです。xxxxがkeystore

 keytool -list -keystore xxxx


でOK!!



2011年3月27日日曜日

スクレイピングって

Webサイトから必要な情報を引っ張ってくることをスクレイピング
っていうらしい。

確かに必要な情報を取りたい時に、サイトがAPIを提供していれば
それを使えばいいけど、そういうの提供していないサイトから情報を
取得するのってどうすればいいのかな!?っとちょっと思っててグーぐる
ったらこの単語に引っかかった。

で、調べたらjavascriptで以下のサイトでやっていた。

 http://blog.goo.ne.jp/xmldtp/e/625be225495dcb649161d9a3c09d6816

あとAndroidだとWebViewをつかって!?簡単にできそうなので以下
参考にやってみようかな。

 http://android.g.hatena.ne.jp/keigoi/20100211/1265892976
 http://fromnorth.blogspot.com/2010/02/webview.html

2011年3月26日土曜日

Android -- 縦横描画の切り替え

■xmlで画面描画している場合


main.xmlで縦横の固定するかを管理するときは、AndroidManifest.xmlの以下configChangesを指定。






  • portrait   縦固定
  • landscape  横固定
  • unspecified  固定なし(デフォルト)
実際には固定なしの場合以下のxmlから作られた描画クラスが使用される。

縦 ⇒ res/layout/xxx.xml
横 ⇒ res/layout-land/xxx.xml

■Viewクラス作成時

Activityクラスで縦、横が切り替わったことは判断できるので、その場合に
Viewクラスの表示内容を切り替える。以下使用するActivity。

// 設定が変更されたとき
    public void onConfigurationChanged(Configuration conf){
     super.onConfigurationChanged(conf);
    }
// インスタンスの状態保管
    public void onSaveInstanceState(Bundle savedInstanceState){
     super.onRestoreInstanceState(savedInstanceState);
    }
// インスタンスの状態を再現する
    public void onRestoreInstanceState(Bundle outState){
     super.onSaveInstanceState(outState);
    }

画面を縦から横にしたときに呼び出される順番。

  1. onSavexxx(変更時の値を保持)
  2. onCreate(Activity作成しなおし)
  3. onRestore(再作成時の処理)

以下、ソースを表示。
MyViewerActivity
public class MyViewerActivity extends Activity {
 static final String TAG = "MyViewerActivity";

 private Configuration config;
 private int orientation;
 private static int[][] areas = new int[][]{
  new int[]{5,5,200,200},
  new int[]{5,5,300,300}
 };

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
     Log.d(TAG, "onCreate");
        super.onCreate(savedInstanceState);

        // Winddowsの変更
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

        // 環境情報取得
        Resources resouces = getResources();
        config = resouces.getConfiguration();

        if (config.orientation != Configuration.ORIENTATION_PORTRAIT) {
         orientation = 1;
        }

        setContentView(R.layout.main);
//        setContentView(new MyView(this));
    }

    @Override
    // 設定が変更されたとき
    public void onConfigurationChanged(Configuration conf){
     super.onConfigurationChanged(conf);
     Log.d(TAG, "config");
     this.config = conf;
    }

    @Override
    // インスタンスの状態保管
    public void onSaveInstanceState(Bundle savedInstanceState){
     Log.d(TAG, "onSave");
     super.onRestoreInstanceState(savedInstanceState);
     int ori = 0;
     // 縦表示じゃないばあい
     if (config.orientation != Configuration.ORIENTATION_PORTRAIT) {
      ori = 1;
     }
     Log.d(TAG, "orient=" + ori);
     savedInstanceState.putInt("ORIENTATION", ori);
    }

    @Override
    // インスタンスの状態を再現する
    public void onRestoreInstanceState(Bundle outState){
     Log.d(TAG, "onRestore");
     super.onSaveInstanceState(outState);
     orientation = outState.getInt("ORIENTATION");
    }

    public Rect getArea() {
     Log.d(TAG, "getArea");
     int[] area = areas[orientation];
     return new Rect(area[0],area[1],area[2],area[3]);
    }
}
MyViewクラス
public class MyView extends View{
 private MyViewerActivity context;
 private Drawable drawable;

 public MyView(Context context) {
  this(context,null);
 }

 // main.xml使用時はこっちが呼ばれる
 public MyView(Context context, AttributeSet attrs) {
  super(context);
  this.context = (MyViewerActivity)context;

  Resources resources = context.getResources();
  drawable = resources.getDrawable(R.drawable.pose08_g);
 }

 protected void onDraw(Canvas c) {
  super.onDraw(c);
  c.drawColor(Color.GREEN);
  if (drawable != null) {
   drawable.setBounds(context.getArea());
   drawable.draw(c);
  }
  int w = this.getWidth();
  int h = this.getHeight();
  Paint p = new Paint();
  p.setStyle(Style.STROKE);
  p.setColor(Color.DKGRAY);
  c.drawRect(new Rect(5, 5, w-10, h-10), p);
 }
}

Android -- Viewクラス

久々なので思い出しながらまとめます。

■画像描画
画像描画には2つの方法がある

  • main.xmlででの表示
  • Viewerクラスを継承して新規に作成しての表示

Viewerクラスを継承してのMyViewerを表示にはmain.xmlに独自Viewerの
パスを指定する必要がる。(com.hogeがそれ。)





なお、以下のどっちでも表示できる。

  setContentView(R.layout.main);
//setContentView(new MyView(this));

main.xmlを使用したときは、Viewerクラスの引数2つのコンストラクタが呼ばれる。

■画像表示


画像表示には2とおりある

  • BitmapFactoryで画像を作成し、それをCanvasで表示
  • Resourcesでgetした画像をDrawableで表示

ということで以下、Viewソース

public class MyView extends View{
 private Context context;
// private Bitmap image;
 private Drawable drawable;

 public MyView(Context context) {
  super(context);
  this.context = context;
 }

 // main.xml使用時はこっちが呼ばれる
 public MyView(Context context, AttributeSet attrs) {
  super(context);
  this.context = context;

  Resources resources = context.getResources();
//  image = BitmapFactory.decodeResource(resources, R.drawable.pose08_g);
  drawable = resources.getDrawable(R.drawable.pose08_g);
 }

 protected void onDraw(Canvas c) {
  super.onDraw(c);
  c.drawColor(Color.GREEN);

/*  if (image != null) {
   c.drawBitmap(image, 10, 10, new Paint());
  }
*/
  if (drawable != null) {
   drawable.setBounds(10, 10, 310, 310);
   drawable.draw(c);
  }
  int w = this.getWidth();
  int h = this.getHeight();
  Paint p = new Paint();
  p.setStyle(Style.STROKE);
  p.setColor(Color.DKGRAY);
  c.drawRect(new Rect(5, 5, w-10, h-10), p);

  for (int i = 0; i <10; i++){
   Paint p2 = new Paint();
   p2.setStyle(Style.FILL);
   p2.setColor(Color.rgb(25*i, 0, 0));
   c.drawCircle(25 * i + 125, 25 * i +125, 100, p2);
  }
 }

}


2011年3月25日金曜日

久々Androidやろうとしたら、アノテーションやらdebug.keyエラーやら

久々にAndroidをやろう、ということでつかってなかったノートPCに前つくったアプリを
持ってきて動かそうとしたらいろいろエラーがでたのでそれについて記載。(俺の4時間・・)


  1. androidを最新にしようとしたらjava1.6に上げなきゃだめだめ
  2. ソースのアノテーションでエラーでまくり
  3. Error generating final archive: Debug certificate expired on・・・エラー
まず、最新のandroidが出てないかをandroid developersに見に行ったらありました。

http://dl.google.com/android/installer_r10-windows.exe

上記をクリックしてダウンロードすると、Programsの下にandroidフォルダとしてインストール
されました。前はファイル解凍して任意の場所において使っていたはずだけど
かわったんだ、、とここは特に問題なし。と思いきやjava1.6じゃないとだめなのでそれも
oracleサイトからインストールを強制的に促されたんでそれに従いインストール。

で次にインストールしたパスを設定しソースを表示すると大量にアノテーションでエラーが・・
でググるとjavaの設定が1.5だとアノテーションでエラーが出るようなので、プロジェクトの
プロパティ->Javaコンパイラーのコンパイラー準拠レベルを1.6に変更し再ビルド。
これでアノテーションエラーは回避できた、と思いきや・・・

最後に1つ以下のエラーが出てしまう。

Error generating final archive: Debug certificate expired on

いろいろDDMの設定とかいじったけどだめだったのでこれもググったら、Android開発するとき
に必要となるdebugkeyなるものの有効期限が切れているためエラーになっていたっぽい。
以下のサイトを参照に一旦C:\Documents and Settings\xxx\.android下のdebug.keystore
を削除し、その後タイムゾーンを変更したらサイド作成され、エラーも消えました。


ふー、やっぱ2ヶ月のブランクは大きかったか。。こまめに見るようにしよ。。

2011年3月23日水曜日

Rails + GAEでサイト立ち上げ

Rails + GAEでサイトを公開したい!!ということであれこれ検索すると、
さんがすでに行われていたので、それを参考にやってみた。

http://chirokings.blogspot.com/2011/02/gaerubyrails-on-windows-2311.html

手順は

  1. ruby(1.8.7)にrails(2.3.11)をインストール
  2. rubyにappengine-jrubywoをインストール
  3. rails2311_appengine.rbをダウンロードしそれを一部修正
  4. 3ファイルをもとにプロジェクト作成
  5. dev_appserver.rb.baでサーバを起動
  6. アプリケーションIDを/WEB-INF/appengine-web.xmlに指定
  7. appcfg.rb.batでGAEにデプロイ

つまるところは特になしだけど、5を行うことで6のファイルが作成される。

コマンドと補足

  1. gem install rails -v 2.3.11
  2. gem install google-appengine 
  3. Fetch configuration files ⇒FileUtils.mkdir_p 'app/controllers/rails'
  4. ruby rails2311_appengine.rb
  5. dev_appserver.rb.bat .
  6. <application>xxxIDapplication> のxxxIDをアプリ名にする
  7. appcfg.rb.bat --enable_jar_splitting update .
次はDBアクセスだー!

【スマート農業】 いまさらだけど、いまだからこその農業IoT 

久々投稿 転職してはや2年半。バタバタしてる中で、あーっという間に時間は過ぎてきた。 仕事はそれなりに順調だけど、ただやっぱり自分で何かを起こす!ということはではできていなく、、、年齢45をこえ、、、、、とくに昔からずーとやろうやろうと言って実現できてなかっった農業IoT。。 去...