すずけんメモ

技術メモです

Start Developing iOS Apps (Swift)でiOS入門した

GWだしまとまった時間があるので、いつかやろうと思っていたiOSアプリづくり入門をした。とりあえず10時間くらい触った。楽しい。

Apple公式のドキュメントが充実しているっぽいので、ひとまずStart Developing iOS Apps (Swift): Jump Right Inをやってみることに。内容としては食べたご飯の画像と評価(といっても☆が5つあってそれを保存する)を保存するアプリを作るというもの。次のことを順をおってやっていく。

  • storyboardでのUIの作り方
  • UIコンポーネントとAction, Outletのつなげ方
  • Auto Layoutで余白をつくったりレイアウトを調整してみる
  • UITableViewにデータを表示する
  • 詳細画面とTableViewで同じデータをもとに表示する
  • 編集と新規作成で同じUIを使いまわす
  • 投稿データを削除できるようにする
  • FileManagerを使ったデータの保存と読み取り

ところどころアドバイスがあるので横道にそれながら進むのも楽しい。「ここはもっとcomplexなケースだとDelegateをつかうといいよ」とか「guardをつかうとよりシンプルにかけるよ」とか。だいたい公式リファレンスに詳しく書かれていてそっちも面白いので、チュートリアルそっちのけで読んでしまった。

面白いなあと思ったことを書いておく。

あとはよくわからないなあと思ったことをメモっておく。

  • Protocol。 The Swift Programming Language (Swift 4.1): Protocols をちゃんと読むとよさそう。ふるまいとしては「どういうメソッドがあるか」「どういうプロパティがあるか」とかを定義できる。インタフェースとかトレイトとか抽象クラス、ではなくProtocolとしたのはなんかもう少し違う概念なのかな、と想像してる。
  • Auto Layout。marginやらwidth, heightやらを設定してるんだけどなんかうまく調整されないときがある。ので、 Auto Layout Guide: Understanding Auto Layout を読むとよさそう。

WEB+DB PRESS Vol.102の連載、「事業を支えるPHP」に寄稿しました

WEB+DB PRESSに寄稿しました。今回から始まる「事業を支えるPHP」という連載の第一回です。

gihyo.jp

今回から毎号、VOYAGE GROUPのエンジニア陣で連載を担当します。個人としてもWEB+DB PRESSへは初めての寄稿となりましたが、無事脱稿できたときにはほっとしています。10月ごろには年内に原稿は書かないだろうと思っていたのですが、11月ごろにお話をいただき、せっかくの機会なので会社のエンジニアで一緒に連載をしていきましょうという運びとなりました。

初回は私が「異常系コードのリファクタリング」について書きました。初回からとても事業を支える感のあるテーマになってしまいましたね・・w 今年のPHPカンファレンスでも発表もあり、今年は多くの機会を頂いて嬉しく思っています。

今年の主なテーマの一つは過去に書かれたコードとの向き合い方でした。その中の一つのアプローチが今回書かせていただいた記事の中にも盛り込まれています。もちろんテクニックもありますが・・やはりコードとどこまで向き合い、自分なりに問題を解き続けられるかというのが如何に大切なことかというのを感じています。

連載全体としてはPHPのバージョンアップなどあればそれについて触れつつ、基本的には私達が事業開発をするなかで試行錯誤してきたもの、あるいは特定のアプローチについて切り取ってお伝えする、という形になると思います。社内の他のチームのメンバーも執筆しますので、私としてもこの連載によって社内の知見が文章になって出てくるのを楽しみにしています。

お楽しみいただけると幸いです。

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の皆様とお話できるのを楽しみにしております :)