rec-def: Minesweeper case study
I’m on the train back from MuniHac, where I gave a talk about the rec-def library that I have excessively blogged about recently (here, here, here and here). I got quite flattering comments about that...
View Articlerec-def: Dominators case study
More ICFP-inspired experiments using the rec-def library: In Norman Ramsey’s very nice talk about his Functional Pearl “Beyond Relooper: Recursive Translation of Unstructured Control Flow to Structured...
View Articlerec-def: Program analysis case study
At this week’s International Conference on Functional Programming I showed my rec-def Haskell library to a few people. As this crowd appreciates writing compilers, and example from the realm of program...
View Articlerec-def: Behind the scenes
A week ago I wrote about the rec-def Haskell library, which allows you to write more recursive definitions, such as in this small example:let s1 = rInsert 23 s2 s2 = rInsert 42 s1 in getR s1This will...
View ArticleMore recursive definitions
Haskell is a pure and lazy programming language, and the laziness allows us to write some algorithms very elegantly, by recursively referring to already calculated values. A typical example is the...
View ArticleThe Via Alpina red trail through Slovenia
This July my girlfriend and I hiked the Slovenian part of the Red Trail of the Via Alpina, from the edge of the Julian Alps to Trieste, and I’d like to share some observations and tips that we might...
View ArticleTelegram bots in Python made easy
A while ago I set out to get some teenagers interested in programming, and thought about a good way to achieve that. A way that allows them to get started with very little friction, build something...
View ArticleZero-downtime upgrades of Internet Computer canisters
TL;DR: Zero-downtime upgrades are possible if you stick to the basic actor model.BackgroundDFINITY’s Internet Computer provides a kind of serverless compute platform, where the services are...
View ArticleHow to audit an Internet Computer canister
I was recently called upon by Origyn to audit the source code of some of their Internet Computer canisters (“canisters” are services or smart contracts on the Internet Computer), which were written in...
View ArticleA mostly allocation-free optional type
The Motoko programming language has a built-in data type for optional values, named ?t with values null and ?v (for v : t); this is the equivalent of Haskell’s Maybe, Ocaml’s option or Rust’s Option....
View ArticleA Candid explainer: Quirks
This is the fifth and final post in a series about the interface description language Candid.If you made it this far, you now have a good understanding of what Candid is, what it is for and how it is...
View ArticleA Candid explainer: Language integration
This is the forth post in a series about the interface description language Candid.Now for something completely different: How does Candid interact with the various host languages, i.e. the actual...
View ArticleA Candid explainer: Opt is special
This is the third post in a series about the inteface description language Candid.The record extension problemInitially, the upgrade rules of Candid were a straight-forward application of the canonical...
View ArticleA Candid explainer: Safe higher-order upgrades
This is the second post in a series about the inteface description language Candid.Safe upgradesA central idea behind Candid is that services evolve over time, and so also their interfaces evolve. As...
View ArticleA Candid explainer: The rough idea
One of the technologies that was created by DFINITY as we built the “Internet Computer” is Candid. Candid isa language to describe the interface of a service, with named methods, arguments and...
View ArticleSweet former employee appreciation
Two months ago was my last day of working as an employee for DFINITY, and as I mentioned in the previous blog post, one of my main contributions was the introduction and maintenance of the Interface...
View ArticleLeaving DFINITY
Last Thursday was my last working day at DFINITY. There are various reasons why I felt that after almost three years the DFINITY Foundation isn’t quite the right place for me anymore, and this plan has...
View ArticleVerifying the code of the Internet Identity service
The following post was meant to be posted at https://forum.dfinity.org/, but that discourse instance didn’t like it; maybe too much inline code, so I’m posting it here instead. To my regular blog...
View ArticleDon’t think, just defunctionalize
TL;DR: CPS-conversion and defunctionalization can help you to come up with a constant-stack algorithm.Update: Turns out I inadvertedly plagiarized the talk The Best Refactoring You’ve Never Heard Of by...
View ArticleNamed goals in Coq
TL;DR: Some mildly tricky tricks allow you to select subgoals by name, like in Isabelle. This leads to more readable proofs, and proofs that are more robust against changes.The need for case...
View Article