本週Github上7個有趣專案:
1、UXsim
純 Python 中的網路交通模擬器
UXsim是一款免費的開源宏觀和中觀網路交通流模擬器,用 Python 編寫。它模擬汽車旅行者的移動和道路網路中的交通擁堵情況。它適用於模擬大規模(例如城市規模)的交通現象。UXsim 因其簡單、輕量和可自定義的功能而特別適用於科學和教育目的,但使用者可以自由地將 UXsim 用於任何目的。
主要特點
- 簡單、輕量且易於使用的動態網路流量現代標準模型的 Python 實現
- 宏觀交通模擬:30秒內模擬城市中超過6萬輛汽車
- 動態交通分配:給定網路和時間相關 OD 需求的交通流模擬
- 學術/專業交通研究中常用的理論有效模型
- 實施交通控制/管理方案,如計程車/共享出行、交通訊號、道路收費等
- 模擬結果的基本分析及其匯出到 pandas.DataFrame 和 CSV 檔案
- 使用 matplotlib 對模擬結果進行視覺化;提供互動式 GUI
- 由於採用純 Python 實現,因此靈活且可定製;也可以直接與其他基於 Python 的框架整合,例如用於深度強化學習交通控制的 PyTorch
- 主要程式碼uxsim.py只有約1800行,使用者可以輕鬆理解和自定義
2、Python StateMachine
歡迎使用 python-statemachine,這是一個直觀而強大的狀態機庫,旨在為開發人員帶來出色的體驗。我們提供Python 風格且富有表現力的 API,用於在同步或非同步 Python 程式碼庫中實現狀態機。
特徵
- 基本元件:輕鬆定義狀態、事件和轉換來模擬您的邏輯。
- 動作和處理程式:將動作和處理程式附加到狀態、事件和轉換,以動態控制行為。
- 條件轉換:實現Guard和Validators來有條件地控制轉換,確保它們僅在滿足特定條件時發生。
- 完全非同步支援:享受完全非同步支援。等待事件,並非同步排程回撥,以實現與非同步程式碼庫的無縫整合。
- 完全同步支援:使用來自同步程式碼庫的相同狀態機,無需任何修改。
- 宣告性和簡單的 API:利用乾淨、優雅且易讀的 API 來定義您的狀態機,使其易於維護和理解。
- 觀察者模式支援:註冊外部和通用物件來觀察事件並註冊回撥。
- 解耦設計:透過解耦的“狀態機”和“模型”設計分離關注點,促進更清晰的架構和更易於維護。
- 正確性保證:在類定義時透過驗證確保正確性:
- 確保恰好一種initial狀態。
- 不允許狀態轉換final。
- 要求所有非最終狀態進行持續轉變。
- 保證如果宣告瞭最終狀態,則所有非最終狀態至少有一條通往最終狀態的路徑。
- 驗證狀態機圖形表示具有單個元件。
3、Netflix GraphQL 聯邦複製演示
該專案演示了 Netflix GraphQL 聯合架構的簡化版本。它旨在將來自多個微服務的資料整合到單個統一的 GraphQL API 中,從而提供一種可擴充套件且模組化的資料管理和檢索方法。此設定對於不同團隊管理不同域但需要統一資料查詢介面的應用程式特別有用。
架構概述
該架構模仿了 Netflix 的 GraphQL Federation,其中具有自己的架構和資料來源的多個服務統一在單個 GraphQL 閘道器下。這允許無縫整合和查詢不同的資料集。
- 聯邦服務充當 GraphQL 閘道器。整合來自 Actor 和 Director 服務的架構。透過委託給適當的服務來處理複雜查詢。將來自多個來源的資料聚合並轉換為單個響應。
- Actor Service 管理 Actor 資料。提供用於查詢 Actor 詳細資訊的 GraphQL API。獨立且模組化,易於維護和擴充套件。
- Director 服務管理 Director 資料。公開 GraphQL API 以查詢 Director 資訊。獨立執行,便於獨立開發和擴充套件。
專案結構
該專案由三個獨立的 Java 模組組成,每個模組都作為 Spring Boot 3 應用程式實現:
- 聯合服務 聯合服務是所有 GraphQL 查詢的入口點。它充當中央樞紐,整合來自其他兩個服務的架構,並向客戶端提供統一的 GraphQL 架構。此服務從 Actor 和 Director 服務獲取資料,並將它們聚合為一個有凝聚力的響應。
- 演員服務 演員服務負責管理和提供與演員相關的資料。它提供專用的 GraphQL 端點來檢索演員資訊,例如姓名和姓氏。此服務獨立執行,並公開自己的 GraphQL API 以進行資料檢索。
- 導演服務 導演服務處理與導演相關的資料。與演員服務類似,它提供專用的 GraphQL 端點來獲取導演詳細資訊。此服務也獨立執行並提供自己的 GraphQL API。
怎麼執行的
- 客戶端查詢:客戶端向聯合服務傳送 GraphQL 查詢。
- 模式整合:聯合服務整合了來自 Actor 和 Director 服務的模式。
- 資料檢索:聯合服務處理查詢並向 Actor 和 Director 服務發出 HTTP GraphQL 請求以獲取必要的資料。
- 資料聚合:檢索到的資料被聚合並轉換為統一的響應。
- 響應:聯邦服務將聚合資料傳送回客戶端。
4、llama-zip
llama-zip是一個用於無損文字壓縮和解壓縮的命令列實用程式。
它透過利用使用者提供的 LLM(大型語言模型)作為算術編碼器的機率模型來發揮作用。這允許llama-zip實現結構化或自然語言文字的高壓縮比,因為需要更少的位來編碼 LLM 高度可信地預測的標記。
透過使用滑動上下文視窗,llama-zip不受 LLM 最大上下文長度的限制,可以處理任意長的輸入文字。
主要限制llama-zip是壓縮和解壓縮的速度受到 LLM 推理速度的限制。
llama-zip支援三種操作模式:
- 壓縮模式-c(由或標誌指定--compress):要壓縮的字串可以作為引數提供或透過管道傳輸到 stdin。壓縮輸出將以 base64 編碼並列印到 stdout。
- 解壓縮模式-d(由或標誌指定--decompress):壓縮字串可以作為引數提供或透過管道傳輸到 stdin。解壓縮的輸出將列印到 stdout。
- 互動模式-i(由或標誌指定--interactive):顯示提示,使用者可以在其中輸入要壓縮或解壓縮的字串。輸入 base64 編碼的字串時,將對其進行解壓縮;否則,將壓縮輸入的字串。每次壓縮或解壓縮操作後,系統都會提示使用者輸入另一個字串。要退出互動模式,請按Ctrl+C。
- 注意:如果您想要壓縮完全由 base64 字元組成的字串(即字母、數字、+和/,沒有任何其他符號或空格),則必須直接使用壓縮模式,因為互動模式假定 base64 編碼的字串需要解壓縮,如果輸入不是來自壓縮操作,則會導致無意義的輸出。或者,如果您不介意字串被壓縮時帶有該額外字元,則可以在字串中新增非 base64 字元(例如末尾的空格)。
5、supa-spring-kt
該專案演示瞭如何將 Supabase 整合到使用 Spring Boot 構建的 RESTful 服務。此後端充當中介軟體,透過 RESTful API 處理來自多個客戶端的請求,然後與 Supabase 互動。常見用例是使用此服務向多個客戶端公開 API,這樣每個客戶端就不必透過特定的 SDK 與 Supabase 互動。
Supabase-kt是Supabase為Kotlin程式語言提供的官方客戶端庫。Supabase是一個開源的Firebase替代品,提供了多種後端服務,如託管的PostgreSQL資料庫、實時訂閱、身份驗證、檔案儲存等。為了方便在不同程式語言和框架中使用Supabase,他們提供了多種語言的客戶端庫。Supabase-kt就是專門為Kotlin語言設計的客戶端庫,它封裝了與Supabase後端進行互動的API,允許Kotlin開發者在Android、伺服器端或任何支援Kotlin的環境中,輕鬆整合Supabase提供的各種服務,例如:
- 使用postgrest-kt與Supabase資料庫進行CRUD操作
- 使用gotrue-kt實現使用者認證和授權
- 使用realtime-kt訂閱資料庫的實時更新
- 使用storage-kt管理檔案儲存
- 使用functions-kt呼叫部署在Supabase的無伺服器函式
6、entropy
Entropy 是一個 CLI 工具,它將掃描你的程式碼庫以查詢高熵行,這些行通常是機密。
7、coolify
Coolify 是 Heroku / Netlify / Vercel / 等的開源且可自託管的替代品。
它可以幫助您在自己的硬體上管理伺服器、應用程式和資料庫,您只需要 SSH 連線。您可以管理 VPS、裸機、Raspberry PI 等任何東西。
想象一下,如果您可以擁有自己的伺服器,享受雲的便利。這就是Coolify。
沒有供應商鎖定,這意味著您的應用程式/資料庫/等的所有配置都儲存到您的伺服器。因此,如果您決定停止使用 Coolify(哦不),您仍然可以管理正在執行的資源。您只是失去了自動化和所有魔力。