radioc@?

レディオキャットハテナ

【勉強会メモ】Serverless Meetup Osaka #4

serverless.connpass.com

日時:2017/10/18(水) 18:00 〜 21:30

場所:MOTEX

何度か参加させてもらっているが今回はAWS本家の中の人が来日され、特別セッション有り。

仕事で本格的に使うケースもあるかもしれないが、個人的にちょっと何か作ってみようとした時にもサーバレス技術の活用が有力な選択肢になってきていると感じる。様々なサービスがあって日々機能強化されているので把握していくのも大変ではあるが、思いついたらすぐ形にできて数分後にはサーバ上にデプロイできるというのはとても魅力的であり、すごい時代だなと思う。

Randall Hunt (AWS) 氏の特別セッション

全編英語であまり理解に自信がないので詳細は省略。

RandallさんはNASAでロケット開発をしていた経歴をもつ。冒頭で試験ロケットが打ち上げ失敗して次々と爆発する動画を紹介してもらった。面白いけどなかなか衝撃的だった。

AWS上でライブコーディングしながらLambdaなどのサービスを紹介。

ドラクエXAWSを使っていてLambdaのプロセスが200-300ぐらい稼働しているという紹介。

AWS 導入事例:株式会社スクウェア・エニックス | AWS

後半は下記資料を元にAI系サービスを紹介。

www.slideshare.net

セッションの冒頭で会場をバックにセルフィ写真を撮っていたが、Amazon Rekognition を使ってRandallさんの顔の写真を学習させた後、冒頭の写真の自分の顔部分だけ隠すというデモを披露。

Serverless Framework OpenFaaSとは

発表者:Ken Fukuyamaさん

speakerdeck.com

github.com

  • Docker上で動くServerlessなFramework
  • コンテナに入っていればなんでもFanctionになる
  • Docker Swarmとk8sをサポート

例えばLambda Functionsの部分がOpenFaas+Dockerで置き換えできる

主な機能

  • faas-cli を使ってデプロイ
  • 同期・非同期連携
  • k8s連携
  • Rancher連携
  • Go言語のtemplate
  • VBCodeでデバッグ
  • CI/CD Pipeline

など

日本語の情報がまだ少ない(Qiitaの記事がまだ2件)ので使ってみてフィードバック募集

東京に来た、Java8きたGreengrass

発表者:庄司 重樹さん @takesection

speakerdeck.com

Greengrass Core 1.1.0

  • Pythonに加えてNode.jsとJava8サポートが追加
  • 東京リージョンでも利用可能になった

aws.amazon.com

  • Java8のLambdaが動くのでScalaで書いたコードも動く
  • RasPi3に入れて試してみる

Lambdaの設定

  • メモリ制限が9桁まで設定可能、タイムアウト設定
  • 長時間動くプロセスも作れる
  • AWSの接続はキャッシュされる

SDカード対応の計測機器のデータをAWSにぶん投げてみた話

発表者:辻 一郎さん

unpco.com

iot.kyoto

IoT.Kyoto VISの紹介

  • DynamoDBに保存したストリームデータをリアルタイムでグラフ化
  • AWSアカウントがあれば無料で使える
  • PoC用に短期間・低価格でデータ収集基盤を構築可能

事例紹介

産業用ロボットの稼働状況可視化

iot.kyoto

電力監視

iot.kyoto

電圧ロガーからFlashAirでデータ取得

Flask+Python+Fluentdで構築

5分でサーバーレスの環境構築から本番デプロイまでやったろやないか!

発表者:清水 崇之さん

www.slideshare.net

サーバレスのCI/CDパイプラインを構築

AWS CodePipelineではなくAWS CodeStarがおすすめ

AWS CodeStar – アプリケーションをすばやく開発および構築して AWS にデプロイ

↓だいたい5分でデプロイ完了

www.youtube.com

カウボーイとエンジニア

shiganai.org

しがないラジオ ep.27 の中での話。

JavaScript カウボーイ

最近ではフロントエンドのJavaScriptエンジニアの事を Javascript Cowboy というらしい。フロントエンドのエコシステムが高速で変わっていくのを乗りこなしていくという意味らしい。

↓このあたりの資料でも同様の事が触れられている。

www.slideshare.net

カウボーイコーディング

カウボーイといえばこちらの言葉のほうが有名。

カウボーイコーディングは、各々の開発者が「自分が良いと思うプログラミング」をバラバラに行うことである。好ましくない状態を指すのに使う言葉であり、特定の開発手法を指す言葉ではない。

アジャイルソフトウェア開発 - Wikipedia

アジャイル開発という言葉が浸透しはじめた頃に従来の開発スタイルよりも自由度が高い面だけがクローズアップされすぎて、カウボーイコーディングの呼び方を変えた開発スタイルだと誤解されることもあった。

アジャイル開発と一緒に有名になった感じもあるが、実はそれより昔から我流のコーディングに頼って誰も扱えないようなプログラムを書くことをカウボーイと言って揶揄されてきた。

JavaScriptカウボーイにこのあたりのニュアンスが含まれているのかどうかは不明(フロントエンド周りの技術のスピードが早くて乗りこなすのが大変というのはよく言われる話なので多少はそういう皮肉が込められているようにも思える)。

ポケット カウボーイ(おまけ)

電気グルーヴの名曲。卓球と滝のボーカルを細かく刻んでつなぎ合わせた手法はまさにカウボーイ的職人芸。作業用BGMとしてどうぞ。

【読書メモ】現場で役立つシステム設計の原則

毎朝15分の読書会で本書を読んだ。現場で役立つということでチームで共有するテーマとしても良い本だと思う。

コードをわかりやすくまとめるテクニック

  • 小さくまとめてわかりやすくする
  • 場合分けのロジックを整理する
  • 業務ロジックをわかりやすく整理する

前半はコードをシンプルにわかりやすくする手法について。リーダブルコードのような形でわかりやすく良いコードに変えているテクニックの解説が中心。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

ドメインオブジェクトの考え方

ドメインオブジェクトの考え方に基づいて設計し、コードをまとめていくための考え方について解説されている。本書の中でも最も重要でページを割いている部分。

コードをドメインオブジェクトにまとめる考え方

  • 判断/加工/計算のロジックをまとめる
  • 業務の関心事とコードを対応させる

三層+ドメインモデルの組み立て

  • アプリケーション機能を組み立てる
  • データベースの設計とドメインオブジェクト
  • 画面とドメインオブジェクトの設計を連動させる

ドメインモデルの考え方を元に三層+ドメインモデルを組み立てていく考え方が解説されている。基本的にはプレゼンテーション層とデータソース層から判断/加工/計算のロジックを切り出してドメインオブジェクトにまとめていく。業務の関心事に合わせてプレゼンテーション層の画面を整理して設計する。

  • アプリケーション間の連携

近年当たり前となっているアプリケーション同士の連携での設計について、WebAPIを中心に解説されている。シンプルで簡単に利用できるAPIとして提供することから始める。WebAPIを利用する場合、以下についてWebAPIとドメインオブジェクトとの間に不一致が起こり変換が必要になる。

  • データ構造
  • 業務の関心事

オブジェクト指向開発プロセス

  • DDDにより従来のV字モデルの開発から短期間で開発と修正を繰り返す手法が可能になった
  • 無駄なドキュメントを減らしてソースコードやテストコード中心に成果物をまとめる

オブジェクト指向の学び方と教え方

新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES)

新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES)

ThoughtWorksアンソロジー ―アジャイルとオブジェクト指向によるソフトウェアイノベーション

ThoughtWorksアンソロジー ―アジャイルとオブジェクト指向によるソフトウェアイノベーション

実装パターン

実装パターン

オブジェクト指向入門 第2版 原則・コンセプト (IT Architect’Archive クラシックモダン・コンピューティング)

オブジェクト指向入門 第2版 原則・コンセプト (IT Architect’Archive クラシックモダン・コンピューティング)

オブジェクト指向入門 第2版 方法論・実践 (IT Architects' Archiveクラシックモダン・コンピューティング)

オブジェクト指向入門 第2版 方法論・実践 (IT Architects' Archiveクラシックモダン・コンピューティング)

エリック・エヴァンスのドメイン駆動設計

エリック・エヴァンスのドメイン駆動設計

まとめ

基本的にDDDを現場のシステム設計に取り入れることに主眼が置かれており、それが現在の開発の現場に最も適したアプローチだと理解した。WebAPIのような近年の技術についてもしっかり言及されておりイメージしやすく配慮されている。ただし、ここで解説されているのはあくまでシステム設計の原則であり、具体的には各々の現場に合わせて適したドメインオブジェクトの設計を模索する必要はある。そのためには本書で取り上げられている名著もカバーすることでさらに理解を深めてより良い設計を目指すことができるだろう。

エンジニアと思いやり

ec.nikkeibp.co.jp

最近エンジニアにとって一番大事なのは思いやりではないかと思うシーンが多くあって色々考えていたところでこの記事を読んだ。記事では顧客に対する視点で述べられているがこれは同じチームのメンバーや社内の関係者にも言えることだと思う。エンジニアは初めから多種多様な技術を持っているわけではなく自分が使える技術を他人のために役立てるには相手を思いやる姿勢が必要になる。技術力が高まってくると他人と自分のリテラシーの差が広がり、やはり相手を思いやる姿勢がなければ他人のために自分のパフォーマンスを発揮することが難しくなる。つまり思いやりの姿勢はエンジニアにとってプログラミング言語や設計手法を学ぶのと同じくらい基本的で奥の深いスキルの1つなのである。

顧客トラブルで助けてくれる あなたの 「ファン」 の作り方

日経SYSTEMS 2017.6 特集3の記事。 顧客内に「ファン」がいるだけで仕事の進め方が格段に変わる。そういう意味でITエンジニアにも「営業センス」は重要。

営業センスの三本柱

  • 思いやり
  • 生きる姿勢
  • 適度な距離感

思いやりの構造

思いやりは以下の3つの要素に集約され、同じ未来 を見つめることが最終ゴールである。

  • 傾聴
    • まずは聞くことに徹する
  • 想像
    • 常に相手の考えていることを想像する
  • 提案
    • 本当に相手に最適なことを提案

f:id:radiocat:20171014155338p:plain

※『日経SYSTEMS 2017.6 P.51 図2 思いやりの構造 』より

まとめ

営業センスというとややチープな印象を持ってしまうかもしれないが、要は自分の技術を他者へ提示するためのセンスということだと思っている。我々は自分の持てる技術を他人のために使うことで、同じ未来を描こうとしているのである。そのためには思いやりの姿勢で他人に接して初めて未来に向けて技術力を活用できるのである。もちろん、残りの二本柱である「生きる姿勢」と「適度な距離感」も重要だ。それらについては記事を参照のこと。

【勉強会メモ】【大阪】GMOエンジニアトーク -先端IT技術を学ぶ会- 深層学習、ブロックチェーン、AR/VR

jisedai.connpass.com

日時:2017/10/13(金) 19:00 〜 21:00

場所:シナジーカフェ GMO Yours

GMOの研究開発チームによる先端技術の発表会。今回は以下の3本立て。

深層強化学習はここ数年で注目されている分野のひとつで、それをAI系ではおなじみの株価予測に使って研究したという話だった。はじめは株価だけに注目してやってみたがうまくいかず、マーケットインパクトに注目して出来高を学習に加えたところ利益につながる予測ができたとのこと。この分野は何をどう学習させるかがキモなのでデータが豊富にある株が研究テーマとして選びやすく分かりやすいのだろうと改めて感じた。

ブロックチェーンは4つの実験的な仕組みをOSSとして公開したという話。ブロックチェーン技術を何に活用するかはまだ世の中的に試行錯誤状態なので実験のためにOSS化は必然なのかもしれない。

AR/VRは「どこでもドア」や「バーチャル案内スタッフ」というモバイルアプリを実際に開発した話。既に使われているとのことで事例としては最も具体化された内容だった。どこでもドアをネタにして現実世界とバーチャル世界を融合させてドアを介して行き来させるというのはとても面白いアイデアだと感じた。

いずれのテーマも今回は事例紹介が中心だったが、技術的にもう少し詳細な内容が調べられたものについてはリンクを追加しておいた(つまりリンクは発表者が紹介したものではなく私が後から追加したものです)。

AIで株をやる!~株の売り買いを深層強化学習で予測~

発表者:シユタサ カンスポーンさん

深層強化学習

深層学習+強化学習

強化学習

報酬が良い行動に最適化するように試行錯誤する機械学習アルゴリズム

例)ねずみが迷路の中でチーズを探す

  • Agent(学習者):ねずみ
  • 環境:迷路
  • 状態:迷路のどこにいるのか
  • 行動:左右どちらに進むか
  • 報酬:チーズをもらえる、もらえない

Q-learning

強化学習の代表的なアルゴリズム

  • 行動ごとに各状態で報酬を与える
  • 最終的に一番良い報酬となる最適な行動を学習
  • 全ルートが分かれば良い

学習ステップ

  1. ランダムに行動(学習)
  2. 報酬が高いルートの近くを選んで行動
  3. 最終的な報酬がよくなるように繰り返す

深層学習

多層のニューラルネットワークによる機械学習

深層強化学習⇒株になると複雑

Deep Q-Network(DQN

Dueling Architecture

musyoku.github.io

Prioritized Experience Replay

github.com

上記を組み合わせた深層強化学習の1つの手法 ⇒うまくいかなかった

マーケットインパクトを使った学習

  • 出来高と株価の変化を学習して深層強化学習
  • 大型株(今回は日産自動車)の株価で予想
  • 2016年のデータ1年分を使用

収益:3.4%(時期をずらして評価しても一定の収益が出た)

出来高と株価の変化(マーケットインパクト情報)をもとにある程度大型株を学習して評価できるようになった

GMOインターネットの株で評価

収益:8.87%

⇒マーケットインパクト情報で深層強化学習を行えば少しだけ収益を得る予測が可能

ソース公開を通じて分かった非中央集権型アプリケーション(dapp)とは

発表者:折田さん

DApp(Decentralized Application)とは

サービス提供者を信頼することなく当事者間で動作するプログラム

メリット

  • 中間マージンの削減
  • サービス提供者に情報や資産を預けるリスクの排除

スマートコントラクト

  • ロジック・実行結果はブロックチェーンに記録され公開される
  • 利用者はロジックを確かめ結果を確信して実行できる
  • 行基盤:Ethereumが有名

Ethereumとは何か? · Ethereum入門

ブロックチェーン公開プロジェクト

www.gmo.jp

医療機関カルテ共有システム

患者自身で医療機関へのカルテの共有ができるスマートコントラクトサービス

転売抑止チケット

  • 不正転売の抑止とチケットレス
  • 複数業者が相乗り可能
  • チケットを販売代理店が発見したことが保証
  • チケットの転売には所有者自身の鍵の移転が必要

地域トーク

  • 自治体や限定された店舗・施設
  • 限定ポイントを発行できる
  • トークン:ERC20

ERC20

www.tottemoyasashiibitcoin.net

-Ethereumにおけるトークンの標準使用 - 資金到達手段(ICO)に利用されている

トークントレーダー

取引所に預けることなくエンドユーザー同士で直接トレードできる

Indexer:取引所 Maker:売買情報を掲示する人 Taker:約定(売買)注文をする人

GMOブロックチェーン オープンソース提供プロジェクト

https://guide.blockchain.z.com/ja/docs/oss/

AppleのARkitとGoogleの最新のARプラットフォーム ARCore 可能性と応用

発表者:ブイ・ミン・クオン(ベトナム)さん

O2Oサービス向け集客力のあるモバイルARの開発

ARとは

  • 現実空間とバーチャルコンテンツを真空間として融合

なぜモバイルARか?

  • スマホの普及
  • 豊富なモバイルARプラットフォーム登場(Vuforia,Wikitude,ARTooKit,Kudan)
  • Google,Apple ,Facebookの参入

ARKit(Apple)とARCore(Google

  • それぞれSDK無料
  • OSレベルで既存アプリへスムーズに組み込み可能
  • 既に数億台がサポート

ARKit

qiita.com

魔法のホールとどこでもドア の開発

  • ターゲットユーザー:ファミレスチェーンの子連れ家族
  • 印象に残るもの:魔法みたいなもの

vimeo.com

  • ダブルカメラ⇒現実空間とバーチャル空間
    • 2つのカメラの位置と向きを同期する
  • 360度ビデオ
  • Unity上の球場のゲームオブジェクトプログラミング
    • 法線ベクトルの方向変更もしくはテクスチャの裏返処理
    • 法線ベクトル…3次元での面に対し垂直なベクトル
  • シェーダープログラミング
    • メッシュの頂点単位の処理、ピクセル単位の処理
  • オフスクリーンレンダリング
    • 画面に書き込まない描画処理
    • 画像フレームをレンダーテクスチャにレンダリング
    • ドアの面積相当のテクスチャ分だを調整して貼る
    • シェーダーで上記の部分レンダリング処理
  • レイヤー&カリングマスク
    • 特定の1つのレイヤーにあるオブジェクトのみレンダリング
    • リングマスクでレイヤー表示・非表示をコントロ^る
    • 現実空間とバーチャル空間を別々にレイヤーに分ける
    • ドアを通る・戻ることによる表示非表示を判断
  • デプスマスク
  • バーチャル空間から現実空間を見えるようにする
  • マスクされたところにバーチャル世界のレンダリングをしない
  • マスクされたところから現実空間が表示される

ARCore

もともとはTangoプロジェクトがあった

  • 当時はARKit相当の機能を提供
  • マーカーレスAR/MRプラットフォーム
  • 平面検出、モーショントラッキング、領域学習の3つのコア技術
  • 対応端末が少ない

バーチャル案内スタッフによる案内

[https://www.s lideshare.net/bmkhuong/ar-google-tango-73960767:embed:cite]

特徴

  • 特定センサーが不要
  • モーショントラッキング
  • 平面検出⇒マーカーなしでも平面定着精度が高い
  • 環境光推定
  • 対応端末はPixel系、GALAXY S8など(まだ少ない)

developers.google.com

まとめ

  • 機能面は同等
  • 端末対応台数はARKitのほうが多く、ビジネス面で早く展開できる

参考

recruit.gmo.jp

fr.slideshare.net