組建家庭小劇院

之前因為想在睡前可以躺平看一些輕鬆的影片,在比較幾台可以調整投影角度的投影機後,買了流明最高的 Samsung The Freestyle 投影機放在房間。經過半年的使用,覺得內建的系統運作十分緩慢(要在投影機跑簡化版的 Android TV 實在是太勉強了)。所以最後決定添購一台 Apple TV。

除此之外,臥室另有一顆放在當鬧鐘跟睡前音樂播放器的 HomePod Mini。上網看介紹說可以再買一個組合成立體聲,所以同時也再添購了另一顆。

設定

TV 的設定比較簡單,iPhone 靠近就能登入了。註冊進 Home 之後,其他家庭成員也能添加帳號到 TV 內。App 部分是共用,不過消息通知、來電等功能則視登入成員而定。HomePod Mini 則需要先註冊到同一個房間,更新到同樣的系統版本後,從 Home 中設定他們為立體聲。這部分我試了幾次才搞定。

使用

經由 AnyNet+(HDMI-CEC),投影機偵測到 TV 開機便會同時啟動,所以不再需要投影機的遙控器。音量部分我是設定 TV 直接連線到兩個 HomePod Mini。不過其實也可以加入投影機變成 2.1 聲道的效果。操作上真的是迅速很多,而且 TV 也支援 5G-wifi,連線速度很快。除了看電視、聽音樂外,目前也打算之後通過連線,玩主機上 Steam 串連過來的遊戲。


建構筆記網頁

尋思著建構一個能直接輸出筆記系統的網站,同時用來存放各種短抄及提供類似長青筆記的功能。我拿原本的部落格改造,不過需要一些額外設定:

  1. 修改同步腳本:主體是單向的 Rsync。本地資料夾不含有 _site。所以每次同步完都會刪除目的地(我的小主機)內的資料夾來逼迫 Jekyll 重新渲染。
  2. Jekyll 調整:
    1. 安裝 relative link 模組
    2. 啟用模組本體及 collections(參考 README 最下方)
    3. 修改 _config.yaml 內的 perm-link 為 /:year-:month-:day-:title

比較麻煩的是在寫筆記時,需要把 wiki-like 的連結變成 markdown 格式。不過這步驟很容易。弄好之後,部落格本文內可以用 markdown link 互聯。筆記頁面呈現到 Jekyll 上的時候會自動把 .md 副檔名變成 .html,於是就能實現互聯式的筆記效果了。

目前看起來會像這樣 筆記部落格 (yfwu.pro)。首頁是流水帳,不過各自的筆記頁面會有可以跳來跳去的效果。我有在想大改主部落格的 Jekyll 的 _config.yaml 讓它也有一樣的效果,但是擔心這樣會導致已經在社群軟體分享的一堆網頁連結失效。最好還是別亂動吧。


2023-09-24 週記

這週四開婦癌會,漏看了一個病人的外片,臨時要報告分期。影像越看越奇怪,趕快請一起開會學姊立刻重看,結果發現這個病人的其實只有 T1a,被我講成 T3,真的是糟糕透頂,覺得很丟臉。下次不要衝動看著某組影像就開講,大方承認自己忘了看需要一分鐘很快看一下。

Open Interpreter

最近在玩 Open Interpreter,真的是很棒的一個工具。通過 GPT-4 的 API,在本地機器上寫程式。相比於 ChatGPT 本身提供的 Advanced Data Analysis,可以有效利用本機端的強大硬體(例如我的 Nvidia RTX 4090 顯示卡及記憶體),也可以持久化(只要我對話不關掉,就能隨時繼續)。搭配 Tmux 一類的軟體,隨時可以從平板繼續研究。之後應該再來寫篇文章描述如何善用此類軟體。

按摩要選對師傅

給那種自以為按的很深的按摩師傅按,隔天更痠痛。實際上只是按傷肌肉而已呀。我覺得油壓那種方式(類似滾筒)的舒緩效果比指壓好。不過若有激痛點,那指壓還是略勝一籌。總的來說,有個能配合的按摩師比較重要。我現在都指定同一個我覺得按的夠放鬆、但是又不會痠痛的人按。這次是他休假,我想說換一個看看,結果翻車啦。


2023-09-18 週記

最近在同時玩薩爾達王國之淚、絕命異次元、博德之門。覺得絕命異次元的遊戲過程壓力很大,雖然很刺激但沒有很舒適,實在是不適合疲累了一天、下班後還要催促腎上腺素。今年還剩下三個月,目前每個月大約只能再多擠出 20 ~30 小時玩遊戲。計畫玩完薩爾達跟 2077 的 DLC。博德之門用 SteamDeck 玩還算舒適,不過 SteamDeck 真不適合休息的時候玩,螢幕太小了,需要聚精會神。

Shortcuts 的妙用

Apple Music 每次啟動都要聯網去載入他那些推薦歌單跟新專輯,但我的目標是打開我要的、已經下載的歌單。如果網路不順就得等,很煩。現在換用 shortcut 直接要求隨機播放我的最愛歌單。我覺得 Shortcuts 真是蘋果生態系一個最基本也最該掌握的自動化工具。更進階的像 Automator 及 Keyboard Maestro 則就見仁見智。


參加新思維論文寫作工作坊之心得

耳聞新思維久矣,早些年處在一個有點鄙夷的狀態。直到自己真的成了 young V (年輕主治醫師),開始有臨床、學術兩方夾擊的壓力,才發現事情沒有想的那麽簡單。工作忙碌之餘要如何做好穩定的學術輸出,同時兼顧一部分的生活品質其實是蠻困難的事情。看到 08-19 這個週末有一堂醫學寫作與論文工作坊,遂報名參加。簡單寫下我對課程的想法:

  1. 論文每段怎麼寫:
    1. 拆解成四大段十六小段,分別介紹了各段的成份
    2. 優點:什麼該寫、什麼不該寫有帶過
    3. 缺點:似乎是針對好上手的 cohort 為主。另外關於什麼該寫的部分是用中文介紹,著重在邏輯,但其實我想看更多的例子。
  2. 統計圖表與文稿排版
    1. 介紹了圖表、草稿該注意的地方
    2. 優點:講的很清楚;後續做出來的圖也確實十分美觀
    3. 疑惑:講者說目前的編輯已經比較沒要求按照傳統排版規範(如兩倍行高、圖片額外放文件),但似乎還是因出版社而異?
  3. 統計基礎課及圖表實作
    1. 簡潔有力的介紹了基本的檢定選擇;資料量大需要先做常態分佈檢定,然後若允許就做基於常態分佈的假說檢定。
    2. 優點:分支樹式的選擇法
    3. 缺點:內容略為簡陋,不過可能時間上也很難涵蓋進階主題(例如 ROC curve、存活分析)
  4. 製圖手作課:MedCalc 確實好用,製圖策略跟教學也很清晰。不過因為我本來就會用 R 畫圖了,我覺得相對沒那麽驚艷。不過畢竟寫程式很麻煩,有在考慮入手一套永久授權的 MedCalc。
  5. 期刊選擇策略
    1. 主要集中在介紹 mega journal 和 predatory journal
    2. 優點:介紹了幾種期刊選擇工具(例如 Jane Journal Estimator
  6. 研究計畫申請及撰寫策略
    1. 我自己有寫過計畫、也被打過槍。科裡有很會寫計畫的前輩有跟我私下分享過,所以我覺得這堂收穫就一般般。
    2. 優點:知道新進人員有加分效果(五年內)。應該趕緊明年寫個計畫出去累積 reputation 跟履歷項目。
  7. 時間安排及各種問答:
    1. 蔡校長的問答時間,很犀利直白,也點出了臨床醫師的學術生涯是一種苦行。其實我也知道帶狀、大塊時間好重要,但有時候下班真的只想休息唉…
    2. 提到了如何跟大師們合作,很有感。目前有跟著阿吉醫師做研究,進度都是按天計算的。沒有什麼兩週、三週。

整體來說,我自己沒有尋找指導老師的困擾。同時我覺得在我想聽的論文寫作、如何敲定假說並驗證的細節部分著墨較少,而花了不少時間(三小時)讓大家練習製圖(雖然製圖本身有趣,而且我做完還是有細節忽略,汗)。總結來說,有收穫、但沒有想像中多。如果價格能再打個七折的話,我會推薦仍在自行摸索的 PGY / junior R 去的。


Obsidian Canvas 及 Properties

目前已經拋棄之前的論文工具鏈,改用 Zotero 做學術文獻的整理,可參考測試 Zotero 一文。我個人認為,論文筆記最好跟隨在原文旁。然而又要能方便搜尋。怎麼辦呢?這時候就要使用筆記匯入的功能了。一樣,需要 BBT 和 Obsidian Zotero Integration 模組。一些需要的前置作業如下:

  • 設定 BBT 中的 citation key。原本的格式是「姓氏 + 標題前三字 + 年份」可增加唯一度,但是看了礙眼。
  • 原本的缺點是搜尋功能只能找檔名,但是 citation key 其實很難搜尋。錄入論文全名又十分冗長。還好最近 Obsidian 開通了 properties 功能,可用 aliases 來記錄論文名稱,而 aliases 中的名稱也可通過搜尋來創造雙向連結。
  • 將論文筆記通過 import 功能同步進來。目前唯一的缺點是沒辦法從 Obsidian 跳到 Zotero 的對應論文本體。

我的論文閱讀及與「知識網」Obsidian Canvas 的串連過程如下:

  • 閱讀論文,在 Zotero 中做摘要及筆記
    • 記得在筆記中設置 YAML 格式的 aliaese
  • 打開要添加論文的 Canvas
    • 使用 import 功能匯入對應論文
    • 在 Canvas 頁面通過搜尋功能即可添加論文筆記。
  • 如果需要額外整理論文內容當作卡片,可以從 Canvas 中複製貼上

Obsidian Canvas

在 Heptabase 掀起一股筆記架構視覺化的潮流後,Obsidian 那中看不中用的知識網路功能被深切的檢討。於是在正式版發布沒多久,Obsidian 就複製出了接近全功能的 Obsidian Canvas。由於前一陣子 Heptabase 有宣佈了月費鎖定方案,所以我就訂購了一個月試用。經過我一個功能一個功能的比對,Canvas 還是有一部分的缺點跟差異,列舉如下:

  • 複製部分筆記成為新卡片這個功能在 Heptabase 中做的比 Obsidian 直觀很多。在 Obsidian 中,會需要 refactor 這個模組,設定好後,可以獲得一套快捷鍵,並要求以選取段落的首行作為檔名。
  • Obsidian canvas 無法真正地讓兩則筆記關聯起來,所以沒有辦法像 heptabase 那樣回溯筆記創建的場景。
  • 操作體驗上,Heptabase 相對滑順。

最多 hepta-cult 詬病的就是 Obsidian 中所有筆記皆是檔案的作法,會讓創建卡片相對麻煩(需要先設計檔名)。Obsidian 的解方除了剛剛提到的 refactor 外,還可以先寫成卡片並調整大小容納長文,待穩定後,可一鍵轉換成 markdown 筆記。到時候再來指定檔名,如此一來比較不會干擾整體性的思考。

Obsidian Properties

Properties 是以前的 YAML front matter 的大進化版。在不變動文字檔的情形下提供了很多功能:

  • 內建的 aliases、tags 支援:
    • 位在 aliases 的內容可以當作檔名搜尋 - 所以我才能維持簡潔的 citation key 檔名同時能快速搜尋我要的文件
    • 位在 tags 內的內容會被視為同本文中的 tag
  • 支援下來式選單:可以跨文件的汲取多文件 front matter 內的內容,不擔心搞混,大幅強化了 dataview 的威力
  • 支援雙向連結:[[]] 現在可以視為文件的一部分

在這個設計下,front matter 的玩法豐富了很多,也規避了命名重複的問題。關於雙向連結的部分,目前還在摸索。


正念減壓與手機遊戲

去年預備升主治醫師時去上了培訓營,其中一環是介紹壓力調適。負責的醫師提到了所謂的正念減壓(mindfulness-based stress reduction)。這其實是個蠻複雜的概念。我之前就聽過這個詞,但是把它跟冥想劃上等號。我發現真是錯的離譜。創始人 Kabat-Zinn 的定義是

刻意地、當下地、不評判地注意時時展開的經驗所產生的覺察力

聽起來很複雜,但其實說白了就是把注意力放在當下。例如,上班走路的時候,不要聽 podcast、不要看「短視頻」、不要忙著規劃一天的行程,而是把注意力放在身體的運動、呼吸、周圍的聲音等等。


試用 ChatGPT 4 改善工作流程

目前有一個業務是心臟(冠狀動脈)的電腦斷層攝影,其中最主要的項目是評估血管狹窄程度,供心臟科醫師參考是否有需要介入。不過,報告本體跟需要呈現給臨床醫師看的資訊會有所不同。報告本體追求的是「不遺漏」,所以是按照解剖部位嚴格劃分每一個血管段(segment)。臨床醫師需要的是「最狹窄」的段落其狹窄程度以及最終分數(CAD-RADS)。中間的轉換步驟我認為很適合給 GPT-4 進行。

在我提供了幾次來自結構化報告的文本(不含病患資訊)以及我自己喜歡的整理格式後,GPT-4 似乎稍為學會了。於是我請它將它目前所學會的格式輸出成可復用的 prompt。因為有時候 chatGPT 會越改越壞,所以有點像是隨時保存訓練好的部分。最好在 Prompt 中包含一部分的範例,這樣它運作起來會更順利。目前還是期待之後 ChatGPT 開放 fine-tune 後的成果。

下面是我要求 ChatGPT 自行總結並輸出的 prompt,比我想像的複雜很多。幾乎可以看成給給研究助理的指示文件。我想最好的方式是組建出一個自帶 LLM 的報告系統,然後可以根據需求點選不同的 prompt。

Prompt: I will provide the ‘Content’ of cardiovascular stenosis evaluation report, including information about each artery, plaques, and stenosis grades. and also any additional context or specific requirements. I will need you to convert the input to the specific output format.

Input:

  1. Artery Name: Stenosis or other findings
    1. Specific Area: Plaque Type; Stenosis Grade (Percentage Range), Exact Percentage
  2. (Repeat for all relevant arteries and areas)
  3. Additional context or specific requirements: (If any)

Output: Summary arranged from severe to minimal stenosis, and list the plaque type as below:

  1. Severe stenosis
    1. with (Plaque Type) in (Specific Area) (Exact Percentage)
  2. Minimal stenosis (can ignore the plaque type)
  3. (Repeat for all stenosis grades)
  4. (Other relevant findings)

2023-06-18 週記

最近在思考工作與生活的平衡。或許要更好的管控精力。

重啟我的 Emacs 設定檔

找到一個名叫 code-cells 的 elisp 模組。若加上我之前設定好的 pyvenv 和 copilot,就能搭建好簡易的腳手架。之前試過 Doom Emacs,但還是覺得自己拼湊的設定檔最為舒適。目前主要使用 Emacs 來寫一些小工具程式,所以也不需要太複雜的功能。

1Password 的輸入框 bug

這週發現 1password 的輸入框有點小 bug。在使用拼音輸入法時,如果不切換成英文直接輸入英文字且連續輸入兩個子音時,1password 會把它們解析為單一的子音字母。例如,當我打 “Reflect” 時,它會變成 “re f le c t”。已經回報,希望下個版本能解決。

病理聯合討論會

下個月要負責擔任病理聯合討論會的講者。教學部負責人打電話來聯絡會前會的時間。我告訴他們我下週的三、四、五在總院,可是他們卻直接告知說:其他醫師週二可以,所以開會就定在週二,並請我務必出席。完全沒有問的意思 Orz 這個時間安排有些強人所難。後來找阿吉主任討論整個流程,他說其實這個會是一非正式的、檢視年輕主治醫師的場合。主委和一級主管們全都會出席,所以大家都會盡量配合。


2023-06-11 週記

試用了 Icecube。主要是 Metatext 的多帳號切換並不方便。然而經過一陣子的密集使用,我發現 Icecube 每則非主語言的貼文下都有一個惱人的「translate」按鈕,有些煩躁。加上它能自設字體,但 UI 的字體卻不能改,十分不協調。於是我又換回了 Metatext。至於電腦端,我還是繼續使用 Tut。

退出薩爾達社團

買了「薩爾達:王國之淚」後,也加入了一些社團嘗試挖掘遊戲的秘密。然而,社團裡總是有一些人在討論說人馬怎麼好簡單打、boss 的難度如何低。如果他們覺得這遊戲太簡單,應該左轉去隔壁棚玩魂系遊戲。

IFTTT 的變動

IFTTT 的 Twitter applet 上上週開始不能再使用了。查了一下,發現又限縮了免費用戶的權利,包裹只能使用兩個 applet(原本三個),以及 Twitter applet 限制付費,所以我只能用 Twitter 網頁或 app 發文。迫於存檔到 DayOne 的需要,最後訂閱了 IFTTT Pro。雖然我有一個私人的 n8n,但是它沒有我需要的幾個功能,例如每個月打電話給我的 Google Voice。所以我還是需要付費使用 IFTTT。得慢慢地把過去用的、但是因為免費版降級而 archive 的各種功能挖回來了哈!


2023-05-07 週記

蒼藍鴿的醫學百科廣告一直打到我牆上,真是神煩,全部隱藏了。最近總是聞到燒焦味,打算去找個耳鼻喉科做個內視鏡檢查。問了懂的人,他們說可能是(疑似)慢性鼻竇炎的症狀,不過我還是得確定一下鼻腔跟腦部沒有大問題。下次健檢就順便點個腦頭頸套餐吧。

RSNA trainee editor

他們在申請資格上最近出了要求:固定在寫 tweetorial (即推特教學文)或者是 vlog,真是有趣 XD 看來我得來重啟分身帳號辦事了。

ClearRead 大好

我們有個大佬似乎已經無法擺脫依賴 LDCT AI 軟體幫忙抓 nodule。上週軟體接口出了問題(網點壞掉還啥的),他勃然大怒說無法打報告。負責機台的放射師無奈地回答:「那過去 20 年您是怎麼打的啊?」真是好笑。

參觀台灣癌症醫學聯合學會

這週末混入了台灣癌症醫學聯合學會的會議,主要是去捧場未來去 UCSF 要跟的一個醫師 Jae 的演講。他介紹了他在做的 0.55T lung MR 以及其他技術。看看別人 V2、再看看我們的 V2,真是差異甚大呀!

年會現場意外撞見彭汪嘉康醫師走來走去,真是神奇!她可是台灣醫學界的傳奇人物,台灣第一個女外科醫師,人稱台灣癌症醫學之母。人稱台大十三太保的內科教授都是她的門徒。


虛擬區域網路神器:Tailscale

Tailscale 通過 NAT 穿透(NAT traversal),讓在防火牆及路由器後的多部設備之間形成直連網路,打到虛擬區網的效果。

用一句話摘錄基本的技術概念,有點類似雙方互相預先「知道」進出端口資料然後穿過防火牆:

So, to traverse these multiple stateful firewalls, we need to share some information to get underway: the peers have to know in advance the ip:port their counterpart is using.

Tailscale NAT 當然,還有更多細節的技術問題,例如 STUN 協議等,可以參閱 How NAT traversal works。看完後學到不少網路基礎協議的知識。

個人用戶目前免費,最多可以連結 20 部設備。最近公布的新方案還把原本屬於付費專業用戶的 subdomain 等功能給了個人用戶。安裝很容易,幾乎是零設定:

  1. 主流 Linux 發行版及 Synology 作業系統都可以從官方來源安裝。
  2. macOS 及 iOS 可以從商店安裝

需要綁定商業服務做 SSO。我是使用 Github 來登入。目前我在我的工作站、常駐迷你主機及 NAS 都配置了 Tailscale。可以很方便的從院內公共無線網路安全訪問。醫院的公共 Wi-Fi 不知為何會鎖 SSH 連線,導致我每次要連回家裡的工作站都要開 Proton VPN,十分卡頓。


Combinatorics / Distance / IterTools

最近程式遇到了一系列執行效能上的瓶頸,主要是被 Python 的 GIL 限制住,於是打算往 Julia 方向遷移。除了複習之前學過的基礎語法外,也嘗試:

  • 將之後的程式碼轉用 Julia 完成
  • 逐步遷移目前的研究用程式碼為 Julia
  • 暫時不能替代的部分用 pycall 呼叫

底下是這次的遷移所用到的庫。未來有學到新的庫也會做筆記以免遺忘。

Combinatorics.jl

Combinatorics 是一個排列組合計算工具。提供了各種基於 factorial 所衍生的排列組合計算公式,包括基本的 combination 及 permutation,以及諸如 partitions 等工具。

\[_nC_r=\left( \begin{array}{l} n\\r \end{array}\right)=\frac{_n P_r}{r!} = \frac{n!}{r!(n-r)!}\]

Distances.jl

因為我的專案需要計算 Hamming distance,所以參考這個組合。除了 Hamming 外,其實比對兩個高維空間座標還有很多算法,例如 Cosine distance & Euclidean distance。用法如下:

r = Euclidean()(x, y) # as type
r = euclidean(x, y) # as function

也可以應用與大規模計算,例如作為 pairwisecolwise 的輸入函數。

IterTools

官方擴展庫,與 Python 的 itertools 是類似的生成器工具。使用範例如下:

using IterTools

for i in imap(+, [1,2,3], [4,5,6])
    @show i
end

2023-03-26 週記

生成式大爆發

這週真的是各種資訊漫天飛舞,完全沒有時間好好吸收便有有更勁爆的消息出來。除了姍姍來遲的 Google Bard,還有 Nvidia Foundations 及 MSFT Loop。不過我認為最大條的還是 ChatGPT plugins

添購外部設備

我本來想說只要買個便宜的雙 HDMI DisplayLink 擴展器,想不到我的兩個現役螢幕竟然都需要 DisplayPort 接頭才能運作。加上希望能一次部署三個螢幕和控制滑鼠鍵盤的 USB 外接,最後只好忍痛買了昂貴的 Belkin Universal Hub。


2023-03-19 週記

本週因為有科內資深醫師請假,工作量增加;加上研究壓力,事情非常地多。真希望住院醫師能多給力一些,節省我打報告的壓力。

運行 Alpaca.cpp

有人基於被外流的 LLaMA 架構跟 Stanford U 逆向出來的參數設計了一款名叫 Alpaca.cpp,能運行於本地端的(不需要聯網)的類 chatGPT 軟體。不過,完全是不堪使用,根本不照著 instruction 走,結果也不對 XD 看來我想像中報告可以用本地 GPT 清理還需要一兩年時間。不過這東西可能挺適合用來練習日常會話。

購買 MBP M2 Pro

我現在的工作主力是 2018 年買的 Intel i7 core MBP。經過五年的奮戰之後,靠著外接顯卡盒續命至今,但是在處理較複雜的任務時容易滿載。去年 M1 max mac studio 跟 M2 出來的時候躍躍欲「購」,不過在比較了一下分數之後覺得可以再等等。如今 M2 pro 已出便不想再等,一開售就即刻入手。畢竟速度就是生產力

更新一下各個設備在 Geekbench 6 的跑分成果(會與去年用 Geekbench 5 的跑分有些微落差)。Workstation 的部分,顯卡從 Nvidia 1080Ti 換成 Nvidia 4090,分數暴增,十分驚人。

Score MBP 2018 Workstation M1 max M2 pro
單核 1254 1690 2392 2634
多核 4176 17044 12287 11898
圖形計算 66033 327488 64745 46096

購買 SteamDeck

SteamDeck 為了歡慶一週年特價 10% off。我看到這個新聞之後立刻下單訂購。最初半年有產能問題,而且我剛換了 Nvidia RTX 4090 顯卡,也可以用 PS5 玩遊戲,應該不需要買一個小型掌機吧?不過看了極客灣的深度評測以及大人學等一眾 KOL 的好評之後,覺得還是可以考慮入手。

SteamDeck 操作方式跟介面類似 Switch,遊戲進行到一半可以隨時暫停、繼續,很適合睡前玩各種 Indie(獨立遊戲)以及模擬器內的老遊戲,同時也可以外接底座連結螢幕(不過應該用不到,所以我沒有買,畢竟我 PS5 內也有很多遊戲等待去玩)。