Rust 的 crate/super/self 關係

假設 rust_hello_world 的目錄架構長這樣:(範例源自於我手邊的某個 production 專案) rust_hello_world Cargo.toml src cli opt.rs lib.rs cli.rs logger.rs 「crate」概括來說就是一個專案,用 Cargo.toml 區分。每個 mod 都是一個層級,super 就是上個層級,self 就是本層級。上面的圖已經把 crate / super / self 的對應關係寫得很清楚了,以下寫範例: cli::opt::Opt 想要讀取 LoggingLevel,路徑可以這樣走: super::super::logger::LoggerLevel crate::logger::LoggerLevel cli::opt::Opt 想要讀取 PROG_NAME,路徑可以這樣走: super::PROG_NAME crate::cli::PROG_NAME 事實上 Rust 的模組關係也沒這麼複雜。把上面的例子變成目錄: [crate] / [mod] cli/ [mod] opt/ [struct] Opt.txt [const &str] PROG_NAME.txt [[pub] mod] logger/ [[pub] enum] LoggingLevel.txt super 等價於 ..,self 等價於 .,而 crate 則類似 /。

October 13, 2021 · pan93412

為何退租 VPS。

是時候退租自己的 Contabo VPS 了。這台主機陪了我 7 個月,陪伴我寫了非常多篇文章,要跟它分離,著實不捨。 然而,我思考了很久,除了放部落格和一些很沒必要的服務之外,我真想不到這筆支出的必要性。很多東西都可以用免費的服務代替,真的沒有必要為了這幾個服務和所謂的情感,每三個月花 500 多續租下去。 這讓我想到「極簡主義」——斷捨離造就乾淨,依依不捨只會佔據空間。我的主機不也一樣——為什麼要因為情感而租沒必要的東西呢?依依不捨也難道不是徒增支出的浪費和主機商資源的浪費? 支出這種東西,理性大於感性會比較好。退租吧。

May 4, 2021 · pan93412

未成年在 Upwork 活該拿不回錢。

TL;DR 我因未通過身份驗證,無法領回自己已經在 Upwork 賺到的錢。理由是未滿 18 歲,但是 Upwork 事先沒有任何明確的標示,即使我沒看 ToS 錯在先,但這樣使我覺得很不公平。 正文 我大概 11 月左右想為自己購置一台效能更高的電腦,而看中了 MacBook。想著「自己的東西自己賺」,我決定找一個 Freelancer 平台賺取筆電的錢。 在看過國內和國外的 Freelancer 自由業平台之後,我決定了聲稱 Microsoft 都在使用的 Upwork。註冊時 Upwork 完全沒有年齡確認,我當初以為 Upwork 開放給未成年使用。註冊要求確認 ToS 的部分,我沒認真看卻勾選「我同意」了,我沒想過幾天後我會因此想痛罵我自己。 自介填完後,我便開始尋找工作。其中一個 $50 USD 的案子我接成了,並且對方也著實把案子交給我了。案子做了一陣子後,跳出了一個小提示: 在 2020 年 12 月 9 日前驗證您的身份後,就能繼續在 Upwork 找尋工作機會。(2021-1-10) 按下「Get started」認證後,我卻卡關了。 生日 > 您必須至少有 18 歲。 (2021-1-10) ...

January 11, 2021 · pan93412

評論:「行」,還是「列」?

很高興我的數學老師有正確解釋「列」跟「行」。他的解釋很好——大部分人常會說「一列車廂」,而列車在你眼前都是橫向移動,所以「列」是橫的。畢竟你不會站在行駛中的列車前,看到的必定都是左到右移動,而且台灣沒人講「一行火車」。 不過在觀察同儕間的回答時,我發現到一堆人認為「列」是行,「行」是列。不知道是搞不清楚,還是受到中國那邊的用詞影響呢? 所以,我在翻某些針對普羅大眾的軟體時,我都會盡可能不要提到這兩個字,保持「row」和「column」,因為對於某些不清楚這些用詞的人,硬塞正確的用法會造成誤解。 當然,如果是針對部分現代被中國文化影響較重的青少年,就例如我段落開頭說到的那個案例。那些人可能也不知道 row 和 column 是什麼,所以我就比較傾向保持中國那邊的講法,也就是 row = 行,column = 列。因為這要解釋起來太麻煩了,且多數人相信中國的用法才是正確的。 但是這樣治標不治本,台灣應該加強台灣本土用詞的教育與指正。而非放行中國用詞,讓新一代年輕人帶著從抖音、微信學來的用詞到處跑。

January 9, 2021 · pan93412

109 高中資訊學科能力複賽的參加心得

又墊底了。 但不一樣的是,這次比賽我收穫上不少。 早先的選手培訓課程 這是我覺得整個競賽當中,我最印象深刻而且最有收穫的課程。 在參加這門課程之前,其實我很厭惡演算法。因為數學跟邏輯不太好,所以我當時會覺得演算法很恐怖,看不懂,不敢學。但在上完這幾門課程後,我才發現到,很多演算法其實自己平時就在用,只是從未察覺。 就例如動態規劃 (Dynamic Programming) 好了,概念這就像是我平常在搞得快取 (Cache),把先前擷取 / 計算過的結果儲存下來,下次要用的時候,就直接把之前擷取 / 計算的結果拿出來。 hashmap cache_db; get_something(id) { declare data; if id not in cache_db data = _get_something(id) cache_db[id] = data else data = cache_db[id] return data } 還有圖論,這對我來講是個很新穎的演算法概念,而在聽邏輯之後覺得比想像中還要好懂。「廣度優先」和「深入優先」這兩個抽象的名詞,用老師的 GIF 講解之後就變得很好懂。但就是還不知道能用在哪些地方 😅 最後是逐個擊破(分而治,D&C)和貪婪演算法 (Greedy Method),雖然一開始沒聽懂,但後來自己回家找了 Wikipedia 之後就看懂了。也是個自己寫程式偶爾會想到,但沒發覺是個演算法的東西。 培訓課程的筆記 比賽的過程與收穫 ...

November 2, 2020 · pan93412

還是先別想 macOS 相關的事情好了

自從週三第一次碰到 MacBook Air 之後,就對 macOS 非常癡迷。但是,我的電腦既裝不下黑蘋果,也不太可能在剛升級 Windows 筆電不久後要求父母贊助我買 MacBook Air 的經費。 因此,這段時間我挺頹廢,把得來不易的空閒時間全拿去看 Apple 產品望梅止渴,和滑 B 站麻痺自己。這也是最近為何我沒繼續更新 blog 的原因之一,一方面是作業有點多,另一方面就是因為這件事。 但我覺得該時候覺醒了,不要執著於短時間內辦不到的事情。macOS 固然好用,但是現在沒有,Windows 也不妨是好選擇呀!MacBook Air 暫時不能添購,但是原來的筆電也不是還能用嗎?知足惜福是非常重要的,真的想買,也可以等到大學有積蓄之後再買呀! 所以,我決定別再讓自己想這種事情。把時間花在目前重要的事情,而不是花時間在思考這種沒有結果的問題,徒增自己煩惱。

October 23, 2020 · pan93412

VBA 筆記:選取事件

有天我突然想寫一個 Excel 按鈕,但是又不想要做一個 Form,而想到最好的辦法,就是按 Excel 中的格子。那該怎麼做,才可以做出這種偽按鈕呢? 原理思考 Excel 中,按一下儲存格代表? 就是選取「單一」儲存格。就跟你拖曳選取一堆儲存格、選取整整一行或一列所代表的含意是相同的。 那怎麼知道使用者選取了什麼? 用 VBA 的事件 (Event)。只要使用者做了什麼動作(觸發),Excel 都會通知你發生新事件,告訴你使用者做了什麼。 首先,Excel 遇到新事件時,會先看看你有沒有在指定的地方放下動作(Sub,子程式),如果沒放就等同忽略,而有放就會觸發(Trigger)這個動作。所以我們只要知道「選取儲存格後該在哪裡接收事件」,就完成了。 正文 建立接收事件的子程式 VBA 中有一個跟儲存格變更有關的事件,叫做 Worksheet_SelectionChange,長得像這樣: Private Sub Worksheet_SelectionChange(ByVal Target As Range) 別急著複製。VBA 其實有提供一個非常簡單的事件選取工具。首先開啟 VBA 編輯器,找到你想要監聽的工作表,然後按一下上方的 [(一般)],之後選擇 [Worksheet]。 選擇 Worksheet 然後選擇 [SelectionChange],搞定! 選擇 SelectionChange 了解子程式的結構 首先,我們來看看產生的程式碼。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub 你會發現到裡面出現了非常多奇怪的東西。什麼是 Private 和 ByVal?Target 是什麼?As Range 又是什麼東西? 首先,每個工作表都有自己獨立的事件,也就是你在 A 工作表選取東西,不干 B 工作表的事。如果用 Public,就代表 A 工作表的事件也會影響其他工作表。這不應該發生。而 Private 就可以限定這個事件是 A 工作表 only 的。 ...

October 18, 2020 · pan93412

淺談翻譯弊病 (1)

「Install this software to your computer.」 這句話你會怎麼翻?一些保守翻譯者會翻成「安裝此軟體至您的電腦。」,但我覺得這樣翻不好,為什麼? 翻譯是給人看的 拘泥於逐字翻譯,會使翻譯不近人情。就以我上面提的翻譯來說,你平常說話並不會說成這樣,即便是書寫,也不會這樣寫。 這就算是典型的翻譯腔 - 你沒翻錯,但很怪。一個優秀的翻譯,不會讓人覺得突兀,就像是母語使用者說的。 就我自己的翻譯習慣,我會先念一遍翻譯,並尋找奇怪的地方。就以開頭那句,我會翻成「將軟體安裝進您的電腦」,更好讀但又不會太口語化。 如果有興趣可以看看這篇翻譯腔相關的文章。 翻譯一點都不簡單 也因此,要翻出一個好的翻譯其實不是個簡單的事情。如果翻譯只會逐字翻,那我大可可以直接用 Google 翻譯或 DeepL 之類的服務。翻譯更需要的是理解後,在不破壞原意的情況下的重新表達。這需要的不僅僅是翻譯員的語文能力,以及翻譯的經驗。

October 16, 2020 · pan93412