AndroidからWebAPIを使う基本的な流れ

AndroidからWebAPIを使う基本的な流れは

GET POST でHTTP通信

次に、結果データがJSONかxmlなので
これを解析

そして、解析データを元に画面描画などを行う

Androidでは、
HTTP通信などの時間のかかる処理は
通常は非同期、つまりバックグラウンドで行う

なので、メインスレッド
つまり操作画面とは別のスレッドを作って実行させる

メインスレッドは、主にUI描画処理をする
この中で、時間がかかる処理をしてしまうと操作性の悪いもっさりアプリになる

このため別スレッドを作成して
バックグラウンドてやってもらうマルチスレッド構成にする

人手を増やして分担処理みたいなイメージ

AndroidのUI描画処理は
シングルスレッド設計、つまり担当は1人のため
別のスレッドから直接操作することはできない
非同期のスレッドからUI操作しようとすると、エラーになる

目の前の仕事がいっぱいいっぱいなのに
更に仕事追加したら倒れたというようなイメージ

このため、Androidアプリでは
マルチスレッド
つまり大変な仕事は、人手を増やして分担処理することが重要になる

Ubuntu 13.10 にRSSリーダーインストール

Ubuntu 13.10 にRSSリーダーインストール

去年 Google Reader が終了してしまったので
RSS reader として
Tiny Tiny RSS で管理することに

Tiny Tiny RSS では
DBに MySQL
PHP から JSON を使うため
これらもインストールしておく

sudo apt-get install tt-rss mysql-client mysql-server php5-json

途中で
tt-rss のデータベースを dbconfig-common で設定しますか?
と聞かれるので
はいを選択

次に使用するDBの選択になるので
mysql
を選択し
了解

次に、管理するDBのパスワードを入れるので
パスワードを入力し、確認のための入力が終わると
今度は web サーバーの設定
apache2
を選択

次に、アクセスするURLを設定

http://example.org/tt-rss/
では無理なので

IPアドレスに変更する

http://192.168.10.206/tt-rss/

あとは自動でやってくれるので処理が完了したら

設定したURLへアクセス

一番最初のときには
ログイン admin
パスワード password
でログイン

さすがにセキュリティが危険なので
画面右上の操作 > 設定で変更する

ここでユーザータブをクリックし
admin ユーザのパスワードを変更する

するといきなりログイン状態が解除され、
操作がエラーになる

一度ログアウトして
新しいパスワードで再度ログインしなおす

これでようやく使えるように

そして、操作 > フィードを購読する
を選択し
購読したいRSSを入力すれば読めるようになる

使った感想だけど、設定が面倒かも

Google Reader みたいにブラウザ直結でできればもっと汎用的に使えそう

とりあえず、これでRSSリーダーの導入が完了

今回も導入には

を利用

Ubuntu 13.10 へ owncloud

Ubuntu 13.10 へ owncloud

Ubuntu One とか Dropbox では容量が足りないので
ownCloud を入れることでローカルでの大容量ストレージを用意できる

まず sudo apt-get update

次に owncloud のインストール
sudo apt-get install owncloud

これで必要なものもインストールできる

途中でDBで使 う MySQL の root ユーザパスワードを聞かれるので
これを設定

ちなみに、ownCloudを選んだのは
ipod touch
Nexus 7 などのアプリがあり
しかも大容量で自分で管理できるのが理由

あとはPCのクライアントもあるけど
メインはタブレットとか ipod になりそう

インストール完了したら
http://192.168.10.206/owncloud/index.php
というように
IPアドレス/owncloud
でアクセス

ムック本によればここで
mysql の設定を
って書いてあるけど、そもそも
mysql のDB構築が解説に入っていないため
当然エラー
wordpress の新しいバージョンだとDB作成もしてくれるみたいだけど

しかたないので、自分でDB作成

ownCloudでプライベート・クラウド環境を構築しよう!《その2》

にこの解説があるので
参考にしながら実行

mysql -u root -p

MySQL root ユーザでログインして
create database owncloud default character set utf8;
で owncloud DB を作成

ユーザも必要なので
grant all on owncloud.* to owncloud@l
ocalhost identified by ‘パスワード’;
というように
ユーザ owncloud
ホスト localhost
パスワード
を設定

この設定したものを
IPアドレス/owncloud
でアクセスして
設定していけばログインできる

Android
ipod touch
ともに試してみたけど使い勝手は Android のほうが使いやすい

ただしディレクトリごとのアップロードができないので
少し面倒

アプリとしても Android だと写真の設定とかもあるけど
ipod touch だとファイル関連だけなので
ちょっと使いにくい

ちなみに、今回参考にしたムック本は

Ubuntu 13.10 公開鍵認証設定

Ubuntu 13.10 公開鍵認証設定

今回はSSH2での設定

まず普通にリモートログインをパスワード認証でログイン

ログインできたらログアウト

次に
クライアントマシンのほうで
ssh-keygen -t rsa -f ~/.ssh/id_rsa_ubu
で鍵作成

このときパスワードきかれるけどお試しなら
パスワードなし

次に、鍵をコピー
scp .ssh/id_rsa_ubu.pub 192.168.10.206:.
というように
scp .ssh/id_rsa_ubu.pub ユーザ名@IPアドレス:.

でコピー

コピーするときに ,pub 拡張子のついていることを確認すること

そして ssh のパスワード認証でログインしてサーバーで作業する

まず必要な準備
mkdir ~/.ssh
chmod 700 .ssh
でディレクトリ作成と権限設定

次に鍵の名前変更と移動
mv id_rsa_ubu.pub .ssh/authorized_keys

権限を変えるので
chmod 400 .ssh/authorized_keys

そして設定ファイルを変更するので
まず
sudo apt-get install vim
で vim を入れて

sudo vim /etc/ssh/sshd_config
でファイルを開く

vim は癖があるけど操作になれるといろいろできる

変更するのは
PasswordAuthentication yes

PasswordAuthentication no

#AuthorizedKeysFile %h/.ssh/authorized_keys

AuthorizedKeysFile %h/.ssh/authorized_keys
というように最初のコメントアウトを消すこと

PubkeyAuthentication yes
になっていることを確認して
あとは
:wq
で保存

設定反映のため
sudo service ssh restart
でSSHの再起動

ここまでできたら、ログアウトせずに
新しい端末とか wifi でつなげた ipod とかAndroid で接続テスト

ssh -o PubkeyAuthentication=no IPアドレス
とすればログインできないのが確認できる

かなり長めなオプションだけど tab で補完できるので
じつは楽だったりする

このオプションは公開鍵認証の無効化

で、ログインした状態を保っておくのは
設定失敗して、公開鍵もログインできない状況だと
サーバー本体で操作することになるから

あと、今回は最初のパスワードを省いたけど
本当はセキュリティを考慮するなら設定する

日経 Linux の巻末のマンガにも載っていたけど
パスワードなしを使うのは運用で
ログのみ閲覧可能とかの限定権限にしておくこと

Chef knife solo を ubuntu へインストール

Chef knife solo を ubuntu へインストール

Chief Solo のインストール
インフラ構築手順の支援ツール Knife solo をインストール

参考にしたのは 日経Linux の記事

とりあえず今回はドットインストールで使いたいので
クライアント側だけ導入

#03 Chef、knife soloを導入しよう

で紹介されているのは Mac のみ

私の環境は Ubuntu なので

curl -O http://www.opscode.com/chef/install.sh
sudo sh ./install.sh
sudo apt-get install ruby1.9.1 ruby1.9.1-dev
sudo gem install knife-solo

でインストール

インストール完了したら
knife configure

で初期化すればOK
いろいろ聞かれるけど、とりあえずEnter でOK

Tasker の設定

Tasker の設定

Android の動作を自動化させるアプリ
Tasker を使うことにしました

http://matome.naver.jp/odai/2136559737983716001
を参考にいろいろ実験

メニューが英語だけど
Profile には条件の動作の名前
task には行う動作の名前とその内容

というかんじになる

やりやすいもののほうがわかりやすいので
http://octoba.net/archives/20130517-android-app-tasker-195097.html

を参考に
まずは音楽アプリを開いたら
bluetooth on
閉じたら
bluetooth off
というものを設定する

まずPROFILES タブで
+ を押して
Application を選択

すると名前をなににするか聞かれるため
今回は bluetooth とした

するとどんな条件で?
というのが youtbe を起動したら
となり

次に何を行うかを設定することになる

なので + を押して
Net > Bluetooth

設定を off から on に変更

そして一度 Action Edit を押して元の画面に戻り

トースト表示させたいので
+ を押して Alert > Flash
としてトースト表示したい文字列を入力

今回は bluetooth on にしたよ!

とする

これで戻って
左下の三角形のプレビューボタンで動作確認

次に、アプリを閉じたら
Bluettooth off にしたいので

できたものの bluetooth とかかれている動作部分を長押しすると
メニューがでてくるので
Add Exit Task
をクリック

これで youtube を起動すると bluetooth がON
アプリを終了すると bluetooth が OFF になります

Tasker の詳しい解説には
http://kokuten.jp/tasker.php
を参考にするとわかりやすい

次に、
http://www.lifehacker.jp/2013/09/130922android_nfc.html
に載っていた
NFCへかざすと自動的にマシンを起動する方法をテスト

やりかたは英語サイトの
http://vv.reddit.com/r/Android/comments/16gldh/using_taskerwolnfc_tags_to_auto_start_your/
を参考に設定

まず
その前に
WoL Wake On Lan
のアプリの設定が必要

これは、あらかじめ Wake on LAN にマシンが対応していることが条件になる

Name には適当にマシンの名前を登録

MAC には MACアドレスを設定

IP or Domain にはマシンのIPアドレス

Port はそのまま

Send to Broadcast にチェックを入れ
起動できるなら設定は完了

次に
Tasker を起動して
TASKS タブで + を押し
新しいタスク名を設定
今回は
up とした

+ を押して Plugin を選択し

WoL Wake On Lan Wan Settings
を選択

Configuration つまり設定をタップして
設定したマシンを選択

これで動作設定ができたので、次にNFC書き込み
ただし問題があり、Tasker を Trigger の前にインストールする必要があるとのこと

また、警告文によれば
UIで Misc/外部アクセスを許可するオプションを設定する必要があるとのこと

このため
http://kokuten.jp/tasker.php
の日本語訳を参考に

Tasker の
Preference を開き

Miscタグの
Allow External Access にチェックを入れる

これで、目的どおりNFCタグへ
端末ををかざすとサーバーが起動する
ようになりました

ただし、設定した端末のみ起動可能で
ほかの端末で試しても起動することはできませんでした

おそらく、設定に必要なアプリとかが入っていないとダメです

NFC タグの有効活用

NFC タグの有効活用

最近のタブレット Nexus シリーズとか
Android の最新版にはNFCがついているので

NFCタグを購入して実験

今回使用したのは

ワンタッチでスマホのアクションを自動化する「NFCタグ」を使いこなして日常生活をハックする

を参考に
NFCタグの設定と動作から

タグは、以前週刊アスキーのおまけと
すでに購入済みのものがあるので、これを使うことに

まずNFCタスクランチャーが欲しいのでこれをダウンロード

現在は名前が変わって Trigger になっている
https://play.google.com/store/apps/details?id=com.jwsoft.nfcactionlauncher

次に まずは簡単なものから試したいので
http://octoba.net/archives/20131117-android-app-trigger-230997.html
を参考に

trigger を起動して
タスクの提案 > ドライブモード > NFC
と選択して

この状態でNFCタグを Nexus7 の後ろにかざす

すると
このNFCの設定がタグに書き込まれる

ここまでできたら、次に
書き込んだタグの上に Nexus 7 をかざしてみる
もちろん NFC対応 Android でもOK

すると
NFCが有効になっているなら
マップアプリが起動する

まずは実験成功なので
次に自分でトリガーとアクションを設定できるので
NFCにかざしたら、tweet するようにする

これは
タスクの提案 > 新規タグ
で + を押してトリガーの選択で NFC を選択

これを WiFi とかにすると
WiFi に接続したときに実行することもできる

今回はとりあえずNFCで実行

画面に NFC とでているので次をタップ

設定タスク、つまり実行することを設定するので
まずは一番したあたりにある
タスク 2 
とかかれているのを
tweet などわかりやすい名前に変更

これは、後々管理するときの名前になる

次に + を押してリストを表示

今回は twitter へつぶやきたいので
ソーシャルメディア > Twitter ツイート
で次へ

すると何をつぶやくか、というダイアログがでるので
とりあえず
test tweet とか
書いておく

これで次にをおせばできあがり

ここからさらに追加もできるけど、今回はお試しなので
完了
を選択

これで後は Nexus7 の後ろに NFC タグをかざせば
書き込みができるので
書き込み終了したら

再度このタグにかざしてみる

すると、 twitter アプリのようにアカウント利用することを
許可するか聞かれるため
ここで
Twitter のアカウントでログインすれば「認証したことになる

これで、NFCをかざすと twitter に投稿できているのが確認できる

次回は Tasker によるアプリ

Ubuntu 13.10 64bit へ WOL 導入

Ubuntu 13.10 64bit インストール

fedora 13 から ubuntu 13.10 に替え
ログインしようとしたけど

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
62:75:d8:1f:ba:e9:25:4d:4a:ff:0e:5c:fb:9a:aa:b9.
Please contact your system administrator.
Add correct host key in /home/snowpool/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/snowpool/.ssh/known_hosts:16
  remove with: ssh-keygen -f "/home/snowpool/.ssh/known_hosts" -R 192.168.10.206
RSA host key for 192.168.10.206 has changed and you have requested strict checking.
Host key verification failed.

となってしまう

以前のマシンの情報が残っているのが原因

このため
vim .ssh/known_hosts
で開いて16行目を削除

これでログインできたので
次に
WOLを導入
もともと別のマシンでやる予定だったけど
BIOSで設定できなかったため断念

sudo apt-get install ethtool
でツールをインストールするけど
すでに13.10 の場合インストール済み

次に
sudo ethtool eth0 | grep Wake-on
で状態確認

Supports Wake-on: pumbg
Wake-on: g
というように
g
なら有効になっている

あとはマシンのMACアドレスがわかればOKなので
ifconfig
でハードウェアアドレスをメモしておく

すでにクライアントマシンにはWOLで操作するツールはいれているので
一度
sudo shutdown -h now で電源をきる

以前、fedora のときに
powerwake コマンドで起動できるのは確認済みだし
MACアドレスは変わらないので

powerwake MACアドレス
で簡単に起動できる

このままでも便利だけど
どうせなら tablet とか android とか ipod とかで
起動したほうが楽

最近ではNFCもあるのでこれも活用

まずは Android
Nexus7 LAN上のPCを起動する Wake on LAN

を参考に

・Fing – NetWork Tools

WOLdroid
をインストール

これでLANの状態確認

そして起動も簡単に

シャットダウンは、ConnectBot などを使ったり
Ubuntu からログインして
sudo shutdown -h now
で電源は切れるので
ほぼリモートだけでできるようになりました