Rust for everything

src: https://redd.it/wllpa4 (https://t.me/programmer_humor/38462) low-level programming Rust game development Rust high performance code Rust scientific programming Rust machine learning Rust front-end web development Rust back-end web development Rust You only need ONE languages for everything: Rust. You don’t need more.

August 12, 2022 · pan93412

文科生也能懂的 Rust async 机制

背景 https://twitter.com/repsiace/status/1554103778994900992/ 修改一下:work stealing, thread-per-core, waker, mpsc, task queue 只有他们懂… 正常人不可能看懂 – @twicemoemoe, 22-08-02 作为一个文科生,其实觉得 async 真的没有想象中的这么困难 ⋯⋯ 😂 或许搭配一些图片会好懂很多吧。 TL;DR 不废话版本 Sync(同步):一件事情做完之后,再做下一件事情。 blocking(堵塞):指“等一件事情”的行为。 Async(异步):一件事情还没完成,可以做其他不冲突的事情。 concurrency(并发):程序 架构 中,各个任务可以 独立运行 的特性。 future:Rust 中的一个异步任务的表示。 polling:不停地询问任务,确认事情是否已经完成。 event-driven:事情完成后,任务自己发通知表明完成。 parallelism(并行):同时 运行 数个程序的行为。 thread(线程、线程):系统进程(任务集)的基本单元。thread 通常是交由 CPU 内核运行。 spawn(生成):指产生 thread 的行为。 thread pool(线程池):将 thread 高效分配给每个任务的地方。 Async runtime: 以 tokio 为例 join (macro):并发运行 async 函数,并在全部完成后回传。 select (macro):哪个 async 函数快,回传那个 async 函数的结果。 main (attribute macro):在 main() 初始化 runtime。 block_on:在 sync 上运行 async 函数。 spawn:并行运行 async 函数。 spawn_blocking:在异步函数里面,为一个高耗时且同步 (blocking) 的函数另辟新线程 (thread)。 同步 (Synchronous) 跟异步 (Asynchoronous) “同步”就是整个程序等一件事情完成(blocking,堵塞)。“异步”则是一件事情还没完成,可以做其他不冲突的事情。 ...

August 7, 2022 · pan93412

文組也能懂的 Rust async 機制

背景 https://twitter.com/repsiace/status/1554103778994900992/ 修改一下:work stealing, thread-per-core, waker, mpsc, task queue 只有他们懂… 正常人不可能看懂 – @twicemoemoe, 22-08-02 作為一個文組,其實覺得 async 真的沒有想像中的這麼困難 ⋯⋯ 😂 或許搭配一些圖片會好懂很多吧。 TL;DR 不廢話版本 Sync(同步):一件事情做完之後,再做下一件事情。 blocking(堵塞):指「等一件事情」的行為。 Async(非同步):一件事情還沒完成,可以做其他不衝突的事情。 concurrency(並行、併發):程式 架構 中,各個任務可以 獨立執行 的特性。 future:Rust 中的一個非同步任務的表示。 polling:不停地詢問任務,確認事情是否已經完成。 event-driven:事情完成後,任務自己發通知表明完成。 parallelism(平行):同時 執行 數個程式的行為。 thread(執行緒、線程):系統處理程式(任務集)的基本單元。thread 通常是交由 CPU 核心執行。 spawn(生成):指產生 thread 的行為。 thread pool(執行緒池):將 thread 高效分配給每個任務的地方。 Async runtime: 以 tokio 為例 join (macro):並行執行 async 函數,並在全部完成後回傳。 select (macro):哪個 async 函數快,回傳那個 async 函數的結果。 main (attribute macro):在 main() 初始化 runtime。 block_on:在 sync 上執行 async 函數。 spawn:平行執行 async 函數。 spawn_blocking:在非同步函數裡面,為一個高耗時且同步 (blocking) 的函數另闢新執行緒 (thread)。 同步 (Synchronous) 跟非同步 (Asynchoronous) 「同步」就是整個程式等一件事情完成(blocking,堵塞)。「非同步」則是一件事情還沒完成,可以做其他不衝突的事情。 ...

August 7, 2022 · pan93412

該選名聲未知的科大,還是私立普大?

原問題在「學霸模擬機」。放在 Blog 純粹是為了更大的排版自由。 TL;DR - 核心問題 究竟該走「已經特選上」,但「未知名聲」的科技大學;還是放棄科大,繼續準備個申,走傳統的私立大學? 簡短自我介紹 我目前是普高生,但對程式實作有濃厚的興趣。目前是幾個知名專案的維護者或共同創辦者,能力也在幾間大學的特殊選才中獲得肯定(書審都過)。 因為數學和自然上的短板,我是社會組,且想要走偏資的資管(數學不重,同時可以滿足我程式探索的興趣)。經過深入比較,我投了包含 高雄科技大學 的 智慧商務系 的幾間科技大學,而我最終也上了。 這間科大的優點在哪裡? 根據某學校資料,智慧商務系的前身,是偏資訊的 資訊管理系。我有看過課程大綱,且我對這個科系的課程 頗有興趣。而且身為高雄人,若我讀這間科技大學的話,不僅 學費比較省(國立學費通常比私立來得便宜),而且也可以 省下通勤和在外租房的費用。 那這間科大的缺點是什麼? 其實不全然是這間科大的問題。 這間科大特選通過第二階段的有 8 個人(3 正取 / 5 備取)。然而這 8 個人當中,有 5 個人(62.5%)選擇放棄資格。最近我聽聞剩下 3 個人當中,有一個也想要放棄。雖然我確定最後一個人是因為人生規劃而萌生放棄想法,但這也難免會讓我懷疑:「這科系是不是沒人想讀?」 其實我有認識一位就讀本科系的學長,據他所說:「這個科系比較自由,更適合你發展自己想要的東西」。 我不擅長讀言下之意,雖然我喜歡給予比較多自學空間的學校,但他的意思也有沒有可能是 科系課程有點水? 學測成績,及落點可上的大學 我的學測成績如下:(# = 未考) 國 英 數 A 數 B 社 自 12 12 3 8 14 # 此外英聽 B、APCS 觀念 3 實作 2。使用 https://www.com.tw 進行落點分析,國立和私立的大致情況如下: 國立:[地名大學] 如屏東大學、臺北大學 私立:[傳統大學] 如淡江大學、輔仁大學 別人的想法是什麼? 我問過其中一位老師,他覺得出外縣市(即便是私立大學)比較能拓展視野,也能獲得比較多的資源。 其他大部分朋友的想法都是「你喜歡哪一個,就去哪一間學校。」我挺滿意現況,但畢竟 我只看過課程大綱,以及聽學長姐的說法。我擔心我會不會因為不夠瞭解這間科系(資訊不對等),而給自己留下遺憾。 ...

March 7, 2022 · pan93412

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) 如字面意思所示,我不滿 18 歲所以過不了。但是案子都接了,甚至都快寫完了,我便沒在 Upwork 按下「Withdraw」收回案子了。做完之後,對方也撥給我錢了,我才發現到沒驗證會拿不回錢(withdraw earning)。但是我當時認為是自己是看錯了,就等 Upwork 在我設定的 12 月底把錢匯進去我的 PayPal 帳戶。 ...

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 之後就看懂了。也是個自己寫程式偶爾會想到,但沒發覺是個演算法的東西。 培訓課程的筆記 比賽的過程與收穫 雖然跟上次一樣,看不懂題目,或是看懂卻不會做,但其實我還是有一些額外的收穫。 先說為何我「看懂卻不會做」,就例如「給三個點,求圍起來的三角形面積」。我知道三個點圍起是直角三角形的作法,但我不知道不規則三角形的解法。 後來聽了講解之後,才知道要用的是海龍公式。真是遺憾,競賽時不能用網路,所以我沒辦法上網查「三個點求三角形面積」的公式,而且我也忘了海龍公式。只能說是數學基礎不夠好。 還有下面這種「數字包數字」的題目,這題我至今還不會做,希望未來能看到能看懂的解法: 7 4444444 6 4333334 5 4322234 4 4321234 3 4322234 2 4333334 1 4444444 0 1234567 這一題中,N=4,而我們會給四個數字,分別為 x1 y1 和 x2 y2。求 (x1, y1) 和 (x2, y2) 的值 ...

November 2, 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 的。 而 ByVal 則需要一點資料結構的知識。VBA 傳遞參數有兩種形式,一個是 ByVal,建立物件的副本,另一個則是 ByRef,傳遞指向原物件的參考。有興趣可以看看〈VBA 中 ByVal 和 ByRef 的基础用法和区别〉。 ...

October 18, 2020 · pan93412