一. 前言
延續前一篇: 初探 NotebookLM:以 醫療機構電子病歷製作及管理辦法 為例 有提到 NotebookLM 可以產生 2 位主持人對話的 "語音檔" (Audio). 2025/05 已可產生中文版的對話. 故將前一篇留下的產出 "影音檔" (Video) 的部分, 進行演練.
依前一篇的內容, 將 醫療機構電子病歷製作及管理辦法.pdf 匯入至 NotebookLM 之後, 即可進行以下步驟.
凡走過,必留下痕跡;凡住過,必留下鄰居; 凡寫過,必留下記憶。
延續前一篇: 初探 NotebookLM:以 醫療機構電子病歷製作及管理辦法 為例 有提到 NotebookLM 可以產生 2 位主持人對話的 "語音檔" (Audio). 2025/05 已可產生中文版的對話. 故將前一篇留下的產出 "影音檔" (Video) 的部分, 進行演練.
依前一篇的內容, 將 醫療機構電子病歷製作及管理辦法.pdf 匯入至 NotebookLM 之後, 即可進行以下步驟.
最近整個 AI 軟體業有了長足的發展, 各平台及工具百家爭鳴, Will 保哥在去年底整理了 日常 AI 工具: 2024 Q4 版本, 說明各工具的適用情境.
本文主要利用 Google NotebookLM 工具, 將 醫療機構電子病歷製作及管理辦法 的內容進行整理, 並產生複習用的題庫.
NotebookLM 可以適用在以下的情境:
提醒一下, 雖然可以幫忙作內容整理, 但書還是要自己讀, 不能只看 AI 整理出來的總結, 很容易會失去洞見 (InSight)
以下是 "Will 保哥的技術交流中心" 的貼文. (2025.01.11)
AI 不能取代你本來就該讀書這件事,不要太相信總結這種東西,知道個大概不能讓你對知識產生洞見,沒有洞見就無法替你帶來價值! (by Will保哥)
最近程式開發, 需要在 C# LINQ 針對某個欄位作字串大小比較, 原本以為如下的寫法就能過, 但發現會有 "CS0019 Operator '>=' cannot be applied to operands of type 'string' and 'string'" 的錯誤.
var query = db.VWEmpCities.Where(x => x.CityId >= "5");
後來問了 Felo Search, 有提到了採用 String.Compare 或 String.CompareTo 進行字串大小的比較.
以下就舉一個例子, 進行演練, 加深印象.
最近專案的資料庫為 Oracle, 部份 table 是由客戶自行設計及管理, 並沒有什麼明確的文件可供參考, 不清楚 table 之間的關聯性.
經上網查詢, 發現 Oracle SQL Developer Data Modeler 可由現行資料庫的結構, 反轉為 ER 圖的功能, 可以看出 table 的關聯性, 故演練一下, 並作成筆記.
當然, table 之間必須要建立 Primary Key, Foreign Key 的關聯, 否則轉出的 ER 圖, 其效果不大.
由於最近 C: 磁碟機的空間所剩不多, 用 Windows 10 內建的磁碟清理, 它指出 %Temp% 資料夾佔了 19.7GB, 但實際清理, 卻永遠都清不掉.
查了一下黑暗執行縮的三篇文章 (連結如參考文件), 有提到一個 WizTree 的工具, 可用以分析一下磁碟的使用狀況.
結果嚇了一跳, 居然是 66.9GB, 遠比磁碟清理呈現的佔用空間值, 足足多了3倍. 實在不清楚原因. 最近沒安裝什麼軟體, 只有作了 Windows Update, 然後有更新失敗的狀況. 但剛剛去查更新記錄, 居然只有留下成功的, 失敗的記錄通通消失了. 真的很怪異.
按理應該要寫一支 C# 程式定期清理 %Temp% 資料夾下 1 個月前的檔案及資料夾, 但還是有點擔心誤刪. 先暫緩.
另外, 發現 %UserProfile%.nuget\packages 佔了 16.4GB, 有找到 How to change default Nuget packages folder on Windows 的文章, 就來實際演練一下吧.
由於工作上會用到 ASP.NET Core 8 Web API 存取 Oracle 資料庫. 目前查到的方式有 2 種:
1.. 利用 Dapper 作為中介, 直接下 SQL 指令.
2.. 利用 Entity Framework Core 作為中介, 由其將 Entity Framework 的物件內容, 轉為 SQL 指令.
筆者已習慣採用 Entity Framework Core + MSSQL, 所以這篇就來試試 Entity Framework Core + Oracle.
撰寫完成的 Web API 總是要測試, 本文採用 Swagger/OpenAPI 的相關套件及工具, 進行測試.
內容大綱如下:
一. 環境
二. 步驟
(一) 安裝 dotnet-ef 命令列工具 至最新版
(二) 建立 Web API 專案
(三) 加入 Microsoft.EntityFrameworkCore.Tools 套件
(四) 加入 Oracle.EntityFrameworkCore 套件
(五) 建立 Oracle 資料庫, 使用者及 Table
(六) 由 Oracle 資料庫產生 DbContext 及 Models
(七) 撰寫 Web API
(八) 將程式進行優化
(九) 利用 Swashbuckle.AspNetCore 套件產生 Web API 的說明頁面
(十) 利用 NSwag.AspNetCore 套件產生 Web API 的說明頁面
(十一) 利用 NSwagStudio 工具產生用戶端的程式碼
附錄一: Oracle.EntityFranewrokCore 安裝後的提示
附錄二: EF Core Power Tools 執行完成的提示
前一篇把背景服務整合至使用者登入後的 TrayIcon 應用程式, 且確認可在使用者登入後執行. 而 ASP.NET Core 8 Web API 其實也類似一個背景服務, 想說看看是否可以作到.
試想一個情境:
想在瀏覽器的 Javascript 存取使用者的本機資源, 例如: 讀卡機, 描描器, 印表機, 本機環境設定... 等, 受限瀏覽器安全性設計, 應該很難作到. 或許可以, 但筆者不是 Javascript 專家, 想說是否有其它的路可以走. 看到 (黑暗執行緒) 使用 .NET 6 開發 Windows Service 有人詢問瀏覽器存取本機資源的問題, 黑大回覆可以參考這篇 (Microsoft) 在 Windows 服務上裝載 ASP.NET Core.
架構設計如下圖, 但不是真的去讀 ICCard, 只是作一個小的 Web API 驗證可行性.
筆者的狀況是不一定要裝載在 Windows Service, 只要是登入後執行的 Windows Form App, 且自動縮小到系統匣(System Tray) 即可.
一. 建立 ASP.NET Core 8 Web API 應用程式
(一) 建立 ASP.NET Core 8 Web API 專案
(二) 加入範例 Web API
(三) 採用 Serilog 輸出至 Console 及 File
二. 發佈前述 ASP.NET Core 8 Web API 至單一執行檔
(一) 以 VS2022 進行發佈
(二) 以 Postman 測試發佈後的執行檔
三. 加入 TrayIcon 的功能
(一) 加入 icon 圖檔
(二) 建立一個 Windows Form App 作為修訂 Web API 專案的參考
(三) 修改 .csproj
(四) 修訂其它程式
四. 實際測試
(一) TrayIcon 模式
(二) Console 模式
五. 安全性議題
(一) AllowHosts 設置
(二) CORS 設置
(三) 調整後的 Program.cs
六. 注意事項