かきあげせいろはラーメンがたべたい

技術プログラミングいろいろ記録メモ備忘にゃーん!

builderscon tokyo 2018 に参加してみた(その2)(自分用メモ&感想)

全てのエンジニアに知ってもらいたいOSの中身について

  • OSのレイヤーが自分の手から離れると怖い
  • OSを知るとちょっと幸せ
  • OSを知ってみよう
  • ブートシーケンスからOSの動きを紐解く
  • プロテクトモード

    • 特権かんり
      • 自分の権限より上位の権限を利用するときにシステムコールする
      • OSにアクセス => 一般保護例外
    • メモリ管理
      • メモリアドレス指定方法(ページんぐ)(リニアアドレス):ページ(OFFSET) => PTE => PDE
      • セグメント
    • タスク管理(マルチタスク)
      • TSSが管理している(メモリやレジスタの状態保持)
  • 質問1 TSSはどこに保存されるか

    • メモリに保存される
    • TSSレジスタに記載されているメモリアドレス
      • キャッシュのこと?
        • マルチコアの場合はL3キャッシュが共通になっている(ここにTSSがある?)
  • 質問2 学び始めるなら何がオススメ?

    • Linax1
    • 30日でつくる自作OS入門っていう本がオススメ
  • 質問3 システムコール 古くからあるコールとIntelAMDの新しいコールの方式の違い

すべてが gem になる - サービス密結合からの段階的脱却

  • 二つ目三つ目のサービスを開発するときに、数年後後悔しない設計について

    • マザーRails(アクティブレコード便利)
      • 最初にRailsでマザーに置いとく
    • 二つ目のサービスからは1つ目のサービスの鯖であるマザーRailsAPIから共有データを取得
    • だが、2つ目のサービスのドメイン層も1つ目のサービスのマザーに記載してしてしまっていた
      • 密結合
  • サービス密結合って何がダメなんだけ?

    • そもそも1つ目の鯖に相乗りしてたのはなんで?
      • 手の込んだ機能(認証とか?)を共有できる(既存資産使いたい)
    • 障害が起きたらやばい
      • どっちのサービスが原因か(両表の知識が必要になっちゃう)
      • 巻き添えで両表のサービスが落ちるかも
    • モデルが混ざる
      • 名前空間ちゃんとしよう(一つ目のサービス開発時に2つ目を考慮しないと・・・)
      • DBのテーブル名とかもちゃんと考えないと
  • 関連エンドポイントを全部網羅
  • やった事
    • routes.rbを全部見る => ネームスペースでわかる
    • クライアントのAPIを見る
  • 「何がマザーに依存しているか洗い出す」が目的だったけど、APIをみても依存度合いはわからない(モデルを全部理解していればわかるけど・・・)

  • ドメイン定義&移行先サーバづくり

  • ドメインモデルの把握
  • サーバは先に立ててしまう(新機能作るときにとりあえずこっちに書きましょう、を強制できる)
  • チーム構成を変えた
    • 「基盤+API
    • 「制度上げ(OCR)」
  • 変わった事

    • 新機能追加を、恐れずにできるようになった
    • コアのモデルは一つ目のサーバーAPIを叩く必要がある(ネガティブな事?)
  • コアモデルを新サーバから触れるように

  • gemにすれば生産性を下げずに一つ目サーバのモデルを共有できるのでは

    1. DBを共有
      • 同じDBをみちゃう(アンチパターンではないか => 「モデルを共有」「アクティブレコード経由のみ」の制限とした)
    2. 切り出し対象を整理する
      • 切り出し対象の中心となるモデルを決める
      • コード読んでUMLに整理(プラントUML?)
      • ログを使って絞り込む?静的解析とかでなんとかする?
    3. 切り出し方(gemにする方法)
    4. 新しいリポジトリ
    5. gemにすると全て「フレームワークトレース」に出力されてしまう
  • まとめ

    • 新しいサービスのネームスペースは大事
    • 同じテーブルをサービス間で共有するのは良くない
    • DBを最初から分ける
    • テストはしっかり書く
      • サービスがスケールしないと価値を生み出さないとあれなので見極めて
  • 質問1 またがるモデルの障害切り分けをどうしているか

    • 更新されるモデルが片方だけであることがわかっていた
    • サービスかサイドキックから更新されることもわかってたのでスタックトレースでなんとか
  • 質問2 最終的にgemを消すときに共有しているテーブルをどうやって消すのか

    • テーブルを共有しているが、レコードは共有されていないのでおそらくできる

デザイナーとうまく協働する方法

  • デザインはどのくらいの範囲なのか
  • 重要というのは誰にとって何が重要なのか
  • エンジニア => 早く作って模索する
  • デザイナー => 調査に基づいて設計する
  • 自分が見ているタイムラインが常識に見えている
    • 協業を難しくしている
    • エコーチャンバー現象が起こっている事に気付いていない
    • 当たり前という先入観
    • 察して欲しいという受け身の態度
      • 察するというのは、なんの基準なのか
  • 人や文化を変えるのがいかに難しいか
    • しかし、取り組まなければならない
    • 同業者に伝えるのは簡単(別業種では同じようにいかない)
  • 我々は良いものを作りたいと願う仲間である。ということは共通している。
    • しかし、溝はある。
  • 言語化
  • 明文化
  • デザイン的にはコンテンツモデルという(ドメイン駆動設計に似ている)
    • 料理、レシピ、シェフなど、、、
      • デザイナー、エンジニア、営業間で翻訳作業が必要になっている
  • コンテンツモデルからユーザー行動を考え、デザインとして形にする
    • センスのようなよくわからないもの(暗黙知)で会話する必要はない
  • 言葉合わせのためのモデリング
  • 情報構造の理解、共有
    • ユーザーが使っている言葉だけではなく
    • 社内の人間が利用している言葉を観察する?
    • 要素名クイズとかを利用して、辞書を作成する
    • 開発とデザイン以外の視点も考慮する
    • UIや機能の捉え方を共有・学習
    • ニュアンスを合わせる
      • かっこいい、可愛いとは何か
  • 以下のように(マズロー欲求ピラミッドのようにデザイン的)重要度でピラミッドを作成

    1. 欠かせない価値観
    2. 使い続ける価値・意味
  • 業種を超えた言葉の共有

  • 言葉のニュアンスを理解する場
  • チームにおける「良い」
  • 評価
    • 課題を解決しているかどうか
    • ユーザーに提供する価値は何か
    • プロジェクトメンバーが(それなりに)納得できる施策

    • 「これはどうですか」は危険信号

    • センスとかは偉い人が決めている。はNG
  • 対策

    • 課題解決を議論のテーブルに乗せる
    • デザインの経緯を記録する
    • 文書の定型化を心がける
  • 属人性を減らしたデザイン運用

  • デザインシステムの第一歩
  • まずは色から決める(ブルーとかパープルとか)
  • お互いが入り込める隙間作り
    • リモート勤務の場合とか
  • 今後の課題

    • 蓄積情報整理
      • 参照性とか
    • 自動化
  • 質問1 PMがある程度持っているデザインのビジョンをデザイナに話したときに、それに引きずられてしまうのでは

    • 企業としてのビジョン、プロダクトとしてのビジョン、デザインが一貫していることを確認する場を設ける必要がある
    • なんでダメなのかを聞く
    • そのためのデータをデザイナーが閲覧できる状態にする
  • 質問2 途中からアサインされる人に伝える方法

    • 大事なところ(この資料のココ!)を一枚のペーパーにまとめる
      • 価値観の共有はどうすれば?
        • デザイン原則。チームにおけるデザインの価値観の言語化
        • 我々はなぜここにいるのか

Webアプリケーションエンジニアが知るべきDNSの基本

  • ipの解決問い合わせ順序
    1. スタブリゾル
    2. アプリから名前解決を依頼される
    3. フルリゾル
    4. 権威サーバーから応答をもらって、スタブへ返す。(もしくはキャッシュの結果)
    5. 最後まで名前解決できるよ
    6. ルート権威サーバ
    7. jp権威サーバ
    8. hoge権威サーバ
  • ツリー構造
    • ルート権威サーバは配下のjp権威サーバを知っている
  • ゾーン
    • リソースレコード
      • 権威サーバのDBで管理
  • ICANNがIPの元締め
  • ネガティブキャッシュ

    • 名前解決ができなかった情報をキャッシュしておく
      • このキャッシュが存在する場合は問い合わせをしなくなる
  • もともとフルリゾルバのTTLが長い場合(48時間とか)短くして、権威サーバのTTLを短くしても新IPが見れるようになるまで最大で48時間かかってしまう

    • 新IPを利用したい2日以上前にフルリゾルバのTTLを短くする
    • その後、権威サーバーの新設定を適用する
  • 質問2 適切なキャッシュ時間は?

    • 最近は性能が高いので300秒とか
    • 切り替え時は60秒ぐらい
  • 質問3 ~allを使う局面はどういう

    • 公式で非推奨
    • -allのミスである可能性が高い
  • 質問4 複数のDNSの問い合わせ順番はあるのか

    • お名前.comの実装によるはず

なぜ私はキーボードを作るのか

  • 質問1 自作キーボードは配列が格子型担っているが、使いやすいのか

    • すぐ慣れる。macユーザーは多分すぐ慣れる。
  • 質問2 タイピング速度とかはどう

    • 計測してない。健康になったので生産性は上がったと思う
    • ゲーミングに関しては自作だとズルできるのでよくないと思う
  • 質問3 キー配列を好きにできるか

    • すぐにできる。業務中に書き換えるのも可能。
  • 質問4 静電容量はできるのか

    • できないのでは。銀軸が近いかも。hhkbを書き換えるのもいいのでは。
  • 質問5 エルゴダッシュがいい理由

    • 指の場所が斜めになっている?
    • アイリスとかが似ているかも
  • 質問6 コンスルーがプロマイクロ対策になる?

    • ピンの形状が違う?ことによって抜き差しが可能になる
  • 質問7 キーボードの剛性が必要?

    • キースイッチの半田付けとかは自分次第
    • 部品の品質にもよる
  • 質問8 どこに何を割り当てたかわからなくならない?

    • キーキャップの刻印
    • 無刻印にマスキングテープ
    • やってれば覚える
  • 質問9 無線のセパレートはできるのか

    • 最近作った人が現れ始めた。界隈を監視すべし。
  • 質問10 自作キーボード作る人は3つ4つ持ってるのはなぜ?

    • 好きだから
    • カスタマイズを続けている

LT

キーボードをカスタムしプログラミング環境を良くした話

  • Elixir
  • パイプ演算子 |> 直前の結果を次に代入
    • しかし打ちにくい
      • QMKを利用して解決する
      • ファームウけあを書き込めるキーボードが必要
      • QMKにマクロ機能がある => 一回のキープレスでたくさん打てる

スーパーファミコン事始め

Merpay

  • マイクロサービス
  • 各DBへのアクセスがメッシュになっちゃう
  • 中間層を準備する
  • バッチとストリームの二種
  • schema registory

WebReplay

  • コードの時効履歴を保持して巻き戻しをする(ブラウザでする)
  • firefoxで実験的な機能 まだ重すぎて使い物にならない
  • なんのためにある
    • クライアントサイドのバグの再現
    • 記録保存転送再生を想定している機能
  • 今後の見通し

    • ほっとくと落ちる
    • mac以外でも動くように
    • 現状はまだ期待できない
  • web開発の未来

    • Live-edit(コードを書き換えると即時反映)
      • あの頃を巻きもどせるのでは!!

チームでテストを書くために

  • チームでユニットテストを書くようになるまでに取り組んだこと
    • テストの経験知識がない
    • テストの効果がわからない
  • 失敗

    • ヘルパー関数がバグってた
    • テストコード自体の品質
  • とにかく描いてみましょう

  • 簡単なところ描いてみよう
  • 小さく描いてみよう

cpanfileがrubyでパースできることに気づいた俺たちは

  • cpanモジュールの一覧

プロジェクトマネジメントに足を突っ込んだ結果

  • PMの問題を知ってれば開発上の問題点を開発できる?
  • 問題のほとんど社会的な問題
  • PMBOK読もう

5分でフォトブース

  • 撮影
  • 画像加工
    • Grabcut
  • アップロード

エディタ

Enxt Editor - 誰でもギット - 一般的な仕事もプルリク

アップデートばかりしている言い訳をさせてくれ

登壇やLTを始めてみたい方の背中を押してみたい

  • 批判されたら
  • 微妙だったら
  • 無視されたら

  • 未経験者の背中を押してあげよう

    • まさかりはほどほどに
    • アウトプットすることの学び
    • 初心者枠もあるよ
    • 背中を押されろ

本物のインターネットを提供した話

  • マズロー欲求ピラミッド
  • インターネット要求はないと死ぬ。ピラミッドの一番下。
  • ドワンゴグローバルIPを/22分直結した
  • endeworksから機材を借りれる

NodeでCloudFormationのテンプレート分割

  • S3にあらかじめ置ける

インターネット障害を支配したい話

  • 先手を打ちたい
  • iptables 指定パーセントドロップさせたりできる
  • comcastを使えば便利
  • toxiproxy
  • 障害を意図的に起こして検証(先手)をしよう!

感想

buildersconの2日目。本日は夜まで会場にいたのでたくさんのセッションを聞く事が出来ました。

※公開された資料をまとめてくださった方がいるようです=> 資料まとめ

  • 全てのエンジニアに知ってもらいたいOSの中身について

    • 自分はコンピューターを使って仕事をしているにもかかわらず、話についていくのがやっとだった。
    • 基本情報技術者試験とかでちょっとだけ勉強したようなコンピューターそのものの仕組みの発展形のことはじめ感。
    • 今回の内容は本当に入り口部分なのだと感じる。奥が深く、複雑。
  • すべてが gem になる - サービス密結合からの段階的脱却

    • サービスを増やしていく過程での既存資産(レコードもソースも)の活用と、責務分離のトレードオフとどのように付き合っていくかの1つのケース。
    • 実装のスピードが価値に直結することの多いスタートアップだけにとどまらず、多かれ少なかれ何処のサービスやプロダクトでも発生しているであろう問題に立ち向かう経験談ライクな発表は、すごく共感できる。
    • 結局のところ問題と向き合う時点では、わかっていることとわからないことを整理し、地道にソース(レコード)を分離していくことになるので、その時にいい方向に作用する最低限の策(名前空間、テーブル構成、テスト)をサービス初期に仕込んでおくべきという教訓。
  • デザイナーとうまく協働する方法

    • エンジニアとデザイナー、IT業界と他業界という違う価値観を持つ人同士が協働する場合、違う価値観を持っているという前提を全員で理解し、認識合わせをし続ける事が大切。
    • ↑である事実も全員で理解し、歩み寄るための心理的安全性があるチームを構築する必要もある。
  • Webアプリケーションエンジニアが知るべきDNSの基本

    • DNSに限らず、完全に理解していなくてネット上のナレッジをもとにしか操作できないような技術要素が多いスキルレベルの自分には耳が痛い・・・
    • DNSの基本的な仕組みを説明した上で、実際にネットワーク上で動作している状態での設定変更時に(DNSを理解していないと)発生するであろう問題を丁寧に解説されていて、セッションを聞いている最中とても楽しかった。
  • なぜ私はキーボードを作るのか

    • 明らかにハマったら抜け出せないであろうNumaの話
    • 道具を自分に合わせる事で最高の生産性を出す。
    • 「自作キーボード作る人は3つ4つ持ってるのはなぜ?」の質問が全てを示している。
    • HHKBのPFUREALFORCEの東プレがコラボしたモデルが最近発売したそうだけど、店頭でさわれないだろうか。気になる。
  • 全体を通して buildersconというイベント全体で「楽しい」という感情が大前提として参加者に共有されている事が感じられます。他のイベントと比べるわけではありませんが、比較的質問が出る際の謎のプレッシャーが薄くて、いい意味でゆるくオープンな空気だと思います。来年もまた参加したいです。