☁️頗有意思的 Local-First Conf 2024
最近無意間聽到這個 Local-first Conf,覺得圍繞在這個軟體架構的生態頗有意思,隨手聽了幾場順手寫下這篇,記錄下一些心得 😉
LOCAL-FIRST CONF 🤔
不知道你有沒有留意到這個剛結束沒多久的研討會,這個「Local-first」又是在說什麼呢?
其實會留意到這場也是因為無意間看到一位中國開發者的分享,他也整理了一篇相關的文章 ⬇️,如果想快速了解到底「Local-first」是什麼,推薦可以先跳轉到這篇文章。
*順帶一提,這位開發者本身也是 
這個 CRDTs 的函式庫的開發者之一。(何謂 CRDTs,它全名是Conflict-free Replicated Data Types,是一種用於分佈式系統中的數據結構,這個在接下來要討論的 Local-first software 是相當重要的一環)。
loro
Github
loro
Owner
loro-devUpdated
Jul 26, 2024軟體架構的議題,一直是一件很有趣的事,而什麼才是最好的設計,這個答案可能也隨著時間的變遷而不斷地改變,而這個研討會就是圍繞著「本地端優先」的架構進行分享,涉及了概念、架構、相關技術的分享,蠻有意思的 😄。
下面列出幾場自己比較印象深刻的議程:
什麼是 Local-first?
或許你覺得這不過就是又再炒作另一個新 buzzword 罷了(也不能說不是 😅,就看你是用什麼角度來看它),不過比肩不少人都熟悉的 offline,Local-first 涵蓋了更廣大的軟體運作的願景,這邊強烈推薦先從這個議程入門 - The past, present, and future of local-first,裡面針對何謂 Local-first software 有很明確的定義跟說明。

這邊有 tl;dr 的版本(不過還是建議可以撥空去聽聽這場,真的很值得一聽。而且後來才知道這位主講也是位大大,除了是劍橋教授、開源貢獻者、作者,還是音樂家,真的超猛 😅)


New type of web app
Your web app but good
Rocicorp 這間公司或許你不知道他們是在作什麼,不過它們提供的即時同步協作的功能(Replicache),就被 Vercel 看上了,它們的協作回覆就是基於 Replicache 的技術來實作的。
這場議程比較偏向實戰,到底 local-first 背後的的同步機制該怎麼運用在不同的 webapp 之下?作者分別舉了 Vercel 的回覆功能,跟 Github issue 頁面(特別是大型專案),雖然 local 有非常多的優點,但是將所有資料透過同步放在本地端似乎是不切實際的事,畢竟最起碼 client 還是有空間的上限。
這也順勢帶到它們目前重點開發的新產品 - Zero,有點類似混合式的方案,本地端將快取至多 100M 的最頻繁使用的資料,並結合後端的 sync engine 來提供完整的資料,但開發者只需要就像直接存取本地端 DB 的行為,便可以在享有 local-first 好處之餘,也可取得完整的資料。

Unexpected benefits of going local-first
下面這場則是另一個相當知名的 task management 新創 - Linear 的分享(Linear 是最近頗受歡迎的專案管理服務,近期經常可以看到有人會在網路上提到它,不過我自己是還沒親自試玩過),其實一開始看到這場真的頗意外,原來 Linear 也是面向 local-first 的架構來開發的。

受益於 Local-first 的軟體架構,也為 Linear 帶來了不少優點:
- 因為資料在本地,所有的前端行為都可以直接操作,以往許多跟後端資料的互動行為都不需要了(或許你有疑問,那這樣要怎麼跨裝置,Local-first 的架構有一個很重要的 sync engine 負責處理資料同步的問題,這個可以在其他場次有更深入的分享)

- 所有的開發行為都可以聚焦在前端處理,不再需要花費時間 back & forth。這個在功能開發初期的 prototype 階段更是影響巨大。

- 超省錢(重點),看了前面的簡述應該就會意會到,在 Local-first 的架構之下,其實運行的負擔從原本後端的伺服器,改到客戶端這邊了,所以你不再需要這麼龐大的後端架構來支撐服務。Money is everything!! 🤑

The why and how of building a local-first music app
得承認這場是因為講者被吸進來的 😅
Johannes Schickling 應該不少 Node.js 開發者都聽過這位,就算你沒真的沒印象也很高機率可能用過了他開發的 Prisma,這個 Node.js 知名的 ORM 專案(所以我才被騙進這場的 😂)。
他現在在開發一個名為 Overtone 的音樂軟體(目前封測中,有興趣可以去填寫申請,看起來像是Winamp 這類的播放 & 媒體管理軟體,不過應該有一些有趣的東西在裡面),因為我也沒有權限可以玩,所以只聚焦在他在這場議程中的分享。

其實也是提到採用了 local-first 架構來開發,所以可以讓軟體有很好的效能(下面這邊就是他列出的技術棧),其中他也開發了自己的 data sync engine,就是圖中的 LiveStore 這個東西(目前只針對贊助者開放測試)。

Little elephants everywhere
講到 elephant 說不定有人已經猜到這場是要說什麼了😄。James Arthur 是 ElectricSQL 的創辦人,而 ElectricSQL 這間公司的主力產品也就是跟公司名稱同名的 
的針對 Local-first 軟體的 sync engine,不過不同於其他家,它們是特別針對 Postgres(或與之相容的服務)。
electric
Github
electric
Owner
electric-sqlUpdated
Jul 26, 2024不過這場他不是要講 electric,而是它們最近開發的另一個新專案 - 
,透過 WASM 讓 Browser、Node.js、Bun,甚至 Deno 都可以直接使用 SQL 操作 PostgresSQL(目前支援 in-memory database、本地檔案以及瀏覽器支援的 indexedDB。但不要擔心,它們已經著手進行遠端 PostgresSQL 的同步(哈,沒錯,就是透過前面提到的主力自家產品 - electric)。因為它不是「模擬」,而是真正的 PostgresSQL,所以開發者可以直接用熟悉的 SQL 方式來開發軟體,而且它理論上也可以支援眾多的 PostgresSQL 擴充,如支援向量搜尋的 pgvector。
pglite
Github
pglite
Owner
electric-sqlUpdated
Jan 4, 2025我就問一句,是不是超級吸引人!😆(想想等到支援遠端同步之後,連 mapping 都不用處理了,直接無痛整合後端資料庫)

Tech detail
Automerge and version control for rich text
Automerge 是一個專門用來開發 local-first 協作功能的工具(也就是前面提到的 sync engine),專門用來處理跨裝置之間的資料同步。
這個議程就是分享 Automerge 是如何實作 rich-text 的同步行為(這是最近 2.2 版本新增加的功能),不同於純文字的情境,當換成 rich text 之後要處理資料同步的難度又大大的增加許多,特別是非同步的情境,又該怎麼辦判斷、處理不同變更呢?別錯過這個議程!

Using Effect Schema to enable interoperable local-first applications
這場也是令人印象深刻,講者是 DXOS 的開發者,DXOS 也是針對 local-first 軟體的開發工具,包含了許多相關的元件,譬如處理資料儲存 & 同步的 ECHO,驗證、協作相關功能的 HALO,以及網路連線相關的 MESH。
這場主要是從一個簡單卻常見的需求:「新增欄位」出發,原本這樣一個簡單的行為,卻需要修改好幾個地方才能達到(Client、API、DB Schema),透過 DXOS 的
echo-schema 的功能,只要改一個定義就可以全線生效。光看那個 Demo 開發者就高潮啦 🤣!
UCAN - Be in control of your auth
這場老實說有點上手的難度,聽不太懂 😅。
主軸是這個叫 UCAN 的東西,它的全名是「User Controlled Authorization Networks」,看名稱應該可以猜出這是跟認證相關的東西。
User Controlled Authorization Networks (UCANs) are an extension of the popular JSON Web Token format specifically designed to enable ways of authorizing offline-first apps and distributed systems. - https://ucan.xyz/

簡單說它就是一個分散式的認證機制,所以自然很適合於 local-first 的軟體架構使用。它們也有一群人組成一個工作小組在制定相關的協定文件,以及開發各語言適用的函式庫。有興趣也可以跳轉下面 ⬇️
結語
身為資訊、軟體從業人員,有時候覺得不斷出現新東西真的很心累,但是有時候又會被各種創意跟嘗試一切地要改善軟體的各種問題的精神感動不已。但是如果看到這個世界一點一點的朝向更好的地方走去,是不是也是很棒的一件事!🥰
其實一個新領域的出現,也未必是對現有的革命或全然的不好,有時候反而是開啟一個全新市場的機會呢,最後就以 Home-cooked Software and Barefoot Programmers 這個議程作為結語。講者 Maggie Appleton 提出在現有的軟體使用情境,有可能出現一個新的領域,介於目前軟體使用者,以及專業開發者之間,一個名為 Barefoot Programmers 的場域。

目前軟體的開發大多是專業的軟體企業把持,但是也正因為如此,大企業的出發點與思維通常都是利益最大化,所以它們著重的當然是能得到最多利潤的地方,但是軟體使用場景卻往往非常複雜,所以越少使用者的獨特需求,就越不可能被大企業作為高優先處理的項目。
但是,這個維度的需求就有可能讓這群 Barefoot Developers 來補足。但是何為 Barefoot Developers?這個名詞其實是來自中國的赤腳醫生這個典故。什麼是赤腳醫生,問一下 Claude 吧 😄

所以就是軟體開發的知識沒有達到如一般的軟體開發者的層級,但是卻比起一般使用者懂更多一些 domain knowledge。目前透過 LLM 的崛起,開發軟體的難度已被降低許多,如果在加上 Local-first 更進一步的降低軟體開發的邊界,這個低需求、低利潤,也是低成本的使用維度,有可能透過(LLM + Local-first + Barefoot developers)來滿足。

真的會走往這個方向嗎?我也不知道
Let’s wait and see! 😎
Loading...
