Fluid Framework
像 Microsoft 365 或 Google Workspace 甚至是蘋果的 iCloud 裡面都提供了線上版的文件編輯、試算表、簡報製作應用,這些應用也大多具有多人即時同步的特性,微軟最近公佈 Fluid Framework 就是一個負責處理資料即時同步的專案,Fluid 可以把任意物件加上即時同步的特性,並在每個客戶端做出即時的反應以及觸發 onChange
的事件,讓客戶端可以用自己的商業邏輯來處理值的變更。
像 Microsoft 365 或 Google Workspace 甚至是蘋果的 iCloud 裡面都提供了線上版的文件編輯、試算表、簡報製作應用,這些應用也大多具有多人即時同步的特性,微軟最近公佈 Fluid Framework 就是一個負責處理資料即時同步的專案,Fluid 可以把任意物件加上即時同步的特性,並在每個客戶端做出即時的反應以及觸發 onChange
的事件,讓客戶端可以用自己的商業邏輯來處理值的變更。
JavaScript 要取得網頁 windows 寬度和高度有兩種方式:
document.documentElement.clientWidth
和 document.documentElement.clientHeight
,這裡傳回的值是不含視窗捲軸的真正尺度。window.innerWidth
和 window.innerHeight
,這裡傳回的值是包含視窗捲軸的尺度。這兩種值在手機上大多是一樣的,因為手機的捲軸是覆蓋在頁面一側的,而且僅有在滾動時才顯現,但在桌面上就會依照作業系統或瀏覽器的不同的得到不同的結果,在 Safari 上,因為捲軸也是設計成和手機一樣,所以兩種方式也會得到相同的尺度,但一旦插上滑鼠 macOS 就會把捲軸的形式改為佔有固定寬度的形式,其它作業系統對捲軸也是各有各的樣式,所以一旦誤用了 window.innerWidth
,那麼最後計算出的尺度就可能會有偏差,最常見的就是原本不會有的水平捲軸卻出現的狀況。
除了 JavaScript,CSS 也會遇到類似的問題,比較新的寬高單位 vw / vh / vmin / vmax 都是包含捲軸的尺度,100vw
用下去很容易就會發生頁面寬度超出 viewport 寬度的現象,因為假設 100vw
拿到的是 1000px 的款度,頁面內又用 100vw
把它撐滿,但實際上扣掉捲軸的寬度後,真正 viewport 剩下的只有 985px,導致原本以為會玩玩美美的撐滿版面的設計,變成超出一點點出現水平捲軸的破版設計。對於上面的例子,比較好的方法是用 100%
代替 100vw
,百分比的基礎就是父容器的寬度,如果父容器是 <html>
,那就會得到 viewport 真正的寬度。
GraalVM 是由甲骨文開發的多語言編譯器,GraalVM 具有支援多語言編譯的能力。
GraalVM 主要支援 Java 系的語言,包括 Java、Kotlin、Scala,以及 LLVM 所支援的語言,包括 Rust、C++、C,後來支援更多的語言,包括 JavaScript、Python、Ruby、R 等,都可以被 GraalVM 的多語言架構支援,除了多語言編譯的特性外,GraalVM 宣稱具有高效能的特性。由 GraalVM 編譯後的二進位檔,配合 GraalVM 本身的 runtime 可以把整個 GraalVM 的專案整合進其他專案內,支援的發布對象包括 Java、Node.js、Oracel 自己的資料庫平台,當然編譯後的 GraalVM 專案加 runtime 也可以獨立運作。
GraalVM 本身的目標和微軟的 .NET 和 CLR 相當類似,查看 GraalVM 的 Release Notes 可以看到一直有在發布新的進度,但開發者社群的經營與聲量卻非常小,感覺 Oracle 真的非常不擅長經營開源的「生意」。
Vega 是 JavaScript 的圖表套件,背後的數據與樣式是以 JSON 定義,Vega-Lite 則是 JSON 格式較為簡化的版本。
透過 Vega 或 Vega-Lite,只要餵給它正確的 JSON 資料格式,就可以產出美觀的圖表,而且不僅是數據,圖表樣式也是在 JSON 內做定義,Vega 產出的圖表可以是 SVG 或 canvas,也可以是互動的。
Node.js 與讀卡機通訊的範例,透過 Node.js 套件 node-psclite 實現,底層的通訊協定是走標準的 CCID、PC/SC 協議。
在某些情境下,事件的觸發是需要被管制的,在 JavaScript 有兩種管制的模式,debounce 和 throttle,兩者略有差異。Debounce 會把數個相近的觸發歸併為單個觸發,是點擊事件被群組化的概念,Throttle 則是規定在幾毫秒內某個函式只會被執行一次,是管制函式執行的頻率的概念,連結的文章內也有兩者應用的示例,值得一讀。