maaash.jp

what I create

BLE Bootcampとwillpowerの話

BLE Bootcamp というイベントで 1台->1000台 IRKitの例 という話をしてきました。

振り返れば、「おれよくやったな〜」と思うほど大変でストレスフルな体験だったんだけれど、IRKitの販売までたどり着けたのは、willpowerをうまく使ったから なんじゃないかなあと思ったので、willpowerを軸に話を展開してみました。

willpowerとは、What You Need to Know about Willpower:… によれば、

Defining Willpower We have many common names for willpower: determination, drive, resolve, self-discipline, self-control. But psychologists characterize willpower, or self-control, in more specific ways. According to most psychological scientists, willpower can be defined as:

  • The ability to delay gratification, resisting short-term temptations in order to meet long-term goals.
  • The capacity to override an unwanted thought, feeling or impulse.
  • The ability to employ a “cool” cognitive system of behavior rather than a “hot” emotional system.
  • Conscious, effortful regulation of the self by the self.
  • A limited resource capable of being depleted. (強調は引用者による)

訳しつつ要約すると

  1. 使い果たす可能性のある限られた リソース
  2. 長期的なゴールのために短期的な誘惑に逆らう力
    迷惑な考え、感覚や衝動を乗り越える容量

で、中でもリソース、っていうところが心に残ったポイントです。

自分の解釈と経験では、
要はwillpowerとはやる気なんだけど、
willpowerは有限であり、長期的な目標を達成するためには、
自分のwillpowerの増減傾向を把握して、willpowerが枯渇しないようにコントロールすることが大事なんじゃないか。

例えば自分のwillpower増減傾向は

  • コードを書く間はwillpowerを消費しない
    むしろ満足できるコードを書くと回復する
  • 知らない人とコミュニケーションをとるのは
    willpowerを大量に消費する
  • めんどくさがりやである
    申込書を書くのはwillpowerを大量に消費する

となっていて、コントロール方法としては、

「知らない人と話すのはwillpower消費するから1日1回までにしよう」

というようなことになります。

こういった、辛いことを十分な睡眠をはさみつつあきらめてしまわない程度に
なんとかこなしていくことで長期的な目標を達成できる可能性が上がるのでは!

ということで、お金と時間と同様にwillpowerを貴重に消費しようと考えている次第です。


さてこのBLE Bootcampは本当におもしろいイベントでした。

気になっていたデバイス 鍵ロボットakerunSonyのmesh を開発している人達が来ていたり

@u_akihiroも恐れていたけどぶっとんでいておもしろく、猫とロボット社 の人やトリガーデバイスの方々にもお会いできてよかったです。 参加できてよかった。

参考

colloさんと財布をつくった

collo さんにフルオーダーで財布をつくっていただきました。

Untitled
数ヶ月使い込んだ今の姿

前の財布は実に約20年前にもらったもので、
ほぼ毎日使っていて思い入れも強く捨てられなかったのですが、

あらゆるところから小銭がこぼれ落ちるほど革が破れてきて
さすがにあれなのでcolloさんにお願いすることにしました。

自分の財布の使い方を思い返すと…

  • ずぼんの前ポケットに入れる
    通常の2つ折り財布くらいのサイズ以下であってほしい
    厚みは多少あっても問題無い

  • お金、カードを入れるものはいつでも財布1つだけ
    別に小銭入れや定期入れをもたない

  • カードのフォームファクタのものはいつでも10枚以上いれている
    クレジットカード、病院のカード、免許証、保険証、等
    そのうち半分くらいはよく使うもの

  • 小銭は財布にあれば優先的に使うのでたくさん貯まることは少ないけれど、重なったりして取り出しにくいといらっとするので広めに確保したい お札もそこそこ入れたい

というところ。

こんなレイアウトの財布を使っていて image
写真の奥の、糸がぺろっと出てるのが先代
特にカードが辛い。
たくさん入れると革が突っ張るし、カードが革との摩擦で止まっているので落ちやすい。
小銭ポケットが小さい、お札は余裕で入るがむしろ無駄

財布に何も入っていない状態が一番きれいに見えるようにデザインされてるんじゃないか?!

いつでもカードたくさん入ってるからその状態が一番きれいに見えるようにしたい。
ということでcolloさんといっしょに考えました。
これが楽しい。

中略 colloさんの記事 オーダー製作記/ 二つ折り財布

Untitled

o_8s-300x300
こちらの画像はcolloさんより

こんな構造見たこと無い!?
画期的や

カードたくさん入る!
マチがついてるから取り出しやすい!
カバーがあるからカードが落ちない!
小銭のポケットが広いし大きく開く!
にも関わらずレイアウトのおかげで縦横の長さが短くなってる!(分厚いけど)

ということで満足してるしすごく楽しかった。
自分の使い方からくる制約、素材の制約の中で自由に「こんなレイアウトどう?」とかって話しながら自分の満足を最大化する。
違う分野のエンジニアリングに触れる楽しさもある。

同じような財布の使い方をしている人は色違いやちょいカスタムで、
そうでない人はお値段もお手頃なのでみんなオーダーすればいいと思う。 http://collocollo.com/

mbed祭りに行ってきた

mbed祭り2014@夏の東銀座 に行ってきた。

積み基板大放出特設コーナー で STM32F0-Discovery をいただきましたー
ありがとうございます!
STM32はtokoro氏がいつも使っていて気になっていました。

以下はメモ

mbedの概要と最新情報

商用でも利用可能 オープンソース – Apache 2.0

IRKitはArduino派生でATMEGA32U4を使用しているけれど、
入手しにくいしそのおかげか価格もスペックの割に高いしROM,RAM容量が辛いので乗り換えたいところ。

mbed Enabledな製品ってもうあるのかな?
(うおーるぼっとBLEがそうなるようだけれど)

コミュニティが育ってArduinoを越えてほしいなー

Freescale

何か作ったらフリスケに宣伝してもらえる

GoProにKinetis入ってる

KL02(自分が持ってる)をmbed対応する予定ある?
「無い」とのこと
残念

ニコニコ動画の新着動画表示器

青mbed+有線LAN自分もやってて懐かしい。
インターネットにつながるのが簡単なのがmbedのすごいところと思う。

HTTPやJSONについて丁寧に解説してて違う世界に来たな〜って思った。

Github連携したい!!

mbedってなに

CMSIS-DAP

debugアダプタと開発環境の組み合わせが複雑だったものを統一しよう
普及してほしい

ツボLink2ってなんだろ

うおーるぼっとBLE

熱い
ほしい
けど1万円以上だと高い印象ある..
BLEモジュールはBL600だった

壁走りロボットうおーるぼっとBLEはmbed Enabled!!

node-red / MQTT

あとで調べる

switch-scienceのひと

滑舌いいな〜

treasuredataのひと

こんなところでfluentdって単語を聞くとは
IoTなデバイスからデータをTDに投げ込むのか〜
おねえさんが、センサー + Raspberry Pi + fluentd + Treasure Data + αで自宅の揺れを検知&分析してみるよ①

人力飛行機シミュレータのひと

楽しそう〜

まとめ

Webの世界と組み込みの世界が交わってきてるな〜
楽しい

今度つくるものはARM,できればmbed Enabledにしよう

IRLauncher - Mac使用時に最速でエアコンをつけるために

IRKit というものを作るほど、エアコンに対する不満が強いようです。
というわけで、Macを使用している時に最速でエアコンをつけるためのアプリ IRLauncher をつくりました。

IRLauncher デモ動画をご覧くださいませ。

IRLauncher : Launch IR signals from your favorite launcher (Quicksilver, Alfred, ..) http://github.com/irkit/osx-launcher IRLauncher is a Mac client for IRKit device. Get one from Amazon.co.jp and set it up before using this. IRLauncher’s purpose is to be the fastest way to control home electronics when you’re using a Mac. Fastest means not leaving home position on keyboard, obviously. I heavily use Quicksilver, many others use Alfred 2 or Spotlight, so why not send infrared signals utilizing a launcher app?

Terminalにいる時には ruby IRKit gemの提供するirkitコマンド が便利なのですが、
Macに向かっている時にはTerminal以外にもChromeやXcode,Emacsがアクティブな場合が多いので、グローバルなショートカット経由でよくアクセスするQuicksilver(or Alfred)にのっかるのがいいかな〜と思いました。

快適なエアコン生活をお楽しみください。

IRLauncher : Launch IR signals from your favorite launcher (Quicksilver, Alfred, ..)

IRKitはiOSのアクセシビリティ(スイッチコントロール、VoiceOver)に対応しています

iOSには、あまりメジャーでないかもしれませんが
設定画面にアクセシビリティという機能があり、これがよくできています。

IRKitシンプルリモコンアプリ では、過去ご要望があり、アクセシビリティのうち、スイッチコントロールとVoiceOverに対応しています(iPhoneのみ。iPadは未対応)
iOSの設定アプリ –> 一般 –> アクセシビリティ –> スイッチコントロール を開き、オンにした後、
リモコンアプリを開くと、以下のように、ボタンそれぞれの周りに青く枠が付き、スイッチコントロールの外部ボタンで選択(=赤外線信号を送信)できるようになります。

IRKit simple remote Accessibility

また、iOSの設定アプリ –> 一般 –> アクセシビリティ –> VoiceOver を開き、オンにした後は同様に、
このボタンの下に書いてある、「25暖房自然風」とかって文字列をiOSが音声合成して読み上げてくれます。

これを実現するのに追加で書く必要のあるコードが少ないのがiOSが「よくできている」と思うポイントですが、以下のような変更でこの対応を行いました。

この画面ではUICollectionViewを使っていて、各ボタンは、UICollectionViewCellを継承したクラスです。

1
2
3
4
// SSButtonCell : UICollectionViewCell
- (void)awakeFromNib {
    self.isAccessibilityElement = YES;
}
1
2
3
4
5
6
7
// SSMainViewController : UICollectionViewController
- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath; {
        IRSignal *signal = [_signals objectAtIndex: indexPath.row];
        SSButtonCell *cell = [cv dequeueReusableCellWithReuseIdentifier: @"SSButtonCell" forIndexPath: indexPath];
        cell.label.text         = signal.name;
        cell.accessibilityLabel = signal.name;
...

これだけだし、accessibilityLabelのところを、漢字もうまく読み上げてくれるのだからすごい。

accessibilityLabelが音声認識対象になって、アプリ内でSiriと話せるようになるとSiriも使えるし、
多くのアプリがアクセシビリティに対応するようになるし一石二鳥でいいと思うんだけどな〜
iOS9で待ってます。

参考

サービスをつくるときには 「こういうユーザー層にこういう使われ方をするだろう」 と考えてその予測の精度がよいと、 いい仕事をした、という満足感がありますが、
(予測は当った上で) さらに想像を越えたところで使われ、 自分の想像力の欠如をよい意味で裏切られるのも、 嬉しいものですね。

ということで、最近もまたアクセシビリティ関連のお問い合わせがあったので検索用に書いてみました。

リモコンNKとIRKit対応アプリの申請方法

自分以外の人がつくったIRKit対応アプリがAppStoreに出たよ!!!!
リモコンNK [AppStore]

すごい!!!!!!!!!
こちらのアプリは事前に聞いていなかったし驚きました!
AppStoreに “家電操作” のカテゴリができる日も近い!

公式アプリに対して “もっとボタンを置きたい” という要望をいただいておりますが
開発者の @nakano_koumuten さんもその点に気づいたのか
公式アプリの不満点を解消してより高機能になっていますねー。

さて、IRKitというデバイスとセットで動作するアプリをAppStoreに申請して、
AppleにIRKitが無いのにどう審査するんだ?
という話。

自分の場合はデバイスが販売開始もしていないときだったので、 Review Notes (Optional) に以下のように書きました。

I’m going to manufacture IRKit device starting this Decemeber, and here’s some pictures of it. http://www.flickr.com/photos/99687464@N00/11311616785/ And a demo video using IRKit prototype device with the app. http://www.youtube.com/watch?v=4MdpfICnl3I&feature=youtu.be

動画は、URLを知っている人だけが見られる限定公開設定にしておきます。
こうすれば再生数を見て “Appleの人が動画を見たようだな” と知ることも可能!!

リモコンNKの作者の @nakano_koumuten さんは、以下の動画をのせたそうです。

赤外線リモコンデバイスIRKit専用のリモコンアプリです。 (IRKitの詳細は http://getirkit.com を参照ください。) 標準のIRKit Simpleアプリと比較して以下の機能が追加されています。 ・オートリピート ・1つのボタンで複数信号の送信  送信間隔(時間)、ディレイ時間の設定が可能 ・複数ページ ・データのインポート、エクスポート

よくできていますね〜
iMovieで字幕をつけたそうです。

申請用であれば自分のやつのような簡易的なものでも動作がわかれば通るようですし、
一般向けのアプリの説明動画としても使うのであれば一石二鳥ですしこのように作り込んでもよいかもしれませんね。

もしIRKit対応アプリを作ろうかな、と思っている方いらっしゃいましたらお気軽にご連絡ください〜
@maaasho.masakazu@gmail.com 宛てにどうぞ。

IRKitのハードユーザーとして、もしよろしければテスターとしてご協力させていただきたいですし、
公式アプリからIRKit対応アプリ群にリンクする計画もあります!
ぜひぜひ。

IRKit 3rdロットとモールスWi-Fiセットアップの終了について

Wi-Fi機能を備えたデバイスのセットアップ、そしてモールスWi-Fiセットアップについて のようにしてがんばって モールスWi-Fiセットアップをつくりましたが、
非常に残念ながら、それを捨てるときが来ました。

モールスWi-Fiセットアップ はIRKitの2nd Lotまでで役目を終え、
今週からAmazonに入荷予定の3rd Lotからは外します。
モールスに期待していたみなさまには本当に申し訳ないです。

基板はしばらくはそのままですが、マイクやアンプ、マイク周りの周辺部品は未実装とします。

理由はたくさんありますが、
その最大のものは、部品の調達がしんどいから、です。

1st Lotで使ったマイクは Hosiden の KUB2823 を使い、
それが手に入りにくかったので、2nd Lotでは似た仕様の Kobitone の 254-ECM6044-RO に切り替えました。
基板だってマイク調達の選択肢を増やすため、6mm径のマイクと4mm径のマイクがどちらでも実装できるように工夫してみました(これはうまくいかなかったが)。

IRKitの仕様にあう特定のマイクの在庫を 500個 も抱えているところは無いし、部品を切り替えるためには評価することになるし、何ヶ月後に入荷するマイクをまとめて大量に買えるほど自信もない。
マイクがなかったとしても、個人がデバイスをつくるにあたって部品調達が一番しんどい(と私は感じた)、ということは IRKitの作り方 にも書いたとおりです。
なるべく部品を減らしたいのです。

他の理由も。。。
iPadやAndroidの機種達ではマイクの音量が大きく、IRKitの筐体の音響設計がなされていないためか、iPhone以外の対応機種を増やそうとすると認識精度を高く保つためにArduino側のマイク周りの回路やモールス信号デコード処理を改善する必要があるがプログラムメモリが足りない。
Wi-Fiアクセスポイントに接続できなかった時にその理由がフィードバックされないので、モールスが失敗したんだろう、と思い込みやすい。実際にはパスワードを間違えただけであったとしても。
などなど。

多くの場合はうまくいくし、うまくいった時の感動は素晴らしいのですが、残念です。

結局、これからはモールスの代わりに、
先の記事 の最初に書いた方法: IRKitがWi-Fiアクセスポイントになり、設定アプリからIRKitのアクセスポイントに接続する方法を使うことにします。

IRKitのアプリ側のデザイナーのしーほ の神デザインの助けもあり、この方法でも意外とスムーズにセットアップできるのではないか。
むしろかなりスムーズであると思います。
実際どうなのかは体験してみてください!
IRKit on Amazon

さて、モールスが大好きなあなたにとっての参考情報です。
IRKitはArduino派生商品であるので、IRKitの3rd Lotを購入し、モールスで遊ぶのに必要な以下の部品を購入し、IRKitの回路図 を見ながら未実装であるパッドに部品をハンダ付けし、Arduinoのプログラムを書き込むとよいでしょう。

回路図の下半分中央辺りに “MICROPHONE” と書かれたエリアがあります。
その部品番号と以下の部品表が対応しています。
少量購入する際に便利なショップのURLものせておきました。

Wi-Fi機能を備えたデバイスのセットアップ、そしてモールスWi-Fiセットアップについて

IRKitのように、スマートフォンとWi-Fiで接続するデバイスをつくる際には、
どのように家のWi-FiのSSIDやセキュリティの設定(WPA2なのかWEPなのか等)、パスワードをどのようにスマートフォンからデバイスに伝えるのか、ということが問題になる。

スマフォからは同時に1つのWi-Fiアクセスポイントにしか接続できないのだから、
家でも使うデバイスなのであれば、デバイスが家のWi-Fiアクセスポイントに接続することになる。

だがデバイスには入力用のインターフェースがない。

一番思いつきやすいのが、デバイスがWi-Fiアクセスポイントになり、スマフォからそれに接続して家のWi-Fiアクセスポイントの情報を伝える、という方法。
だがこれでは自分のアプリ内でセットアップが完結しない。iOSであれば一度設定アプリを開き、Wi-Fiの設定からデバイスのアクセスポイントを選択し、、となる。

興味深い事例をいくつかご紹介すると、
Eye-Fiカードでは、一度PCにつなぎ、PC上のセットアップツールを使い、Eye-Fiカードが接続するアクセスポイントの情報を直接カードに書き込む。

この方法だとアクセスポイントはプルダウンメニューから選択できるのでSSID等を手入力せずに済むし、Wi-Fiに接続できなかった場合にデバイスからのフィードバックもあるが、PCにつながくてもセットアップできるとなおよい。

Electric Imp というWi-Fiモジュールでは、光の点滅をデジタル信号のようにして使う BlinkUp Technology を使う。

BlinkUp is the proprietary Electric Imp setup solution that integrates seamlessly into your apps, letting you and your customers connect products in seconds using just a smartphone or tablet.

スマフォのディスプレイがチカチカするのだ。かっこいい。
オープンソースにはなっていないし、Wi-FiモジュールとしてElectric Impを採用する必要があったがIRKitではそれは別の理由でできない。TELECも2014年3月現在取得していない。

IRKitをつくるときには、他のWi-Fiモジュールを使いつつこれをぱくろうかと最初は思ったが、
Patent Pendingと強調されているし、探すと申請中の特許 Optically configured modularized control system to enable wireless network control and sensing of other devices も見つかったのでびびってやめておいた。

光がだめなら音はどうか。
モールス信号はかっこいい。

(中略)ということで音でいこうと決めた。

Arduinoでモールス信号の送受信を試している人も何人かいて google: arduino morse 、それらを参考に組んでみた。

モールス信号 は、長音と短音、無音区間の比率を規定するもので、速度は WPM という単位を使い、可変である。
WPM は Words Per Minute の略。
Word は “PARIS” を基準とする場合が多い。
つまり .__. ._ ._. .. ... (ただし ‘_’ が長音, ‘.’ が短音, ‘ ’ が文字区切りとする) の長さである。
長音1つは短音3つに相当し、
各音の間には1短音分、文字区切りは3短音分、単語区切りは7短音分の無音区間があるので、
“PARIS” は 50短音分の長さがあり、
WPM は 1分間で 50短音分の長さ をいくつ再生できるのか、という速度の単位である。

SSIDとパスワード+アルファを送ろうとするのに、何分もかかるようでは困る。
ということで IRKit で採用する際には高速化をはかった。

まずは鳴らす側、iPhoneアプリではモールス音を高速に鳴らすライブラリは無かったので、書くことにした。
できあがったものはこちら。
IRMorsePlayerOperation.m
モールス信号をサイン波のサンプルから生成し、ローパスフィルターを通し(サイン波を鳴らしたり無音にしたりする境目で発生するノイズを落とすため)、マイクから鳴らす。
AudioUnit, AUGraphを使った。

Arduino側はこちら。
morse.cpp

モールス信号は、長音と短音の組み合わせにアルファベットをマッピングしていく。
その表はこちら。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// # standard morse tree
// T _    M _ _    O _ _ _    CH _ _ _ _
//                            Ö _ _ _ .
//                 G _ _ .    Q _ _ . _
//                            Z _ _ . .
//        N _ .    K _ . _    Y _ . _ _
//                            C _ . _ .
//                 D _ . .    X _ . . _
//                            B _ . . .
// E .    A . _    W . _ _    J . _ _ _
//                            P . _ _ .
//                 R . _ .    Ä . _ . _
//                            L . _ . .
//        I . .    U . . _    Ü . . _ _
//                            F . . _ .
//                 S . . .    V . . . _
//                            H . . . .

ところがSSIDには日本語が使えてしまうので、SSIDをモールスで送ろうとすると困る。

IRKitでは以下のように [0-9A-F] と区切り用に ‘/’ に特化したマッピングを採用した。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// # hex+/ morse tree
// # 4,5 should be used more frequently than others because they're used in ascii alphabet
// 4 _    3 _ _    0 _ _ _    ? _ _ _ _
//                            ? _ _ _ .
//                 1 _ _ .    ? _ _ . _
//                            ? _ _ . .
//        6 _ .    8 _ . _    ? _ . _ _
//                            ? _ . _ .
//                 9 _ . .    ? _ . . _
//                            A _ . . .
// 5 .    2 . _    B . _ _    ? . _ _ _
//                            ? . _ _ .
//                 C . _ .    ? . _ . _
//                            ? . _ . .
//        7 . .    D . . _    ? . . _ _
//                            ? . . _ .
//                 E . . .    F . . . _
//                            / . . . .

これで厳密にはモールス信号ではないのだろうが、しょうがない。
文字列はUTF-8にエンコードしたものを16進にして4bitずつ1文字として送る。
例: “あ” –> “E38182” –> ... __ _._ __. _._ ._

iPhoneアプリでモールス音を再生し、Arduinoでデコードする。
安定して認識できた速度 100 WPM を採用した。
これでそこそこ長いSSIDとパスワードの組み合わせ+アルファを送るのに 12 秒。
セーフか。

こんなふうにして再生する、 100 WPM のモールス信号の音を参考までに置いておく。

この方式を モールスWi-Fiセットアップ と勝手に呼んでいた。