Rhenium:一款可在本機運作的 macOS 免費照片篩選工具,以及它的誕生故事
如果你曾經拍過活動,就知道最痛苦的不是拍攝本身。
重點摘要
這篇文章介紹 Rhenium,一款專為 macOS 設計的免費照片篩選工具,目的是協助攝影者處理活動拍攝後大量照片的整理工作。它強調在裝置本機完成運算,不需依賴雲端,兼顧隱私與效能。文章同時帶出作者打造這項工具的動機與過程,聚焦於拍完活動後要從成千上萬張照片中挑選的耗時與疲憊,以及如何讓這個流程變得更輕鬆。
Daily Digest
2026年06月29日
內容會跟隨語言切換。
📝 今日焦點:Kotlin 2.4、Java 26、Compose 與 AI 原生工具加速匯流,Kotlin Notebook 也將退場轉由社群接手。 🔧 效能最佳化:Spring AI 的工具搜尋大幅減少 token,Paimon 批次讀寫與 Android 省電、Compose 重組優化都指向更低成本。 🏗 架構設計:從 MVVM、AI Agent、Claude Code 到 KMP 與 Kotlin Channels,文章聚焦可組裝、可維護的現代 JVM/Android 架構。 🚀 語言演進:Kotlin 高階函式、型別階層、Any 與泛型、coroutineScope 差異,幫助開發者補齊語言核心觀念。
如果你曾經拍過活動,就知道最痛苦的不是拍攝本身。
這篇文章介紹 Rhenium,一款專為 macOS 設計的免費照片篩選工具,目的是協助攝影者處理活動拍攝後大量照片的整理工作。它強調在裝置本機完成運算,不需依賴雲端,兼顧隱私與效能。文章同時帶出作者打造這項工具的動機與過程,聚焦於拍完活動後要從成千上萬張照片中挑選的耗時與疲憊,以及如何讓這個流程變得更輕鬆。
Compose 提供了好幾種副作用 API,但這些名稱並不容易看出你真正需要哪一個。
本文介紹 Jetpack Compose 的副作用 API,並指出它共有好幾種,容易讓人不確定該選哪一個。文章強調的問題在於,這些 API 名稱並沒有清楚說明各自的用途,因此對讀者來說不夠直觀。整體目的是幫助開發者在不同情境下,判斷該使用哪一種 Compose effect API。
如果你已經寫 Kotlin 有一段時間,應該用過 map、filter、forEach 或 let 這些函式。
本文以 map、filter、forEach、let 等 Kotlin 常見函式切入,介紹高階函式的主題,並將內容定位為給已經有一段 Kotlin 實作經驗的開發者所看的實用指南。根據目前提供的節錄,文章重點在於幫助讀者理解這些常用函式背後的概念,以及它們如何成為現代 Kotlin 開發中的重要工具。
這不是一次遷移,而是一場思維上的轉變。
作者表示自己已做了 5 年 Android 開發,起初使用 XML,後來則以 Compose 從零建立新專案。他強調,這次轉換並不只是把舊架構搬到新工具上,而是一場思維上的轉變。文章點出他對 Android 開發方式的重新理解,也暗示 Compose 改變的不只是 UI 寫法,還包括開發者的思考模式。
請繼續在 Medium 閱讀 »
目前提供的來源只有文章標題、作者、連結,以及一行引導讀者前往 Medium 繼續閱讀的簡短前言。由於內文未附上,無法可靠判斷文章實際討論了哪些設計模式,也不能確認它們如何強化 MVVM 架構。就已知資訊而言,只能辨識主題方向,完整內容仍需前往 Medium 查看。
讓現代聊天機器人解釋事情很厲害;但若要它真正去做事,結果就不同了。
本文以「聊天機器人很會解釋,但未必會做事」作為切入點,帶出在 Android 上打造 AI Agent 的動機,並提到 MCP 作為實作方法。從目前可見內容來看,文章重點在於從單純對話系統走向可執行任務的代理式應用,強調 AI 不只回答問題,也應能實際採取行動。由於原文未完整提供,現有資訊主要反映文章主旨與方向。
Kotlin 2.2、Jetpack Compose 動畫、AI 原生 API 與無伺服器後端正在匯流。
這篇文章指出,Android 開發的未來其實已經開始成形,Kotlin 2.2、Jetpack Compose 動畫、AI 原生 API 與無伺服器後端正逐步匯流。作者不是在談遙遠的藍圖,而是強調這些技術已經在影響今日的 Android 應用開發。對開發者而言,重點在於理解這些變化並及早關注,因為它們代表的是整個 Android 生態正在發生的更大轉變。
Kotlin 2.4 的主要功能實作解析——Context Parameters、Explicit Backing Fields、UUID API、Java 26 支援與 Wasm。
這篇文章以實作角度整理 Kotlin 2.4 的主要更新,重點涵蓋 Context Parameters、Explicit Backing Fields、UUID API、Java 26 相容性,以及與 WebAssembly 相關的改進。文章沒有深入技術細節,而是將這些功能視為 Kotlin 2.4 值得關注的核心變化,讓開發者快速掌握新版本帶來的語言與平台擴充。
首先,什麼是 Channel?
〈Kotlin Channels Deep Dive〉由 Prince Vala 撰寫,現有摘錄以「首先,什麼是 Channel?」開頭,顯示文章意在從基礎概念切入介紹 Kotlin Channels。不過,提供的內文非常有限,沒有包含更多說明、範例或實作細節,因此目前只能確認文章主題與開場提問,完整內容則需前往 Medium 繼續閱讀。
此外掛將以開源模式保留,讓社群能持續開發。
自 IntelliJ IDEA 2026.2 起,JetBrains 將停止將 Kotlin Notebook 作為產品維護,並把外掛從 IDE 中解除綁定。v2026.2 仍可從市集安裝,且原始碼會以 Apache 2.0 釋出到 GitHub,後續由社群接手開發;但 2026.3 之後 JetBrains 不再發布相容版本。官方表示,這項調整源於採用率未達預期,以及 AI 工具改變了開發者探索與原型驗證的方式。同步提供 Kotlin DataFrame 作為延續方案。
我們將用它在 HDFS 儲存中建立資料湖與表格,並對其執行 CRUD 操作。
本文介紹如何透過 Apache Paimon Java API,從自訂 Java 應用程式管理 Paimon 資料庫。內容先說明所需的 Maven 依賴,接著示範如何建立 catalog 與表格,將 IT 基礎設施監控指標存入資料湖,並可使用本機檔案系統或 HDFS 作為儲存層。文章進一步展示以 GenericRow 和 BatchTableWrite 批次寫入資料、利用 predicate 與 projection 進行條件查詢,以及依複合主鍵完成更新與刪除。整體強調 Paimon 適合處理串流、批次與分析場景。
Oracle 於 3 月釋出 Java 26,帶來效能提升、新 API,以及未來可能正式納入的預覽功能。
Java 26 帶來多項聚焦於效能、安全、網路與語言演進的更新。重點包含:對透過深層反射修改 final 欄位的操作發出警告、移除早已過時的 Applet API、AOT 物件快取可套用於任何 GC,以及 HTTP Client 新增 HTTP/3 支援並可自動回退至較舊版本。此版本也改善 G1 吞吐量,推出 PEM 加密物件 API 的第二次預覽,並持續推進結構化並行、Lazy Constants、Vector API 與 primitive patterns 等功能。
Tool Search Tool 只在模型真正需要時才暴露工具,讓提示詞保持精簡。
本文介紹 Spring AI 的 Tool Search Tool 如何降低工具眾多的 AI 系統中不必要的 token 浪費。做法不是在每次請求都把所有工具定義送給 LLM,而是先在啟動時索引工具,初始只提供 Tool Search Tool;當模型判斷需要某項能力時,再以自然語言查詢觸發搜尋,將最相關的工具注入下一輪請求。文章以旅遊助理為例,結合航班、飯店、天氣與景點工具,以及 regex 搜尋策略,展示動態發現工具的流程。實測結果顯示,兩種配置都能得到相同答案,但使用工具搜尋後 token 大幅下降。
Claude Code 會讀取你現有的架構,並產生符合程式碼庫風格的慣用 Kotlin。
本文說明 2026 年如何在 Android 開發中使用 Claude Code:在專案根目錄啟動後,搭配目標功能與相關檔案下提示詞即可。它能讀取現有架構,包括 Gradle 設定、套件結構與 ViewModel,並產生符合專案風格的 Kotlin 程式碼。文章進一步示範新舊專案的初始化、Compose 畫面生成、ViewModel 與 Coroutines 狀態管理、Gradle 版本衝突處理,以及 Espresso 或 Compose 測試撰寫。文中也強調 Claude Code 透過終端機運作,可與 Android Studio 並行使用。
原本只是送給伴侶的禮物,最後卻成了許多編織者真正需要的工具。
一位來自芬蘭的獨立 Android 開發者,原本只是想為會編織的伴侶做個禮物,因而開發了 KnitTools 這款編織與鉤針 App。起初他以為這只是一個多餘的計數工具,但在開發過程中發現,許多編織者確實需要在同一處記錄行數、線材、圖案與進度。這款 App 堅持隱私優先:沒有廣告、沒有行為追蹤、可離線使用,僅可選擇連接 Ravelry。技術上採用 Kotlin、Jetpack Compose、Room、Hilt 與本地 regex 解析,不使用 AI。產品以一次性購買販售,並提供兩週免費試用。
5 種經過實戰驗證的技巧,幫你大幅降低耗電量——還附可直接複製貼上的 Kotlin 程式碼
本文主題是如何降低 Android App 的電池消耗。作者表示內容整理了 5 種經過實戰驗證的技巧,並附上可直接複製貼上的 Kotlin 程式碼,讓開發者能立即套用。依目前可見資訊,文章重點在於提供可操作的效能優化方法,協助 App 減少耗電並改善使用者體驗。
Gradle 是建置 Android 應用程式的核心系統,但在 2026 年……
本文以「修復 Android Studio 2026 的 Gradle Sync 問題」為主題,開頭指出 Gradle 是用來建立 Android 應用程式的命令列建置系統,並將焦點放在實務上的同步錯誤排除。不過,現有內容只提供 Medium 的導讀片段,未列出完整文章,因此無法從原文確認具體原因、修復步驟或進一步建議。
我總是會忘記很多事情。
作者表示自己常忘記許多事情,包括散步時冒出的點子、朋友推薦的書,以及原本想之後再記下的想法,因此決定開發一款語音記憶 App。這個專案採用 Kotlin Multiplatform 製作,而文章重點在於作者透過實作所學到的經驗與反思。從目前可見內容來看,本文主要是介紹開發動機與問題背景。
如果你已經寫 Kotlin 一段時間,你大概早就無數次使用過 Unit 和 Any。
本文介紹 Kotlin 的隱藏型別階層,重點放在 Unit、Unit?、Any、Any?、Nothing 與 Nothing? 這六個核心型別。文章指出,即使是熟悉 Kotlin 的開發者,也可能經常使用這些型別,卻未必真正理解它們彼此之間的關係。作者希望透過整理它們在型別系統中的位置,幫助讀者更清楚掌握 Kotlin 如何組織這些基礎型別。
我最常見到的 Kotlin 開發者迷思之一,就是把 Any 和泛型(<T>)當成可以互換的概念。
本文指出 Kotlin 開發者常見的一個迷思:把 Any 與泛型(<T>)視為可互換的概念。作者強調,這個區分對理解 Kotlin 的型別設計很重要。雖然目前提供的內容相當簡短,但核心訊息明確:Any 是具體型別,而泛型則是一種透過型別參數撰寫彈性、可重用程式碼的機制。釐清兩者差異,有助於開發者在設計 API 與使用 Kotlin 型別系統時避免混淆。
Kotlin 協程讓 Android 上的非同步程式設計大幅簡化。
本文指出,Android 開發者在使用 Kotlin 協程時,常會被 coroutineScope 與 CoroutineScope 這兩個相似名稱搞混。雖然協程讓 Android 的非同步程式設計變得更簡單,但名稱上的細微差異仍可能造成理解偏差與使用錯誤。文章重點在於釐清這項命名上的區別,並提醒讀者注意其實作與使用情境。
隱藏的可變性契約、立即求值的集合與延遲序列,可能在 Android 應用中引發悄無聲息的錯誤與 UI 卡頓。
本文說明 Android 開發者如何被集合操作看似簡單的表象所誤導。文章聚焦於隱藏的可變性契約、立即求值集合與延遲序列之間的差異,以及這些選擇如何引入難以察覺的錯誤或降低介面回應速度。核心觀點是,必須審慎理解集合的行為;若對可變性與評估方式有錯誤假設,就可能在開發過程中埋下不易發現的問題。
在 Jetpack Compose 中做出功能很容易,但要打造高度最佳化的 UI 則需要更多心力。
本文作為 Android UI 效能系列的第一篇,主題聚焦在 Jetpack Compose 中的重組與穩定性。作者指出,雖然在 Compose 中實作功能相對容易,但若要打造高度最佳化、可用於正式產品的 UI,仍需更細緻的設計與理解。文章強調,效能不只是畫面是否可用,更包含電量與 CPU 使用效率,以及如何掌握影響 UI 表現的關鍵概念。
一種僅使用公開 API 存取可移除儲存空間的實用方法——不需要反射,也不需要 root。
本文介紹一種在 Android 上取得實體 SD 卡路徑的實用作法,重點是不使用反射,也不需要 root 權限。作者以初級開發者的角度分享這個「取巧但能運作」的方案,透過公開 API 來存取可移除儲存空間,目標是提供在實際專案中可用的替代方法。內容強調此法雖非完美,但足以應付常見需求。