valid,invalid

関心を持てる事柄について

後悔駆動でやっていく

最近は鍛錬を通して得る“昨日より今日、今日より明日”という成長実感に取り憑かれつつある。筋トレや健康は中毒になる。

とはいえ純度100%で打ち込む良い意味での馬鹿にはなれそうもないのだが、そうして"強く"なっていくことが自分にとっては過去の清算であるとしばしば感じ入ることがある。

また、その度に皆さんご存知ルチャマスター先生の言葉を思い出す。*1

f:id:ohbarye:20170304185908j:plain

後悔を淘汰する最もシンプルな方法は忘れることだが脳はそう都合よくできていないらしいので、スキルや肉体を磨くことで“あの時できなかったことを今の自分ができるようになる”ほうが手っ取り早い。

だから、鍛錬する。

もうワンランク上の精神に到達すると今度は鍛錬を強制するためにあえて失敗や後悔をする場に飛び込むようになるのだと思う。

1ヶ月で身体を健康に持っていく

年初に 2017年の目標 -1年の目標を立てるのをやめる- - valid,invalid で書いたように今年は30日ずつ何かを頑張ることにしており、2月は健康になることにした。

健康への努力は一日にして実らないのでいかに良い習慣を楽して付けられるか、を考えた。

2月は1月よりもさらに忙しくなることがわかっていたため、高い集中力と長いまとまった時間を要する作業は避けることにしつつ、仕事のパフォーマンスもあげたいと考えた結果、“健康”がテーマになった。

目標

  • 健康を維持するための習慣を身につける
  • 不健康な部分の治療を行う

習慣

ジム通い

2016年の振り返り -罪と罰- - valid,invalidにも書いたが、去年の8月頃からジムに週2程度で通っていて順調に体重が減少している。

f:id:ohbarye:20170301161612p:plain

以前2回ほどダイエットした時は半年で10kgほど落としたので今回はかなり緩やかではある。が、これまでと違って「筋肉を付けながら体重・体脂肪も落とす」よう頑張っている。やりすぎると筋肉も落ちてしまう有酸素運動は筋トレ後のクールダウンにのみ使っており、筋トレ中、筋トレ後にはプロテインを飲んでいる。

プロテイン

トレーニングを行わない日でもプロテインシェイカーを会社に持っていき、毎日飲んでいる。「運動しない場合は余計なタンパク質を摂取しない方がよい、太ってしまうから」という記事も見かけたが、自分はそもそも筋肉を維持するために必要なタンパク質量(70kg なので 70g 程度)を普段の食事で摂取できていないので、これで補っている。

プロテインはこれを飲んでいる。

jp.iherb.com

牛乳で割ると一杯で30gものタンパク質が摂れるうえに、ミルクココアみたいな味で想像していたより遥かにおいしい。最初の1ボトル目がそろそろ尽きそうなので、今度は他の味も試してみたい。

懸垂

今までジムでも懸垂をやってこなかったが、懸垂(チンニング)の効果・やり方・筋肉|背筋の筋トレやるなら絶対必須! | 筋トレぴろっきー《筋肉やトレーニング情報満載ブログ!》などを読んで、懸垂によりフォーカスすることにした。

懸垂は自重でできるトレーニングの中でも最強!!!!!

かつ広背筋は面積が広く、代謝の上昇に大きく寄与!!!!!

らしい。

初めは会社の近くに懸垂台のある公園を見つけ、週4~5で出社前に懸垂していたのだが、広背筋や僧帽筋といった背中の筋肉は回復が遅いので毎日やるのは怪我の元らしいと知って回数を減らした。

そして2月の終わり頃、ついに会社で懸垂器を購入してもらった。腹筋や上腕も鍛えられるけっこう良いやつ。これは嬉しい!!2~3日おきに懸垂するぞ!!(超回復のため中日が必要)

ボルダリング

ジム以外のアウトドアな趣味を一つは持ちたいと思っていた折、友達に連れられて始めて行ってみたら思っていたよりも遥かに面白かった。

パワーで登ることもできれば身体の軽さや柔軟性、腕のリーチですいすい登る人もいる。実際、筋力が遥かにある自分よりもうちの奥さんやその辺の子供の方がすいすいクリアしていく。一手一歩を踏み出す勇気が必要なのも面白い。

また、一番最初に訪れた場所にたまたまプロのクライマーが何人か来ていた。掴むところのない球面にカメレオンのようにくっついたり、移動不可能と思われる距離をジャンプして渡ったりといったアクロバティックなプレイに感動してしまった。

というわけで2月は3回行った。

食事

糖質制限もしていないしとりわけ気をつけているわけではないが、もともと少食なので無理をしないことにした。

あまり空腹でない昼はサブウェイやコンビニのサラダで充分だし、多すぎれば残す。店で残しそうだとわかっていたら米抜きで頼んだりする。米がなくてもうまいものはうまいという境地は意外とすぐそばにあった。

そういえばプロテインを毎朝から昼にかけて飲んでいるせいか、最近は昼を過ぎてもなかなか空腹がこない。プロテイン、腹にたまる感じがするし、バターコーヒー的な役割を果たしていそう。

治療

柔軟運動

一度整体に行った時に、身体が固いせいで肩こりや腰痛が起きていると言われた。なら柔らかくしようということで毎日てきとうに軽く柔軟運動をするようにした。

特に風呂上がりや朝起きたときに仰向けになった状態で腰を揺らす金魚運動はかなり腰に良い感じ。1月の終わり頃は日中もかなりきつかったのだが、今はあまり腰を意識しなくなった。もう少しで立前屈時に指が地面に付く…。

運動を定期的にやりつつ、普段の姿勢が悪くなければ自然に改善していくということがわかった。

口内環境

2年以上歯医者に行っていなかったので行った。結果、いろいろ治すところがあったようだ。

  • 親知らずを抜いた。下向きに生えている歯だったので全然痛くなくて拍子抜けした
  • 虫歯も3個ぐらい直してもらった
  • 銀歯が取れたのを埋めてもらった。歯医者いわく、銀歯が取れるのは内側で悪い何かが進行している兆候でもあるので取れて良かったらしい
  • 歯石をガリガリとってもらっている
  • 歯周病なりかけだったのだが、歯磨きのやり方を変えたら治ってきた

眼環境

ちょっと目が傷んだのを契機に眼科に検診に行ってみた。これも数年ぶり。

眼科医いわく「いま使用しているコンタクトだと右目が強くてバランスが悪い。PC をずっと眺めていて疲れることが多いなら右目だけ度を弱めると良い」と。

従って右目の度を -4.25 => -4.00 に切り替えてみたらなるほど。最初はかなり違和感があったが長時間作業をしたあとの右目の疲労は和らいだように感じる。

感想

最近なんだか健康オタクぽい感じになっているが、他人に健康を押し付ける健康オタクにならないよう気を付けたい。

「お前もこうすべき」「これが最強の生活」みたいなことは一切言わない。

健康は基本的に善なのでつい健康について一家言持ちたくなるが、自分はあくまでアマチュア、自分の健康にだけ責任を持つというスタンスでわきまえていきたい。

30 days challenge 自体の感想

目標も達成でき、片付けたかった健康上の問題をまとめて片付けられてそこそこ良い気分。その結果、日々のパフォーマンスがたぶん上がっている。身体がダルいと何もかもやる気がなくなるので。

1月の challenge について

英語学習は継続している。これは別記事に書く。

3月以降やりたいこと

本当は2月は作曲をしたかったのだがまとまった時間を取る余裕が全然なかったので止めた。3月こそは作曲かもしれない。

『LA LA LAND』という"恩返し"

と書いたとおり、この映画愛あふれる映画はそういうものだと思った。

【感想】『ララランド』がオマージュしたミュージカル映画とのシーン比較 - アートコンサルタント/ディズニーやミュージカル、ビジネス情報サイト で紹介されている通り多くの映画へのオマージュが散りばめられており、また、取りようによっては内輪なだけのハリウッドジョークも多かった。ゆえに「ハリウッドに媚びてる」という批判もさもありなん。また、ジャズを語る白人というのも「白人偏重("Oscar is so white")」の延長という感じで叩かれても致し方ないという感じ。

ただ、それはハリウッドやジャズを強く意識しているからこそ生まれてくる批判であって、自分のように両者いずれにも強い思い入れのない人間から見たときにはそうしたくすみよりも全体にあふれる映画愛の輝きの方が眩しく映る。

以下、ネタバレを含んだ感想。

感想

「至高のミュージカルエンターテインメント映画」という前評判がものすごかったので、『きっと、うまくいく』のようなマサラ感を想像していたのだがそうではなかった。ミュージカルシーンの高揚感で言えばインド映画の方が数段上。

夢を追う人間を描く以上「才能」というテーマをいかに描くかというのは避けようがないのだが、そのあたりの描写が薄かった。なぜミアやセブが成功できたのかの裏付けに乏しい。

と、文句から始まったものの、全体としてはかなり良かった。デミアン・チャゼルの映画とジャズへの思い入れ両方をブチ込んだ結果、映画愛の方がアクが強く浮き出てしまった感じ。映画の中で映画について言及するのも嫌味な感じがしなかった。

映画館で観るべき映画の一つだと思ったし、鑑賞後もしばらく余韻に浸りたくなる作品だった。Apple Music でサントラが聞けるので毎日聞いている。

特に良かったシーン

Messengers のライブシーン

キースがセブを引き入れたバンドのライブシーンで、綺麗なピアノとジョン・レジェンド(歌手として呼びたい!)のソウルフルな歌声で始まった曲「Start a Fire」が、セブがやりたかった「批判なんてクソ食らえ、という本物のジャズ」どころか大衆向けのポップソングだったというギャグ。

ここは笑いどころだった。スタジオでキースが電子ドラムを急に流し始めてセブが戸惑うシーンがあったがあれは前フリで、その後に完全にバンドの原形を失った感じになっているのがオチという高度なギャグ。

ライブを見て顔をしかめるミアに対しても「ライブに行くまで一度も曲を聞いたことなかったんかーい」と突っ込めたり、ダンサーが出てきて二度びっくりとおいしいところが多い。

また、「Start a Fire」が本当に良い曲なのもウケる。コーラスやホーンも厚いしダンサーが出て来てドリカムみたいだった。ジャズに明け暮れた奴らがそのテクニックでバックバンドやってる、っていうのもスタジオ・ミュージシャンぽいし、あの路線は本当に売れると思う。

夢を変えて大人になった

ミアが実家に帰って、セブがそれをオーディションの吉報とともに追いかけてきたところ。

ミアを子供だと責めるセブに対して言い返した「あなたは夢を変えて大人になった」というのがグッと来た。

夢を諦めたわけじゃない…今も頑張っている…けど、あの頃とは違う夢を選択してしまったんだよな…無意識に…妥協して… という暗い刺さり方をした。

“Where are we?”

ミアがセブとの「2人の関係」や「これから」について “Where are we?” と二度問いかけるシーン。

(おそらく意図的に)複数の年代がごちゃまぜになっていること、それが夢の世界のような雰囲気を醸成していることは序盤で気付くのだが、それについてメタ的に言及するようなこの台詞にハッとした。

ここでセブが「実は全部夢だったんだよ」と答えていても「そうか…」と思ってしまいそうな浮遊感があったのだが、しかし全ては現実、その後に来るラストシーンで非情にも二人の夢が現実になった頃には二人がいた時間が夢のようになってしまったという逆転をまた一段と辛いものに仕立て上げていた。

そう、あのシーンで「夢を追うなら全てを捨てて没頭しなければならない」とセブが言っていたが、本当にその通りになってしまった。

最後のジャズクラブでの一連

5年後…ミアが女優として成功を収めている頃、いきなり隣にいる男に「てめーは誰だよ?」と突っ込みたくなりつつ、「え、まさか二人は終わった…?」と現実を突きつけられたまま、ふとミアと夫が入ったジャズクラブ。

「あ、これ絶対セブの店だ」って観客は誰だってわかる。

問題は、それをどんな決定的な描写がミアに気づかせるんだろう?と思っていたらクラブの看板に Seb’s”。もうこれで感涙。(映画を観た人ならわかるが、"Seb’s" はミアのアイデア。かつてセブに却下されたのに採用されてた)

そこからセブがミアに気付き、本来なら弾くはずでなかった曲を演奏し始め、別の世界線へ…

いや、書いていて思い出したがやっぱり良い映画だったな。もう一度観たい。

Rails の cookie session をデコードする

staging のアプリケーションでのみ起こるバグを調査している折、どうやらセッションにちゃんと値をセットできていないぽいと気付いた。

そのアプリは cookie session を採用していたので簡単に暗号化された値は手に入ったが、これはどうやったらデコードできるんだろうと思って同僚にアドバイスを求めたら A simple script to decode Rails 4 session cookies · GitHub あたりに辿り着いた。

貼った gist だと諸々 require しているが、該当のアプリケーションの Rails console に入れれば以下で OK だった。

def decrypt_session_cookie(cookie, key)
  cookie = CGI::unescape(cookie)
  
  # Default values for Rails 4 apps
  key_iter_num = 1000
  key_size     = 64
  salt         = "encrypted cookie"         
  signed_salt  = "signed encrypted cookie"  

  key_generator = ActiveSupport::KeyGenerator.new(key, iterations: key_iter_num)
  secret = key_generator.generate_key(salt)
  sign_secret = key_generator.generate_key(signed_salt)

  encryptor = ActiveSupport::MessageEncryptor.new(secret, sign_secret, serializer: ActiveSupport::MessageEncryptor::NullSerializer)
  encryptor.decrypt_and_verify(cookie)
end


# Take the following value from your cookie for your web site
cookie = 'your encrypted cookie'
key = ENV['SECRET_KEY_BASE']

puts decrypt_session_cookie(cookie, key)

store が cookie でなくて memcached とかだと値を拾うための key がアプリケーションの独自ロジックで生成されたりしていてもっと大変になると思う。


余談だが、クエリストリングをセッションに格納するだけの処理がうまくいってなくておかしかったそのバグは、クエリストリングが nginx のレイヤーで落とされているために起きていた。ローカルではそのレイヤーを設けてないので再現しなかったわけだ。(本当は環境をきちんと合わせた方が良さそう)

環境

2017年1月は英語学習を頑張る月にした

年初に 2017年の目標 -1年の目標を立てるのをやめる- - valid,invalid で書いたように今年は30日ずつ何かを頑張ることにしており、1月は英語をそこそこ頑張ることにした。

1日1~2時間程度を費やすだけのそこそこの挑戦だったが、中学時代以降で最も集中的に英語の勉強をしたかもしれない。

目標

  1. リスニングとスピーキングの苦手意識を除く
  2. 語彙を200増やす

とりあえず、未だに英語が聞こえてくると鼓動が早くなるのを克服したかった。

あと、どれだけ語彙があったのかわからないが中学英語で1,200ぐらいらしいのでせいぜい2,000ぐらいだと思う。この目標は数の達成というより、語彙ってどれぐらいの期間でどれぐらい増やせるものなのか測ってみたいと思った。

オンライン英会話

リスニングとスピーキングの苦手意識

なぜ苦手意識があるかというと今まで全くやってこなかったからなので、とにかく会話しようと思ってDMM英会話を1月1日に契約した。他にも色んなサービスがあったが会社から受講料金の一部補助が出ること、hotchemi さんのブログが決め手でDMM英会話にした。

25分のレッスンを毎日受講した。料金は定額なので毎日受けることで料金の元が取れる。

仕事の忙しさは今年も変わらず、年度末まで仕事が繁忙期なので毎日やるのは厳しいのだが、朝10:00や10:30にレッスンを入れて規則正しく起きるようにした。去年を思い出すとたまに11時ぐらいまで寝過ごしたりしていたので寝坊防止に一役買っている…かもしれない。

実は1年以上前にも会社の補助が出て別のオンライン英会話サービスに挑戦していたのだが、仕事が忙しくなって止めてしまった…というのは理由の一つでしかなく、本当はあまりにも英会話が苦痛で逃げてしまった。正直今も苦手なのでレッスンのたびに汗をかくのだが、「とりあえず 30 days だし頑張るか」というゆるい気持ちと「逃げちゃダメだ」的ヒロイズムで頑張っている。

教材

知らない人と25分話すのは日本語でも苦痛なのでちゃんと教材を使ったレッスンを受けて会話が成立するようにしている。

デイリーニュースライトという Voice Of America の記事を使った教材が毎日更新されるのでこれを毎日使っている。ワールドワイドなトピックについて英語で語るのは結構楽しい。講師の国の事情や文化は特に良い。

しかしたまに “ツイッターで話題www” 的なレベルの記事が出てきてこれはあまり面白くない。デイリーニュースというワンランク上の教材もあり、こちらの方が有意義な内容が多いのだが一度挑戦した時にかなり難しく感じた。充分な予習ができれば良いがいつも朝に受講していてそれが難しいので今は見送っている。

その他

人気講師のスケジュールは公開後にすぐに埋まってしまう & 一度に複数のレッスンの予約はできないので、oinume さんの lekcije というサービスを使ってお気に入り講師の空き時間を通知してもらうようにしている。基本的には朝のレッスンが終わったらすぐに翌日分を予約しているが、土日の受講時間は結構不規則なので lekcije に頼っている。

また、いま一緒に働いている fesnow さんの勧めで、たまに会話を iPhone のボイスメモで録音して空いた時間に聞くようにした。レッスンの中で聞き漏らした言葉を拾えたり、シャドウィングに使えたり、復習になったりと良いことづくめに思えるが、自分の声によるひどい英語を聞くのは精神的にかなりの苦痛を伴うので素人にはオススメできない。

感想

今のところDMM英会話が最も実になっている感がある。英語学習で学んだことは実践しないとすぐ離れていくので、昨日言えなかったことを明日言うみたいなサイクルをガンガン回していくと良い感じ。

まだ苦手意識は消えてないので精神的な負荷も一番大きいが、知らない人と話すハードルみたいなのは想定より低かった。

発音

特に何もしていない。が、英会話の先生によると皆「英語学習の早めにやった方が良い」と言うのでやれば良かったか。

正しい発音を知ればリスニング力も上がるし、ライティング時のミススペルも減るらしい。マジか。

英会話のレッスンを録音したのを聞いてると圧倒的に抑揚がなくて凹む。それでも先生に伝わるのは日本人の英語に慣れているからだろうな…と邪推する。

語彙

iKnow

DMM英会話の有料会員になると iKnow という英単語学習サービスが無料で使えるようになる。これもほぼ毎日欠かさずやった。語彙は1ヶ月で大体300~400ぐらい増えたと思う。予想よりかなり多くて驚いてる。

iKnow は月額1,480円で英単語アプリとしてはけっこう割高な印象だがかなり良い。コンテンツも充実しているし、エビングハウス忘却曲線的な何かに基づいて過去に学んだ英単語を不意打ちのように出題してくる学習システムがとても良い。

やり方

その時点での要復習単語の数がそのままアプリの通知バッジの数字になるので、ある程度単語を勉強してから1日放っておくと簡単に100近く貯まる。これを消そうと頑張りすぎるとイタチごっこになるので、この数字を1日に1~2回ゼロにするというペースで学習した。

例文とかを読み飛ばしつつサクサクやると1日20分ぐらいで終わるが、例文やリスニングをしっかりやったり画像のイメージを脳に刻み込みながらやると大体40分ぐらいかかる。通勤・昼休み・歯磨き・就寝前のストレッチなどの時間にこまめにやっているのでそんなに負担感はなかったが本を読む時間がなくなった。

また、アウトプットの反復も大事なので仕入れた英単語や文をなるべく仕事で使うようにした。Pull Request や GitHub Issues のコメントが主で、London team も交えた週一のchat meeting や採用活動でたまにという感じ。

iKnow の Web 版はこんな感じ

f:id:ohbarye:20170201023846p:plain

スピーキング

“文法は大体わかっていて、英文は読めるのに全く話せない人向け” という日本人ホイホイな感じのレビューコメントを見て「自分だ…」と思い『どんどん話すための瞬間英作文トレーニング』を試してみた。

なるほど確かにやってみると中1レベルの簡単な日本語を見ても英文がまったく出てこなくて憂鬱な気持ちになる。が、これができるようになるとかなり会話の瞬発力が増すと思った。

1月の前半はこの本を半分ぐらいまで一気にやって多少の英作文力の高まりを実感してたのだが、他の学習に比べてあまり面白くなくて辛かったので途中で止めてしまった。

時間あれば1冊やり通したいところ。

英語学習について思ったこと

1ヶ月けっこう頑張ってみた結果、ただ本当にコツコツ継続するしかないというのがわかって、「1週間で英語をマスター」「聞き流すだけでOK」的な教材に騙されてはいけないという思いが強くなった。

また、読書聴話4分野それぞれの勉強で相互作用が生まれるのでどれか一つだけ頑張るよりも全体的に底上げするのが良さそうに思う。これは人によるかもしれない。

筋トレと同じ

やればやるほどに英会話は筋トレだと思うようになった。とにかく反復するしかない。

語彙をいくらインプットしても使わないと覚えていられない。紙の英単語帳をぱらぱらめくったり文章中のわからない単語を調べたりしても数日後にはもう忘れる脳なので、iKnow ぐらいとにかく何回も強制的にインプットさせられないと駄目だとわかった。

会話も瞬発力なので何も考えずに言葉が出てくるところまで到達して始めてそのフレーズを使いこなせている実感が湧く。用意した文章を一回綺麗に言えても次に同じことを言おうとして頭で考え始めたらまだ定着していないとわかる。

30 days challenge 自体の感想

「空いた時間はこれをやる」と決めているおかげで、「とりあえず Twitter 開く」とか「Slack 見ちゃう」みたいな時間が圧倒的に減った。SNS は楽しいが有用な情報は20%以下なのでこれはこれでよい。RSS や本を読めなくなったのはちょっと駄目かもしれない。

また、他のやりたいことが湧いてきた時にそれができないという縛りは折角のやる気を殺してしまうかもと思ったがそうでもなかった。むしろ禁欲することで翌月以降やりたいことの詳細なアイディアが色々湧いてきた。

1月はこれをやったぞと胸を張れるのは良い。

そして、30日はとても短い…。

2月以降やりたいこと

色々ある。

  • 引き続き英語
  • お金について勉強する
  • 作曲
  • DDDおじさんになってDDD勉強会する

余熱があるので英語をもう一ヶ月集中してやっても良い気がしているし、別のことをやるにしても英語に関する取り組みのどれかは2月以降も続けたい。

Cookpad TechConf 所感とメモ

ビデオ配信があると知った時は家から論理参加してもいいかな、恵比寿遠いし…と日和ったが、対面でのコミュニケーションもいくつか交わせたので物理参加して良かった。

TechConf というものの techy な内容それ自体よりもプロダクトやユーザーの価値という視点からそれぞれの取組や技術について語っており、それが始めから終わりまで一気通貫して感じられたのが良かった。プロダクト開発に関する知見もいっぱいあった。

まず rejaspotaro さんの海外展開の話が良かった。 グローバルな開発という面では弊社も頑張っているし仕事で体験している l10n / i18n 周りとかを見て「わかるわかる…」と思っていたけど、"Right-to-left writing" とかユーザー定義・セグメンテーションの話あたりから「これは…数歩先を行っている…!?」という感じがした。頑張りたい。

その他、行動ログ分析、プロトタイピング、A/Bテストの話も興味深かった。これらはあまり深く実践できているところではないので折に触れて立ち戻って復習することになりそう。

あとこのブログで何回か書いた Jasper、その開発者の丸山さんに「いつも使っています、ありがとうございます」と伝えられたのも良かった。


以下、ただのメモ :memo:

※ 内容については間違っている可能性あり。

基調講演

  • 言語数=食文化数ではない
  • 同じスペイン語圏でも食文化がまったく違う例
  • 同じ食材でも名前が違ったり
  • 言語をサポートしたからといってその国で使われるわけではない
  • 今は15言語58カ国をサポート

Go Global

Product

  • 生活習慣・味覚・宗教の違い、その他もろもろ現地の特異性を理解せずして海外展開なし
  • 気候->民族文化->生活習慣の順に構築される
  • Kano model (must-be / attractive quality) が国によって違う
    • ベトナムではカフェに wifi があるのが当たり前
    • 郵送するとものが壊れたり
  • ユーザー定義が難しい。属性よりもコンテキストが大事になってくる(なぜ料理をする、どんな状況にいる)
      1. どうやって?(直接聞いた

Development

  • l10n i18n locale
  • 言語と国の組み合わせ
  • 考えるべきこと
    • 検索 男性名詞・女性名詞 / 語形変化 /アクセント記号 .... fuzzy / strict match 正規表現・partial match などで地道に頑張ったり。検索結果のソート時にregionを考慮する。豚肉料理はイスラム圏では弾いたりする。
    • 翻訳 国によって単語を変える(premium はイギリスだと無課金ユーザーに差別的印象なので prime にしたり)。
    • その他全部

Global Team

  • バラバラの拠点でビデオ会議やったりしている
  • 公用語は英語
  • OKR で目的を揃える
  • 海外では無名だったが、海外カンファレンスに出たり大学に行って会社紹介したりすることで知名度を上げた結果採用につながったりした
  • 使っているツールは英語圏対応しているものに変える

sorah

  • global の cookpad は異なる codebase で0から作った
  • global の方の Rails は今のところ普通に運用した AWS ap-northeast-1 us-east-1 / Amazon Aurora / ElastiCache (Redis/Memcache) / Ruby2.3 / Rails4.2
  • 日本で失敗した反省を活かしている

  • Route53 Latency Based Routing で日本かアメリカのどちらかに振り分ける

  • Rails app are capable to autoscaling

  • Peak traffic

    • in Japan, Valentine.
    • in global, so various.
    • Ramadan のときは3倍のトラフィックがくる、緩やかに終わっていくが1ヶ月高負荷な状態が続く。その期間にボトルネックや高負荷なクエリが見つかったりする

バイルアプリの A/B テスト

  • Chanko
  • mobile cannot deploy so often unlike web
  • ユーザーが update してくれない

  • すでにいくつかABソリューションはある OSS もサービス(Optimizely / Firebase Remote Config / Apptimize)も

  • user-features モバイルの過酷な環境に耐える薄いライブラリ

    • ユーザーごとに適用されている機能の組み合わせをJSONで取得
    • オフライン時には最後に取得したキャッシャは1時間
    • ずっと通信できていない場合は機能を無効化する
  • なぜ内製した?既存のユーザーセグメントやログ基盤を利用したいし、ユースケースは限定的

チームでプロダクト開発をするための取り組み

  • 料理きろくのプロダクトマネジメントをやっている
  • スマホで撮影した写真のうち料理写真だけを記録する
  • 写真の判定には機械学習を用いている
  • もともとエンジニアだったが、作りたい物を一人で実現するには限界があるのでチームで開発し、チームのパフォーマンス・成果最大化へフォーカスするようになった

  • 圧倒的な技術力・ビジョン・実績で信頼を得るのは難しい

  • 凡庸でもうまいやり方がある
  • まずは信頼して任せる

よりよい検索体験の為の情報設計とプロトタイピング

  • 検索事業部にデザイナーとして参加
  • 最初はエンジニアの領域では?他にできることあるか?と思った

  • 検索における主要な動機を設定する - 検索対象を自覚していない / している など探すシナリオを分解していく

  • シナリオにアイデアが湧いたら対応が薄い箇所を特定する
  • 機能を作っただけでは片手落ち。機能とシナリオをセットで考えて継ぎ目のないデザインをする。どの動機で入ってきても目的を達成できるような流れを作る。特定のシナリオやシーンで行き止まりにならないか考える。
    • 肉or魚?->サバorぶり->揚げor照り焼き
  • 不測の事態に対応するために実際の生活の中で試す
    • 夕方ノープランで急いで買い物いって店頭で使えるか
    • 冷凍してあると思った具材が無いと気付いたときにどうなるか
  • 粗くても実際に使える、確度の高い部分から形にしていく

快適なサービス開発を支える技術

Setup

  • 開発環境のセットアップ方法を curl setup.sh で全ての環境が整うようにしている
  • 構成管理スクリプトをダウンロードする。MitamaeでChef風のRuby DSL
    • Mitamae は mruby なので依存が少なくて壊れにくい

Development

  • 共用の開発用データベースは本番のコピーになっている
  • ユーザー体験を考えて、テストデータを横行するときでも本番と同じつもりでやる
  • マイクロサービス化
    • Garage / Pact / Expeditor などマイクロサービスをサポートするツールを作っている

Testing

  • Jenkins を使って自動テスト。テストを失敗させたユーザーにSlackでメンション
  • 光速にテストするため、RRRspec / スポットインスタンスを活用

Deployment

  • Slack から Deploy するようになっている
  • デプロイサーバを一つ用意して排他制御するようにしている
  • Slack 経由でデプロイする時、可能な時間は限定している。緊急の場合はシークレットキーを渡せば実行できるようにはなっている
  • 一定期間デプロイロックもできる。その期間にデプロイしようとするとchatbotに怒られる

監視

  • Sentry
  • ジョブの失敗もSlackに通知
  • サービスの障害はZabbixで、落ちたときには電話鳴る

まとめ

  • サービス開発者の生産性第一
  • ただしユーザーが先

Real World Machine Learning

計算機環境の改善、計算機環境構築の効率化

  • 2016/7 EC2 のGPUインスタンスを画像認識に利用していた。ubuntu:trusty から手動でセットアップ
  • インフラの人が居ないと環境を整えられなかった
  • nouveau / nvidea-driver / CUDA/CUDNN / Chaier/Tensorflow/Caffte / 環境変数 etc.. 整えるのに一苦労
  • 全部のせしたAMIをPackerにより作成。手順のコード化+実行の自動化。5分でオンデマンドGPU環境ができる

ML Lundh / ML Class

  • Lunch: 週1で持ち回りで講義
  • Class: 月1で外部から講師を招いて講義

行動ログでプロダクトを改善するには

  • 検索成功率(満足度の定量化)
  • 良いシナリオと悪いシナリオを定義する
    • 良いシナリオ:セッションの最後が詳細ページで終わっている、ブックマークした、など
    • 悪いシナリオ:セッションの最後が検索ページで終わっている
  • どうやってセッション作る?ほぼSQLだけでできる。"sessionize" ユーザーごとにソート
  • lead 関数で次の行を見ることで、検索内容の推移がわかる("ランチ"->"夫 ランチ"->"肉 ランチ" etc.)

  • データでは埋まらない部分

  • ブックマーク内のフォルダ分けが正しくない
  • 検索に使った値はプレースホルダーから来ていることもある。予測変換もあれば入力範囲の狭さから言葉が限定されたりする

  • フィードバックがかかりすぎないようにする

    • ログの期間は有限にする
    • 実測値/期待値で割り引く
  • DWHは一箇所にすべき