2014年3月6日木曜日

組込みAndroidボードでシリアル通信やりたい時にどうするか

ArdiunoだったりBeagleBoardだったり組込みAndroidボード側のシリアルポートから何らかの通信を行う時の方法メモ。

ボード側の端子がUSBの場合の方法はすぐにぐぐれば情報に行き着くので割愛
シリアルポート制御をJavaからやる方法について。

○android-serialport-apiを使う。
NDKが必須になるが
[android-serialport-api]
https://code.google.com/p/android-serialport-api/

シリアル通信のサンプルもついてるソースコードは
svn checkout http://android-serialport-api.googlecode.com/svn/trunk/ android-serialport-api
で取得する。

jniのソースをプロジェクトに組み込んで
サンプルを参考にAPIを呼ぶだけで簡単にシリアル通信をAndroidアプリから実現できて便利。

2014年1月5日日曜日

内田洋行 ルディオ(中古)購入。

約10年ぐらい使用していたデスクとワンセットになっていた椅子の背もたれが長年の体重かけすぎ使用により折れた。
さすがに限界だろうということでOAチェアを探してみたが高級品を即決で買うのはさすがに気が引けたので
中古品で何かないかと探してみたところヤフオクでいい出物があったので購入した。

内田洋行 ルディオ

後継姿勢時のキーボードタイピングが今までのものより格段にやりやすくなった。
これなら早めに椅子に投資すべきだった。
今回は本体5,500円+送料で購入したが次は高級品を購入するための積立を今年1年ぐらいで貯めて新調しようかと思います。

2013年12月20日金曜日

Android 4.2.2 用タブレット向アプリの開発環境をwindows上で構築する。

業務上Androidアプリ開発の必要性がでてきそうになったので前準備をしたい。
ちょうど持ち物にNexus7があるのでAndroidアプリ開発環境を構築してみる。

[持ち物]
Nexus7 (Android 4.4.2) (4.2.2用なのは別デバイスで動かす目的があるため)
Windows 7 なデスクトップPC

[手順]
1.JDKのインストール
JDK(Java Development Kit)を
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
からダウンロード(手元ではwindows x64)し、インストールする。
その後環境変数に JAVA_HOME = C:\Program Files\Java\jdk1.7.0_45;を追加
(下図参照,パスはインストール先によって適宜変更)


2.Android SDKのインストール
Android SDKのサイト (http://developer.android.com/sdk/index.html)から
Android SDK(adt-bundle-windows-x86_64-2013xxxx.zip)をダウンロードし
任意のフォルダに展開する。


3.Eclipseの日本語化
Eclipseの表記を日本語化するため
http://mergedoc.sourceforge.jp/ で
Pleiadesプラグインの最新版をダウンロードする。
ダウンロードしたzipファイルを展開し、中身を2.で展開したAndroid SDKのフォルダ
のeclipseフォルダの下にコピーする。
その後eclipse.iniの最後尾に
-javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar=default.splash
を追加してファイルを保存して閉じる。
その後eclipse.exeを起動し、ワークスペースを指定する。

無事、起動。

2012年4月26日木曜日

Ruby on Rails + RSpec 画像アップロードのテスト方法

画像をformからアップロードする時のバリデーションテストをどうするか?
という話をメモしておきます。
[環境]
CentOS6.2
Rails 3.2.2
Ruby 1.9.3-p125


(1)テスト対象のModel

前回に引き続き
簡易blog(食べたもの記録)アプリの記事本体部分を想定。
Modelの名前はDiningとします。
app_root/db/migrate/[date]_dinings.rbより抜粋すると
class CreateDinings < ActiveRecord::Migration
  def change
    create_table :dinings do |t|
      t.date :date      #日付
      t.string :time   #「朝」「昼」「夜」が入る
      t.string :menu #「食べたもの」
      t.integer :price  #「お値段」
      t.string :shop   #「店」
      t.string :place  #「店の場所」
      t.integer :evaluetion #1~5の5段階評価
      t.string :impression #感想
      t.string :ctype    # 写真が指定されている時写真のcontent_type
      t.binary :photo  #写真

      t.timestamps
    end
  end
end

写真データを直接DBに格納するモデルです。 ここでは ・画像ファイルのcontent-typeが画像で無い時バリデーションエラーになること をテストしていきます。

(2)テスト

app_root/spec/model/dining_spec.rbより抜粋
describe "写真(photo)" do
    it "content-typeが画像の時バリデーションエラーが発生しないこと" do
      @dining.data = Rack::Test::UploadedFile.new(Rails.root.join("test/fixtures/test.jpg"), "image/jpeg")
      @dining.should be_valid
    end
    it "content-typeが画像以外の時バリデーションエラーが発生すること" do
      @dining.data = Rack::Test::UploadedFile.new(Rails.root.join("test/fixtures/test.jpg"), "image/text")
      @dining.should be_valid
    end
  end

Rack::Test::UploadedFile.new()が仮想アップロードファイルをテストするためのメソッドで 第1引数にテスト画像,第2引数にcontent-typeを設定します。

(3)バリデーションの実装

テストがでけたので。 app_root/app/model/dining.rbにバリデーションを実装していきます。
#coding:utf-8
class Dining < ActiveRecord::Base

#中略

  validate :file_invalid? #写真のバリデート

  def data=(data)
    self.ctype = data.content_type
    self.photo = data.read
  end

  def file_invalid?
    if !self.photo.nil? then #写真が指定されてる時
      ps = ['image/jpeg', 'image/gif', 'image/png']
      errors.add(:photo, 'は画像ファイルではありません') if !ps.include?(self.ctype)
     end
  end

end
テスト/実装コードにもある通りフォーム側で画像をアップロードする時に、 直接model上のカラムである:imageではなく、:dataという仮のパラメータにセットして アップロード時に:ctypeと:imageを:dataから抽出してセットしている点が注意が必要。 form側では
<%= f.label :data, "写真" %> <%= f.file_field :data %>
という記述でアップロードフォームを実現しています。

2012年4月20日金曜日

スカパー!e2とひかりTVを比較検討した。

というわけで。
CS放送契約を検討中でして、現住居(都内の賃貸ワンルーム)の環境では
スカパーe2(スカパーHDはアンテナ立てられず断念)とひかりTVが選択肢になりました。
そこでスカパーe2の16日間無料とひかりTVの2ヶ月無料キャンペーンを利用して
両者のサービスを体験し、比較した結果をメモしておきます。

スカパー!e2

必要なもの

・CS110度対応アンテナ または フレッツTV
アンテナは無料でつけてくれるキャンペーンが今やってるそうです。
うちの場合はマンションの共聴設備で対応してました。

料金

月490円 + 基本パック3,570 円 + オプションチャンネル (Jリーグをみるなら2,580円)

メリット

・Jリーグ全試合生で見られるオプション有(スカパーのみ)
・テレビ内蔵のEPGが使える為動作・視聴予約が軽快(AQUOS使ってます)

デメリット

・(ひかりTV比で)料金が高い。
・別途レコーダーが無いと録画不可
・成人系ch無し


ひかりTV

必要なもの

・光Bフレッツ回線
・IPv6対応ルータ

料金

・月2,625円(テレビざんまいプラン) + チューナーレンタル料 525円 + オプションチャンネル
・月3,675円(おねうちプラン) + チューナーレンタル料 525円 +オプションチャンネル(テレビに加えてビデオのいくつかが見放題)

メリット

・外付けHDD取り付けで録画可能。
・オンライン録画予約可(スマホ/PCから可能なので撮り忘れが減る)
・料金安
・囲碁・将棋チャンネルがある(ただし2012年後半にはスカパー対応予定)
・成人系chがある(メリットかどうか)

デメリット

・Jリーグは諦めないといけない。
・UIがかなりもっさり。
単体で使うとマシかもしれないですがテレビ内蔵EPG等と比較するとさすがに重い。
NetFront(UIブラウザ)のせいなのか、STBのスペックがたりてないのか。
・番組表の見通しが悪い
縦の視認性が4時間分しかないので録画しておきたい番組があるかどうかガイド誌みたほうが早い
・リモコンショートカットが全画面視聴中に効かない
裏番組表表示中でないとショートカットできないのもちょっとイライラ


まとめ

・ひかりTV(テレビざんまい)+スカパー!e2 Jリーグパックが贅沢ながら個人的には満足度を最大化できる組み合わせな気がします。(がJパックの方は諦めるかもしれません。)
・人がこの調べ物してひかりTVのSTB申し込んだ直後にSonyが3波対応のnasne出してきたのでスカパーに乗り換えるかもしれません。
・ビデオ見たいならhuluのが安いしよさそう
・おうちでえろえろなものを見たい人はひかりTV一択です

2012年4月13日金曜日

Rails3.2 + RSpecで楽しいTDD(ModelのValidationテスト)

というわけでModelのバリデーション機能をテストしていきます。

[環境]

CentOS6.2
Rails 3.2.2
Ruby 1.9.3-p125

(1)テスト対象のModel

簡易blog(食べたもの記録)アプリの記事本体部分を想定。
Modelの名前はDiningとします。
app_root/db/migrate/[date]_dinings.rbより抜粋すると

class CreateDinings < ActiveRecord::Migration
  def change
    create_table :dinings do |t|
      t.date :date      #日付
      t.string :time   #「朝」「昼」「夜」が入る
      t.string :menu #「食べたもの」
      t.integer :price  #「お値段」
      t.string :shop   #「店」
      t.string :place  #「店の場所」
      t.integer :evaluetion #1~5の5段階評価
      t.string :impression #感想
      t.string :ctype    # 写真が指定されている時写真のcontent_type
      t.binary :photo  #写真

      t.timestamps
    end
  end
end

写真データを直接DBに格納する荒っぽいモデルですが利用者が1人ということでご勘弁を。 このモデルに対して
1.必須パラメータが空の時バリデーションではじかれること
2.必須で無いパラメータが空の時バリデーションではじかれないこと
3.長さの最大長があるものに関しては境界値動作が正しいこと
を確認するためのコードを書いていきます。

(2)テストデータの準備
app_root/spec/fixtures/dinings.ymlに以下の内容のテストデータを準備します。
#coding:utf-8
valid:
  date: 2012-03-22
  time: "朝"
  menu: "おうどん"
  price: 290
  shop : "おにやんま"
  place: "五反田"
  evaluetion: 4
  impression: "おいしい"
  ctype : "image/jpeg"
  photo:
 
ここではバリデーションに引っかからないようなデータを用意しておきます。
(3)テストコードの実装
app_root/spec/models/dinings_spec.rb
にテストコードをバリバリ書いていきます。
#coding:utf-8
require 'spec_helper'

describe "Dining バリデーションテスト" do

  fixtures :dinings #テストデータを設定
  before(:each) do #全テスト実行前の共通動作
    @dining = dinings(:valid) #dinings.ymlの (valid:)で指定されているデータを設定
  end
  it "dateが空の時:エラーが発生すること" do
    @dining.date = ""
    @dining.should_not be_valid #be_validで無いことを確認する
  end

さてこれでテストを実行すると(sporkはたちあげておいて下さい)
$ rspec --drb --drb spec/models/dining_spec.rb

バリデーションコード書いてないので失敗(日付が空だけどbe_valid)します。 4.テストを通すコードの実装
というわけでテストを通すコードを書いていきます。
app_root/app/model/dining.rb
#conding:utf-8
class Dining < ActiveRecord::Base
  validates :date,
    :presence => true #dateは空を許さない
end

これでテストを再度実行すると無事テストが成功。
というようなサイクルで
テストコード→実装→テスト通った嬉しいを繰り返していくと
段々緑色が見える度に脳内麻薬が出てコード書くのにboostがかかるのでおすすめです。
あと赤色が緑にならないと気持ち悪くて寝られなくなる。
次回は写真アップロードテストのやり方あたりをメモしておきます。

2012年4月12日木曜日

Rails3.2 + RSpecで楽しいTDD(導入編)

さて、標題にはTDDと書いてますが実際にはコード書いてからテスト書いてたりしてます。

手元でちまちま書いてるアプリもさすがにテストも無しではいかんだろうということで
まずは手元にあるコードのカバレッジが100%となるテストを書き、
その後次に何か乗っける時からはテストから書いていきたいと思います。

というわけで今回はテスト環境の導入編から。
この記事で前提とする環境は
・CentOS6
・Ruby on Rails 3.2.2
・Ruby 1.9.3 p-125
・MySQL
となっています。

(1)テストに必要なGemの導入
app_root/Gemfileに以下の記述を追加
gem 'rspec-rails'
gem 'simplecov', :require => false
#gem 'simplecov-rcov', :require => false
gem 'spork'

'rspec-rails'は文字通りRailsでRSpecテストを行うためのGem
'simplecov'はカバレッジ計測の為のGem(rcovはRuby 1.9系列では使用できない為)
'simplecov-rcov'はカバレッジレポートをrcovと同等の形で出力するためのgemで
Jenkins先生の出番がある人以外はいらないと思います。
sporkはTwiwt:Blog / jugyo : spork でサクサク RSpec on Rails3
こちらを参照。テストを高速に実行しまくる為に導入します。そして
$ bundle install

ここまでが済んだ状態で既存のものに対するテストのひな形を作る場合は
$ rails g rspec :controller hoge hage ...

てな感じで実行してみると(hoge,hageは自分が作ったコントローラ名)
app_root/spec/以下に自動生成されたテストケースのひな形ができると思います。

(2)テストの準備
1.sporkを起動する
テスト実行用のサーバーことsporkを起動します。
最初の1回のみ以下の設定が必要です。
$ spork --bootstrap

終われば
$ spork 

で起動。
2.カバレッジ計測処理の追加
app_root/spec/spec_helper.rbの先頭に以下の記述を追加
require 'rubygems'
require 'spork'

Spork.prefork do
end

Spork.each_run do
end

require 'simplecov'
require 'simplecov-rcov'
SimpleCov.start 'rails'



(3)テスト実行

$ rspec --drb spec/model/user_spec.rb

とこんな感じで実行できます。

$ rspec --drb spec/*

とかでまとめて実行も。
カバレッジは app_root/coverage/index.html
を見るとわかりやすく表示されていると思います。
次はmodelのバリデーションテストの書き方をメモしておこうと思います。