普段遣いの言語が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でadditionalProperties:trueのように余分なデータを保持したままJSONをmarshal/unmarshalする良い方法がみつからない

時折、余分なデータを保持したままJSONをmarshal/unmarshalしたくなることがある。例えばwebAPIを利用するときなどに、すべてのフィールドを記述するのは面倒だけれど、新しく増えるフィールドの存在に気づかず欠損してしまうのは避けたいみたいな状況。 内…

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…

新しいgithub CLI toolのghコマンドが更新チェックをいつ行っているのか気になったので調べた

github.com 最近githubがhubの代わりにghという新しいgithub用のCLIツールを出していました。cli/cliという位置にあるので組織名とリポジトリ名がすごい。特等席。 例えばmacでは以下の様な形でインストールすると、このghコマンドが使える様になる。 $ brew…

mypyでProtocolを使ってmix-inを利用したクラスに型をつける

たまには、他の人の役に立つ記事も書こうということで書いてみる。 例えば、以下のようなmix-inを使ったコードがあるとする。トリビアルな例で特に必要になりそうなコードではないけれど、まぁ説明のためのコードなので許してほしい。 EnumerableMixinはmap(…

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

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

prestringがasync/awaitをサポートした

github.com prestringがasync/awaitをサポートした。 (そしてしれっとmypyで型をつけた(実はこちらのほうが大変だった)) prestring? prestringは文字列を生成するためのライブラリ。with構文を乱用している。 例えば以下の様なコードが 00main.py from p…

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

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

monogusaにdefault componentという機能を追加した

github.com monogusaにdefault componentという機能を追加した。何故欲しくなったのかなどを思考の整理のためにメモしておく。 default component? このdefault componentという名前は独自の名前で暫定的な名前。通常のcomponentは名前と型によってmappingさ…

handofcatsで関数をコマンド化したときに戻り値をデフォルトで表示してくれるようにした

github.com handofcatsで関数をコマンド化したときに戻り値をデフォルトで表示してくれるようにした。 どうして? 今までは以下の様な関数をコマンド化したときに何も表示されなかった。 00hello.py from handofcats import as_command @as_command def hell…

完全に自分の為の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…

pythonでimportが長めのコマンドをbulk action的に実行したい

例えば以下の様な感じで雑にシェル上でループしてコマンドを実行することがあったりすると思います。 $ for i in `seq 10`; do python xxx.py `pintf "%02dfile.txt" $i`; done あるいは $ ls *.txt | xargs -I{} python xxx.py {} こういうときに例えばimpo…

今pythonでCLIの設定ファイルと付き合うならpydanticを使うかも?

argparse関連の記事を最近色々書いてきたけれど。そういえば設定ファイルとの付き合い方については書いていなかった。今ならどうやって付き合うかなーということのメモ。 ここでの設定ファイルとはファイル名がコマンドライン引数として渡されて、それを読み…

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

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

SQSのdeduplication Idについてよくわかっていなかったのでメモ

deduplication Idの指定にFIFOキューである必要はあるか? 概要 deduplication Idの指定というのは、ContentBaseDeduplicationの機能の一部 ContentBaseDeduplicationは、FIFOキューでなければ有効にならない。 つまりContentBaseDeduplicationでデフォルト…

ふつうのpython関数をサブコマンドとして扱えるようになった (ejectもあり)

github.com 今まではシングルコマンドだけの対応だったのだけれど、ふつうのpython関数をサブコマンドとして扱えるようになった。 handofcatsを作った当初は対応する気はなかったのだけれど、結局欲しくなったので実装してしまった。実装の過程 で結構ハマり…

loggingの有効/無効を真面目に書くのがめんどくさくなったのでDEBUG=1を見て勝手に有効にすることにした

loggingの有効/無効を真面目に書くのがめんどくさくなったのでDEBUG=1を見て勝手に有効にすることにしました。めんどくさかったので。 github.com バージョン2.5.0の話です $ pip install handofcats $ pip freeze | grep handofcats handofcats==2.5.0 普通…

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

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

monogusaを使ってただのpythonの関数をslackやdiscord上のコマンドとして公開できるようになった

今までただの関数をCLIとして利用できたり、ちょっとしたwebAPIとして利用できるようにしていたけれど。 今度はmonogusaを使ってただのpythonの関数をslackやdiscord上のコマンドとして公開できるようになった。 簡単な例 例えば以下の様な関数がある。本当…

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のためという触れ込みで昔作っていたパッケージがも…