radioc@?

レディオキャットハテナ

【勉強会メモ】Osaka Mix Leap Study #21 - Server Side Kotlin

yahoo-osaka.connpass.com

  • 日時:2018/08/09(木) 18:30 〜 21:00
  • 場所:ヤフー株式会社 大阪グランフロントオフィス

KotlinといえばAndroidの開発言語というイメージが定着しつつありますが、実際には今回のLTでも話がありましたがマルチプラットフォームに対応した言語です。サーバサイドKotlinの話は時々聞きはしますが、どうなんだろう?ということで興味を持って参加しました。

実際にはDBアクセスまわりなど、サーバサイドを全面的に置き換えるにはまだ課題がありそうですが、ヤフーさんのように既に部分的にKotlinへの置き換えが進んでいる事例は思ったよりありそうだと感じました。イメージ的にはAndroidアプリ開発者がサーバサイドもKotlinで書きたいというモチベーションで導入しているのかと思っていましたが、PHPからKotlinへの置き換えというケースは少し意外でした。しかし現地の他の人からも少し話を聞いてみると言語仕様的にPHPからKotlinはそれほどハードルが高くないとのこと。確かにKotlinの型推論などはPHPerからするとJavaよりとっつきやすいものなのかもしれません。

今回、遅れて参加したりいろいろあってメモが雑ですがご容赦ください。

Kotlinのサーバサイド事情を俯瞰する

@ngsw_taro さん

Ktor(KotlinのWebフレームワーク)

github.com

Exposed(DBアクセスライブラリ)

github.com

Koin(KotlinのDIライブラリ)

github.com

2. Spring Framework

  • Kotlin x Spring
  • Web Fluxに着目

※メモ

qiita.com

  • Reactorのコルーチン
  • zip とかのAPIを覚える必要ない

※メモ

www.cresco.co.jp

3. Spring Fu

github.com

まとめ

  • Spring Bootは王道
  • コルーチンのおかげでReactorをしらなくてもOK
  • Spring Fuは開発途上
    • DIが内蔵されているのがいいかも
    • REST API前提
    • Open APIで使用を定義してからコントローラのコードを自動生成するのが普通?
  • 気になるのはDBアクセス周り
    • (実際のプロジェクトではExposeはまだ使いにくい)

サーバーサイドKotlinとSpring5の Kotlin support

@bulbulpaul さん

speakerdeck.com

Yahoo!カレンダーの技術ポートフォリオ@Server Side

  • インフラ:openstack⇒Cloud Foundryとk8s
  • 言語:phpJava⇒KotlinとJava
    • 最終的にはKotlinだけにしたい

なんでKotlin?

  • 制約と規律
    • Null Safe
    • sealed class
  • 高い利便性
    • 型推論
    • Smart Cast
    • data classが便利
    • IDEのサポートが強力
  • 巨人の肩に乗れる
    • Javaのエコシステムを使える

⇒開発が楽しい!

利用技術

  • Javaライブラリ
    • Athenz(認証/認可)(米Yahoo製)
    • Pulsar(MQ)
    • Hystrix(サーキットブレーカー)
  • Kotlin対応ライブラリ
    • SpringBoot(Fw)
    • Moshi(Json

ライブラリのKotlin対応

  • サポートされていないからKotlinが動かないことはない
  • Kotlinらしいコードで書けるための処理対応
  • 場合によってはJavaとの境界でNull Safeが守られない
  • GsonではNullSafeの定義をしてもNullが入ることがある

  • Spring Boot

  • Spring Fu
  • Spring Initializr
  • Spring Boot v2

Kotlin Support

  • idikomatic Kotlin code
  • Annotations
  • RouterFunctions
  • Bean definition DSL

Kotlinらしいコードが書ける

  • Extension functions
  • Reified type parameters
  • Javaコンパイルで消えてしまうジェネリクスの型をinline展開して処理中に参照する
  • Classで受け取る処理が多いので細々としたところの記載がKotlinらしく書ける

まとめ

  • SpringBootはKotlinの特性を邪魔せずに書ける
  • Kotlinはサーバサイドでも十分活用できる
  • Javaのライブラリも問題なく使える

LT

KHipster ~JHipsterで始めるKotlin Web プログラミング~

@s_kozake さん

speakerdeck.com

JavaのScaffoldツール(例えばSpringBoot+Angularの環境のようなアプリの雛形を自動生成してくれる)JHipstet の紹介と、それのKotlin版であるKHipsterの紹介。

github.com

KHipsterはまだ開発中(現在 v0.5.0 )なのでデフォルト設定を変更すると動かないので注意が必要とのこと。

multi platform kotlin

Multiplatform Projects - Kotlin Programming Language

Kotlinのマルチプラットフォームについて

マルチプラットフォームのサービスのドメイン層をDDDで設計してKotlinで実装するための考え方について本家サイトに公開されている解説を元にまとめた内容の発表。

  • 環境構築が大変
    • gradleとwebpack連携など

javaタヒねとさけんでた

@furusin_oriver

Kotlinのコードの書きやすさ、見やすさについて。 Arrayの使い方でJavaだと for(int i = 0; i < list.size(); i++){ } のような煩雑な書き方をしないといけない。Kotlinは快適という話。

【勉強会メモ】総関西サイバーセキュリティLT大会(第10回)

sec-kansai.connpass.com

  • 日時:2018/08/08(水) 19:00 〜 21:00
  • 場所:MOTEX大阪本社

セキュリティ現場の表話、裏話

富士通セキュリティマイスター かやまこうせつ さま

  • LTのメッセージ
    • 縁の下のエンジニアのいいとこ探して応援できる社会へ何かできないか
  • 葛藤
    • セキュリティを全面に押し出したかっこいいところや、危険を煽る内容がクローズアップされすぎていないか

1. ランサムウェア Wanna Cry

  • うっかり払ってしまいそうな身代金
  • 現場「あのコンピューターもつながってたの?」
  • バスの掲示板の裏で動いているPCなどもファイル共有設定されていた

裏:つながる時代を顕在化させたWannaCry

2. 人材育成

  • セキュリティ人材育成の取り組み
  • 現場は人材育成しているつもりはない

裏:人材育成は場づくりから

  • フィールド領域
    • 現場の人
  • エキスパート領域
    • セキュリティアナリスト
  • ハイマスター領域
    • シニアセキュリティ

ハイマスターが下から現場を支えるようにする

3. サイバーレンジ

裏:サイバーレンジは場の一つ

  • サイバーレンジを買うだけでなくそれをどうやって扱うか

人を中心とした設計

  • タレントは自分の範囲でしか仕事をしない
  • ナレッジをどうやって集めるか
    • 貯める場所を用意しないと散在

※メモ

tech.nikkeibp.co.jp

4. 公衆無線LAN

www.itmedia.co.jp

www.sankeibiz.jp

利害関係者を洗い出して議論するのが大事だ。法整備という話も出てくるかもしれない

裏:そんなん言ったかなぁ

  • 利害関係者を集める
  • 緩和するための法整備もしてはどうか

5. 国産プラットフォーム

  • 日本vs海外
    • 減点vs加点
    • 障害対応vsいいね
    • ムエンゴvs谷町衆
    • 粗相無いようにvsチャレンジ

第一部まとめ

縁の下のエンジニアの裏の頑張りを拾い続けます

第2部 セキュリティ競技 Hardening 100 Value x Value に参加してきた

  • 競技の説明
  • 初動・体制・情報共有・チームワーク
  • インシデントレスポンス
  • ビジネス稼働率向上の取り組み
  • ログ分析
  • Hardening、進捗管理
  • マーケットプレイス活用の試み
  • ビジネス活性化の試み
  • 総括

内幕はそんなきれいじゃない

13時半までリモートデスクトップが繋がらなかった

⇒判断に徹する

オチ:RemoteDesktopツールのバージョンが違う

  • 技術者と同じ目線で会話できるマネージメント層
  • 技術わかる、縁の下のエンジニアの裏まで理解してあげられるマネ大事
  • たましいは現場に宿る

締め

  • 現場ではいろんな人がいろんな視点で頑張っている
  • できて当たり前じゃない
  • だからそんなエンジニアを応援したい

トークセッション セキュリティ競技の意義 

Yahoo太田さま・富士通かやまさま・tktkのSeraphさま

以下のテーマについてトーク。詳細は割愛。

CTF

キャプチャー・ザ・フラッグ

CTFの例

※メモ

セキュリティ競技CTFって何?

Hardeneing

  • 本家(年2回主に沖縄)
  • Mini(不定期)
  • Micro(不定期)
  • Yahoo(年1回)

情報危機管理コンテスト

wasforum.jp

CYDER

CYDER | ナショナルサイバートレーニングセンター | NICT-情報通信研究機構

アルティメットサイバーセキュリティクイズ

www.seckansai.com


関西の産官学による情報セキュリティ人材育成の取組(案)

藤田さん

関西で情報セキュリティを取り組んでいる人にもっと光を当てたい

  • 政府方針
  • 戦略マネジメント層の育成・定着
  • サイバーセキュリティ戦略⇒東京の話

地域でこそ、この問題は深刻

  • 地域で情報セキュリティセンスをもった人材の裾野を広げることが重要

具体的取組

  1. リソース足りないならみんなで補完しようというカタチづくり
  2. 学校や企業では教えてくれない、原理・原則講座シリーズ
  3. 情報セキュリティ人材へのスポットライト当て

今秋スタート予定。完全ボトムアップ

IT知識ゼロの組織がマルウェアに感染した話

村上さん(京都産業大学2回生)

  • 委員会の会議の場でPCが壊れた
  • 明らかにランサムにやられてそう

対策

  • ネット切断、電源切断
  • 通常の業務と同じように直属の先輩⇒学校に報告

解決しなかった

  • 幹部→学生部→情報センター→PC対策
  • 学生部で立ち消え
    • 曖昧な報告

CSIRTがマスト

  • インシデント対応は通常の組織構造では対応が送れたり適切に行えない危険
  • 組織にとらわれない動ける人
  • インシデント対応ができる人
  • 上の人や関わったことのない人たちでもビビらず対応しないといけない

裁判のIT化に立ち向かう

伊藤さん(弁護士)

日本の裁判所の文化

  • Fax、印鑑
  • 事件管理システムはClose環境で使いにくい

IT化

  • 3つのe
    • e-提出
    • e-法廷
    • e-事件管理

ハードル

  • 法律マターか最高裁判所マターか
    • Web会議による審議→裁判の公開?
    • 日本は本人訴訟が多い
  • IT化対応できない人は紙?
  • セキュリティが問題になる

便利になった先に何があるか

  • 判決のデータベース化
    • ビックデータ活用
  • 利便性とセキュリティ

セキュリティと利便性のあるシステム作れる方

  • 最高裁が求めています
  • 実装をしている皆様の声が必要

クレジットカードを不正利用された話

MORITAさん

speakerdeck.com

タイムライン

  • 10月にカード会社から電話
  • 8月に言った

被害

  • 10日間
  • 80件
  • 明細3ページ

  • Google Midasという謎の決済情報

    • 1ドルx40連打
  • Facebook→ゲーム
  • レンタル倉庫→滞在先の近く

blackhatの出張

  • セキュリティのエンジニアがセキュリリティの出張でセキュリティの被害に…

決済に必要な要素

  • クレカ番号
  • 有効期限
  • セキュリティコード

店員がバックヤードでカード情報取得

対策

  • セキュリティシール(開封防止シール)
    • セキュリティコードを隠す

まとめ

  • ITセキュリティも大事だがまず物理セキュリテイ
  • 内部犯行も考慮したセキュリティ脅威分析は必須
  • 大手クレカ会社のサービスの信頼性

マッスルタワーに挑んでみた

chocopurinさん

Micro Hardening

ドラゴンボールに例えると

参加動機

  • 技術的な刺激
  • 本家Hardeningはスケジュール合わず

当日

まとめ振り返り

  • 45分の短い時間だがいろんな分野の攻撃がくるのでインターバル時の疲労感
  • 回を重ねるごとに対策ができているのを実感できる
  • 事前資料はよく読む
  • システム運用は知っておく

【勉強会メモ】re:Union 2018 Osaka

jawsugosaka.doorkeeper.jp

  • 日時:2018-08-05(日)10:00 - 19:00
  • 場所:エムオーテックス新大阪ビル

大阪北部地震で中止になったAWS Summit 2018 Osakaで予定されていたセッションを再構成した、JAWS-UG主催の仕切り直しイベントです。残念ながら全てのセッションに参加することはできませんでしたが参加したセッションだけメモを残しておきます。

個人的にはLift-and-Shiftの事例から始まり未来のエンジニアにまで言及されていた部分が刺さりました。あとはNintendo SwitchもガッツリAWSを使っているんだなぁというのも改めて時代を感じました。

SUMMIT TOKYO re:cap〜基幹システムの移行とクラウドネイティブ構築、それぞれの事例のお客様をお迎えして〜

亀田 治伸様(アマゾン ウェブ サービス ジャパン株式会社)

Summit Tokyoで発表された東京リージョン対応サービス

大阪リージョン

Day1 Keynoteサマリー

  • リージョン間の通信はインターネットに出ることがあったがinternalな通信ができるようになった
  • Cloud Journey
  • Lift-and-Shift
    • システムのクラウド移行
    • いきなりコスト削減を目指さない
    • 将来の最適化&進化

Cloud + Community ⇒ 情シス2.0

友岡 賢二様 (フジテック株式会社)

The End of Corporate Computing

  • 電気の発電機を持つ人は今やほとんどいない
  • データセンターを持っているのは発電機をもっているようなもの

伝統的手法での企業データセンター

  • 自社でつくるとめちゃくちゃ大変でコストかかる

固定リソースの限界

  • 好きな時に好きなだけ立ち上げてあとで消せる
  • Pay per use
  • 拡張性・伸縮性

調達コスト

  • 構築に最低6ヶ月ぐらいかかる

フジテックの情シス(88 servers)事例

  • 初期費用
    • -95%
  • 運用費用
    • -42%
  • サーバレス
    • 19,600円/年
    • Lambdaにしたら100円/年

クラウドジャーニー

  1. Lift & Shift
  2. Re-Sizing & COst Optimization
  3. Serverless

Enterprise IT's Challenges

  • 人材育成…アプリ、インフラの分離運営の限界
  • DBMSロックインとクラウド化への険しい道程
  • AWS大阪”ローカル”リージョンの活用と発展

E-JAWS-UG

  • 120企業
  • コミュニティにエンジニアを放流しよう

Lift-and-Shift

  • システムの維持コスト最適化
  • 生産性の向上

AWS Well-Architected

aws.amazon.com

TCO計算ツール

  • Cloud Economics(投資効果算定支援)

aws.amazon.com

AWS Support

  • お客様をサポートするチーム
  • Trusted Advisor

aws.amazon.com

クラウドネイティブ


高橋 真知様(株式会社 Stroly)

stroly.com

位置情報サービス - ターゲットやテーマを決めたマップ - 看板や紙で配布→もらっても位置がわからない→Webサービス化 - アナログ地図は世界中にバラバラ→位置情報と地図を連動させる

誰でも地図を一括登録

  • アプリではないのですぐに利用できる

京都市の事例

  • 260箇所の地図看板にQRコード設置
  • 誰がどの看板を見たかもわかる

AWSサーバレスアーキテクチャで実現

参考

www.slideshare.net


クラウドネイティブなアプリケーション開発

  • 仮説立案⇒開発⇒検証⇒くりかえし

AWS loft tokyo(目黒)

aws.amazon.com

機械学習

  • S3でデータを捨てる必要がなくなる
  • 蓄積されたデータは分析されビジネス強化に使われる
  • データ分析⇒ビジネス設計⇒製品・サービス設計⇒提供開始⇒くりかえし
  • 機械学習がサイクルを加速させる

BUILD ON

参考: AWS BUILD ON


参考

AWS Summit Tokyo 2018 資料・動画一覧 - |AWS


Lift-and-Shift による失敗しない AWS 移行のやり方

大石 良様(株式会社サーバーワークス)

  • 2007年AWSのテスト利用を開始
  • 2008年に社内サーバ購入禁止
  • 2009年AWS専業インテグレーター

日本赤十字AWS化支援事例

www.serverworks.co.jp

AWSパートナー

  • Premier
  • 上位0.3%

どうやってクラウドに移行するか

Lift-and-Shift

  • 既存のサーバーやシステムをで移行
  • クラウドらしいサービスを活用してビジネスのデジタル化を推進

いきなりキラキラに移行しようとするとやけどする

  • 運用手順変更
    • 合意形成、手順作成、組織変更などが必要
  • AWSのアップデートの速さ
    • やっている途中で新しいサービスが出たりするとやる気を失う

AWSの隠れたメリット

  1. ネットワーク移行しやすい
  2. 仮想マシンが移行しやすい
  3. アプリケーションが移行しやすい

関西(西日本)の移行事例

災害はいつくるかわからない


川村 暢様(株式会社NTTスマイルエナジー)

オムロンとの合弁会社

nttse.com

Lift-and-Shit戦略を実行した実例

AWSを使おうと思ったきっかけ

  • 最初はプライベートクラウド
  • ビジネスのスピード感にインフラが追いつかなくなった
    • センサーIoT→センサー数が数万に急増
    • ライセンス料がかかる
    • AWSを使おう

AWSを使ってみた感想

  • コスト面
  • 環境を簡単につくれる
  • あとで増減できる
  • いったん作ってみて出せる
  • エンジニアのモチベーションが上がった

Lift-and-Shiftをやってみてどのように評価されているか

  • 少なくとも数年単位のスケジュールでやっていたものが5ヶ月でできた
  • ほとんどインフラを知らないメンバーが2,3週間で仮想サーバの移行ができた

今後の展望

  • 再生可能エネルギーの割合が増えてきている
  • 一極集中型の発電所が分散型になると予想
  • IoTのようなサービスが必要
  • AIのようなものも必要になる

キラキラ系を目指す


金融機関の事例

琉球銀行

  • Lift
    • 分散系サーバ、Webサイトの移行
  • Shit
    • セキュリティ対策としてログを分析
    • FAQのAlexa対応

Cloud Automator

  • AWS運用を自動化

cloudautomator.com

新しいアーキテクチャへの移行支援

なぜクラウド、なぜAWS

人材価値の変化

  • エンジニアの価値が相対的に増大
  • 若者層の価値が相対的に増大

不足する人材

  • 優秀なエンジニア
  • 若手人材

企業の変化

  • 会社が社員を選別する時代から社員が会社を選別する時代へ
  • 企業は若手がおもしろがり未来のあるテクノロジーを選択する時代へ

何を自社で行い何を外部に委託するか→AWSをIT基盤にする


※参考

クラウドで実現する「開発レスアーキテクチャ」 3 つの事例

Nintendo Switch (TM) 向けプッシュ通知システム「NPNS」

渡邉 大洋様 (任天堂株式会社)

※資料

Nintendo Switch (TM) 向けプッシュ通知システム「NPNS」

NPNS

  • プッシュ通知システム
  • Nintendo Push Notfication Service
  • 常時接続を使用

NPNS利用例

  • フレンドのオンライン通知
  • Nintendo みまもりSwitchでの設定変更
  • ゲームDL後に完了メッセージ

性能要件など

  • スケーラビリティ:1億台に備える
  • 可用率:AWSリージョン規模の障害未満は可動
  • 遅延:数秒(正常時)、数分(異常時)
  • インフラ費用:適切な範囲に抑える

構成要素

  • XMPP Cluster
    • Switch向け常時接続、通知
  • Consumer API
    • ID管理
  • Provider API
    • サーバ間連携向け、通知送信要求

※下2つはREST API

XMPP Cluster採用技術

  • ejabberd
  • Erlangで書かれたOSS
  • クラス構成のXMPPサーバ
  • 大規模な利用実績が多い
  • RDS for MySQL
  • 高負荷時のレプリ遅延が少ない
  • ElastiCache for Redis

Consumer/Provider採用技術

  • RoR
    • 社内での開発・運用実績から
  • Amazon Aurora
    • RDS for MySQLから乗り換え
  • 柔軟なスケール

その他

  • Amazon SQS
  • ELB
  • Route53
  • Consul
  • クラスタ動作、ネットワーク分断に強い
  • ejabberdのFailure Detection

インフラ設計

クラウド選定

  • AwsをIaaSとして利用
    • 社内実績
    • メンバーの経験・スキル
    • マネージド・サービス
  • 配置
    • シングルリージョン
    • ネットワーク安定性、リソースの利用効率向上
    • Multi-AZ

XMPPクラスタ分割

  • スケーラビリティ
  • 安定性
  • 障害の局所化
  • 運用効率
    • 小さくデプロイ(カナリアリリースできる)
    • パラメータをちょっとずつ変えて様子をみるなど

XMPPのロードバランス

  • ELBは不採用
    • Classic Load Balancer
      • 常時接続に使えない
    • Application Load Balancer
    • Network Load Balancer
      • 検証次期とリリース次期があわない
  • 直結+DNSラウンドロビン
    • Route53に全ノードのAレコードを登録
    • ConsulがRoute53のレコードを更新
  • ディスカバリは用意しない
    • 外部向けI/Fは増やさない

技術詳細

クラスタ維持

ejabberdを2方向から死活監視

  • Consul
    • すぐ反応
  • Auto Scaling
    • 慎重に様子見

デプロイ

  • Blue/Green Deploy
    • ASG単位でドメイン切り替え
    • 新旧両方を1つのクラスタ
    • 旧ノードからユーザーを一定レートで追い出す=ドリップ処理

ドリップ処理

  • スムーズな切り替え
    • 接続を少しずつBlue→Greenに移動
  • 常時接続では接続処理が最も高負荷
    • 再接続タイミングを分散させたい
    • 切断期間は短くしたい
  • やっかいな点
    • デプロイが長時間化→今は約2時間
    • インスタンス費用がその間2倍に

ドリップ処理の自動化

  • Auto Scaling→Lifecycle Hook→CloudWatch Events→Run Command→EC2 Instance

省メモリ化

  • インフラ費用を抑えたい
    • ejabberdを省メモリ化
      • OpenSSLのメモリ削減&開放
      • hibernate前にリソースを開放
    • r3.largeで1台あたり72万接続
  • ところが
    • CPUもメモリも秋があるために接続数が増えない
  • Security Groupの制限を回避
    • セッションの上限にあたっていた
    • Security Groupを無効に
    • 限界まで設定可能に
  • セキュリティ 外部アクセスはNetwork ACLsで制限

TCP切断対策

  • 途中経路でのいy増切断を防ぐ
    • 無通信期間にKeepAlive(L4,L7)
    • 最適感覚を本番環境で実験
  • TCP KeepAlive(L4)
    • TCPヘッダのみの特殊パケットを定期的に送信
    • time:ユーザーごとに可変
    • interval x probes:クラスタ間で対照実験
      • 10 x 2→15 x 10
      • 切断を40%削減
  • アプリケーション KeepAlive (L7)
    • データを入れたパケットを定期的に送信
    • 送信間隔:クラスタ間で対照実験
      • 送信無し→65秒間隔
      • 切断を50%削減

ふりかえり

12月の同時接続数増大→通知送信数は削減できている 規模

  • 約700万同時接続
  • 約2万通・秒
  • 約l200億通/月

AWSの異常 - 発生した異常 - 局所的なネットワーク異常 - RDS I/O遅延 - EBS遅延 - EC2インスタンス異常停止 - NPNSサービスへの影響 - AZ冗長等によりサービスは正常稼働を維持

Erlangでの運用

良かった点 - 安定性 - VM,クラスタ、プロセス監視ツリー - メモリ効率 - 並列性 - hot code loading

ejabberd改造内容

  • 並列性、安定性、対象外制
  • 省メモリ化
  • 独自機能

まとめ

  • 必要要件を達成
  • AWS起因のサービス停止は無かった
  • サービス規模は順調い成長

今後の展望

  • NLB
    • Cross-AZ指定ができるようになった今こそ
    • XMPPクラスタロードバランサに利用
    • consulを取り外してシンプル化
  • Fargate
    • Consumer/Provierに採用

【読書メモ】ライト、ついてますか

ライト、ついてますか―問題発見の人間学

ライト、ついてますか―問題発見の人間学

副題に「問題発見の人間学」とある通り、問題に向き合い、解決に向けて思考を巡らせるための考え方を人間学の側面からやや辛辣なユーモアを交えながら解説している。

初版は1987年の古典的名著だが、出版年は意識して読むほうが良い。Amazonのレビューにもいくつかコメントを見かけたが、まず翻訳がわかりづらい。また、エレベーターや計算機という言葉は現代のそれとはやや違うものとして書かれているので注意が必要。これらは出版された年代を考えれば仕方ない面もある。それを考慮して読めば、問題解決に向けた普遍的な考え方や思考の巡らし方について著者が述べる本質的な部分を読み取ることができて問題解決力を養うためのヒントが得られるはずである。

何が問題か?

新築タワービルのエレベーターが遅いというエピソード。エレベーターが遅いのが表面的な問題ではあるが、ビル入居しているオフィスの従業員、オフィスの経営者、ビルのオーナーなど、立場によって問題の本質は異なる。

  • 「何がまずいか」をどう決めるか?
  • まずいのは何か?
  • そのために、何ができるか?

問題とは、望まれた事柄と認識された事柄の間の相違である

望まれた事柄か認識された事柄かのどちらかを変えて相違をなくすことで問題はなくなる。

問題は何なのか?

ある11件の資産の入札プロジェクトのエピソード。それぞれの資産には様々な条件があって、入札に関わる4社がそれぞれ価格をつけると400万通りになり、その組み合わせの中から最も最適なものを選ばなければならない。

解法を問題の定義と取り違えるな。ことにその解法が自分の解法であるときには注意

複雑な問題を解くことが問題の定義ではないということ。

正しい問題定義が得られたという確信は決して得られない。だがその確信を得ようとする努力は、決してやめてはいけない

「究極の解答」は存在しないが、「問題は何か?」を問い続けることが重要。

問題は本当のところ何か?

すべての解答は次の問題の出所

ある問題を解くために状態を変えると別の問題を発生させることになる。 問題の転嫁 によってより小さな問題に状態を変えることができるが、たいていの場合は新しい問題が無意識的に作り出される。

新しい視点は必ず新しい不適合を作り出す

解決策を実施する前にこの視点を持っておく。不適合とは「その解決策とつき合わなければならない人間とうまく合わないような解決策」のこと。問題の当事者ではない「設計家」はたくさんの不適合を作り出してしまう。

同じ言葉を同じように理解しているという保証は決してない

行間を読んで自分たちの都合の良い解釈をしたり、単語の使い方1つで全く異なる意味に取れてしまい大きな損失を出すこともある。言葉を表面的なものから意味のあるものにするためには「言葉遊び」や「辞書方式」のような「社会的過程」が必要である。

それは誰の問題か?

他人が自分の問題を自分で完全に解けるときに、それを解いてやろうとするな

自分たちの問題は自分たちが一番理解しているので自分で解くほうが良い。

もしある人物が問題に関係があって、しかもその問題を抱えていないなら、何かをやってそれをその人物の問題にしてしまおう

反対に自分たちでどうしようもない問題であれば、「私の問題」を「われわれの問題」に変えてみる。学生の増加によって大学の駐車場が不足してしまったので、専用の駐車場を持つ学長も問題に巻き込んでしまおうというエピソードで語られている。ただし、立場や考え方が違うとうまくいかないことも多い。

変化のために自分をせめてみよう、たとえほんの一瞬でも

自分自身の考え方を変えてみることで問題が簡単に解決することもある。

もし人々の頭の中のライトがついているなら、ちょっと思い出させてやる方がごちゃごちゃ言うより有効なのだ

書籍のタイトルにもなっている車のライトの問題が出てくる。設計者や技師は何もかも自分が面倒を見なければならないと考えて問題を複雑にしてしまう。実際には「ライト、ついていますか?」と言ってやるだけで十分な問題だったりする。

それはどこからきたか?

問題の出所はもっともしばしばわれわれ自身の中にある

入国手続き中に書類のコピーが一部紛失していることが発覚し、役人側が紛失した可能性も否定できないにもかかわらず、官僚主義的に書類の不備として扱われそうになるというエピソード。

自然に起きた問題は2つの理由で最悪なものである。

  • どうしようもないという気持ちに陥りがち
  • 自然は我々に対して無関心で動機をもたないゆえに手に負えない問題を引き起こす

この問題はどこからきたのか?

という問いかけをすることで

問題を「自然」の領域から引き出して、建設的な思考と解決への行動、という領域に移すことができる。

著者らの経験によれば、問題が実は問題解決者自身に起因する割合は53.27%に及ぶ

「この問題はどこからきたのか?」を問いかけたとき、問題は「どこでもないところから来ている」可能性がある。正確にいえばそれは「その問題自体からきた問題」である。このようなどこでもないところから来ている問題を解決するためには、問題を出所に送り返す。

試験のような問題は背後に設計者がいて、むずかしいように設計されており、その問題解決はパズル解決となる。このような問題にどっぷりと浸かった者にとっては、自明な解答のほうが混乱させる場合がある。

われわれはそれをほんとうに解きたいか?

われわれはたいていの場合、何か問題を抱えていると感じている。

問題というのは人が望むところと、物事がどうなっているように見えるかとの差である

自分が問題を抱えていると知っているかどうかは感じかたの問題だが、何が問題かを知ることは別のことだ。何が問題かをわかっていれば解決するのは易しいが、分かっていると思っていても間違いのことがある。他人のために問題を解いてやるときは、たとえ計算機を駆使して問題を解いたとしても、その答えを知るまでそもそも何が問題かをわかっていないものだと認識しておくべきである。

ちょっと見たところと違って人々は、くれといったものをだしてやるまでは何がほしかったか知らぬものである

何がほしいか完全に知っていたとしても、問題はそれで終わりにはならない。時には問題のことを忘れてしまうのが最善の場合もある。

あとから調べてみれば本当に問題を解いてほしかった人はそんなにいないものだ

どんな問題であれ、本気で問題に手を付けようとする前に必ず発してみなければならない問いが

私はそれを本当に解きたいか?

である。解答が得られてみたらそれはちっともほしいものではなかったということもある。例えば問題解決者は、問題が解けたために失業するかもしれない。

魚、水を見ず

人は 順応する ものなので、問題について考える時、順応した物事は考慮から除外されやすい。問題解決者は他の関係者が無意識にその中で泳いでいる「水」をはじめから見ようと努力しなければならない。その水は問題が解けたとき、砂に変容するかもしれない。

まず汝自らに対して真実なれ。

問題解決は決して道徳的に中立の活動ではない。そのため問題解決者は問題を解く前から解答に至るまで、道徳的側面について考えてみる必要がある。

参考

68601090.at.webry.info

【勉強会メモ】関西Node学園 3時限目

nodejs.connpass.com

  • 日時:2018/08/03 (金) 19:00 〜 21:30
  • 場所:LINE KYOTOオフィス

今回も多種多様なテーマでどの発表もためになる内容でした。個人的にはpuppeteer、Serverless Frameworkあたりは気になってはいたものの手が出せていない領域だったので、具体的な活用方法が聞けたのはとても良かったです。

LINEの京都オフィスに初めて行ってきましたが、地下組織のアジトみたいなかっこいい雰囲気でした。

node-canvasでアニメーションGifをつくって遊ぶぞ!

kawasako3 さん

www.slideshare.net

  • ガチャ演出みたいのがあるといい
  • トークに時間軸のあるコンテンツをカジュアルに送りたい

ライブラリ

github.com

github.com

アニメーションを作る基本

  1. 最初に目標値を決める
  2. どのくらいの長さにするか決める
  3. フレーム毎に描画する
  4. 変化に緩急をつける

LINE Messaging API で動かす

GifアニメーションBOTから送れない

⇒mp4で作る

学び

  1. Photo movie 的なこともできそう
  2. ただし事前生成じゃないと厳しいかも
  3. Messaging APIではGifアニメは使えない

サンプル

github.com

N-APIとPromise

@mochiya98

N-APIとPromise - Google スライド

C++ Addons

C++連携

  • 速度がほしい
  • jsではできないOSの機能を呼び出したい
  • 全てをjsで書きたい

実際に書いてみると全然わからん

  • V8理解していないとよくわからない概念が多い
  • V8に依存している
  • v8バージョンアップのたびにビルドが必要

N-APIの登場

  • わかりやすい
    • 型がシンプル
  • V8に依存しない
    • 他のjsエンジンでも動く
  • V8バージョンアップの旅にビルドしなくてもいい
  • 10.0.0からstableになった

サンプル

github.com

N-API と Promise

何がしたいか

  • 諸事情でLZW圧縮の亜種をnodeで扱う
  • jsで組んでみるも遅い
  • child_processも遅い

⇒N-APIで組んでみたが問題発生

基本的に同期的

  • イベントループの中で実行
  • 重い処理はイベントループを止める

async_work を使って非同期にする

  • ExecuteCallback
    • 非同期で実行
    • イベントループの外で実行
    • ここで重い処理
    • イベントループの外なので napi_hoge() 関数を呼ぶと落ちる
  • CompleteCallback
    • Excuteが終わるとイベントループのキューで実行
    • イベントループの中で実行
    • jsにcallbackしたり戻り値を作る

非同期にするうえでの注意点

  • C++上で変数のポインタを持っていてもjsの参照カウンタは増えません
  • 自分で参照カウンタを増やしておく

N-APIのPromiseはそんなに難しくないので割愛

参考

blog.kazu69.net

LINEで馬券を購入する

@sbntaminif さん

speakerdeck.com

馬券ネット購入サービス

※参考

noanohakobune.hatenablog.com

LINEで馬券を買ってみたい

  • 馬券を購入するアプリを作りたい

APIHeadless Chrome を使う

developers.google.com

※日本語はところどころ間違いがあるので英語のほうがおすすめ

Headless Chromeとは

  • ヘッドレスで動作する=UIなしで実行
  • Chrome59がインストールされていれば使用可能
  • Chrome機能はほぼ使える
  • コマンドからChromeをUIなしで実行

puppeteer

  • Chromeチームが開発
  • NodeJSでHeadless Chromeを操作するライブラリ
  • Chrome DevToolsの上から操作するAPI
  • 「パペティア」と発音

github.com

Chromeを自動で動かして馬券購入まで

  • await地獄
    • どうしてもリクエストを待つ必要がある
  • コマンドを叩けば馬券が買えるAPIができた

しかしこのMacでしか使えない⇒このAPIをサーバで動かせるようにしたい

  • Hedless Chromeはどの環境でも動く
  • puppeteerはNode v.6.4から
  • AWS LambdaやGCPで動く

Lambdaで実行

github.com

AWS管理コンソールからしか使えない⇒API Gatewayから呼び出す

  • タイムアウトが2分⇒メモリの制限?うまく動かない
  • LambdaからLambdaをコール

どこからでもAPIを呼び出せる⇒ネットワーク経由ならAPIで馬券を購入可能

LINEでAPIを呼び出す⇒LINE Messaging APIを使う

  • 友達追加やメッセージ送信のイベントをトリガーでWebHookを実行
  • LINEに送信した値をAPI GatewayからLambdaに渡す

⇒買えるようになったが送信のみ

応答メッセージ機能

  • メッセージを送ったら1回だけ返却
  • パラメータの中のユーザーIDを使う
  • 自由にユーザーに送信するPush APIは有料

実践編

puppeteerでつまづいたこと

  • 範囲外の要素クリック
  • 画面外の要素のクリックが発火しない
  • 画面を大きくする

waitの使い分け

  • waitFor
    • 指定した時間まで待つ
  • waitForNavigation
    • 引数なし
  • waifForSelector

アピール編

Hedless Chromeの魅力

www.youtube.com

  • 大きな可能性を秘めている
  • どんなWebサービスでもAPI化できる
  • 普段ネットサーフィンしているところを自動化できる
  • APIにすればいつでも呼び出せる
  • 夢が広がる

Warning

岡崎市立中央図書館事件 - Wikipedia

  • 常識的にやりすぎない範囲で

動画で強く話されていること

  • この話はテスト自動化の話ではありません
  • 自動化することができる
  • 普段の作業を自動化する

これこそエンジニアリング⇒自動化やっていこう

AWS Serverless Express 入門

AWS Lambdaを使ってExpressを一瞬で公開する方法

@nkgrnkgr さん

speakerdeck.com

テーマ:AWS Serverless Express

そもそもServerlessとは?

サーバレス・コンピューティング - Wikipedia

Serverless Platform

  • AWS Lambda
  • Azure fuctions
  • GCP CLOUD FUNCTIONS

AWS Lambda

  • pros
    • 1ヶ月100万リクエストまで無料100Mリクエストまで0.2US$
    • 開発者が実行環境のサーバーを準備せずコードをデプロイするだけ
    • HTTPリクエストなど様々なイベントをトリガーに関数を実行する
    • オートスケール
  • cons
    • 初回起動にやや時間がかかる
    • デプロイできるファイルサイズが50MB
    • 1リクエストあたりの最大実行時間が300秒

AWS Serverless Express

github.com

  • LambdaとAPI Gatewayの上にExpressを使用してサーバレスアプリケーションとREST APIを実行できるAWS公式ライブラリ
  • Express のMiddlewareに追加するだけでLambdaで実行可能になる

How to Use

  • npm install するだけ
  • awsServerlessExpress.proxy をかます

LambdaへのデプロイはServerless Frameworkを利用

serverless.com

  • npm install でインストール
  • serverless.ymlで設定

参考

qiita.com

ライブコーディング(省略)