WIP: 「Final Object #0」参加記録

@koriym さんのトークイベント、Final Objectに参加してきました。 株式会社TRASTA さんで開催されました。

主にTwitter実況してました@hgsgtk さんによるイベントの速記録も参考になりますので、併せてご参照ください。

~Opening

イベントの招待状にはタイトルと仙厓義梵の『◯△□図』だけが記載されていました。何を話すのか知らされないイベントというのは新鮮で期待を胸に参加しました。

オープニングでは@koriymさんの『◯△□図』の解釈と『指月布袋画賛』の紹介がされました。 曰く、円相(満月)が真理を表し、四角は普く拡散されている状態を表す。三角はその中間で不要なもをを削ぎ落とすなど真理に至るまでブラッシュアップされていく様を表しているとのこと。 イベントの副題である「Think, "Talk" and Code」が開発者としての真理であるCodeに至るためのTalkに主眼をおいた会であるという提示がされました。

REST

本イベントはRESTの真理に近づくためのトークイベントであることが宣言されます。 2014年のPHPカンファレンス関西での基調講演「全てを結ぶ力」、2015年PHPカンファレンス福岡での基調講演「全てを結ぶ力(2015)」のダイジェストからイベントは始まります。 普段使っているRESTについて、我々は本当に理解して使っているのか、「Nobody Understands REST or HTTP」とも言われるように、RESTを理解するのは難しい状態にあるというテーマが設定されます。

『メディア論』でおなじみのマクルーハンが「誰が水を発見したかは知らないが、それが魚でないことだけは確かだ」という言葉の紹介もありました。

Roy T.Fieldingによって展開されたREST論文をそのまま読むのは難しいので、『RESTful Web APIs: Services for a Changing World』(English Edition)の「Appendix C. An API Designer’s Guide to the Fielding Dissertation」を手がかりに理解をしていくという方針が示されます。

ゼロからわかるRuby超入門を読んでいる

先日RubyWorld Conference 2018で発売が発表されていた

を本屋で見つけたので購入。

読んでいて「知らなかった!」というのがいくつか出て来たのでメモ。

gets

コンソールでいじるようなプログラムをそんなに書かないということもあり、実行時に引数を渡せる書き方を知らなかった。

input1 = gets
input2 = gets

と書くと、文字列で入力をそれぞれ受け取れる。

binding.irb

pryじゃないの?と思ったら、2.4.0からbinding.irbirbが起動して デバッグできるんですね。

Ruby 2.4.0-preview3 リリース

rubyのバージョンが追いついていればpryをGemfileから消しても問題なさそう。 Readmeに

Pry also aims to be more than an IRB replacement; it is an attempt to bring REPL driven programming to the Ruby language.

とあるからpryにしかなくて、irbだとできない機能とがあるのかな?

カスタマイズが効くなどがありそう。

参加メモ/中国地方DB勉強会 in 渋谷

SQLアンチパターンでおなじみの、 和田 省二さんに会えると聞いて、参加してきました。 会場を提供いただいたVoyageGroup様、主催の id:Soudai さんはじめ、参加者の皆様ありがとうございました。

控え目にいって最高の勉強会でした

dbstudychugoku.connpass.com

最近大きめのDB負債と戦っているところだったので、何かヒントが得られるかと思って参加しましたが、 いい意味で期待を裏切られました。 ブログを書くまでが勉強会ということで、以下メモ。


Postgreの内部構造と監視の話

speakerdeck.com

  • ふだんMySQL使ってますが、他のDBMSとの比較もありつつ、参考になった。
  • MySQLの内部構造がわかるようになりたさが増した。
  • 監視の基本: 推測->計測(点で見る)->観測(継続的に見る)
  • 計測に使うライブラリの選定には、企業が作ってるものを選ぶ。
  • 個人が作っているものだと、メンテが突然止まってしまうことがあり、長いスパンで見ないといけないものを計測するにはその方が安心感ある。

pg_stats_reporter読影

qiita.com

  • グラフを定期的にみんなで見ながら障害の振り返りや、各種メトリクスグラフの勘所などを共有する試み。
  • (Mackerelなどのグラフを見るだけだから)事前準備が不要。
  • 2週に1回定期開催してるそう。
  • 良さしかなさそうなので、来週から早速やっていきたい。
  • 監視サービスを複数使う際は、担当範囲の重なりと視点の違いを意識して使う。

和田さんによるデータモデリングの話

  • データと情報の違い
    • データ: 事実。変えようがない。取り損ねたらおしまい。
    • 情報: データを加工して取り出したもの
      • アプリケーションで扱うのは「情報」。データベースが扱うのは「データ」

SQLアンチパターン 監訳者まえがき xii より

さて、皆さんは「情報」と「データ」の違いをご存知でしょうか。

(中略)

データは唯一無二の事実値ですから、それから作り出される情報はどれも正しく、互いに整合性が取れています。

 もうお分かりと思いますが、「データ」を永続化して蓄えるのに適しているのがRDBであり、それから「情報」を生成するのに適しているのが「SQL」なのです。

  • 「データ」モデリングは論理設計。物理設計で「情報」化を初めて考える。
    • 実世界(ドメイン)をデータモデリングすることで、データをつくりだす(RDBに貯める)。SQLを使って「情報」としてとり出す。

データモデリングの話

正規化まで行かないといけないデータモデリング

  • ERDで森を鳥瞰する。テーブル定義書で木を見る。
  • Entity: 6W2H(When, Where, Who, What, Why, Whom, How, How much/How many)で表す。
    • Event: 定期的に繰り返されるコト。When(これが一番大事), How much/How manyで表されるコト。
      • 事実なので過去しかない。システムに「現在」は存在しない。
    • Resource: 登録するモノ。Eventのやつ以外で表されるモノ。
      • 権利や資格など目に見えないモノも含む。
      • 発生〜消滅がある期間。未来開始もあり。消滅時点が未設定もあり。
    • Relationship: EventにResourceを供給する
      • EntityもResourceもKeyを持った集合。
      • キー
        • 最近はORマッパーの都合でサロゲートキーが濫用されている。SQLアンチパターン「とりあえずID」を参照のこと。
          • サロゲートキーが登場するのは、代用キー(Alternate Key)が複数のキー項目で構成される場合に、論理的なポインタとして利用する時。
        • 関数従属
        • 多値従属
          • 4NF, 5NFの理解には必須。
            • Key1が決まれば、Key2, Key3が決まる→4NF
            • Key1が決まれば、Key2, Key3が決まる。Key2が決まればKey3が決まる→5NF
            • Key2, Key3だけの集合を作り、一方をPK、もう一方をAKにする→BCNF

時間割を例にした5NF化

BCNF以降の正規化は本を読んでも具体的な例が少なくて、今までちゃんと理解できてなかった。 というより、理解する努力を怠っていたと言うべきか。反省。

LT

メルカリのDB分割の話

tech.mercari.com

tech.mercari.com

  • 巨大テーブルからカラムを別テーブルとして切り出す垂直分割
  • CIで落ちたところが変更後に影響を受けるところだ。というあたりの付け方。
    • テストがしっかりあるからこそできる。

次回開催時には何か発表できるようになりたいなぁ。

Lean Architecture / DCI Evening参加メモ

mpdosaka.connpass.com

こちらに参加してきました。 会場を提供してくださったポート株式会社様、主催の@itemanさん@ksetaさんありがとうございました。

詳細は#dcitokyoにて。

f:id:hiroyuki-hanai:20171019015747j:plain:w300
オープニングの質問

  • short introduction
  • trygve紹介
  • User story/Use case
  • Lean/Agile
  • 最後に
続きを読む