Replicant Detector: A Common Lisp and Datastar Demo

Replicant Detectorは、Common LispDatastar、およびBKNR datastoreを統合し、高性能でリアクティブなウェブアプリケーション・アーキテクチャを披露するための技術デモンストレーションです。このプロジェクトは、Common Lisp用のDatastar SDKのデモとして機能し、単一のGETストリームと複数のPOSTコマンドを介してCommand Query Responsibility Segregation (CQRS) パターンを実装しています。

Architecture and Technical Stack

このアプリケーションは、リアルタイム更新と永続ストレージを実現するために、特定のテクノロジー・セットを利用しています:

  • Common Lisp: バックエンド・ロジックに使用されるコア・プログラミング言語。
  • Datastar: フロントエンドのリアクティビティを管理するために使用されるハイパーメディア駆動型フレームワーク。
  • BKNR Datastore: アプリケーションのデータの永続ストレージ層として使用。
  • CQRS Pattern: 「Datastar Tao」に従い、アプリケーションは読み取り操作と書き込み操作を分離しています。更新には単一のGETストリームを使用し、状態変更には複数のPOSTコマンドを使用します。

Real-Time Updates and SSE Implementation

アプリケーションのリアクティブな性質をサポートするために、開発者はCommon Lispエコシステムに対していくつかの低レベルの拡張を実装しました:

  • Server-Sent Events (SSE): アプリケーションは、クライアントに更新をプッシュするためにSSEを使用します。イベントループをブロックすることを防ぐため、開発者はWooウェブサーバー(Clack経由)にユーザーチャネルをサポートするための修正を統合しました。
  • Event Pool: ユーザーチャネルの使用により、アプリケーションはイベントプールを利用できるようになります。これは、サーバーを停止させることなく通知を送信するCQRS実装において不可欠です。
  • Brotli Compression: このデモの開発の副産物として、著者はCommon Lisp用のBrotli圧縮サポートを提供するためにcl-brotliライブラリを作成しました。

Application Features and Interface

Replicant Detectorは、Tyrell Corp Blade Runner Divisionの「Replicant Registration Database」をテーマにしています。インターフェースは、以下の機能を持つリアルタイム追跡システムを提供します:

  • Unit Tracking: モデル(Nexus-6, Nexus-7, Nexus-8)、役割(例:Combat, Infiltrator, Loader)、およびステータス(At-Large or Retired)によって分類されたレプリカントのデータベース。
  • Orbital Tracking: SVGベースの正距円筒図法(GeoLite2-Cityデータを利用)を使用した視覚的なマップで、最後に確認された位置を表示します。
  • Field Agent Activity Log: エージェントの目撃情報や引退(retirement)アクション(例:「Agent S8XLQ08416 (United States): RETIRE N6FAB61216」)を追跡するリアルタイム・ログ。

Development Context

このプロジェクトは、Common Lisp用のDatastar SDKおよび、lambda-combine.netの「hyper-guide」にある付随するインタラクティブ・ガイドを作成するための、より広範な取り組みの一部です。著者は、この実装が進行中の作業(WIP)であり、現代的でリアクティブなウェブ・コンテキストにおけるこれらのツールの実現可能性を実示するためのものであると述べています。

Sources