Blog

  • 五一

    趁住假期整理了房間,重新佈置了儲物空間,騰出了不少空位。解決了之前想找某本書看卻因為收太入而放棄的問題。又可以買書了。


    AI實在可怕。最近接觸Blender + three.js,我學了一段時間才叫知道它們是怎麼回事。然後我將一個demo嘅功能feed比copilot,佢已經可以由0開始生成一個用得到的project出來。

    作為半個developer,我是反對vibe-coding,支持craftsmanship的。但這種擦擦神燈就實現願望的事就是爽啊!正常人都知道這種上癮模式是危險、無法持續的,但現實是炒家太多,騙徒太多,識炒識衝浪才叫「食腦」,才可名成利就,可嘆。


    投資,要有紀律。倉位建好後,不要溝。止蝕定好後,不要退。看錯了就認錯。保本,保本,保本。留得青山在。

  • 近況

    轉眼2026年已經過去一季。

    三月份密集地去睇樓盤,分析樓市等等。看來時機依然未到,仍要耐心。。。我的分析顯示,如果沒有自住需求,投資風險其實高的。

    GTD 已經用了一段時間,非常不錯。只是project的實行我還是沒有完全發揮GTD的效果。這點需要反省反思改善。

    AI浪潮,改變了資訊科技的入門門坎,好、壊、危、機。值得深思。

    MBTI,我確實是偏J。發現自己原來非常討厭計劃被突發狀況打亂。生氣的是自己沒有預想到會出現這種情況而沒法馬上調整的這種不確定感。

    事業/工作,還是有持續學習,但效率變慢了,時間安排得不好。WFH也接近取消了,沒想到影響是大的。

    健康,拜托11點睡吧。

  • WordPress主題開發筆記:動態修改 Bootstrap 按鈕顏色

    當你在 WordPress 主題中使用 Bootstrap 並希望透過自訂器(Customizer)讓使用者即時調整語意顏色(如 $primary)時,你可能會遇到一個令人困惑的問題:Bootstrap 的按鈕樣式是以 SASS 編譯後的固定值呈現,無法在透過使用bootstrap提供的CSS variables動態修改。

    這篇文章將深入探討這個問題的根源,以及如何用 PHP 解決它,讓 Bootstrap 的 .btn-primary.btn-danger 等語意化按鈕能夠根據使用者設定即時更新。

    問題:Bootstrap 的 SASS 編譯限制

    Bootstrap 使用 SASS 編譯語意化按鈕樣式,像這段程式碼:

    _button.scss

    @each $color, $value in $theme-colors { {
      .btn-#{$color} {
        ...
        @include button-variant($value, $value);
      }
    }
    

    button-variant這個Mixin會將 $theme-colors 中的每個顏色編譯成固定的 CSS,例如.btn-primary

    compiled.css

    .btn-primary {
        --bs-btn-color: #fff;
        --bs-btn-bg: #0d6efd;
        --bs-btn-border-color: #0d6efd;
        --bs-btn-hover-color: #fff;
        --bs-btn-hover-bg: rgb(11.05, 93.5, 215.05);
        --bs-btn-hover-border-color: rgb(10.4, 88, 202.4);
        --bs-btn-focus-shadow-rgb: 49, 132, 253;
        --bs-btn-active-color: #fff;
        --bs-btn-active-bg: rgb(10.4, 88, 202.4);
        --bs-btn-active-border-color: rgb(9.75, 82.5, 189.75);
        --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
        --bs-btn-disabled-color: #fff;
        --bs-btn-disabled-bg: #0d6efd;
        --bs-btn-disabled-border-color: #0d6efd;
    }

    這些值在編譯後就「定型」了,無法透過 WordPress 的 get_theme_mod() 或 CSS 變數在前端動態修改。

    原因:SASS 無法處理 CSS 變數

    你可能會想:「那我把 $primary 改成 var(--bs-primary) 不就好了?」但 SASS會報錯:

    Code

    Error: $color2: var(--bs-primary) is not a color.
    

    因為 button-variant 使用的色碼算法需要實際的色碼來進行運算(例如 shade-color()mix()),而 var(--bs-primary) 只是字串,無法參與這些函式。

    解決方案:用 PHP 動態產生 CSS覆蓋Boostrap CSS

    我們可以在 WordPress 中使用 PHP 根據 get_theme_mod() 的值動態產生 CSS,並透過 wp_add_inline_style() 注入到 Bootstrap 的樣式表中。

    步驟如下:

    1. 在 Customizer 中註冊每個語意化顏色設定,例如 theme_color_primary
    2. functions.php 中撰寫一個函式,根據這些設定值計算 hover、active、disabled 狀態的顏色。
    3. 使用 wp_add_inline_style() 將產生的 CSS 注入到 Bootstrap 的樣式表。

    範例輸出:

    css

    .btn-primary {
      --bs-btn-bg: #ff5722;
      --bs-btn-border-color: #ff5722;
      --bs-btn-color: #fff;
      --bs-btn-hover-bg: #e64a19;
      --bs-btn-hover-border-color: #e64a19;
      --bs-btn-hover-color: #fff;
      --bs-btn-active-bg: #d84315;
      --bs-btn-active-border-color: #d84315;
      --bs-btn-active-color: #fff;
      --bs-btn-disabled-bg: #ff5722;
      --bs-btn-disabled-border-color: #ff5722;
      --bs-btn-disabled-color: #fff;
    }
    

    這些 CSS 變數會覆蓋 Bootstrap 原本的樣式,讓按鈕顏色能夠根據使用者設定即時更新。

    有相同問題的 class 包括:

    .btn-#{$color}
    .btn-outline-#{$color}
    .link-#{$color}

    注意事項:Bootstrap 未來可能變更 SASS 函式

    目前我們使用 PHP 模擬 Bootstrap 的 button-variant SASS mixin,並根據 WordPress 自訂器的設定值動態產生 CSS。這種做法雖然有效,但本質上是一種 繞道(workaround)

    值得注意的是,Bootstrap 的 SASS 結構與函式(例如 shade-color()color-contrast()mix())在未來版本中可能會有所調整。

    因此,如果 Bootstrap 更新了這些函式的邏輯或變數命名,你的 PHP 生成函式可能需要同步更新,以確保樣式輸出仍然正確。

    希望未來的改進

    理想情況下,Bootstrap 能在未來版本中提供更完整的 CSS 變數支援,讓我們不必透過 PHP 模擬 SASS 的邏輯,而是直接在前端以 CSS 變數覆蓋樣式。這將大幅簡化 WordPress 主題的自訂流程,並提升相容性與維護性。

  • 補充品

    將每日要食嘅補充品花少少時間分袋裝起,每日隨取隨食。

    肩頸肌肉很痛!

  • You have bigger problems

    生活大部份事情都是相對的。若意識到自己有更大的課題,人自然變得更寬容、豁達和平靜。日常瑣事猶如風中塵埃,微不足道。

    與其說 You have bigger problems,不如說 You have bigger purposes 。找到自己的追求和意義,便是心靈的安息處。而當這份追求能為社會帶來價值時,便是所謂的「生之意義」(ikigai)。

  • Calling

    當⼀件事令你自動起床、期待,不就是你的calling嗎?

    在混沌、概率性的外在世界,去建立確定性的內核,我認為是不錯的平衡。

  • 《人性的優點》

    最近同時處理幾個範疇的事,閱讀休閒書籍的時間有限,所以簡單記錄一下。這本書很好、實用,值得推薦。

    在實際應用方面,我認為最困難的,是察覺自己正處於憂慮之中。當情緒突然湧現,人往往習慣透過最直接的出口來發洩(快思慢想的系統一?)。這時未必會立即想到書中提到的方法來疏導情緒。但如果能意識到情緒正在發生,其實根據書中的建議,是可以有效處理的。

    可以透過定期自問「我此刻開心嗎?」來做情緒檢測。如果答案是否定的,就可以應用書中的方式去疏導情緒。重點是這個問題要定期主動去問,而不是等待事件觸發,例如每一日、每半日、每小時……別寄望自己能在情緒爆發時突然冷靜下來,趁理性多於感性的時候主動檢測。

    之所以選用「開心」來作自問,是出於對生命美好的嚮往,希望能讓自己的情緒維持在正面的狀態。

    《人性的優點》
    作者: 戴尔·卡耐基
    譯者: 胡彬
    ISBN:9787201116891

  • 《真確》

    《真確》

    扭轉直覺偏誤、情緒化決策。

    心得

    這本書的好看之處是例子有趣生動、兼有世界觀和啟發性。令人主動地將視界放大,客觀去檢視問題,看到真確、事實。

    書中提到的偏誤,對我相對有啟發性的是「怪罪型直覺偏誤」和「急迫型直覺偏誤」。雖然我無什麼世界性的例子,但都曾經因為以上的偏誤踩過坑,包括行為上、心理上、財務上。

    應用書中的知識則是一個課題。第一,不要急、堅守衡量數據。第二,尋找系統、原因,不要指責人或找英雄。中途注意其餘的偏誤。最後,嘗試使用其他視角,保持開放。

    最後致敬一下作者Hans Rosling,將一生奉獻於令世界變得更好(而做到),令人敬佩。

    書本資訊

    《真確》(Factfulness)
    作者: 漢斯·羅斯林 (Hans Rosling)
    譯者: 林力敏
    ISBN:9789861343242

  • 最大虧損

    破產風險Risk of Ruin=「本金虧損到無法回本」的機率。

    虧損與回本需要的獲利的關係如下圖:

    選擇可接受的最大虧損,需要配合策略的回報率和風險胃納。

    required-time-to-recover-given-cagr

    以上假設回報是穩定的,但現實是沒有穩定。可以進一步用模擬的方法找出回本時間的區間。或者設定足夠的安全邊際。

    simulation-of-recovery-time

    另外,虧損出現的時間也有分別。假設10年計劃裡,虧損出現在第1年比出現在第9年好,因前者有一大段時間追回。因此,可接受的最大虧損可以遞減,又或者隨時間使用更好的策略彌補。

    別忘了你還有機會成本。追回虧損的時間裡損失了其他投資機會,最少也損失了無風險回報,所以要真正「追回」的錢比本金還要多一點點。