memo

goでfunc()(object, func(), error)のようなファクトリー関数の扱いについてのメモ

何かのファクトリーを統一的に扱いたいみたいなことを考えたときにそれへの対応を考えることがある。 goの場合はそれぞれの状況で自分の手でコードを書いてつなげなくてはいけない。ファクトリーに限らないがこの種のバリエーション自体に言及しているのはwi…

awsのassume roleに対応していなさそうなコマンドはaws stsを使わずともAWS_SDK_LOAD_CONFIG=1を付けて実行すれば良いかも?

以前の記事の続編ということになりそう。 awsのassume-roleに対応していなそうなコマンドを無理やり使う方法のメモ - podhmo's diary ほとんど内容はタイトル通りで、assume roleに対応していないようなコマンドがある。それを使うにはどうすれば良いかとい…

dockerのコンテナ内のファイルを丸ごとホストにコピーしたい

tarとかで持ってくるのが楽なんだろうか?テキトーに標準出力に書き出す感じで。 $ docker run --rm <container> tar -czf - <file> > <dst> ファイルが1つだけならcatでも良いかもしれない。あるいは小さめのファイルのものなら圧縮は不要かもしれない。 例 テキトーにelasticsea</dst></file></container>…

bigquery中のテーブルの列の削除について、RECORD型のフィールドへの注意

(これはメモ。全体的にふわっとしている) スキーマの変更が必要になったときの対応について調べたりなどしていた。 色々方法を眺めて見たところ、alter tableを使った方法が使用感的には個人的には一番しっくり来た1。が、機能が制限されているらしい。 そ…

BigQueryでのSTRUCT型を伴うSELECT文での重複行の削除についてのメモ

まず、前提として、BigQUeryにはunique constraint的な機能が存在しない。なので、あれこれと頑張ってユニーク性を保つ作業をしたくなることがある。テキトーに検索してみてもそういう話のstack overflowの質問やそれへの回答のようなものは見つかる。 Googl…

SQLでWITH句を使ってテーブルにデータをINSERTせずにqueryを確かめたい。あるいはSQLの復習。

主に手抜きのため。bigqueryのドキュメントの実行例で使われていてなるほどなーと思ったのでメモ。 ついでに色々なJOINの利用例を列挙してみる。 WITH句を使って仮想的なtableと見做す WITH句自体は概ねどのような処理系でもサポートしているみたい。これを…

docker上でpip installのcache-dirが効くようにする方法を調べてみた

以下の記事の続き。 pythonのバッチ用のイメージを作りたくなったのでサイズがどれくらいになるか調べてみた - podhmo's diary 調べてみたところ、どうやらbuildkitの機能を使うと行けるらしいという事がわかったので色々調べてみた。 python - Using a pip …

terraformのoutputにnestしたobject型の値も指定できる

以前こんな事を言っていたが、実際に調べたらnestしたobject型も機能したのでその訂正1。 terraformのmoduleを作成するようになって知った6つのことのメモ - podhmo's diary moduleのvariableのtypeにはnestしたobjectのような複雑な型が書けること これは、…

awsのassume-roleに対応していなそうなコマンドを無理やり使う方法のメモ

たまに以下の様な形で実行できないaws用のコマンドが存在する。 $ AWS_PROFILE=<profile> <cmd> 例えばcf-to-tfとかがそう。 github.com カジュアルに使おうとして動かなかった。 $ AWS_PROFILE=playground AWS_REGION=us-east-1 npx @humanmade/cf-to-tf --stack EC2Conta</cmd></profile>…

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

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

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

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

resource定義無しのterraform入門

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

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

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

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

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

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

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

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

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

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を書いているだ…

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…

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

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

goのflagで@<filename>と言う形式ならファイルの中身を利用するValueを作ってみる

ちょっとだけメモ。 最近は、標準ライブラリのflagだけで生活できるような気がしている。 まぁそれはおいておいて、例えば、curlなどで使われている@<filename>と言う表記で、ファイルの中身を取り出すvalueが欲しくなった。その実装のメモ。 flag.Value flagパッケー</filename>…

processを立ち上げまくる機会を避けるための簡単なRPCのメモ

時折、特定の前処理の一部として、1つのファイルを受け取る1つのスクリプトが何個も連鎖することがある。このようなときに都度都度processが立ち上がると、ほとんどの時間がimport timeで辛いということが起きる事がある。 以前書いた記事の中では、この辺…

windowsでsymlinkを含んだリポジトリを扱う方法のまとめ

まず、windows環境でsymlinkが使われているようなリポジトリを、何も設定せずにcloneしてくると、symlinkが死ぬ。これをどうにかする必要があった。いろいろ試行錯誤した結果のまとめのメモ。 要約 端的にまとめるなら以下ができれば良い。 .gitconfigで cor…

awscliのコマンドの補完の遅延にイラッとしたので速くすることを考えてみた

はじめに awsのCLIとしてawscliがある。version 2を使ってくれと書かれていたりはするものの、この記事はversion 1。まぁそこまで大差はないと思う。 補完を有効にしなかった場合には、どのコマンドを使えば良いかの確認に aws help を使い、どのサブコマン…

functional optionsの整理。interfaceにすることの意味について。

goのfunctional optionsに対する自分の理解と、いわゆるoption部分をinterfaceにしておくことの意味について考えてみる。 functional optionsについて まずはfunctional optionsについてのおさらい。functional optionsはoptionalな引数をいい感じに受け取る…

いろいろなビルド用の分岐にタグを使ってみる(例えばlambda用のビルド)

いい感じにできないか考えたりしていた。アイデア段階で途中だけど途中経過をメモ。 TODOアプリを模したコードがあったとして、以下の様な操作が提供されているとする。 type TodoApp interface { List() ([]Todo, error) Add(todo Todo) (Todo, error) } こ…

web APIのテスト時に500のときにはstack traceを表示したい

通常、status codeが500のresponseにstack traceなどが含まれているとセキュリティ的にはよろしくない。そんなわけで500のresponseは簡素な表現になる。一方でテストのときなどに、簡素な表現だけが表示された場合には、stack traceを含めたい。含めない場合…

go-chi/chiでJSON logを手軽に使う方法

go-chiは、あまり素のnet/httpからかけ離れたラッピングを行っては居ないので、goでのweb APIの取扱を考えたりするのに便利なのですが、本番運用のことを考えるとJSON logが欲しくなったりしますね。 go-chiのloggerミドルウェアの出力は綺麗なのですが、こ…

go-chi/chiの動作確認時に最初に書くコード

個人的には、細々としたコードの動作確認のために小さな1ファイルのコードを書くということを常々やっている。頭があまり良い方ではないので、ドキュメントを読んだだけでは実際の動作を正確に理解することができない。加えて微妙な差異を追加しての比較検討…

goのerrors.As()でpanicしちゃう話

ドキュメントに書いてあることだけど、渡し方をミスるとerrors.As()はpanicしてしまう。 As panics if target is not a non-nil pointer to either a type that implements error, or to any interface type. errors.As()の使い方 その前に errors.As()の使…