iOS9 / watchOS9間の通信 Watch Connectivityで小ハマり

既存アプリのiOS9,watchOS2対応をぼちぼちと。
swift1.2 -> swift2へのconvertもあるので細かくあれこれ時間がかかる。

watchOS2では、いままでのwatchKitではiOSアプリとwatchアプリの通信に使っていた
– openParentApplication:reply:
が無くなってしまったので新しいAPI Watch Connectivity で実装し直す

– openParentApplication:reply: ではwatch側からiOS側へconnectionを開くことしかできない(iOS側から通信を開始できない)が、WCSessionでは双方ともに可能。
おかげでだいぶコードがすっきりする。

準備

delegateの宣言

iOS側のWatch Connectivityを使うクラスの宣言を以下の様に(太字部分追加)

class ViewController: UIViewController, WCSessionDelegate

watch ExtensionのWatch Connectivityを使うクラスの宣言を以下の様に(太字部分追加)

class InterfaceController: WKInterfaceController, WCSessionDelegate

両方とも
import WatchConnectivity
を忘れないように。

データを受信するためにセッションを開始する

例えばiOS側のViewControllerで使う場合、viewDidLoadの最後あたりで、以下の様にしてセッションを開始する

if (WCSession.isSupported()) {
let session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}

watch Extension側でも同様に例えばWKInterfaceControllerで使う場合、willActivateの最後あたりに同じコード追加。

ハマったのはここ。
実装したかったのは片方向(iOS -> watch)の通信のみだったので受信側(watach)のみでこのコードを実装したが、iOS側からwatchを見つけられない(後述の WCSession.defaultSession().reachable がfalse になる)。
送信側にも通信が始まる前にこのコードが実行されるようにコードを追加する必要がある
openParentApplication:replyのイメージが強くて、勝手にサーバクライアントのようなモデルを想定してしまったのが失敗。

通信開始

WCSessionの通信にはすぐに通信が開始されるInteractive messagingと、機嫌が良いときに通信しておいてくれるBackground transfersがある。Interactive messagingの場合は、iOSからwatchに送信する場合はwatchOS上でアプリが起動している必要がある。

今回はInteractive messagingを例に。

送信側:

if WCSession.defaultSession().reachable { //通信可能かチェック
var message:[String: AnyObject] = ["message": "Message From Phone" ]
WCSession.defaultSession().sendMessage(message, replyHandler: { (replyMessage) -> Void in
//
}) { (error) -> Void in
print(error)
} 
}

受信側(delegateのメソッド実装):

func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {
if let tmessage:String? = message["message"] as! String? {
print(tmessage)      
}
}

messageが[String: AnyObject]となっていることから分かるように、String以外も送信可能。
簡単に双方向通信ができる様になった。
MMWormhole要らなくなりそうだ。
(いままで(watchOS1で)動いていたMMWormholeのコードがwatchOS2のシミュレータでは動かなかった。コンパイルも通りエラーも出ないが、受信してくれず。)

Read More

Intel Edisonの最初のお手前

Intel Edisonを買って、MicroUSBケーブルを用意してから最初にやること。

調べていたら、ほぼそのままここに書いてあった。
Flashing Edison (wired) – Mac
このページの解説はArduino expansion boardベースだけれど、Breakout boardも同じ。

スイッチサイエンスさんがUSBケーブル1本でやる方法を書いてくれていた。
こちらはUSB通信で必要なDNDISドライバのインストールも書かれていてさらに便利。

IntelEdisonStartGeneric – スイッチサイエンス

スイッチサイエンスメソッドでやって無事にファームのアップデートとWifiの設定完了。
外部ホストにpingを打ってみたりしてとりあえずのセットアップが完了。

なぜか、MacにEdisonを抜き差しする度にEdisonという接続がOSに増えていくのが現在の悩み。
Blank_Skitch_Document
気にしなければ気にならないのだけれど。

パッケージ管理はapt-getなどではなく独自のopkgというものらしい
以下のページを参考にopkgのリポジトリを登録してupdate/upgrade.
Edison開発方法 — Edison-Note 1.3 documentation

Pythonでの開発環境も以下を参考に構築。
EdisonにPython環境を構築する — Edison-Note 1.3 documentation

ただし、
# pip install serial
の部分は
# pip install pySerial
の間違いと思われる。

しばらくSerial等を叩いて遊んでいると、懐かしい気持ちになってくる。
学生の頃、数店舗あるそば屋の既存の製麺機にセンサを取り付けてつくった数をカウントして毎晩結果をホストに投げる、と言うのをつくったことがあるのを思い出す。あれはPICマイコンだったかな。
あのころEdisonがいてくれたらめちゃくちゃ楽だったのに。

Read More

Intel Edisonの開封

IoT(Intenet Of Things)がバズワードに。
昔の「センサーネットワーク」となにが違うんだろうと思いつつ。
PICマイコン、ARMマイコン、H8からArduinoみたいなおもちゃマイコンの流れが合流したたもの、と考えれば良いか。(あってるかな?)

Arduino、Raspberry Piあたりは何となく触ってきて、今回はIntel Edisonを触ってみる。
インテル® Edison モジュール

SDカードより一回り大きいくらいの基板に32bit 500MHzのCPUと1GB DDR3とwifi,Bluetooth LEが載ったマイコン。
本体が7000円くらいなのでこれだけ載っていて遊べたら十分だ。
intel-edison-100yen
左下の小さいのが本体。
上のはIntel Edison Breakout Boardという拡張ボード。

拡張ボードには2種類あり、上のIntel Edison Breakout Boardが標準的なもの。
ほかにArduinoのシールドとピン互換のあるIntel Edison Board for Aduinoというのもあり。
これを使うとArduinoの為につくったシールドが使えるらしい。
ただ、ハードウエアのピッチの互換性があるだけなので、ドライバというかライブラリは作り直さないといけないのだろうか。

現在の開発言語はC/C++だが、12月以降、pythonやNode.jsでも開発できるようになるらしい。
Pythonのような軽量言語もそうだけれど、Javascriptで組み込み系のプログラムを書くというのは21世紀になった未だに不思議な感覚。(歳とったかな)

国内では老舗スイッチサイエンスと秋月電子で購入可能。
Intel Edison – スイッチサイエンス
Intel Edison Board for Aduino …

Intel Edison: 目的別 秋月電子通商 電子部品 ネット通販

現在のところは、秋月の方がやや安価で在庫があるので買いやすそう。
Arduinoの雄、sparkfunもEdisonのボードなどを開発しているので期待できそう。
今回はBreakout Board付きのものを購入。
但し、Intelは初心者には Intel Edison kit for Arduinoの方を勧めている様子。

ちなみにIntel Edison Breakout Board KitのみAmazonでも買えるが、アホみたいに高い。

Intel Edison Breakout Board Kit
Intel Edison Breakout Board Kit
Intel
売り上げランキング :

Amazonで詳しく見る by G-Tools

倍近いか。

とりあえずの資料はこのあたり
Intel® Edison Product Brief
Edison Getting Started Guide – Mac
Edison Getting Started Guide – Linux
Edison Getting Started Guide – Windows
今回はMac版で。

拡張ボードをドッキング。
intel-edison-100yen-2

ここではたと気付く。
PCとの接続のためのmicro-USB端子は2つも付いているが、ケーブルが附属していない。
当然入っている物だと思い込んでしまった。(せめてセット商品があっても良いのに・・)
ケーブル2本、調達せねば。
(追記: ケーブルは1本でよさそう Intel Edisonの最初のお手前)
ということで1回休憩。

Read More

Linux-DB システム構築/運用入門 (DB Magazine SELECTION)

4798120723 Linux-DB システム構築/運用入門 (DB Magazine SELECTION)
翔泳社 2009-09-17

by G-Tools

ぱらぱらと見てみたらおもしろそうだから買ってみた。
「入門」と書いてありつつあまり入門書ではなく、かなりの範囲がカバーされてる。
難しくはないが結構骨があってここのところの状況も書かれていてほんの通りに一通り触ってみるだけもおもしろい。
高可用性構成とかインデックスのチューニングなどは非常に参考になる。
一度目を通しておくとパフォーマンスチューニングの考え方が頭に入る。
SSD化や64bit化されての設計については、これからの課題。
ゆっくり慣れていくかな。

Read More

RubyによるMac OS Xデスクトップアプリケーション開発入門 ~Ruby×RubyCocoa/MacRuby×HotCocoa~

どうも余裕がなくなると読書メモをサボる癖が。
久しぶりの読書メモ。

483993178X RubyによるMac OS Xデスクトップアプリケーション開発入門 ~Ruby×RubyCocoa/MacRuby×HotCocoa~
木村 渡
毎日コミュニケーションズ 2009-09-25

by G-Tools

RubyCocoa と MacRubyの解説書。
Xcodeの使い方からして手取り足取りとても丁寧に書いてあって非常にわかりやすい。
RubyCocoaは遊んでみたことがあるがMacRubyは初体験。
Objective-C・CocoaとRubyをこんなにうまくマージしてあるとは。
RubyCocoaのような妥協感というかやっつけ感がなく、Rubyとして素直にスクリプティングすることができそうだ。
さすがRuby。
HotCocoaはかつての大失敗作HotJavaを連想させる名前だがこちらは便利に作られていて期待が持てる、かな。こっちはまだ未着手。
Macのアプリが本格的に手軽に作れるようになってきた。
GCのないObjectice-Cで泣きそうになりながらソフト書いていたあの日々は何だったのか。
RubyCocoaとMacRubyの違いは書かれていたが使い分け方がいまいちよくわからなかった。
MacRubyがまともに使えるようになるまでとりあえずRubyCocoaで、という理解でいいのかな。
この本があれば

1934356190 Programming Cocoa with Ruby: Create Compelling Mac Apps Using RubyCocoa (The Facets of Ruby Series)
Pragmatic Bookshelf 2009-08

by G-Tools

この本はいらないかも。
こちらはRubyCocoaオンリー。前書きで「MacRubyはまだ使い物にならないからね!」といいわけしてた。
ところでsnow leopardではMacRuby0.4のバイナリはインストールできるが起動するとクラッシュする。自前で0.5をコンパイルする必要があり。
iCoreTech Research Labs ? Having fun with MacRuby on Snow Leopard
ここを参考に。本当にllvmのインストールが必要だったのかは謎。
そしてXcode(3.2)でMacRubyを書こうとするとプロジェクトテンプレートはできているが新規ファイルのテンプレートがインストールされないので本書227ページで止まる。
こちらは対応策検討中。
xcode32_macruby.png

Read More

Programming Cocoa with Ruby: Create Compelling Mac Apps Using RubyCocoa (The Facets of Ruby Series)

1934356190 Programming Cocoa with Ruby: Create Compelling Mac Apps Using RubyCocoa (The Facets of Ruby Series)
Pragmatic Bookshelf 2009-08

by G-Tools

ちょこっと実験で作りたい物があったのでRubyCocoaをいじってみた。
おそらく、現時点ではRubyCocoaの一番の解説書。
objectivce-C ->RubyCocoaの人でなく、むしろ初めてCocoaを触る人向けかな
Xcode,InterfaceBuilderの基本的な使い方についても解説されてる。
DelegateやNotification等についても細かく書かれてる。
既有知識の範囲でちょこちょこっとつくるにはRubyCocoaがやりやすかったが、これからはMacRubyになっていくんだろうな。
本書内ではMacRubyはまだβだし、RubyCocoaを置きかえるにはまだまだ時期尚早だよ!とかいてあった。

Read More

かんたんプログラミング PHP

4774139831 かんたんプログラミング PHP
技術評論社 2009-08-29

by G-Tools

本が出来ました。
(ゴーストでなく)自分の名前の単著は初めてです。
PHPとはなんぞや、から始まって最終章では箱庭twitterを作ってます。
本当の最後の章(個人的には一番面白いところ)はPDFで技術評論社の書籍のサポートサイトに掲載されるようです。
サポートサイトはまだ無い模様。
出来たら
かんたんプログラミングシリーズ書籍一覧|gihyo.jp … 技術評論社
からリンクされると思います。
オブジェクト指向をたい焼きで説明したりしたのが吉と出るか凶と出るか・・・
書いては学生さんに読んで貰って直して、とやってかき上げました。
後ろの方は時間との戦いで、そうも行かなかった部分がありますが。
一般の書店には週末か週明けくらいから並ぶようです。
早く欲しい方は(是非上のリンクから)amazonクリックして下さい。
ついでにいろいろ高額商品も一緒に買って頂けると有り難いです。
それはともかく
まとまった文章書くのは自分の頭の中がすっきりと整理されてとても良い経験。
ごく基本的なところも、改めて自分で実験したりPHPのソースコードを読んだりして確認しながら理解して、というのはこういうきっかけがないとついスルーしてしまう。
それを説明するのに10年ちょっと前にPHPを初めて触った頃のこと、さらに3年ほど前にJavaでオブジェクト指向を理解しようとしてた頃を思い出しながら「分からなかった部分」をたどるのはなかなかにエキサイティングだった。メタ認知?メタメタ認知?
大きな変更をいくつものんで頂くなど負担をかけてしまった編集者の方にお詫びとお礼を感じつつ。
出版社に赤字が出ないくらいには、売れますように。

(さらに…)

Read More

Arduinoをはじめよう

Arduinoをはじめよう Arduinoをはじめよう
船田 巧


Amazonで詳しく見る
by G-Tools

Arduinoの超入門本。
Arduinoも日本で普通に買えるようになったし今までにもましてArduinoプロジェクトがいろいろ出てくるのだろうか。
本書の範囲では発光ダイオードやCdSなど何処でもすぐに手に入るパーツで本当に簡単にArduinoを動かしてみる、という感じ。
パーツには型番も書いてあるのでそのままメモってお店に行けばいい、という超親切記述。
こういう超入門本でオームの法則をすら書かなくて良くなった、と言うのはArduinoのすばらしい功績。

Making Things Talk -Arduinoで作る「会話」するモノたち Making Things Talk -Arduinoで作る「会話」するモノたち
小林 茂 (監訳) 水原 文


Amazonで詳しく見る
by G-Tools

この本を持っていれば、上の本はいらないかもしれない。
先に上の本とArduinoを買ったら、次は下の本を。

Read More

Flash Math & Physics Design:ActionScript 3.0による数学・物理学表現[入門編]

Flash Math & Physics Design:ActionScript 3.0による数学・物理学表現[入門編] Flash Math & Physics Design:ActionScript 3.0による数学・物理学表現[入門編]
古堅 真彦

by G-Tools

ActionScriptでのアニメーションのプログラミングについての解説書。
タイトルの最後の「入門編」を見逃した。
タイトルと表紙の感じである程度骨のある本かと思っていたらごく基本的な内容を丁寧に説明するタイプであった。

イージングからはじり、簡単な数学で動きを作っていくサンプルが18個。
Flashを触ったことがない人にはちょっと厳しいかも知れないがちょっと触ったことがある人がアニメーションのプログラミングを始めるには良い本だと思う。
スクリプティングの基礎の基礎から書いてあってサンプルのソースもWebから拾える。

その部分に少し知識がある人は

ActionScript 3.0 アニメーション ActionScript 3.0 アニメーション
永井 勝則

by G-Tools

の方がよい。
ただしかなり高い。

これの応用編、3D編、モーションタイプ編など上位の続編が出てきたら買おうかな、と。
この本のプロジェクトをProcessingに移植するとかしてみるのはエクササイズになりそう。
次が出るまでに時間を見つけてやってみるか。

Read More

自作アプリをApp Storeで世界に向けて販売できる!! iPhone SDKプログラミング大全 (MacPeople Books)

自作アプリをApp Storeで世界に向けて販売できる!! iPhone SDKプログラミング大全 (MacPeople Books) 自作アプリをApp Storeで世界に向けて販売できる!! iPhone SDKプログラミング大全 (MacPeople Books)
木下 誠

by G-Tools

おそらく初のiPhoneオフィシャルSDKに対応した和書。
Amazonでの発送が遅いので、ジュンク堂に買いに行った。
一時の主婦の友社のプログラミング本を思い出させる装丁でちょっとちょっと残念な予感が漂うがこの本はとても良く書かれていると思う。正月1週間、初めて手をつけるiPhoneアプリ開発に唸っていたのだけれど、唸っていたほとんどがこの本に書かれている。

新しいパラダイムもある程度習得してくると今までどこが分からなくて苦労していたのかケロっと忘れてしまうがこの本は忘れずにちゃんとトレースされて説明されている。

UI周りを中心にGPS、加速度、オーディオ、ムービーと広く説明されている。
ここまで書いたらカメラの使い方もあればなお良し、と。  

おすすめ。
あと1週間早く出ていたらストレスの少ない正月を迎えられたのに。
少々悔しい。

Read More