memo

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()の使…

go testのtest.testlogfileフラグが時々便利

test.testlogfileを付けてテストを実行すると、テスト中の以下が分かる。 os.Stat()したファイル os.Open()したファイル os.Getenvした環境変数 これは、例えば、net/http.FileSystemが使われた様なテストなどで苦しめられたときに便利に働くことがある。 例…

goでdeprecatedな関数の利用に対してwarningを出すlintの使い方のメモ

github.com 適切にDeprecated:という修飾を含んだコメントを追加すると、その関数を利用した際に、以下の様なwarning messageが出るようになる1。 main.go:8:2: greeting.Hello is deprecated: use HelloWithContext() (SA1019) これの使い方のメモ。 Deprec…

go-vcrを使ったSymmetric API Testingのメモ

github.com go-vcrを使おうとしてみたのでそのメモ。 Synmetric API Testing? Symmetric API Testingという言葉は、この記事が使っている言葉のよう。 https://blog.gopheracademy.com/advent-2015/symmetric-api-testing-in-go/ 単純に言えば、通常は何らか…

goでreflectを使ってunexported fieldの値を見る

テストなどのhelperを作るときに、特定のstructのunexported fieldにアクセスしたくなることがある。 その方法のメモ(あとでまじめに書くかもしれない書かないかもしれない)。 with exported field その前にreflect経由でのアクセスで考えてみる。以下の様…

PEP593のAnnotatedでwrapされた型ヒントからmetadataを取り出す

Annotated PEP593で型ヒントにmetadataを付けられる様になった。 例えば、関数の型ヒントを見てCLIのコマンドを生成するようなフレームワークがあったとして、コマンドラインオプションのヘルプメッセージ用の文字列も保持したい。以下のコード上での --name…

makeの:=と=を使い分けると便利

正直な話をすると今まで常に := だけを使っていて、= を使うことはあまりなかった。 使い分けると便利な状況が分かってきたのでここにメモしておく。 要約 ちょっとした実験用のタスクランナーとして使っていたMakefileの書き方が変わる1。 今まではこう書い…

pythonの型定義を使ってOpenAPI docを出力してみる。

今回は以前のprotobufの出力を試した記事のOpenAPI doc版。 pythonの型定義を使ってprotobufを出力してみる。 近年のOpenAPIの状況 近年では、openAPIとの付き合い方もだいぶ落ち着いてきて、夢を見た機能を実装し切るというような気持ちのところは減ってき…

SQL中のtypoを何としてもコンパイラにチェックしてもらいたかった

github.com 以前に頭の中で考えたりしていたことだったのだけど。真面目に手を動かしてみることにしてみた。まだ作り途中。 考えていたこと 一番気にしたかったのはSELECT文の実行。SQLをそのまま書くのは、実際のqueryを把握しやすくて良いのだけれど、生の…

pythonの型定義を使ってprotobufを出力してみる。

この記事の作業の一環で、pythonの型定義の情報を使いprotobufを出力することを試してみた。 goはランタイムという発想のミニフレームワークを作り始めた 基本的にはアイデアスケッチのようなもので、ちょっとしたコード辺を書いてみて、上手く期待する機能…

goで文字列ベースのenumの定義はこんな感じが良いかもしれない

文字列ベースのenumの定義で良さそうなコードができたのでメモ(iotaを使った数値がベースのものではない)。 文字列ベースのもの 個人的には、特に速度やメモリーなどのことを気にしない場合には、文字列ベースのもののほうが取り回しやすくて良いと思って…

依存を可能な限り少なくして、irisデータセットの散布図を描きたい

グラフを描きたいと思ったときには以下の2つ場合がある 絵が描きたい データを分析したい(EDA) 今回は概ね前者の場合の話。ついでにnumpy,scipy,pandasなどに依存したくない。依存はこれだけ。 $ pip freeze pygal==2.4.0 vega-datasets==0.8.0 依存を可能…

Makefile上でprocess置換を使う方法

TL;DR makeはデフォルトでshが動く。bashなどにしないとprocess置換が使えない。 make中ではprocess置換が使えない? 何も考えずにprocess置換を使おうとするとエラーになってしまう。 $ make 02 python <(python -m prestring.python hello.py) /bin/sh: -c…

pythonのgraphql-core上のオブジェクトからSDL (schema definition language) を出力する方法についてのメモ

graphqlのSDL (schema definition language) を出力する方法をメモしてみた。 github.com 個人的なメモなので分かりづらいかもしれない。graphqlに対応したコード生成などを考える上でどの表現だけを残しておけば良いのかなどを気にしたかった。その上でいろ…

普段遣いの言語がpythonとgoの人がrubyを使いたくなるときのこと

備忘録ということでメモしておくことにする。 いつrubyが欲しくなるか? 今現在では日常的に書く言語、つまるところの普段遣いの言語がpythonとgoなのだけれど、時折rubyが欲しくなる。 それがいつかというと、ワンライナーがほしいとき。タイトルを見れば想…

graphqlのdataloader的なもの(bulk query)について考えてみる

そろそろノルマがやばいのでdataloderを支えるような概念について考えてみることにする。 例えば以下のようなコードは3回queryを実行する。 u0 = Users.get(1) u1 = Users.get(2) u2 = Users.get(3) 実際のアプリケーションでは、これらのqueryがコード上の…

goのcologのような色付きのloggingをpythonの標準ライブラリのみで行うためのメモ

goのcologのような色付きのloggingをpythonの標準ライブラリのみで行うためのメモ。 colog? github.com 色付きのログ出力は色々あるけれど。goのcologの表示が手軽で便利そうだったのでこれを参考にすることにした。 このような形で色付きで出力される。 こ…

手軽な実験のためのimport logger;logger.infoが面倒だったのでhandofcatsにprintを追加した

github.com 手軽な実験のためのimport logger;logger.infoが面倒だったのでhandofcatsにprintを追加した。 callstackを取り出してloggerに渡す名前を推測してみたりなどと色々と考えたりもしたけれど、結局保守的な実装に落ち着いた。 handofcats.print hand…

最近はprestringにcodeobjectというものを組み込もうとしている

github.com (この機能は妄想の類でまだ未完成なものなので注意) 最近はprestringにcodeobjectというものを組み込もうとしている。実はこのcodeobjectというものの雛形は既に作って使われていたりする。例えばhandofcatsとmonogusaの中で。 https://github.co…

goで設定ファイルを読み込むときに上書きしたい

goで設定ファイルを読み込むときに設定の一部だけを上書きしたいことがある。それ用のコードのメモ。 github.com mergo? mergoというのはけっこう古くからあるライブラリみたい。 A helper to merge structs and maps in Golang. Useful for configuration d…

完全に自分の為のsqsをpythonで触るときのメモ

自分用のメモなので汚い。やりたいことはSQSのsend/receiveのやり方の例を1つのpythonファイルに押し込めること。 準備 以下が必要。handofcatsやjqfpyは手抜きのためのもの。 requirements.txt awscli boto handofcats jqfpy $ pip install -r requirement…

goで想定した実装が1つだけのときに、テストのためだけにインターフェイスを書きたくない

この話に似た話。type aliasを使った型の読み替えで手抜きができる(場合がある)。 テストのためだけにインターフェイスを書きたくないでござる リンク先の記事はtype aliasを使って同一パッケージ上にimportしてくる。 そしてテスト中はmockの方にビルドタグ…

client_idとcient_secretだけからgoogle authのtoken情報を取得する方法

こんな感じでやれば良い。書きかけ。飽きたので途中でおしまい。 prepare pip install google-auth-oauthlib python-dotenv run 以下が必要。 アプリがRPに権限を要求するときのclient id, client secret 権限を要求するscopes client id, client secret pri…

コマンドライン引数によって、オプションが変わるコマンドの書き方のメモ(2 phase parse?) (updated)

過去にこのような記事を書いた。 コマンドライン引数によって、オプション引数が変わるコマンドの書き方のメモ(2 phase parse?) 今ならどうするだろう?という記事。 これはsubcommandに他ならない 元の記事では以下の様な実行の仕方を許容しているようだ。-…

最近のgoでCLIのコマンドを作るときの雛形のメモ (updated)

昔にも似たような記事を書いていたみたいだった。最近のgoでのCLIツールを書く際の心境の変化があったのでその辺をメモしておく。 最近goでCLIのコマンドを作るときの雛形のメモ 心境の変化 心境の変化は2つ コマンドラインオプションをstructで囲む理由が…

片手間にui componentsの使用感を試そうとしてやってみたことのメモ

片手間フロントエンドの人が、ui componentsの使用感を試すためにやろうとしたことのメモ。 はじめに 試そうとしたのは、reactのui components。以下2つ。 evergreen tableau-ui evergreen.segment.com github.com テキトーにこの2つを選んだ。特にこだわ…

blogとの付き合い方について あるいはなぜ自分がblogを書き続けているかについて

この文章は write-blog-every-week Advent Calendar 2019 の 7日目の記事です。 TL;DR (ほぼ)毎週blogを書いている advent calendarへの参加のついでに自分とblogとの付き合い方についてまとめてみた 自分の頭の中を再現することを重要視しているらしい What…

goでpkgパッケージを作りたくなる派の意見

個人的にはpkgパッケージを作ることにわりと肯定的な立場なので思ったことをメモしておくよ。 pkgパッケージが作られる理由 pkgパッケージを作りたいと思う理由は以下だよ。 pkgパッケージはmonorepoの小さい版と解釈すると納得できる 公開されたパッケージ…