2014年12月21日日曜日

Android Wear側のアプリが動いていない状態でデータ同期

http://developer.android.com/samples/DataLayer/index.html

DataLayerのイベントを受け取るには、イベントのリスナを実装したActivityか、WearableListenerServiceを継承したServiceを作ればOK。

リスナを実装したActivityだとActivityが死んだらデータ同期が出来ないので、Handheld側で設定した値をWear側に送るとかがいい感じに出来ない。

WearableListenerServiceを継承したServiceを使うとうまくいく。

2014年12月18日木曜日

Android WearでBluetooth接続でのADBが認証できなくなった

Android Wearを初期化したらWear側のADBを有効化+Bluetooth経由のデバッグを有効化しても繋がらなくなる現象に悩んだのでメモ

症状

普段は以下のコマンドでhandheld側のアプリでホストとターゲットが接続中となる。

$ adb forward tcp:4444 localabstract:/adb-hub
$ adb connect localhost:4444

しかし、Wearを初期化したらあとでは、”adb devices”で確認すると以下な感じになった。(**は環境によって違う)

$ adb devices
List of devices attached
***********     device
localhost:4444  unauthorized

原因

初回接続時にはhandheld側に

「Wearのデバッグを許可しますか?」

といったタイトルのRSAキーのフィンガープリントを登録するダイアログが出ているハズなのだが、初期化前の段階で

「このパソコンからのUSBデバッグを常に許可する」

にチェックを入れてしまっていると、前の情報を覚えているようで全く許可出来る雰囲気が無い。なので、この情報を消してやる必要がある。

復活の呪文

自分は以下の手順で復活出来た。

  1. Android WearのBluetooth経由でのデバッグをOFF
  2. Android Wearの電源を切る
  3. 設定→アプリ→すべて→Google Play開発者サービス→データを全て消去
  4. 念のため、handheld側のAndroid wearアプリを削除→再インストール
  5. Android Wearを再起動
  6. handheldとwearを再接続
  7. 認証画面が来て(゚д゚)ウマー

2014年6月23日月曜日

ケイデンス&スピードセンサーとハートレートセンサーを買った

ロードバイク初めて数ヶ月経つんですが、ローラ台を買って練習をやってたんですが、はじめにつけたスピードセンサーが前輪用で固定ローラー台だと、スピードが分からなかったので、ついでにと、ケイデンスとハートレート(心拍数)が計測したかったのでAmazonさんでぽちっとしました。
せっかくなのでBluetoothでスマホで見れるようにしようかなと考えその辺を選定基準にして探してみました。

はじめは以下のセットで買おうかと思ったのですが、如何せん高い。合計で約1万5千円。ローラ台やらなんやらにすでにつぎ込んでいるので高い。
そこで、ちょっと調べてみたら、以下のセットを発見。
合計で約8千円。上のセットの半額。これはいい。


スマホ側のアプリはRuntastic Road Bikeにした。これはFacebookとの連携ができるので、走った結果とか投稿できるっぽいので自己満だけども、アピールできてよい。

実際に、取り付けて見た感じでは、ケイデンス&スピードセンサーは予備の結束バンドが入っていたりと親切。ただ、ちょっと作りがチープな感じ。外箱は英語やらロシア語、中国語と色々書かれていたけども、マニュアルは日本語だけだった。ささっと10分ほどで取り付け出来る。

ハートレートの方はスイッチもLEDも何も無いので動いているのか全くわからん。実際にスマホ側で拾ってみるまでなーんもわからん。

ロードに取り付けた後にXperia Z1で接続してみようとして気がついたんだけども、Z1はBluetooth SMART(BLE)に対応してないんですよね。
まったくセンサーたちを検知してくれません。仕方がないので、iPhone4sで使うことにします。

iPhone4sのロードバイクへの取り付けは以下のバックを使いました。

Roswheel ロスホイール フレームバッグ 自転車 サイクリング イヤホンホール付 トップチューブバッグ スマートフォン収納可能 スマホ 全3色【Orange-Store】 (ブルー, L) 

こいつがなかなか曲者で、座っている時はいいんですが、ダンシングすると左右に揺れで太ももに当たる。エネループとか突っ込んでおけるので便利なサイズなのですが、ちょっとこれは頂けない。これは買い替えフラグが立っている状態です。
おそらくローラ台に乗っているときは気にならないので、実際に走る時だけ別にするなどの方法を取ろうかなと。

実際に乗ってきた結果がこちら
見事に貧脚っぷりが露呈しております。
もうちょっとこれで遊んでみようかなーと行った感じです。

#以下アフィリエイト用の広告です

-->

2014年4月30日水曜日

Markdonwでbloggerを書く

bloggerのエディタが微妙なのと、Markdonw信者になりつつあるので、その辺環境を揃えてみようかなと。
あと、連休が暇なので、暇つぶし。

chromeアプリで書く方法

とりあえず、chromeアプリで書いてみる方法。StackEditを使う方法。簡単。
ただ、エディタのキーバインドがVimに出来ないので困る。
あと、右上の欄でタイトルを書くんだけど、日本語変換後のエンターで編集確定しちゃうのがちょっとアレ。

http://tizio1976.blogspot.jp/2013/11/chrome-stackedit-markdown-blogger.html

vimで書く方法

やっぱり、vimでしょ。ということで探してみる。

http://rcmdnk.github.io/blog/2013/11/17/computer-vim/
http://blog.mah-lab.com/2011/01/16/vimblogger/

下のリンクがやりたいことが書かれているっぽい。

2013年11月10日日曜日

【解説】センス無い俺がAndroidのホーム画面をアレンジした結果【画像つき】


中学の成績で5段階評価で2をもらうような俺でもいい感じのホーム画面作れたと思うので、まとめてみます。
ホーム画面のアレンジをしたきっかけとしては、メインの携帯をiPhoneからXperia Z1に変えたので、せっかくなので画面を弄くり倒してみようかなと。

途中にも使用したアプリ等のリンクを置いていますが、最後にまとめてリンクを貼っておきます。

壁紙

壁紙はここのをダウンロードし、黒板の中身をGIMPでちゃちゃちゃっと消して使っています。


ホームランチャー

ホームランチャーはApexのフリー版を使用。Novaとも迷ったんですが、Apexは無料で余白の設定やジェスチャーの設定が出来たので、採用しました。
設定は以下の感じ








アイコン

アイコンはHolo Dark Minimalを使用。
ホーム画面にアプリを置いたら、アプリのアイコンを長押しすると以下のような画面が出てくるので、編集を押します。


そしたら、アプリの設定が出るので、アイコンをタップし「アイコンパックから選ぶ」を選びます


そうすると、インストールされているアイコンパックが一覧で表示されるので今回はHolo Dark Minimalを選びます。実は同じ名前で暗い色と明るい色のセットが別々で配布されているので、今回はアイコンが暗い色のセット(中身のアイコンは明るい色)を使用します。


そうすると、たくさんのアイコンが一覧表示されるので、イメージとあったアイコンを選びます。選んだら、元のアプリの設定画面に戻るので、OKを押せば設定完了です。


こんな感じにアイコンを差し替えていき、黒板にあう感じに配置しました。

ウィジェット

お天気ウィジェットはEye in Sky Weatherとを使用しました。
インストールすると4つのウィジェットが使えるのですが、「Eye in Sky Cities」を今回は配置。
設定は以下の感じに



おそらく配置すると、Apexのホーム画面の配置が縦8横8になっているので縮小して表示されてしまいます。

そしたら、ウィジェットを長押しして、リサイズを選択します。


で、横に引き伸ばすと綺麗に表示されます。

これで完成です!


最後に

いい感じに気に入ったホーム画面が作れました。
まだアイコンの色が微妙に文字よりも明るかったり、ウィジェットで表示している情報が少ないような気もしていますので、追々直していこうかなと。

以下に今回使用したアプリ等をまとめておきます。




#以下アフィリエイト用の広告です

-->

2013年8月15日木曜日

node.jsでsocket.io使った時のDebug情報をコンソールに出力しないようにする方法

node.jsでsocket.io使った時にdebug情報がやたらと出てくるので、
出力を止める方法を調べたメモ

こんな感じのコードを
var io = require('socket.io');
var sio = io.listen(httpServer);
こうするだけ。
var io = require('socket.io');
var sio = io.listen(httpServer, {log: false});

#以下アフィリエイト用の広告です

-->

2013年8月12日月曜日

beaglebone+ubuntuでnodeの環境準備メモ

メモ書き
クロス環境を用意するのめんどくさいから全部bone上で操作

コンパイル環境を入れる
sudo apt-get update
sudo apt-get install -y gcc g++ make


node.jsのビルド、インストール、必要そうなライブラリのインストール
mkdir node
cd node
wget http://nodejs.org/dist/v0.10.15/node-v0.10.15.tar.gz
tar xf node-v0.10.15.tar.gz
cd node-v0.10.15
./configure --without-snapshot
make clean all
sudo make install
sudo npm install -g node-dev express

--without-snapshotつけないとセグメンテーションフォルトで落ちる。

#以下アフィリエイト用の広告です

-->

2013年8月1日木曜日

BeagleBoneでsudo



今更ながらですが、BeagleBoneで遊んでます

sudoが使えなくて面倒だったので、Angstromeのopkgで入れようとしたらなんかnot foundって怒られたのでソースから入れた

$ wget http://ftp.sudo.ws/sudo/dist/sudo-1.8.4p4.tar.gz
$ tar xvf sudo-1.8.4p4.tar.gz
$ cd sudo-1.8.4p4
$ ./configure
$ make
$ su
# make install

とりあえず、これでsudoが使えること確認できたのでよしです。 #以下アフィリエイト用の広告です

-->

2013年7月30日火曜日

BeagleBoneでmjpeg-streamerを使う その1

まだ使えていません。
とりあえず、ビルドが通ってmjpeg-streamerが起動するところまでは行ったが、
カメラの映像がブラウザに表示出来ていない。


# opkg install libjpeg-dev imagemagick

diff --git a/Makefile b/Makefile
index 5f32cda..c159222 100644
--- a/Makefile
+++ b/Makefile
@@ -9,8 +9,8 @@

 CC = gcc

-CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall
-#CFLAGS += -O2 -DDEBUG -DLINUX -D_GNU_SOURCE -Wall
+#CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall
+CFLAGS += -O2 -DDEBUG -DLINUX -D_GNU_SOURCE -Wall
 LFLAGS += -lpthread -ldl

 APP_BINARY=mjpg_streamer
diff --git a/plugins/input_gspcav1/spcav4l.h b/plugins/input_gspcav1/spcav4l.h
index 2754ae2..a139b6b 100755
--- a/plugins/input_gspcav1/spcav4l.h
+++ b/plugins/input_gspcav1/spcav4l.h
@@ -35,6 +35,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -42,6 +43,8 @@
 #include 
 #include 

+#define BASE_VIDIOCPRIVATE BASE_VIDIOC_PRIVATE
+
 /* V4L1 extension API */
 #define VIDEO_PALETTE_JPEG  21
 /* in case default setting */
diff --git a/plugins/input_uvc/v4l2uvc.h b/plugins/input_uvc/v4l2uvc.h
index 2c2868b..e0334f0 100644
--- a/plugins/input_uvc/v4l2uvc.h
+++ b/plugins/input_uvc/v4l2uvc.h
@@ -32,6 +32,7 @@
 #include 
 #include 
 #include 
+#include 

 #include "uvcvideo.h"

#以下アフィリエイト用の広告です

-->

opkgでエラーが出たので対処した

症状
 * parse_from_stream_nomalloc: Missing new line character at end of file!
が出てよくわからん。

結論
nameserverの設定がされていなかった

直し方
/etc/resolve.confにnaveserverを追加する

#以下アフィリエイト用の広告です

-->

2013年6月30日日曜日

iPad 3rd、iPad mini、Nexus7、iPhoneでKindleの比較をしてみた



iPad miniがひょんな事で手に入ったので、ちょっとKindleの見た目がどうかを比較してみました。

表紙

左から、iPad 3rd、iPad mini、Nexus 7、上がiPhone 4Sです。
全部画面輝度を最高にしてます。
絵だとどれも代わり映えはあまりしないかなって感じです。見た目的にはiPad達は背景が白い感じに見えるのですが、Nexus 7は少し黄色味がかった感じ。ただ、Nexus 7だけ見てるのであれば気にならないかな。

白黒のコマ
iPad 3rdとiPad miniで明るさに差が有るように見えるけども、視野角のせいです。
色温度はほとんど同じ。やっぱりNexus 7は少し黄色味がかった感じ。
意外にもiPad 3rdがRetinaなせいなのか、文字がぼんやりして見える。引き伸ばした感じになってるので、元画像の解像度がそこまで高くないのかも。


KindleはiOSでもAndroidでも同期がとれるので、すごく便利と思ったけども、
そもそも本の種類が少なすぎて読みたい本が無いってのが現状。
しばらくは、進撃の巨人と攻殻機動隊ARISEだけになりそうな予感。
個人的には電子書籍端末として使うならNexus 7≧iPad mini>iPad 3rdかなと。
Nexus 7は一番横幅が狭いので、持ちやすい。カバー付けなくてもすべり止めなボディってのもGood。ただ、色が少し黄色味がかって居るのと、画面の非表示エリア(操作ボタン)が気になるかな。それらが気にならないのであれば値段的に見ても電子書籍用に新しく買うならAndroid端末がいいのかも。

#以下アフィリエイト用の広告です

-->

2013年5月19日日曜日

USBに入れたUbuntu 13.04が遅かったのでちょっと対策してみた

安物のUSBだったのが、問題なのかファイルアクセスするとちょくちょく固まってしまうので、ファイルアクセス時間を記録しないようにするのと、Ramdiskを使うように設定を買えた。 あと、chromeのキャッシュもramdisk上に置くように設定変更

 /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#                
# / was on /dev/sdb5 during installation
UUID=ed0ac91c-c17f-4cd7-a9bb-ebdb735b1496 /               ext4    errors=remount-ro,noatime 0       1
# /dos was on /dev/sdb2 during installation
UUID=B371-17EE  /dos            vfat    utf8,umask=007,gid=46 0       1
/dev/sr0        /media/floppy0  auto    rw,user,noauto,exec,utf8 0       0
tmpfs /tmp tmpfs defaults 0 0

,noatimeがアクセス時間の記録を無効化するオプションで、tmpfsの行がramdiskを作ってくれるオプション。ramdiskのサイズは物理メモリの半分が自動で割り当てられるらしい

次に、chromeのキャッシュの設定

 ~/.xprofile
export XDG_CACHE_HOME="/tmp/.${USER}/cache"
[[ ! 0d "${XDG_CACHE_HOME}" ]] && install -dm0700 "${XDG_CACHE_HOME}"


小手先だけな対策だけども、とりあえず効果はありそうな感じがしてるので、しばらくはこれでいってみる

#以下アフィリエイト用の広告です

-->

2013年4月27日土曜日

Djangoでデータベースの位置を相対パスにする

備忘録

Djangoのチュートリアルを参考にデータベースの設定をしようと思ったら、チュートリアルには絶対パスで指定しろと書かれている。
でも、デフォルト状態のデータベースをバージョン管理したかったので相対パスにする方法を調べた



/settings.pyの初めの方を以下の様に編集(DB名は好きな名前)
from os import path
basepath = path.dirname(__file__)

DATABASE_NAME = path.join(basepath, 'DB名')

DEBUG = True
TEMPLATE_DEBUG = DEBUG

ADMINS = (
    # ('Your Name', 'your_email@example.com'),
)

MANAGERS = ADMINS

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': DATABASE_NAME,                      # Or path to database file if using sqlite3.
        # The following settings are not used with sqlite3:
        'USER': '',
        'PASSWORD': '',
        'HOST': '',                      # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
        'PORT': '',                      # Set to empty string for default.
    }
}


#以下アフィリエイト用の広告です

-->

2013年3月27日水曜日

Google Apps Scriptを使ってみた

さくらのレンタルサーバー上のメーリングリストをちょっと使うことになったが、
このメーリングリスト、mailmanのメーリングリストと違い、登録ユーザーの情報は
メールアドレスのみしかひもづけれない。

管理する側としては、メールアドレス+名前(or何か識別出来る情報)で扱いたい状態だったので、Google Driveのスプレッシュシートと紐付けてみる。
それで、ついでにGoogle Apps Scriptを使い、自動でメーリングリストへの登録が出来るようにしてみた。
コードは以下な感じ。スクリプトマネージャーからentry_mlを実行すれば自動で登録メールを投げてくれる。
さくら側の設定で、スプレッシュシートを編集するGoogleアカウントのアドレスを管理者アドレスに追加する必要がある。


/**
 * メーリングリストへの登録
 */
function entry_ml() {
  var password = "hoge";
  var adminAdress = "hoge@hoge.sakura.ne.jp";
  
  var sheet    = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // チェックするデータの開始行
  var numRows  = 100;  // チェックするデータの数
  
  // Fetch the range of cells A2:B3
  var dataRange = sheet.getRange(startRow, 2, numRows, 7);
  
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (i in data) {
    var row = data[i];
    if (row[0] == "") {
      break;
    }
    var name = row[0];
    var emailAddress = row[1];
    var confirmed = row[6];
    var subject = "";
    if (confirmed != "") {
      var message = "approve " + password + " add " + emailAddress;
      //Browser.msgBox(name + "\n" + emailAddress + "\n" + message);
      MailApp.sendEmail(adminAdress, subject, message);
      sheet.getRange(startRow + parseInt(i), 9).setValue(1);
    }
  }
  
}

#以下アフィリエイト用の広告です

-->

2012年9月1日土曜日

オレオレLinuxメモ


自分用のLinuxコマンドメモ

コマンド


lsusb
認識してるUSB機器を表示

ifconfig XXX up
インターフェースを起動する

ifconfig -a
繋がってないインターフェースも表示する
wlan1とかになってた場合に確認する

タイムゾーンの変更

  • # mv /etc/localtime{,.org}
  • # ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime


操作

無線LANの設定

# chmod 0600 /etc/network/interfaces
# vi /etc/network/interfaces
ファイルに以下を追加or編集
auto wlan1
iface wlan1 inet static
  address 192.168.0.113
  netmask 255.255.255.0
  network 192.168.0.0
  broadcast 192.168.0.255
  gateway 192.168.0.1
  dns-nameserver 192.168.0.1
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
/etc/wpa_supplicant/wpa_supplicant.confは以下の感じ
network={
    ssid=""
    psk=""
}


#以下アフィリエイト用の広告です

2012年8月5日日曜日

Arduino+USBホストシールドでBluetoothドングルを使う

Circuits@Homeで公開されているUSBホストのライブラリに、BTドングル使ってSPP通信をするためのライブラリが追加されたぜ的なことがあったので試してみました。

必要なもの

  • Arduino本体
  • USBホストシールド(Sparkfun製は要改造)
  • Arduino IDE 1.0.1
  • ライブラリ

出来上がったもの

BTの子機側はAndroidのBluetoothChatのサンプルを使いました。

Sparkfunのシールドは使えない!?

どんだけ頑張っても「OSC did not start」となってしまいUSBの初期化ができない。
なぜかと思って調べてみるとUSBホストシールド2.0からリセット信号の回路上での取り回しが変わっている(D7からRSTへ)
そのため、ライブラリ2.0はSparkfun製のシールドでは使えないとのことです。
しかし、ここでも記載がありますが、配線を変えることでSparkfun製のシールドでも使えます。
D7から伸びる信号線をカットし、RSTから信号を取り回す改造をすることで無事初期化ができることを確認しました。





DTR信号でハマる

ArduinoはUSBシリアルから受け取ったデータをBTのSPPで送信しています。
ちょっとハマったところで、Arduinoはシリアル通信のDTR信号を利用してリセットを行なっていることです。
問題になるのは以下の様なシーケンスで動作した場合です。
  1. シリアルオープン
  2. データ送信
  3. シリアルクローズ
  4. 1へ戻る

1のシリアルオープンのたびにリセットがかかってしまいBTの接続が切れてしまいます。
なので、PythonのコードではTCPのリクエストハンドラ内でシリアル接続を保持して、
TCP経由でデータを送るようなことをしてます。


Pro miniへの対応

pro mini用のUSBホストシールドでも使ってみたのですが、
こちらはシリアル経由の3.3Vでは電圧が低くてUSBドングルが動作しませんでした。
しかし、冒頭のリセットしない問題は起きていないのでもしかしたらRAWピンに5V入れて、USBに5Vまわす改造をしておけば動くかも

まとめ

むちゃくちゃ簡単にSPP通信が使えるようになりました。


#以下アフィリエイト用の広告です

2012年7月5日木曜日

MacPortsでpython+opencvの環境を作る

MacPortsの環境でPython+OpenCVの環境作りでハマったメモ
pythonでimport cvがうまく行かなかったのが、単純にMacPortsがインストールするOpenCVはmac標準のpythonの環境がセットアップされないのが問題だった。
MacPortsでインストールしたpythonではちゃんと動いた。


$ sudo port install python
$ sudo port install opencv +python27
$ vi ~/.bashrc
〜略〜
alias python=/opt/local/bin/python2.7 ← aliasでごまかす。PATHの方がいいかも



#以下アフィリエイト用の広告です

2012年6月25日月曜日

Retina対応していないアプリをむりくりRetina対応させる方法

いろいろ調べてたらRetina対応していないアプリを自前でRetina対応する方法がありました
といっても文字などが綺麗になるだけで、アイコンなどのリソースを使っている箇所は変わりません。
Eclipseなどのメニューまでしょんぼりだったプログラムには有効な手段かと。

追記

以下の方法でVirtualBoxの設定を変更するとVirtualBoxが起動できなくなります。

未対応アプリ
VirtualBox
Inkscape
Google日本語入力(そもそもどのappをいじればいいのかわからん)

/* 追記ここまで */

やり方


ほげほげ.appなどをFinderで表示し、右クリックで「パッケージの内容を表示」を選択
(今回は例でArduino.appで行います)

info.plistをお好きなテキストエディタで開きます

選択されている行のようにの直前に
<key>NSHighResolutionCapable</key> </true>

を追記。

追記したら、エディタで保存して閉じます。
その後、ほげほげ.appの複製を作成するか、ログアウトしてログインし直すとRetinaに対応してくれます。

情報を見ると「低解像度で開く」のチェックが外れている。


ArduinoでBlinkのサンプルをRetina対応IDEで開いてみた


#以下アフィリエイト用の広告です

2012年6月24日日曜日

Mac Book Pro with RetinaでAndroid開発環境を構築する

MBPRでAndroid開発環境を構築したメモ

環境構築自体は今まで通りで全く問題なし。
Retina特有だと思う問題を以下にメモる

  • EclipseはRetina非対応でメニューもぼやける
  • エミュレータはRetinaの画面上で起動するとウィンドウの1/4でしか表示されない
  • Retinaの画面上で起動したエミュレータではソフトウェアキーボードの位置の認識がおかしい
  • HDMI出力でつないだ外部ディスプレイ側でエミュレータを起動すると今まで通りに起動
  • 外部ディスプレイ側で起動したエミュレータをRetina側に持って行くとエミュレータが異常終了


エミュレータ周りがおかしいので、プレゼンなどでエミュレータをよく使う方はGoogleが対応するまで待ちになりそうです。

#以下アフィリエイト用の広告です

2012年6月23日土曜日

Node.jsでC2DMっぽい何かを作ってみた

Node.jsのsocket.ioを使ってC2DMっぽい何かを作ってみた。

http://iwatan.dip.jp:8001/
(apacheの設定が面倒なのでポート番号直入)

機能としては、chrome to phoneのパクリ
ただ、chrome to phoneと違って1対多が可能
同じキーワードを設定したブラウザに一斉に送信するので、
設定したブラウザが一斉に画面遷移します。


#以下アフィリエイト用の広告です