metaちょっとノルマ1が迫ってきているのでたまには自分の頭の中にあることをdumpする形でノルマを消化する。色々な人が色々なブログとの付き合い方をしていると想う。自分自身のこのブログへの付き合い方は基本的には備忘録的な意味合いが強い感じかもしれない。つまるところ何かがあっても書き留めて置かないと忘れてしまうのでメモしようというもの。時間の経過とともに頭の中にあったはずの何かが揮発してしまう。頭の中にあるものを外に出力してスッキリしたい(頭のgc)。今までの言及方法このブログの記事について考えてみると、何かを調べたいときにはそのサブセットを書いてみてそのサブセットに対して言及するという形を取ることが多い気がする。何らかのエラーで困ったとしたらそのエラーを再現するような小さなサブセットを作ってそれを題材として記事を書く。望みの挙動を作りたいとしたら、その望みの挙動を説明するような小さな例を書いて記事を書く。この記事などがそういう記事。methodを追加したときに、不要な行がスタックトレースに紛れ込まなくて良くなる方法についてこれはこれで便利なのだけれど。これでは言及できない対象がある。実際のコードに対して言及したいその言及できない対象の1つとして実際のコードがある。使っているライブラリの実装自身について言及したいことがある。gistなどでコード全体を引用するのではなく特定の部分を引用したい。これをどうにかできないかという試みをしばらく時間をかけてやっているような気がする。githubへのリンク例えばissueやgistなどで特定のコードに対して言及するときはけっこう手軽にできる。linkを貼ってあげれば良い。同一のrepository内のissueではコードが展開されて貼られるのでそれもまた便利。starletteというライブラリのwebsocketへの実装に対して言及したいときには以下の様な形でリンクを示す。https://github.com/encode/starlette/blob/8a2ae41e790570c9a16d32dfbbe5741f5bd61be9/starlette/endpoints.py#L44とはいえ、このはてなブログではちょっとやりづらい気がする。あと端的に言えば味気ない。概観を掴んでもらいたい場合(ここからは完全にpythonに限定した話をするのだけれど)いきなりリンクを貼ってもわからないことがある。何らかの説明をした後に対応するコードへのリンクを貼るのだけれど。そのコード自体の動きではなく対象と成るオブジェクト(クラス)の雰囲気を説明したいこともある。このようなときのためにpyinspectというライブラリを作っていて、これ経由である程度は伝えられるのかもしれないと思ったりしている。雰囲気をつかめる何かが出力できていれば良い。具体的に何をやるのかと言うと以下の様な形で利用した時に、自分自身の持つメソッドの呼び出し関係を階層的に表現して表示してくれる。Noneどこからも呼ばれないメソッドはトップレベルのメソッドという形、あるメソッドから呼ばれるとしたら1段ネストして表示という形。他のメソッドが呼び出されているというようなことが分かる。なんとなくの呼び出し関係を説明する時に便利な気がしている。これも含めてエディタから利用する場合には物理的な行番号を指定して利用することができたら便利なんじゃないかとふわっと思っていたりしている(エディタは物理行の指定、CLIでは何らかのパスのような形で指定がやりやすそう)。Protocol)のサーバーの実装じゃないけれど、エディタと通信するような個人的なサービスを立ち上げていい感じにやりたいというのはけっこう永年思っていたりする。蛇足ではあるのだけれど、ファイル内の関係ではなく継承関係で一覧に観える様になるので複数のライブラリに跨った関係などを把握するのにけっこう便利でたまにコードリーディングのお供に使っていたりする(例えばjupyter-notebookでのtrailtletsのクラスを継承しているコードの理解などに役に立ったりした)。調べてみたらこのブログでもpyinspectに触れる記事を書いていた。pyinspectというものを地味に作っているまぁこれは蛇足的な話。特定のファイルの特定の箇所を直接引用したいことがある。ここが実際やりたい事ではあるのだけれど。「あるライブラリ(あるモジュール)のある特定のクラスのあるメソッドの特定の行」について言及したいことがある。先程のstarletteのjsonをloadしている部分に標準ライブラリのjsonを直接使っているので、代わりにujsonとか使えないね。はじめに書いた通りにgithubのリンクを貼っても良いのだけれど。