2016年の振り返り

はじめに

2016年の振り返りということをやってみる気になりました。今まで振り返りのような何かしらの人間味のある活動を避けたいという気持ちがあり。ただただ事実や試行の断片だけを出力していきたいという気持ちがあったのですが。それでは社会との接続が上手く行かないという感じがしてきはじめつつあり。人間味のある活動をやってみる気になり始めています。人間味のある人々は振り返りという名目で1年の間にどのようなことを行なっていたのか列挙してみてその時々に応じたコメントをするらしいので真似することにしました。

年初に書いていたことについて

今年の最初はバックエンドよりフロントエンドの方に力を入れるつもりだったようです。だいたいこのあたりの方針は4月位で転換してしまいました。この頃には陰も形なかったgoをやるみたいな感じになっています。数学関連云々は気力があればというようなオプショナルな形ですし。気力がなかったのでできませんでした。盆栽プロジェクト的なものは上手くできていないのですが。ここ最近はコードの生成にはまっているようでした。

自分用のメモを充実させることについて

今年の最初にあげたものの中では、自分用のメモを充実させるということに関してはうまくいっているような気がします。以前までは、gistにその時々の思いつきのコードを出力するだけで終わりにしていたのですが。文章を書くという行為や何かを説明するという行為が必要らしいということに気づき始めたのでした。

ところで文章というものは生産のコストが大きい。年の始めのころは真面目に文章を書くという意識でいたようなのですが、これを止めて自分用のメモの断片をgithub特定のリポジトリにあげるというような行為に変えたところこれがすこぶる良い感じで今に至っても続いています(githubの草が不当に生えるという不具合が発生していますが)。これはreadmeが勝手にそこそこ良い感じでレンダリングされるというのと、gistのフラットな構造から脱却できたところが大きい気がします。加えて、自分自身の試行の整理の備忘録に文章はあまり必要なかったようでした。

以下の事を念頭におくことを忘れないという部分について

念頭に置くことがどうとか色々言っていますが。まとめると好き勝手やるということで。一方で好き勝手やった結果のデメリットをなるべく受け持たないようにしようという行動指針っぽいなにかです。これはこれで良いなと思ったのですが。最近は社会的な何かとの関わりがそれなりに必要なのではないかということを思いはじめて、github上でissueを書くだったり、pull requestを送るというようなそーしゃる活動のようなことをしていったほうが良いみたいな感覚になり始めています。

今年作ったリポジトリ

今年作ったリポジトリは、adventカレンダーのものと先述したメモ用のリポジトリを除くと、17個位みたいです。その内作っただけに近いものが5個位なのでおそらく10個程増えた感じになりそうです。そう言えば、以前よりはforkだったりが増えてますね。先の17個からforkしたものなどは除いています。相も変わらず作っては放置みたいなやつが多そうです。あんまり何処かでリリースのアナウンス的なものもしていませんでした。

swagger-marshmallow-codegen

これは最近作ったやつですね。コード生成楽しいみたいなやつです。昨日眠れないついでに真面目にどういう状況なのか記事を書いています。

dictknife

これはdictの操作用のライブラリの寄せ集めです。意外と色々なところの内部で使っていて個人的には便利です。元々の発端みたいな記事をdict遊びという名前で書いていたようです。個人的にはこのdict遊びみたいな試みが好きですし。こういうことが好きな人と日常的に交流できそうな何処かに所属したいみたいな気持ちがあったりします。

例えば、json-referenceで分割されたJSONのファイル群を1つにまとめる処理などがこういう感じで書けます。あとdictの再帰的なmergeやdeepequalなどが地味に便利でした。 pip install dictknife[load] という感じでインストールすると、yamljsonのload,dumpの便利機能が使えるようになったりします。

swagger-bundler

分割されたswaggerのファイルをシュッと1つにまとめるやつです。これは最近新しい仕様で再実装したいので今はあんまり説明したくない感じです。次のバージョンでは、ファイルベースでの結合を止めて、真面目に名前空間をつける予定です。現在の挙動では何をimportしたのかわかんなくなるのが辛いという状況が発生しています。

goconvert

これは、goのコードを生成するためのpython用のライブラリ群です。主にgoの変換処理を生成しようと思って作業をしていた感じでした。作り途中です。qiitaに記事を書いていましたが全く興味は持たれなそうな感じでした。後述するgo-structjsonを使って、goのstruct定義をJSONファイルとして出力してあれこれやるみたいなやつです。

go-structjson

importのpathを見て再帰的にパッケージを見ながらAST使ってstruct定義をJSONとして抽出するみたいなやつです。goの情報を使ったコードをgo以外で書きたいと思ったので作りました。まじめに抽出する条件の絞込などができていなのでdefaultのexcludeの条件を外すとすぐに40000行とかのjsonを吐いたりしてしまいます。ツールとして作成した感じなのであんまりコードを綺麗に整える気にはなっていないので汚いです。

kanagata

これはpythonからmongodbのコードを触る時に、mongoengine位しか無さそうで。一方でmongoengineのdjangoのORMの方言みたいなインターフェイスがそもそもpython第二言語でしかない環境では無駄だろうという気持ちで作ったライブラリです。基本的には値の範囲を制限したdictとlistを作るライブラリです。ゆくゆくはswaggerの定義から自動生成をしようみたいなことを思っていましたが。今は止めてmarshmallowを使ってdictのvalidationをするだけで留めておこうみたいな気持ちになっています。もしかしたらmypyのtypeddictを使うというのが良いのかもしれません。

これを作った過程で、pythonのmongodbのclientのpymongoではcollections.UserDictは辞書として取り扱ってdeserialize/serializeできるのに対し、collecsions.UserListではエラーを吐くみたいな挙動になることがわかりました。jiraでチケットを作って(そういえばはじめてのjiraでした)、userlistに対応したpatchのようなものを投げてみましたが、adhocに個別に対応するのも馬鹿馬鹿しいしもっと汎用的な仕組みを後々用意するからそれで対応してみたいなことを言われたのであまり使い勝手が良くないです。(patchをあてないと、pymongoに値を受け渡すタイミングで、一度dictに変換する必要があります。)

kumonote

これは完全に途中で飽きて止めたリポジトリです。asyncioを使ってクローラーを作ろうと思ったらしいです。蜘蛛の手。

magicalimport

これは物理的なファイルパスをpythonで手軽にimportできるようにしようというライブラリです。plugin的なアーキテクチャを作る際に、わざわざパッケージを作らなくても済む様になるので意外と便利です。swagger-bundlerだったりswagger-marshmallow-codegenだったりの内部で使っています。

selfish

これはgoの練習用に作ったリポジトリです。gistにファイルをuploadするツールです。個人的にはこれでgistyを置き換えられたことでQoLが格段に向上しました。 具体的には-aliasというオプションを指定することで同一のgistに対する更新が手軽になったという辺りが大きいです。

# 最初のupload
$ selfish -alias head *.go
# 色々更新した後にgistに更新を反映
$ selfish -alias head *.go
# 新しいものを作るときには `-alias` を外すか別の名前で実行
$ selfish *.py readme.md

django-aggressivequery

これはdjangoのqueryのoptimizerです。後に触れるdjango-returnfielldsで生成するqueryをそこそこ良い感じにするために使っています。具体的にはN+1をjoinやprefetchに置き換えて除去してくれます。とは言え、職が変わったので、もう仕事でdjangoを使う事は無さそうです。なのであんまり積極的にメンテする気もない感じではあります。

django-returnfields

これはdjango restframework用のライブラリです。fat apiを定義したときのN+1クエリー的なものを除去するのに便利というやつです。そう言えばこれを作る過程で異様にdjangoのorm関連の記事を書いた記憶をがあります。

djangoオワコンなのか何なのか入門用の記事や特定のライブラリの紹介みたいな記事しか見かけないような気がします。

console-angular

これはangular1.xの挙動を確かめるためにhtmlやcssを書くのが馬鹿らしいと思って作ったパッケージだった記憶があります。内部的にはほとんど数行のラッパー。 元になった記事はこれっぽいです。

最近はangular1.x触っていないですし。今のおしごとのフロントエンドはangular(angular2)だったりですし。隔世の感があります。最近はフロントエンド触っていないので追いついていけてないですけれど。今だったらangularに限らずとりあえずbootcamp的にxxx-cliの内部を把握して、あとはテキトウに少しずつ新しい知識を集めていけば良いみたいなイメージでいます。

postcss-restructure

これはごみです。ほとんどpostcssのhello worldみたいなpluginな記憶。

cssconflict

これもごみです。これはcssのconflictした定義を見つけようと書き始めたものの、よく考えたらHTML部分も見なければレンダリングに使われる記述が決定できないみたいなことに気づいたみたいな経緯で放置されてます。

cssdiff

これはすごく巨大なcss同士の意味的なdiffを取ろうみたいなやつです。css parserでparseしたあとテキトウにdictでdiffを取るというだけなので数時間位で作った記憶があります。こういう便利ツールがstarを集めやすい(とは言え0件ではなく色がつくという程度)。

最後に

飽きました。(後で何か書く)