音声日記 2018-02-25

Googleドキュメントによる音声入力のできが大変良いので、これを使って日記を書いてみる。

OpenSiv3Dの最新版に物理エンジンの機能がついて、30行程度で動物タワーバトルが書けるようになった。インパクトが強い引きの強い機能は必要だとつくづく感じる。0.2.4でスクリプト機能が入るらしいが、どれくらいのものが入るのか気になっている。やはりAngelScriptを使うの.だろうか。SketchWaltzもそろそろ再開したいがやることの多さと着地点(どこまでやるの?何も目標とするの?)がいまいち見つからずやる気がでない。VisualStudioの練習だと思えばアリなのだろうか。

自分が過去に作っていてそこそこ上手くいった思えるものは、1番のお客さんが自分というパターンが多かった(MilkodeもFireLinkもHonyomiも結局自分が欲しかった)。SketchWaltzにもドックフーディングする対象が必要なのだと思う(作りたいゲームがある、とか)。

他にやりたいこととしてはFirefox QuantumのためにFireLinkを移植したい。0から作ると大変そうなのでFormat Linkにコピー用のキーボードショートカット機能を付けて改造してみるのはどうだろうか?(受け入れてもらえたらPRも出す)

minttyからWSLを使う方法があるのを見つけた。そのうちやりたい。

Cookpad TechConf 2018 の感想(速記)

https://techconf.cookpad.com/2018/
配信: https://youtu.be/r8qGpKEFveQ

進行がAmazon Pollyだった。時折人間だともう少し聞き取りやすいかなというときがあったが全般としては問題なかった。TechConfならこれで十分かもしれない。繰り返す使うようなケースならさらに便利になりそう。

※ スライドリンクを見つけきれなかったので見つけた方は教えてください

毎日の料理を楽しみにする挑戦をし続けた20年

「毎日の料理を楽しみにする会社」というビジョンは何年たっても解決しがいのあるよいビジョンだと思った。そこから分割されたテックカンパニーとしてのビジョン(目標?)

  • 料理が楽しくなる
  • ユーザーの生活の役に立つ
  • 今の技術を活かせる

もよい。

2017年は海外展開を強化していたらしく

  • 日本: 5665万人 (レシピ283万品)
  • 海外: 3429万人 (レシピ119万品)

最近の新サービスを立ち上げるときの手法としてSprint本を使っている。

SPRINT 最速仕事術――あらゆる仕事がうまくいく最も合理的な方法

SPRINT 最速仕事術――あらゆる仕事がうまくいく最も合理的な方法

クックパッドの “体系的” サービス開発

http://techlife.cookpad.com/entry/2018/02/10/150709

BMLループ(Build Measure Learn)は前から順番にやろうとしてはいけない。むしろ最初にサイクル全体を設計するべき。

Report.mdという分析結果のドキュメントをPRにあげてレビュープロセスをとおす仕組みが素晴らしいと思った。個人でもコードレビューと同じくらいドキュメントやコメントのレビューは効果的だと感じるときがある(参加できる人数が多いという意味ではコードレビューよりも効果が高いかもしれない)ので、重要なドキュメントは積極的にレビューを通すべきかもしれない。

Report.mdは他の発表でも言及されていた。TechConf全体を通して繰り返し語られていることが多く社内で技術基盤が本当に共有されていることがよくわかる。

クックパッドクリエイティブワークフロー

https://speakerdeck.com/1020tomoya/cookpad-creative-workflow

デザイナ視点でのサービス開発の話はなかなか聞けないので楽しかった。セッションのおかげでクックパッドの基本的なサービス開発の規模感をかなり想像することができた。

  • 全体で140名
  • 投稿(A,B) 検索(A,B) きろく(A) 有料会員(A,B,C) のようなチームに分かれる
  • アプリ開発は基本的に 2week~1month
  • 目的と仮説を明確にする
  • GitHub issueでアイデア発散
  • GitHub issueによるデザインレビュー
  • 指標・ログの設計もチーム全員で
  • 数値は全員がすぐ見える場所に(発表者の方のチームではredashを使っているらしい)

分析ツールのセットアップはチーム内のだれが行うのか?というのを聞きたかったがお話する機会が持てなかった。残念。

What/How to design test automation for mobile

SPLITという手法が紹介されていた。テストを書くときに問題を分割しながらよく考える。

  • Scope: What is your test target?
  • Phase: What phase would you like to automate?
  • Level: How deep do you dive to automation would?
  • sIze: What size to you test?
  • Type: What type do you test?

Rubyの会社でRustを書くということ

楽しみにしていたセッション。実験的に一部でRustを使い始めたのかな?と思ったら、ライブラリ層はオープンソースで公開しながら、プッシュ通知の配信基盤をがっつり差し替えてて(かつ高速化されてて)びびった。

複数のクエリをマルチスレッドで受け取りながら定期的に1つのクエリにまとめてDBに問い合わせることで高速化をはかっているらしい。

Rustでマルチスレッドプログラミングを書くとデータ競合が起きた箇所にコンパイルエラーを出してくれるので、安心して書けるようになる(C++でよくある「念のためlock」が不要になるらしい、いいなー)。

これは他の言語ではできない大きなメリットだと感じた。(これからRustを他の人にすすめるときに使っていこう)

cookpad storeTV 〜クックパッド初のハードウェア開発〜

スーパーに置いて料理動画を配信することでお客さんを集め、素材となる商品を売ったり広告を配信するらしい。

カメラを使って顔認識(個人情報は除外して数だけを記録)することで広告中に何人の人が見ているか検出して広告効果を測定する、という仕組みが興味深かった。

Lifestyle Product Award授賞式

  • 優秀賞: ごくり
    • ものを飲み込む能力を測定するデバイスが30万円ゲット

Challenges for Global Service from a Perspective of SRE

https://speakerdeck.com/takanabe/challenges-for-global-service-from-a-perspective-of-sre

グローバルサービスを展開すると色々起きる。例えば特定の国だけユーザー体験が悪かったり(CDNのFastlyを導入することで解決)。盛り上がるイベントが国によって全然違ったり。デプロイのオペレーションコストが高くなったり。

toilという言葉を知ることができた。以下のような条件を満たすものらしい。

  • 手動で対応している
  • 自動化の余地がある
  • 繰り返し発生する
  • 発生してからじゃないと対応できない
  • サービスの改善につながらない
  • サービスやユーザーの数に応じて増加

例えば社内サービスのユーザーアカウントの追加など。これはどこの組織でも発生するものなので見つけたときはtoilと言おう。

動き出したクックパッドのCtoCビジネス

https://twitter.com/1amageek/status/962349374239006721

Komerco という料理用の器などを売り買いするプラットフォームが発表されていた。春にリリース予定。

サーバーにfirebaseを使うことで開発チームはServerlessに。swift用のfirebaseライブラリやfirebaseの日本コミュニティを運営しながら進めている。

ライブラリ層を公開しながら開発していくスタイルは社内で大分一般的になっているのだな、と感じた。

Solve "unsolved" image recognition problems in service applications

https://speakerdeck.com/diracdiego/20180210-cookpad-techconf2018-yoheikikuta

料理にっきというサービスでスマホ内の画像から料理と非料理を自動で判定したり、料理画像からカテゴリ(肉料理、やきそば、など)の分析を機械学習で行なっている。

特にカテゴリの判定は難しく、誤判定しやすいカテゴリを見極めるための独自のアルゴリズムを考案し論文も発表。

上記アルゴリズムによって例えばやきそばビーフンは誤判定しやすいことが分かったため、分けずにまとめた。

これから機械学習でホットになりそうな分野として、モバイル側での実行や動画の解析が挙げられる。

特にモバイル側でモデルが実行できるようになると、非料理と判定された画像はいちいちサーバー側にアップしなくていいようになり、帯域的にもセキュリティ的にも安心感が増すのでより使われるようになりそう。

自前の学習結果を簡単にモバイルの画像判定に使えるようなアプリが出たら楽しそうだなぁ。

Beyond the Boundaries

全体を通してエンジニアが重要視されている会社だと感じた。休憩や懇親会でクックパッドのエンジニアの方と話すとやる気に溢れていて楽しくやってそう(競争も激しそう)。

クックパッドが取り組んでいる技術セットは2018に何を学ぶべきかの指針になりそうだった。

  • Rails
  • golang
  • Rust
  • Swift
  • Kotlin
  • React Native (プロトタイピングに使っているらしい)
  • Firebase

下はサーバー周り。

  • AWS ECS
  • docker
  • Hako

ハッカソンはシンプルに羨ましい。食と料理にまつわる社会課題マップは後でじっくり見てみよう。

http://cookpad.01booster.com/images/map.pdf

LT, 懇親会

クックパッド柄の寿司が美味かった。

ゲストの方とお話。機械学習のこと色々教えてもらって勉強になった。一度投げ出してしまった「ゼロから作るDeep Learning」はいつか読み返したい。でも最近「仕事ではじめる機械学習」を買ってしまったばかりなのでまずはこちらから、、。Kerasチュートリアルも日本語化されててよいらしい。

LTで海外事業の話をされていた @yuseinishiyama さんとお話。英語学習は色々やって全体を底上げした方がよい。アウトプットが足りないパターンが多いので例えばDMM英会話すると何のボキャブラリーが足りないか分かるので他の勉強も効率的になる。海外に行くとそれでもネイティブには通じないことがあるのでさらにレベルアップするとのこと。海外で働きたいエンジニアを絶賛募集中。

LTでAmazon Echoクックパッド対応をの話をされていた @y_am_a_da さんとお話。音声と料理の相性はいいだろうな、と思っていたが入力はさておき出力が大変(声だけでレシピを伝えるのを想像してほしい)だという話を聞いてそれはそうだな、と納得。料理は手を使わないといけないので本当はスマホを操作したくない。うまくいったら大きなブレークスルーだよなぁ。この前発表されてたIntelの眼鏡に投影するといいのかな。

まとめ

面白かった。Sprint本は買う。toilという言葉は便利。Rustでなんか作りたい。

Rroonga 7.1.1 がリリースされたので動作確認

インストール

$ gem install rroonga
Installing ri documentation for rroonga-7.1.1-x64-mingw32
Done installing documentation for rroonga after 6 seconds
1 gem installed

動作確認。Groonga::BINDINGS_VERSIONという定数を見るのがよさそうな予感。

$ ruby -r rroonga -e "p Groonga::BINDINGS_VERSION"
[7, 1, 1]

Milkodeも一通り動く、万歳!MLに報告して終了。

まとめ

まとめると以下の手順でMilkodeをWindows10 Ruby2.4でインストールすることができるようになる。eventmachineをあらかじめインストールしておく経緯はこちら

$ gem install eventmachine --platform=ruby
$ gem install milkode

MilkodeをWindows10 Ruby 2.4で動かす

groonga-devに質問メール送ったらすぐに対応してくれた。

[groonga-dev,04569]

RubyInstaller2からはPATH環境変数を使わずに独自でDLLを探すようになっているので、それに対応させないとGroongaのDLLを見つけられないんです。

なので、↑のgemに https://github.com/ranguba/rroonga/commit/5f37d5c0a9b28155b5d56a590243239097343c65

の変更を入れてみてください。

これでrequireできるようになるはずです。

そうなのかー、超勉強になった。

[groonga-dev,04570]

なるほど…!?

ありがとうございます! ビルドし直して更新しました。(今はWindows環境がないので試せませんが…)

やったー。

さっそくためす

$ gem install /c/Users/ongaeshi/Downloads/rroonga-7.0.3-x64-mingw32.gem
Successfully installed rroonga-7.0.3-x64-mingw32
Parsing documentation for rroonga-7.0.3-x64-mingw32
Installing ri documentation for rroonga-7.0.3-x64-mingw32
Done installing documentation for rroonga after 7 seconds
1 gem installed

インストールには成功。

$ ruby -r "rroonga" -e ""

エラーがでなくなった!

eventmachineでエラー

早速Milkodeをインストールして動かしてみた。しかしmilk webが動かない。

$ milk web
Unable to load the EventMachine C extension; To use the pure-ruby reactor, require 'em/pure_ruby'
Unable to load the EventMachine C extension; To use the pure-ruby reactor, require 'em/pure_ruby'
C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- 2.4/rubyeventmachine (LoadError)
        from C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/eventmachine-1.2.5-x64-mingw32/lib/rubyeventmachine.rb:2:in `<top (required)>'
        from C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:133:in `require'

どうもeventmachine gemの調子が悪いらしい?エラーメッセージをググってみる。

Note that Windows binaries are not available for Ruby 2.4 yet, in that case you'll need to compile yourself, which is easy with: gem install eventmachine --platform ruby

これっぽい。eventmachineを一度アンインストールしてplatform=ruby付けて再インストール。

$ gem uninstall -I eventmachine
.
.
$ gem install eventmachine --platform ruby
Temporarily enhancing PATH for MSYS/MINGW...
Building native extensions.  This could take a while...
Successfully installed eventmachine-1.2.5
Parsing documentation for eventmachine-1.2.5
Installing ri documentation for eventmachine-1.2.5
Done installing documentation for eventmachine after 8 seconds
1 gem installed

これでmilk webも動くようになった。

まとめ

まとめると以下の手順でMilkodeをWindows10 Ruby2.4でインストールすることができるようになる(予定)。

$ gem install eventmachine --platform=ruby
$ gem install milkode

ただしrroonga 7.0.3以降じゃないと駄目なのでリリースされるのをもう少し待ちましょう。(groonga-dev MLには連絡済み)

Rustをはじめる

無性に新しい言語を覚えたくなった。

インストール

インストール · プログラミング言語Rust

$ rustc --version
rustc 1.23.0 (766bd11c8 2018-01-01)

ローカルドキュメントを開く。

$ rustup doc

チュートリアル

The Rust Programming Language

日本語版もある。Second editionがおすすめみたい。

Hello, World!

Hello, World! - Hello, World! - The Rust Programming Language

fn main() {
    println!("Hello, World!");
    println!("こんにちは世界!");
}

Cargo便利。

他の人が作ったプロジェクトをビルド

Aaronepower/tokeiをビルドしてみる。

$ git clone https://github.com/Aaronepower/tokei.git
$ cd tokei
$ cargo build

Cargoのおかげで簡単。実行。

ongaeshi@DESKTOP-7M9KJ3L MSYS /c/Users/ongaeshi/Documents/rust-test/hello_carg                                  o
$ ../tokei/target/debug/tokei.exe
-------------------------------------------------------------------------------
 Language            Files        Lines         Code     Comments       Blanks
-------------------------------------------------------------------------------
 Rust                    1            4            4            0            0
 TOML                    1            6            5            0            1
-------------------------------------------------------------------------------
 Total                   2           10            9            0            1
-------------------------------------------------------------------------------

RrroongaがRubyInstaller 2.4で動かない問題を調査

rroonga 7.0.2 x64-mingw32

Downloadsからrubyinstaller-2.4.3-1-x64.exeをダウンロードしてインストール。msys2の開発キットもインストール済みなのでバイナリgemもインストール可能な状態。gem install nokogiriにも成功している。

$ ruby -v
ruby 2.4.3p205 (2017-12-14 revision 61247) [x64-mingw32]

rroongaのインストールには成功する。

$ gem install rroonga
$ gem list
rroonga (7.0.2 x64-mingw32)

しかし実行するとgroonga.soが見つからないといわれる。

$ ruby -r "rroonga" -e ""
C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- groonga.so (LoadError)
   from C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
   from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/rroonga-7.0.2-x64-mingw32/lib/groonga.rb:46:in `rescue in <top (required)>'
   from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/rroonga-7.0.2-x64-mingw32/lib/groonga.rb:42:in `<top (required)>'
   from C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
   from C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
   from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/rroonga-7.0.2-x64-mingw32/lib/rroonga.rb:16:in `<top (required)>'
   from C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:133:in `require'
   from C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:133:in `rescue in require'
   from C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:39:in `require'

lib以下を見ると2.4が存在しない。

$ ls /c/Ruby24-x64/lib/ruby/gems/2.4.0/gems/rroonga-7.0.2-x64-mingw32/lib/
2.1  2.2  2.3  groonga  groonga.rb  rroonga.rb

rroonga-6.1.3-x64-mingw32

試しに一つ前のメジャーバージョンに戻る。

$ gem install rroonga -v 6.1.3 --platform x64-mingw32
$ gem uninstall rroonga -v 7.0.2

しかし同様のエラー。ただしlib/2.4が存在していた。

$ ruby -r "rroonga" -e ""
C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- groonga.so (LoadError)
   from C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
   from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/rroonga-6.1.3-x64-mingw32/lib/groonga.rb:46:in `rescue in <top (required)>'
   from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/rroonga-6.1.3-x64-mingw32/lib/groonga.rb:42:in `<top (required)>'
   from C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
   from C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
   from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/rroonga-6.1.3-x64-mingw32/lib/rroonga.rb:16:in `<top (required)>'
   from C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:133:in `require'
   from C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:133:in `rescue in require'
   from C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:39:in `require'

ここまでの情報をもとにgroonga-dev MLに質問してみよう。

WindowsのRuby開発環境を整える

前回でmsys2のインストールに成功したので、次はWindowsRuby開発環境を整えることにする。せっかくなので最新のRuby2.5を入れてみる。

手順

  • 古いRubyが入っていたのでアンインストール
  • rubyinstaller-2.5.0-1-x64.exeをダブルクリック
  • デフォルトの外部エンコーディングUTF-8にするオプションがあったのでONに(もうSJISのテキストはあまり無いだろう・・) f:id:tuto0621:20180121230051p:plain
  • インストール終了後に開発キットのインストール画面に移動 f:id:tuto0621:20180121230221p:plain
  • msys2のインストールはすでに済んでいるので3を選択 f:id:tuto0621:20180121230201p:plain

無事インストールされているか確認する。

$ ruby --version
ruby 2.5.0p0 (2017-12-25 revision 61468) [x64-mingw32]

Gemのインストール

早速Milkodeをインストール。

$ gem install milkode
ERROR:  Error installing milkode:
        The last version of rroonga (>= 1.1.0) to support your Ruby & RubyGems was 7.0.2. Try installing it with `gem install rroonga -v 7.0.2` and then running the current command again
        rroonga requires Ruby version < 2.5, >= 2.1. The current ruby version is 2.5.0.
Successfully installed highline-1.7.10
Successfully installed termcolor-1.2.1
Successfully installed pkg-config-1.2.9
Successfully installed gqtp-1.0.6
Successfully installed groonga-command-1.3.4
Successfully installed json-stream-0.2.1
Successfully installed groonga-command-parser-1.1.2
Successfully installed hashie-3.5.7
Successfully installed groonga-client-0.5.8
Successfully installed io-like-0.3.0
Successfully installed archive-zip-0.10.0

rrooongaが2.5だとインストールできない?なんですとー。試しにnokogiriもインストールしてみたら同じエラー。まだちょっと早かったかな・・。

追記: 公式ページ読んだら2.5はgemの問題があるからまだ使うなって書いてあるね・・。

$ gem install nokogiri
ERROR:  Error installing nokogiri:
        The last version of nokogiri (>= 0) to support your Ruby & RubyGems was 1.8.1. Try installing it with `gem install nokogiri -v 1.8.1`
        nokogiri requires Ruby version < 2.5, >= 2.2. The current ruby version is 2.5.0.
Successfully installed mini_portile2-2.3.0

Ruby2.4をインストール

改めてrubyinstaller-2.4.3-1-x64.exeをインストール。msys2開発キットのインストールはすでに終わっていたのですぐにインストールが終わった。

$ gem install milkode
$ gem install nokogiri

どちらも無事インストールできた!しかしMilkodeを実行しようとすると動かないエラーが。

$ milk init
C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- groonga.so (LoadError)

groonga.soが見つからないとのこと。試しにfindしてみる。

ongaeshi@DESKTOP MSYS /c/Ruby24-x64
$ find . -name "groonga.so"
./lib/ruby/gems/2.4.0/gems/rroonga-7.0.2-x64-mingw32/lib/2.1/groonga.so
./lib/ruby/gems/2.4.0/gems/rroonga-7.0.2-x64-mingw32/lib/2.2/groonga.so
./lib/ruby/gems/2.4.0/gems/rroonga-7.0.2-x64-mingw32/lib/2.3/groonga.so

2.12.22.3は用意されているけど、2.4はもしかしてない?

明日もう少し調べてみよう。