ゼロからわかる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
  • 最後に
続きを読む

スーパーエンジニア Richardさん来日 meetup参加記録

@imunew さんのお誘いで、スーパーエンジニア Richardさん来日 meetupに参加してきた。imunewさんの参加記録は↓。

imunew.hatenablog.com

11時から8時間近くの長丁場でしたが、全く時間を感じないほどでした。 主催してくださった@koriym さん、@ksetaさん、会場を提供してくださったサイボウズスタートアップスさん、 そして何より、@mackstarさんありがとうございました!!

以下個人的なハイライト


@mackstarによるおはなし

技術以外のこと

技術的な話

  • HEADLESS CMS
  • PHPで使われてるフレームワークSymfony/Laravelがほとんど
  • MessageDriven
    • ドメインに適合する方式だった。
      • RESTで作ってるけど、様々なサービスから同じAPIがコールされるので効率が悪い
      • キャッシュも統一されていない
    • 並列実行はelixer/Erlangの言語に組み込まれているから便利
    • オフラインモードのためにキャッシュストア、セッションストア、オフラインストア
    • GraphQL
      • 古いモバイル端末にも対応
      • スキーマ設計が難しい
      • messge : 何があったか/何をしたいか
      • CQRS
      • EventSourcing
      • イベントを全て記録しておけば、ある日のある時点の再現が可能
      • circui-breaker pattern
      • サービスごとに時期によってautoscalingするby queue inspection
      • 人が少ない時に情報を取っておいて、ローカルストアに入れておく

郡山さんのおはなし

ハイパーメディアアフォーダンス

Hypermedia Affordance // Speaker Deck

github.com

  • 使う側と物の間に意味を与える
  • JSONにリンクでアフォーダンスをつけたのがハイパーメディア(HAL)
  • htmlはformタグでわかる
  • Location header
    • asyncでも使える
  • べき等性:支払いにはべき等性があるのでput
    • 2回送るなではなく、2回受け付けるな
  • 自己記述的
  • トップ(ルート)にアクセスすれば、どこのリソースにアクセスできるかわかる。全てのリソースはトップからアクセスできる
    • discoverable
    • ドキュメントを用意しなくても出来上がっている
  • 機能を実現するコード・構造を実現するコード
  • REST!= CRUD over HTTP
    • REST != Return JSON with pretty URI
    • リレーションにセマンティックを持たせることが重要
  • information + (affordance)
    • /menu /order
  • 自分のアフォーダンスをネットワーク網に取り付けること
  • 長期的な関心は慎重に
    • どうでもよいことは流行に従い、 重大なことは道徳に従い、 芸術のことは自分に従う。(小津安二郎)

リチャードさんへの質問

  • pair programmingが普通
    • ペアプロしてない=idea/codeを分かち合っていないサイン。
    • pair programmingをしていないことが問題なのではなく、コミュニケーションをとっていないのが問題
    • あるいは難しいことをしていない
    • コミュニケーションを取らないことが、自分の成長できるチャンスを捨てている
  • 他の人が考えていないことまで考えられる人が評価される
  • 特にマイクロサービスを運用していく上では、ヘルスチェックを細かく監視する必要。
    • ビジネスがうまく行っていることを他の人に見せる必要。
  • テストピラミッド
  • 2-3時間あれば理解できるコード
  • 満足しないことがスキルアップに大切。
  • death by strangulation
  • レガシーとの戦い
    • wrapperで小さく始める
    • 順次使い始める
  • creativity/idea oriented が日本では少ないと感じる
    • workerかlaborかみたいな話。

勉強会の合間に、gemを公開できたので、LTもしてきました。 今日発表した内容はまとめ直してアップしますが、元ネタだけおいておきます。

github.com

speakerdeck.com

久しぶり(転職以来初)の勉強会参加で、良いインプットになった。 今年もあと4ヶ月ほどしかない。もっと成長するために動かなければ。