Daily Digest

每日新聞摘要

2026年08月23日

今日總結

內容會跟隨語言切換。

📝 今日焦點 • AI 可加速 Kotlin/Android 產出,但仍無法取代設計、審查與可靠性判斷,否則只會放大維護風險。 • 多篇實戰文提醒:通過編譯不代表可上線,啟動流程、依賴初始化與測試驗證都要納入檢查。 🔧 效能最佳化 • WhyRep 透過 Room 索引將五年資料分析從 119.1 毫秒降至 6.8 毫秒,也揭露量測與負面結果同樣重要。 • API 效能別只看平均值,應關注分布與尾延遲,才能避免少數慢請求被掩蓋。 🏗 架構設計 • Spring Boot 4.1 以 InetAddressFilter 強化 SSRF 防護,並可用全域或單一 client 政策阻擋內網與 loopback 連線。 • Microcks、GeofencingClient、BiometricPrompt 與 coroutine tracing 共同指出:契約、情境與執行緒切換都會影響系統可靠性。 ✅ 測試與品質 • Jackson 日期反序列化錯誤多半是模組、格式或型別不一致;補齊設定後即可穩定處理 Java Time。 • Sentry、plateau 判定與測試書都強調,驗證必須對準真實情境,並避免假設在邊界條件下失效。 🚀 語言演進 • Kotlin Weekly 彙整 DataFrame 1.0.0-rc01、Compose Multiplatform 與 KMP 生態擴張,顯示 Kotlin 工具鏈持續成熟。 • 團隊也在重新看待 monads、明確函式簽章與 coroutine 觀測性,反映 Kotlin 應用正走向更精準的表達與追蹤。

01

I Asked AI to Build My Android App — Here’s What It Got Wrong

Medium Kotlin 作者:Ambermughal 發布:08-23 08:40

我請 AI 幫我打造 Android App——它到底錯了什麼

AI 能在幾秒內寫出 Kotlin 程式碼,但它真的能做出可靠的 Android App 嗎?

重點摘要

AI 可以非常快速地產生 Kotlin 程式碼。
關鍵問題是這些程式碼能否組成穩定可靠的 Android App。
文章指出,程式碼生成與實際應用可靠性之間仍有落差。

本文指出,AI 雖然能在幾秒內寫出 Kotlin 程式碼,但速度並不代表能做出值得信賴的 Android App。作者提出的核心問題是,AI 是否能超越片段式程式生成,真正完成可在實際情境中穩定運作的應用。文章強調,從產出程式碼到打造可用產品之間,還存在明顯差距。

02

11 Mistakes Beginners Make When Using AI to Write Kotlin Code

Medium Kotlin 作者:Ambermughal 發布:08-23 14:57

初學者使用 AI 撰寫 Kotlin 程式碼時常犯的 11 個錯誤

AI 可以讓 Android 開發更快,但若用錯方式,程式碼會更難理解、除錯與維護。

重點摘要

AI 能加速 Android 開發流程。
錯誤使用 AI 會降低程式碼可讀性與可維護性。
初學者不應盲目依賴 AI 產出。

本文提醒,AI 雖能加快 Android 與 Kotlin 開發,但初學者若使用不當,往往會讓問題比效率提升更突出。錯誤的使用方式可能使程式碼更難理解、除錯與長期維護。作者將 AI 定位為輔助工具,而非取代思考與判斷的捷徑,強調仍需搭配良好的程式設計習慣與人工審查,才能產出可靠的 Kotlin 程式碼。

03

HTTP Client SSRF Mitigation with InetAddressFilter in Spring Boot

Baeldung 作者:Hamid Reza Sharifi 發布:08-22 23:16

使用 Spring Boot 中的 InetAddressFilter 緩解 HTTP Client 的 SSRF

Spring Boot 4.1.0 透過 InetAddressFilter 介面,提供了原生的 SSRF 緩解支援。

重點摘要

InetAddressFilter 會在 DNS 解析後檢查實際 IP。
可用全域 bean 統一保護所有自動設定的 HTTP client。
也能針對單一 client 設定不同的出站存取規則。

本文說明當 HTTP client 接受使用者提供的 URL 時,可能被誘導去存取內部系統、雲端 metadata endpoint 或 loopback 位址,從而形成 SSRF 風險。Spring Boot 4.1 透過 InetAddressFilter 提供原生防護,會在 DNS 解析後檢查實際的 InetAddress,而不只是主機名稱或 URL。文章示範如何以 bean 方式設定全域過濾器,讓 RestClient、WebClient 等自動設定的 client 都套用同一政策;也介紹如何透過 HttpClientSettings 與自訂 request factory,將過濾器只套用到特定 client。測試則驗證 loopback 位址會在建立連線前被拒絕。

04

API Mocking and Testing With Microcks

Baeldung 作者:Andrei Branza 發布:08-22 23:20

使用 Microcks 進行 API 模擬與測試

Microcks 能將 API 與微服務契約轉成即時 mock,並以同一份契約進行一致性測試。

重點摘要

CNCF 開源專案,原生支援 Kubernetes 的 API mocking 與 testing
可處理 OpenAPI、AsyncAPI、gRPC、GraphQL、Postman、SoapUI 等契約
結合 Testcontainers,可在 JUnit 測試中啟動 Microcks 並做合約驗證

本文介紹 Microcks 這個 CNCF 開源專案,它能把 API 與微服務契約轉成即時、具狀態的 mock,並重用同一份契約對真實實作進行一致性與回歸測試。文章說明它支援 OpenAPI、AsyncAPI、gRPC、GraphQL、Postman 與 SoapUI 等格式,也能透過 CLI 串接 Jenkins、GitHub Actions、Tekton 等流程。接著示範如何用 Testcontainers 在 JUnit 5 測試中啟動 Microcks、匯入 OpenAPI 契約、呼叫生成的 mock,並對本機執行中的服務做合約驗證。

05

How to Fix Jackson JSON Parse Error Can not construct instance of java.time.LocalDate

Baeldung 作者:Hiks Gerganov 發布:08-22 23:26

如何修正 Jackson JSON 解析錯誤:無法建立 java.time.LocalDate 的實例

問題通常不在 JSON 本身,而在 Jackson 的設定。

重點摘要

Jackson 2.x 需註冊 Java Time 模組
JSON 日期格式必須符合預期樣式
依資料內容選擇正確的 Java 時間型別

本文說明 Jackson 在反序列化 Java 8 日期時間型別時,為何會出現無法建立 LocalDate 或 LocalDateTime 實例的錯誤。多數情況並非 JSON 本身不合法,而是 Jackson 設定不完整,例如 Jackson 2.x 未加入 Java Time 模組、輸入字串不符合預設 ISO-8601 格式,或欄位型別與 JSON 內容不相符。文中也指出,Jackson 3.x 已內建 Java Time 支援,而 Jackson 2.x 可能需要安裝 jackson-datatype-jsr310,並在必要時搭配 @JsonFormat。只要型別、格式與設定一致,這類錯誤通常就能排除。

06

Eleven tables, zero indices, and the observability I added afterwards found three more bugs

Dev.to Kotlin 作者:Arqam Waheed 發布:08-23 00:08

十一個資料表、零個索引,以及我後來加上的可觀測性找出的三個新錯誤

我的應用會在讀取時直接從原始訓練紀錄重新計算每次教練判定。五年的歷史資料使每個 session 需要 119.1 毫秒,因為那十一個 Room entity 之間完全沒有索引。

重點摘要

加上索引後,session 分析時間從 119.1 ms 降到 6.8 ms。
之後 Sentry 又找出三個錯誤,包括錯誤的 span ID 長度。
用 EXPLAIN QUERY PLAN 驗證索引是否真的被使用,比只檢查索引存在更有價值。

作者分享 WhyRep 的效能優化與可觀測性導入。這款健身紀錄 App 會在讀取時根據原始訓練資料重新計算教練判定;原本因為 11 個 Room entity 完全沒有索引,分析一個五年歷史的 session 要 119.1 毫秒,補上索引後降到 6.8 毫秒,但也有一個查詢本來就不會因此更快。之後將 Sentry 接進 Android、Cloudflare Worker 與網站後,又發現三個新問題:手寫的 Worker Sentry client 產生了錯誤寬度的 span id、Room 的 invalidation observer 會阻塞主執行緒、以及導覽流程中嵌入的 AuthView 在無限高度下會觸發崩潰。文章強調量測方法、保留負面結果,以及測試生成式 schema 與 migration 之間的契約。

07

I installed a crash reporter and it crashed my app 100% of the time

Dev.to Kotlin 作者:Arqam Waheed 發布:08-23 00:11

我裝了崩潰回報器,結果它讓我的 App 100% 當掉

相依套件悄悄往我的 manifest 加進 ContentProvider,導致我設下的 DSN 保護根本來不及執行。

重點摘要

Sentry 透過合併後的 manifest provider,在 Application.onCreate 之前就自動初始化。
編譯、測試都通過,因為它們根本沒有安裝或啟動 APK。
真正的修正只是一行關閉 auto-init 的 manifest 設定,並以實際安裝驗證。

作者在 Android App 中加入 Sentry,原本設計成以 DSN 作為開關:沒有 DSN 就不初始化,行為應與未引用 SDK 相同。雖然編譯、測試與跨平台編譯都綠燈,release APK 裝到真機後卻在啟動瞬間直接崩潰。原因是依賴套件在 manifest 中偷偷加入了 ContentProvider,且它會在 Application.onCreate 之前執行,於是 Sentry 在沒有 DSN 的情況下先行初始化並拋錯。最後只需在 manifest 加上一行關閉 auto-init 的 meta-data。這篇文章強調:通過編譯不代表通過啟動驗證。

08

My performance optimization silently disabled the feature the app exists for

Dev.to Kotlin 作者:Arqam Waheed 發布:08-23 00:14

我的效能最佳化,悄悄關掉了這個 App 存在的功能

我為了加速分析器限制了資料庫讀取,結果讓深蹲停滯判定在使用者正確減載時默默失效。

重點摘要

原本以為 14 期窗口加兩筆緩衝就足夠,實際上算錯了。
NO_VERDICT 的訓練會消耗資料列,卻不會中斷連勝/連敗計數。
修正方式不是改更大的常數,而是把查詢擴充到結果可被證明已定。

作者回顧自己如何為 WhyRep 的分析流程做效能最佳化,卻意外破壞了應有的停滯判定功能。他先依據規則表推導出固定的資料列上限,並通過測試後上線;但這個上限忽略了 NO_VERDICT 類型的訓練紀錄,例如減載、重量變更、次數區間變更與動作變體,這些紀錄雖然不計入停滯次數,卻仍會吃掉查詢窗口。結果是,當使用者在長期停滯中正確減載時,系統可能不再顯示 plateau。最後作者改成動態擴窗查詢,直到結果能被證明不會再改變。

09

Architecting Location-Aware Automation Without Killing the Battery

Dev.to Kotlin 作者:Haseeb 發布:08-23 00:14

如何打造具位置感知的自動化而不耗盡電池

自動化應該是無形的。

重點摘要

改用 GeofencingClient,避免持續輪詢 GPS 耗電。
加入停留時間與開機重註冊機制,提升地理圍欄穩定性。
尊重手動音量調整,並以明確優先順序處理衝突規則。

本文以 Muffle 這款 Android 應用為例,說明如何在不大量耗電的前提下,依據地點自動切換鈴聲模式。作者不採用持續 GPS 輪詢,而是使用 GeofencingClient 讓系統在邊界被跨越時才喚醒應用。文章也提到室內 GPS 漂移造成反覆觸發的問題,因此加入 dwell time,並在開機後重新註冊地理圍欄以確保可靠性。作者最後強調,自動化設計應尊重使用者的手動覆寫與情境意圖。

10

Kotlin Weekly #525

Kotlin Weekly 作者: 發布:08-23 03:33

Kotlin Weekly #525

第 525 期(2026 年 8 月 23 日)彙整 Kotlin 新聞、文章、影片與函式庫。

重點摘要

Kotlin DataFrame 1.0.0-rc01 已發布,並附上 Jaewoong Eum 的 Reddit AmA。
本期文章涵蓋 monads、Compose HTML 伺服器端渲染、React Native 與領域錯誤處理。
函式庫區介紹 Kwery、Vitre、ElevenLabs KMP、TextKit 等新工具。

Kotlin Weekly #525(2026 年 8 月 23 日)整理了 Kotlin 生態系的最新動態,涵蓋新聞、文章、影片與函式庫。新聞部分包括 Kotlin DataFrame 1.0.0-rc01 發布、Jaewoong Eum 的 Reddit AmA、招募 Compose Multiplatform 實際上線應用,以及 Klibs.io 擴充至 4,200 多個 Kotlin Multiplatform 專案。文章則聚焦 monads、Compose HTML 伺服器端渲染、重新看待 React Native,以及以明確函式簽章處理領域錯誤;另有 coroutine 追蹤、Gradle DSL 與檔案系統抽象風險相關影片,最後以多個新函式庫收尾。

11

Kotlin Coroutines in Spring Boot 4: Keep Your Trace IDs Alive Across suspend Functions

Medium Kotlin 作者:Cem Dırman 發布:08-23 07:01

Spring Boot 4 中的 Kotlin Coroutines:讓 trace ID 在 suspend 函式之間保持有效

如果你用純 Java 撰寫 Spring MVC,MDC 與分散式追蹤通常都能正常運作。

重點摘要

傳統 Spring MVC 通常在同一執行緒處理請求,因此 MDC 可自然運作。
Kotlin coroutines 可能讓 thread-local 的 trace context 在 suspend 之間中斷。
文章聚焦於在 Spring Boot 4 中維持 suspend 函式的 trace ID。

本文說明從傳統 Spring MVC 轉向 Kotlin coroutines 時,可能遇到的追蹤資訊遺失問題。若以純 Java 撰寫,單一請求通常在同一執行緒上執行,因此 MDC 與分散式追蹤可直接運作;但在 suspend 函式中,流程可能切換到其他執行緒,導致 trace ID 不再延續。文章核心就是如何在 coroutine 邊界之間保留 trace ID,以維持應用程式的可觀測性。

12

You have three Days, bot three Months: how to prepare for a Senior Android interview

Medium Kotlin 作者:Mike Salari 發布:08-23 07:01

你只有三天,不是三個月:如何準備資深 Android 面試

The 24-Hour Android Interview Answer Book:2026 年資深 Android 面試題,以及當追問打破你的答案時該怎麼說

重點摘要

資深 Android 面試準備可以用短時間、高聚焦的方式完成。
文章主打問答式準備法,應對難纏的追問。
內容以 2026 年面試情境為背景,強調答案被質疑時的應對能力。

這篇文章以資深 Android 面試準備為主題,強調求職者往往只有幾天而不是幾個月可準備。內文提到一本偏向 24 小時速成的面試答案書,聚焦 2026 年資深 Android 面試題,以及那些會讓答案失守的追問。核心目標是協助讀者準備簡潔、站得住腳、能承受深入追問的回答。

13

BiometricPrompt Is Not Authentication

Medium Kotlin 作者:Alim Reshitov 發布:08-23 07:11

BiometricPrompt 不是身份驗證

將 CryptoObject 綁定到真實交易,而不只是 UI 閘門——以及為何一旦涉及金錢,差異就格外重要

重點摘要

BiometricPrompt 本身只是介面閘門。
CryptoObject 應綁定到真實交易。
當金錢流動時,兩者差異至關重要。

本文主張,BiometricPrompt 本身不應被視為真正的身份驗證;它更像是一個用來開啟介面的機制。真正重要的是,必須把 CryptoObject 綁定到實際交易之中,讓生物辨識批准對應到具體的加密操作。作者強調,尤其在涉及金錢或高風險行為時,這種連結不可或缺;否則生物辨識可能只提供表面的安全感,卻無法充分保護真正敏感的動作。

14

Why Average Response Time Is a Terrible Performance Metric

Medium Kotlin 作者:Karthick Sannasi Periyasamy 發布:08-23 07:13

為什麼平均回應時間是糟糕的效能指標

在監控 API 時,我們常把平均回應時間當成一個簡單的效能衡量方式。

重點摘要

平均值可能掩蓋少數極慢請求。
單看平均值無法反映實際使用體驗。
評估 API 效能需要更合適的指標。

本文指出,以平均回應時間評估 API 效能並不可靠,因為它可能掩蓋少數極慢請求與離群值。即使平均數字看起來不錯,使用者仍可能因偶發延遲而感受到不穩定與變慢。作者主張,團隊不應只看單一平均值,而應改用更能呈現分布情況與尾端延遲的指標,才能更準確理解真實效能表現。