工程趣聞 2026 年 4 月 24 日

2026-04-24 — 工程趣聞:十六進位編輯器應著色位元組組、純組語打造 Linux 桌面、1999 年瀏覽器體驗現代網路

十六進位編輯器應該為位元組著色:一個改善二進位資料視覺化的簡…

十六進位編輯器應該為位元組著色:一個改善二進位資料視覺化的簡單想法

simonomi.dev · 2026-04-24

作者在 這篇文章中提出一個既簡單又直觀的想法:十六進位編輯器不應該將所有位元組以相同的顏色(通常是單色文字)呈現,而應根據位元組的語義類型進行著色,讓工程師在審視二進位資料時能夠即時獲得視覺上的模式辨識線索。此文在 Hacker News 上獲得 472 分,引發了大量討論。

著色方案提案

作者建議根據以下位元組類型進行分組著色:

  • 空位元組(0x00):以獨特顏色(如灰色)標示,null byte 在結構化格式中通常具有特定語義(字串終止符、填充、未初始化記憶體)
  • 可列印 ASCII(0x20-0x7E):以綠色或高亮色標示,讓隱藏在二進位資料中的文字字串立即浮現
  • 控制字元(0x01-0x1F、0x7F):以警告色(如橙色)標示,換行符、跳格符等控制字元在日誌和協定資料中頻繁出現
  • 高位元組(0x80-0xFF):以另一種顏色標示,可能代表 UTF-8 多位元組序列的延續位元組或特定協定的二進位資料

工程實用性

在調試二進位協定(如 Protobuf、MessagePack、自定義格式)、分析記憶體轉儲(memory dump)或審查加密前後的資料時,人眼對顏色的模式辨識能力遠優於對十六進位數字序列的逐一辨讀。現有工具 ImHex 等已部分實作了類似功能,但作者認為這應該成為所有十六進位編輯器的預設功能,而非進階選項。Hacker News 的討論中,多位工程師分享了他們如何在既有工具(vim 的 xxd + syntax highlighting、010 Editor 的模板)中部分實現類似效果的經驗。

原始來源:simonomi.dev


用純 x86_64 組合語言打造可用的 Linux 桌面環境:最小化系統的哲學實踐

isene.org · 2026-04-23

Geir Isene 分享了他的「MyTools」計畫:完全使用 x86_64 組合語言(assembly)開發一套可以實際使用的 Linux 桌面工具組,包含文字編輯器、檔案管理器等日常工作所需的基本工具,直接透過 Linux 系統呼叫(syscall)與核心互動,不依賴任何 C 函式庫(包括 libc)。

技術基礎

在 x86_64 Linux 上,用戶空間程式透過 syscall 指令進行系統呼叫:將系統呼叫號碼放入 rax 暫存器,參數依序放入 rdirsirdxr10r8r9 暫存器,執行 syscall 後核心在 rax 回傳結果。直接使用系統呼叫意味著程式的每個動作都需要手動管理:開檔案需要 sys_open(60 號)或 sys_openat;讀寫需要 sys_read/sys_write;終端控制需要 sys_ioctl 搭配 TIOCGWINSZ 取得終端大小。

TUI 框架的組合語言實作

文字介面(TUI)應用程式需要控制終端的游標位置和顏色,這透過 ANSI 轉義序列(escape sequences)實現,例如 ESC[H 移至游標至 home 位置、ESC[2J 清除螢幕。在組合語言中,這些字串直接以 db(define byte)指令定義在資料段,並透過 sys_write 系統呼叫輸出至 stdout(file descriptor 1)。

工程哲學

Lobsters 的討論中,社群對此類計畫的態度既有欣賞(作為深入理解計算機系統的學習方式)也有保留(實用性有限、維護成本極高)。但這類工作的核心價值在於:它迫使開發者理解軟體棧的每一層抽象,以及這些抽象消除了哪些複雜性。在組合語言層面構建完整應用程式的過程中,「libc 幫你做了什麼」這個問題的答案以最具體的形式呈現出來。

原始來源:isene.org


用 1999 年的方式瀏覽現代網路:一場關於 Web 技術演進的實測紀錄

joshblais.com · 2026-04-23

Josh Blais 進行了一個頗具娛樂性的實驗:以 1999 年代的工具和技術瀏覽現代網際網路,記錄哪些網站還能以 1990 年代末的瀏覽器存取,哪些完全無法使用,以及在此過程中觀察到的 Web 技術演進軌跡。此文在 Hacker News 上獲得 78 分並引發了懷舊式的技術討論。

實驗設定

作者以 Netscape Navigator 或 Internet Explorer 5 級別的瀏覽器(或其現代模擬)存取當代網站,觀察在缺少以下現代 Web 技術的情況下,網站的可用性:JavaScript ES6+(const/let、箭頭函式、Promise、async/await);CSS Flexbox、Grid;WebSocket;Service Worker;Web Assembly。

技術差距的視覺化

實驗揭示了 1999 年 Web 技術棧(HTML 4.01、CSS 2、JavaScript 1.5、XML/XSLT)與現代 Web 技術棧的巨大鴻溝。大多數現代網站依賴 JavaScript 框架(React、Vue、Angular)進行初始渲染(client-side rendering),在 1999 年代的 JS 引擎上會直接崩潰。僅有少數以「漸進增強」(progressive enhancement)哲學建構的網站——內容以純 HTML 提供,JavaScript 僅作為增強層——在舊式瀏覽器中仍保有基本可用性。

現代 Web 的複雜性代價

從工程角度觀察,現代 Web 應用程式平均引入的 JavaScript payload 大小是 1999 年整個典型網頁大小的數千倍。這一對比在 2026 年仍具現實意義:Web 開發社群中關於「網站過度複雜化」的討論持續存在,而此實驗以最直觀的方式量化了這個趨勢的規模。

原始來源:joshblais.com


End of article
0
Would love your thoughts, please comment.x
()
x