| @技術/プログラミング

京都国際会館

京都であった RubyKaigi 2016 を観覧してきた。 RubyKaigi 、つくばであった 2010 がこれまでの人生での唯一の RubyKaigi で、人生二度目の観覧だった。

RubyKaigi 2010 の思い出

一度目のときは少し前に増田に上がってた勉強会ゴロ状態(受付の人と技術書を買ったジュンク堂の人と以外誰とも会話をせずに帰宅)だった。

ちなみにこのとき ESM の企業発表を見に行って、 ESM に転職したばかりの hsbt さんの姿を初めて目にした。なんか入社したばかりなのに社内ブログで暴れてて愉快、みたいな紹介のされ方だった。その後同じ会社で働くことになるとは思いもしなかった。

ESM の発表はとにかく鮮烈に印象に残ってて、ペアプロのライブコーディングだった。 ursm さんが CRM か何かの開発を実演してた。まず最初に落ちるテストコードを書いて、その後にパスするプロダクトコードを書く、というやつを初めて目にして、田舎で HTML コーダーをしつつちょっとしたプログラムを書いてた自分は衝撃を受けた。黒い画面の Vim で高速にコードを書いていく様がとにかくかっこよかった。はやくこういう感じでコード書けるようになりたい、と思ったものだった。

クックパッドの企業発表みたいのも聞きにいって、このときクックパッドもまだそんなにエンジニアの数多くなかったはずで、同じくはてなから転職してきたばかりのセコンさんが話してるのを聞いてトートバッグもらって帰った。

YAPC::Asia Tokyo 2015 の思い出

去年の夏、 YAPC で東京に行って、このときはペ社時代の知ってる人としゃべったりして無言の帰宅は避けられた。

YAPC 2015 は気がついたときには懇親会の申し込み締め切られててどこにも行けず、一人浜松町の宿泊先の近くの「とにかく安くて量が多い」と食べログにレビューが書いてある寿司屋に入って一人で寿司を食べたら寿司がねちゃっとしてて具合が悪くなったりしてた。

RubyKaigi 2016

今年も発表する側にまわったわけではないので一般ピープルである点は同じだったが、これまで話したことなかった人と話せたのがよかった。

取り分けよかったのが Fjord 社の komagata さんと話せたことだった。今後の Lokka の方針をどうするか開発者会議的なものを開催してババっと方針を決めましょう、という話をした。 Lokka 、思い入れがあるので積極的にメンテナンスに関わって今後も長く使い続けていきたい。

一日目

一日目は Kaizen Chat についてのブログ記事を公開するというタスクがあって、 Matz のキーノートとかはあまりじっくり聞けなかった。記事公開後に会社のブースで自分のシールを配布したりして公私混同してた。

今年の RubyKaigi は懇親会の枠が大きかったおかげで申し込みそびれるということにならなくてよかった。

オフィシャル懇親会で Fusic 社の k1low さんと初めてゆっくり話をした。Fukuoka.rb で顔を合わせることあっても一緒に酒飲んだりする機会なかったので RubyKaigi に来て初めてじっくり話すという感じだった。

ヒトデさんとその愉快な仲間たちの皆さんとも話して、 shikakun はオリジン弁当ばかり食べてるくせにやたら調理器具を持っていて不可解だとか、風呂蓋付きの浴室がある部屋にすんでいていけすかないという話をした。

Twitter で 8 年くらい前にハゲクラスタとしてわいわいやってた send_ さんとも再会できて、お互い帽子をかぶった状態でいまの仕事の話をしたりした。

オフィシャル懇親会のあとは、ヒトデさんオーガナイズの二次会に参加させてもらった。デンエンという物価が崩壊してる飲み屋に行ってタワーから注いで飲むビール飲みまくった。クックパッド社の著名エンジニアの皆さんと対面に座ったけど人に自慢できるような OSS とかなくて雑魚いので自己紹介に困ったが、とりあえずこういうアイコンのものですと言ってシールを見せたら「あ、なんか見たことある」という感じになったのでシール便利だった。

二日目

朝一番の Justin Searls さんのリファクタリングについての発表がとにかく面白かった。

去年 YAPC で GitHub の人が話してた sicientist と似てるけど、リファクタリング前後のコードで A/B テストをする gem の紹介。新しい方のメソッドが例外投げたら rescue して古い方のメソッドを実行するというのが面白かった。本番にも安心して投入できるとのこと。

三日目

午前二番目に tkawa さんの HTTP クライアントについての発表聞いた。 HTTP クライアント乱立しててひどい、 API をラップしてリモートサーバー側のクラスを再現するような異常なクライアント多くて、 REST API とは一体何なのか状態だ、みたいな話だった。言われてみれば確かにそうかもしれない。独自の API クライアント作ることなく、 Rack が Rack Middleware を use して拡張していくみたいに、 HTTP クライアントの側でも Middleware を use していくのがよい、そこで Faraday ですよ、という話で、あ、 Faraday ってそういうことを目的にしてたんだと膝を打った。

午前中最後の Chris Arcand 氏の発表が面白かった。

Ruby のコードを解析して呼ばれてないメソッドを調べる、という発表だった。実際に Rails プロジェクトとかで使うのは大変そうに見えたけどいまから君のプロジェクトに投入できるよ、 Rails もダイジョブみたいなことを言ってた気がするのでスライド見直したい。

最後のセッションの前、一日目のデンエン会で知古を得た pastak さん見かけたので uiureo さんを紹介してもらって話をした。 uiureo さん、初対面だけど話しやすくて好青年な感じだった。 r7kamura さんとも少ししゃべらせてもらってよかった。

飛行機の時間の都合があったのでクロージングまでは残らず、最後のキーノートの途中で離席して帰途についた。ホールを出ようとしたところで滑り込みで会場にやってきた元同僚の hisaichi551 さんと邂逅して自分のシールを何枚か雑に渡した。ゆっくり話がしたかった。

京都での開催について

京都での開催良かった。個人的には福岡からだと東京に行くよりも京都の方が近いので移動が楽で良い。首都圏からの大多数の参加者も京都に宿泊して参加するので夜通しどこかで RubyKaigi 関連の飲み会が開かれてる感じで祝祭感あった。夕方から観光したりできて海外からの参加者も満足度高いのではないかと思う。京都国際会館のインフラも素晴らしかった(施設、庭園、食事内容)。スポンサーの提供で振る舞われたお弁当おいしかった。

総合的な感想

RubyKaigi 、海外からのスピーカーの発表はどうやってよいコードを書くかとかリファクタリングとかの話が多い。日本人の発表者の人は Ruby を開発する方の話が多い。( Ruby コミッターのほとんどが日本人だから)。なので Ruby 本体の開発に興味ない人( Ruby 開発者ではなく Ruby ユーザーなプログラマー)はぽかんとすることが多いかもしれない。自分は結構ぽかんとしてた。

あと今回多いと感じたのが Concurrency についての話だった。どうやって Ruby で並行性を上げるかという話。 Thread は難しいので素人は手を出すな、ということはわかったけど Ruby 3 の Guild というので素人でも Concurrent なプログラムが書けるようになるかどうかは今ひとつわからなかったので資料を読み直したい( reuibld.fm の Episode 158 を聞くと良い復習になりそう)。 Ruby 3 に並行処理の使い勝手が向上する前に、他の言語で並行処理について学んで準備をしといた方が良さそうだと感じた。

2010年の勉強会ゴロ状態のときに比べれば、何人かの人と話したりシールを配ったりすることができて、有意義な時間を過ごすことができたと思う。ただアイコンの気持ち悪さで認知されるよりも書いたソフトウェアの知名度で認知される方がよいので、カンファレンスに行って自己紹介するときに「○×というソフトを作ってます」と言えるようになりたい。仕事だけじゃなく、オープンソース活動もやっていけるように頑張りたいな、と気持ちをあらたにした会でした。

| @労働

Kaizen Chat とは

Kaizen Platform 内でユーザー同士がコミュニケーションを取ることができるサービス。

  • Kaizen Platform のユーザー
    • カスタマー
      Kaizen Platform と契約し、 A/B テストツールや Growth Hacker によるサイト改善のデザイン案を募集
    • Growth Hacker
      募集に応じてカスタマーサイトのデザインを改善するデザイン案を投稿
    • Kaizen Platform 社員
      カスタマーと Growth Hacker の間の調整役

Kaizen Platform 内のユーザーが外部のツールや電話を利用して行っていた伝言ゲーム的なコミュニケーションを置き換えて、直接コミュニケーションを取ってもらうようになることが目標。

サーバーサイド 2.5 人、フロントエンド 2 人で 2 ヶ月くらいで作った。

構成

数多く存在しているマイクロサービスの中の一つとして実装。

フロントエンド

  • React
  • 多分他にもバズワード的な仕組み・フレームワークを使ってる(後で調べて書きます)

バックエンド

  • Ruby 2.3
  • Rails 5
  • MySQL 5.7
  • Sidekiq
  • Redis
  • Pusher (SaaS)

Rails 5 で開発

Rails 5 は Release Candidate だったが利用することに。

リリース直後に Rails 5 出て将来的に Rails 4 から Rails 5 へのアップデートにリソースを割くの避けたかった。(別の Rails アプリを 3 から 4 に上げたときには大変だった…)

Rails 5 で開発して困ったこと

あんまりないが強いて挙げるとすれば以下。

  • 個人的に好きで前職の頃から使ってた gem ( モデル層のバリデーションのテスト書くのが楽になる accept_values_for ) が Rails 5 対応してなかったので Pull Request 送ったりなど
  • ActiveResorces など Rails 5 対応が遅かった gem もあったが github 直接参照して対応版がリリースされたら rubygems.org を見るように変えるなど(普通です)
  • 社内の Rails プロジェクトで共通して使ってる gem を Rails 5 対応させるなど

WebSocket は Pusher (SaaS) を利用

Pusher を使った。 ActionCable 使って自前実装するのは考えなかった。

  • Rails 5 なら ActionCable では????
    • 急なアクセス増などを考えて SaaS を使うことに
    • WebSocket に関してはインフラのことを考えなくてよくなる
    • 無理に自前実装せず、少々金がかかったとしても、外のリソースを利用できるときは SaaS を使う(社風)
      大人の事情で使えない、とかがないのがよい
  • フロントエンド側も Pusher から SDK が提供されており楽できた(はず)

Pusher との通信の詳細

  • CRUD のうち Read だけ Pusher 経由で行う
  • Pusher は Create/Update/Delete も担えるけど Rails アプリと Pusher とクライアントの間のデータの流れを一方向にしたかった

Kaizen Chat Pusher

感想

Sidekiq 速い

  • 社内で初めて Sidekiq を導入したけど速かった
  • Thread で並行処理をするのでスレッドセーフな作りにしないといけない(利用 gem 含む)
  • capistrano-sidekiq が sidekiq 本体と機能かぶってるところがあるのがちょっと残念

マイクロサービス間の通信が課題

  • マイクロサービス間でなるべく疎結合になるように、相手のサービス側の DB を直接参照しないように頑張る(気合い)
  • スピードが遅くなってしまうところはキャッシュする

BFF 的な考え方必要

  • ActiveModelSerializers 使ってると Serializer が乱立して収集付かなくなる
  • Frontend から必要なフィールド渡してもらってそれをシュバッと返すおシャンティな API にしていきたい

今後

  • モバイルクライアントの開発
    チャットなのに携帯電話で返信できないとかダメですよね…
  • 通知の充実
    チャットなのに通知こなくて気がつけないとかダメですよね…
  • 画像ハンドリングの充実
    負荷やジョブとの戦いに突入します。

Kaizen はチャットの会社じゃないので、自分たちがチャットの機能を作ることはどんな意味があるのか、ということを考えながら機能追加していきたいですね。

なお Kaizen Chat は Kaizen Platform にアカウントをお持ちの方でしたらどなた様でも無料でご利用いただけますのでもしよかったら触ってみてください。僕にファンレターを送ることも出来ます。

また Kaizen Platform, Inc. は本日( 2016-09-08 )から開催されている RubyKaigi 2016 にブースを出しておりますので CTO (リクルート時代に chouseisan 作ってた)やエンジニアと話してみたい人、 Kaizen Platform ロゴ入り手ぬぐいが欲しい人、僕のアイコンのステッカーが欲しい人はお気軽にお越しください。

| @技術/プログラミング

@glidenote 先生作の memolist.vim 便利で、仕事のドキュメントからメモ書き、ポエムに至るまで memolist.vim で書いてるけど、 ~/Dropbox/memolist/ にドキュメントが溜まりまくって厳しい感じになってきてた。文章を書く、ということに関しては vim + memolist.vim はとても良いのだけど、書いたものを後から読み直す、という面では弱い部分があると感じる。 iPhone で読みづらいし。その点、 Day One は過去記事を読みやすいし、 iPhone アプリもあるので夜寝る前に過去に書いた文章を読んでニヤニヤしながら眠ることも出来る1

というわけで ~/Dropbox/memolist/ にある Markdown のファイルを Day One.app ( Day One 2)に取り込むやつを書いた。

タイトルにマッチする文字列が入ったファイルを除外したり、その日以降のやつだけ、という感じで絞り込み指定したりできる。めっちゃ便利。

使い方

rb-dayonejson gem が必要なのでインストールしてください。 --execute オプションを付けないとデフォルトは dry-run です。

Example) 今日書いた記事をインポートする

ruby memolist2dayone.rb

Example) 2015/01/01 以降の記事を取り込むが、「日報」という文字列をタイトルに含む記事は除外する

ruby memolist2dayone.rb --since 2015/01/01 --exclude 日報

Example) ~/Dropbox/memolist 以外のディレクトリを対象ディレクトリにしたいとき

ruby memolist2dayone.rb --target_dir ~/memolist/

  1. 前も似たような記事書いてる。 昔の日記を全部 Day One.app にぶっ込んだ - portal shit! 

| @Mac/iPhone

この記事はできる! Mac OS X アドベントカレンダー 20 日目の記事でしたが遅れて書いています。遅れてすみません。


Soulver and Calca

テキストを入力するためのソフトはいま色々ある。プログラミング向けのエディターとしては Emacs と Vim に加えて最近では SublimeText や GitHub の Atom なんかもある。ただ Mac にはプログラミング用途ではないけど面白い文章を書くためのソフトがあるので紹介します。今日は計算について特化したテキストエディターについてです。ちなみに一個前に FoldingText というエディターについて書きましたのでよろしければそちらもご覧ください。

パソコンでも紙に書くように計算したい

パソコンでもチラシの裏なんかみたいに計算過程を残しながら計算したいと思うことはないだろうか。自分はある。最近はパソコンや携帯電話に電卓機能がついていて計算ができる。しかし電卓では計算を行ってしまって答えを出すと計算の過程を見ることが出来ない。一部のパラメーターを変更して計算し直したいと思うことはないだろうか。

一足 300 円の靴下を 3 足買ったら => 900円
400 円の靴下だったら?(計算し直し)

複雑な計算だったりするとこういうのうんざりしてくる。計算の過程をあとからふりかえることが出来る状態でパソコンで計算できれば素晴らしい。

そんなのを実現してくれるのが Soulver と Calca だ。この二つのソフトはテキストエディタと計算機の中間に位置するようなソフトだ。

自動車ローンなんかの計算をしていて自動車本体と別に購入時の諸費用がいろいろかかって最終的にいくらになるか、みたいな計算をするとき、いちいち表計算ソフトに数字をいれていくのはだるい。チラシの裏で筆算を行った方が早いのではないかと思うことがある。

この手のソフトは自分が知っている限り二つある。一つは Soulver というやつで、こっちの方が多分メジャーで取っつきやすい。しかし高い。もう一つは Calca というもので、こちらの方はより理系向けっぽい機能が充実してる。そして安い。

Soulver

Soulver の良いところ

  • 見た目が Mac っぽい
  • 自動的に足し算する
  • 文章から数字要素を空気読んで抜き出して計算してくれる

Soulver の残念なところ

  • Markdown で書けない
  • 独自定義の関数が使えない
  • コピペしたときに計算結果がコピーされない

Markdown で書けないのが残念だ。また式を関数として定義できないので、式の使い回しが出来ない。場合によっては似たような計算式を何度も羅列しないといけなくなる。加えて計算結果が文字情報として残らないので、コピー&ペーストで計算結果を別のところに移したいときに使えないのが不便だ。

Calca

Calca の良いところ

  • 独自関数を定義できる
  • 変数の遅延評価ができる
  • 単位が自動認識される
  • Markdown で書ける
  • 計算結果をコピペできる
  • グラフが描ける!

独自関数を定義できる

独自の関数を定義できる。式を使い回せるので DRY に計算できる。

変数の遅延評価ができる

変数の遅延評価ができる。先に計算式を定義して後から変数を定義するやつ。 Soulver にはこれができないのが結構痛い。

単位が自動認識される

Soulver は単位を事前に登録しないといけない。例えば「本」のような単位はユーザーが事前に登録すれば解釈できるがそうでなければ Soulver は文字列として処理する。Calca は数字のあとにそれっぽい文字列がくっついてると自動的に単位として解釈して計算してくれる。いきなり「3本 * 3」と打つと「9本」と単位つきで答えを出してくれる。

Markdown で書ける

独自の拡張子を持たず Markdown 文書として書けるので日頃から Markdown を使い慣れてる人には大変使いやすい。保存時も .md などプレーンテキストとして保存できるので他の人と共有もしやすい。

計算結果をコピペできる

計算結果が文章内に表示されるので、計算内容をコピペするときに便利。

calculateBMI(weight, height) = (weight in kg) / (height in m)^2

calculateBMI(75kg, 172cm) => 25.3515 kg/m^2

グラフが描ける

2時間半停めたら 500 円だとわかる

理系の人が研究とかしながらメモを取っていくときには便利かもしれないけど、一般人にはいまいちメリットがない気もする…。

Calca の残念なところ

  • 文章中の数字を計算してくれない
  • 計算するときにいちいち式の後ろに => を入力しないといけない
  • デザインがいまいち

文章中に混ぜた数字を賢く計算してくれない

式は式として書かねばならず、文章中に数字を混ぜとくと自動的に計算してくれるような機能はない。

計算するときにいちいち式の後ろに => を入力しないといけない。

これも少しの手間だがわりあい面倒くさい。しかしおかげで計算結果が文章中に表示されるので、コピペで計算内容をほかの場所にコピーするときには便利。

デザインがいまいち

Calca は技術者向けなためか装飾が最低限だった。ソフトは使ったときの心地よさとか自分との相性が大事だと思う。 Soulver の方が心地よく感じられる。

結論

Calca は高機能だけど、理科系で研究とかをやってて複雑な数式を入力する機会がある人以外には用途が少ない気がする。またぶっちゃけるとプログラム書くみたいな感じで計算やるんだったら、 Ruby で irb 起動してやるのでも十分だったりする。プログラマーが好きそうで実はプログラマーだったらコード書いて計算させてしまって利用する機会がなかったりとかそんな感じ。

というわけで僕は毎月 Soulver で金の支払いの計算とかをしています。おすすめです。

おまけ

Mac の話ではなくて申し訳ないのですが、便利な使い方としては、 iPhone 版の Soulver をインストールしておくと回転寿司に行ったときの計算が劇的に楽です。こんな感じ。

Soulver for iPhone in 回転寿司

| @散財

Netatmo Weather Station

Netatmo Weather Station

皆さん、部屋に温度計とか湿度計置いてますか。僕は置いてます。

置いてない人は温度とか湿度気になりませんか? 僕は気になります。エアコンとか何度くらいになったらつければよいのだろうとか思いませんか? 自分は何度になったら快適だと感じるのだろうなどなど。

僕は Netatmo の Weather Station というのを買って設置してるのですけど、こいつを導入して以来、いろんな情報が確認できるようになって楽しい毎日を送っています。今日はこの製品の使い心地を紹介します。

自分で気温を計測したいと思った

もともと僕は現在の気温を調べるのが好きで、気象庁が観測したデータをインターネットで公開しているアメダスのページをよく見ていました。こいつは一時間おきに更新されます。仕事していて一息つくときとかにアメダスで現在気温を見て顔をほころばせていました。また朝起きて寒いと、今日は寒いなぁと思ってその日の最低気温をアメダスで確認して「今シーズン最低気温更新ktkr」とかやってました。

毎日毎日アクセスして気温の変化を見ていたアメダスですが、だんだん物足りないと感じるようになり、いつしか自分で気温を計測してみたい、と思うようになったのでした。

アメダスでは何がダメなの?

アメダスは便利なのですが、スマートフォンでサイトが見にくいという欠点がありました。また計測値に関しても、アメダスで計測されている地点の気温と自宅周辺の気温に結構開きがあるのではないかと疑問に思い始めたのです。天神で電車に乗って、自宅最寄り駅に着いて電車降りると体感的にいくらか気温が低いのではないかと思うことがしばしばありました。また逆に、家の周りが寒いので厚着して仕事に行ったら天神は暑い、ということもありました。

室内の温度や湿度も測りたい

加えて、子どもが生まれたときに室温や湿度も気になるようになり始めました。赤ん坊は乾燥に弱いなどと聞き、加湿したりしていたものでした。ただ家に湿度計がなく、どのくらい加湿すればよいのか分からないまま闇雲に加湿していました。

このときの経験から、いつか室内の温度や湿度を測る器具を買いたいという思いを募らせるようになっていました。しかしなかなか良いものがなく、購入に至ることはありませんでした。

そんなとき、たまたま Amazon で「温度計」で検索していて、 Netatmo Weather Station というガジェットに出会ったのです。こいつなら外気温のほかに、室内の気温や二酸化炭素濃度も測れます。時系列で計測情報を折れ線グラフとして確認できます。便利。嫁さんに黙ってこっそり買いました。

Weather Station の優れているところ

Weather Station Web app

実は Netatmo Weather Station 、農業系の雑誌で取り上げられて農家の人たちに人気のようです。 Amazon のレビュー欄に農家の人の感想が載ってます。業務用にこの手のやつを買うとものすごく高いらしいのですが、 Weather Station は 1/10 以下の値段で同等の機能が手に入ってしまいます。しかもモバイルアプリがあったりアラート機能があったりする。下手な業務用観測機よりも高機能かもしれません。

計測対象

  • 室内
    • 気温
      • 現在気温
      • 最高気温
      • 最低気温

    • 湿度
    • 気圧
    • 騒音
    • 二酸化炭素濃度
  • 屋外
    • 気温
      • 現在気温
      • 最高気温
      • 最低気温

    • 湿度
    • 気圧

小さな機械ですがいろんなものが計測できます。台風が来てるときには気圧が変化するし、ファンヒーターをつけると二酸化炭素濃度が上昇して iPhone にプッシュ通知来て面白いです。長期間外出してるときに騒音に変化があったら泥棒か何かが家に入っているということだし、留守中の自宅の様子を遠隔監視する気分も味わえます。

もっともこの手の家の様子を確認したい系では Netatmo は Welcome という定点観測カメラみたいなやつを出しています。こいつは顔認識機能が付いているので、鍵っ子の子どもが無事帰宅したかどうかだとか、ベビーシッターが子どもを虐待していないかだとか、不在中に登録してない顔の人物がカメラに写ったら知らせる機能とかがあるっぽいので、防犯とかに興味がある人はそっちを見てみると良いでしょう。

iPhone アプリ

Weather Station iPhone app

最近デザインが一新された iPhone アプリがまた良くて、屋外の気温が指定した温度以下に下がったときや、室内の気温が指定した温度以上に上がったとき、室内の CO2 濃度が上昇したときにプッシュ通知を受け取ることができます。

寒冷地では気温が低下すると水道管が凍り付いてしまうので、夜寝る前に水をちょろちょろ出しながら寝たりすることがあります(実家がそうでした)。 Weather Station で外気温を計測していれば、寒い日にはプッシュ通知で教えてもらえて、水道を流し忘れたばかりに水道管を破裂させてしまう、という事故を防ぐことができます。

また夏場など、エアコンを我慢していて気がつかないうちに自宅で熱中症になってしまう、ということもあるかと思います。室温が 30°C 以上になったときにプッシュ通知が来ることで、観念して冷房を適切に利用することができます。

CO2 濃度に関しても、石油ストーブを使うときは換気が必要だと分かってはいても、窓を開けると寒いのでなかなかこまめに換気したりはしないものです。しかし 2000ppm を越えたときに警告のプッシュ通知が来るとちゃんと窓を開けて換気しようという気にさせられます。実際に換気を行うと頭がもやもやしていたのが解消されますし、換気の効果を実感できるようになります。

このように、ただ気温を計測するだけでなく、値を監視して警告をしてくれるのが iPhone アプリのすばらしいところです。

  • 様々な条件でプッシュ通知 しきい値はカスタマイズできる。
    • 屋外気温低下
    • 室内気温上昇
    • CO2濃度上昇

  • 即時測定ボタン 室内ステーションに搭載されている即時測定ボタンを押すと、 iPhone アプリにプッシュ通知が来て 10 分ごとの計測サイクルを待たずに今すぐ情報を確認することができます。

東京に出張しているときに子どもがこのボタンを押すと、 1000km くらい離れているのに息づかいを感じられて良さがあります。 Yo みたいな感じ。

過去データを CSV ダウンロードできる

CSV で過去のデータをダウンロードすることができます。データをパソコンに保存して、長期間のデータを貯めて過去と比較したりといった用途にも使えます。先述の通り、農家の人なんかには有用な機能ではないでしょうか。

API

自分で API を叩いてサーバーから情報を取得することもできます。せっかくなので Ruby で API クライアントを作ってみました。

こんな感じで使えます。

GIF動画

類似品もたくさん

Netatmo Weather Station と IRKit を組み合わせると、設定した温度以下になったら勝手にエアコンのスイッチ入れたりとかできそうと夢想していたら、 Weather Station に似た別の製品で Nest という温度計があることを知りました。 Nest は気温の計測とエアコンのコントロールを一台でやってのけるそうです。しかも人工知能が備わっていて、住人の生活時間帯を学習して朝 7 時頃エアコン付けたり、人気がなくなったら勝手にエアコンや照明を消したりするらしい。こういう製品が普及したら、 SNS に「エアコンや電気を消し忘れて寝てしまった僕かわいいでしょ、てへ」みたいな投稿をしている独身男性を黙らせることができます。すばらしいですね。

IoT おもしろい

IoT とかニュースで見たり読んだりしても「ふぅ〜ん」くらいにしか思っていませんでしたが、実際に自分の生活内に導入してみると便利で楽しいです。僕個人の場合、冬は室温が 22°C を下回ると寒いと感じて暖房をつけたいと思うようだということがわかりましたし、また夏に関しては気温が高くても湿度が低ければエアコンをつけなくてもしのぎやすいという良く言われることが自分で計測した数字により裏付けされました。だから何? と言われると困るのですが、僕は非常に満足していますし、職場の上司におすすめしたところ、 Slack でアニメキャラクターに気温をしゃべらせたりしてました

というわけでおもしろいので良かったらお年玉で Netatmo Weather Station 買ってみてください。


この記事は今年買ったもの Advent Calendar 2015 19 日目の記事ですが 9 日遅れで書いています。遅れてすみませんでした。

| @技術/プログラミング

昨日飲みに行って今朝起きてからふとコード書きたくなって、アドベントカレンダーもあることだし(去年の Adventar で自分のブログだけ og:image がなくて画像が出てなくて残念だった)、このブログを Open Graph protocol に対応させることにした。

Twitter Card の Lokka Plugin を前作ってたのでそれを改造した。

Ruby 2.1.0 以降で使える Module#refine 使いまくったけど安全にモンキーパッチできて便利。

module AddImagesToEntry
  refine Entry do
    def images
      self.body.scan(/https?:\/\/[\w\/:%#\$&\?\(\)~\.=\+\-]+?\.(?:png|jpe?g|gif)/)
    end
  end
end

refine するときのモジュール名、 ActiveRecord のマイグレーションのクラス名みたいで面白い。

| @ブログ

一時期に比べたら Lokka 使ってる人減ってて、 Jekyll/Octopress ブームのあとは Go lang 製のスタティックサイトジェネレーターかはてなブログに移っていってしまった。自分は自分で使うツールを自分でいじるのが好きなので Lokka 使い続けていきたい。ということでいろいろやった。

最近やったこと

テスト通るようにした

Lokka の master ブランチ、しばらくコミットされてなくて Travis CI のビルド 1 年半くらい走ってなかった。久々に Pull Request 出したらビルド成功しなかったので通るようにした。 Travis がコンテナベースの環境から Docker ベースに移行したぽくて、その影響で PostgreSQL がらみで bundle install がこけるようになってた。なのでテキトーに addon を追加しといた。

同じコミットでもうメンテナンスが終了している Ruby 1.9 系の CI をやめるようにした。

Ruby 2.2 に対応させた

json 1.5.5 は Ruby 2.2 系では install に失敗するようなのでいろいろ bundle update した。 ActiveSupport も 3.1 ではエラーが出てしまうので bundle udpate して 3.2 の edge にした。

XSS 直した

コメントで教えてもらったので直した。

ただ実はまだ完全には直せてないので近日中に直したいのだけどテンプレートをレンダリングする仕組みをまるっと変えないと直らなそうなので結構きびしい…。

これからやりたいこと

フロントエンドよくしたい

具体的にはプラグインに同梱された CSS や JavaScript とテーマのやつをくっつけて配信したい。 Asset Pipeline 的な。

高速化

なんか遅い。このブログのトップページのレスポンス返すのに 1 秒くらいかかってるの改善したい。 DB にインデックス張るのとクエリのチューニングかな。

ActiveRecord 化

Fjord の皆さんで開発が続けられていたけど停滞しているっぽい。 DataMapper 、耐えられないほど不便なわけでもないし ActiveRecord にない便利な機能もあるのだけど、 N+1 起こらないという触れ込みなのに N+1 起こったり、ちょっと込み入ったクエリを投げたいと思ったときにやり方がわからないもしくは出来ないということがあるので、 Ruby エンジニアの皆さんが日常的に使ってる ActiveRecord を使うようにするのが良いだろうと思った。そもそもあまりメンテもされてないし、 DataMapper に引きずられて Lokka が停滞するのも残念だし。高速化のためにも ActiveRecord 化有効そう。


最近「仕事外でコードを書かないエンジニアは人間のクズだ」、「いやクズはそっちだ、エンジニアの業務時間外の学習に依存する会社こそ真のクソ」みたいな議論多いけど、自分で使うツールのメンテナンスくらいやらないと本当にプログラマー廃業しないといけない気がするし、自分がプログラミングに触れたの自体 P_BLOG の改造がきっかけだったので、プライベートを犠牲にして歯を食いしばりながら取り組んでいきたい。