組建家庭小劇院
之前因為想在睡前可以躺平看一些輕鬆的影片,在比較幾台可以調整投影角度的投影機後,買了流明最高的 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 串連過來的遊戲。
建構筆記網頁
尋思著建構一個能直接輸出筆記系統的網站,同時用來存放各種短抄及提供類似長青筆記的功能。我拿原本的部落格改造,不過需要一些額外設定:
- 修改同步腳本:主體是單向的 Rsync。本地資料夾不含有
_site
。所以每次同步完都會刪除目的地(我的小主機)內的資料夾來逼迫 Jekyll 重新渲染。 - Jekyll 調整:
- 安裝 relative link 模組
- 啟用模組本體及 collections(參考 README 最下方)
- 修改
_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 這個週末有一堂醫學寫作與論文工作坊,遂報名參加。簡單寫下我對課程的想法:
- 論文每段怎麼寫:
- 拆解成四大段十六小段,分別介紹了各段的成份
- 優點:什麼該寫、什麼不該寫有帶過
- 缺點:似乎是針對好上手的 cohort 為主。另外關於什麼該寫的部分是用中文介紹,著重在邏輯,但其實我想看更多的例子。
- 統計圖表與文稿排版
- 介紹了圖表、草稿該注意的地方
- 優點:講的很清楚;後續做出來的圖也確實十分美觀
- 疑惑:講者說目前的編輯已經比較沒要求按照傳統排版規範(如兩倍行高、圖片額外放文件),但似乎還是因出版社而異?
- 統計基礎課及圖表實作
- 簡潔有力的介紹了基本的檢定選擇;資料量大需要先做常態分佈檢定,然後若允許就做基於常態分佈的假說檢定。
- 優點:分支樹式的選擇法
- 缺點:內容略為簡陋,不過可能時間上也很難涵蓋進階主題(例如 ROC curve、存活分析)
- 製圖手作課:MedCalc 確實好用,製圖策略跟教學也很清晰。不過因為我本來就會用 R 畫圖了,我覺得相對沒那麽驚艷。不過畢竟寫程式很麻煩,有在考慮入手一套永久授權的 MedCalc。
- 期刊選擇策略
- 主要集中在介紹 mega journal 和 predatory journal
- 優點:介紹了幾種期刊選擇工具(例如 Jane Journal Estimator)
- 研究計畫申請及撰寫策略
- 我自己有寫過計畫、也被打過槍。科裡有很會寫計畫的前輩有跟我私下分享過,所以我覺得這堂收穫就一般般。
- 優點:知道新進人員有加分效果(五年內)。應該趕緊明年寫個計畫出去累積 reputation 跟履歷項目。
- 時間安排及各種問答:
- 蔡校長的問答時間,很犀利直白,也點出了臨床醫師的學術生涯是一種苦行。其實我也知道帶狀、大塊時間好重要,但有時候下班真的只想休息唉…
- 提到了如何跟大師們合作,很有感。目前有跟著阿吉醫師做研究,進度都是按天計算的。沒有什麼兩週、三週。
整體來說,我自己沒有尋找指導老師的困擾。同時我覺得在我想聽的論文寫作、如何敲定假說並驗證的細節部分著墨較少,而花了不少時間(三小時)讓大家練習製圖(雖然製圖本身有趣,而且我做完還是有細節忽略,汗)。總結來說,有收穫、但沒有想像中多。如果價格能再打個七折的話,我會推薦仍在自行摸索的 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:
- Artery Name: Stenosis or other findings
- Specific Area: Plaque Type; Stenosis Grade (Percentage Range), Exact Percentage
- (Repeat for all relevant arteries and areas)
- Additional context or specific requirements: (If any)
Output: Summary arranged from severe to minimal stenosis, and list the plaque type as below:
- Severe stenosis
- with (Plaque Type) in (Specific Area) (Exact Percentage)
- Minimal stenosis (can ignore the plaque type)
- (Repeat for all stenosis grades)
- (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.
當然,還有更多細節的技術問題,例如 STUN 協議等,可以參閱 How NAT traversal works。看完後學到不少網路基礎協議的知識。
個人用戶目前免費,最多可以連結 20 部設備。最近公布的新方案還把原本屬於付費專業用戶的 subdomain 等功能給了個人用戶。安裝很容易,幾乎是零設定:
- 主流 Linux 發行版及 Synology 作業系統都可以從官方來源安裝。
- 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
也可以應用與大規模計算,例如作為 pairwise
或 colwise
的輸入函數。
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 內也有很多遊戲等待去玩)。