M
Michael Burge
michaelburge.us · Personal blog · on HN since 2017
Michael Burge, a programmer, writes about Haskell, Ethereum, blockchain, emulators, and unusual language projects.
What HN saysHN commenters mostly mention his Pyramid Scheme post, a Scheme dialect for Ethereum, and enjoy the pun in its name.
20HN people shared it
15linked it in comments
29stories submitted
2.2Kstory points
2 years agolast shared
2017people per year2026
Most-shared posts
- 1Write your next Ethereum contract in Pyramid Scheme10 people · 470 points · first shared 2017 · 56 comments on HN
- 2Injecting a Chess Engine into Amazon Redshift4 people · 97 points · first shared 2017 · 8 comments on HN
- 3Rolling Your Own Blockchain in Haskell3 people · 236 points · first shared 2017 · 32 comments on HN
- 4Writing a formally-verified image browser in Coq and Haskell3 people · 234 points · first shared 2017 · 39 comments on HN
- 5Roll Your Own Bitcoin Exchange in Haskell2 people · 137 points · first shared 2017 · 10 comments on HN
- 6Using Haskell to debug a C chess engine2 people · 130 points · first shared 2017 · 5 comments on HN
- 7Implementing a NES Emulator in Rust1 people · 386 points · first shared 2019 · 89 comments on HN
- 8Haskell Typeclasses vs. C++ Classes1 people · 156 points · first shared 2017 · 79 comments on HN
- 9Curiosity Killed the Mario1 people · 127 points · first shared 2019 · 23 comments on HN
- 10DSLs for Ethereum Contracts1 people · 76 points · first shared 2018 · 15 comments on HN
- 11The Daily Stormer: A Hurricane Alerting Service1 people · 48 points · first shared 2017 · 19 comments on HN
- 12How do I modify a variable in Haskell?1 people · 47 points · first shared 2017 · 69 comments on HN
- 13Roko's Ransomware1 people · 8 points · first shared 2018 · discussion on HN
- 14Roll Your Own Bitcoin Exchange in Haskell1 people · 5 points · first shared 2017 · 1 comments on HN
- 15Continuations in Racket1 people · 3 points · first shared 2018 · 1 comments on HN
What HN people wrote when they linked it
smnrchrds · 2021-05-07
For me, Racket will always be the language used to create the best programming pun of all times:
> Write your next Ethereum Contract in Pyramid Scheme
> I create Pyramid: A dialect of the Scheme programming language that targets the Ethereum Virtual Machine(EVM). Pyramid Scheme is implemented using the appropriately-named Racket.
http://www.michaelburge.us/2017/11/28/write-your-next-ethereum-contrac…
buildbuildbuild · 2018-05-15
Laughed out loud at the language Pyramid being a Scheme. Perhaps not the best choice for layman marketing, but you got me.
https://www.michaelburge.us/2017/11/28/write-your-next-ethereum-contra…
osteele · 2018-05-03
Also worth noting: Hydrogen, the Jupyter plugin for Atom[1][2].
Hydrogen is a fantastically well-executed and useful piece of software. (As is Jupyter.) I’ve used it in my own programming, and also in teaching introductory software development, where it’s a helpful transition from Jupyter notebooks (which are used in the early part of the course, for problem sets / reading journals) to text files and code editors (which are introduced later, and used for team projects, and for projects that use Flask or PyGame).
But also — relevant to this sub-thread — “Hydrogen” (it relates “Jupyter” to “Atom”) has to be one of the best project names ever. It’s right up there with “Pyramid Scheme”[3].
[1] https://nteract.io/atom
[2] https://atom.io/packages/hydrogen
[3] http://www.michaelburge.us/2017/11/28/write-your-next-ethereum-contrac…
skrebbel · 2024-06-23
Pyramid Scheme comes to mind. It’s a scheme (as in, a lisp for purists) which compiles to Solidity, the language backing Ethereum.
http://www.michaelburge.us/2017/11/28/write-your-next-ethereum-contrac…
ChainOfFools · 2022-12-29
none of them are ad aptly named as Pyramid Scheme[0]
[0] http://www.michaelburge.us/2017/11/28/write-your-next-ethereum-contrac…
endgame · 2022-02-03
There used to be a lisp dialect called "pyramid" partially to make the "pyramid scheme" joke.
https://www.michaelburge.us/2017/11/28/write-your-next-ethereum-contra…
teej · 2020-09-22
Here’s chess in Redshift http://www.michaelburge.us/2017/09/10/injecting-shellcode-to-speed-up-…
muterad_murilax · 2019-03-19
http://www.michaelburge.us/assets/articles/20190318-nes-emulator/banks…
Off-topic: Were the "bumping wheel" tiles ever used in the actual game? If so, in which level?
QuinnyPig · 2018-02-16
weavie · 2018-01-14
http://www.michaelburge.us/2017/11/28/write-your-next-ethereum-contrac…
"Pyramid Scheme is implemented using the appropriately-named Racket."
wakeywakeywakey · 2018-01-09
Unoriginal, unfunny article peddling the same tired old crypto tropes.
At least put some effort into it like the "Pyramid Scheme" [1] post or similar.
[1]: http://www.michaelburge.us/2017/11/28/write-your-next-ethereum-contrac…
brudgers · 2017-08-31
Link returns 404.
This may be the correct one, http://www.michaelburge.us/2017/08/31/roll-your-own-bitcoin-exchange.h…
toppy · 2017-08-31
Another well documented blockchain implementation in Haskell: http://www.michaelburge.us/2017/08/17/rolling-your-own-blockchain.html
MichaelBurge · 2022-05-29
Pyramid[1] was based on the last chapter of SICP, was executable after a couple weeks, and I had never written any lisp before(outside of a couple hours playing with Scheme once).
Most of that time was the code generator. An interpreter is much simpler and you could have something similar in a couple hours. Especially if you use a JSON parser to start, and switch to S-expressions once you get everything working. Or use an existing Lisp with a (read) primitive that knows the syntax.
As for "why Lisp?", it's a bit like how you never need to read the JSON spec to write JSON in practice, because they unified the syntax into a few core datatypes(primitives, arrays, objects). Besides the simple syntax, they also include a symbol table core concept that tells you how to interpret the minimal syntax.
In most languages, it's a lot of work adding a new feature to the language: Lexer to recognize token, backtracking parser, adding a new internal type, etc. In a Lisp interpreter, you just edit the symbol table to know about a new form and you're done.
Despite the core being simple, a practical Lisp environment is going to have thousands of primitives with a variety of effects on the runtime, and you'll need to look them up. Racket has about 1700[2] implemented in Chez Scheme, for example. But at least they're "only primitives", so there's uniformity in how they're used. Nothing like "What's the syntax for an anonymous function that takes 1 callback as argument that captures a local…
exdsq · 2022-04-23
I worked on a blockchain that used formal methods as part of the development workflow. The development process was essentially writing a paper that formalised an algorithm or a protocol, an implementation in Agda that would generate Haskell (or written straight in Haskell), property based tests against the paper, and then a whole business analysis/QA side where there'd be a requirements matrix against the paper with unit/integration/end-to-end tests on the features too. So you'd end up with formally checked code, property based tests, unit tests, integration tests, end to end tests, manual checks, and a few other tools too. This was a pretty slow process but on the two major product releases I worked on, I can only remember one bug slipping through and that was patched before people realised (and not a major issue either). So I think this style of development can work if you can 1) afford it, 2) afford the time to do it, and 3) formulate the requirements in such detail upfront.
Here's an example of a formal method paper that explains how a specific protocol works: https://hydra.iohk.io/build/13099985/download/1/blockchain-spec.pdf
This is a fun example of doing something similar with Coq to build a porn browser: http://www.michaelburge.us/2017/08/25/writing-a-formally-verified-porn…
And there are a couple companies out there that do this style of development as a consultancy - it's probably the closest to 'engineering' that software development can get…