<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Regina's Digital Garden</title><link>https://www.rchow.dev/</link><description>Recent content in 🌱 on Regina's Digital Garden</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Sat, 24 Apr 2021 00:00:00 +0000</lastBuildDate><atom:link href="https://www.rchow.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>Account</title><link>https://www.rchow.dev/account/</link><pubDate>Mon, 22 Jun 2026 00:00:00 +0000</pubDate><guid>https://www.rchow.dev/account/</guid><description/></item><item><title>Media Kit</title><link>https://www.rchow.dev/media-kit/</link><pubDate>Mon, 22 Jun 2026 00:00:00 +0000</pubDate><guid>https://www.rchow.dev/media-kit/</guid><description/></item><item><title>Members-only: My ZK research notes</title><link>https://www.rchow.dev/blog/members-only-example/</link><pubDate>Mon, 22 Jun 2026 00:00:00 +0000</pubDate><guid>https://www.rchow.dev/blog/members-only-example/</guid><description>A members-only deep dive — subscribe or unlock to read the full notes.</description></item><item><title>媒體資料包</title><link>https://www.rchow.dev/zh-tw/media-kit/</link><pubDate>Mon, 22 Jun 2026 00:00:00 +0000</pubDate><guid>https://www.rchow.dev/zh-tw/media-kit/</guid><description/></item><item><title>帳戶</title><link>https://www.rchow.dev/zh-tw/account/</link><pubDate>Mon, 22 Jun 2026 00:00:00 +0000</pubDate><guid>https://www.rchow.dev/zh-tw/account/</guid><description/></item><item><title>How I Use AI Tools as a Web3 Developer</title><link>https://www.rchow.dev/blog/ai-tools-web3-dev/</link><pubDate>Fri, 08 Nov 2024 00:00:00 +0000</pubDate><guid>https://www.rchow.dev/blog/ai-tools-web3-dev/</guid><description>&lt;p>&lt;img src="https://media.giphy.com/media/077i6AULCXc0FKTj9s/giphy.gif">&lt;/p>
&lt;p>It&amp;rsquo;s been about a year since I started integrating AI tools seriously into my development workflow. I resisted for longer than I should have — partly scepticism, partly the classic developer ego thing of &amp;ldquo;I should be able to figure this out myself&amp;rdquo;. Eventually I caved, and I have thoughts.&lt;/p>
&lt;h2 id="what-actually-helps">What Actually Helps&lt;/h2>
&lt;p>&lt;strong>Boilerplate and scaffolding.&lt;/strong> Asking an AI to generate a basic ERC-721 contract or a standard API handler is genuinely useful. Not because I can&amp;rsquo;t write it, but because starting from a skeleton and modifying it is faster than starting from a blank file every time. The generated code is usually sensible enough to be a good starting point.&lt;/p>
&lt;p>&lt;strong>Explaining unfamiliar code.&lt;/strong> I work with a fair bit of code I didn&amp;rsquo;t write — open source contracts, legacy services, other people&amp;rsquo;s ABIs. Pasting a function and asking &amp;ldquo;what does this do and what should I watch out for?&amp;rdquo; saves a lot of time jumping between documentation tabs.&lt;/p>
&lt;p>&lt;strong>Writing tests.&lt;/strong> I dislike writing tests for obvious-behaviour functions. AI is surprisingly good at generating unit test cases, including edge cases I might have glossed over. I still review everything but the coverage improves noticeably.&lt;/p>
&lt;h2 id="what-doesnt-work-well">What Doesn&amp;rsquo;t Work Well&lt;/h2>
&lt;p>&lt;strong>Anything bleeding-edge or niche.&lt;/strong> If you&amp;rsquo;re working with a protocol that launched six months ago, or a new L2 with limited public documentation, the AI will confidently give you outdated or hallucinated information. This is dangerous in Web3 where a wrong address or incorrect contract ABI loses real money. I always cross-reference with official docs for anything chain-specific.&lt;/p>
&lt;p>&lt;strong>Auditing smart contracts.&lt;/strong> I have seen developers paste their Solidity into an AI and treat the response as a security review. Please don&amp;rsquo;t do this. AI can catch obvious patterns but it misses subtle re-entrancy issues, business logic bugs, and protocol-specific edge cases. Use proper auditing tools and if it&amp;rsquo;s going to hold real value — get an actual audit.&lt;/p>
&lt;p>&lt;strong>Architecture decisions.&lt;/strong> Great for tactics, not great for strategy. Asking &amp;ldquo;how do I implement this function&amp;rdquo; works. Asking &amp;ldquo;how should I structure this entire system&amp;rdquo; tends to produce generic advice that doesn&amp;rsquo;t account for your specific constraints.&lt;/p>
&lt;h2 id="my-current-stack">My Current Stack&lt;/h2>
&lt;p>I mostly use Claude for code explanations and Go/Solidity generation, and GitHub Copilot for autocomplete while I&amp;rsquo;m typing. They serve different purposes and work well together. I turn Copilot off sometimes when I&amp;rsquo;m in &amp;ldquo;deep thinking&amp;rdquo; mode because the autocomplete starts to feel like it&amp;rsquo;s steering my thoughts rather than following them.&lt;/p>
&lt;h2 id="the-bigger-picture">The Bigger Picture&lt;/h2>
&lt;p>I think the honest answer is: AI tools make the boring parts of development faster, which frees up time for the parts that actually require thinking. For Web3 specifically, the &amp;ldquo;require thinking&amp;rdquo; parts are non-trivial — the security surface is large and the cost of mistakes is high. So my approach is to use AI for speed on the low-risk stuff, and stay cautious on anything that touches user funds or sensitive logic.&lt;/p>
&lt;p>It&amp;rsquo;s a tool. A pretty useful one. But it&amp;rsquo;s not a replacement for understanding what you&amp;rsquo;re building.&lt;/p></description></item><item><title>身為 Web3 開發者，我怎麼使用 AI 工具</title><link>https://www.rchow.dev/zh-tw/blog/ai-tools-web3-dev/</link><pubDate>Fri, 08 Nov 2024 00:00:00 +0000</pubDate><guid>https://www.rchow.dev/zh-tw/blog/ai-tools-web3-dev/</guid><description>&lt;p>&lt;img src="https://media.giphy.com/media/077i6AULCXc0FKTj9s/giphy.gif">&lt;/p>
&lt;p>距離我開始認真把 AI 工具融入開發工作流程，大概已經一年了。我抵抗了比應該更長的時間——一部分是懷疑，一部分是那種「這個我自己應該搞得定」的開發者自尊心。最後還是投降了，然後有些想法想記下來。&lt;/p>
&lt;h2 id="真的有用的地方">真的有用的地方&lt;/h2>
&lt;p>&lt;strong>樣板程式碼與腳手架。&lt;/strong> 請 AI 生成一個基本的 ERC-721 合約，或標準的 API handler，真的很有用。不是因為我不會寫，而是從一個骨架開始修改，比每次面對空白檔案快多了。生成的程式碼通常夠好，足以作為起點。&lt;/p>
&lt;p>&lt;strong>解釋不熟悉的程式碼。&lt;/strong> 我工作中會接觸到很多不是我寫的程式碼——開源合約、舊系統、別人的 ABI。把一個函式貼進去問「這在做什麼，有什麼要注意的？」，省了很多在文件分頁之間跳來跳去的時間。&lt;/p>
&lt;p>&lt;strong>寫測試。&lt;/strong> 我不喜歡為那些行為很明顯的函式寫測試。AI 很擅長生成單元測試案例，包括一些我可能會略過的邊緣情況。我還是會全部看過，但覆蓋率明顯提高了。&lt;/p>
&lt;h2 id="效果不好的地方">效果不好的地方&lt;/h2>
&lt;p>&lt;strong>任何很新或很小眾的東西。&lt;/strong> 如果你在用六個月前才發布的協議，或文件很少的新 L2，AI 會很有自信地給你過時或是幻覺出來的資訊。在 Web3 裡這很危險——一個錯誤的地址或合約 ABI 會導致真實的資金損失。任何跟鏈相關的東西，我都一定會對照官方文件確認。&lt;/p>
&lt;p>&lt;strong>智能合約審計。&lt;/strong> 我看過有開發者把 Solidity 貼給 AI，然後把回應當成安全審查的結果。請不要這樣做。AI 可以抓到明顯的模式，但它會漏掉微妙的重入攻擊（re-entrancy）漏洞、商業邏輯錯誤，以及特定協議的邊緣情況。用正規的審計工具，如果要放真實資金，就找真正的審計。&lt;/p>
&lt;p>&lt;strong>架構決策。&lt;/strong> 戰術問題問得很好，策略問題問得不太行。「這個函式怎麼實作」有用，「這整個系統應該怎麼設計」得到的往往是通用建議，沒辦法考慮你的具體限制。&lt;/p>
&lt;h2 id="我現在的工具組合">我現在的工具組合&lt;/h2>
&lt;p>我主要用 Claude 來解釋程式碼和生成 Go/Solidity，用 GitHub Copilot 在打字的時候自動補全。它們服務不同的目的，搭配起來效果不錯。Copilot 我有時候會關掉，在「深度思考」模式的時候——因為自動補全開始感覺像是在引導我的思路，而不是跟著我走。&lt;/p>
&lt;h2 id="更大的圖景">更大的圖景&lt;/h2>
&lt;p>說實在的：AI 工具讓開發裡那些無聊的部分變快了，這釋放出時間來處理真正需要思考的部分。對 Web3 來說，「需要思考的部分」並不簡單——攻擊面很大，犯錯的代價很高。所以我的做法是，在低風險的事情上用 AI 加速，在任何碰到使用者資金或敏感邏輯的地方保持謹慎。&lt;/p>
&lt;p>這是個工具，一個相當有用的工具。但它不能取代對你在建構什麼的理解。&lt;/p></description></item><item><title>Shop</title><link>https://www.rchow.dev/shop/</link><pubDate>Mon, 01 Jan 2024 00:00:00 +0000</pubDate><guid>https://www.rchow.dev/shop/</guid><description/></item><item><title>商店</title><link>https://www.rchow.dev/zh-tw/shop/</link><pubDate>Mon, 01 Jan 2024 00:00:00 +0000</pubDate><guid>https://www.rchow.dev/zh-tw/shop/</guid><description/></item><item><title>Why I Reach for Go When Building Web3 Backends</title><link>https://www.rchow.dev/blog/go-for-web3-backend/</link><pubDate>Tue, 02 May 2023 00:00:00 +0000</pubDate><guid>https://www.rchow.dev/blog/go-for-web3-backend/</guid><description>&lt;p>&lt;img src="https://media.giphy.com/media/13HgwGsXF0aiGY/giphy.gif">&lt;/p>
&lt;p>I have been writing Go professionally for over a year now, mainly for the backend of Web3 products. Before that I was mostly JavaScript and Python. I want to write down why Go has become my default choice for anything backend in the Web3 space, because I wish someone had told me this earlier.&lt;/p>
&lt;h2 id="the-concurrency-thing-is-real">The Concurrency Thing is Real&lt;/h2>
&lt;p>When you&amp;rsquo;re building something that listens to blockchain events — indexing transactions, watching contract events, syncing state — you need concurrency that doesn&amp;rsquo;t make you want to cry. Go&amp;rsquo;s goroutines are genuinely easy to use compared to JavaScript&amp;rsquo;s async/await chains or Python&amp;rsquo;s asyncio.&lt;/p>
&lt;p>A simple example: listening to multiple smart contract events simultaneously and writing them to a database. In Go this is a handful of goroutines and a few channels. Clean and readable.&lt;/p>
&lt;h2 id="go-ethereum-is-excellent">go-ethereum is Excellent&lt;/h2>
&lt;p>The &lt;a href="https://github.com/ethereum/go-ethereum">go-ethereum&lt;/a> library (geth) is the reference Ethereum client and it&amp;rsquo;s written in Go. Using it from Go feels native in a way that doesn&amp;rsquo;t quite translate to other languages. You can subscribe to events, call contract functions, sign and send transactions — all with proper types, none of the &lt;code>any&lt;/code> and casting chaos I used to deal with in TypeScript.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>client, err &lt;span style="color:#ff79c6">:=&lt;/span> ethclient.&lt;span style="color:#50fa7b">Dial&lt;/span>(&lt;span style="color:#f1fa8c">&amp;#34;wss://mainnet.infura.io/ws/v3/YOUR_KEY&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">if&lt;/span> err &lt;span style="color:#ff79c6">!=&lt;/span> &lt;span style="color:#ff79c6">nil&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> log.&lt;span style="color:#50fa7b">Fatal&lt;/span>(err)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>query &lt;span style="color:#ff79c6">:=&lt;/span> ethereum.FilterQuery{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Addresses: []common.Address{contractAddress},
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>logs &lt;span style="color:#ff79c6">:=&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">make&lt;/span>(&lt;span style="color:#8be9fd;font-style:italic">chan&lt;/span> types.Log)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sub, err &lt;span style="color:#ff79c6">:=&lt;/span> client.&lt;span style="color:#50fa7b">SubscribeFilterLogs&lt;/span>(context.&lt;span style="color:#50fa7b">Background&lt;/span>(), query, logs)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>That&amp;rsquo;s it. No callback hell. Errors are explicit. I know exactly what&amp;rsquo;s happening.&lt;/p>
&lt;h2 id="performance-matters-at-scale">Performance Matters at Scale&lt;/h2>
&lt;p>On a busy chain like Polygon or during a token launch, your backend might be processing hundreds of events per second. Go&amp;rsquo;s performance here is just in a different league from Python. I noticed this the first time we had a high-traffic period at work — the Go service barely moved on CPU, while the old Python service we had experimented with earlier would have been struggling.&lt;/p>
&lt;h2 id="the-learning-curve-is-honest">The Learning Curve is Honest&lt;/h2>
&lt;p>Go is opinionated and the error handling is verbose. Writing &lt;code>if err != nil&lt;/code> fifty times per file feels tedious at first. But this explicitness saved me multiple times when I was new to the codebase — every failure path is explicit, not hidden behind an exception that might bubble up in a weird way.&lt;/p>
&lt;p>If you are coming from JavaScript, the static typing will also feel restrictive initially. Give it two weeks. You&amp;rsquo;ll miss it in every other language after that.&lt;/p>
&lt;h2 id="what-im-building-with-it-now">What I&amp;rsquo;m Building With It Now&lt;/h2>
&lt;p>Currently using Go to build a token-gating API — it checks NFT ownership and issues signed session tokens for gated content access. Go&amp;rsquo;s standard library handles the crypto primitives really well, and the binary compiles to a single self-contained executable which makes deployment painless.&lt;/p>
&lt;p>If you are building anything in the Web3 backend space and haven&amp;rsquo;t tried Go, I&amp;rsquo;d really recommend it. The ecosystem is mature and the language is genuinely a pleasure once it clicks.&lt;/p></description></item><item><title>為什麼我做 Web3 後端都選 Go？</title><link>https://www.rchow.dev/zh-tw/blog/go-for-web3-backend/</link><pubDate>Tue, 02 May 2023 00:00:00 +0000</pubDate><guid>https://www.rchow.dev/zh-tw/blog/go-for-web3-backend/</guid><description>&lt;p>&lt;img src="https://media.giphy.com/media/13HgwGsXF0aiGY/giphy.gif">&lt;/p>
&lt;p>我現在用 Go 寫後端已經超過一年了，主要是為 Web3 產品開發後端服務。在這之前，我大部分時候都在用 JavaScript 和 Python。想把這些心得寫下來，說說 Go 是怎麼成為我 Web3 後端開發的預設選擇——因為我希望有人早點跟我說這件事。&lt;/p>
&lt;h2 id="並發concurrency真的很重要">並發（Concurrency）真的很重要&lt;/h2>
&lt;p>當你在做監聽區塊鏈事件的東西——索引交易、監聽合約事件、同步狀態——你需要一種不會讓你抓狂的並發機制。Go 的 goroutine 跟 JavaScript 的 async/await 巢狀結構，或 Python 的 asyncio 相比，真的容易用多了。&lt;/p>
&lt;p>一個簡單的例子：同時監聽多個智能合約事件並寫入資料庫。在 Go 裡，幾個 goroutine 加上幾個 channel 就搞定了，程式碼乾淨又好讀。&lt;/p>
&lt;h2 id="go-ethereum-非常好用">go-ethereum 非常好用&lt;/h2>
&lt;p>&lt;a href="https://github.com/ethereum/go-ethereum">go-ethereum&lt;/a> 函式庫（也就是 geth）是以太坊的參考用戶端，用 Go 撰寫。從 Go 直接呼叫它，有一種原生的感覺，是其他語言比不上的。你可以訂閱事件、呼叫合約函式、簽名並發送交易——全部都有完整的型別，不像 TypeScript 那樣到處是 &lt;code>any&lt;/code> 和型別轉換的混亂。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>client, err &lt;span style="color:#ff79c6">:=&lt;/span> ethclient.&lt;span style="color:#50fa7b">Dial&lt;/span>(&lt;span style="color:#f1fa8c">&amp;#34;wss://mainnet.infura.io/ws/v3/YOUR_KEY&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">if&lt;/span> err &lt;span style="color:#ff79c6">!=&lt;/span> &lt;span style="color:#ff79c6">nil&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> log.&lt;span style="color:#50fa7b">Fatal&lt;/span>(err)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>query &lt;span style="color:#ff79c6">:=&lt;/span> ethereum.FilterQuery{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Addresses: []common.Address{contractAddress},
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>logs &lt;span style="color:#ff79c6">:=&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">make&lt;/span>(&lt;span style="color:#8be9fd;font-style:italic">chan&lt;/span> types.Log)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sub, err &lt;span style="color:#ff79c6">:=&lt;/span> client.&lt;span style="color:#50fa7b">SubscribeFilterLogs&lt;/span>(context.&lt;span style="color:#50fa7b">Background&lt;/span>(), query, logs)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>就這樣。沒有回呼地獄，錯誤處理一目了然，我知道每一步都在幹嘛。&lt;/p>
&lt;h2 id="效能在大規模時很關鍵">效能在大規模時很關鍵&lt;/h2>
&lt;p>在 Polygon 這種繁忙的鏈上，或是代幣發行期間，後端每秒可能要處理幾百個事件。Go 在這方面的效能跟 Python 根本不是同個量級。我在工作中第一次遇到流量高峰的時候就感受到了——Go 服務的 CPU 幾乎沒有波動，而我們之前實驗性用的 Python 服務在那種情況下早就掙扎了。&lt;/p>
&lt;h2 id="學習曲線是誠實的">學習曲線是誠實的&lt;/h2>
&lt;p>Go 有自己的風格，錯誤處理很囉嗦。每個函式都要寫一遍 &lt;code>if err != nil&lt;/code> 一開始感覺很煩。但這種明確性讓我好幾次在讀別人的程式碼時救了我——每個失敗路徑都清清楚楚，不會有異常突然從奇怪的地方冒出來。&lt;/p>
&lt;p>如果你是從 JavaScript 轉過來，靜態型別一開始也會讓你覺得很受限。撐過兩個禮拜。之後你在用其他語言的時候反而會想念它。&lt;/p>
&lt;h2 id="現在在用它做什麼">現在在用它做什麼&lt;/h2>
&lt;p>目前用 Go 在開發一個代幣閘道（token-gating）API——它會檢查 NFT 持有情況，並為受保護的內容發放已簽名的 session token。Go 的標準函式庫對加密相關操作的支援很好，而且編譯出來的是單一的獨立執行檔，部署超方便。&lt;/p>
&lt;p>如果你在做 Web3 後端的東西，還沒試過 Go，真的值得試試看。生態系成熟，語言本身在熟悉之後也真的很好用。&lt;/p></description></item><item><title>Writing My First ZK Circuit with Circom</title><link>https://www.rchow.dev/blog/circom-first-zk-circuit/</link><pubDate>Sat, 18 Jun 2022 00:00:00 +0000</pubDate><guid>https://www.rchow.dev/blog/circom-first-zk-circuit/</guid><description>&lt;p>&lt;img src="https://media.giphy.com/media/du3J3cXyzhj75IOgvA/giphy.gif">&lt;/p>
&lt;p>The crypto market is down bad right now 📉. But honestly? The bear market is my favourite time to learn. No FOMO, no Twitter noise. Just me, my laptop, and a very long reading list.&lt;/p>
&lt;p>I have been talking about zero-knowledge proofs for a while now (see my earlier posts on the STARK prover). This time I actually wrote one from scratch instead of just reading about it.&lt;/p>
&lt;h2 id="why-circom">Why Circom?&lt;/h2>
&lt;p>I started with &lt;a href="https://docs.circom.io">Circom&lt;/a> because it targets Solidity developers and the tooling around it (snarkjs) is well-documented. There are other options like Noir or Halo2, but Circom felt the most approachable as a starting point.&lt;/p>
&lt;p>The mental model that finally clicked for me: a ZK circuit is like a function where you prove you know the inputs that produce a given output, without revealing those inputs. The verifier learns nothing about your private inputs — only that they satisfy the constraints.&lt;/p>
&lt;h2 id="my-first-circuit">My First Circuit&lt;/h2>
&lt;p>I started with the classic example: prove that you know two numbers &lt;code>a&lt;/code> and &lt;code>b&lt;/code> that multiply together to give a public value &lt;code>c&lt;/code>. Sounds simple, but seeing it work end-to-end made everything concrete.&lt;/p>
&lt;pre tabindex="0">&lt;code>pragma circom 2.0.0;
template Multiply() {
signal input a;
signal input b;
signal output c;
c &amp;lt;== a * b;
}
component main = Multiply();
&lt;/code>&lt;/pre>&lt;p>After compiling with Circom, running through snarkjs to generate the proving and verification keys, and finally deploying the Solidity verifier contract on a testnet — it worked. The verifier confirmed my proof without knowing what &lt;code>a&lt;/code> and &lt;code>b&lt;/code> were.&lt;/p>
&lt;p>It&amp;rsquo;s honestly a bit magical the first time you see it. 🤯&lt;/p>
&lt;h2 id="what-tripped-me-up">What Tripped Me Up&lt;/h2>
&lt;p>The hardest part was understanding the difference between signals and variables in Circom. Signals are constrained (they form part of your circuit), variables are not. If you mix them up, you get subtle bugs that compile fine but produce incorrect proofs.&lt;/p>
&lt;p>Also, the trusted setup phase with snarkjs requires downloading some relatively large files (the Powers of Tau ceremony output). The documentation does warn you but I still sat there wondering why my internet was being hammered.&lt;/p>
&lt;h2 id="whats-next">What&amp;rsquo;s Next&lt;/h2>
&lt;p>I want to build something actually useful with this — probably a simple private voting circuit. Also planning to explore &lt;a href="https://noir-lang.org/">Noir&lt;/a> from Aztec, which has a Rust-like syntax and might feel more natural given my background with Rust.&lt;/p>
&lt;p>ZK is hard, but it&amp;rsquo;s the kind of hard that feels worth it.&lt;/p>
&lt;h2 id="references">References&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://docs.circom.io">Circom documentation&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/iden3/snarkjs">snarkjs GitHub&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://learn.0xparc.org">0xparc ZK Learning resources&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>用 Circom 寫出我的第一個零知識電路</title><link>https://www.rchow.dev/zh-tw/blog/circom-first-zk-circuit/</link><pubDate>Sat, 18 Jun 2022 00:00:00 +0000</pubDate><guid>https://www.rchow.dev/zh-tw/blog/circom-first-zk-circuit/</guid><description>&lt;p>&lt;img src="https://media.giphy.com/media/du3J3cXyzhj75IOgvA/giphy.gif">&lt;/p>
&lt;p>現在的加密貨幣市場跌得很慘 📉。但說實話？熊市是我最喜歡學習的時候。沒有 FOMO，沒有 Twitter 的喧囂，只有我、筆電和一份超長的閱讀清單。&lt;/p>
&lt;p>我已經聊了好一陣子零知識證明的話題了（可以看看我之前關於 STARK 的文章）。這次我終於不只是讀，而是從頭寫了一個實際的電路。&lt;/p>
&lt;h2 id="為什麼選-circom">為什麼選 Circom？&lt;/h2>
&lt;p>我選擇從 &lt;a href="https://docs.circom.io">Circom&lt;/a> 入手，因為它是為 Solidity 開發者設計的，而且配套工具（snarkjs）的文件相當完整。雖然也有 Noir、Halo2 等選擇，但對於剛入門的我，Circom 感覺是最容易上手的起點。&lt;/p>
&lt;p>讓我終於搞懂的心智模型是這樣的：ZK 電路就像一個函式，你可以證明自己知道產生某個特定輸出的輸入值，卻不需要透露那些輸入值本身。驗證者只知道「這個人確實知道答案」，但完全不知道答案是什麼。&lt;/p>
&lt;h2 id="我的第一個電路">我的第一個電路&lt;/h2>
&lt;p>我從經典範例開始：證明你知道兩個數字 &lt;code>a&lt;/code> 和 &lt;code>b&lt;/code>，它們相乘等於公開的值 &lt;code>c&lt;/code>。聽起來很簡單，但親手看到它跑起來之後，一切都變得具體了。&lt;/p>
&lt;pre tabindex="0">&lt;code>pragma circom 2.0.0;
template Multiply() {
signal input a;
signal input b;
signal output c;
c &amp;lt;== a * b;
}
component main = Multiply();
&lt;/code>&lt;/pre>&lt;p>用 Circom 編譯之後，透過 snarkjs 生成證明金鑰與驗證金鑰，最後把 Solidity 驗證合約部署到測試網——成功了。驗證者確認了我的證明，但完全不知道 &lt;code>a&lt;/code> 和 &lt;code>b&lt;/code> 是什麼。&lt;/p>
&lt;p>第一次看到這個運作的時候，真的有點神奇 🤯&lt;/p>
&lt;h2 id="讓我踩到坑的地方">讓我踩到坑的地方&lt;/h2>
&lt;p>最難的部分是搞清楚 Circom 中「信號（signal）」和「變數（variable）」的差異。信號是受約束的，構成電路的一部分；變數則不受約束。如果搞混了，會出現很難察覺的錯誤——程式能編譯通過，但產生的證明是錯的。&lt;/p>
&lt;p>另外，snarkjs 的可信設置（trusted setup）階段需要下載相當大的檔案（Powers of Tau 儀式的輸出）。文件有提醒，但我還是坐在那邊想說網路為什麼突然這麼慢。&lt;/p>
&lt;h2 id="接下來的方向">接下來的方向&lt;/h2>
&lt;p>我想用這個建構一些實際有用的東西——大概是個簡單的私密投票電路。另外也計畫探索 Aztec 的 &lt;a href="https://noir-lang.org/">Noir&lt;/a>，它的語法有點像 Rust，對我來說可能更自然。&lt;/p>
&lt;p>ZK 很難，但這種難感覺是值得的。&lt;/p>
&lt;h2 id="參考資源">參考資源&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://docs.circom.io">Circom 文件&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/iden3/snarkjs">snarkjs GitHub&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://learn.0xparc.org">0xparc ZK 學習資源&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Generate NFTs based on user's personality</title><link>https://www.rchow.dev/blog/ethonline-final-thoughts/</link><pubDate>Sun, 17 Oct 2021 00:00:00 +0000</pubDate><guid>https://www.rchow.dev/blog/ethonline-final-thoughts/</guid><description>&lt;p>&lt;img src="https://media.giphy.com/media/AqoyXw0nsyn7yxRbJU/source.gif">&lt;/p>
&lt;p>There are so much going on this October. I have two Bootcamps going on at the
same time, a two-week-long project, the ETHOnline hackathon and a new start in
my career! I am also trying to sell my iPad Pro and a brunch of scammers
approached me&amp;hellip; gave me a headache.&lt;/p>
&lt;p>Btw, let&amp;rsquo;s get into today&amp;rsquo;s topic. The half-finished hackathon solo project that
I had recently submitted lol!&lt;/p>
&lt;p>The original project idea is to build a casual personality test and map some
NFTs to the personality results. These NFTs will be minted on a
first-in-first-mint basis at a limited quota.&lt;/p>
&lt;p>However, I was stuck on the personality test side for a very long time because I
am not a psychologist and I don&amp;rsquo;t know how to design a personality test&amp;hellip; After
that, I kind of randomly assigned personalities to those Pokemon cards. Then,
the NFT part is relatively easy. With the help of the NFTPort, minting to
Polygon or the testnet is completely free. Free minting is one of the reasons
why I picked NFTPort in the first place. It also supports OpenSea&amp;rsquo;s metadata
configuration and essential features such as NFT storage, which is pretty handy.&lt;/p>
&lt;p>However, using third-party services like NFTPort is not a common practice.
Especially if you want to design another set of smart contracts to interact with
the NFT.&lt;/p>
&lt;p>In the following months, I will redesign and add extra features on top of the
current project, such as:&lt;/p>
&lt;ul>
&lt;li>NFT staking&lt;/li>
&lt;li>Better personality test&lt;/li>
&lt;li>One-click NFT listing&lt;/li>
&lt;li>Minting monitor&lt;/li>
&lt;li>and happy hacking!&lt;/li>
&lt;/ul>
&lt;p>Source code is on &lt;a href="https://github.com/iggyiccy/NFT-generator">GitHub&lt;/a>.&lt;/p>
&lt;p>&lt;img src="https://github.com/iggyiccy/NFT-generator/blob/main/png_image.png?raw=true">&lt;/p></description></item><item><title>About Retroactive Public Goods Funding</title><link>https://www.rchow.dev/blog/retroactive-public-good/</link><pubDate>Sun, 19 Sep 2021 00:00:00 +0000</pubDate><guid>https://www.rchow.dev/blog/retroactive-public-good/</guid><description>&lt;p>&lt;img src="https://media.giphy.com/media/8TI9O4UoHV9Zub8RLP/source.gif">&lt;/p>
&lt;p>Karl and Vitalik talked about retroactive public goods funding on the recent
EthOnline click-off ceremony.&lt;/p>
&lt;p>This idea was raised as we learnt there are lot of coin voting failures, such as
the one with EOS and the Hive fork.&lt;/p>
&lt;p>The idea of retroactive public goods funding is fund only goes to the public
good that showing to have an actual impact. Instead of funding public goods
ahead of time, and hope that it&amp;rsquo;s going to do some good over time.&lt;/p>
&lt;h2 id="project-token">Project Token&lt;/h2>
&lt;ul>
&lt;li>Before the project hit the market, the project team can pre-mined project
tokens and sell it on Defi platform like Uniswap, to exchange for tokens for
some fundings.&lt;/li>
&lt;li>After the project started providing public good value, someone can just buy up
these project tokens thereby everyone who holds these tokens will also be
benefited from the increase in value.&lt;/li>
&lt;li>Legitimacy&lt;/li>
&lt;li>Creating value at the same time provide incentive motivation&lt;/li>
&lt;/ul>
&lt;h2 id="the-retroactive-public-goods-funding-oracle">The Retroactive Public Goods Funding Oracle&lt;/h2>
&lt;h2 id="reference">Reference&lt;/h2>
&lt;p>reference #1:
&lt;a href="https://vitalik.eth.limo/general/2021/08/16/voting3.html">Moving beyond coin voting governance&lt;/a>&lt;/p>
&lt;p>reference #2:
&lt;a href="https://www.youtube.com/watch?v=OrrkuUlFfOQ">ETHOnline 2021 | Kick off Talk Retroactive Public Goods Funding excerpt&lt;/a>&lt;/p>
&lt;p>reference #3:
&lt;a href="https://medium.com/ethereum-optimism/retroactive-public-goods-funding-33c9b7d00f0c">Retroactive Public Goods Funding&lt;/a>&lt;/p></description></item><item><title>How I learn Rust</title><link>https://www.rchow.dev/blog/easy-rust/</link><pubDate>Sun, 19 Sep 2021 00:00:00 +0000</pubDate><guid>https://www.rchow.dev/blog/easy-rust/</guid><description>&lt;p>&lt;img src="https://media.giphy.com/media/433i0E7n1dLC5YTIOi/source.gif?cid=790b761100f722e17989b041c617087240083d987f705bd1&amp;rid=source.gif&amp;ct=g">&lt;/p>
&lt;p>From my observation, Rust is a really popular language in not only blockchain
but also areas such as gaming where high performance is required. Many of my
favourite projects are written in Rust, and it is frustrating when I can&amp;rsquo;t
understand the language&amp;hellip; 🥲 This is also my main driving force to study Rust.&lt;/p>
&lt;p>I came across few resources on the
&lt;a href="https://www.rust-lang.org/">Rust official site&lt;/a>. Making sure that I subscribe
to official updates and newsletters. Another source I follow is the
&lt;a href="https://rustinblockchain.org">Rust in Blockchain&lt;/a> site, they also occasionally
update their blog which is very helpful to catch up with blockchain-related Rust
projects.&lt;/p>
&lt;p>Rust - Most Loved Language!&lt;/p>
&lt;p>✅ Speed ✅ Safety ✅ Come with Cargo Manager ✅ Come with Error Messages ✅
Efficient C Binding ✅ Treads without Data Races&lt;/p>
&lt;p>I am currently going through Easy Rust&amp;rsquo;s tutorials. It is fantastic so far! I
love how David Macleod explains Rust in a very detailed way. I am sure you will
like it as well! His tutorials are available on
&lt;a href="https://www.youtube.com/playlist?list=PLfllocyHVgsRwLkTAhG0E-2QxCf-ozBkk">Youtube&lt;/a>.
If you prefer reading, you can check out his book
&lt;a href="https://www.youtube.com/redirect?event=playlist_description&amp;redir_token=QUFFLUhqbVNZRjRLR2Nsa2lzSHQ1UVVPNlJpVEpFWEF4d3xBQ3Jtc0ttemxlVV9udXozRzlWRHM1d0tzUzYyd0g1NUJqNllvVnpWTmZvVk5RRndEWWQyMHpGUmdHQXU4UUJHdmdyRlFxNmZYRzluODAyVlM0alpNQnpRZWFaNTQ3bEF1a2FwOTl4TWNsdzMydTZmbVVsV2Fqaw&amp;q=https%3A%2F%2Fdhghomon.github.io%2Feasy_rust%2FChapter_1.html">here&lt;/a>.&lt;/p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/-lYeJeQ11OI" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;p>My planning after the Easy Rust tutorials:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/rust-lang/rustlings/">The Rustlings Course &amp;amp; Exercises&lt;/a>&lt;/li>
&lt;li>&lt;a href="http://cis198-2016s.github.io/schedule/">University of Pennsylvania&amp;rsquo;s Rust Programming&lt;/a>&lt;/li>
&lt;/ul>
&lt;pre tabindex="0">&lt;code>fn main() {
println!(&amp;#34;Hello World!&amp;#34;);
}
&lt;/code>&lt;/pre>&lt;p>P.S. The best way to learn is to get your hands dirty.&lt;/p></description></item><item><title>Learn how to write a STARK prover from scratch in Python</title><link>https://www.rchow.dev/blog/stark-prover/</link><pubDate>Sat, 18 Sep 2021 00:00:00 +0000</pubDate><guid>https://www.rchow.dev/blog/stark-prover/</guid><description>&lt;p>&lt;img src="https://media.giphy.com/media/QBW2fFwGQ4IVSGhxSD/source.gif?cid=790b761198b1e607b2f93e5b0e196fd552d782f4aaa88a3a&amp;rid=source.gif&amp;ct=g">&lt;/p>
&lt;p>Starkware is one of the projects that are always on my watch list. Today, I
finally have some spare time to go over one of their stark 101 tutorials to
write a stark prover from scratch.&lt;/p>
&lt;p>The tutorial is a great material to understand the proving mechanism, in which
the verifier is succinct logarithmically using a small amount of computation and
the prover is proving in a quasi-linear to achieve efficiency on both sides. In
other terms, it is scalable. As the amount of verification scales in a
log-squared manner, the computation required does grow but it grows very slowly.&lt;/p>
&lt;p>Starkware&amp;rsquo;s team encourage us to rewrite another set of exercises for stark
verifier, or maybe rewrite it using a different recurrence rule, or try a
different computational statement to see if it can optimize performance better.&lt;/p>
&lt;p>If you would also want to give this tutorial a try. I would recommend first
&lt;a href="https://starkware.co/developers-community/stark101-onlinecourse/stark-101-mathematical-primer/">read this article&lt;/a>
where it explains the mathematical primer. It helps you to pick up the math
quicker.&lt;/p>
&lt;p>After that, you can explore the course material at the
&lt;a href="https://starkware.co/stark-101/">STARK 101 course page&lt;/a> and start
playing with the jupyter notebooks.&lt;/p>
&lt;p>Videos are available
&lt;a href="https://starkware.co/developers-community/stark101-onlinecourse/">here&lt;/a>.&lt;/p>
&lt;p>&lt;img src="https://media.giphy.com/media/3o7527WMiaRJmrWMTe/giphy.gif">&lt;/p></description></item><item><title>Is decentralised online court possible?</title><link>https://www.rchow.dev/blog/online-court-1/</link><pubDate>Tue, 14 Sep 2021 00:00:00 +0000</pubDate><guid>https://www.rchow.dev/blog/online-court-1/</guid><description>&lt;p>&lt;img src="https://media.giphy.com/media/WWR85ym2LBYdv2VWDH/source.gif?cid=790b7611040911b7267e2ba0cefa297fa862e016f1d0a07a&amp;rid=source.gif&amp;ct=g">&lt;/p>
&lt;p>I have been brainstorming ideas lately for the Consensys&amp;rsquo; Bootcamp final
project. This final project is an individual project where students are required
to build their own Dapp (decentralised application). NFT is such a hot topic
lately that many of my classmates are planning to build NFTs related
applications. I am personally interested in the topic of privacy, however, it
requires mature zero-knowledge infrastructure and study research papers. It
doesn&amp;rsquo;t sound too realistic that a newbie can achieve it at this point in time.&lt;/p>
&lt;p>The idea of a decentralised online court system suddenly came to mind today
after I finished listening to the DevNews podcast. I spent the whole afternoon
researching how online courts works post-pandemic. Remarkerablely, there is only
46% of the population around the globe have access to the legal system and
justice is obviously not something assessable to everybody. Developed countries
are forced to transition to an online court system since the pandemic happened.
While traditional legal professionals are still figuring out how technologies
and automation works, is it possible for the crypto community to form a set of
tools for build a decentralised online court system/framework?&lt;/p>
&lt;blockquote>
&lt;p>Note: This is just some of the research I have done for building my final
project. It will likely end up in the trash if things get too complicated or I
hit the submission deadline.&lt;/p>
&lt;/blockquote>
&lt;p>&lt;strong>Opportunities&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>Build an open-source online court system that allow everyone around the world
to use or fork&lt;/li>
&lt;li>Let the legal system become assessable for common people&lt;/li>
&lt;li>Explore the possibility of making legal system shared resources through
decentralisation&lt;/li>
&lt;li>Enable automation, transparency and build trust&lt;/li>
&lt;li>Use of smart contracts in the legal field&lt;/li>
&lt;li>Every court cases have a unique NFT&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>Challenges&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>A lot of technical details involved as someone who doesn&amp;rsquo;t have a law degree&lt;/li>
&lt;li>Require people with expertise&lt;/li>
&lt;/ol>
&lt;h2 id="research">Research&lt;/h2>
&lt;p>It seems like a decentralised court should be called a decentralised justicial
system instead. One of the major contributors in this space are:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://medium.com/kleros/kleros-a-decentralized-justice-protocol-for-the-internet-38d596a6300d">Kleros Protocol&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://docs.openlaw.io">OpenLaw&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://help.aragon.org/category/47-aragoncourt">Aragon Court&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.hrhub.com/doc/icourthouse-0002">iCourtHouse&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://jur.io">Jur.io&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://docs.safe.global/learn/safe-core/safe-core-protocol/conditional-tokens">Gnosis&amp;rsquo; Conditional Tokens&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://democracy.earth/#/">Democracy.Earth&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Kleros is a good fit for the purpose by providing the infrastructure for dispute
resolution. In the next blog, I will dig into the Kleros protocol, and use cases
while I continue reading about their protocol. More importantly, is to come up
with a final project idea that is not too difficult to build at the same time
well-structured.&lt;/p>
&lt;p>Some use cases that are on top of my head are:&lt;/p>
&lt;ul>
&lt;li>exam result dispute&lt;/li>
&lt;li>legal dispute&lt;/li>
&lt;li>family law related&lt;/li>
&lt;li>commercial related&lt;/li>
&lt;li>customer services related dispute&lt;/li>
&lt;li>insurance claims&lt;/li>
&lt;/ul></description></item><item><title>About</title><link>https://www.rchow.dev/about/</link><pubDate>Sat, 24 Apr 2021 00:00:00 +0000</pubDate><guid>https://www.rchow.dev/about/</guid><description>&lt;blockquote>
&lt;p>This site is built with &lt;a href="https://github.com/gohugoio">Hugo&lt;/a>, an open-source
web framework written in &lt;a href="https://golang.org/">Go&lt;/a>, and deployed onto the
decentralised web on &lt;a href="https://ipfs.io">IPFS&lt;/a>.&lt;/p>
&lt;/blockquote>
&lt;h3 id="about-me">About Me&lt;/h3>
&lt;p>Hello 👋 Welcome to my digital garden! &lt;strong>I am an accountant turned developer&lt;/strong>.
I write about Blockchain, Data Analysis, Machine Learning, Zero-knowledge Proof,
Decentralised Applications(Dapp) and things that I learnt throughout my
programming journey.&lt;/p>
&lt;p>&lt;strong>Things I do at work:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Building solution for Australia&amp;rsquo;s NFT market&lt;/li>
&lt;li>Go lang for back-end&lt;/li>
&lt;li>React and NextJS for front-end&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Things that I do outside of work:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Contribute to Open Source Projects&lt;/li>
&lt;li>Research on anything privacy-related&lt;/li>
&lt;li>Join Hackathons occasionally&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Education:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Consensys Blockchain Developer Bootcamp Certificate&lt;/li>
&lt;li>Monash University FinTech Bootcamp Certificate&lt;/li>
&lt;li>BerkeleyX Professional Certificate in Blockchain Fundamentals&lt;/li>
&lt;li>Certified Public Accountant (CPA) Program Australia&lt;/li>
&lt;li>Monash University Bachelor of Commerce (Accounting and Finance)&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Skills:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Data Analysis - Python | Pandas | NumPy | SQL | Monte Carlo Simulations |
Plotly Dash | Streamlit&lt;/li>
&lt;li>Machine Learning - SciPy | NLP | TensorFlow | Hugging Face | Keras | PyTorch |
Deep Learning&lt;/li>
&lt;li>Blockchain - Solidity | Web3.js | Web3.py | Ether.js | Truffle | Ganache | The
Graph | IPFS &amp;amp; Filecoin&lt;/li>
&lt;li>Web Development - JavaScript | React | Next.js | Tailwind CSS | AWS
Lambda/SageMaker/S3&lt;/li>
&lt;li>Backend Development - Go | Gin | MySQL | PostgreSQL&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 id="why-zk">Why ZK?&lt;/h3>
&lt;!-- raw HTML omitted -->
&lt;!-- raw HTML omitted -->
&lt;p>I started to research into alt-tech back in 2019, desperately trying to find a
solution and encourage people around me to try out these censorship solutions.
The first project that caught my attention is the LBRY protocol, a blockchain
network that prioritizes freedom of speech. I have been volunteering for the
LBRY Foundation since then. Then I discovered zero-knowledge proof through word
of mouth and learn the incredible value it can potentially bring to humanity.
Later decided to become a developer and dig deeper into the zk rabbit hole.&lt;/p></description></item><item><title>關於我</title><link>https://www.rchow.dev/zh-tw/about/</link><pubDate>Sat, 24 Apr 2021 00:00:00 +0000</pubDate><guid>https://www.rchow.dev/zh-tw/about/</guid><description>&lt;blockquote>
&lt;p>本站使用 &lt;a href="https://github.com/gohugoio">Hugo&lt;/a>（以 &lt;a href="https://golang.org/">Go&lt;/a> 撰寫的開源網頁框架）建立，並部署至去中心化網路 &lt;a href="https://ipfs.io">IPFS&lt;/a> 上。&lt;/p>
&lt;/blockquote>
&lt;h3 id="關於我">關於我&lt;/h3>
&lt;p>您好 👋 歡迎來到我的數位花園！&lt;strong>我是一位由會計師轉型的開發者&lt;/strong>。
我在這裡分享關於區塊鏈、資料分析、機器學習、零知識證明、去中心化應用程式（DApp）以及程式開發旅程中所學到的種種。&lt;/p>
&lt;p>&lt;strong>工作內容：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>為澳洲 NFT 市場開發解決方案&lt;/li>
&lt;li>使用 Go 語言開發後端&lt;/li>
&lt;li>使用 React 與 Next.js 開發前端&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>工作以外：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>參與開源專案貢獻&lt;/li>
&lt;li>研究各種隱私相關技術&lt;/li>
&lt;li>不定期參加黑客松（Hackathon）&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>學歷與認證：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Consensys 區塊鏈開發者訓練營證書&lt;/li>
&lt;li>莫納什大學（Monash University）金融科技訓練營證書&lt;/li>
&lt;li>BerkeleyX 區塊鏈基礎專業證書&lt;/li>
&lt;li>澳洲特許會計師（CPA）課程&lt;/li>
&lt;li>莫納什大學商學士（會計與金融）&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>技能：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>資料分析 — Python | Pandas | NumPy | SQL | 蒙地卡羅模擬 | Plotly Dash | Streamlit&lt;/li>
&lt;li>機器學習 — SciPy | NLP | TensorFlow | Hugging Face | Keras | PyTorch | Deep Learning&lt;/li>
&lt;li>區塊鏈 — Solidity | Web3.js | Web3.py | Ether.js | Truffle | Ganache | The Graph | IPFS &amp;amp; Filecoin&lt;/li>
&lt;li>網頁開發 — JavaScript | React | Next.js | Tailwind CSS | AWS Lambda/SageMaker/S3&lt;/li>
&lt;li>後端開發 — Go | Gin | MySQL | PostgreSQL&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 id="為什麼選擇零知識證明zk">為什麼選擇零知識證明（ZK）？&lt;/h3>
&lt;p>2019 年起，我開始深入研究替代技術（Alt-tech），尋找能夠抵禦審查的解決方案，並鼓勵身邊的人嘗試這些工具。第一個引起我注意的是 LBRY 協議——一個以言論自由為核心的區塊鏈網路。自此之後我便持續關注 LBRY 基金會。&lt;/p>
&lt;p>後來，我透過口耳相傳接觸到了零知識證明，深深被它可能為人類帶來的巨大價值所震撼。這也促使我決定成為一名開發者，深入這條 ZK 的兔子洞。&lt;/p>
&lt;hr>
&lt;h3 id="動力來源">動力來源&lt;/h3>
&lt;p>每當失去動力時，我都會聽這首歌。&lt;/p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/NyUTYwZe_l4" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>&lt;code>我不太喜歡曝光在大眾視野中。這些文章與筆記只會發布在這個花園裡。&lt;/code>&lt;/p>
&lt;p>&lt;em>受到賽博龐克與 Web3.0 運動的影響，我在 2019 年底退出了所有主流社群媒體。你或許還能找到我以前的帳號，但那些帳號已不再活躍。&lt;/em>&lt;/p></description></item><item><title>Regina Chow · Links</title><link>https://www.rchow.dev/link/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.rchow.dev/link/</guid><description/></item><item><title>Regina Chow · 連結</title><link>https://www.rchow.dev/zh-tw/link/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.rchow.dev/zh-tw/link/</guid><description/></item></channel></rss>