すずけんメモ

技術メモです

re:Invent 2017で聴いたセッション + あとでみるセッション

re:Invent 2017から昨日帰国しました。聴いたセッション、またあとでビデオ + スライドを見ておきたいセッションをメモしておきます。

聴いたセッション

Workshopが多いですね。セッション中のメモはDropbox Paperで取っていたのですが、Tweetにまとめているのもあるのでそちらもどうぞ。

聴いたセッションについてはajitofmでも話したのでよかったらそちらもどうぞ。

聴きたいけど聴けなかったセッション

あとでビデオとスライドで見ようかなあと思っているもの。Breakout Sessionの動画はこちら。そのうち全部あがるはず。

www.youtube.com

月曜日

火曜日

  • MCL365 - NEW LAUNCH! Introducing Amazon SageMaker
  • ABD327 - Migrating Your Traditional Data Warehouse to a Modern Data Lake
  • MCL310 - Building Deep Learning Applications with Apache MXNet and Gluon
  • ABD215-R - [REPEAT] Serverless Data Prep with AWS Glue
  • CTD301 - Amazon CloudFront Flash Talks: Best Practices on Configuring, Securing, Customizing, and Monitoring Your Distribution.
  • DEV315 - GitHub to AWS Lambda: Developing, Testing, and Deploying Serverless Apps
  • SRV403-R - [REPEAT] Serverless Authentication and Authorization: Identity Management for Serverless Applications
  • MBL402 - NEW LAUNCH! Data Driven Apps with GraphQL: AWS AppSync Deep Dive
  • CMP323 - AWS Batch: Easy and Efficient Batch Computing on AWS

水曜日

  • DAT342 - NEW LAUNCH! How to build graph applications with SPARQL and Gremlin using Amazon Neptune
  • SID341 - Using AWS CloudTrail Logs for Scalable, Automated Anomaly Detection
  • MCL333-R - [REPEAT] Building Deep Learning Applications with TensorFlow on AWS
  • CTD206 - NEW LAUNCH! Learn how Fubo is monetizing their content with server side ad insertion using AWS Elemental MediaTailor
  • DAT326 - How DynamoDB Powered Amazon Prime Day 2017
  • CON404 - Deep Dive into Container Scheduling with Amazon ECS
  • CTD203 - NEW LAUNCH! Hear how OwnZones is using AWS Elemental MediaConvert to help media customers deliver world class VOD experiences
  • CMP332 - C5 Instances and the Evolution of Amazon EC2 Virtualization
  • CTD304 - Dow Jones & Wall Street Journal's journey to manage traffic spikes while mitigating DDoS & application layer threats
  • CON214 - NEW LAUNCH! Introducing AWS Fargate
  • MCL305 - Scaling Convolutional Neural Networks with Kubernetes and TensorFlow on AWS
  • DEV324 - Deep Dive on Advanced Continuous Delivery Techniques Using AWS DevOps Tools

木曜日

  • DAT308 - A story of Netflix and AB Testing in the User Interface using DynamoDB
  • DEV203-R - [REPEAT] Launch Applications the Amazon Way
  • DEV402 - Deep-Dive for AWS X-Ray
  • SRV401 - Become a Serverless Black Belt: Optimizing Your Serverless Applications
  • MCL341 - NEW LAUNCH! Infinitely Scalable Machine Learning Algorithms with Amazon AI
  • SRV424 - Massively Parallel Data Processing with PyWren and AWS Lambda
  • MCL342 - NEW LAUNCH! Graph-based Approaches for Cyber Investigative Analytics Using GPU Accelerated Community Detection and Visualization with Amazon Neptune and Graphistry
  • CMP330 - NEW LAUNCH! Amazon EC2 Bare Metal Instances

おまけ

1週間ぶりに食べる日本食は最高だなあと思いました。

DeepLensはAWSの新サービスてんこ盛りデバイスだった

今週はラスベガスで開催されているAWS re:Inventに来ています。DeepLensのWorkshopに先程出てきたのでメモがてら貼っておきます。

概要

DeepLens自体は次の記事が詳しいです。

AWS DeepLens – Get Hands-On Experience with Deep Learning With Our New Video Camera | AWS News Blog

私はビデオもデバイスについても特に詳しいわけではないのですが、DeepLensがすごいなーと思ったのは、それ自体が今回発表されたサービスを含め、AWSのサービスを上手くつかって構築されていることです。

  • SageMakerで作ったモデルを取り込む
  • Greengrass Core上でlocal Lambdaを動かし、デバイスデータの送信とinferenceをする。
  • eventのpubsub管理はAWS IoTで
  • Greengrassに乗っているのでデプロイも簡単にできる
  • ビデオデータはKinesis Video Streamでサーバ側へ送信 + バッファ可能
  • inferenceの結果はAWS IoTトピックで扱えるので、任意のLambda functionのtriggerに設定可能

DeepLens自体のスペックは次のとおりです。

AWS DeepLens – Deep learning enabled video camera for developers - AWS

Workshopではこれらを一通り触りながらDeepLensにモデルをデプロイしていきました。次がWorkshopでつかったプロジェクトです。

GitHub - aws-samples/reinvent-2017-deeplens-workshop: A reference Lambda function that predicts image labels for a image using a MXNet built deep learning model

GreengrassにDeepLensをデバイスとして関連付けすると、AWS IoT Device Gateway経由でイベントが流れてきます。例えば物体認識したイベントは次のようなデータが流れてきます。GreengrassではLambda functionをデバイスのlocalで実行できるので、ここでinferを実行するわけです。Greengrass SDKをつかったコードは次にあります。infer結果をpublishしているのがわかります。この例だとMXNetを使っています。

https://s3.amazonaws.com/deeplens-managed-resources/lambdas/hotdog-no-hotdog/new_hot_dog_lambda.zip

ちなみに今日あったアップデートでGreengrassからカメラやGPUにアクセスできるようになっています。

Over-the-air updates, access to local resources, and OPC-UA industrial protocol adapter now available on AWS Greengrass

今日試したところ、DeepLensにはProjectを1つだけデプロイできます。ProjectというのはModelとFunctionの組み合わせでつくられるDeepLensの挙動のだと思うとわかりやすいです。

公式ページにもあるとおり、DeepLensがProgrammableというのはここで実現されています。

AWS DeepLens is easy to customize and is fully programmable using AWS Lambda. The deep learning models in DeepLens even run as part of an AWS Lambda function, providing a familiar programming environment to experiment with.

1つ1つをみるとやっていることはシンプルですが、よく考えられているなあと思ったポイントは以下のとおりです。

  • Greengrass Coreの設定をしなくていい。DeepLensのconsoleからdeviceを紐付けるだけ。
  • ゆえに証明書の配置とかも気にしなくていい。(出荷時点で組み込みのはず)Greengrassの設定するの若干面倒ですし・・
  • ひとまずつなげばAWS IoTのpubsubにつなげるのでユーザはmodelとLambdaをどう書くかだけ考えるのに集中できる

あたりかなと。Greengrassで管理してるのでnetwork connectivityが安定しなければ再送される、あるいは他のGreeengrass Coreと連携して端末間通信する、あたりも便利そうですね。

感想

まとめ

  • re:Invent出られてるかたはDeepLens Workshopおすすめです。明日もあるみたいです。*1
  • まさかre:Inventでデバイスが発表されるとは思ってなかったので楽しい。

*1:Workshop後にDeepLensももらえます

PHPカンファレンスで話してきた

先々週のことですが、PHPカンファレンス2017で話してきました。初PHPカンファレンス。楽しかった!ひさびさにPHPの話をいっぱいできてよかったです。

会社のブログにもゆきみねがまとめてくれてます。 techlog.voyagegroup.com

発表資料はこちら。

speakerdeck.com

セッション動画も載ってます。

www.youtube.com

セッション内容としてはレガシーなシステムの段階的改善です。「こんなケース、ありませんか?」というのが今回の問い。会場で聴いていただいた方々にも多く該当される方がいたようで、このテーマで話をしてよかったなあと思いました。

f:id:suzu_v:20171018124930p:plain

コードを書くとき、すでにあるコードを変更することのほうが多いはずです。そして価値を出している。価値を出しているコードを、僕は尊敬しています。なのでそれらをより良くしていくためにどうしたらよいか?というのがこの1年間ほど取り組んでいたテーマの1つでした。

大きくなってしまったコードベースを読み解くのは大変です。コードを読むことは、書くことよりも時間を使います。コードは読まれる時間のほうが長いのです。Readabilityは最も重要です。ですがすでにReadabilityが低いコードである場合にはどうしたらよいのでしょう。小さい規模であればリファクタリングして地道につぶしていくのもいいかもしれませんが、それだと時間がかかりすぎてしまうかもしれません。

最近読んでいる本にレガシーソフトウェア改善ガイドがあります。レガシーソフトウェア改善ガイドの話は発表中にはしていないのですが、おすすめです。レガシープロジェクトの改善をどう進めていくかという観点から体系立てて書かれています。

www.shoeisha.co.jp

リファクタリングかリライトするかというのは、常に悩ましい問題です。しかし、リプレースという選択肢もあります。リファクタリングするのでもリライトするのでもなく、リプレースをする。書き直さずに、置き換える。サードパーティ製のソフトウェアで代替えできるのであれば、それは素晴らしいことです。

今日公開した ajito.fm/10 でもPHPカンファレンスについて話したので、よかったら聴いてみてください。 ajito.fm

カンファレンス運営者のみなさま、スポンサーのみなさま、そして参加者のみなさま、どうもありがとうございました!

「データ分析基盤構築入門」の執筆に参加しました

「データ分析基盤構築入門」の執筆に参加させていただきました。

gihyo.jp

概要は以下のとおりです。

「サービスのデザインはログのデザインから。」良いサービスを作り上げるには,ログデータを収集し,改善を続けるシステムの構築が必要です。本書は,ログデータを効率的に収集するFluentdをはじめ,データストアとして注目を集めているElasticsearch,可視化ツールのKibanaを解説します。本書を通して,ログ収集,データストア,可視化の役割を理解しながらデータ分析基盤を構築できます。2014年に刊行した「サーバ/インフラエンジニア養成読本ログ収集 可視化編」の記事をもとに最新の内容に加筆しています。

最初に執筆させていただいてから早3年、改訂しませんか?との話から始まった今回の執筆。ログ解析にまつわる環境にも変化がありました。前に書いた原稿を眺め、反省しつつ、2017年の今また改めてこの文章を書くならどう書くのが良いのだろうか?というのを自分なりに再解釈し、書いたのが今回の書籍になります。

もともとElasticsearch, Fluentd, KibanaのいわゆるEFKスタックの本として書かれていました。その間にETLの領域でも様々なツールが生まれ、実践され、よりよい運用が試みられてきました。そうした取り組みを改めて俯瞰し書く機会をいただき、嬉しく思っています。特に今回はy-kenさんにより、Embulk、Digdagに関しても多く加筆されています。

10/10夜にはピクシブ株式会社様にて刊行記念の勉強会が開かれます。お気軽に聞きに来ていただけると幸いです。

pixiv.connpass.com

PHPカンファレンス2017で話します

2017年10月8日(日)に開催されるPHPカンファレンス2017にて登壇します。

phpcon.php.gr.jp

https://joind.in/event/japan-php-conference-2017/session14-php--

session14: 広告配信管理システムを支えるPHP ~ レガシーシステムからの段階的移行戦略
13:35 4Fコンベンションホール梅 (手前側)

弊社管理画面の改善ネタです。下記の記事をみていただくと雰囲気が伝わるかと思います。

suzuken.hatenablog.jp

是非お越し下さいませ。会場でもPHPerの皆様とお話できるのを楽しみにしております :)

8/4 12:10- ランチセッションにて出張 #ajitofm します

builderscon, 今週ですね!弊社でもスポンサーさせていただいており、「ランチセッション枠もらったのでなんかやらない?」と話をふってもらったので出張 https://ajito.fm をすることにしました。8/4 12:10 - 12:40 イベントホールです。ランチでます!ゲストは @ajiyoshiさん、yowcowさん、そして初登場 トミールさんです。

builderscon.io

いつも通り(?)ゆるい雰囲気で話していく予定ですのでお楽しみに!8/4は終日日吉にいますので是非お話しましょう〜。

A Tour of Goを終えたあなたにおすすめのGoを勉強するためのリソース

今年も夏のインターンで学生にGoの講義をします。多く寄せられる質問が「A Tour of Goを終えたのですが、その後に何をやるのがおすすめですか?」というものです。学生に限らず、言語を学ぶ方はプログラミングそのものに対する慣れやバックグラウンドも違います。そこでなるべくいろんな方の参考になるように、おすすめな本なりページなり方法なりをまとめてみます。

わりと多くの人におすすめ

プログラミング言語Go」(Alan A.A. Donovan, Brian W. Kernighan著)です。通称GOPL。

http://www.gopl.io/

柴田さんによる日本語翻訳もあります。

https://www.amazon.co.jp/dp/4621300253

Go言語のイントロダクションから始まり、型・インタフェース・並列性の説明などが丁寧にかかれています。私がGOPLを良いと思う点は、例示が豊富なところです。Goのインタフェースはとても強力ですが、最初その有用性をどのように活かせばいいかというのはちょっとした応用のコツを抑える必要があります。GOPLでは例を交えながら説明されているので、とてもわかりやすく、実践的です。例えば7.9では簡単な評価器をつくります。以下のような簡易電卓を実装します。

sqrt(A / pi)
pow(x, 3) + pow(y, 3)
(F - 32) * 5 / 9

(7.9 Example: Expression Evaluator より抜粋)

これらの式に対するパーサをどのように実装していくか、というのがわかりやすく説明されています。単項演算、二項演算の型を定義し、式をインタフェースとして定義します。

type Expr interface{
    Eval(env Env) float64
}

この例では浮動小数点演算のみサポートしています。各演算はすべて Expr のインタフェースを満たします。これにより、評価器の環境モデルをわかりやすく記述できるようにしています。

評価器の実装はインタフェースの演習の一例です。機能性を知り、理解を深めるために良い例だと私は思います。またGOPLでは、テストの実践例、豊富なGoのツールセット、Reflectionなどについても扱われており、私が知る中で日本語で読める書籍だと最も網羅的に書かれている本です。

もっと言語自体を深く知りたい方におすすめ

言語自体の理解を深めるには golang.org に載っているコンテンツを読み込むのがおすすめです。Goチームはドキュメントをとても重視していて、どの文章もよく書かれています。godocもその文化の一例です。

Goチームの書いているブログはどの記事も言語機能及び応用に関する解説として秀逸です。

The Go Programming Language Blog

ymotongpooさんが日本語訳を公開してくださっています。

www.ymotongpoo.com

個人的に好きな記事をあげておきます。

また、Goの標準ライブラリを読み進めるのがおすすめです。言語仕様を読みつつ、「どう実装してるんだろう」と想像しながらコードを読み進めていくと楽しいです。Goの標準ライブラリはGoで書かれているので、読みやすいというのも嬉しいところです。

標準ライブラリを読むときはテストコードを読むとさらに理解が深まります。Goの標準ライブラリのテストコードは、そのライブラリをどのようにつかうかという視点でみたときによいサンプルになります。例えば、 encoding/json を深く知りたいときには、 https://golang.org/src/encoding/json/encode.go を読みつつ https://golang.org/src/encoding/json/encode_test.go を読むとわかりやすいです。 Examplesとして書かれたテスト はgodocにも載っているので、そちらも参考になります。

Webエンジニアで*1実践にGoを使ってみたいというあなたにおすすめ

Goの本ではないのですが、「Real World HTTP」(渋川よしき著)を個人的におすすめします。

www.oreilly.co.jp

内容紹介より引用します。

本書はHTTPに関する技術的な内容を一冊にまとめることを目的とした書籍です。HTTP/1.0、HTTP/1.1、HTTP/2と、HTTPが進化する道筋をたどりながら、ブラウザが内部で行っていること、サーバーとのやりとりの内容などについて、プロトコルの実例や実際の使用例などを交えながら紹介しています。 GoやJavaScriptによるコード例によって、単純なHTTPアクセス、フォームの送信、キャッシュやクッキーのコントロール、Keep-Alive、SSL/TLSプロトコルアップグレード、サーバープッシュ、Server-Sent Events、WebSocketなどの動作を理解します。 これからウェブに関係する開発をする人や、これまで場当たり的に学んできた人にとって、幅広く複雑なHTTPとウェブ技術に関する知識を整理するのに役立ちます。HTTPでは日々新しいトピックが登場していますが、本書によって基礎をしっかりと押さえることは、さまざまな新しい技術をキャッチアップする一助にもなるでしょう。

夏のインターンでも学生向けにGoの話だけではなく、Webに関わるエンジニアとしてHTTPに関する講義を設けています。Real World HTTPはHTTPについて仕様を紹介するだけでなく、実際に動かす例を示しながら読み進めることのできる稀有な本です。また、HTTPの進化の過程を知ることもできますし、セキュリティに関わるトピックも丁寧に説明されています。Real World HTTPのコード例はサーバ実装、クライアント実装ともにGoが使われています。もちろん主眼はHTTPを学ぶことにありますが、GoでどのようにこのHTTPの機能を使うのか?というときに逆引きするのにも便利だと思います。

実践的なTipsをもっと知りたい方におすすめ

手前味噌ですが去年執筆に参加させていただいた「みんなのGo言語」、おすすめです。*2

suzuken.hatenablog.jp

そして何より

どんどん手を動かしてコードを書きましょう :)


思いつくまま挙げてみました。他にももしおすすめの本やリソースなどがあればコメントいただけると幸いです。

*1:あるいはWebエンジニアになりたくて

*2:この流れで紹介しないわけには・・すみませんすみません