terraformのmoduleを作成するようになって知った6つのことのメモ

真面目にterraformでmoduleを書くようになって知った事をメモしてみる。これは自分用のメモなのであまり丁寧な説明はしない。 知った経緯がmoduleの作成ということであって、terraform moduleに関する機能というわけではない。 具体的には以下6つが知らなか…

pythonでSSE (server side events) の例を作ってみて遊んでみた

今回は、以下の記事の実行をwsgirefだけを使って試してみようと言う趣旨のメモ。 Server-Sent Events の利用 - Web API | MDN お試しで遊ぶ程度の実装なので真面目な実装ではない。 SSE SSEは雑に言うと以下のようなもの コネクション張りっぱなし コネクシ…

GitHub CLIを使ってgithub actionsの実行時間を覗いてみる。(--jsonオプションがworkflowやrunにも欲しい)

github actionsで構成されているCIのスピードアップを図りたくなった。そんなわけでどのactionがどの程度時間が掛かっているかが知りたくなった。 もちろん個別にweb uiを覗いていけばそれぞれの実行時間などを確認する事はできるのだけれど、めんどくさい1…

pythonで7-digitsなマイクロ秒を含んだ文字列をstriptimeでdatetimeオブジェクトにしようとしてハマった話

時刻を文字列表現にするときにマイクロ秒を含んだ表現の場合がある。例えばgithub actionsのログは以下のようなもの。 lint Set up job 2021-05-25T20:31:24.8848799Z Current runner version: '2.278.0' 2021-05-25T20:31:24.8848799Z 部分が時刻の表現。実…

goやpythonで複数のパッケージをmonorepo的に1つのrepositoryで管理する方法について調べていた

調べていたのでメモ。作業結果は以下のリポジトリにある。 github.com どういうときに欲しくなるか? どういうときに欲しくなるかと言うと、複数の関心事のそれぞれに対して複数の環境への共通の対応をしたくなったとき。その上その複数の関心事というのが曖…

enumとdataclassを含んだ値をserialize/deserializeするためにjsonpickleを使う

以前の記事の続き。 enumとdataclassesを含んだ値をテキトーにJSONとしてseiralize/deserializeしたい - podhmo's diary 何も頑張って自作せずともjsonpickleを使えば良いかもしれない。 github.com import dataclasses import enum import jsonpickle class…

poetryで管理されているプロジェクトでeditable installがしたい

まぁまれにある。work-aroundのメモ。 editable install? 通常のpythonのパッケージのインストールは、パッケージ中のファイルをsite-packages以下にコピーすることなのだけど、editable installというのは、直接参照して利用する形式のインストールのこと。…

pythonのargparseのオプションと関数の引数の乖離を実際の処理を呼ばずに確認する方法を考えてみる

argparseをそのまま使うと以下の様な形になる。色々な書き方があるが、個人的にはflag部分はキーワード引数を使った関数定義にして、parse_args()で返ってきた値をそのまま使わずに**paramsで適用する形が好み。 def hello(*, name: str) -> None: print(f"h…

pythonで**kwargsにもう少し細かく型を付けたい

例えば以下の様な関数helloがあるとする。可変長引数を使って定義されている。とてもtrivialな例ではあるけれど説明用なので。。 from typing import Any def greet(prefix: str, *, name: str) -> None: print(f"{prefix}, {name}") def hello(**params: An…

enumとdataclassesを含んだ値をテキトーにJSONとしてseiralize/deserializeしたい

昔に似たようなタイトルの記事を書いていましたが、これとはちょっと違った内容です。 datacalssesのインスタンスを含んだ値をJSONにするときのメモ enumやdataclassesを含んだ値をテキトーにJSONとしてserialize/desserializeしたくなった。パフォーマンス…

resource定義無しのterraform入門

terraformの記述の仕方を調べるための個人的なメモ。resourceを定義しないterraformの設定が書けるようになってからterraformに関する苦手意識が消えた。 teraformはIaCのためのものというのはわかっているものの、terraform自体に不慣れな段階の間はただた…

git diffのようにワード単位で色の付いたdiffが欲しい

ワード単位のdiffが欲しかったのでメモ。 ワード単位のdiff? 以下のようなファイルがあるときに $ ls src src/000person.json src/001person.json 000person.json と 001person.json の差分をdiffで見る1。色付きでみたいときには /tmp/a.diff などに出力し…

goでテスト用にhttpの通信を失敗させたかったのでその方法のメモ

たまにエラー時のハンドリング部分のテストが書きたくなることがありますね。例えば、通信の記録のような操作を書いているときなどに。 こういうときに人為的にエラーを発生させる方法を調べたのでメモをしておこうと思います。 タイムアウト分待つ まずはじ…

goでflexibleな実装の選択のためのちょっとしたパターンのメモ

前回の記事でxormのコードを読んでいたときに、flexibleに実装を選択するためのパターンがあったことを思い出したのでそのメモ。 flexibleな実装の選択? 実装の選択と言っても、DI的な話ではない。デフォルト実装と拡張の実装の間を自由に行き来できるよう…

sqlx/reflectxを触ってて、他のRDBMS関係のライブラリのcreate table部分の実装が気になったので調べてみたメモ

これは自分用のメモです。 github.com goでRDBMSを触るときに、sqxは機能が小さくて良いのですが、手元で実行例的なコードを書くときに、SQL側のtable定義とgo側のstructの定義を書いたりするのが面倒になることがあります。実運用はともかくとして、ちょっ…

pythonのバッチ用のイメージを作りたくなったのでサイズがどれくらいになるか調べてみた

これはかなり個人的なメモ。 コンテナ経由でpythonで作ったバッチを実行しようと思った。そしてイメージのサイズがどれくらいかを大まかに知りたくなった。そんなわけで調べてみた。 サイズを極限まで絞りたいと言う気持ちはなかったのでdistrolessなどは省…

gitのブランチの一覧を表示するときに最後にcommitした人の名前も一緒に表示する

gitでbranchが多くなってきたときに、どれが何をやっているbranchなのか読み取りづらくなっていくことがある。そのようなときに誰が更新しているbranchなのかがわかると便利ということを同僚から教えてもらい、確かにと思ったのでその方法をメモしておく。 …

OpenAPIの$refにdescriptionをつける苦肉の策

例えば以下のようなschemaがあるとする。このperson中のfather,motherは同じschemaのpersonを参照する形になっている。 { "components": { "schemas": { "person": { "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "in…

複数のファイルを利用したpythonスクリプトを1つの実行可能なzipファイルにまとめる方法のメモ

pythonのscriptを1つのファイルにまとめたい。そのような場合にはzipappの機能が使えるかもしれない。 zipファイルとして1つにまとめたファイルはpythonインタプリタで直接実行できる。 このモジュールは Python コードを含む zip ファイルの作成を行うツ…

一時的なファイル出力を伴うテストにtesting.TB.TempDir()が便利そう

たまたまファイル出力を伴うようなコードを書いていて、これのテストにtesting.TB.TempDir()が使えることがわかったのでメモ。1.15から追加されていた模様。 便利なのは自動でcleanupされる点 使い方 例えば以下の様な処理があるとする。特に意味自体は無い…

pythonでモジュールにversion情報を含めたい場合の方法のメモ

個人的には、pythonでパッケージを公開するときに、モジュールにバージョン情報を含めるのが好きではなかった。setup時のimportエラーなどが起きうる可能性を考えて。 ただ、たまたま要望されたのでその方法を調べてみたところ、手軽に扱えるようになってい…

github notificationで自分のorganizationだけに絞ったfilterが設定できるようになっていた

今までnotificationが貯まっていた 今までは気になるrepositoryをwatchしていたんですが、github notificationが壊滅していました。数千件くらいnotification貯まる感じです。これが解決できたのでそれのメモ。 org:<orgnization> というfilter そんなわけで、自分のrepos</orgnization>…

2020年のブログの執筆環境

ブログの環境について書いていた人がいたので、自分の環境も書いてみることにした。書いてみたがあまり書くことがなかった。 swfz.hatenablog.com yoshitaku-jp.hatenablog.com エディタ Emacsを惰性で使っている。特筆することはなくmarkdownを書いているだ…

Githubで今年作ったリポジトリの一覧を出力する

毎年この方法を調べている気がするが、今年はGithub CLIがGraphQL APIの呼び出しをサポートしたようなので、コレを使って出力してみることにする1。GraphQL自体を試したい場合には、 https://docs.github.com/en/free-pro-team@latest/graphql/overview/expl…

同じシグネチャを持つ異なる関数たちのreflect.Typeのidentityについて

シグネチャが同じ関数のreflect.Typeが一致することに気づかずハマったりしていた1。 package main import ( "fmt" "reflect" ) type Foo string type Bar string type Alias = string func Hello(string) string { return "" } func Byebye(string) string …

reflect-openapiにswagger-uiを組み込んだ

github.com この記事の続き。いろいろ変更を加えてswagger-uiを組み込んだ。 goで作られた既存のweb APIに後付けでopenAPI docを付けたかった これまでのreflect-openapi 以下のような "Hello " と返すだけの関数を公開する。 type HelloInput struct{ Name …

goでassemblyを見たいときに can't find import <package>

例えば以下のようなファイルがあるとして。assemblyを覗きたいときに go tool compile を使おうとする。 $ tree . ├── Makefile ├── go.mod ├── m.go └── main.go 0 directories, 5 files 上手くいかない。 $ go tool compile -S -N main.go main.go:6:2: ca…

そのstruct、実は不要になるかもしれません

これはGo Advent Calendar 2020の3日目の記事です。 とりあえずで登録してしまったので、特に肩に力の入った力作などは用意してないです。この記事は、本来のアドベントカレンダーの趣旨に沿った(?)ちょっとした内容の記事にしようと思います。 はじめに…

pythonでyield先で起きた例外をyield元で取り扱いたい

「pythonでyield先で起きた例外をyield元で取り扱いたい」というようなことを言っていた。いろいろ調べ直してまとめてみたらgenerator周りの復習になったのでそのメモ。 課題 yeild先で起きた例外をyield元で取り扱いたい?とはなにか? def _use(i): if i %…

pythonでbreakpointなしに例外の発生元で自動的にpdbする方法のメモ

デバッガーを使いたいがコードにbreakpoint を仕込むのが面倒な時がある。 例 例えば以下のようなコードがあるとして、 foo > bar > boo と辿っていた中でのbooでpdbを実行して欲しい。 def foo(): print("foo") bar() print("foo") def bar(): print("bar")…