memo

pythonでmypyを騙してfieldにmetadataを付加したクラスを定義してみる

ちょっとだけ背景説明 なんでそんなことがしたくなったかというと、やっぱり定義を記述したらおしまいでいられる世界が理想なので。そして特定の領域(e.g. OpenAPI, GraphQL, Protcol Buffers, database定義, ...)に属さないような中立的な表現が欲しくなっ…

まじめにgoでDIを考える前のメモ

そろそろDIについてもまじめに考える必要が出てきたので考えることにする(この記事では終わらない)。たまには答えになっていないようなメモでも。 何となく最近思うのは、goゆえの制約はあっても、goだからで省略できる特別なことは特に無いなということ(…

個人的なemacsのmajor-modeの作成方法についてのまとめ(リンク集)

なんか忘れてしまったので個人用のまとめ。おそらく他の人に役に立つことは無い。 emacswikiから major-modeを定義する方法については概ねemacswikiに説明がある。 from scratch define-generic-mode define-derived-mode define-generic-modeは新しいmajor-…

sqlxの使いかたを把握するための情報のメモ

sqlxの資料のメモ github.com 色々探すのが面倒なのでここにメモしておく。 godoc https://godoc.org/github.com/jmoiron/sqlx guide http://jmoiron.github.io/sqlx/ 後者はcontextの対応が含まれていないコードなので少し古いかもしれない。 はじめの一歩 …

go-run meets pstree

以下の内容のメモ 現在の環境1で実行されるprocessの概観を掴む方法 go runがtmp directoryにbuildした結果のバイナリをsubprocessとして実行していること go runが実行するprocess 例えば以下の様なテキトウなfile serverのようなコードがあるとする2。 mai…

pythonのimportシステム周りのことについてのメモ、あるいはimport fooとしたときに何が起きるかについて

あんまり丁寧に文章を書く気力が起きないので個人的なメモ。pythonのimport周りの話。(最後の実行例のgistはこちら) (追記: 結局それなりに長くなった) 当初のお気持ち import fooがどうなるかみたいな話、そういえば発表のお題としてはけっこう良かったかも…

特定のコードの特定の箇所を引用して言及したいという話

前回の記事の続き 前回の記事で、以下のようなことを言っていた。 そしてわかりやすさを考えると、「どのクラスのどのメソッドの中のどの箇所か?」という形で表現したい(今回の場合は「WebSocketEndpointのdecode()メソッドのjson.loads()部分」という形)。…

もっとコードに対して言及して記事を書きたいという話

ちょっとノルマ1が迫ってきているのでたまには自分の頭の中にあることをdumpする形でノルマを消化する。 頭の中の風景 色々な人が色々なブログとの付き合い方をしていると想う。自分自身のこのブログへの付き合い方は基本的には備忘録的な意味合いが強い感じ…

.gitattributesをいじって特定のファイルをgithubのPRのdiffの対象から外す方法のメモ

.gitattributesをいじって特定のファイルをgithubのPRのdiffの対象から外す方法のメモ。 TL;DR .gitattributes <隠したいファイルのディレクトリ>/* linguist-generated はじめに 例えばコード生成をしたり、利用の過程で複数のファイルを1つにまとめたファ…

環境変数で設定を管理したくなった場合のpython-dotenvのメモ

最近は設定ファイルだけではなく環境変数で設定を渡すことがけっこうある(コンテナ的な文脈だったり、12 factor app的な文脈だったり色々)。自前で頑張っても良いけれど。自分でコードを書かずに済ませたい。 何か良いライブラリは無いかなと探してみたらあ…

pythonでライブラリを使用せずにちょっとしたspinnerとprogress barを作る(CLI)

たまに欲しくなるのでメモ。やっていることはエスケープシークエンスでN行戻った行頭に移動して現在のカーソルから端末の終端までクリアを繰り返しているだけ。 progress bar ちょっとしたプログレスバーの表示。ふつうにやる分にはtqdmを使ったほうがお手軽…

N個のchannelがcloseされるまで読み込む方法について

N個のchannelがcloseされるまで読み込む方法についてのメモ。 1個のchannelがcloseされるまで読み込む まずはじめにN=1の場合について。これは単にforループで取り出せば良い。 package main import ( "fmt" "sync" "time" ) func main() { var wg sync.Wait…

net/httpのhandlerを書く時に気をつけたほうが良い順序について

たまに標準ライブラリのみを使ってnet/httpのhandlerを実装することがある。その時の種々の操作で呼び出す順序を気にする必要があるものがある。それのメモ。 先に結論を言ってしまうと以下の順序で記述しましょうという話。 http headerに情報を追加する ht…

最近の砂場でのpythonのサンプルコードの実行方法について

日記的なrepositoryを作っていて、何か調べたいことがあったときにそこにサンプルコードを書いて調べたりしている。そのサンプルコードの書き方でdebugとinfoの実行形態を分ける方法が便利だったのでメモ。 趣旨 この方法の趣旨は以下のような感じ。 通常は…

Makefile上の個々の操作の実行時間をファイルに出力したかったところからの諸々

Makefile上の操作に対して、実行時間を計測したい。ただしコンソール上に出力するのではなくファイルに出力したい(というところから始まった)。 ファイルを分けたいので呼び出し側でリダイレクトでは無理 例えば以下の様なタスクがある。それぞれの操作の…

ertを使ってelispのunittestを書く方法のメモ

ertを使ってelispのunittestを書く方法のメモ。ertは標準で添付されているのでインストールは不要(なはず)。 使いかた 以下のような関数を定義しておく(テスト対象) (defun my:add (x y) (+ x y)) テストを書く。 (require 'ert) (ert-deftest add20 () …

emacsのフォントの大きさを調節する方法のメモ

はじめに 遠くの画面に写して作業をしたくなった。デフォルトで用意されているコマンドだけでは特定のバッファのフォントの大きさを調整する方法だけしか見つからなかった。しょうがないのでちょっとしたコマンドを作った。 そのついでにemacsのフォントの大…

goで現在のパッケージが依存するパッケージを調べたい

goで依存するパッケージを調べたい。意外とgo listコマンドが便利に使えた。 # そのパッケージ自体 $ go list -f "{{if not .Standard}}{{.ImportPath}}{{end}}" -deps # cwd以下の全てのパッケージでの依存 $ go list -f "{{if not .Standard}}{{.ImportPat…

goでファイルを一時的に書き換えた処理をSIGINT時にもrollbackしたい場合のメモ

github.com はじめに goでhttptrace付きでgo runを実行するものを作っていた。詳しい話はアドベントカレンダーに記事を書いた。PoC的なものだったのでまじめには作っていなかったのだけれど意外と便利なので常用してみようとした。そのときに1つだけ困った…

go runに引数として.goのファイルを渡す方法について

通常go runは以下の様にして使う。 $ go run my/main.go my/xxx.go このときxxx.goはソースコードとして扱われてbuild時のpackageに含まれる。 ところで、go/astなどのコードを試しているときには、.goのファイルを入力として扱いたいときがある。このような…

テスト時のinterfaceに対するfake objectの作成にinterfaceの埋め込みを使う

過去の以下の記事の続き。 goでmockを自動生成する以外に大きなinterfaceを扱う方法を考えたりしてた この方法はたまに使われていたりする。ただリンク先の記事ではinterfaceを実装したstruct(アプリで実際に利用しているstruct)を埋め込んでいる。 これは…

pkg/errorsのerrorを独自定義のerrorに使ってしまうと微妙という話

何も考えずにgoimportsで補完された結果のコードを残しておいたら、pkg/errorsのerrorが独自定義のerrorに使われてしまって微妙だった。具体的に言うと意図しないスタックトレースを表示してしまうことになる。 例えば以下の様なコードのとき。 package main…

pythonで改行をnormalizeする方法のメモ

APIはwindows向け、現状の環境はmac(ないしはlinux)みたいなことがあったりする。 こういうときには、str.split()ではダメ、os.linesepを使ってsplitしてもダメ。 素直にstr.splitlines()してos.linesepでjoinというのが良さそう。 def normalize_linesep_te…

Emacsで指定したregionを標準入力として渡した結果をinsertする機能

時折、Emacsで現在のバッファにある文字列を入力として何らかのコマンドに投げて、その結果を取得したいと言うことがある。 単に結果を見たい場合には、shell-command-on-region が M-| などにbindされているので便利なんだけれど。結果を直接現在のバッファ…

jqとls --colorの不思議とisatty

コマンド出力に色が着く ls --colorなどを実行すると文字に色が着く。こういうふうに。 これはjqも同じで普通にコマンドを実行すると色が着く。 pythonで これらはansi-color-code付きで出力されているので色が着く。pythonでやってみるとこういう感じ。 pri…

手元のファイルのansi color codeを取り除きたい場合の関数

手元でテキトウに正規表現作っただけなのでミスっているかも。 (defun my:strip-ansi-color-region (beg end) (interactive "r") (unless (region-active-p) (setq beg (point-min)) (setq end (point-max))) (save-excursion (save-restriction (narrow-to-…

gcloudやgoogle-api-python-clientの使うcredentialsを見る

メモ。 gcloud sqliteにはいっているみたい $ file ~/.config/gcloud/credentials.db 2>&1| sed "s@$HOME@HOME@" HOME/.config/gcloud/credentials.db: SQLite 3.x database, last written using SQLite version 3024000 おもむろに取り出すと、access_token…

pythonでescapeされた(?)文字列をunescape(?)する方法のメモ

時折変換の仕方などを忘れてしまい調べることなどがあるので。個人的なメモ。 JSONの文字列表現の文字列 JSONの文字列表現の文字列。なんて言えば良いんだろ?こういうやつ。 "{\"name\": \"foo\", \"age\": 20}" とりあえず、unicode-escapeを使ってどうに…

あとで調べる:mypyで分割代入でのエラーはtyping.Tupleなどの型のときしかみない?

以下のコードが通ってしまう。 import typing as t def f() -> t.Mapping: return {} def use() -> None: z = f() y, z = f() x, y, z = f() if __name__ == "__main__": import subprocess subprocess.check_call(["mypy", "--strict", __file__]) print("o…

mypyとTypedDictとtotalオプションについて

pythonでもdictに型を付けたいですね。一応TypedDictという型を定義したいという動きになっています。ちなみにまだこの機能はexperimentalになっているので。mypy_extensionsの方に入っています。 import mypy_extensions as mx class Pair(mx.TypedDict): l…