2020-07-12
7/12
Hugoでmemo用のarchetypeを作る
関連項目:
上手く行ったパターン①:
---
title: "{{ dateFormat "2006-01-02" .Date }}"
linkTitle: "{{ dateFormat "2006-01-02" .Date }}"
date: {{ .Date }}
---
現在日時から日付を作る場合は上で良いが、たまに昨日のメモとか作りたくなることがあるので、ファイル名を元に作るようにした。
上手く行ったパターン②:
---
title: "{{ substr .Name 0 4 }}-{{ substr .Name 4 2 }}-{{ substr .Name 6 2 }}"
linkTitle: "{{ substr .Name 0 4 }}-{{ substr .Name 4 2 }}-{{ substr .Name 6 2 }}"
date: {{ .Date }}
---
工夫すればもう少しすっきり書けるかもしれない。
駄目だったパターン:
# Hugoのリファレンスに載ってるのにエラーになる。 .Dateが文字列扱いで、 .Format ってメソッドはない的な
title: "{{ .Date.Format "2006-01-02" }}"
# sprigのリファレンスを見たらこれが正しいかと思ったが、Hugoだと違った
title: "{{ substr 0 3 .Name }}-{{ substr 4 5 .Name }}-{{ substr 6 7 .Name }}"
参考:
- https://gohugo.io/functions/format/
- https://gohugo.io/functions/substr/
- http://masterminds.github.io/sprig/strings.html
binqのメタデータサーバによるメタデータの公開は著作権やライセンス侵害にあたるのか?
少し前から作っていたbinqについて、先ほどようやくブログを書くことができた:
「免責事項」として書いたのだけど、こういうメタデータの収集・公開が著作権やライセンス侵害に当たるのかが気になったので、少し調べた。
あまりそのものズバリな事例はないのだけど、少なくとも、元々コピーや再配布を許可しているライセンスで問題になることはないだろう。
ゆるいOSSライセンスはそういうものもある。
逆に、著作権法上の「公表権」や「頒布権」を理由に、「絶対に自分のHPに来てダウンロードしなきゃ駄目」みたいに書いているソフトウェアがあったら、それをbinqのインデックスに載せると怒られるかもしれない。
そもそもインターネットにOSSとして公開しているソフトウェアで、そんな風に書いているものがあるのか知らないが。
参考:
- フリーソフト、シェアウェアの基礎知識 - フリーソフトの著作権
- 再配布(二次配布)とは - IT用語辞典 e-Words
- ソフトウェア等の著作権問題に関する用語について(用語解説) | 大島・西村・宮永商標特許事務所
- ソフトウェアの二次配布禁止する理由について質問です。 - 出来たらこの… - Yahoo!知恵袋
Goで任意の処理の出力を構造化データとして上手く扱いたい
構造体だったら fmt.Printf("%+v", x)
とやればある程度きれいに出力できるけど、それをもっと汎用的にできると嬉しいかなというところ。
背景として、最近はCLIでも構造化されたデータを色んなフォーマットで出力できることがクールになってる、というのがある。
kubectl然り、Google Cloud SDK然り、AWS SDK然り。
最近の事例だと、Rust製のnushellでは、デフォルトでコマンドの出力結果がテーブルになっており、パイプによってコマンド間でデータの受け渡しが可能になっている。
nushellの実装がどうなっているのかは見てないけど、まあなんかそんな感じでやりたい。
サンプルとして参考になりそうな候補:
- Kubernetes
- 追ってみたところ、k8s.io/apimachinery/pkg/runtimeが汎用データ型及びプロセッサっぽい。単独では使いづらい気がするんだけど、めちゃimportされているのはコアなライブラリだからか
- クラウドのSDKとか…まだ見てない
- logger系
- hashedhyphenさんに「zapはどう?」と言われたので少し見てみたけど、やはりロギングに比重が置かれている感じで、ちょっとユースケースが限定されすぎている感がある
- 後でもう一度見直したところ、内部に抽象データ型があるので使えるかもしれないと思った。が、それはやはりロギングに最適化されたデータ構造で、汎用的な用途で使うにはどうしたらいいかわからなかった。
- fluent/fluent-logger-golang
- https://pkg.go.dev/github.com/fluent/fluent-logger-golang/fluent
- ↓のmsgpackのインタフェースを使っている
- https://pkg.go.dev/github.com/tinylib/msgp/msgp
- コードジェネレータのヘルパーと書いてあるけど、普通にシリアライザ・デシリアライザの機能を持つ。
- 真面目にやるとこのぐらいは必要だよなぁという感想
- Awesome Goで見つけたやつ:
- Data Structureカテゴリだと、アルゴリズム系ばかりが見つかる。
- https://github.com/mickep76/encoding … これは自分が目指しているものに近い気がする。WIPって感じがするけど
- https://github.com/bndr/gotabulate … テーブル形式で出力してくれる君。2次元のデータにしか対応してない
今回の話と関係ないけど、調べている途中で目に入って気になったライブラリ:
- kubernetes関係を見ているときにk8s.io/klogというロギングライブラリを見つけた。今回の用途には向かないが、依存がなくて割とシンプルなレベル付きロガーなので、使いやすいシチュエーションもあるかも(Google寄りなライブラリ)
- https://github.com/mvdan/sh … 全然関係ないけどawesome-goで目に入った。shfmtとかgosh (PoC)が入ってる
実験で作ったdfmtというもの
https://github.com/progrhyme/experiments/tree/master/go/dfmt
ちょっとまだ道筋が見えない。