2015年12月20日日曜日

ひまかん Advent Calendar 20日目: 新型Apple TV使用レポ

技術系集団であるひまかんがこれまでに作ってきた作品の紹介や、技術ネタ、ライフハックなど、ノンジャンルな記事を埋めていくアドベントカレンダーです。
ひまかん Advent Calendar 2015

Apple TV をプレゼントしてもらいました


妻からクリスマスプレゼントに新型のApple TVをプレゼントしてもらったので、使用レポをしようと思います。

 なんという美しい包装。



Apple製品開封時のあのいい匂いがします。


付属の Remote と一緒に。よく見たら上下が逆だった。


Remoteは操作感がかなり上がっている


以前のApple TVのリモコンよりは少しボタンが増えています。
上下左右ボタンはMac Bookにあるトラックパッドのような仕組みになりました。上部の光沢が無い部分がそれです。
ホームボタン、Siriボタン、音量コントロールなどが増えています。
メニューボタンと、再生・一時停止ボタンは以前からありましたね。



タッチジェスチャーはApple製品を使い慣れている人であれば非常に慣れ親しんだ操作感です。TVのインターフェースをまるでiPhoneを操作しているように操作できます。

Apple TVのホーム画面


テレビとの連動がすごい


以前からApple TVを使っていたのですが、ひとつ進化のポイントとして驚いたのが、テレビとの連動です。

Apple TVがスリープから解除されると自動的にテレビの電源が入り、入力切替がApple TVをつないでいるHDMIのソースに切り替わります。そしてRemote上の音量コントロールをいじると、テレビ側の音量が調整できます。さらにApple TVの「設定>今すぐスリープ」を選択すると自動的にテレビの電源もOFFになります。

こんなことできるのかーと少し調べてみたら、HDMIで接続した機器に制御信号を送ることで機器を操作をするHDMI CECという規格があるらしく、ほとんどのメーカーが実装しているみたいです。うちは2010年に購入したソニー製のテレビを使っていますが、もちろん連動できないテレビもあると思います。


大画面のアプリはすごい迫力


新型Apple TVの醍醐味はなんといってもアプリです。いくつか無料のアプリを落としてみました。

App Storeトップ。オススメアプリが並んでいます。動画配信系推しですね。


カテゴリ一覧。エンターテインメント・教育・ゲームしかまだありません。何か新しいジャンルのアプリを出したらチャンスがあるかも?



ミニオンラッシュというゲーム。実はiPhone版で以前からずっとプレイしていたゲームなのですが、テレビでやるとすごい迫力です。
操作は、Remoteのタッチパッドをスワイプしたり、傾けたりして遊びます。



GT Spritというレーシングゲームもやってみました。


グラフィックはかなり素晴らしい。PS3ぐらいの性能はありそう?


操作はなんとRemoteを左右に傾けるだけです。アクセル・ブレーキなどは自動でやってくれます。Remoteの応答性、操作性、お手軽さなどを考えてバランスのよい実装になっていると思います。



Siriもなかなか良いが…まだまだな面も


今回のApple TVの特徴に Siri Remote という機能があります。Remoteのマイクボタンを押しながら喋るとどんなときでもSiriが作動してアシストしてくれるという機能です。

「今日の天気は?」とかにも反応してくれますし、iPhoneでできるSiriと同等の性能はありそうですが、入力インターフェースの限られているApple TVではもっとスマートなアシストをしてほしい箇所がいくつかありました。

例えば「◯◯の動画を見たい」と聞いても「見つかりませんでした」となります。Siriが探し出せる動画はiTunes上の映画等に限られるみたいです。YouTubeやHuluなどの動画視聴アプリ内の検索に接続されるともっとすばらしい世界になると思います。

あとはそもそもブラウザを積んでいないため、Web検索できなかったりするのも痛いところですが、なぜこんなに検索にこだわるのだろうかと考えたら、テキストの入力が著しく煩わしいのが原因でした。Remoteで文字キーをスワイプ&選択して1字ずつ入力、変換をしていくのはかなりしんどい作業です。せめてテキスト入力だけでもSiriでできるようになるとかなりUXが向上する気がします。

デバイス自体の性能は充分によさそうなので、今後のアップデートに期待したいと思います。

2015年12月19日土曜日

ひまかん Advent Calendar 19日目: IRKitとGoogle App Engineで毎朝NHKをつける

技術系集団であるひまかんがこれまでに作ってきた作品の紹介や、技術ネタ、ライフハックなど、ノンジャンルな記事を埋めていくアドベントカレンダーです。
ひまかん Advent Calendar 2015




IRKitとは



会社の人たちからの誕生日プレゼントでIRKitをもらいました。
IRKitとはリモコンの赤外線をハックして、思い通りに家電を操作するデバイスです。標準でWi-Fiモジュールが内蔵されており、かつ操作するためのシンプルなREST APIが公開されているので、エンジニアであればそれこそ自由自在にリモコンを操ることができます。

IRKitの機能は非常にシンプルで、「直近で受信した信号データを返す」と、「信号データを送信する」だけです。各リモコンの信号データをいくつも保存しておく、などの機能はありません。逆に言えばそのへんはいくらでも自由に実装できます。

また、家庭内に置いたIRKitへのAPIコールはローカルネットワーク内でのみしか到達できませんが、適切にトークンを取得することで api.getirkit.com がプロキシとなり、インターネット経由でIRKitのAPIをコールすることができます。これを利用することで、外出先からエアコンを操作したりできるのはもちろんのこと、クラウド上のサーバープログラムから任意のタイミングでIRKitを操作することができます。


毎朝指定した時間にTVをつける



非常に簡単なサンプルですが、我が家では毎朝NHKの朝ドラを見ているので、目覚ましも兼ねて指定した時間にNHKをつけるプログラムを組んで動かしてみました。また、休日はゆっくり寝ていたいので、平日のみ起動するようにもします。

家に常時起動しているサーバーがあれば楽なのですが、我が家ではそんなものを置かせてもらうことはできないため、クラウド上のサーバーからcronでAPIを叩くことにしました。クラウドサービスは、(こんな趣味程度の規模であれば)無料で使えること、golangに興味があったことなどを理由に、Google App Engine for Go を採用しました。

まずは下準備として、IRKitをインターネットにつなぎ、Internet APIをコールするためのclientkeydeviceidを取得する必要があります。詳しくはここを参照してください。

http://getirkit.com/#IRKit-Internet-API

無事Internet APIを叩けるようになったら、TVリモコンの赤外線信号を取得します。我が家のソニー製のTVは数字ボタンを押すことでTVの電源が入っていない状態でも電源か入り、その数字のチャンネルに合わせてくれる機能があります。そこで、今回はリモコンの「1」ボタンの信号データを取得することにしました。

IRKitにリモコンを向け、「1」を押したあとに以下のようにAPIを叩きます。



curl -i "https://api.getirkit.com/1/messages?clientkey=XXXXXXXXXXXXXXXX&clear=1"
HTTP/1.1 200 OK
Server: ngx_openresty
Date: Tue, 07 Jan 2014 09:03:59 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 481
Connection: keep-alive
ETag: "-19571392"
X-Content-Type-Options: nosniff

{"message":{"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]},"hostname":"IRKitD2A4","deviceid":"FBEC7F5148274DADB608799D43175FD1"}



返ってきたJSONのmessageオブジェクトをそのままPOSTすることで、リモコンの「1」が再現されます。


curl -i "https://api.getirkit.com/1/messages" \
     -d 'clientkey=XXXXXXXXXXXXXXXXXXXXXXXXXX' \
     -d 'deviceid=XXXXXXXXXXXXXXXXXXXXXXXXXXX' \
     -d 'message={"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.1 200 OK
Server: ngx_openresty
Date: Tue, 07 Jan 2014 08:52:24 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 0
Connection: keep-alive
X-Content-Type-Options: nosniff


無事TVの電源が入り、1chが映ることを確認したら、これをGoogle App Engineから起動してみます。Google App Engine for Goのセットアップはこちらを参考に進めます。


書いたGoプログラムは、ほとんどサンプルをコピペしたような簡素なものです。



このプログラムは、指定されたパスへのリクエストがあると、IRKitのInternet APIを裏で叩くようになっています。



また、app.yamllogin: admin を付けることで、リクエストの際にGoogleアカウントでのログインが必須となり、かつ管理者以外からのリクエストの場合は自動的にエラーが返されるようになります。第三者に勝手に家のTVを操作されるのは困りますからね。

続いて、このパスへのリクエストをスケジューリングしてみます。 cron.yaml にこのような記述をします。


これは、平日の朝7:30にスクリプトを起動させる指定をしています。デプロイした後に、Google Developer Console のスケジュールタスク画面で、このような表示になっていることが確認できたらOKです。


IRKitを設置する


IRKitをTVの信号が届く範囲に設置します。我が家ではこのように壁に貼り付けました。ここなら同時にエアコンと照明を操作することができるので夢が広がります。



今後の展望としては、せっかくApp Engineを使っているので、信号データやトークンをソースコードにベタ書きせずにDatastore APIを使って登録・参照できるようにしたいです。汎用的なシステムが作れたら公開しようと思います。

2015年12月18日金曜日

ひまかん Advent Calendar 18日目: subsonicで音楽ストリーミング

技術系集団であるひまかんがこれまでに作ってきた作品の紹介や、技術ネタ、ライフハックなど、ノンジャンルな記事を埋めていくアドベントカレンダーです。
ひまかん Advent Calendar 2015


家のHDDに入った音楽を外で聞きたい

と思うことがたくさんありまして。。。
今ならGooglePlayMusicが日本でもサービス始めたのであんまり意味ないかもですが、
Subsonicというソフトを導入して自前で音楽配信サーバを立てる方法を書いていきます。

Subsonic in Raspberry Pi (B+)

Raspberry Pi に Subsonicをインストールします。
インストールは下記のサイトをそのまま参考にしました。
ポイントは Javaを8に上げる、debパッケージをraspberry piにインストールする、ユーザーを作る くらいでしょうか。

自分は最初 A+ でやっていたんですが、だいぶ重くて辛かったので B+ に変更しました。
Subsonic自体はjavaで作られているので、JVMをちゃんとチューニングすればまともに動くのかもしれないですが、
そもそもA+だとネットワークも後付で用意したりしなきゃならないのでめんどくさいです。

Subsonicに外から接続する

家のネットワークを外に晒すのもちょっと怖かったので、
ルーターについてたVPN機能をつかってVPN接続させることにしました。

参考:

iOSにも標準でVPN接続する機能がついているので、
これでiPhoneから家のSubsonicに接続ができる状態となりました。

iOS用のSubsonicクライアント

有料ですが、このソフトが使いやすかったです















こんな風に再生できます



使用感

ルーターの問題なのかたまにVPN接続ができないことがありました。
VPN接続さえできればおおむね快適。
ただ、日本語検索が若干あやしい感じがします。

家に余ったraspberry piなどがある方いかがでしょうか。

2015年12月16日水曜日

ひまかん Advent Calendar 16日目: SoundCloud Favorite

技術系集団であるひまかんがこれまでに作ってきた作品の紹介や、技術ネタ、ライフハックなど、ノンジャンルな記事を埋めていくアドベントカレンダーです。
ひまかん Advent Calendar 2015

SoundCloud Favoriteとは


Slackで bgm というチャンネルを作り、見つけた作業用BGMの共有などをしています。
メンバー内はSoundCloudユーザーが多く、そこで見つけた曲が共有される曲の対象になります。その曲は手動で共有するのがめんどくさいため、自動化の方法を探していました。当時IFTTTを探してみたのですが、投稿のフォーマットがきれいに作れず、いまいちなものだったので自作してしまいました。

herokuで動かしていたhubotのプラグインとして作りました。

https://github.com/himakan/soundcloud-favorite

コマンドはこんな感じになっています。

ユーザーを追加する

<hubot> soundcloud-fav add <user_name>


ユーザーを削除する

<hubot> soundcloud-fav remove <user_name>


ユーザーを削除する

<hubot> soundcloud-fav list


hubotには事前に HUBOT_SOUNDCLOUD_CLIENTID という環境変数で、SoundCloudのAPIキーを渡しておく必要があります。
デフォルトでは10分おきにSoundCloudのAPIを叩き、各ユーザーのお気に入り一覧を取得します。そのなかから、未通知のものを取り出し、Slackに投稿するという仕組みです。未通知かどうかのフラグはhubotのbrain機能(redis)を使っています。

改めて、IFTTTでやってみてもいいかも


ところで、今IFTTTを探してみたらこんなレシピがありましたが、なんかSoundCloudの不調?みたいなのでうまく動かず。

IFTTT Recipe: soundcloud favourites to slack connects soundcloud to slack

2015年12月15日火曜日

ひまかんブログ: ひまかん Advent Calendar 15日目: 美味しい唐揚げ開発

技術系集団であるひまかんがこれまでに作ってきた作品の紹介や、技術ネタ、ライフハックなど、ノンジャンルな記事を埋めていくアドベントカレンダーです。
ひまかん Advent Calendar 2015

美味しい唐揚げ開発

味付けはオープンソース(co○kpadとか)だろうが
商用のもの(○清の唐揚げ粉)だろうがなんでもいいんですが、
開発(揚げ方)の仕方で食感が結構変わるよって話。


すいません、これが言いたかっただけです。
以下エンジニア感の全くない記事になります。

肉選び

唐揚げに限ったことじゃないですが、好みに合わせて部位を選びましょう。
どうせ油であげるんで、高級な国産鶏じゃなくていいです。
ブラジル産コスパサイコー

1. もも肉
脂が乗っててジューシー

2. 胸肉
アブラ少なめ。加熱し過ぎるとすごいパサパサになるので注意。

3. 肩肉
ももと胸の中間みたいな食感になります。
最近近所のスーパーでよく見かけるんですが、
ラベルに「希少な部位です」って書いてあるくせにいつも大量に安く売ってます。

衣選び

市販の唐揚げ粉などを使う場合は選択の余地はないんですが、
自前でやる場合は結構重要なポイントです。

1. 片栗粉
分量にもよりますが、表面が白い粉がふくような硬いカリッとした衣になります。
竜田揚げ等は衣が100%片栗粉なので、これをイメージしてもらえると。

2. 小麦粉
ふわっと柔らかい衣になります。
フライドチキンやナゲットなどは100%小麦粉ですね。


ちなみに自分はいつも100%片栗粉でやります

肉はしっかり丸めよう

唐揚げの形ってあんまり意識したことある人いないと思いますが、
お店のものって意外と丸まってコロコロしてるものも多いんです。
(必ずしもそうってわけではないですが。。

衣をつけた肉はしっかり丸めて整形してから油に投入しましょう。
肉の断片が合わさることで食感がふわっとジューシーに
さらに、形が整うことで揚げムラを抑えることができます。
大きさを均一にするために、たまに肉をちぎって組み合わせたりしてもいいです。

肉は揚げすぎるな

肉は火がギリギリ通るくらいを目指すのがポイントです。
揚げすぎるとパサパサになってしまいます。
余熱をうまく使って2度揚げすると良いでしょう。

肉の大きさにもよるのではっきりは言えないですがこんな感じで

1回目: 170-180℃くらいで3-4分
余熱タイム: 数分
2回目: 190-200℃くらいでさっと


最後に

揚げ物は数揚げりゃうまくいくようになるので
失敗を恐れずたくさん揚げて下さい。
良い唐揚げライフを!

2015年12月14日月曜日

ひまかん Advent Calendar 14日目: Paster

技術系集団であるひまかんがこれまでに作ってきた作品の紹介や、技術ネタ、ライフハックなど、ノンジャンルな記事を埋めていくアドベントカレンダーです。
ひまかん Advent Calendar 2015

Pasterとは


我々は、かつて日常的なコミュニケーションツールとして、Yahoo!メッセンジャーを使っていました。日常会話の中ではよくソースコードを貼ったり画像を共有したりする必要があったのですが、gistは画像貼れないし、gyazoはテキスト貼れないし、ということでシンプルに使えるスニペット共有ツールを作りました。

どうせならオープンソースにしよう、ということで、GitHubに上がっています。

http://github.com/himakan/paster

特徴


  • Syntax Highlightの自動選択
  • 画像のドラッグ&ドロップ
  • 画像の切り抜き
  • PaaSでの動作
  • 投稿データはS3へ
  • development環境ではtmpディレクトリにファイルを保存してS3を無駄に課金しないように配慮
  • Redisキャッシュ対応
    • バグってて動いていないかも
  • 直近で貼り付けたデータの履歴
    • ブラウザのLocalStorageを使っています

課題

  • AppFogという(当時)の無料PaaSで動かしていたのですが、ポリシーが変わってプランを変更しないと動かなくなったみたいで、いまは止まっています。
  • どうせならよりメジャーなherokuで簡単に動かせるようにするべきですね。 「Deploy to Heroku」ボタン作ってみたい。
  • 画像の切り抜きをサーバーでやっているのがわりと重い処理なので、クライアントでやったほうがよさそう。
  • 最近はコミュニケーションツールがSlackに移ってしまい、需要がなくなりました。。Slackすごい。

2015年12月13日日曜日

ひまかん Advent Calendar 13日目: マツダコネクト

技術系集団であるひまかんがこれまでに作ってきた作品の紹介や、技術ネタ、ライフハックなど、ノンジャンルな記事を埋めていくアドベントカレンダーです。
ひまかん Advent Calendar 2015

マツダコネクトとは


以下の写真はiPhoneを車に繋いでディスプレイに再生されている曲情報が表示されている様子です。マイカーです。


マツダコネクトは最近のマツダ車に搭載されていて、(→公式サイト
コネクテッドカーなどと言われているものの一つです。
コネクテッドカーとは、ICT端末としての機能を有する自動車のことであり、車両の状態や周囲の道路状況などの様々なデータをセンサーにより取得し、ネットワークを介して集積・分析することで、新たな価値を生み出すことが期待されている。(総務省
マツダコネクトでも車両のメンテ状態を取得したり、運転力を診断するといった機能があります。

この分野はAppleやGoogleが車載OSなるものを開発していることもあって、マツダコネクトを手にした時もデベロッパー脳が働いて何かしらハックできないかなと調べましたが特に何もなかったです!
構想みたいなのはあるようなので早く公開されてほしいです・・(http://car.watch.impress.co.jp/docs/event_repo/CES2014/20140114_630566.html

先日、東京モーターショーを見てきましたが、コネクティッドカー周りの構想もかなり現実的になってきた感じがしました。
またこんなハッカソンも開催されようとしているので、デベロッパーとしても車好きとしてもこれから注視していくべき領域だなーと感じています。
ゆくゆくはハッカソンにマイカーで乗り付けたいですね!

その他


マツダコネクト、運転中にTVみれないです。