maaash.jp

what I create

dstat経由でredis infoを眺めfluentdを通してgrowthforecastでグラフにする

dstat が万能なのでredis infoのキーを眺められるプラグインをつくった。

redis-cli info の total_commands_processed を眺める場合。

DSTAT_REDIS_* な環境変数を設定することでなんでもできるし
fluentd-plugin-dstatを使う場合には環境変数がいじりにくかったので同じディレクトリにある設定ファイルを使ってもいい。

次にこれを fluent-plugin-dstat を使い fluentd に流し込み、fluent-plugin-growthforecast を使って GrowthForecast でグラフにしよう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# td-agent/templates/default/td-agent.conf.erb
<source>
  type dstat
  tag dstat.<%= node[:hostname] %>
  option --redis
  delay 30
</source>

<match dstat.*>
  type map
  tag  "mapped." + tag
  time time
  record record["dstat"]
</match>

<match mapped.dstat.*>
  type           flatten_hash
  add_tag_prefix flattened.
</match>

<match flattened.mapped.dstat.**>
  type growthforecast
  gfapi_url http://growthforecast/api/
  service dstat
  tag_for section
  remove_prefix flattened.mapped.dstat
  name_key_pattern .*
</match>

と、こうなる

このプラグインの組み合わせにたどり着くまで大変だった!
けど、これで <%= node[:hostname] %> 毎にgrowthforecastの section ができるので捗る気がする。

dstatのプラグイン は公式のものがたくさんあるのでそれらを参考にすればわりと簡単に書ける。
dstat,fluentd,growthforecast最高!

kazeburo wareなアラートシステムを心待ちにしております

IRKitリリース!そして再入荷予定について

IRKit (Amazon) の再入荷予定はこのページの一番上に最新情報を掲載する形でしばらく更新していきます。
IRKit (switch-science) でも販売を開始いたしました。


第5ロットを製造中です。
現在Amazon,switch-scienceともに在庫がありませんが今週中には出荷予定です。
少々お待ちくださいませ。

2014-08-05 13:30追記


第3ロットを製造中&随時Amazonおよびswitch-scienceへ納品中です。
一時的に在庫が無い場合もありますが数日中には補充されると思います。

2014-04-01 10:30追記


第2ロットが売り切れました!
ありがとうございます。

第3ロットの部品はほぼそろっていまして、1-2週間で出荷できる予定です。
しばらくお待ちくださいませ。

2014-03-18 11:30追記


基板の実装は完了したのですが検査プログラムに問題があり、出荷までもう少々かかりそうです。
もう少々お待ちを…

2014-02-28 15:20追記


次のロットに向けた全部品がそろいそうです。
在庫補充は3月1日頃を予定しています。
部品についてご連絡いただいた方、お待ちいただいている方、ありがとうございます!
2014-02-18 12:20追記


非常に残念ですが、2月14日頃の入荷はなくなりました。
必要な部品 (ATMEGA32U4-AUというAtmel社のマイコン) が手に入りにくいためです。
購入後 1月24日 納期を待っていたものが 2月26日 納期に延期になり、さらに先ほど5月になってしまいました!!
なんということでしょう。
様々なみなさまのご協力により少しずつかき集めて作りたいと思っていますが
再入荷予定は、確実に見えてからまた更新するようにいたします。
もし ATMEGA32U4-AU を入手できる方がいらっしゃいましたらご紹介ください。お願いいたします。
2014-02-13 00:00追記


再入荷についてですが、最速で2月14日頃になりそうです。
またこちらを更新する形でお知らせいたします。
2014-02-01 18:30追記


IRKitAmazonで販売開始しました

が、2014-01-15 13:00現在在庫がありません。
残念です。。

製造と在庫の補充予定について。
最初に100個/ロットつくりまして、様子を見てゆっくり100個/ロットを回していくか、
それとも数を増やしていくかを考えようという予定でした。

最初の100個のうち、20個ばかりがお試し期間中にお問い合わせいただいたり、
こちらからお願いしてデバッグのような感じで(すんなり動かなかった方は本当にご協力ありがとうございました)
先行販売/差し上げて使っていただきました。

残り80個を 24 x 3 に分けて、
ファームウェアに不具合があれば最後の最後に書き換えられるように(結局、書き換えていませんが)
少しずつAmazonへ出荷しようと考えていて、その最初の24個が売り切れ、
次の24個が到着、Amazonの納品作業待ちです。
今日中には購入いただけるようになるでしょう。


こちら納品完了し、売り切れました!ありがとうございますー
2014-01-15 14:00追記

最後の24個はまだ家にありまして後ほど発送しますので、
週末中には購入いただけるようになるでしょう。


こちら納品完了し、売り切れました!ありがとうございますー
2014-01-29 11:00追記

その後はしばらく品切れのまま、数を増やしたロットが1月末か2月頭にできあがるはずです。
それまで熱がさめてしまわないことを祈ります!
申し訳ありませんがしばらくお待ちを…


こちら1月末は難しくなりました。残念です。。
2月初旬にできあがる予定ですがまだ日程が確定できる段階ではありませんのでまたこちらを更新してお知らせいたします。
2014-01-29 11:00追記

ではかっこいい写真を見ていってください。
撮影協力 Thanks @_somtd手縫いの革小物屋さん collocollo

IRKit Internet HTTP APIと販売開始に向けて

外出先からエアコンつけたいですよね。
そうですよね。

IRKit同じWiFiアクセスポイントにつながっている時に、HTTP POSTで赤外線信号をIRKitに送ってもらうAPI仕様 についてはもう書いてあったんですが、
外出先から赤外線信号を送ってもらうためのAPIについても書きました。
IRKit Internet HTTP API と言います。(ちょっと長いですよね, でもデバイス側もHTTPサーバだしなんとも…)

赤外線信号を送るためのAPIは POST /1/messages です。
そのパラメータには送り元のクライアントを認証する clientkey と、
赤外線を送信するIRKitデバイスを特定するIDである deviceid が必要です。
どうやってこれらを手に入れましょうか。

よくある使い方として考えているのは、
IRKitを買っていただいて、公式アプリを使ってWiFiにつないで、普通に使えた!という後に、
せっかくもっと楽しめるんだからインターネット越しに使ってみよう、という方。
この場合には簡単です。

デバイスに POST /keys とやると、一時的に有効な clienttoken というのをもらえます。
これをサーバ側に POST /1/keys で送ると、
サーバ側でこのIRKitデバイスと新しいクライアントの情報を関連づけて記録して deviceid, clientkey をもらえます。
これをつけて POST /1/messages すれば、messageをサーバ経由でデバイスに届けて、赤外線を送ってくれます。

このやり方は clienttoken を使うことでデバイスとクライアントを関連づける、デバイス -> クライアント のやり方です。
クライアント -> デバイスのルートで関連づけを行うやり方もありまして、これが公式アプリやiOS SDKから使うモールス信号を使ったやり方ですが、、、

ちなみに、IRKitは来週15日水曜日Amazonで販売開始予定です。
試用はこの辺りで受付を中止いたします。試用していただいた方はありがとうございましたー!

dkdk

IRKitを試したい人〜

IRKitについていくつか記事を書いてきました。
IRKitの基板実装工場に行ってきた
fablabkamakuraでIRKitのプログラム書き込み用治具をつくった
Yamaguchi Mini Maker Faire 2013

ようやくできあがってきたので、
IRKitとは何なのか、ちょっと恥ずかしい動画でご紹介いたします。ご覧ください。

やってみたかったんだよねー、こういう海外だとよくありそうな、開発者がしゃべる動画。

詳しいことは IRKitのwebsite にも書きましたが、こちらの最後にも転載します。

2014/1月の初めに AmazonのIRKitの商品ページ から で購入できるようになるかと思いますが、

早く使ってみたい!という方がいらっしゃいましたら
お渡ししますので試してください!

試していただけた方には、amazonを通さない分かなりお安くできるほか、場合によってはそのまま差し上げるかもしれません! ぜひご興味があれば、以下までご連絡お願いしますー。

@maaash
o.masakazu@gmail.com


IRKitとは

IRKitは、WiFi機能の付いたオープンソースな赤外線リモコンデバイス。
家庭のエアコンやテレビ、ライトなど、赤外線で操作できる家電を、
WiFiをとおして、iPhoneやiPadなどから操作できるようにするものです。

IRKitは、公式のリモコンアプリ(coming soon!)から操作できるほか、
IRKit iOS-SDKを使えば、
任意のタイミングで赤外線信号を送ることのできるiOSアプリを簡単につくることができます。

例えば

  • 位置情報を使いiPhoneが家の近くに来たら自動でエアコンを付けるアプリ
  • 1ボタンで家中の家電の電源を消すアプリ(寝る前に便利)
  • ソーシャルと連携してFacebook友だちの見ているテレビにチャンネルを合わせるアプリ

など、家電を操作する様々なアプリの可能性があるでしょう。

また、JavaScriptを使ってブラウザから赤外線信号を送ったり
curlを使って黒い画面(Terminal)から赤外線信号を送ることもできます。

IRKitデバイス自体にHTTPサーバがあり、
JSON形式の赤外線情報を HTTP POSTリクエストにのせて送ることで、赤外線信号を送ることができるのです。
また、IRKitと同じWiFiにいなくても、外出先から赤外線信号を送るための、インターネット上にあるサーバのAPIも公開しています。

IRKitデバイスは、Arduino Derivative(派生)のプロダクトです。
未使用のピンは引き出してあるので、温度センサや明るさセンサなどを追加し、ArduinoIDEを使ってプログラムを書き込めば、
よりスマートなリモコンをつくることもできます。

リモコンのどんなところを、諦めていましたか?
どんなふうに家電を操作したいですか?


IRKit iOS SDK

It’s as simple as:

import

[_signal sendWithCompletion:^(NSError *error) { NSLog( @“sent with error: %@”, error ); }];

See more on irkit/ios-sdk


IRKit Device Hardware

See more on irkit/device/hardware


IRKit Device Firmware

See irkit/device/firmware


IRKit Device HTTP API

IRKitデバイスは、Bonjourを使ってIPアドレスを求めることができます。

% dns-sd -B irkit.tcp Browsing for irkit.tcp DATE: —Sat 28 Dec 2013— 23:12:55.623 …STARTING… Timestamp A/R Flags if Domain Service Type Instance Name 23:12:55.768 Add 2 4 local. irkit.tcp. irkitd2a4 ^C

% dns-sd -G v4 irkitd2a4.local DATE: —Sat 28 Dec 2013— 23:16:29.698 …STARTING… Timestamp A/R Flags if Hostname Address TTL 23:16:29.818 Add 2 4 irkitd2a4.local. 10.0.1.2 10 ^C

IPアドレスがわかったら、以下のHTTP APIにアクセスしましょう。
* SafariなどBonjourの.localホスト名を解決するクライアントから以下のHTTPリクエストをする場合には上記は不要です。

GET /messages

最も新しい受信した赤外線信号を返します。

% curl -i “http://10.0.1.2/messages” HTTP/1.0 200 OK Access-Control-Allow-Origin: * Server: IRKit/1.3.0.182.gaf86b44 Content-Type: text/plain

{“format”:“raw”,“freq”:38,“data”:[18031,8755,1190,1190,1190,3341,1190,3341,1190,3341,1190,1190,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190,3341,1190,1190,1190,3341,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,65535,0,9379,18031,4400,1190]}

POST /messages

赤外線信号を送ります。

% curl -i “http://10.0.1.2/messages” -d ‘{“format”:“raw”,“freq”:38,“data”:[18031,8755,1190,1190,1190,3341,1190,3341,1190,3341,1190,1190,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190,3341,1190,1190,1190,3341,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,65535,0,9379,18031,4400,1190]}’ HTTP/1.0 200 OK Access-Control-Allow-Origin: * Server: IRKit/1.3.0.182.gaf86b44 Content-Type: text/plain

赤外線信号を表すJSONについて

赤外線信号は↑のようなJSONで表します。以下のキーを持ちます。

Key Description
format “raw”のみ
freq 赤外線信号のサブキャリア周波数を表します。38 または 40 のみ。単位 [kHz]
data 赤外線信号は、サブキャリア周波数のオン・オフからなります。IRKitデバイスはオン→オフ間の時間、オフ→オン間の時間を 2MHz のカウンタで数えます。dataには、カウンタで数えた数をオン・オフの回数分ならびます。

IRKit Server HTTP API

IRKit Device HTTP API は、IRKit Deviceと同じWiFiにつないでいる時のみ、アクセス可能です。
同じWiFiにいない場合には、インターネットからIRKit Deviceに赤外線を送ってもらうには、以下のようにします。
coming soon!!

IRKitの基板実装工場に行ってきた

Merry Christmas!

クリスマスイブにはIRKitの基板実装工場の近く、岐阜のビジネスホテルに泊まった。
12/24 IN, 12/25 OUT
今年の自分らしいね。

IRKitの基板は、 久田見製作所 に製造、実装、検査をお願いしています。
基板にたくさん助言をくれた 基板設計者 加藤木さん も12/24なのにごいっしょしてくれました。
岐阜県にある町工場に初めての訪問。

クリスマスイブには、部品実装。
マウンターで高速に基板上に置かれる部品達。
ダダダダダダ

リード部品(赤外線LED, 赤外線受信器, マイク, カラーLED) は指した後にハンダ槽を通す。

そしてケースも ミヨシの杉山さん から、金型で出した仕上げ前のプロトタイプが届く!
かっこいいよ 佐々木さん
もりあがってきたー

トラブルもあったけれど、その場でアイディアを出し合って、創意工夫して解決していく。
そういうプロセスに参加するプロの表情。安心できる。
このメンバーと組んでよかった!

あともうちょっと!

fablabkamakuraでIRKitのプログラム書き込み用治具をつくった

IRKitというリモコンをつくっています。

先週は工場でプログラム書き込み、電気検査を行う時に、 実装(=ハンダ付け)済の基板を置くための治具をつくりました。

かっこいいですね。

IRKitは Arduino派生 で、
ATmega32U4マイコンへのプログラムの書き込みにはよくArduino ICSPヘッダと言われる6本のピンを使います。
また、Wifiモジュールへのプログラム書き込みには別の8本のピンを使います。

工場では、これらのピンを通して基板にプログラムを書き込みます。

基板にはピンヘッダもソケットも実装せず、ユーザーが実装できるようにスルーホールだけ空いている。
そんなスルーホールに対して電気的な接触を一時的にするための部品として、
switch-scienceさんで販売しているコンスルー と、sparkfunさんで販売しているPogo Pin というのがあります。

Pogo Pinはこちらから買うと安いとのこと
P75-E2 Dia 1.02mm 100g Spring Test Probe Pogo Pin 100PCS/lot (thanks, tonu)

それぞれ自分のところで製造している基板の書き込みに使われている様子。 Testbed + Pogopins = Pogobed (sparkfun)
良記事。

両方試して知人も使用経験のある後者を使おうと思っています。
どちらでもよさそうな。
こんな部品の存在も自分がこれを使うことになることも半年前には想像もしていなかった!

IRKitの基板を上にのっけて、板で上から押さえつけるようにすると、ICSPの6本とWiFi用の8本が接触する。

そしてavrdudeやらを呼び出す batファイル を書けば、1ダブルクリックで基板に息が吹き込まれる。
2013年内に batファイル の書き方をこんなにぐぐることになるとも想像していなかった。

ケースは、fablabkamakuraで、4mmの合板をレーザーカッターで切り出してつくりました。

Rhinoでモデリングし、イラレで合板を効率よく使うように配置した後、WindowsPCから 印刷 を行うと、レーザーカッターが合板を切り抜いてくれます。
印刷 コマンドとはね。

レーザーカッターは3Dプリンタに加えて、なんでもつくれる全能感を与えてくれる工作機械。
ぜひお試しいただくとよいかと思います。
思いついたものをすぐ作れるfablab最高。

KonashiでiPhoneに無線でつながるデバイスのプロトタイピング

カヤックを退職し、リモコンと歯ブラシをつくっています。

今日は歯ブラシの方、シャカシャカブラシの話をしましょう。

Engadgetの 「電子工作部」、スマホ連係ガジェットを作ろう! というイベントに(しばらく前に)行ってきました。 思うに、おもしろいな〜と思うサービスは必ず物理的なデバイスを伴うものであることが増えてきたように感じていて、 自分でもつくろうと思い立ちました。

このイベントは、konashi を使って「スマートフォンと連係するガジェットを作る」ワークショップ。 チームに分かれて、ブレストをして (間をはしょって) つくってものがこちら。

この動画、感動ものですね。

うちの子も歯磨きが苦手な時期があって、歯磨きをする時といえばいつも、
床に座って自分のまたの間に子供を寝かせて、足で腕を抑えて抵抗できないようにして、泣き叫びながら、口の中に指を入れて噛まれないように注意しながら歯磨きしていて、 ほんと虫歯を防ぐためでなければやりたくないです。

まさにこれ

シャカシャカブラシは、歯ブラシにつけたクマの形をしたガジェットで歯ブラシの動きを検出して、それをBLEでiPhone/iPadに送り、クマさんやきりんさんが出てくるゲームぽいアプリを子供に見せて歯磨きが終わるまで楽しんでもらおう、というもの。

DSCN4440.JPG

konashi Amazonでも買えるみたい は BLEを使ってプロトタイピングをするためのツールキットで、
Arduinoみたくデジタルやアナログの入出力のピンがあって、それにセンサなどをつなぐと、BLEを通してiPhoneから見えるようになる、というもの。

このクマの歯ブラシには、歯磨きする時の動きをとるために、加速度センサをつけています。 加速度センサで取得した加速度を、konashiを使ってiPhoneに送ります。

発表まで一週間と時間もないので、加速度センサは @SOMTD が持っていた(thanks!)、秋月でも売っていた(過去形…) KXM-1050 を使いました。3軸加速度センサモジュール KXR94-2050 が同じ仕様の後継かな??

KXM-1050 は、3.3V を電源電圧として与えると、中央の 1.65V を 0G として感度 660mV/G で X,Y,Z 軸のアナログ電圧を出力してくれます。 これを konashi のアナログ入力電圧範囲 0-1.3V の範囲内に抵抗で分圧して収めます。

電源は konashi のピンにある 3V (2.7-5.5VまでOK) を使い、 出力抵抗が 32k もあるので (これに気づかずしばらくはまりましたが…)

3 x ( X / (32k + X) ) <= 1.3

22k の抵抗を選び

3 x (22k / (32k + 22k)) = 1.22 [V]

を狙います。

これで 0G の時には 1.22 / 2 = 0.61[V] くらい, 感度も

1
2
3.3:0.66 = 1.22:X
X = 0.66 x 1.22 / 3.3 = 0.244 [V/g]

ハンダ付けして基板を縦置き、横置き、とかしながらテスターで測ると

1
2
3
+1G: 0.877V
 0G: 0.621V
-1G: 0.394V

なのでほぼ狙いどおり。

同チームにいた プロトタイピングに強い樹脂成形のミヨシ さんがあっというまに削りだしでつくってくれたケースに収めるとこんな感じ。

DSCN4442.JPG

加速度センサのデータは、konashiを経由して読み取ります。 konashiをiPhoneから使うには、2種類の開発方法をとることができます。

  • jsdo.it 上にJavaScriptコードを投稿し、konashi.js アプリ上で実行する方法。
  • Objective-Cを書いて、ネイティブiOSアプリを書く方法。

今回は Storyboard で画面遷移をつくると速そうだったので後者を選択。

konashi-ios-sdk は cocoapods を使い Podfile に書いて pod install すれば入ります。

1
2
3
platform :ios, "6.1"
pod "konashi-ios-sdk"
xcodeproj "CuteBrush/CuteBrush.xcodeproj"

最初の ViewController で #import <konashi-ios-sdk/Konashi.h> した後

konashiの発見と、加速度センサの3軸分のアナログ入力の設定をします。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
- (void)viewDidLoad {
    [super viewDidLoad];

    if ( ! [Konashi isReady]) {
        [Konashi initialize];
        [Konashi addObserver:self selector:@selector(konashiReady) name:KONASHI_EVENT_READY];
        [Konashi find];
    }
    ...

}

- (void) konashiReady {
    LOG_CURRENT_METHOD;
    [Konashi removeObserver:self];

    [Konashi pinMode:KONASHI_GSENSOR_PINX mode:INPUT];
    [Konashi pinMode:KONASHI_GSENSOR_PINY mode:INPUT];
    [Konashi pinMode:KONASHI_GSENSOR_PINZ mode:INPUT];

    [self performSegueWithIdentifier:@"didStartSegue" sender:self];
}

segueで遷移した先の ViewController では歯ブラシの動きにしたがって、ゲームを進行します。

X軸方向と、Y軸方向のアナログデータを交互に読み取ります。 (実際に歯磨きをする時には、Z軸方向=歯ブラシの糸方向 には歯ブラシを動かさないので)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
- (void)viewDidLoad {
    [super viewDidLoad];

    _pins = @[ [NSNumber numberWithInt:KONASHI_GSENSOR_PINX],
               [NSNumber numberWithInt:KONASHI_GSENSOR_PINY] ];
    _pinIndex = 0;
    [self issueNextReadRequest];

    [Konashi addObserver:self selector:@selector(readGSensorX) name:KONASHI_EVENT_UPDATE_ANALOG_VALUE_AIO0];
    [Konashi addObserver:self selector:@selector(readGSensorY) name:KONASHI_EVENT_UPDATE_ANALOG_VALUE_AIO1];
}

- (void)issueNextReadRequest {
    _pinIndex ++;
    if (_pinIndex >= _pins.count) {
        _pinIndex = 0;
    }
    [Konashi analogReadRequest: [_pins[_pinIndex] intValue]];
}

- (void)readGSensorX {
    int x = [Konashi analogRead:KONASHI_GSENSOR_PINX];
    LOG(@"x,y,z: %d,%d,%d", x,[Konashi analogRead:KONASHI_GSENSOR_PINY],0);
    [_triggerX input:x];
    [self issueNextReadRequest];
}

- (void)readGSensorY {
    int y = [Konashi analogRead:KONASHI_GSENSOR_PINY];
    LOG(@"x,y,z: %d,%d,%d", [Konashi analogRead:KONASHI_GSENSOR_PINX],y,0);
    [_triggerY input:y];
    [self issueNextReadRequest];
}

_triggerX, _triggerY はアナログ入力から、歯ブラシの反転時のGを検出して画面に反映するイベントを発行するオブジェクト(省略)。

こんなふうに、最初の動画のプロトタイプをつくりました。簡単ですね〜

この歯ブラシプロジェクトは、引き続き開発を進めていきますので、 もしお子さんのいる方で共感していただける方は Facebook シャカシャカブラシ ページ への いいね お願いします!

nodefest2013 node-imagemagick-native and node-angel

東京Node学園祭 でLT枠をいただいたので

ImageMagick’s Magick++ bindings for Node.js node-imagemagick-native

angel.js is a simple library to gracefully restart multi process net.Servers node-angel

の紹介をさせていただきました。

angel はやりたかった cli コマンドつくるところまで終わっていませんが、おいおい気分転換の時にでもやりましょう。

いつか出そうと思っていたものを Conference Driven させてもらったよい機会をありがとうございました!

フィードバックお待ちしております…