気になっているOSSとその周辺のリンク

（前置きもなく始めます。）
## Kale
[Kubeflow Kale - Kubeflow Automated PipeLine Engine](https://kubeflow-kale.github.io/)

ML × Kubernetes といえば Kubeflow がとても有名です。
その中で、Kubeflow Pipelines というパイプラインを構築できる機能があるのですが、ぱっと見 DSL 書かなければいけないのがなんとなく心理的ハードルがありました。（ということで私は触ってないです。）

Kale は Jupyter Notebook の cell metadata を利用して、Notebook から Kubeflow Pipelines のワークフローに変換してくれる OSS です。
コードを書き換えることなく、セル間の依存関係を UI で設定していくだけなのでとても楽です。

今日、ちょうどチュートリアルが投稿されていたので詳細はそちらをご覧ください。

- [An End-to-End ML Workflow: From Notebook to Kubeflow Pipelines with MiniKF & Kale](https://medium.com/kubeflow/an-end-to-end-ml-workflow-from-notebook-to-kubeflow-pipelines-with-minikf-kale-72244d245d53)

その他のリンクは以下の通りです。

- [Speakerdeck - Kubeflow Kale: from Jupyter notebooks to Complex pipelines](https://speakerdeck.com/leriomaggio/kubeflow-kale-from-jupyter-notebooks-to-complex-pipelines)
- [medium - Automating Jupyter Notebook Deployments to Kubeflow Pipelines with Kale](https://medium.com/kubeflow/automating-jupyter-notebook-deployments-to-kubeflow-pipelines-with-kale-a4ede38bea1f)
- [Codelabs - From Notebook to Kubeflow Pipelines with MiniKF and Kale](https://codelabs.developers.google.com/codelabs/cloud-kubeflow-minikf-kale/index.html)

## Flyte
[Flyte - Lyft’s Cloud Native Machine Learning and Data Processing Platform, Now Open Sourced](https://flyte.org/)

Kubernetes の登場とともに、ワークフローエンジンも色々登場しました。
その中でも最も有名なものの一つは [Argo](https://argoproj.github.io/argo/) です。前述の Kubeflow Pipelines でも Argo が利用されています。

Flyte もワークフローを構築できるのですが、Argo と比較して、環境の分離（マルチテナンシー）があったり、Python コードで定義するようになっています。（Argo は YAML）設定したいものが複雑になると、YAML よりもコードの方が可読性は良いな、という当たり前の結論に AWS CDK を触って最近達しました。（最終的に生成されるのは YAML ですが。）Operator を作ることで拡張する感じは Airflow に似ているのかな？と思いました。

> Declarative Specified in Protocol Buffers

というあたりも少し興味深いです。

詳細は Kubecon での発表資料/動画をご覧ください。

- [Flyte Open Source Cloud Native Machine Learning and Data Processing Platform](https://static.sched.com/hosted_files/kccncna19/7f/Flyte%20Kubecon.pdf)
- [YouTube - Flyte: Cloud Native Machine Learning & Data Processing Platform - Ketan Umare & Haytham AbuelFutuh](https://youtu.be/KdUJGSP1h9U)

## Buf
[Buf - A new way of working with Protocol Buffers](https://buf.build/)

Flyte で Protocol Buffers の話をちょっと出しましたが、proto ファイルの共有（というか、インターフェースの共有とスタブの生成）はみなさんどう実現しているのでしょうか。私の知っている限り列挙します。

- git submodule
- 生成しておく（例：[Generated Java code for Google APIs](https://github.com/googleapis/google-api-java-client-services))
- [Buzel](https://blog.bazel.build/2017/02/27/protocol-buffers.html)
- [stormcat24/protodep](https://github.com/stormcat24/protodep) 

そんな中で、[uber/prototool](https://github.com/uber/prototool) を眺めていると、こんな issue があり、そのまま散策しました。
[Updated README for Buf](https://github.com/uber/prototool/pull/528/files)

Buf では[Buf Image Registry](https://buf.build/docs/roadmap#buf-image-registry) の提供を予定しているようです。
引用ですが、以下のような機能を想定しているようです。

- Language-specific stubs, for every version of protoc and associated language plugins.
- Tarballs that contain your .proto files alongside Bazel build rules, to allow easy consumption for Bazel repositories
- Hosted documentation for your Protobuf APIs

Buf Image は [`FileDescriptorSets`](https://github.com/protocolbuffers/protobuf/blob/v3.11.2/src/google/protobuf/descriptor.proto#L55-L59) を拡張するような形になっています。[spotify/proto-registry](https://github.com/spotify/proto-registry) でも `FileDescriptorSet` を用いているので界隈ではそういうもののようですね。私個人でも動的にメッセージを生成したいなと思った時があり、[この辺り](https://developers.google.com/protocol-buffers/docs/techniques) で出会いました。
AWS でも 「[Amazon EventBridge のスキーマレジストリの紹介](https://aws.amazon.com/jp/about-aws/whats-new/2019/12/introducing-amazon-eventbridge-schema-registry-now-in-preview/)」というのがあったりしたので、Buf Image Registry は楽しみです。

## jk
[jk](https://jkcfg.github.io/)

宣言的だ！といって YAML で書いてるうちに、「本当に、これ、YAMLで書きたかったんだっけ？」ということありませんか？
私はワークフローエンジンでも、Infrastructure as Code でも経験しました。
近頃は、[AWS CDK](https://aws.amazon.com/jp/cdk/) や [Pulumi](https://www.pulumi.com/) が登場して、個人的には、条件分岐や繰り返し処理をしたい場合は、こういったものを利用した方が良いなという結論になりました。（前述の通り、よく考えると当たり前。）

> jk is a data templating tool designed to help writing structured configuration.

ということで、jk は Javascript で記述して、 YAML や JSON を生成できるOSSです。ライブラリ（[Kubernetes](https://github.com/jkcfg/kubernetes) や [grafana](https://github.com/jkcfg/grafana)）を利用することで、より簡潔に書けるようになる感じは、 AWS CDK の [Constructs](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html) と同じような雰囲気を感じます。
[ロードマップ](https://github.com/jkcfg/jk#roadmap)には、 Typescript サポートも入っているので楽しみです。

ちなみにこの OSS は [Multi-Cluster Parameterized Continuous Deployment for Kubernetes](http://leebriggs.co.uk/blog/2019/12/09/parameterized-continuous-deployment-kubernetes.html) という記事で遭遇しました。Pulumi と比較して、なぜ jkcfg なのかみたいなところもさらっと書いているので読んでみてください。