サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
夏の料理
pod.hatenablog.com
昨日の記事のついでに色々goでのwebプログラミングに関する初歩的なことをメモしておこうと思った。 net/httpのhello worldから始めてどういうタイミングでどのライブラリが必要になるかのメモ - podhmo's diary 今回はhandlerに依存を持ち込む方法のメモ。 方法は概ね3つ。後はそれらのバリエーション。 グローバル変数として状態を保持 handlerを関数ではなく特定のstructのメソッドとして定義し、そのstructのフィールドに保持 handlerではなくhandlerを返す関数として定義し、routerに登録するのは返されたクロージャにする ちなみにわかっている人にはこのStack Overflowのページを見せれば終了という気もする。 go - How to pass a parameter to my auth middleware to get
真面目にterraformでmoduleを書くようになって知った事をメモしてみる。これは自分用のメモなのであまり丁寧な説明はしない。 知った経緯がmoduleの作成ということであって、terraform moduleに関する機能というわけではない。 具体的には以下6つが知らなかった事柄 countで作成する/しないの制御できること lifecycleのignore_changesで差分の判定条件を調整できること moduleのvariableのtypeにはネストしたobjectのような複雑な型が書けること moduleのvariableのtypeは渡される値の部分型であれば良いということ listにはconcat()、mapにはmerge()でいわゆるmonoidっぽく扱えること terraformにもfor expressionという内包表記的な記述が存在していること countで作成す
これはGo Advent Calendar 2020の3日目の記事です。 とりあえずで登録してしまったので、特に肩に力の入った力作などは用意してないです。この記事は、本来のアドベントカレンダーの趣旨に沿った(?)ちょっとした内容の記事にしようと思います。 はじめに断っておくと、あんまり役に立つ内容ではありません。へー、そういうのもあるんだー程度の軽い気持ちで読むことをおすすめします。 goでのweb API用のクライアントライブラリ goでweb API用のライブラリを実装するとき、とくにREST API用のクライアントライブラリを実装してみるときに、パスのネスト構造をそのままstructとして定義する実装をよく見ます。これはstructを一種の名前空間として使うことで名前の衝突を避ける機能、そして実装をちょうど良い粒度で分割するためのアイデアと言えるかもしれません。 例えば、以下のような
時折変換の仕方などを忘れてしまい調べることなどがあるので。個人的なメモ。 JSONの文字列表現の文字列 JSONの文字列表現の文字列。なんて言えば良いんだろ?こういうやつ。 "{\"name\": \"foo\", \"age\": 20}" とりあえず、unicode-escapeを使ってどうにかする。 >>> s = '"{\"name\": \"foo\", \"age\": 20}"' >>> s.encode("utf-8").decode("unicode-escape").strip('"\n ') '{"name": "foo", "age": 20}' Unicodeリテラル こういうやつ。これもunicode-escapeでdecodeしてあげるのが良い。 '\\u3042' 最初がstrならencodeでbytesにする必要がある。 >>> '\\u3042'.enc
この文章は write-blog-every-week Advent Calendar 2019 の 7日目の記事です。 TL;DR (ほぼ)毎週blogを書いている advent calendarへの参加のついでに自分とblogとの付き合い方についてまとめてみた 自分の頭の中を再現することを重要視しているらしい What are you doing? write-blog-every-week? write-blog-every-weekとはその名の通り「毎週blogを書こう」という集まりです。基本的にslack上で活動しています。 このグループの発端は @kojirock5260 さんのこの記事で分かりそうです。 勢いで週一blog書くslackグループを作った 基本的には以下に書かれていることの通りです。 とりあえず細かいルールはなしで 週イチでblog書く。 書けてなければ煽る。
from nbreversible import code import pandas as pd import numpy as np import seaborn as sns # %matplotlib inline xs = np.arange(1, 10) ys = np.arange(1, 10).reshape(9, 1) m = xs * ys df = pd.DataFrame(m) df 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 9 1 2 4 6 8 10 12 14 16 18 2 3 6 9 12 15 18 21 24 27 3 4 8 12 16 20 24 28 32 36 4 5 10 15 20 25 30 35 40 45 5 6 12 18 24 30 36 42 48 54 6 7 14 21 28 35 42 49
構造化ログ? 通常のloggingライブラリなどで使われるログをテキストログと呼ぶとすると、構造化ログとテキストログには以下の様な違いがある。 テキストログ ログは人が読むもの 通常テキストファイルに出力され、grepなどにより該当するログを見つける 1つのログの単位はテキスト(文字列) (パラメーターを自由に付けたりというのはむずかしい) 構造化ログ ログは機械が読むもの 何らかのアプリケーションにより検索され、何らかのビューから情報を確認する 1つのログは何らかの構造化された表現(e.g. JSON) (パラメーターを自由に付加できる) すごく雑にいうとテキストログと言うのは以下のような出力のものを指してる。 2017-05-20 21:13:44,296 INFO:app:hello 2017-05-20 21:13:44,296 ERROR:app:broken Traceback
.gitattributesをいじって特定のファイルをgithubのPRのdiffの対象から外す方法のメモ。 TL;DR .gitattributes <隠したいファイルのディレクトリ>/* linguist-generated はじめに 例えばコード生成をしたり、利用の過程で複数のファイルを1つにまとめたファイルを作ったりすることがある。これらをrepositoryに含めた際にPRに含まれて邪魔に感じることがある。 今までdiffを隠せるのは、特定のファイルや例えば// Generated by xxxxのような特定のコメントなどが存在するものだけだと思っていた。任意のファイルを対象にできることが分かったのでそれのメモ。 linguist? github.com github上でのファイルの取扱いを決めるコードは公開されている。 Language Savant. If your repo
なんとなく自分の中でのopenAPIについての総括的な行いをしたくなってきた。ちなみに雑感的なものは最近tweetした。ただし今回はその手前でschemaに関する事柄についてまとめてみようと思った。 jsonschemaとOpenAPI Spec ここで言及しているjsonschemaとOpenAPI Specはこれらのこと。 https://json-schema.org/ https://swagger.io/specification/ ただしOAS(OpenAPI Spec)の利用経験的にはOAS3.0.xではなくOAS2.0を利用してのことが多くなるかもしれない。そしてjsonschemaに関してはフルの仕様の話ではなくあくまでOASに関連するものだけ。 strictなschemaとは? strictなschemaとは?というところから端を発して、なぜjsonschemaが辛くな
時折、ちょっとしたスピードアップにhttp(https) requestを並列で投げたい場合がある。aiohttpなどを使っても良いが既存のコードを書き換えるのもめんどくさい。そのようなときの方法のメモ。 concurrent.futuresを使う方法も考えられるけれど。今回はasyncioだけに絞った話。 いわゆるpythonでのhttp requestのデファクトスタンダードはrequestsだと思う。ところでこのrequestsはnon blockingではないのでasyncio上で使おうとすると処理がblockしてしまう。run_in_executor()を使うと処理を外部の環境に移せる。 試しに、run_in_executor()を使ってみよう。動作確認自体は直接のhttp requestではなく、requestを模したfakeの関数を使って行う。以下の様な関数。この処理はtim
最近は設定ファイルだけではなく環境変数で設定を渡すことがけっこうある(コンテナ的な文脈だったり、12 factor app的な文脈だったり色々)。自前で頑張っても良いけれど。自分でコードを書かずに済ませたい。 何か良いライブラリは無いかなと探してみたらあったので使いかたのメモ。 github.com python-dotenv Get and set values in your .env file in local and production servers. tada install $ pip install python-dotenv 挙動 getting startedを読むだけでは挙動を把握できなかったので色々調べてみた。 挙動を一言で言うと、os.environに対してdefault値を与えるもの。 たとえば以下のような.envがあるとする。 .env prefix=hel
昨日あたりにsqlalchemyのautomapの仕組みをつかってgraphqlのschemaを作ろうとしていたのだけれど。その時に使っていたsqlalchemyのautomapの仕組みが期待していたのとちょっと違っていたのでどうしようか考えてみる。 sqlalchemy? pythonで使われているORM mapper的なもの。これ automap? 古くはsqlsoupと呼ばれる、既存のDBの情報を取り出して、ORM用のmodelを良い感じに作ってくれるメタプログラミングを利用したパッケージがあった。このパッケージにあった機能の概念ををsqlalchemyの作者がsqlalchemyに取り込んだもの。使い方はドキュメントを読むと良い。 automapの仕組み automapの仕組みは大雑把に言うと以下のもの。 metadataのreflectを使う reflectによって得られた設定を
asyncioを使っていて、awaitableな関数群で構成されていないコードセットを無理やり非同期化してお茶を濁す時にrun_in_executor()が使われる。 ただしこのrun_in_executor()を使っても上手く処理を別スレッドに逃がせずという事態に陥ることもある。その理由などについてのメモ。 (実験用のコードのgist。分かっている人はこれを見るだけで良いかもしれない) (正確には言えば、しっかりと別スレッドで実行されてはいるのだけれど、特定のコードブロックの実行がCPUを占有して、非同期的に動いている他の処理の待ち受けにすら反応を返さない様に見える状態のこと) run_in_executor()を使ってもブロックしてしまう とりあえず以下の様なコードを見て欲しい。1秒掛かりそうなタスクを2個、2秒掛かりそうなタスクを1個、並行で動かそうとしているが実際の実行時間は4秒に
vgoが有効な環境の場合に相対importがエラーになる 時折、GOPATH外で作業したりするときなどに相対importが使いたくなる。例えば以下の様な構成でxxx packageの関数を利用したい。 . ├── main.go └── xxx └── hello.go 1 directory, 2 files xxx/hello.go package xxx import "fmt" // Hello : func Hello() { fmt.Println("hello") } main.go package main import ( "./xxx" ) func main() { xxx.Hello() } 以前まではGOPATH外で書いたgoのコードでファイルを分けたpackageを読み込んで利用したいときには、このような形で相対importを使うことができた。一方でgoのmod
最近cliのコマンドを作る時にやっていることをまとめてみる。ここでのコマンドは特にパッケージとして提供されるシェルなどから実行されるコマンドのことを指している。 何が問題? 特にパッケージの提供者とパッケージのユーザーの望みが全く乖離せず一致している場合は問題がない。ユーザーが必要としている機能をパッケージの作者が提供すれば良い。 問題はところどころカスタマイズしたくなるような場合。このようなケースは自分がパッケージの作者でありユーザーである時によく発生するので面白い。パッケージの機能としては含めたくないものの現在のプロジェクトの範疇では必要となる、ただし新たなサブパッケージの様な何かを作る程汎用性があるとは思えないというような場合など。このような時にどうすれば良いのかということについてある程度回答ができるようになったのでまとめてみる。 おさらい 上の問題についてとりあえずpythonでの
次のページ
このページを最初にブックマークしてみませんか?
『podhmo's diary』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く