在「Libtree: Ldd as a tree saying why a library is found or not (github.com/haampie)」這邊看到的,本來看到名字以為是與樹狀資料結構有關的 library,結果實際看了發現這邊的 libtree 指的是將執行檔裡面使用到的 dependency (library) 展成樹狀:
比起 ldd 的輸出多了更多資訊,這個在想辦法解決 library 問題時比 ldd 好用不少。
幹壞事是進步最大的原動力
在「Libtree: Ldd as a tree saying why a library is found or not (github.com/haampie)」這邊看到的,本來看到名字以為是與樹狀資料結構有關的 library,結果實際看了發現這邊的 libtree 指的是將執行檔裡面使用到的 dependency (library) 展成樹狀:
比起 ldd 的輸出多了更多資訊,這個在想辦法解決 library 問題時比 ldd 好用不少。
Brendan Gregg 推薦了一整包內建的工具 (透過系統的 apt repository 就能裝),平常先準備好,出問題的時候可以直接拿出來用:「Linux Crisis Tools」。
作者有提到表上列出來的工具算是基本盤,有特殊硬體的情況 (像是 GPU) 需要再加裝其他的套件:
This list is a minimum. Some servers have accelerators and you'll want their analysis tools installed as well: e.g., on Intel GPU servers, the intel-gpu-tools package; on NVIDIA, nvidia-smi. Debugging tools, like gdb(1), can also be pre-installed for immediate use in a crisis.
這邊是把表格有提到的都放進去,另外包括了上面提到的 GDB:
sudo apt install -y bpfcc-tools bpftrace cpuid ethtool gdb iproute2 linux-tools-common msr-tools nicstat numactl procps sysstat tcpdump tiptop trace-cmd util-linux; sudo apt clean
裝了以後可以順便拿這張表格練練手,把不熟悉的工具開 backlog 找機會練手,熟悉一下這些工具的常用用法,這樣遇到狀況的時候可以直接用...
在 Hacker News Daily 上看到「Astral (astral.sh)」這個,網站在「Astral: Next-gen Python tooling」。
裡面提到的 Ruff 專案是一套用 Rust 寫的 Python Linter,主打就是速度,從官網提供的 benchmark 就可以看出來差距:
因為是 Python ecosystem 的東西,安裝可以直接用 pip 裝預設編好的套件,而不需要透過 cargo 自己編 (當然你想要還是可以用 cagro 編)。
拿 feedgen 測了一下,速度是真的快,這樣就比較不會嫌棄了... 要注意會冒出 .ruff_cache/
目錄,.gitignore
要加一下。
然後用預設值先掃出 unused import 修掉,其他的有機會再看要怎麼改。
在 Hacker News 上看到「mTCP: TCP/IP applications for DOS PCs (brutman.com)」這個有趣的東西,在 DOS 環境下的 TCP/IP 程式組,原網站在「TCP/IP applications for your PC compatible retro-computers」這邊。
不過我覺得比較神奇的是,他的測試環境是真的包括一堆老機器跟網卡耶 XDDD
今天的 Hacker News Daily 上面看到「Moreutils: A collection of Unix tools that nobody thought to write long ago (joeyh.name)」這則,講 moreutils 這套工具。
翻了一下之前在「當程式沒問題時就會吃掉輸出的 chronic」這邊有提過 chronic 了,原文的討論裡面也提到了其他工具的用法,像是 sponge 可以在 pipe stdin 都收完後才開檔案寫入,可以避免 shell 直接先把檔案幹掉的問題:
awk '{do_stuff()}' myfile.txt | sort -u | column --table > myfile.txt
在這個例子裡面因為 myfile.txt
先被 shell 清空幹掉了,awk 就讀不到東西,這時候可以用 sponge 接,等到 pipe stdin 都收完後才寫檔案:
awk '{do_stuff()}' myfile.txt | sort -u | column --table | sponge myfile.txt
另外是 vipe,可以在先將程式輸出的結果丟進 $EDITOR
裡面,然後再往後丟,像是:
git branch | vipe | xargs git branch -D
還有其他的工具可以用,我自己是把 moreutils 當標配在裝了...
前幾天在「Show HN: Jless, a command-line JSON viewer (pauljuliusmartinez.github.io)」這邊看到用 Rust 寫的 jless 這個工具,官網有個動圖可以參考:
這樣方便不少,就不需要自己在對半天...
另外也剛好拿來練手,把 Rust 寫的套件包成 Ubuntu PPA:「PPA for jless」。
主要是 cargo vendor
這個指令可以把相依套件都抓下來放到 vendor/
下面,然後設定 .cargo/config.toml
後就可以在本地端處理了,這對於 build farm 限制 internet 連線的情況會好用很多...
在 Simon Willison 的 blog 上看到的工具:「jc」,專案的網站:「JSON CLI output utility」。
可以把許多種輸出結果轉成 JSON 格式:
CLI tool and python library that converts the output of popular command-line tools and file-types to JSON or Dictionaries. This allows piping of output to tools like jq and simplifying automation scripts.
所以就可以這樣用:
dig example.com | jc --dig
然後再丟給 jq:
dig example.com | jc --dig | jq -r '.[].answer[].data'
支援的格式不少,在「Parsers」這段可以看到。
在 Ubuntu 22.04 後可以直接透過系統的 apt 安裝:「Ubuntu – Details of package jc in jammy」,在那之前也可以透過 pip 裝起來用...
等 Ubuntu 22.04 出了以後應該會變成標配安裝...
youtube-dl 的這件事情的後續影響意外的大 (引發了 Streisand effect),除了這算是 RIAA 的最新力作以外,還發生了好幾個首次出現的過程 (而且有些事情還在進行),值得花一些時間挑出幾個比較有趣的地方記錄。
在英文版維基百科的「youtube-dl」與中文版維基百科的「youtube-dl」上面也陸陸續續把發生的經過都記錄起來了,有興趣的人也可以去看看。
RIAA 的動作不算太意外,比較特別的是這次的 takedown notice 不是常見的 DMCA 512 侵權宣告,而是宣稱 youtube-dl 故意繞過 YouTube 的「保護機制」的工具:「The RIAA’s fraudulent attack on youtube-dl is not a DMCA §512 infringement/safe-harbour, and the reality is weird」,除了本身的文件以外,大家發現在 test case 裡面試著下載 YouTube 上的版權影片也可能是個明顯的問題。
另外是 GitHub 現在的 CEO,Nat Friedman,親自跑到 youtube-dl 的 IRC 上面「討論」後續可能的作法,這點也是讓大家愣住的地方:「RIAA’s YouTube-DL Takedown Ticks Off Developers and GitHub’s CEO」。
不過最近 GitHub 又警告了使用者不要重新上傳 youtube-dl 的程式碼,這有可能會被 ban XDDD:「GitHub Warns Users Reposting YouTube-DL They Could Be Banned」,對應的修改在「add statement about reposting and tos violating content」這邊。
這齣戲還在演...
最近常常需要提供資料給其他部門 (非技術類的部門),有時候需要提供一些表格類的資料,傳統大多數人比較熟的是產生 CSV 格式的資料讓使用者可以用 Excel 打開,但這個格式其實有很多問題,最常見的就是 encoding 與資料有逗號 comma 的問題。
如果是在 Python 下,其中一個解法是用 openpyxl 直接產生 .xlsx
,但用起來還是沒那麼有下面提到的方法順手。
如果是 shell script 時就比較麻煩了,像我這次手上有一堆影片檔,要用 FFmpeg 確認每個影片的 resolution 與 framerate 再提供給同事,這時候如果還是想產生 .xlsx
就累了...
下面要提到的解法好像記得是在 K 社的時候同事教的,用 TSV 檔格式 (當然檔名要取 .tsv
),然後 encoding 用 UTF-16 (LE) 就可以解決上面提到的兩個問題,產生出來的檔案可以讓 Excel 直接打開。
在 StackOverflow 上的「Is it possible to force Excel recognize UTF-8 CSV files automatically?」這邊翻一翻,會發現裡面提到比較好的解法其實都是產生 TSV。
這邊另外推薦,就算是寫程式,也還是可以先產生出 UTF-8 的版本 (通常副檔名我都會先取 .txt
),然後用 iconv 或是 piconv 轉成 UTF-16 (LE):
iconv -f utf8 -t utf16le a.txt > a.tsv
包到 Makefile 裡面用起來其實還蠻順手的...
esbuild 是個 JavaScript bundler & minifier,在 GitHub 上的副標提到了重點在於速度:
An extremely fast JavaScript bundler and minifier
從壓縮時間可以看出來優勢:
另外從最終的檔案大小也可以看出來,與最小的 rollup + terser 組合沒有差太多:
實際拿個 jQuery 跑看看,可以看出來壓縮的效果還行:
-rw-r--r-- 1 gslin staff 89228 Feb 19 06:03 jquery-3.4.1-esbuild.min.js -rw-r--r-- 1 gslin staff 280364 May 2 2019 jquery-3.4.1.js -rw-r--r-- 1 gslin staff 88145 May 2 2019 jquery-3.4.1.min.js
速度主要是透過 Golang 並且平行化運算達到的:
不過作者有提到這個專案畢竟比較新,還沒有被時間磨練過,可能會有些 bug:
This is a hobby project that I wrote over the 2019-2020 winter break. I believe that it's relatively complete and functional. However, it's brand new code and probably has a lot of bugs. It also hasn't yet been used in production by anyone. Use at your own risk.
可以先放一陣子看看,讓一些先賢先烈把比較大的 bug 踩一踩修一修...