作者: Hui-Hong YOU

  • 樸實注音鍵盤 3.3.1 版釋出

    上次寫釋出記事至今,已經隔了好多個版次。細數一下從 1.9.42 版之後有什麼變動:

    (閱讀全文…)

    🔭聯邦宇宙對此表示:

  • TensorFlow 使用 CPU 加速指令集 (e.g. AVX-512) 的自訂編譯

    This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
    To enable the following instructions: SSE3 SSE4.1 SSE4.2 AVX AVX2 AVX512F AVX512_VNNI AVX512_BF16 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.

    使用 pip 直接從 Python Package Index 安裝 TensorFlow,之後 import 時,會冒出上面這則提示。

    我目前使用的 CPU 是 AMD Ryzen 5 8500G,雖然內建的 GPU 不在 TensorFlow 支援之列(更嚴謹地說,是不在 AMD ROCm 框架支援之列),但是既然 CPU 有 AVX-512 指令集可用,那聊勝於無、不用白不用。

    但是為了要啟用 AVX-512,就得自己編譯 TensorFlow,並指定需要的編譯旗標。

    網上不少過時、無效的指引,這篇也不知道何時會過時、無效,純粹做個筆記。

    1. 用 virtualenv 安裝目前 TensorFlow 支援的 Python 3.12 版本(發文當下 Python 最新正式版是 3.13,不過 TensorFlow 還不支援)。裝好後,在 terminal 下啟用 (activate) 這個 virtualenv。
    2. 裝 LLVM & Clang 17(是的,發文當下 TensorFlow 也只支援 Clang 17 版)
    3. 裝 patchelf
    4. Bazelisk 這個 TensorFlow 使用的建置系統 Bazel 的版本管理器兼指令 wrapper(有點拗口?)
    5. 下載 TensorFlow 原始碼
    6. 找一處容量比 OS 預設的 /tmp(暫存檔專用目錄)更充裕的地方,建個目錄,設定 export TMPDIR=$PWD,不然最後在打包 wheel package 階段,會因為 /tmp 容量不足而失敗
    7. 進到 TensorFlow 目錄下,執行 ./configure 回答幾個配置問題,如果前面幾點都有妥當安裝配置好,應該是一路 Enter 使用偵測到的預設值即可
    8. 執行 bazelisk build //tensorflow/tools/pip_package:wheel --repo_env=WHEEL_NAME=tensorflow_cpu --copt="-march=native" 讓它建置出「偵測到可用、但預設未啟用」(如原始訊息所示)的那些 CPU 加速指令集的 TensorFlow,這步驟需要一點時間。
    9. 順道一提,如果好奇 -march=native 背後做了哪些工,可以跑 bash -c 'echo | clang-17 -E - -march=native -###'(如果缺乏這樣的好奇心,我覺得也…沒事)
    10. 先解除安裝既有的 TensorFlow,改安裝剛剛建置好、產出的 wheel package:pip install bazel-bin/tensorflow/tools/pip_package/wheel_house/tensorflow_cpu-2.20.0-cp312-cp312-linux_x86_64.whl

    之後 import tensorflow as tf 時,理應就不會看到最上面那段訊息了。

  • 樸實注音鍵盤新改動:將新酷音函式庫打包為 Android App Module (AAR)

    1.9.50 版開始,樸實注音鍵盤新酷音函式庫 (libchewing) 原本以 Git submodule 嵌合進專案目錄結構的作法,改成分離為獨立的 Android App Module (AAR) 專案:libchewingAndroidAppModule,再引入此專案建置出的 .aar 模組檔。

    初始動機是新酷音函式庫自 v0.8.0 開始,預設採用 Rust 版的程式碼來建置,樸實注音鍵盤這邊不想跟不上這個變革,這不是為做而做,初衷仍是為了 Rust 主打的 memory safety 特性,以及新語言較豐富的表現力。

    目前新酷音函式庫仍保持著 C & Rust 雙軌並行相容,所以 libchewingAndroidAppModule 暫時仍是拿 C 語言實作版本來建置,然後嘗試轉換至 Rust 語言實作版本。

    我預想這不是一件太容易的事。一來樸實注音鍵盤對於舊設備有「在能力範圍內盡力支援」的方針,所以至今仍至少支援 Android 6..0 (API Level 23);也因此樸實注音鍵盤為了已有些年代的設備,會盡力支援 Android(仍)支援的 4 種硬體平台架構:armeabi-v7a, arm64-v8a, x86, x86_64,而對應的 Rust 當前硬體平台架構支援程度 (tiers) 是略有紛歧的。

    就努力看看,行不通的話,變通方法還是很多啦(大概)。

  • 日本終於不再堅持使用 3.5 吋軟碟片

    從 iThome〈日本政府終於不再強制使用3.5磁碟片〉看到的消息。

    我國小的時候,以為 3.5″ 軟碟是「硬碟」,因為家裡只有 5.25″ 軟碟,相較之下,3.5″ 軟碟至少在外殼這部份「硬」多了,不過還好有長輩(不知是我爸,還是電腦公司的人)當場教育我,我才沒有繼續抱著錯誤認知鬧笑話。

    升上國中之後,我很喜歡去逛宜蘭市內各間電腦公司,偶然瞥見店面有販售用壓克力盒包裝的單片 3.5″ 軟碟,沒忍住,買了一片,收在書包裡,如珍寶般帶著上下學。那時我最常看到的 3.5″ 軟碟,是超級任天堂玩家拿來拷貝遊戲的媒體。

    印象沒錯的話,之後直到大學畢業時,我都還用著 3.5″ 軟碟,但是那時候,像是 Zip Drive、CD-R 以及抽取式硬碟,已經有逐漸取代 3.5″ 軟碟的趨勢。

    在我當兵時,離我從大學畢業也才沒幾個月,USB 隨身碟就已經成為各業務士兵最主流的儲存媒體了。

    日本也實在撐得夠久的了。

  • 修改了一些 CASIO Module 549 重建錶殼的細節

    使用 3D 列印重建的 CASIO W-71 電子錶(Module 549 錶芯)錶殼

    先前的設計雖然(自認)俐落,但是沒有通過防水測試,連生活防水(防潑)都沒辦法,配戴著洗個手就讓錶芯短路罷工。

    檢查了一下原因,用 TPU 材質製造的底殼膠圈尺寸不對,造成滲水;而同樣 TPU 材質的側邊按鈕,也由於精度限制,無法達到與錶殼既「密合」又能「順利按壓」的兩全;壓克力鏡面也因為黏膠沒有塗好,也有空隙的問題。

    基於以上的缺失,再次改了這個重建錶殼的設計。除了調整底殼膠圈的幾何,使其更密合;側邊按鈕也老老實實的回歸類似原始設計,減少暴露表面;鑲嵌壓克力鏡面的接觸面,也修改成更能確實上膠。

    不過,重組完成後,我暫時還不敢再去苛刻測試成品的防水能耐 😹。

  • 技能樹新增:3D CAD 建模與 FDM 列印

    因為公司的軟體業務一直沒有起色,所以打開了預備的錦囊「購入 3D 列印機,經營客製化建模與打件」作為新闢的業務項目。

    Creality Ender-3 V3 SE 3D 列印機與 Loctite 222 螺絲固定膠

    即使有了 3D 列印機,也不會就像變魔術般自動生出我要的物件,我還得學會 CAD,而我的工業設計技能,僅停在高一工藝課時學過的繪製三視圖而已。

    看似有勇無謀?但是時代已經不一樣了,網路上只要用心去找,有很多完整的 CAD 教學課程影片、電子書,可以自修。於是從去年 11 月中旬開始,我就以習慣的「做中學」方式,自己找題目,畫出模型,印出來,累積了一些活用 FreeCAD 的基礎經驗與心得。

    翻新三隻約三十年前的 CASIO 電子錶,其中一隻因錶耳損壞,故以 3D 建模、列印重建整個錶殼

    上圖是我最近完成最複雜的題目:重建一隻電子錶錶殼,可說用到了入門至今習得的每項 3D CAD & FDM 技術。

    能親手讓少年時配戴的手錶重新服役,這種成就感讓我非常得意。

    我很愛收看 Discovery 與 DMAX 頻道的幾個翻新老車、舊物的節目,像是「翻新中古車」、「舊貨獵人」、「柴油車卡好」、「女子修車手」、「改車特攻隊」、「頂級改裝車廠」等,尤其之前疫情方熾、我與確診的家人居家隔離、自己在客廳搞定起居、睡了十天的折疊床,這些節目除了讓我不致太無聊,也更加深了我想要「做實物」、「精緻維修」的念頭。

    於是後來我趁著公司資本額燒完前,決定買下一台 3D 列印機。在這之前,我原本打算採用發包給代印業者的方式,不要自己養機器,因為我實在找不到家裡還有什麼空間,可以擺放這麼一台龐然大物,且不會被好奇的貓咪搗蛋搞破壞的。還好最後我弟同意借我房間的一角,真的很感謝我弟。

    然後我也很感謝自己,做了自己持有機器的決定,因為 3D 列印也存在許多眉眉角角,如果沒有親身操作過,不會知道自以為應該沒問題的 3D 模型檔案,列印時是困難重重的。

    像是不同列印材料的特性、三軸移動的限制、擠出機的速度控制、列印平台的校正、噴嘴的口徑、堆疊成型的方式直接影響模型設計思維等。這些林林總總的因素,很多甚至還是 case by case 的,像是同廠牌的 PLA 印材,也會有不同的最佳加熱溫度、列印速度。

    FDM 型 3D 列印機無論消費級還是專業級,噴頭口徑就是落在 0.x mm 的範圍,這也影響了物件的精度,不過如果切片軟體 (slicer) 掌握得宜,還是可以產出可用的成品,可說「3D CAD 軟體」、「切片軟體」、「列印機材」是吃這行飯必須熟稔的三本柱。