Pixel Pedals of Tomakomai

北海道苫小牧市出身の初老の日常

今日は YAPC::Kyoto 2023 前日祭の日です

土俵に来た ので、自分用のメモを残しておきます。

オープニング

  • 3 年ぶりのオフライン開催
  • 今日は他の部屋で別のイベント ( 新卒説明会、学会 ) をやっているので、お静かに
  • CoC 遵守
  • 困ったら yapc-kyoto-2020-core@googlegroups.com へ

PHP8によるデザインパターン入門 / 遠藤太徳さん

  • GoF
  • 歴史
    • 起源 A Pattern Language 建築の本
    • Using Pattern Languages for Object-Oriented Programs 論文
    • Gang of For / Erich Gamma, Richard Helm, Ralph Johnson, John Vlissile
    • Design Pattern 書籍
    • 完全なプログラムが生成できるとは主張していない ( 建築の方は完全な建物ができるらしい )
    • 生成、構造、振舞のパターン
  • PHP5, PHP7, PHP8
    • Personal Home Page Tools が起源
    • PHP5 オブジェクト指向
    • PHP7 型の指定
    • PHP8 ユニオン型、名前付き引数、列挙型など
    • jetbrains の PHP 25 周年記念サイトによくまとまっている
  • Singleton
    • 生成に関するパターン
    • 一つのインスタンスのみ。他のコードからの変更を防ぐ
    • 変数を private にする
    • getInstance で生成されていないときだけ、生成する
    • PHP7 だと nullable ? 型を使える
    • PHP8 だと null合体代入演算子 ??=
  • まとめ
  • なぜデザインパターンを学ぶのか
    • 手段は本質よりも早く廃れる

インシデントレスポンスを自動化で支援する - Slack Bot で人機一体なセキュリティ対策を実現する - SEASON2 / 伊藤洋也 さん

  • インシデント: 機密性、完全性、可用性
  • インシデントあるある
    • ログが流れる
    • Slack のスレッドでやると、みんなが気が付かない
    • 人を適切に呼び出せない(気が引ける、誰を?)
    • 発生と完了を伝えられない
    • フローが不明確、マニュアルが無視される
    • いつ、どこのチャネルで対応されたか不明
    • 再発防止ができない(サマリがなくてようわからん)
    • ポストモーテムやりたい
  • インシデントのアウトプット
    • 企業のテックブログ(障害や訓練)
      • CloudNative Inc, mercari, モノタロウ, STORES, RAKUS, Ubie, Sreake など
    • 情報誌、カンファレンス
      • システム障害対応の教科書
      • Incident Response Conference, LEARNING FROM INCIDENTS Conference
    • SaaS
      • BLAMELESS, rootly, jeli, incident.io, Waroom, Datadog, PagerDuty, Graphana Incident
  • @sssbot GMOペパボさんの内製
    • 準備 -初動-> 対応 -普及-> 事後分析 -解決->
    • 発生、検知アラート、対応、復旧、解決
    • ユーザ、組織の両方に影響がある。
    • インシデントマネジメントの時間を短縮 Time is Money
  • 初動
    • sssbot を呼び出すと、チャンネルを作る
    • 通知を複数のチャネルにブロードキャスト
    • 1 インシデント 1 チンャネル
    • 初動対応チームを自動で invlite (心理的ハードルがあるので、人ではなく bot がやる)
  • 対応中
    • タイムキーパーが 15 分毎に現れる
    • 復旧の通知まで担当する
  • 事後分析
    • postmortem のドキュメントを作ってくれる
    • pin したメッセージからタイムラインを自動生成
    • ダッシュボードから一覧可能
    • /archive し、通知
  • 準備
    • 年一回以上訓練・演習している
  • 実装、設計
  • Brent Chapman さんのプラクティスを参考に
  • 参考書:
    • SRE 本
    • システム障害対応の教科書
    • INCIDENT MANAGEMENT FOR OPERATIONS (消防士の経験から)
  • CSIRT*, 経営層への情報共有
  • 課題
    • 事後分析のプロセスが重く、後回しに
    • 再発防止策まで至らない
    • ChatGPT にサマリを作らせる
  • AI + インシデントマネジメントの相性は良さそう
    • 解決方法の提案までやってくれれば・・・

チーム開発における様々なボトルネックの整理 / id:stefafafan さん

  • 改善サイクルが回っていない ( 効率の悪い仕事の仕方が続いている )
    • アジャイルを取り入れる
    • Incremental, Iterative: 少しずつ着実に進める
    • Scrum ソフトウェア開発以外にも使える
  • 開発速度が遅い
    • Four Keys: デプロイ頻度、変更のリードタイム、変更障害率、サービス復元時間
    • すべての指標を満たす必要がある
    • Extreme Programming: 小さい単位(レビューも楽)、ペアプロ、テスト
    • DevOps: インフラ要件をプロジェクトで管理, CI/CD, Infrastructure as Code, オーナーシップ
  • チーム内の連携
    • HRT ( 謙虚、尊敬、信頼 ) の欠如: コードレビューが辛い、発言できない
    • チームの自己組織化:
      • エラスティックリーダーシップ: サバイバル、学習、自己組織化
  • チーム外との連携
    • Team Topologies: 他のチームとの関わりを図に
      • リリースなどで他のチームの許可が必要など
  • ボトルネックの整理
    • スコープによる整理
      • エンジニア、デザイナー。企画~リリース。同部署、会社。
    • カテゴリ別の整理
      • テクニカル、プロセス、人間関係
    • マトリクス化する
      • エンジニア+デジアナー✕テクニカル
      • App エンジニア + SRE ✕プロセス
      • 会社のエンジニア組織✕メンバーの成長
  • まとめ
    • チーム開発のボトルネック
    • スコープ✕カテゴリで分類し、どこから手を付けるか考える

NOT A HOTEL - AI コンシェルジュ 「Kevin」 の開発秘話 / codehex さん

  • zendesk の話から急遽変更して chat GPT の話
  • HOT A HOTEL: 別荘兼ホテル。家を相互利用できる世界に
  • Kevin: chat bot。 お客様に 24 時間対応する
    • 「テスラを使いたい」
    • CS 対応の勤務時間の制限
  • AI ができること
    • 情報の提案
    • 料理や清掃のオペレーション
  • Sunshine Conversation
    • メッセージングプラットフォーム
    • Switchboard: 人と bot の切替
    • Pass control: bot と人、どちらなのかの判断
  • Dialogflow CX
    • CS (Zendesk) と GPT を切り分ける
    • 雑談などは GPT
    • GCP 上の AI 開発プラットフォーム
    • 会話のコンテキストを保持できる。構造化されたデータに変更
      • 後続の処理は、会話のコンテキストを引き継げる
  • GPT-3.5, GPT-4, LangChain
    • OpenAI の API (Chat Completion)
      • 安い、速い
    • Dialogflow CX で拾えない部分(雑談、観光地の情報提供)
  • LangChain
    • LLM (Large Language Model) との組み合わせ
    • ReAct: 推論 + 行動。 Thought, Act, Obs
  • zero-shot-react-description
    • ほとんど成功しない、遅い。 2.5 分
    • サポートに問い合わせてもまともに返ってこない
  • Document Question Answering
    • google の検索結果は使えなかったからはずした
    • DB の類似検索に絞る
    • ドキュメントの内容を OpenAI に要約させる
    • エラーはなくなった。レスポンスは 50s 。 DB に登録された内容なら回答可能
  • Map Reduce アルゴリズム
    • 並列のはずが直列で・・・
    • 件数を減らせばいいという結論(直列なので)
    • 30sec くらいで返せるように
  • 今後の展望
    • Dialogflow CX: フローが複雑なので整理
    • GPT: データを増やす(現状 4000 件 )
    • OpenAI が遅い問題→キャッシュ
  • このために Python を勉強した
  • スライドの構成は ChatGPT にお願いした

try { Support Engineer } catch($e) { joy, pride, and prospect } / Kensuke Nagae さん

  • 「ソフトウェアエンジニアからサポートエンジニアにジョブチェンジしてみた」
  • サポートエンジニアの情報が少ない、 Perl プログラマの平均年齢が高い
  • サポートエンジニア

    • 自社製品。技術的な問い合わせ
    • 製品について、トラブル対応、開発チームへ
    • ドキュメント、(まれに)機能開発や修正
  • 問い合わせ対応が 8 割。うち、トラブル対応が 7 割

    • 「書く」より「読む」
    • ドキュメント(公開、社内)、過去の事例、ソースコード
  • 面白いところ
    • 問題解決: 具体的で解決する必要がある問題、謎解き
    • 問題のスコープが広い
    • 1~2週間で PDCA を回せる。似たような問題が来る(しかも、すぐに)
      • 開発職ではあまりない
  • しんどさ
    • 顧客対応については自明なので割愛
    • reactive ( 問題が起きてから対応 )。予防できない。マイナスから始まり、 0 で終わる
    • 作れない: 開発の優先順位に手を出せない。お客様の希望に添えない
    • 小さい締切 ( 初期応答時間 ) : 毎日、小さなプレッシャー。難しい問い合わせが複数積まれたとき
  • 向いてる人
    • 問題解決が好き: トラブルシューティングだけでなく、疑問を解決する
    • 意思疎通(社交的である必要はない): 意思疎通により問題を浮き彫りにし、解決に導く
    • 締切のプレッシャーに強い: 障害対応になると燃える ( 短期集中 )、逆に締め切りを無視する胆力

ネコトーストラボ杯争奪 東西対抗 LTマッチ

「これが3年ぶりのドラですよ」

開幕LT / ネコトーストラボさん

  • 光る棒がノベルティに入ってます
  • バトルからマッチに
    • Try Catch == 東西マッチ
  • NEW: Nekotoastlab East West
  • Try Catch == お題なし
  • if (New lt match) : Perl は LT フレンドリー
  • 綱引きのイメージ
  • Try Catch == 勝敗どっち

GraphQL やるなら DataLoader を使おう / gari8 さん

  • GraphQL サーバサイドへクエリ。型
  • N+1 問題が発生
  • JOIN で解決しようとしたが。必要のないときも JOIN
  • スロークエリとコードの可読性の低下
  • Dataloader バッチ処理
  • 親タイプの処理→子タイプからKeyを集積 (dataloaderのお仕事)→Keyに基づいて処理

Slack からクロネコで送ろう / こたまご a.k.a. ひなたん さん

  • Perl は小さい頃にちょっと」
  • 社員間で宅急便
  • 住所がわからん。営業所止め
  • Slack で宅急便。ヤマトさんと
  • ワークスペース単位で申込み可
  • Slack 3秒ルール→非同期処理 (Django + Celery, Redis, TiDB)
  • 月額費用はただ。ヤマトさんより安い

AstroNvimを使おう! / _ybrliiu さん

  • vim: キーボードで操作が完結、作業が高速、プラグイン
  • 学習コストは高い、環境構築が大変
  • Neovim: vim 派生。 luaでも書ける
  • AstroNvim: Neovim のもろもろをまとめたパッケージ
  • セットアップが簡単、ヘルプが充実
  • :Lspinstall
  • F7 でターミナル表示
  • 放置するとヘルプが出る
  • ゴーン

Perl初心者が社内Perlエンジニアのレビューを受けてみて / minto さん

  • 社内で利用。移動があると便利
  • 明日のゴミを Slack に通知する bot
  • 鎌倉市のゴミ情報をパース
  • use lib use lib/....pm ではなく -Ilib
  • 配列のから判定は $#x < 0 ではなく @x == 0
  • サブルーチンの返り値はスカラ( %x ではなく \%x
  • サブルーチン引数を @_ を使わない
  • shift ではなく my (undef, $x) =

Masahiro Honma さん

https://docs.google.com/viewer?url=https://github.com/hiratara/YAPCKyoto2023LT/raw/master/slides-export.pdf

スポンサーブース担当レベル1からの足跡 / honchang さん

  • 入社3日目で RubyKaigi
  • 伊勢神宮をイメージして鳥居を
  • 社名をたくさんつけた
  • ノベルティ全部持ってった(統一性がない)
  • ぼっち: ノベルティを取りに、ホテルでミーティング、結婚式(!)
    • 次からはシフトを

自然言語処理とWebアプリ・文字コード / Shunsuke Tsuchiya さん

Railsエンジニアがフロントエンド分離に挑戦してみた / mikikun14 さん

  • フロントエンドをやることになった
  • React, Vue は触ったことがあった
  • 課題を早くこなすことにフォーカス、すぐ助けてもらう、雑でも速く
  • 意思決定の理由を理解するように
  • 理解できないことを放置しない。質問できる雰囲気を。プライドが邪魔にならないよう
  • 自己紹介でハードルを下げておく

Something NEW / myfinder さん

  • yapcramen を忘れずに

  • 会社を作った
    • Eric Sink マイクロISV
    • 4 期目、黒字
  • 数の暴力との戦い
    • 一人
    • オートスケールは無意味
  • クローズドソースプロダクト
  • ChatGPT で解決できそうなお仕事を募集中

Something New / arthur-1 さん

  • 新卒1年目が顔を売るためにやったこと 100 連発
  • 出社エントリ
  • 深夜バスで出社
  • ツッコミどころ
  • 社員に喧嘩を売る
  • 先輩の腕をつかんで二次会へ
  • 二日酔いの直し方 飲めば1日酔いになる
  • Slack 投稿数 40/日 ジョーク、反応、業務連絡は 20%
  • 思っていることを社内エントリに
  • いろいろな会に顔を出す
  • 細かいネタ
  • 他人と会話、柔軟な働き方「忙しそうなので代わりにやりましょか?」
  • 夢を語る
  • ユーザからの問い合わせに反応
    • CREs との協業のチャンス

TypeScript + Express + Prisma + Node.js API開発 / 秋田 尚輝 さん

  • Perl について「飛ばします」
  • TypeScript 静的型付け
  • Prisma: ORM
  • Express「飛ばします」
  • レイヤードアーキテクチャ。個々のコード量を抑えられる。開発しやすい
  • コーディング技術も大事だが、設計者の意図を汲むこと
  • ChatGPT + GItHub Copilot があればコーディング技術は・・・
  • 難しいことを簡単に。開発速度を上げる

結果発表

  • 西MVP: honchangさん
  • 東MVP: 秋田さん
    • 賞品: 和菓子通販品
  • 勝利チームは西チーム
    • 賞品: ネコの足形グラス

明日は 9 時からオープニングです。 (9 時前に来ること! )