HN 日本語サマリー

← 一覧へ戻る
プログラミング

TALAがオープンソース化

TALA Is Open-Source (d2lang.com)

293 pointsby alixanderwang23 コメント

要約

Terrastructの自動レイアウトアルゴリズムであるTALAが、D2と同じMPL-2.0ライセンスの下でオープンソースとして公開されました。TALAは、ソフトウェアアーキテクチャ図に特化した新しい直交レイアウトエンジンで、美しさを追求するために複数の目的を考慮します。カスタムノード位置指定の柔軟性も特徴ですが、レイアウト結果のランダム性やDAGへの最適化不足といったトレードオフも存在します。

全文翻訳

TALAがオープンソース化

こちらのアナウンスに続き、TALA(Terrastruct's AutoLayout Algorithm)がD2と同じライセンス(MPL-2.0)の下でオープンソース化されました。

TALAは、ソフトウェアアーキテクチャ図を念頭に置いて設計された新しい自動レイアウトアルゴリズムです。これは主に直交レイアウトエンジンであり、一方向に成長するDAGベースのものよりも、ホワイトボードで見かけるものにより近いものです。さまざまなグラフ描画研究論文(ソースコード中に引用)のアイデアと独自のテクニックを組み合わせて、美しい図を実現します。対称性、平均距離、フロー、類似ノードのクラスタリングなど、「美しさ」の複数の目的を考慮しています。

ここではテキストを短くし、例を先に示します。

  • 最初のバッチでは、TALAでレンダリングされた図を、D2に付属する他の2つのレイアウトアルゴリズム(DagreとELK)と比較しています。これらは手作業で選んだものではなく、GitHub上の公開されているd2ファイルを見つけただけです。そのため、TALA以外のレイアウトを好む場合もあるでしょう。
  • 2番目のバッチは、TALAのユニークな特性を示しています。つまり、ノードの位置とサイズをカスタマイズできることです(例:座標の固定)。これは、エージェンティックなユースケースに特に適しています。モデルは2D空間での描画は得意ですが、TALAはまだモデルが苦労しているルーティングを担当します。これらはAIが生成しました。
  • 3番目のバッチは、一部のノードが座標を指定し、残りはレイアウトエンジンに任せるというハイブリッドをサポートするTALAの能力を示しています。特定の形状のノードコレクションを想定している場合、座標で指定でき、TALAが残りを処理できます。これもAIが生成しました。

また、TALAにもトレードオフがあることに注意してください。

  • アルゴリズムにランダム性があります。デフォルトで3つのシードを使用して最適なレイアウトを見つけ、最もスコアの高いものを選択します。同じシードと入力であれば、同じ図が生成されます。しかし、たとえばノードを1つ追加したとします。図は完全に異なるものになる可能性があります。DagreやELKでは、追加ノードが収容されるだけで、以前とほとんど同じように見えます。これは時に望ましいことです。
  • DAG(有向非巡回グラフ)のレイアウトは得意ではありません。長いフローを持つグラフを望む場合、DagreやELKを好むことが多いです。
  • より大きな図の場合、実行に時間がかかることがあります。非線形にスケールします。TALAの実行パフォーマンスと他のアルゴリズムとの比較ベンチマークについては、https://github.com/d2lang/d2-benchmarks を参照してください。

TALAはD2 v0.9.0にバンドルされていますので、インストールして--layout=talaを指定して試してみてください!または、https://play.d2lang.com, こちらも100%クライアントサイドで実行されます。オープンソース化によってもたらされる改善に特に期待しており、コミュニティからどのような改善やアイデアが提出されるか楽しみにしています。

TALA全体にわたる多大な貢献をしてくれたGavin Nishizawa氏、および階層アルゴリズムなどの作業をしてくれたJúlio César Batista氏に感謝します。皆さんとこのような興味深い作業ができて、とても楽しかったです。

Batch 1: Comparisons​

Fulcro RAD architecture​

図をクリックすると拡大表示されます。各レイアウトはパネルに合わせてスケーリングされています。

Mocha secure-enclave SoC​

図をクリックすると拡大表示されます。各レイアウトはパネルに合わせてスケーリングされています。

Jupyter on AWS EKS​

図をクリックすると拡大表示されます。各レイアウトはパネルに合わせてスケーリングされています。

Lion Reader frontend data flow​

図をクリックすると拡大表示されます。各レイアウトはパネルに合わせてスケーリングされています。

ROSS rotor-dynamics workflow​

図をクリックすると拡大表示されます。各レイアウトはパネルに合わせてスケーリングされています。

Go Queue worker architecture​

図をクリックすると拡大表示されます。各レイアウトはパネルに合わせてスケーリングされています。

Ouroboros Leios simulator​

図をクリックすると拡大表示されます。各レイアウトはパネルに合わせてスケーリングされています。

Batch 2: Custom positioning​

Signal House​

TALA · top / leftで配置

[画像: Signal House]D2ソースを表示

Atlas / Data platform​

TALA · top / leftで配置

[画像: Atlas / Data platform]D2ソースを表示

Night shift / Mission control​

TALA · top / leftで配置

[画像: Night shift / Mission control]D2ソースを表示

Friday deploy: the escape room​

TALA · top / leftで配置

[画像: Friday deploy: the escape room]D2ソースを表示

The Internet is a jellyfish​

TALA · top / leftで配置

[画像: The Internet is a jellyfish]D2ソースを表示

Orbital coffee logistics​

TALA · top / leftで配置

[画像: Orbital coffee logistics]D2ソースを表示

Cloud Conservatory​

TALA · top / leftで配置

[画像: Cloud Conservatory]D2ソースを表示

Velvet Rope​

TALA · top / leftで配置

[画像: Velvet Rope]D2ソースを表示

Synthwave City​

TALA · top / leftで配置

[画像: Synthwave City]D2ソースを表示

Batch 3: Partial positioning​

The Printing Room​

TALA · 4つのノードを固定 / 10個の自動配置ノード

[画像: The Printing Room]

固定: 4つのCMYKステーションは、固定された上部座標と等間隔の左側座標を共有し、印刷シーケンスの機械的整合性を維持します。

自動: TALAは、フィーダー、カメラ、レジストレーションコントローラー、乾燥機、プリプレス、仕上げの各ステップを配置します。これらのノードには上部または左側の指定はありません。

配置宣言を表示D2ソースを表示

MULE / Utility Rover​

TALA · 4つのノードを固定 / 11個の自動配置ノード

[画像: MULE / Utility Rover]

固定: 4つのモーターアセンブリは、シャーシ矩形の前面と後部の角に固定されています。

自動: TALAは、すべてのコントローラー、センサー、電源、安全ノードをこれらの角の間または周囲に配置し、未配置のフリートコンテナを整理します。

配置宣言を表示D2ソースを表示

ソースとレンダリングの詳細

7つのレイアウト比較では、D2の実世界のフィクスチャから公開されているプロジェクト図を使用しています。各比較では、同じD2ソースとコンパイラビルドを使用し、レイアウトエンジンのみを変更しています。ソースのスタイル、テーマ、明示的なグリッド制約は保持されています。一部のフィクスチャアイコンは、既に組み込みシェイプに置き換えられています。

SVGは、各パネルに収まるように個別にスケーリングされます。より大きなサイズでラベルと接続を確認するには、SVGを開くを使用してください。

ソースの出所とライセンス ·

レンダリング設定とリビジョン

11個のポジショニング例は、同じ公開D2ビルドを使用してTALAでレンダリングされた、オリジナルの架空の構成です。アイコンのダウンロードには、完全なソースとローカルのベクトルアセットが含まれています。2つの部分的なポジショニング例では、指定された固定ノードにのみtop/leftが適用されます。他のすべてのノードとすべてのコンテナは自動的に配置されます。

ポジショニングレンダリング設定

。