Bio
I am an amateur philosopher practicing the school of Critical Fallibilsm. My favorite philosophy topics are: epistemology, learning, systems design, communication, morality, project planning and business, and general life skills and attitudes. I spent the last half of 2020 improving my thinking methods via (commercial) one-on-one philosophy tutoring from Elliot Temple. Those 52 tutorials (~100 hrs) are available free on YouTube and you can read my learning FI
site and my microblog to see the philosophy work I was doing at that time. The tutorials started with my goal of improving my writing quality, but they covered a very wide range of topics, like grammar, procrastination, social dynamics (e.g. analysing + understanding lies and dishonesty), yes/no philosophy (epistemology), learning methods, and having successful discussions.
As a result of the improvements to my thinking methods, in January 2021 I unendorsed all my previous ideas. That means that I revoked my implicit endorsement of projects, ideas, opinions, etc that I had previously worked on, advocated, promoted, etc. There's more details in the above-linked video. This about page was sorely out-of-date prior to the update on 11th July 2021. You can see previous versions on github.
For work, I do mostly software stuff. I'm pretty good at that, generally; you can check out my github profile if you like. I've built sophisticated systems of smart contracts (with 99.7% test coverage) as the backend for a secure online-voting SaaS product. I've built sophisticated IaC cloud systems with bespoke advanced automation and devops tools. SPAs and webapps in Elm, Purescript, and Typescript (VueJS) with features like signature input and PDF generation, headless browser automation, and crypto stuff like auditing an on-chain election.
I am very comfortable learning new languages, frameworks, toolkits, etc. I have a strong preference towards safe programming techniques. Some examples: rich static types (e.g. Haskell, Purescript); well integrated functional techniques (e.g. Rust); unique compiler-level safety (e.g. Rust, Elm); and declarative frameworks (e.g. Cloudformation/IaC, Tailwind CSS). I really like type-level programming and am disappointed at the lack of support for it in languages like Rust. I think things like higher-kinded types, functional dependencies, and type-level rows are incredibly powerful, but the current implementations and tooling are ultimately lacking, making the act of doing type-level programming harder than it needs to be. There are some exceptions to my preference for safe languages, too. I quite like Ruby and Rails (though have some criticisms, too), and I have a new-found appreciation for SQL. I don't like javascript much, but it's not so bad anymore with modern ecmascript and typescript. I don't hate it.
I contributed an in-depth chapter to Data61's Architecture for Blockchain Applications textbook about the smart contract architecture that I used for SecureVote's backend.
My two most well-known past projects are likely Flux and SecureVote.
Flux is a political party I founded in 2015 to introduce better methods of doing democracy. Particularly, I invented a new way to do democracy -- Issue Based Digital Democracy (IBDD) -- built around foundational concepts from epistemology and free market economics such as error correction, cycles of conjecture and criticism, specialization and trade, division of labor, comparative advantage, and arbitrage. Flux ran in state and federal elections (in Australia) in 2016, 2017, 2019, and 2020.
SecureVote is a startup (in indefinite hiatus), founded in 2016, that produces secure online voting software and infrastructure. We own a patent on the most space-efficient method of secure, online, p2p secret ballot. In 2017 I publicly ran a 24 hr stress test of our prototype high-capacity voting architecture -- this achieved 1.6 billion votes anchored to the Bitcoin blockchain and was able to be audited by the public. Based on those results, a 2016 15" MacBook Pro would have capable of processing up to 16 billion votes in 24 hours, i.e., the 1.6 billion-vote stress test used approximately 10% of that macbook's computational capacity on the bottleneck task: signature validation (I guess mb it would thermal throttle, tho ๐คจ).
Some other past projects of mine:
BitChomp Mining Pool (2011)
I ran a NMC/BTC mining pool (BitChomp) for a short while in 2011. That died after the pool became insolvent due to a repeating-payments bug in my BTC payout code. For whatever reason the same code worked fine for NMC payouts, but BTC payouts encountered an exception between the send BTC tx and record the payout in the DB steps. The regular cronjob to trigger payouts meant that (by the time I woke up) BitChomp's first Bitcoin mining payouts (about ~7-8 BTC out of 50 BTC reward) had been sent to miners 6 times over until the wallet was drained. The reward distribution model (PPLNS, or SMPPS, mb) meant that the pool was able to build up a buffer of excess reward, but that needed to be maintained to pay miners later during unlucky periods (or something like that). The takeaway is that distributing the excess like this meant that the internal accounting of the pool was out of wack, and meant it was insolvent. I learned a valuable lesson about handling atomic, irreversible events and DB synchronization; and I'm glad it happened early in my career and not in a high-stakes situation.
Marketcoin, Ethereum, Eudemonia, The Grachten, Quanta (May 2013 to August 2014)
I tried to launch a distributed-exchange blockchain -- Marketcoin -- in May 2013. The architecture is still workable and better (higher capacity, lower fee) than the DEX
s around today (like Uniswap/Balancer). In Dec 2013 -> Feb/March 2014 I worked with the Ethereum team doing self-direct work around smart contracts and wrote (to my knowledge) the first smart contract testing framework alongside a test implementation of Marketcoin's price matching and escrow engine and a precursor to BTC Relay comprised of 3 contracts: CHAINHEADERS (for Bitcoin's headers-only consensus), MERKLETRACKER, and SPV. To be clear: if the design of Ethereum smart contracts (and tooling around their authorship) had not changed significantly before launch, this is probably the earliest near-functional decentralized, cross-chain exchange.
In April-July 2014, a friend and I started a short-lived project, Eudemonia Research, where I returned to Marketcoin and wrote, from scratch, a blockchain framework for fast development of custom blockchains: Cryptonet. It's like Parity's Substrate, except 1,316 days older, written in Python, and dead. I used cryptonet for some other important prototypes, too.
One was The Grachten (originally GPDHT), an early implementation of a blockchain scalability soln based on merged-mining and something like pseudo-sharding. It later went on to be refined and coined [a microchain by Gav Wood. When Gav Wood said the following, he was talking about our conversation about this idea.
Decoupling the underlying consensus from the state-transition has been informally proposed in private for at least two years---Max Kaye was a proponent of such a strategy during the very early days of Ethereum.
Another important prototype I built using cryptonet was Quanta -- which is the world's first implementation of the generalization of Nakamoto consensus to a DAG that is capable of merging histories from multiple parents. The method I created for Quanta was independently discovered a year later by Yoad Lewenberg, Yonatan Sompolinsky, and Aviv Zohar in Inclusive Block Chain Protocols.
All content is on GitHub: https://github.com/xk-io/xk-io.github.io.
This post and addendums are to track other bodies of work that aren't included directly on this site (or at least not when I post them).
My emails jmfarthing88@gmail.com.
By the way, amazing work with Flux.
Hi, FYI, Flux is dead: https://voteflux.org/2022/04/20/wrongful-deregistration/
I'm no longer interested in pursuing anything around digital democracy.
I now think that what Flux was trying to do (and widespread digital democracy more broadly) is a fool's errand. There are much bigger problems with govt/democracy, and those problems will prevent digital democracy making any substantial impact. The AEC's flagrant disrespect for the Electoral Act and consistent head-in-the-sand style denial of any fault is an example of this. Moreover, voluntarily participating in broken systems (e.g., starting a political party) is, in-essence, consenting to it and publicly supporting it as legitimate. I don't think that's a good thing to do, and the right thing is to opt-out of those systems to whatever extent is possible.
There are two philosophy books I recommend you read that discuss these sorts of issues. Karl Popper's Enemies of the Open Society, and Ayn Rand's Atlas Shrugged.
IMO, digital democracy actually presents a risk in some ways, in that it might make government interference a lot easier. IMO, the further the government is from your life, the better.