2019-01-01から1年間の記事一覧

pythonのslack関連のパッケージはどの辺りを見れば良いか調べた

pythonのslack関連のパッケージはどの辺りを見れば良いか調べた。古の記憶ではslackbotが有名だった。 過去の自分はえらいので以前にpytestのpluginについて調べたものと同様の方法を使えば良さそう。 pytestのpluginどこまで使うか pypistatsとか名前忘れて…

monogusaのweb周りのコードを自動生成できるようにした

github.com monogusaのweb周りを更新した。大きな変更は前回からweb側のコードも生成されるようになったこと。前回の記事では「仮にこのように書けるとしたら...」という形でweb側のコードは手書きでの解説になったがそこは生成されるようになった。 関数定…

monogusaというパッケージを作りはじめた

github.com monogusaというパッケージを作りはじめた。まだ完成には至っていないのだけれど現状でできることなどを書きながらここで使用感を確認していくことにした。 monogusa monogusaというのはもちろん「ものぐさ」から来ている。お布団が大好きだったり…

片手間に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の小さい版と解釈すると納得できる 公開されたパッケージ…

python3.8 meets jqfpy

最近手元の環境のpythonのバージョンが3.8になった(雑に yay -Syu をやっていた結果1)。 そう言えば、python3.8ではセイウチ演算子で知られるassignment expressionsが入ったので、jqに疲れたpythonistaのためという触れ込みで昔作っていたパッケージがも…

関数をCLIとして使えるようにするラッパーのhandofcatsをアップデートした

github.com 関数をCLIとして使えるようにするラッパーのhandofcatsをアップデートした。 けっこう日常的に使っているものほどバグが放置される傾向にある気がする。 たぶん便利さを求めたものに関しては作品感のようなものを感じる度合いが薄いのかもしれな…

prestringに複数ファイルの出力機能を付けた

github.com prestringに複数ファイルの出力機能を付けた。prestring.output:outputを使う。 正確には以前からあったモジュールだったのだけれど、あまりにも貧弱かつ使いにくかったので書き直した。 コード 使いかたの話。例えば以下のスクリプトは、指定し…

mypyのLiteral typesのお供には--strict-equalityオプションを

Type hints pythonでも型を書きたいですよね。type hintsがあります。 これが def hello(name): return f"hello {name}!" こう。 def hello(name: str) -> str: return f"hello {name}!" 型が指定できます。 Literal types ところで型の指定は文字列型だけで…

python + asgi + graphqlまわりの試行錯誤用の最初のコードの作成。あるいは何かを学びたくなったときに最初に何をするかについて

最近はpython + asgi + grpahqlあたりで試行錯誤をすることが少しずつ増えてきた。その辺りのためのコードのメモ(gist)。 ついでに何か新しい領域を学ぼうと思ったとき、あるいは以前触れていたものの陳腐化してしまったとかんじている領域に対する知識のア…

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

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

pythonのtyping_extensions.Protocolがなぜ嬉しいか(propertyの例)

mypyで使えるProtocolが便利という話の例。 structural subtypingをやる際にgoでもほしいと想うことが多かった例がProtocolでは大丈夫なので良いなーという例(今回はそのうちのひとつだけを紹介)。 Protocol? Protocolをいつ使いたくなるかというと、大抵…

pythonでlogging.Loggerとlogging.LoggerAdapterを許す型を定義する方法のメモ

pythonでlogging.Loggerとlogging.LoggerAdapterを許す型を定義する方法のメモ。 別の言い方をするとunion typeとprotocolを使ったstructured subtypingの違いのメモ。 (:warning: おそらくまだProtocolをimportするにはtyping_extensionsが必要です) 例 例…

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

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

現在時刻のような実行の度に値が変わるようなresponseを含んだAPIのテストについて

github.com 昨日に引き続きgo-webtestの話。 現在時刻のような実行の度に値が変わるようなresponseを含んだAPIのテストがしたいとする。こういう場合はそもそも固定値を返せるように依存するコンポーネントを注入できるような構成にしておくのが良い。 依存…

go-webtestというパッケージを作ってました

github.com go-webtestというパッケージを作ってました。 go-webtest? 大雑把に言うと以下のようなものの詰め合わせです 手軽にresponseを取り出せるようなclient web apiのテスト時に発生するフラストレーションを緩和するような機能 request/responseをtes…

gitで更新のあったファイルに対してformatter(goimports)をかける

CIでlintのついでにformatter(gofmt, goimports, gofumpt)がかかっているかチェックしている環境があるとする。そこでformatされていないと怒られたファイルに対してformatterをかけたい。その方法のメモ。 あるコミットで変更されたファイルを集める 対象の…

goでrequired/unrequiredに対応しつつpointerを使わないunmarshalJSONのエラーメッセージについて

昔以下の様な記事を書いていた。 goでJSONのunmarshal時のrequiredなfieldの扱いについて リンク先の記事ではpointerを使わないstruct定義に対してUnmarshalJSONを自前で定義することでどうにかやろうという感じのものだった。ただしこのリンク先の記事の実…

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

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

goでfunctional optionsを使う場合には、こういう感じで書かれていると嬉しいという話。

今日は素朴な話。functional optionsの利用者がこういう感じでコードを書いてくれると嬉しいよという話。 functional options ? goでわりと有名なデザインパターン(?)。 初出はこの辺り。ただ最近利用されているのはここに書かれている内容を簡略化した亜…

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

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

goでcontextual logging + structural loggingする小さなパッケージを作った

github.com なんで作ったの? ちょっとした作業をするのに欲しくなったから。特にcontextual loggingの部分が欲しい。 ぶっちゃけた話structural loggingはzapを使えばおしまいで良さそうだった。ただできそうなことが多すぎそうだったので絞った。 contextu…

go-run meets pstree

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

go用のテストライブラリを作りました(言いたいことは分かります)

github.com go用のテストライブラリを作りました(言いたいことは分かります)。 使いかたはこんな感じです。 noerror.Must(t, noerror.Equal(30).Actual(add(10,20))) noerror.Should(t, noerror.NotEqual(30).Actual(add(10,20))) 以下詳細。 motivation 元…

reflect経由でgoのmethodを呼んだり存在を確認したりする

encoding/jsonパッケージの範囲を越えてJSONと戯れようとする。動的な何かが必要になる。そしてけっこうすぐにreflectパッケージに触れることになる。触りたくないけれど触る必要がある汚泥のような存在。それがreflect。 重い腰をあげてreflectと少し仲良く…

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

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

コードに言及する時にdocstringではなくsummaryを表示するようにした

github.com 前回の記事であげた気になっていた点のうち1つを直した。それはdocstringが長すぎるという問題。 長いdocstringは引用したい部分自体の意図を弱めてしまう。完全に使い方の問題だけどdocstringとかが長いコードが嫌いになるかも。 今回のような…

とりあえずコードに言及するコマンドをpyinspectに追加した

昨日のこれらの記事の暫定的な実装をpyinspectに追加した。 もっとコードに対して言及して記事を書きたいという話 特定のコードの特定の箇所を引用して言及したいという話 github.com $ pyinspect quote starlette.endpoints:L99 ~/venvs/my/lib/python3.7/s…

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

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