學校該學些沒有用的東西

學習最重要的是契機,這個契機可以是任何趨使你學習新事物的機會,可能是學校課程,可能是工作需求。當今天有個契機去學習,就把握機會把它學到好,學到回本。雖然這個契機不一定是你喜歡的,但也是個改變自己的機會,既來之,則好好利用之。

March 27, 2022 · 1 分鐘 · wancat

雫教你用婚姻理解比特幣閃電網路

吉田春(Yoshita Haru)和水谷雫(Mizutani Shizuku)在經歷多年的風風雨雨後,兩人終成眷屬,準備要結婚了。然而雫想起她那廢物老爸敗家的歷史,又考量春過去突然消失的不良紀錄,希望把兩人的財產算清楚,誰也不吃虧。想要阻止這一切的春就主張:「每次我們之間的轉帳都要經過銀行,手續費太貴了」。誰也想不到精明的雫竟然想到一個方法,可以讓兩人在不需信任彼此(又不用現金)的情況下,利用離婚協議書,完成無須手續費的離線轉帳。 雫:首先,我們在結婚的時候,要在結婚協議書上載明兩人「帶入多少資產進入婚姻」。 結婚同意書: 兩人於婚姻中財產: 吉田春:500000 水谷雫:300000 簽名:吉田春、水谷雫 2022.02.10 雫:接著將這張結婚證書提交到了戶政事務所,我們就會正式結婚了。 春:那要怎麼轉帳呢? 雫:當我們要轉帳時,就要簽一張離婚協議書,寫上新的財產分配。例如當我要轉給你 10000 元時,我們就簽一張離婚協議書: 離婚協議書: 兩人協議分配財產如下: 吉田春:510000 水谷雫:290000 簽名:吉田春、水谷雫 (尚無時間戳) 雫:當你要再給我 2000 時,我們再用上張協議書的金額,算出新的餘額。 離婚協議書: 兩人協議分配財產如下: 吉田春:508000 水谷雫:292000 簽名:吉田春、水谷雫 (尚無時間戳) 雫:透過這種方式,我們就可以用 0 手續費完成無限多筆交易。因為兩人都已經簽了名,兩人又各自有一份,因此只要任何一方想要,隨時都可以將離婚協議書交到戶政事務所,將財產結算。 春聽了之後毛骨悚然,知道自己随時有可能會被離婚,想要力挽狂瀾。 春:那我跟妳結婚之後,一次都不要簽離婚協議書,妳就拿我沒轍了吧!妳就得一輩子當我老婆! 雫:那可不行,所以你得先簽好第一份離婚協議書,我才會簽下結婚同意書。 春嚇了一跳,翻開雫剛才給他的結婚同意書下面,果真就附了一張離婚協議書。 離婚協議書: 兩人協議分配財產如下: 吉田春:500000 水谷雫:300000 簽名:吉田春、水谷雫 (尚無時間戳) 春:不行不行,妳這個作法有個 bug,如果結婚後都是妳給我錢,財產變成例如我 600000、妳 200000,但最後妳卻交了我們一開始的離婚協議書,妳不就淨賺 100000 嗎? 雫聽了後覺得有道理,低頭開始深思。正當春覺得應該可以安心的時候,雫抬起了頭。 雫:你說的有道理,所以我們要加入另外一個保險措施。 雫拿出兩張新的離婚協議書,拿出筆在上方加字。 離婚協議書(吉田春持有): 兩人協議分配財產如下: 水谷雫:300000 帳戶 1:500000 過了一個月後,將帳戶 1 的所有錢轉給吉田春...

February 11, 2022 · 2 分鐘 · wancat

元宇宙的重點不是 VR,而是區塊鏈

理想元宇宙三要素: 1. 元宇宙必須基於自由軟體與開放標準 2. 元宇宙中的身分與財產必須由個人所擁有 3. 元宇宙的治理必須是民主的。當我們今天面對一個新的元宇宙項目,我們應仔細檢查其是否滿足了這些要求,若任何一項沒有達到,我們都應該拒絕它。

November 29, 2021 · 1 分鐘 · wancat

如何用對數算指數為實數的值

音量單位分貝,定義是聲音的震幅每增加 10 倍,就增加 10 分貝,公式可寫成: $$ P = 10^{\frac{dB}{10}}P_0 $$ 在我們調整音量的時候,不可能每次都調大 10 倍吧?那在中間就會出現指數是小數的情況。例如我們今天若要算 $$ x = 10^{6.3} $$ 要怎麼在紙上求得近似值呢? 首先,我們改寫一下式子 $$ x = 10^{0.3} \times 10^6 $$ $$ y = 10^{0.3} $$ $$ x = y \times 10^6 $$ 這樣我們就可以先求 y,再回去求 x 了,這麼做是因為對數表上只會有 1 到 10 的值。 根據 log 定義 $$ 0.3 = \log_{10} y $$ 透過查表,找到最接近的值是 $$ \log_{10} 2.0 = 0.301 $$ $$ \rightarrow y \approx 2.0 $$ 因此 x 的值就會是...

August 21, 2021 · 1 分鐘 · wancat

如何推導 Log 換底公式

假設今天我們要算一個 2 的對數,如 $$ x = \log_2 16 $$ $$ \rightarrow 2^x = 16 $$ 我們定義 $$ 10^y=2 $$ 把第二式帶入第一式 $$ (10^y)^x = 16 $$ $$ 10^{xy} = 16 $$ 根據 log 定義,可以得到 $$ xy = \log_{10} 16 $$ $$ x = \frac{\log_{10} 16}{y} $$ 又 $$ y = \log_{10} 2 $$ 則 $$ x = \frac{\log_{10} 16}{\log_{10} 2} $$ 我們就得到了換底公式: $$ \log_a b = \frac{\log_c b}{\log_c a} $$

August 21, 2021 · 1 分鐘 · wancat

自由的伺服器測速工具 LibreSpeed 安裝教學

自己架站有時候需要了解伺服器的網速實際上有多快,這時可以在伺服器上安裝 LibreSpeed 這套軟體,打開網頁就能測連線到伺服器的速度。LibreSpeed 有 PHP 和 Go 實作,身為 Gopher 當然要用 Go 實作!本篇將以 Go 實作為範例。 Go 安裝 首先要安裝 Go,到 Golang 官網 下載你平台的壓縮檔,Raspberry Pi 選 armv6l,一般電腦要選 amd64,然後將其解壓縮: wget https://golang.org/dl/go1.16.7.linux-armv6l.tar.gz sudo tar -zxvf go1.16.7.linux-armv6l.tar.gz -C /usr/local 將 Go 加到 PATH 中,打開你的 Shell 設定檔(Bash 是 ~/.bashrc,Zsh 是 ~/.zshrc),在最後加入: export PATH=$PATH:/usr/local/go/bin 儲存後重開一個 shell,看有沒有成功安裝: $ go version go version go1.16.7 linux/arm LibreSpeed 安裝 下載並編繹 LibreSpeed git clone https://github.com/librespeed/speedtest-go.git cd speedtest-go go build -ldflags "-w -s" -trimpath -o speedtest main....

August 10, 2021 · 2 分鐘 · wancat

從零開始的 Nextcloud 完整安裝教學

用兩顆外接硬碟組 RAID 1,設定 DDNS、Nginx,並安裝 Nextcloud,以及後續的 PHP 調校與 Redis 快取。

August 7, 2021 · 8 分鐘 · wancat

過早的優化是萬惡的根源

有次我要開發一個規劃時間的演算法,需要將時間切割成一個一個單位做計算,這時普通的作法會是用布林陣列來儲存每個時間點,然而我需要對時間做一些 AND、OR、NOT 的布林運算,我當時突發奇想,假如用 BigInt 來儲存效能和記憶體都會省下不少,意思是將一個整數視作一個布林陣列,每一個位元就代表一個時間單位,這樣相比用布林陣列,足足省下至少 8 倍的記憶體。我心裡覺得這真是太酷了,於是就一股腦開發基於 BigInt 的演算法。 BigInt 由於本來就不是陣列,不論是讀值、改值都相當因難。以讀取第 i 項的值為例,需要寫成: // normal index array[i]; // bigint index const n = 0b10111000; (n >> i) % 2; // ??? 看起來不直觀、可讀性差、又容易出現差一錯誤。debug 時也相當難纏,直接把 BigInt 印出來,會得到一個巨大十進位整數(本來它就是 Big Int 嘛),需要額外呼叫方法將其以二進位顯示,後來我還將其封裝成一個類別,花了好大力氣寫 unit tests、各種 debug function,最後終於將演算法給實作出來了,花了整整兩週的時間(side project 嘛)。 正當我得意於自己的成果時,遭到現實衝擊——我們使用 React Native 來開發 Mobile App,而 BigInt 是新語法,React Native 還沒有支援。我耗費好幾個小時嘗試各種偏方,然而都不得好轉,最後在無耐之下只好將演算法用陣列重寫。原先以為會天崩地裂、再花上一週的時間,然而由於我有非常多的單元測試,我竟然只用一個下午就將整個演算法改寫完了,比我研究如何在 React Native 跑 BigInt 的時間還少,而改寫後程式的可讀性也提升了不少,那效能呢?由於這是個跑在 client 端的演算法,效能根本不重要,使用體驗毫無差別,省下那一點點記憶體也一點用都沒有。 「過早的優化是萬惡的根源」,在不存在效能瓶頸時就做優化,結果適得其反。比起效能,應該以可讀性優先。 此外,單元測試真的很重要。

August 3, 2021 · 1 分鐘 · wancat