設計新家

最近剛搞定新家的佈局。我覺得最大的障礙來自於現在的生活模式依然是「類似套房」,也就是吃喝玩樂大部分都在書桌前面進行。現在的住處是有一個小客廳,不過被我們堆滿了雜物。所以需要重新分配生活機能到住處各個地方。簡單搭配如下:

  • 鞋櫃、外出衣櫃:讓沙發回歸沙發。
  • 輕食區:設廚具的上方,檯面一路從廚具延伸到鞋櫃上變成平台。
  • 廚具:L 型,選用 IH 爐,然後有洗碗機跟微波爐、烤箱。
  • 書房:用 Ikea 衣櫃組合出一個主機架。
  • 臥室:抹平天花板,外圍做燈條,搭配投影機可以躺著看電影。

裝潢最後是選定了歐德(其實我們也只問了兩間),最大的考慮是歐德就在樓下,而且我們的主要家具還是從 Ikea 組合而來,找更貴的室內設計只是浪費錢。另外歐德有固定合作的統包工程,品質應該也比較穩定,不用自己再找。

家俱跟家電部分

  • 傢俱:選用 Ikea,比系統櫃便宜。而且到時候賣房時成本較低
  • 電視:預計買 LG 的 miniLED 電視應該會從好市多有的選擇找
  • 洗衣機、冰箱:預計買 LG
  • 洗碗機:Bosch 毫無疑問,不過也會看看廚具廠商怎麼說
  • 濾水器:還在研究
  • 智慧家電:會換成智慧開關(書房、臥室、客廳、廚房)

Mesh 網路

考慮到之後會有不少聯網設備,網路環境也需要升級,最後選定了蘋果官網再售的 Mesh 路由器 Linksys AX4200。雖然是 AC4200 規格但是有三頻,穩定性應該還行。預計是客廳、書房。臥室可能會根據訊號強度再買一顆。所有的 Mesh 都是拉實體迴路。


在框架下工作

報告的數量比我第一年主治時還多,同時還有研究跟臨床雜事要做,所以這幾個月也不斷在改善工作流程,盡可能在不影響報告正確率與可讀性的方式下加速。我自己的感想是:要確立工作框架,並使臨床在乎的事項有被滿足。

釐清臨床問題

大部分時候臨床醫師開單常常不清不楚,然後住院醫師也跟著稀裡糊塗的做。在一些沒法回頭確認的檢查,例如特殊攝影,我通常會先跟住院醫師一起確認過一次舊片、病歷及手術史。電腦斷層等檢查則需要弄清楚掃描範圍及部位,來決定 protocol。

改善工具

用 ChatGPT 設計了不少工具。例如,打腫瘤追蹤的時候我用一個網頁工具,包含左右雙欄(panal) textarea 做為對照輸入框,搭配底部的替換工具,可以讓我很輕易的比對前一位醫師的報告。

建設框架

核心是 checklist 以及 template,然後依據不同類型的需求有更細緻的變化。除了不打負向發現(negative finding)外,我也盡可能讓語句格式化:目前是使用「FINDING SIZE in ORGAN with FEATURE, STATUS, IMAGE」這樣的句式,例如肝臟腫瘤是「Enhancing mass 1.8 cm in liver S7 with wash-out, stationary, Se:5 Im:9」

我的報告大宗是兩類:癌症及肺部結節追蹤。我為他們建了模板:

  • 癌症追縱模板(代碼 stg):在癌症方面,報告格式同核醫科。
  • 肺結節追蹤(代碼 ctcvs):可結合 Aview 判讀的轉換結果。

在框架下工作

不管是 template 或 checklist,主要目的還是在能「對齊」讀片的順序。明確寫下的框架可以視為內心活動具象化,操作上就是一邊看片、一邊按模板順序填入,最後簡單整理便可印出。


《身體調教聖經》減肥篇

實在是太肥了,所以又重新研讀了一下《身體調教聖經》裡面提到的減肥訣竅。

慎選優良食材:

  • 蛋白質:有機全蛋(全蛋 2~5)、雞胸肉、牛肉(飼牧草)
  • 豆類:扁豆(lentil)、黑豆(black bean)、班豆(pinto bean)
  • 蔬菜:菠菜、什錦蔬菜、蘆筍

低醣減脂法

  • 足夠的油脂脂肪(堅果?)
  • 用餐時間 > 30 min
  • 體驗肉桂 + 檸檬汁
  • 損害控制

減肥的進食規則

  • 避開白糖
  • 餐餐都吃同樣的、少量食物
  • 別喝高熱量飲品(零卡 - 不多於 475 cc)
  • 不吃水果
  • 一星期有一天隨便吃!

我的計畫

  • 將燕麥片、煮熟的豆類、冷凍蔬菜(解凍)、雞胸肉片,全部都放在一個便當盒內,帶到醫院當午餐
  • 晚上可以吃自己煮的肉跟菜。避免吃白色碳水
  • 正餐前、以及餐後一小時進行簡單的徒手運動(各約一分鐘)

學習 LLM 相關技術

前陣子擬定了幾個學習 LLM 相關技術的方向:

  1. 架設本地可運行的小模型 
  2. 學習代理框架
  3. 熟練使用 OpenAI API

底下記錄目前的進度。相比之前,最近幾個月觀察到的趨勢是工具之間也在互相整合。例如模型下載工具如 Ollama 等,抑或直接使用 transformer 模組,原先都是存在各自設定的地方,現在有復用的趨勢。而一開始的模型 API 也從百家爭鳴逐漸統合到以 OpenAI 格式為準的狀態。

  • 架設本地可運行的小模型:最近剛搞定使用 Ollama 裝設了一系列大大小小的模型。為了 offload 模型到 CPU,特地擴充了記憶體到 128 GB。有一些 inference framework 可以加速、或減少硬體開銷,也值得探索一番。
  • 學習代理框架:目前以 LangChain 為主。
  • 熟練使用 OpenAI API:之前的文章有介紹到,後來繼續學習了 temptop_k 兩個參數

Obsidian 週記功能

在 Obsidian 中有一個功能叫做間隔筆記(periodic notes),搭配日曆模組用起來很方便。其中有提供了週記的功能。我改動了如下設定,來搭配原本的部落格設置:

  • 檔案名稱:不論是部落格還是「筆記花園」,格式都是 yyyy-MM-DD 後接關鍵字。在 momentjs 設定中,使用方括號來跳脫(escape)匹配。
  • 模板:模板統一放置於 Templates 資料夾
  • 檔案資料夾:放置於部落格 Weekly 資料夾中

Setting

像上面這樣設好後,即可獲得如下的好處:

  • 撰寫週記不再需要額外手動創建檔案、填寫 metadata,只需要去日曆點選當週的週數即可。
  • 因為檔名具備一致性,可以匹配到舊的週記。

今年的目標是要多多地寫週記。


事實、解釋、行動

過年整理書房清出了很多舊書。其中一本《為什麼聰明人都用方格筆記本》本來想扔了,不過還是很快地過濾內容。書中提到了康乃爾筆記法及麥肯錫的「黃金三分割法則」,覺得有點意思。所謂的黃金三分割法則是指在筆記過程中重新整理資訊,使其變成三大區塊:

  • 事實:記述客觀資訊
  • 解釋:根據這些客觀資訊所做出的推理
  • 行動:提出問題或整理結論

一些其他的筆記術重點包括:

  • 留白:創造出思考空間
  • 使用少數顏色:一般筆記為藍色、重要筆記或修改為紅色
  • 使用較大尺寸
  • 擬定標題、一頁(對開)只寫一個主題

最後面提到了一個很有年代感的頭影片數據圖製作網站 Thick-cell


轉移筆記網站到 Quartz

原本數位花園使用的是跟部落格本站一樣的 Jekyll。不過,考慮到搜尋、互聯的需求,轉移到另一個基於 NodeJS,可以相容 Obsidian flavored markdown 格式的工具 Quartz。另外把部落格內一些比較跟個人無關、偏工具類的文章轉移到筆記網站去,例如 Emacs、Obsidian 還有一些程式片段。


2023-12-10 週記

這週在實驗了很多的 GPT API,覺得這工具穩定性還是沒有想像中的那麼穩定。要作為大型研究案的基石可能還需要很多的方法學(最基本的是調節 temptop-k 這兩個參數)。不過,我覺得是很適合用來代替「人工過濾」這件事情。目前測試了一些項目也有結論。也許之後可以寫成小文章發表到一些低分期刊上。

同樣是 LLM 相關:這週嘗試用沈浸式翻譯工具搭配 GPT-4 API 來翻譯一本嚴肅的放射科教科書,結果翻譯到 68% 死活不動(應該是網路問題)。按網頁說明重新整理後內容竟然不見了,查看了一下使用量竟耗用了快 10 美元,實在是吃不消,後來改用了 GPT-3.5 進行。速度也快。

現在每天都會有一堆骨骼肌肉的 MRI 灌進來,都不會打,讀書得十分辛苦。還有國健局的乳篩、心臟電腦斷層、肺結節篩檢跟定位、婦癌影像、各式各樣以前住院醫師沒學過的。

小米電磁爐

買了一個知吾煮湯鍋跟小米電磁爐的組合,因為現在住處的是明火的瓦斯爐,已經很久沒有用,還是用電磁爐比較安心一點。以前住處是那種底部有線圈加熱的黑晶爐,那種我覺得比較好,功率沒有電磁爐那麼驚人,鍋具適用性也比較廣。

Railway Empire 2

Railway Empire 沒玩幾次就出二代了。記得以前國中很愛玩 Railway Tycoon 2,那時候都看攻略玩。後來有自己的遊戲主機後買了 Railway Tycoon 3 跟 Railroads,但都覺得太卡通化了。直到 Railway Empire 才覺得有精神繼承的遊戲。之後再來仔細研究攻略。

堅持鍛鍊

精神狀態比較差的時候,可改槓鈴訓練為使用腿推機。其奧秘就在於要保持骨盆輕微的活動,在重量下壓的時候,適度讓骨盆後傾,使臀部肌肉拉長。昨天雖然上班累爆,但還是推 150 公斤八下四組,今天屁股跟大腿超酸。


網頁對照翻譯書籤工具

出處我找不到了(汗)總之是個神奇工具。它允許用戶透過點擊書籤啟動一段 JavaScript 腳本,快速複製網頁上的特定元素(如段落、列表項目、標題),並將複製的內容插入原文上面,然後,使用者可以使用瀏覽器的內建翻譯功能,會有原文不動的效果,從而實現對照翻譯的目的。

如何使用

  1. 將程式碼保存為書籤。
  2. 在需要翻譯的網頁上點擊書籤。
  3. 使用瀏覽器內建的翻譯功能對頁面進行翻譯。

程式碼重新整理(排版)

以下是重新排版後的程式碼,以提高可讀性:

javascript:(function() {
    for (var node of document.querySelectorAll('p, li, h1, h2, h3, h4')) {
        var copy = document.createElement(node.nodeName);
        copy.textContent = node.textContent;
        node.parentElement.insertBefore(copy, node.nextElementSibling);
        node.setAttribute('translate', 'no');
        node.setAttribute('class', 'notranslate');
    }
})();

這段程式碼會遍歷頁面上的段落、列表項目和標題元素,創建它們的複製版本,然後將這些複製版本插入到原始元素旁邊。同時,它會修改原始元素的屬性,以防止它們被翻譯,從而實現原文和譯文的並排顯示。

替代方案

有個「沈浸式翻譯」的 Chrome 插件也能達到類似的效果,免費用戶可以自訂 OpenAI 的 GPT 模型 API,或付費使用它提供的 DeepL 額度。它同時也提供了 Epub 及 PDF 的對照翻譯功能,比前述的書籤工具用途更大。免費用戶則可以通過它來薅 Google Translate 的羊毛。


2023-11-26 週記

科裡有一些醫師最近對 AI 不知道為什麼突然狂熱(因為醫院釋出指標?)。我是覺得我會寫一點程式,純粹是個人喜好。我完全不想要把我的技能變成科部的公共財。同時,我也強烈反對因為要推動 AI,把收住院醫師的主要標準從好相處、能學習,變成會寫程式。也有人在問我要不要考慮改做研究型醫師,不用應付那麼多臨床工作。這真的是不用想,我出來是要賺退休金的,才不要自廢武功,領少少的錢,然後疲於應付醫研部跟科內諸多大佬們的妄想。

我認為放射科要發展 AI 的方向應該是:

  • 跟上最新的應用(例如 prompt engineering)
  • 理解各個架構、模型的基本原理(例如 residual learning、transformer)
  • 了解目前各次專科的商用產品程度如何?能不能引入、落地?

有效加速主義 e/acc

OpenAI 執行長政治鬥爭風暴剛過一段落。有一個很有名的詞浮出叫「effective accelerationism」有效加速主義,指的是應該不計代價的、善用資本力量推動科技進步。這種思想的使用者認為技術的進步,相比制度變更,是引導生產形式改變的主要機制。快速推動技術進步,從而有機會解決舊科技難以處理的社會問題。減速主義者則認為這只會加速剝削。有網友評論:

只要技術人員沒有辦法意識到「管理」和「資本」的價值,他們就總會認爲自己在被「企業家」和「資本」剝削,而總想要發明一種新方法把管理者排除出生產體系。上次是讓無私的革命黨領導做管理。這次是讓 AI 做管理。


組建家庭小劇院

之前因為想在睡前可以躺平看一些輕鬆的影片,在比較幾台可以調整投影角度的投影機後,買了流明最高的 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 串連過來的遊戲。


試玩 OpenAI 的 API

隨著 GPT-3.5-turbo-1106 模型的推出,使用 GPT 直接取代繁複的 NLP 工具變得越來越容易。最主要是現在可以通過設定,使模型回傳特定的 JSON。不過,模型本身還是常常做出超過指示的動作,例如自顧自的折疊結果,或只輸出一半。

以下是我最近在進行的一個項目的呼叫程式碼。

class Client:
    def __init__(self, model):
        self.client = openai.ChatCompletion.create()
          # Assuming openai is already imported and configured
        self.model = model

    def send_request(self, messages, response_format):
        completion = self.client.completions.create(
            model=self.model,
            messages=messages,
            response_format=response_format
        )
        return completion

    def parse_response(self, completion):
        return completion.choices[0].message.content

    def analyze_text(self, prompt, additional_questions):
        messages = [
            {
                "role": "system",
                "content": "You are a helpful assistant.",
            },
            {
                "role": "user",
                "content": f"{prompt}\n{additional_questions}",
            },
        ]
        completion = self.send_request(messages, {"type": "json_object"})
        return self.parse_response(completion)

通過額外的工具,可以設定出不同形式的 Client 做實驗,例如比較同一筆資料在不同的 prompt 下會有什麼變化,以及客製化額外的 prompt。環繞著我這個簡易的 framework 建構新的研究範式是十分有趣的事情;我也得看看網路上有沒有更多已經成熟的類似工具。


2023-10-29 週記

SSSS 系列的三個主題曲全曲我最喜歡 imperfect,但是 Union 的橋段(Bridge)最有張力。

A wish, A wish come true 夜の星に願いを 君とつなげた夢のUNION

火氣大

科內某個資深醫師某日一早打電話要求我中午列席某個科內會議(我不是委員),我直接拒絕了。要求列席是不會發會議通知?尊不尊重人?再說我也不在該院區。過幾日早上又打來,叫我中午有空過去,我直接說今天沒空,明天早上十一點可以撥出半小時給你。越想展現自己的權威?那我也會越來越不客氣,大家公事公辦。再說那麼老了還不懂尊重別人的工作表。要預約一個較長的談話(一小時左右)應該先傳個訊息或郵件預約時間吧。大家也好準備討論素材。

前幾個月,另一個科內資深醫師擅自在我的時段加超音波導引的切片、然後推給我做(說他不會)、做完之後又去跟家屬邀功(「讓你們插隊我很厲害吧」)。我後來放話,從今以後我一律不幫做,自己加的台自己想辦法。

半吊子

不懂 MRI 原理,就是個半吊子的放射科醫師唉。查 PDFF(proton density fat fraction) 跟 6 point gradient echo Dixon sequence 還有傳統的 T1/PD spin echo 的差別,很是混亂。


建構筆記網頁

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

  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 一類的軟體,隨時可以從平板繼續研究。之後應該再來寫篇文章描述如何善用此類軟體。

按摩要選對師傅

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