保育園の送迎を助けるLine Bot

ex-Kayacアドベントカレンダーの5日目です。
​​昨日の投稿は堤修一さんの技術書の著者になるためにやったことでした。

近況

​​本題に入る前に、近況を
​​2011年にカヤックに新卒で入社。Flasherとして入社するはずがiPhoneFlash非搭載事件があったので、何も出来ない子として入社。先輩と2人でUnityを始める。その後、展示、IoT、ミュージックビデオなど色々やらせてもらいました。 →カヤックで作ってたもの

​​2014年にフリーランスとして独立 & dot by dot inc.に所属 →dot by dotで作ってるもの
​​​​今年2018年9月にドイツ、ベルリンへ移住しました。フリーランス & dot by dot継続中です。

asus4.hatenablog.com

引っ越してまだ2ヶ月ちょい。やっとビザが出て生活できるようになってきたばかりです。ドイツでの苦労話はおいおい聞いてください。今日はこの話を書きます↓ ​​

​​保育園送迎を助けるLine Bot

モチベーション

我が家は私がフリーランス、妻が正社員(デザイナー)、子供1歳です。世田谷区の保活は大変でしたが、期間限定で入れてくれるところが見つかり、4月から共働き復帰しました。

フリーランスの私のほうが時間に自由が効くため、保育園の送迎は基本的に
朝:妻
夕:私
でした。保育園送迎を初めてから気づいたのですが、送迎のママ・パパは自転車が主な交通手段です。都内では車での送迎が禁止のところも多く、満員電車に子供は載せられない。毎日タクシーを使うわけにもいかない。必然的に自転車になるのです。

普段の我が家のスケジュールはこんな感じでした↓

f:id:asus4:20181206104223p:plain

割とうまく回っている気がします。子供が生まれる前はかなり長時間働いていたので、超集中して働く様になりました。
ところが、自転車にとっての一番の弱点が降るとスケジュールが狂います。

雨のときのスケジュール

f:id:asus4:20181206104304p:plain
​​ 朝はいつもより早く出ないと、ただでさえ短い勤務時間が更に減るし。
午後から雨が降っても、一日中モニターに向かっていると気づかず、いざ自転車で迎えに行こうと外に出ると、雨。仕方なくタクシーで迎えに行ったこともありました。

これはミスがでるな…と。
なんとかミスを減らそうとしました。

初号機:IFTTTで雨を教える

Slackを始めプログラマーフレンドリーなツールは沢山ありますが、妻はSlackを使っていなかった、できるだけ普段からよく見るツールにしたいと思いLineに通知が飛ぶようにしました。
そんなに開発工数をかけてもしょうが無いので、最速でつくれるものから始めました。

IFTTTで雨を天気予報を教えるだけです。

IFTTTは色々な条件をトリガーに色々なサービスを動かせるものです。

実装工数10分

f:id:asus4:20181206111049j:plain

ちなみに会社からかえるときにラインするは、GPSで私の位置をトラッキングして、オフィス周辺2kmから出ると「今から帰ります」と妻にラインするボットです。仕事に集中するとお迎えを忘れる危惧が合ったので、無事に迎えに言ったことを自動で妻に通知する様にしました。(やり過ぎた自動化)ちなみにこのアプレットは時間を指定できなかったので、昼間に打ち合わせで電車に乗ったときにも発動するバグがありました。

改訂版: IFTTT + AWS Lamdaで自分の条件にあった完璧な通知をする

​​ 運用してみて、土日も雨の予報が飛ぶし、当日の朝に雨が無いときも。​​結構通知がうざいなと。通知の自動化あるあるではないでしょうか…。
慣れというのは怖いもので、多すぎる通知を勝手に無視してしまうようになりました。

そのため、大事な通知だけ送るように、Lineへの通知をカスタマイズしました。
普段の仕事の延長で考えるとRaspberryPiなどでやるところですが、勉強を兼ねてAWS Lambdaでつくりました。

作った機能

  • 朝 6:00 :その日の夕方に雨が振りそうなら、予めバスで通勤するようにお知らせ
    • 雨の強さをお知らせ
    • 平日のみ通知
  • 夕方 16:30: 雨が降っていたら、自転車で帰れないから、早めにバスに乗った方がいいとお知らせ
    • 雨の強さをお知らせ
    • 平日のみ通知
  • GPSでオフィス(渋谷)から離れると実行。
    • 平日かつ、お迎えの時間(夕方)のみ通知
    • 打ち合わせの移動、昼間の移動はフィルタリング
    • ついでに保育園の入り口のロック番号を4桁を通知(4桁も覚えられない…)

使ったAPI・ライブラリ

最終的にこんな感じになりました。

https://cdn-ak.f.st-hatena.com/images/fotolife/b/blog-media/20180905/20180905164141.png

おかげなのか、せっかく作ったから意地なのか、(忙しいときは変わってもらったことも合ったけど)、保育園のお迎えは一度も遅れずいけました!

調教なしで歌声合成できるSinsyを試してみた

ボーカロイドに似ているけど調教なしでもいい感じの歌を生成できる技術Sinsyを試してみました。マルコフ連鎖 - HMM 方式らしいです。(あまり詳しい事は書けない)
こちらのサイトで、MusicXML形式ファイルをアップロードすると、サーバーで音声にして返してきれくれます。 Sinsy - HMM-based Singing Voice Synthesis System

ニコニコ動画で探すとサンプル音源が見つかります。楽器とミックスするとかなり違和感少ないし。以前仕事で、ボーカロイド x ボカリス調教を頑張っていた身からすると神のような技術。
dic.nicovideo.jp

また、CeVIOというSinsyエンジンを元にしたエディターも発売されています。ちょっと触ったけど使いやすい。
SinsyはMusicXMLという楽譜が読めなきゃつらいフォーマットですが、こちらは、ピアノロールで作れます。
CeVIO Official Web

一応、音大卒プログラマーとして久しぶりに楽譜を編集してSinsyを触ってみました。五線譜 久しぶりすぎて大変だった。

MusicXML方式については、MuseScoreが使いやすかったです。
無料で使える楽譜作成ソフト | MuseScore

SourceForgeで公開しているライブラリは2015年で止まっていますが、DNN版を開発していて、Web版では新しい実装が用意されているそう。 勉強のために、macOS用のXcodeプロジェクトにしてみました。依存関係整理するだけで動きました。よいライブラリ。 github.com

ベルリンに引っ越しました。

ベルリンへ引っ越してきて一ヶ月と少し経ちました。

直接会った方には話したものの、報告出来ていなかったのですが、先日やっと3年間のフリーランスビザが出たので報告です。

9月から一家3人、私、妻、息子(1歳)でベルリンに引っ越してきました。一ヶ月くらいドタバタでしたが、やっと生活のサイクルが出来てきてほっとしております。これからやってくる寒い冬と長い夜にめげなければ、しばらくベルリンで生活をしてみようと思います。

なぜ海外に?

理由はいくつかありますが、

フリーランスは転職出来ない

2014年に面白法人カヤックから独立してフリーランスになり、4年目に突入しました。最初の年は生きていくのに精一杯だったのですが、4年も経つと慣れてきて、流れがわかってくる。もちろんプロジェクトの度に日々成長はあるものの。最初の年に比べ鈍化を感じました。あー次の目標を立てて自分にストレスをかけようと。会社員の場合は、転職がこれに値するかもしれません。フリーランスの場合はもう転職出来ないので…どうしようか?と考えたときに海外に行こうと。

また、元カヤックの@shu223さんを始め、海外で活躍する人が身近にいて情報を発信してくれていて。海外で働くことに関して、漠然としていたものから、現実的なビジョンを持てるようになったことも大きいと思います。

地方に移住との比較

日本では東京都世田谷区に住んでいました。
妻のブログにあるように、保育園に入れず、保育園の空きがある地方への移住オプションを検討。でも地方に移住してフルリモートワークにするなら、もっと遠くでも良いのでは。と考えました。

dual.nikkei.co.jp

補足としては、ベルリンは移民が増え、東京と同じような保育園事情です。現在こちらでベビーシッター+保育園探しをしています。


他の理由は飲み会のときにでも聞いてください。

なぜベルリンに?

プログラマーは海外勤務の転職のオファーももらうと思います。私は仕事の内容に惹かれるものがなく。いくら海外で挑戦したいと言っても、面白くない仕事をしてまで行きたくはありませんでした。今のフリーランスとしての仕事も素敵なものが多かったので。同じように働ける場所を考えました。 ベルリンは、他の都市にくらべ、フリーランス・特にアーティストのビザが出やすいようです。
(最近は移民が増え、以前よりは厳しくなったらしいです)

  • 同じ業種の仕事がある

元々、音大卒→美大大学院卒→プログラマーという経歴です。アートやデザインに近いインタラクティブデザインをしています。狭いジャンルの仕事なので、同じ業種で世界規模で活動しているチームが多いということも重要でした。

Rhizomatiks真鍋大度さんの公表している「List of interactive design companies/studios」は参考になりました。 docs.google.com

  • 生活費が現在と同水準でいける

当面は日本のリモートワークもやりつつ、現地での仕事も探そうとしています。そう考えると、日本の倍以上稼がなくては行けない場所ではリスクが高く、同程度の生活費でいける場所が良いと思いました。
以下は70㎡あたりの家賃のマップです。東京都心部と同水準でしょうか。ニューヨーク、パリ、ロンドンなどに比べると安いです。実際、ベルリンでは世田谷区の家より少し安い位の家に住んでいます。

https://www.immobilienscout24.de/content/dam/is24/ibw/dokumente/mietmap-berlin-2017.jpg Miet-Map Berlin - Der Mietpreisfahrplan für die Hauptstadt

dot by dot in Berlin

フリーランスであると同時に、クリエイティブチーム dot by dot inc.の一員でもあります。

dot by dot inc.

数人からdot辞めるの?と質問をもらいましたが辞めません。dot by dotもすでに2人が大阪からのリモート。 またニューヨークを拠点とするPARTY NEW YORKとのアライアンスパートナーで、同じSlack上でニューヨークとつながったりして。リモートワークに慣れていることも後押ししてくれました。実際、代表の富永さんに相談したときも即答で良いねと返事をもらいました。

おわりに

子連れで海外なんてすごい勇気だなー。ともコメントもらいましたが、妻と子供が楽しく生活できること優先で、駄目だったら帰ってこようと思います。失敗したときにちゃんとリカバリーできるようにしておけば、ある程度のリスクは許容できるかなと。WEBでの海外移住情報は、失敗体験が書かれることが少ないので。駄目だったらその時のこともブログに書こうと思います。

この移住にあたり、私の周りの人達はみんな応援してくれて。今年は本当に多くの人に頼って助けてもらってきました。ありがとうございました。

今後、私も何かしら助けられることがあれば、やっていきたいなという気持ちです。

Google Chromeのハードウェア連携機能

IoT(もう古いかな)のような仕事をしていると、たまにWindows7でしか動かないドライバなどを頂いたりします。良いものを作る時にクリエイターが実機でトライアンドエラーを繰り返す回数が重要だと思っていて。私の周辺のデザイナー/音楽家はまだまだmacOS率高いです。かといって専用アプリをmacOS/Windows両方開発するのはコストがかかります。最近だとElectronで作ることも増えてきましたね。

そんなときの一つの選択肢として使えるのが、Google Chrome。最近のChromeはハードウェア連携機能が増えていて、ネイティブアプリを作る必要が減っています。Chromeでも使える選択肢をまとめてみました。

Web Bluetooth API

BLE開発をしていると皆一度は悩む、非同期APIの多さ。iOSのCoreBluetoothなんかは古いAPI設計なっていて、ライブラリなしに使おうとするとコールバック関数 地獄になること請け合いです。
httpsが必須になりますが、BLEが普通のWebサイトから使えるようです。 JavaScript版では、すべてPromiseを返すようになっていて、CoreBluetoothと比べると驚くほどシンプルなコードになります。まだ安定性と言う面ではCoreBluetoothに軍配が上がりますが。プロトタイプ開発ではChromeでささっとBLE接続できたりします。

https://i.gyazo.com/143872ec3ad93b319ad7a5a3bd4a5717.png Can I use... Support tables for HTML5, CSS3, etc

ics.media

chrome://flagsからBLE Advertising in Chrome Appsの設定で、アドバタイズもできるようになるみたい。未検証。

Web MIDI API

MIDIコントローラーがwebに繋がります。Webアプリを作る時にコントローラーを足したい。や、WebでVJがしたい!ってときに便利。

https://i.gyazo.com/db7047aaf76950307d6291c01a818806.png
Can I use... Support tables for HTML5, CSS3, etc

html5experts.jp

WebUSB API

USB機器のドライバーも作れます。専用のドライバをダウンロードすること無く、機器とつなげます。
ICカードリーダー連携。USBメモリの中身をみる。などなど様々なことができるようです。
これについては私自身まだ使ったことはありませんが。。

Webカメラなどと同じアラート一つで、USB連携できちゃうの結構怖いですね。

https://i.gyazo.com/d5f4534ed9a20b02a1c05c709d7aed92.png
Can I use... Support tables for HTML5, CSS3, etc

speakerdeck.com

Serial Extension

Chrome extensionが必要になりますが、シリアルポート接続ができます。シリアルポート接続が必要なデバイスもよくよくでて来るのですが。専用アプリを作らず、Chrome extensionを入れるだけで(あとドライバ)使えるようになるのはうれしいですね。

kimizuka.hatenablog.com


以上です。調べてみると、普段使っているハードウェア連携機能の多くがChromeでもできますね、これ。 今後、開発用のデバッグアプリは、Webで作ることが増えそうです。

OpenCV 3.4.0 with contrib ビルドのメモ。(Windows編)

ビルド済みの普通のOpenCVpythonでも使いたい!って場合は、Anacondaで神のサイトからwflをダウンロードが時短できておすすめ。

私の用にOpenCV自前ビルドやりたくないけど、、CUDA入りdll作りたいしって人達の参考になれば。

ツールのダウンロード

以下の環境でビルド
- Windows 10 - GPU GTX 1070 - Visual Studio 2015 - CUDA v9.1 - CMake 3.9.6


Visual Studio 2015
一番最近の2017パッチはまだ対応していないという情報があったので、一応Visual Studio 2015 Communityでビルド。 CMake-GUIで以下のエラーが出た場合は、c++環境がセットアップされていないので、

    The CXX compiler identification is unknown
    The C compiler identification is unknown

Qiitaを参考にc++ツールをダウンロード


CUDA
CUDAをインストールする。最新版v9.1で試す


CMake
CMakeをダウンロード 最新3.9.6を使った


OpenCV
OpenCV 3.4.0 OpenCV contlib 3.4.0アーカイブをダウンロードして展開する


CMake GUI設定

CMake-GUIを起動。Visual Studio 2015 64bitを選ぶ。 デフォルトのオプションから変更必要な部分。

  1. Where is the source codeOpenCV本体のフォルダを指定
  2. Where to build the binariesに書き出しフォルダ、build (何でもいい)を指定する
  3. OPENCV_EXTRA_MODULES_PATHにcontrib/modulesのパスを指定
  4. CUDA_TOOLKIT_ROOT_DIRのパスが設定されているか確認。NOT-FOUNDになってたりする。 私の環境はこちらC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.1
  5. CUDA_ARCH_BINは、使うものだけにするとビルドが早くなる。CUDAのビルドはすっごい時間かかるので他の環境で使わない場合は、使うものだけを設定するのが良いかと。自分の使っているGPUアーキテクチャこちらで確認できる(リンク見るためにはNVIDIAログイン必要). GTX1070, GTX1080なら、6.1だけでいい。
  6. 多分以下のようなエラーがでるので。StackOverFlowを参考にCUDA_HOST_COMPILERを設定しなおす。簡単に言うとcl.exeのパスを設定する。 CMake Error at cuda_compile_generated_gpu_mat.cu.obj.cmake:206 (message): D:------/core/CMakeFiles/cuda_compile.dir/src/cuda/Debug/cuda_compile_generated_gpu_mat.cu.obj 設定するパスは私の場合はこちら C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/cl.exe CUDA関連設定
  7. tuple errorが出るので、(参考) BUILD_PREF_TEST : OFF にした
  8. Open Projectボタン → Visual Studio 開く→INSTALLを実行 →結構待つ

これで恐らくビルドできるので、インストールしたファイルを使いやすいところにコピーして、環境変数設定をする。今回はC:\Program Files\OpenCV\3.4.0 にインストールした。 (キャプチャは3.3.1だけど)

ちなみに、opencv_worldをビルドすると、すべてのdllが一つにまとまって楽だけど、ビルドが数時間かかるって、エラーでたときの辛さが増すので、小分けにするのがおすすめかも。


Visual Studioでの設定

OpenCVVisual Studio Projectでリンクする方法はこちらを参考Additional Include Directories, Additional Library Directories を設定する。

include folder linker directory