用Rust程式語言實作的「wpautop」函數 2020 年 11 月 3 日 Magic Len Rust Wordpress有提供一個便利的函數─wpautop,它能夠利用換行字元來對HTML內容加上「<p>」或是「<br>」標籤,讓我們在後台直接用HTML語法撰寫文章的時候,不必手動加上「<p>」或是「<br>」標籤,這也讓HTML變得比較容易閱讀,不過這個函數還是有它的問題(用了一堆正規表示式、會產生大量字串、可能在錯誤的位置插入標籤)就是了。在Rust程式語言中,如果也想要用這樣的功能,要怎麼做... 繼續閱讀 html-auto-p、Rust、Wordpress、wpautop
Rust程式的編譯優化(opt-level、lto、codegen-units、inline的差異) 2020 年 10 月 29 日 Magic Len Rust、研究分享 在建置Cargo程式專案的時候,我們可以輕易地使用「cargo build」或是「cargo build --release」指令,來對開發(development)或是發佈/部署(deployment)的目的做區分。「cargo build」編譯出來的二進制檔案沒有經過最佳化,而且會啟用「#[cfg(debug_assertions)]」屬性,來使用偵錯(debug)相關的程式碼;「cargo ... 繼續閱讀 Rust、Rust 優化、Rust 最佳化、Rust 最小化
如何讓Rust的函式庫或是應用程式輸出日誌(log)? 2020 年 10 月 27 日 Magic Len Rust、研究分享 撰寫日誌(logging)是除錯(debug)和事件分析時經常會使用的方式。Rust生態圈有log這個crate,針對訊息重要性(等級)提供了不同的巨集讓函式庫或是應用程式輸出日誌(log),不過它並沒有限定日誌最終會被輸出到哪,Rust開發者在引入有用到log這個crate的函式庫後,可以自行決定日誌的輸出方式。 繼續閱讀 env_logger、log、pretty_env_logger、Rust、simplelog
如何使用Rust程式語言將字串安全地寫入HTML文件中? 2020 年 10 月 6 日 Magic Len Rust 在進行網頁開發的時候,可能會需要將使用者輸入的資料顯示在HTML網頁上,此時的網頁就會暴露在XSS(Cross-Site Scripting)攻擊的危險下。如果網頁不做任何檢查,將使用者輸入的資料嵌入至網頁中的話,輸入資料中的HTML語法就會直接影響到網頁,就會使得網頁爛掉或是藏有惡意的連結和腳本。為了讓使用者輸入的資料不會被當作是一般的HTML語法,需要將特定的保留字元進行跳脫處理,像是「<... 繼續閱讀 Cross-Site Scripting、HTML、html-escape、Rust、XSS
如何使用Rust程式語言產生隨機數值? 2020 年 10 月 1 日 Magic Len Rust、研究分享 在開發程式的時候常常會需要產生亂數,然而,電腦並不存在「真正隨機」的亂數,它只能夠透過一些機制,利用額外的參考數值(如時間等)來模擬出看起來是隨機的亂數。 繼續閱讀 random-number、Rust、亂數產生、隨機亂數、隨機整數
Rust程式語言如何處理動態歌詞(LyRiCs)? 2020 年 9 月 29 日 Magic Len Rust LyRiCs(LRC)是一種資料格式,藉由在每行歌詞上加上時間戳記(timestamp),來讓音樂播放器可以在播放音樂的同時,同步將該時間點的歌詞顯示出來。筆者以前用Java實作過MP3標籤格式ID3和APE的函式庫,主要就是為了能夠處理動態歌詞。雖然現在沒什麼在用,但還是整理了以前寫過的程式碼,將動態歌詞的部份重新用Rust程式語言獨立實作出來。 繼續閱讀 lrc、Lyrics、Rust、歌詞
Rust程式語言如何執行系統的指令或是外部可執行檔案? 2020 年 9 月 24 日 Magic Len Rust、研究分享 在設計程式的時候偶爾會需要依靠系統指令或是其它的程式來取得一些相關的訊息,或是進行一些特殊的處理,如查看系統的網卡介面,或是呼叫FFmpeg來實現影音編碼的格式轉換。雖然這些工作基本上都可以靠Rust原生程式來自行實作,或是引用其它C/C++函式庫,但既然有已存在的指令和執行檔可以用,能省下許多開發時間,何不去用呢? 繼續閱讀 execute、Rust、Rust執行外部程式、Rust執行指令
Rust程式語言如何在「trim」一個字串的同時去改變該字串? 2020 年 9 月 22 日 Magic Len Rust Rust程式語言的String物件有提供「trim」方法,可以用來去除字串頭尾的空白字元,不過這個方法會回傳字串切片(& str),而不會去更動到原來的String物件。不過在少數情況下,我們還是希望原來的String物件可以真正被「trim」。 繼續閱讀 Rust、trim-in-place
用「async / .await」撰寫 Rust 並發程式 2020 年 9 月 17 日 Magic Len Rust、研究分享 用「async / await」語法來撰寫並發與並行程式是現代程式語言流行的方式,比起傳統開啟新的執行緒來完成並發處理工作的目的,「async / await」可以在同一個執行緒下達到同樣的目的,非常適用於當並發處理的工作並不重的時候,能夠省下建立執行緒所產生的開支(overhead)。 繼續閱讀 async-std、async/await、Rust、smol、tokio
如何清除Nginx的反向代理快取和FastCGI快取? 2020 年 9 月 10 日 Magic Len 作品分享、網路相關、軟體介紹 Nginx是一個免費開源且穩定高效的Web伺服器程式,擁有反向代理以及負載平衡的功能,經常作為最前端的伺服器。當它用作反向代理伺服器或是PHP網頁伺服器時,無論是「proxy_pass」還是「fastcgi_pass」,均有提供快取的功能。然而,免費版本的Nginx並沒有內建刪除快取的機制(早期Nginx免費版本可以使用「proxy_cache_purge」、「astcgi_cache_purge... 繼續閱讀 FastCGI 快取、Lua、nginx、nginx 清除快取、nginx-cache-purge、Rust、反向代理快取