2017-06-01から1ヶ月間の記事一覧

既存のdbからgraphqlのschemaを生成しようとしてみる

はじめに 既存のDBのURLを渡すと、何か良い感じにgraphqlのベースのapiを良い感じに提供してくれるようにする何かを作ろうとしはじめた。 graphqlはschemaを取るのだけれど、こちらのschemaはgraphベースなのでちょっと困る。 サーバー側の実装をするために…

docutils用にsphinxのliteralincludeのsubsetを作って使ってみる。

literalinclude? sphinxで利用可能なdirectiveの1つ。 以下の様な形で別のファイルに定義した記述をあたかも自身のcode-blockとして記述したかのように使えるもの。 ここはReSTの文章。 .. literalinclude:: <filename.<ext>> ここもReSTの文章。 似たようなものとしてincl</filename.<ext>…

bsonのdump(文字列表現)

人間が確認するためにbsonを文字列にdumpしたいことがある。 bsonはjsonではない bsonはjsonではないのでjson.dumpsは使えない。 import json import bson from collections import ChainMap person = ChainMap({"name": "foo"}, ChainMap({"age": 20}, {"_i…

1つのquery objectに紐づく複数のqueryの管理について

(途中:wip) はじめに pymongoを直で使うのがつらいと感じる事がある。というよりmongodb一般でつらいと感じることがある。主にjoin。 joinを手軽に書けるwrapper的なものがほしいと感じる事がある joinが書けるということ joinが書けるということは1つのque…

最近pythonでmongodb使うなら

普通に使う場合 過去にそれなりに人気のあった(?)mongodb用のライブラリは軒並み廃れている感じがある。3.x系に追随できていない物が多い。pymongoを直接使ったほうがマシな印象。もし非同期を気にしたいならmotorなどは良いかもしれない。 あとまだ新しめで…

統計的学習の基礎という本を読み始めた

統計的学習の基礎という本を読み始めた。英語読みたくないという精神で日本語の物を買った。 書いてある内容自体は何となく理解した気にはなるものの納得した感はまだあんまりない感じかも。解析的にはという修飾がついているところなど、ろくに計算や確認な…

排他なフィールドとinvalidなzero valueでハマった話

goで排他なフィールドとinvalidなzero valueではまった。 (短く言うならポインターにするべきところでポインターになっていなかったという話) 排他なフィールド 排他なフィールドを持っているstructと言うのはこういう形。 // T : type T int // const ( TX …

名前が良くない話(--input-format,output-format)

github.com --addtionalsというオプションの名前が良くない。という話もありつつ他にも良くない名前がある。 その筆頭は --input-format と --output-format。それぞれ対応しているわけではない。 --input-format --input-format は主に標準入力からデータを…

利用するjinja2のextensionを引数で渡せるようにした

github.com jinja2-cliというものがあり、こちらはj2-cliとは異なりpython3.xでも動くらしい。それならもうkamidanaとか作らなくて良いかなと思ったりもしたけれど。既にこちらの方が機能が豊富な感じなのでそのまま個人用途では使い続けることにした。 -ext…

Makefileと並行taskと生成されたtaskの実行の悩み

はじめに make に -j オプションを渡してあげると、良い感じにmakeが並行実行してくれる。 Makefile default: do01 do02 do03 do01: @echo start 01 sleep 1 @echo end 01 do02: @echo start 02 sleep 1 @echo end 02 do03: @echo start 03 sleep 1 @echo en…

テキトウなyamlの値からswagger spec経由でgoのstruct定義のコードを生成してみる

テキトウなyamlの値からswagger spec経由でgoのstruct定義のコードを生成してみる。 使うのはdictknifeとgoaway やること 素となるデータの例を書く(yaml) データからswagger specを生成 swagger specからコードを生成 以下の様な形で変換が行われる。 confi…

docutilsを直接利用してRestからmarkdown(のsubset)を生成するツールを作ってみる

docutils ReSTのためのライブラリ ReST? markdownのようなもの first step docutilsではpublisherと呼ばれるものがもっともトップレベルのapplication。 内部でドキュメントをparseしてnode treeを作成した後に各writerのtranslateで出力される。 reader+par…

jsonからswagger specを生成するコマンドに変更を加えた

github.com 昨日作ったコマンドに変更を加えた。変更点は以下 複数のファイルを渡せるようにした minimapを表示するようにしてみた validationのための --emit=jsonschema を止めた 複数のファイルを渡せるようにした 複数のファイルを渡せるようにした。req…

jsonからswagger specを生成するコマンドをdictknifeに取り込んだ

以前に、jsonからswagger specを生成するツールを作っていたのだけれど。とくにリポジトリを分けておく必要性もなかったのでdictknifeに取り込んだ。 ついでに、swagger独自っぽい雰囲気のしたコマンドはswaggerknifeとして別のコマンドにすることにした。 …

makefile中でbashなどの関数が使えないのでdefineとcallで代用する

makefile中でbashの関数などを使うことができない(プロセス置換も使えないのだけれどこれはまだ代用品が見つかっていない)。 これの代用品としてcallとdefineを使う。 bashの場合 例えば以下のようなecho3という関数経由でxを3回yを3回出力したいとする。 #!…

pythonでwarningsパッケージを使った警告の表示のメモ

警告を表示したいことがある。例えば、次のversionで廃止予定の関数を使った時の警告など。 こういうときには warningsパッケージを使う。 first step 00warn.py import warnings def foo(): warnings.warn("hmm") return "hai" if __name__ == "__main__": …

arrayを含んだ順序が不揃いなJSONのdiff

arrayを含んだ順序が不揃いなJSONのdiffを取るのはだるい。だるい。 arrayを含んだJSON arrayを含んだJSONというのはこういうやつです。 people0.json [ { "name": "foo", "age": 10 }, { "name": "bar", "age": 20 } ] people2.json [ { "name": "bar", "ag…

Makefileと再帰するときのオプションについて(-Cと-fの違い)

再帰する時に -C を使う場合と -f を使う場合がある。この時のcwdの扱いが異なる。 説明のために、以下のようなファイル構造でファイルが置かれているとする。 $ tree . . ├── Makefile └── sub └── Makefile トップレベルのMakefileの中身は以下のようなも…

makeの再帰と値の受け渡しについて

makefile中でサブディレクトリのmakefileや別のタスクを呼びたい時がある。このような場合には $(MAKE) を使う(くわしくはこのあたり)。起動している自身のコマンドで呼び出してくれるので便利(たとえばmakeがgmakeなどのコマンド名だった場合にgmakeが使わ…

sphinxで雑にコード例と実行結果を表示したい場合

sphinxで雑にコード例と実行結果を表示したい場合がある。コード例はliteralincludeを使うと便利。一方実行結果をどうするのかというのが悩みどころ。 現状はMakefileで出力結果を生成してliteralincludeで埋め込んでいる。 こういう感じ .. literalinclude:…

sphinxのliteralincludeが絶対パスを表示するのが嫌だった

sphinxのliteralincludeが絶対パスを表示するのが嫌だった。 以下の様なmonkey patchをあてるextensionを作ってあげると無理矢理変更できる(わるい) def setup(app): # monkey patch import os.path from difflib import unified_diff from sphinx.directive…

そろそろドキュメントを書き始めることにした

github.com そろそろドキュメントを書き始めることにした。ただまだまだ個人用のつもりなのでまともな文章は書かない。 どうしてドキュメントがほしくなったか? どうしてドキュメントが欲しくなったかというと、このはてなブログの記事だけでは断片的な情報…

modulegraphが上手く動かないのでsys.path_hooksで遊ぶ

modulegraphというパッケージがあり、これでモジュール間の依存関係をグラフにしてみたりできるらしいのだけれど。何だか上手く動かなかった。 残念な気持ちにはなったのだけれど、何か特別なパッケージに頼らずともpythonのimport hookの機能を利用すれば同…

goでxmlをescapeする話

はてなブログのクライアントを書いている時にxmlをPOSTする必要があった。考えるのが面倒だったので text/template を使っていたのだけれど。 これでは問題があった。本文がescapeされないのでinvalidなrequestになってしまう。 具体的にはこういう話。 pack…

goのos.Openは~を見てくれないっぽい。

~はだめ os.Openは"~“をhome directoryとして空気を読んで良い感じに解釈してくれないっぽい。 // 01tilda.go package main import ( "io" "log" "os" ) func main() { filename := "~/.screenrc" f, err := os.Open(filename) if err != nil { log.Fatal(er…