かまたま日記3

プログラミングメイン、たまに日常

AWS Summit Tokyo 2023に参加してきた

一ヶ月前の出来事なんですが(汗)、幕張メッセで行われたAWS Summit Tokyoに会社として参加してきました。実際に動くロボットという目を引く展示物の効果もあって、かなりの数の人がブースに来てくれて色々な話をしました *1

また、1日目にはミニステージで登壇もし

「SEQSENSEにおけるAWSを活用した 自律移動ロボットの管理手法」

というタイトルで15分の発表もさせてもらいました。

朝一番のAWSの中の人に次いでの発表だったこともあり、結構人が居て正直緊張しましたが、無難にこなせたのではないかと思います。AWS Summit自体コロナ禍を経て4年ぶりの開催とのことで、こういう大規模イベントも久しぶりに参加するのは良いなと感じました。

発表資料

*1:めちゃくちゃ疲れましたが..

runtime.MemStatsを使ってリアルタイムにメモリ使用量を確認する

runtime.MemStats を使うと現時点でのメモリの使用状況などを確認できます。

とりあえず、以下のようなコードを埋めるとAlloc (割り当てられたヒープオブジェクトのバイト数) とNumGC (GCの回数) を確認できます。ついでに期間中の最大のAllocも確認しています。

その他必要なデータはMemStatsのドキュメントを読みながら適宜追加すること。

package main

import (
    "log"
    "runtime"
    "time"
)

func main() {
    tick := time.NewTicker(2 * time.Second)
    defer tick.Stop()
    go func() {
        var maxAlloc uint64
        for range tick.C {
            var s runtime.MemStats
            runtime.ReadMemStats(&s)
            toMB := func(v uint64) uint64 {
                return v / (1024 * 1024)
            }
            alloc := s.Alloc
            if maxAlloc < alloc {
                maxAlloc = alloc
            }
            log.Println("===============================")
            log.Printf("Alloc: %d\n", toMB(alloc))
            log.Printf("MaxAlloc: %d\n", toMB(maxAlloc))
            log.Printf("NumGC: %d\n", s.NumGC)
            log.Println("===============================")
        }
    }()

    someMemoryBoundFunction()
}

住宅購入記録 (1)

昨年末に家 (建売新築) を買ったのでその記録です。今回は購入する所まで。

  • 家を買うに至った経緯
    • 定期借家契約の終了
    • 賃貸 or 持ち家
  • 家探し
    • マンション or 戸建て
      • マンションの特徴
      • 戸建ての特徴
    • 戸建て探し
      • 決めたポイント
      • 妥協した点
      • 余談
  • 記事一覧
続きを読む

ETLとELTの違い

https://www.xplenty.com/jp/blog/etl-vs-elt-ja/

を読んでのETLとELTの違いのざっくりしたまとめ

ETL

  • Extract Transform Loadの順番で行う. ソースシステムからステージ環境にExtractして変換したものをData warehouseにLoadする流れ
  • OLAPデータウェアハウスを使う際は、構造化したデータにする必要があるので、DWHにロードする前に変換する必要がある
  • 構造をDWHに入れる前に決定する必要があるので、設計変更などがあった場合、データエンジニアの作業が発生する。SaaSも増えてきてそこのコストは低減してきている
  • 事前に処理したデータを使って分析するのでデータの信頼性、処理の高速性などに利点がある
  • DWHに入れる前にデータ処理を行っているので、GDPR個人情報保護法などコンプライアンスに関する規制に対応しやすい

ELT

  • ELTはExtract Load Transformの順番で処理を行う.
    • データレイクにためた非構造化データ *1 を含んだ雑多なデータを要件に応じて変換して使う形
  • 高性能なクラウドコンピューティング環境の登場によって生まれた概念
  • 必要なデータのみを処理するため、大量のデータがある場合でも比較的高速に処理できる *2
  • 事前に構造を定義しないといけないETLにくらべて柔軟性が高い
  • データの信頼性は低い
  • Load処理は生データをデータレイクに入れるだけなので、メンテナンス性と高速性が高い

*1:JSONファイル、画像データなど

*2:ETLは入ってくるデータ全てに処理を行わないと行けない

cgroupのDevice Whitelist Controllerについて

https://www.kernel.org/doc/Documentation/cgroup-v1/devices.txt

cgroupはmknod (特殊ファイルの作成) を制限できる。

echo 'c 1:3 mr' > /sys/fs/cgroup/1/devices.allow

これは 「cgroup 1 に/dev/nullのread and mknod の権限を追加する」という意味になる

  • 最初のcはtypeでa (all), c (char), or b (block) の3つがある
  • 1:3 はMajor, minorデバイス番号。詳細は ここ 参照
  • 最後のmrは権限でr (read), w (write), m (mknod)

参考: https://linuxcommand.net/mknod

Dockerで設定する場合 --device-cgroup-rule を使う

docker run --rm --device-cgroup-rule 'c 1:3 mr' myapp