時系列+もう一つの何らかの属性で検索することがほとんどのデータは、S3に置いてs3 selectが有用

www.infoq.com

この記事が話題になってて( なお元記事はここっぽい Moving from DynamoDB to tiered storage with MySQL+S3 | by Shane Hender | Zendesk Engineering )、かつて似たことやってAWS Summit Tokyoのミニステージで登壇したことがあったので忘れないうちに補足記事を書こうと思った。

www.nileworks.co.jp

PDFファイルの直接のリンクは以下になる。

ドローン運行監視 ーAmazon AthenaのBucketingとAmazon S3 Selectの活用ー

このスライドの概要としては、S3に保存されているドローンの飛行ログデータを、AthenaのCTAS + Bucketingを使って1日1回任意のまとまりでS3のファイルを適切な階層構造に配置しなおし、APIサーバーから取得できるようにしたという事例紹介となる。

この場合は飛行ログなので、機体のIDと、時系列で検索できればほとんどの場合十分だ。 このように時系列+何らかの属性のみで検索することがほとんどのデータがけっこうたくさんあると思っていて、そういうときにはこのパターンは適していると思う。

S3でファイルを置くならFirehoseとかで事足りそうに思うかもしれないが、Firehoseでファイルを置くとファイル数が増えてしまうので、そのままではS3 selectでクエリするのに適さないので、適切な粒度でファイルをまとめなおすという一手間を加えている。

このシステムでは実際にこの仕組みを使って、フロントエンドのNext.jsから、APIサーバーに任意の機体の任意の時間の飛行ログを問い合わせる仕組みを作って、過去の飛行履歴をすべて振り替えれるようにしている。

S3はExpress One Zoneもリリースされたので、より高速にレスポンスするようになっただろうから、S3はデータストレージとして更に有望になったと思う。システム要件によるが、REST APIなどでS3に置いたデータをクエリしてレスポンスするといったことは十分現実的だと思う。

最近はDuckDBに注目している。これもS3にあるログを短時間で読み込むことができる。

Obsidianのvimのjump to linkで英単語だけでなく日本語でもジャンプしたい

最近Obsidianを使って個人の知識データベースを作っている。日々学んだこと・見た記事などをdaily noteにしつつ、ストックとなる記事を貯めていっている。 これまでもEvernote・Notionや個人ブログ等で似たことをやろうとしていたが、Obsidianはローカルで使うmarkdownのエディタとして普通に日々のメモツール(これまではSlackとかにメモしていた)の延長で使えるので、メモとストックの垣根を無くせるのが良くて、常用するツールになりそう。

エディタを快適に使うときに自分にとって欠かせない要素なのがvimキーバインドで、Obsidianにも公式にvimキーバインドがあるので使っている。vimの設定はあまりカスタマイズしないほうだが、ジャンプ機能を使いたいと思って、

📗vim-easymotionのように入力した文字から始まる単語にジャンプしたい - Minerva

ここで知ったjump to linkを入れた。 普段はjump to anywhereをよく使うが、デフォルトの設定の正規表現\b\w{3,}\bだと日本語の位置にジャンプできない。そこで日本語でも兼用できる正規表現にしたいといくつか試行錯誤した結果、[。、,.\s]\S{4}で自分にとって満足のいく結果が出るようになった。

超速で成果を出す アジャイル仕事術

たまたま手にとったので読んだ。

著者の方はソフトウェア開発のマネジメント経験があって、タイトルの「アジャイル」もソフトウェア開発の「アジャイル」の文脈に沿っている。 内容的には特別新しい観点が書かれているわけではないが、体系だてて整理して述べられている印象はあった。

本書の中では仕事術として重要なスキルとして「構想力」「俊敏力」「適応力」「連携力」「共創力」の5つが挙げられているが、自分は最後の「共創力」が特に弱いと感じる。直近4年間ほどで本業2社(サイバーエージェント、ナイルワークス)、副業7社の9つの会社で仕事をしてきた。どの会社でも、個人としてはそこそこアウトプットは出せる。だけどチームとして、異なる専門性を持った個人が集まった集団として、単なる個人のかけあわせ以上の仕事の成果が出せてきたかでいうとあまり実現できていない。 個人としてスキルを磨くだけではなくて、他人と共創して自分一人×時間では決してなし得ない仕事をできるようになりたいと思っている。 その課題感にあったヒントがあったように思った。 ポイントを要約すると「互いに興味を持ち、質より量で情報を共有しあい、対話によって価値観の違いを理解しあい、ビジョンと行動原則に落とし込むこと」と理解した。 リモートで最低限のタスク管理だけしているとこれは実現できない。

terraformでrandom_passwordで作ったパスワードを参照する

またあとで自分で調べそうなのでメモ。

terraformにはrandom_passwordという便利なリソースがあって、ランダムパスワードを生成してRDSの起動時などに使うことができる。

https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/password

このパスワードを一時的に参照したいときは、backendのS3のファイルを直接参照するなどすればもちろん見れるわけだけど、CLIだけで済ませたい。

outputとnonsensitiveの組み合わせでいける。

output "master_password" {
  value = nonsensitive(random_password.master.result)
}

これでterraform planすることで表示される。

Changes to Outputs:
  + master_password = "xxxxxxxxxxxx"

You can apply this plan to save these new output values to the Terraform state, without changing any real infrastructure.

terraform applyはせずに消す。

terraform stateに含まれることには違いないので、初期構築時にだけ使い、あとでパスワードは必ず変更する。

複数のGitHubアカウントでgit と ghコマンドをそれぞれ使い分ける

例えば ~/git/work/以下で仕事、~/git/personal以下で個人のGitHubアカウントで作業したいということがある。

gitコマンドにおいてGitHubアカウントを使い分ける情報自体はそこそこ豊富にある。その中でディレクトリベースで使い分ける方法を選んだ。 gitconfigのincludeIfディレクティブで切りかえられる。

ディレクトリベースで GitHub アカウントを切り替える https://zenn.dev/ytk6565/articles/github-accounts-based-on-directories

ただこれだとgitレポジトリであるディレクトリにしか作用しないので、レポジトリをcloneする前だと設定が有効にならない。

そもそも私はGitHubからのcloneのときはghコマンドを使っている。そこでghコマンドも複数アカウントで使い分けられるようにする方法がないか調べた。

いろいろググった結果、この方法がうまくいった。

GH CLI multi-account switch · GitHub

gh work とか gh personal と打つとアクティブなアカウントが切り替わる。

PostgreSQLでテーブルごとの行数(概算)を表示

MySQLでいうshow table statusのようなことがしたいときがよくあるのでメモ。

select c.relname, c.reltuples
from pg_class c
inner join pg_tables t on c.relname = t.tablename
where t.schemaname = 'public'
order by c.relname;

追加で t.tablename like でテーブル名をしぼりこめる。

show table statusと同じく概算であり、正確な行数をあらわしてないことに注意が必要。

2022/01/13追記

詳しく書いてある PostgreSQLのテーブルサイズの調べ方 - RAKUS Developers Blog | ラクス エンジニアブログ https://tech-blog.rakus.co.jp/entry/20190918/postgresql

AtCoder Beginner Selection

練習として一通りやってみた。

f:id:road288:20220103032145p:plain

  • 「ABC049C - 白昼夢」は3回Failしたけど結果的には解けた(ケースのバリエーションの考慮が足りずに実行時エラーになっていた)
  • 最後の「ABC086C - Traveling」は解けなかったので答えを見た。パリティに関する問題で、これくらいは実務で普通に扱いそう。
  • それ以外は普通にできた。

勉強していかないとランクを上げていくことは難しそうだが、ひとまず次のビギナーズコンテストに出てみよう。