<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on Andrew Helwer</title>
    <link>https://ahelwer.ca/post/</link>
    <description>Recent content in Posts on Andrew Helwer</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Fri, 08 May 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://ahelwer.ca/post/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Laptops all have built-in security tokens these days</title>
      <link>https://ahelwer.ca/post/2026-05-08-builtin-u2f/</link>
      <pubDate>Fri, 08 May 2026 00:00:00 +0000</pubDate>
      <guid>https://ahelwer.ca/post/2026-05-08-builtin-u2f/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been a fan of security tokens for a decade now and have accrued quite a collection.&#xA;This redundancy isn&amp;rsquo;t a bad thing, as security tokens are easily misplaced and the only way to recover from a lost token is using a second token that is also registered with the service you&amp;rsquo;re trying to access.&#xA;I use security tokens whenever I can!&#xA;SSH authentication, universal two-factor (U2F) authentication, passwordless local login, sudo command elevation, and git commit signing are all things I use security tokens for every day.&#xA;When I take my laptop traveling, there also travels a yubikey.&#xA;However, it took me an oddly long time to realize that I&amp;rsquo;m a relic of a bygone era.&#xA;Laptops and smartphones all have built-in security tokens these days!&#xA;I&amp;rsquo;ve been carrying around yubikeys when an even better one is built right into my macbook.&#xA;This post is about how I use security tokens, and how I configured my laptop&amp;rsquo;s secure element to replace my yubikey collection.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Let go of StackOverflow; communities must take ownership</title>
      <link>https://ahelwer.ca/post/2025-11-25-stackoverflow/</link>
      <pubDate>Tue, 25 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://ahelwer.ca/post/2025-11-25-stackoverflow/</guid>
      <description>&lt;p&gt;Despite the title this is less a directive and more a description of what has already happened, and how I came to realize it.&#xA;Still, there are many who remember StackOverflow as a revelation in the mid-2010s and think some vestige of those times remain.&#xA;They think if they make an effort to distill their confusion into a question and post it there they will be rewarded.&#xA;Perhaps some scarce few will, but a better way exists.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A supposedly worthwhile contract I&#39;ll never do again</title>
      <link>https://ahelwer.ca/post/2025-07-04-tla-contracts/</link>
      <pubDate>Fri, 04 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://ahelwer.ca/post/2025-07-04-tla-contracts/</guid>
      <description>&lt;p&gt;Here I&amp;rsquo;ll talk about a type of TLA⁺ contract I&amp;rsquo;ve worked on a few times, and why it didn&amp;rsquo;t work out as well as hoped.&#xA;I&amp;rsquo;m not trying to torpedo other peoples&amp;rsquo; contracts here - I just hope to share this experience so others can structure their TLA⁺ contracts differently, hopefully leading to greater success for both parties and industry usage of TLA⁺ as a whole.&lt;/p&gt;&#xA;&lt;h1 id=&#34;the-proposal&#34;&gt;The proposal&lt;/h1&gt;&#xA;&lt;p&gt;The contract proposal goes like this: a client wants to build a distributed system, and has read that TLA⁺ is effective at modeling such things.&#xA;Conventional wisdom holds that it&amp;rsquo;s always cheaper to catch bugs earlier in the development pipeline, and what&amp;rsquo;s earlier than the design stage?&#xA;However, they don&amp;rsquo;t have any in-house TLA⁺ knowledge and are unsure about whether they want to invest in training or hiring.&#xA;Instead, they email me a proposal: could I do a short 1-3 month contract where I specify their system in TLA⁺ for them?&#xA;The benefits of this setup are generally reasoned as follows:&lt;/p&gt;</description>
    </item>
    <item>
      <title>The current state of TLA⁺ development</title>
      <link>https://ahelwer.ca/post/2025-05-15-tla-dev-status/</link>
      <pubDate>Thu, 15 May 2025 00:00:00 +0000</pubDate>
      <guid>https://ahelwer.ca/post/2025-05-15-tla-dev-status/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://conf.tlapl.us/2025-etaps/&#34;&gt;2025 TLA⁺ Community Event&lt;/a&gt; was held last week on May 4th at McMaster University in Hamilton, Ontario, Canada.&#xA;It was a satellite event to &lt;a href=&#34;https://etaps.org/2025/&#34;&gt;ETAPS 2025&lt;/a&gt;, which I also attended, and plan to write about in the near future.&#xA;I gave a talk somewhat-hucksterishly titled &lt;em&gt;It&amp;rsquo;s never been easier to write TLA⁺ tooling!&lt;/em&gt; which I will spin into a general account of the state of TLA⁺ development here.&#xA;The conference talks were all recorded, so if you&amp;rsquo;d like this blog post in video form you can watch it below:&lt;/p&gt;</description>
    </item>
    <item>
      <title>TLA⁺ is more than a DSL for breadth-first search</title>
      <link>https://ahelwer.ca/post/2024-09-18-tla-bfs-dsl/</link>
      <pubDate>Wed, 18 Sep 2024 00:00:00 +0000</pubDate>
      <guid>https://ahelwer.ca/post/2024-09-18-tla-bfs-dsl/</guid>
      <description>&lt;p&gt;Although it isn&amp;rsquo;t usually taught that way, a lot of TLA⁺ newcomers develop the understanding that TLA⁺ is just a fancy domain-specific language (DSL) for breadth-first search.&#xA;If you want to model all possible executions of a concurrent system - so the thinking goes - all you have to do is define:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The set of variables modeling your system&lt;/li&gt;&#xA;&lt;li&gt;The values of those variables in the initial state(s)&lt;/li&gt;&#xA;&lt;li&gt;Possible actions changing those variables to generate successor states&lt;/li&gt;&#xA;&lt;li&gt;Safety invariants you want to be true in every state&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The model checker will then use breadth-first search (BFS) to churn through all possible states (&amp;amp; thus execution orders) of your system, validating your invariants.&#xA;If one of your invariants fails, BFS gives you the shortest execution path reaching that state.&#xA;It even checks for deadlock by finding states with no possible successor states.&lt;/p&gt;</description>
    </item>
    <item>
      <title>TLA⁺ Unicode support</title>
      <link>https://ahelwer.ca/post/2024-05-28-tla-unicode/</link>
      <pubDate>Tue, 28 May 2024 00:00:00 +0000</pubDate>
      <guid>https://ahelwer.ca/post/2024-05-28-tla-unicode/</guid>
      <description>&lt;p&gt;TLA⁺ was developed by Leslie Lamport, originator of \(\LaTeX\), so it&amp;rsquo;s unsurprising that TLA⁺ syntax looks pretty \(\LaTeX\)-y.&#xA;It&amp;rsquo;s a very mathy language, with much use of symbols like (among others) &lt;code&gt;\A&lt;/code&gt;,&lt;code&gt;\E&lt;/code&gt;, &lt;code&gt;/\&lt;/code&gt;, &lt;code&gt;\/&lt;/code&gt;, and &lt;code&gt;\in&lt;/code&gt; denoting \(\forall\), \(\exists\), \(\land\), \(\lor\), and \(\in\) respectively.&#xA;The language tools include a &lt;code&gt;tla2tex&lt;/code&gt; command to format TLA⁺ specs into \(\LaTeX\) for integration in research papers.&#xA;However, research papers are not where I spend the most time looking at TLA⁺.&#xA;Here&amp;rsquo;s the tale of how I brought those beautiful symbols into the code editor, and how I learned to work with others in FOSS along the way!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wrangling monotonic systems in TLA⁺</title>
      <link>https://ahelwer.ca/post/2023-11-01-tla-finite-monotonic/</link>
      <pubDate>Wed, 01 Nov 2023 00:00:00 +0000</pubDate>
      <guid>https://ahelwer.ca/post/2023-11-01-tla-finite-monotonic/</guid>
      <description>&lt;p&gt;TLA⁺ sees a lot of use modeling distributed systems.&#xA;The ability to explore all possible interleavings of events makes concurrency simple to reason about.&#xA;For this TLA⁺ uses something called finite model-checking, which is really just a breadth-first search through the entire state space.&#xA;The key here - and this really must be emphasized - is that the model is &lt;em&gt;finite&lt;/em&gt;.&#xA;There can&amp;rsquo;t be an infinite number of states, or of course the model checker will run forever.&lt;/p&gt;</description>
    </item>
    <item>
      <title>FOSS I Love</title>
      <link>https://ahelwer.ca/post/2023-04-29-sunshine-moonlight/</link>
      <pubDate>Sat, 29 Apr 2023 00:00:00 +0000</pubDate>
      <guid>https://ahelwer.ca/post/2023-04-29-sunshine-moonlight/</guid>
      <description>&lt;p&gt;Here I&amp;rsquo;ll write an ode to two closely-linked FOSS projects that have, recently, absolutely floored me with their competence &amp;amp; quality: &lt;a href=&#34;https://app.lizardbyte.dev/?lng=en&#34;&gt;Sunshine&lt;/a&gt; and &lt;a href=&#34;https://moonlight-stream.org/&#34;&gt;Moonlight&lt;/a&gt;.&#xA;These are used to stream video games over a (usually local) network.&#xA;Sunshine is a game streaming server: it runs on your PC as it chugs away doing all the heavy lifting of running the game itself, while Moonlight is a game streaming client that runs on whatever thin hardware exists where you want to play the game!&#xA;I run Sunshine on my home office workstation and Moonlight on a NVIDIA Shield Android TV connected to a 55&amp;quot; screen in the living room.&#xA;Some games are just best played on the couch!&#xA;It&amp;rsquo;s also important if you have someone you want to share the experience with instead of sequestering yourself alone in your dark Gamer Den.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Inlining SVGs for Dark Mode</title>
      <link>https://ahelwer.ca/post/2023-04-06-dark-mode/</link>
      <pubDate>Thu, 06 Apr 2023 00:00:00 +0000</pubDate>
      <guid>https://ahelwer.ca/post/2023-04-06-dark-mode/</guid>
      <description>&lt;p&gt;I will here indulge in the traditional practice of using my blog to talk about how I&amp;rsquo;m using my blog.&#xA;This page is built with the Hugo static site generator.&#xA;I recently updated it to use the latest version of the &lt;a href=&#34;https://github.com/halogenica/beautifulhugo&#34;&gt;beautifulhugo theme&lt;/a&gt;, which unbeknownst to me included a dark mode colorscheme.&#xA;Recent browsers use the &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme&#34;&gt;prefers-color-scheme&lt;/a&gt; option to automatically choose light or dark mode CSS styles, if the website supports it.&#xA;And my website did support it, not that I knew it until people started commenting that my syntax-highlighted code blocks were unreadable!&#xA;I figured out how to toggle light/dark mode in Firefox (&lt;code&gt;ctrl+shift+I&lt;/code&gt; to open the inspector pane then click the sun/moon icons), perused my website, and found an even greater problem: my treasured vector diagrams that I put so much time &amp;amp; effort into were completely invisible against a dark background!&#xA;Here&amp;rsquo;s a quick post about supporting dark mode on my blog by inlining SVGs and setting their color with the &lt;code&gt;currentColor&lt;/code&gt; CSS variable.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using TLA⁺ at Work</title>
      <link>https://ahelwer.ca/post/2023-04-05-checkpoint-coordination/</link>
      <pubDate>Wed, 05 Apr 2023 00:00:00 +0000</pubDate>
      <guid>https://ahelwer.ca/post/2023-04-05-checkpoint-coordination/</guid>
      <description>&lt;p&gt;Here&amp;rsquo;s a short report of a time I used TLA⁺ at work, with interesting results.&#xA;TLA⁺ is a formal specification language that is particularly effective when applied to concurrent &amp;amp; distributed systems.&#xA;TLA⁺ made it tractable for an ordinary software engineer to reason about a tricky distributed systems problem, and it found a bug introduced by an &amp;ldquo;optimization&amp;rdquo; I tried to add (classic).&#xA;The bug required 12 sequential steps to occur and would not have been uncovered by ordinary testing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pseudocode Showdown</title>
      <link>https://ahelwer.ca/post/2023-03-30-pseudocode/</link>
      <pubDate>Thu, 30 Mar 2023 00:00:00 +0000</pubDate>
      <guid>https://ahelwer.ca/post/2023-03-30-pseudocode/</guid>
      <description>&lt;p&gt;Last weekend I had a conversation with an undergraduate student new to computer science, who was reading &lt;a href=&#34;https://en.wikipedia.org/wiki/Introduction_to_Algorithms&#34;&gt;CLRS&lt;/a&gt;.&#xA;&amp;ldquo;I wish&amp;rdquo; they said, &amp;ldquo;that all the pseudocode in my algorithms textbook was just written in Python.&amp;rdquo;&#xA;&amp;ldquo;Ah&amp;rdquo; I said, &amp;ldquo;but textbook authors sometimes want their work to endure beyond a decade.&amp;rdquo;&#xA;&amp;ldquo;But Python&amp;rsquo;s been around for a long time&amp;rdquo; came the reply, &amp;ldquo;and it&amp;rsquo;s very readable, and you can&amp;rsquo;t execute pseudocode anyway so what&amp;rsquo;s the harm?&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Google Groups has been left to die</title>
      <link>https://ahelwer.ca/post/2023-03-08-google-groups/</link>
      <pubDate>Wed, 08 Mar 2023 00:00:00 +0000</pubDate>
      <guid>https://ahelwer.ca/post/2023-03-08-google-groups/</guid>
      <description>&lt;p&gt;An unusual topic for this blog, but worth boosting to a larger audience: Google Groups is dying.&#xA;Its epitaph is not yet inscribed on the &lt;a href=&#34;https://killedbygoogle.com/&#34;&gt;Killed by Google&lt;/a&gt; website, but the end is easily seen from here (although it should also be noted its death was called as early as &lt;a href=&#34;https://www.reddit.com/r/programming/comments/9y9qg/google_groups_is_dead_killed_by_spam/&#34;&gt;13 years ago&lt;/a&gt;).&#xA;The deficiencies in Google Groups search, supposedly Google&amp;rsquo;s forte, have long been noted.&#xA;Lately though basic features have just stopped working.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Can sanitizers find the two bugs I wrote in C&#43;&#43;?</title>
      <link>https://ahelwer.ca/post/2023-02-07-cpp-bugs-sanitized/</link>
      <pubDate>Tue, 07 Feb 2023 00:00:00 +0000</pubDate>
      <guid>https://ahelwer.ca/post/2023-02-07-cpp-bugs-sanitized/</guid>
      <description>&lt;p&gt;A few days ago I published a short post about &lt;a href=&#34;https://ahelwer.ca/post/2023-02-04-cpp-bugs&#34;&gt;two bugs I wrote&lt;/a&gt; while developing the C++ external scanner for &lt;a href=&#34;https://ahelwer.ca/post/2023-01-11-tree-sitter-tlaplus&#34;&gt;my TLA⁺ tree-sitter grammar&lt;/a&gt;.&#xA;Reactions were mixed!&#xA;Many people were supportive, but there were of course the usual drive-by claims by developers that the bugs were trivial, they would&amp;rsquo;ve found &amp;amp; fixed them inside of 20 minutes, and I was laughably incompetent for having written them in the first place.&#xA;Maybe so!&#xA;I&amp;rsquo;m a fan of formal methods primarily so I don&amp;rsquo;t &lt;em&gt;have&lt;/em&gt; to be a genius to write correct code.&#xA;In that same vein of building tools to save us from ourselves, &lt;a href=&#34;https://lobste.rs/s/ziwtjk/two_c_bugs_i_found#c_we0pip&#34;&gt;one user suggested&lt;/a&gt; building the tree-sitter grammar with the LLVM address &amp;amp; undefined behavior sanitizers enabled.&#xA;I&amp;rsquo;d used valgrind a long time ago but had never played around with sanitizers.&#xA;I was also doing some closely-associated work to build the grammar for fuzzing with LLVM&amp;rsquo;s libFuzzer, so it seemed a fun detour to check whether those sanitizers would have saved me days of debugging pain!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Two C&#43;&#43; bugs I wrote</title>
      <link>https://ahelwer.ca/post/2023-02-04-cpp-bugs/</link>
      <pubDate>Sat, 04 Feb 2023 00:00:00 +0000</pubDate>
      <guid>https://ahelwer.ca/post/2023-02-04-cpp-bugs/</guid>
      <description>&lt;p&gt;Here&amp;rsquo;s a short post about two bugs I wrote while writing C++ code for the external scanner of &lt;a href=&#34;https://ahelwer.ca/post/2023-01-11-tree-sitter-tlaplus&#34;&gt;my TLA⁺ tree-sitter grammar&lt;/a&gt;.&#xA;External scanners use handwritten C or C++ code to parse the non-context-free parts of your language.&#xA;I&amp;rsquo;ll try not to dump on C++ too hard but both of the bugs are highly ridiculous and exemplify why I hope to write as little of the language as possible for the rest of my career.&#xA;These aren&amp;rsquo;t bugs with C or C++ themselves (although honestly this point could be argued) but I share them in the hopes someone finds entertainment in my misery.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing a TLA⁺ tree-sitter grammar</title>
      <link>https://ahelwer.ca/post/2023-01-11-tree-sitter-tlaplus/</link>
      <pubDate>Wed, 11 Jan 2023 00:00:00 +0000</pubDate>
      <guid>https://ahelwer.ca/post/2023-01-11-tree-sitter-tlaplus/</guid>
      <description>&lt;p&gt;2021 saw the completion of my first substantial free software project: a &lt;a href=&#34;https://en.wikipedia.org/wiki/TLA%2B&#34;&gt;TLA⁺&lt;/a&gt; grammar for &lt;a href=&#34;https://tree-sitter.github.io/tree-sitter/&#34;&gt;tree-sitter&lt;/a&gt;, the error-tolerant incremental parser generator.&#xA;The project stabilized &amp;amp; found users over the course of 2022, then over the holidays I used it to build the &lt;a href=&#34;https://github.com/tlaplus-community/tlauc&#34;&gt;TLA⁺ Unicode Converter&lt;/a&gt;.&#xA;The new year is a time to reflect on the past and look to the future, so here in early 2023 seems ideal to publish my experience.&lt;/p&gt;&#xA;&lt;p&gt;Both TLA⁺ and tree-sitter itself ensured the project was fascinating on a technical level;&#xA;even more interesting were the social and psychological aspects of my first real involvement with the free software community!&#xA;I&amp;rsquo;ll go over why I wanted to create this project and the main technical challenges I faced doing so, then discuss the conditions that enabled me to create it and how free software development changed the way I think.&#xA;If you&amp;rsquo;d rather get the technical part in video form (with demos!), you can watch the presentation I gave at TLA⁺ Conf 2021 (slides: &lt;a href=&#34;https://ahelwer.ca/files/tla-tree-sitter.pdf&#34;&gt;pdf&lt;/a&gt;, &lt;a href=&#34;https://ahelwer.ca/files/tla-tree-sitter.odp&#34;&gt;odp&lt;/a&gt;):&#xA;&#xA;    &lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;&#xA;      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34; allowfullscreen=&#34;allowfullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube-nocookie.com/embed/qlZQErIByWU?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;&#xA;    &lt;/div&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>What&#39;s the difference between a computer and a rock?</title>
      <link>https://ahelwer.ca/post/2022-10-19-defining-computation/</link>
      <pubDate>Wed, 19 Oct 2022 00:00:00 +0000</pubDate>
      <guid>https://ahelwer.ca/post/2022-10-19-defining-computation/</guid>
      <description>&lt;p&gt;&lt;em&gt;Author&amp;rsquo;s note: I wrote this in 2017 and it languished in the drafts since then because I couldn&amp;rsquo;t think of a good conclusion.&#xA;Really this is typical of the subject matter and all this piece offers is something to chew on, if you have the interest in it or have never before considered the question.&#xA;At the time I was helping tutor a TLA⁺ seminar and had the opportunity to ask Leslie Lamport (who has thought about computation quite a bit!) what he thought of the question with all his accumulated wisdom, and he replied &amp;ldquo;it&amp;rsquo;s one of those meaningless distinctions, like the difference between alive and not-alive.&amp;rdquo;&#xA;So there you have it.&#xA;Hopefully there are enough decent jokes in this post to make it worthwhile.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Missing Prelude to The Little Typer&#39;s Trickiest Chapter</title>
      <link>https://ahelwer.ca/post/2022-10-13-little-typer-ch9/</link>
      <pubDate>Thu, 13 Oct 2022 00:00:00 +0000</pubDate>
      <guid>https://ahelwer.ca/post/2022-10-13-little-typer-ch9/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s hard to find a textbook series garnering more effusive praise than &lt;em&gt;The Little Schemer&lt;/em&gt;, &lt;em&gt;The Little Prover&lt;/em&gt;, &lt;em&gt;The Little Typer&lt;/em&gt; &amp;amp; co.&#xA;&lt;a href=&#34;https://thelittletyper.com/&#34;&gt;&lt;em&gt;The Little Typer&lt;/em&gt;&lt;/a&gt; introduces dependent type theory and is the first of the series I&amp;rsquo;ve read.&#xA;I quickly grew to appreciate &amp;amp; enjoy its dialogue-based presentation - I&amp;rsquo;m a real convert!&#xA;I might release future didactic blog posts as a dialogue rather than straight recitation of material in block paragraphs.&#xA;Humans seem to naturally find conversations more interesting than the traditional lecture format of a single voice droning on, which might explain why comment sections often get more traction than the actual article being commented upon!&#xA;Or the popularity of topic podcasts versus lecture series.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Regexes in the Z3 Theorem Prover</title>
      <link>https://ahelwer.ca/post/2022-01-19-z3-rbac/</link>
      <pubDate>Wed, 19 Jan 2022 00:00:00 +0000</pubDate>
      <guid>https://ahelwer.ca/post/2022-01-19-z3-rbac/</guid>
      <description>&lt;p&gt;&lt;em&gt;Republished from Teleport&amp;rsquo;s official blog (&lt;a href=&#34;https://goteleport.com/blog/z3-rbac/&#34;&gt;link&lt;/a&gt;). I received compensation from Teleport for writing this post.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Z3 is a satisfiability modulo theories (SMT) solver developed by Microsoft Research.&#xA;With a description like that you&amp;rsquo;d expect it to be restricted to esoteric corners of the computerized mathematics world, but it&amp;rsquo;s made impressive inroads addressing conventional software engineering needs: analyzing &lt;a href=&#34;https://www.microsoft.com/en-us/research/blog/hyperscale-cloud-reliability-and-the-art-of-organic-collaboration/&#34;&gt;network ACLs&lt;/a&gt; and &lt;a href=&#34;https://github.com/Z3Prover/FirewallChecker&#34;&gt;firewalls&lt;/a&gt; in Microsoft Azure, for example.&#xA;Z3 is used to answer otherwise-unanswerable questions like &amp;ldquo;are these two firewalls equivalent?&amp;rdquo; or &amp;ldquo;does this set of network ACLs violate any security rules?&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Two pictures of quantum computation</title>
      <link>https://ahelwer.ca/post/2020-12-06-sum-over-paths/</link>
      <pubDate>Thu, 10 Dec 2020 00:00:00 +0000</pubDate>
      <guid>https://ahelwer.ca/post/2020-12-06-sum-over-paths/</guid>
      <description>&lt;p&gt;Interpretations of quantum mechanics are boring. Boring!&#xA;Maybe the universe has a strict partition between quantum and non-quantum.&#xA;Maybe there are a bunch of parallel universes with limited crosstalk.&#xA;Or maybe it&amp;rsquo;s whatever the Bohmian mechanics people are talking about.&#xA;Shut up and calculate, I think.&#xA;I don&amp;rsquo;t say this out of some disdain for idle philosophizing or to put on airs of a salt-of-the-earth laborer in the equation mines.&#xA;It&amp;rsquo;s just there are so, &lt;em&gt;so&lt;/em&gt; many interesting things you can learn about in quantum theory without ever going &lt;em&gt;near&lt;/em&gt; the interpretation question.&#xA;Yet it&amp;rsquo;s many peoples&amp;rsquo; first &amp;amp; last stop.&#xA;Rise above!&lt;/p&gt;</description>
    </item>
    <item>
      <title>How do you reason about a probabilistic distributed system?</title>
      <link>https://ahelwer.ca/post/2020-09-11-probabilistic-distsys/</link>
      <pubDate>Fri, 11 Sep 2020 00:00:00 +0000</pubDate>
      <guid>https://ahelwer.ca/post/2020-09-11-probabilistic-distsys/</guid>
      <description>&lt;h2 id=&#34;in-which-i-am-stunted-upon-by-coin-flips&#34;&gt;In which I am stunted upon by coin flips&lt;/h2&gt;&#xA;&lt;p&gt;Wasn&amp;rsquo;t too long ago that I felt pretty good about my knowledge of distributed systems.&#xA;All someone &lt;em&gt;really&lt;/em&gt; needed in order to understand them, I thought, was a &lt;a href=&#34;https://www.youtube.com/watch?v=JEpsBg0AO6o&#34;&gt;thorough understanding of the paxos protocol&lt;/a&gt; and a willingness to reshape your brain in the image of TLA⁺.&#xA;Maybe add a dash of conflict-free replicated datatypes, just so you know what &amp;ldquo;eventual consistency&amp;rdquo; means.&#xA;Past that it&amp;rsquo;s just some optimizations and mashups which come easily to your TLA⁺-addled brain.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Meditation</title>
      <link>https://ahelwer.ca/post/2020-08-29-meditation/</link>
      <pubDate>Sat, 29 Aug 2020 00:00:00 +0000</pubDate>
      <guid>https://ahelwer.ca/post/2020-08-29-meditation/</guid>
      <description>&lt;p&gt;This isn&amp;rsquo;t going to be a post about how adopting a several-thousand-year-old practice &lt;a href=&#34;https://www.independent.co.uk/life-style/health-and-families/healthy-living/mindfulness-sells-buddhist-meditation-teachings-neoliberalism-attention-economy-a8225676.html&#34;&gt;can make you a better servant of capital&lt;/a&gt;.&#xA;Instead, let&amp;rsquo;s talk about when I feel the lowest of the low.&#xA;It comes after spending any number of hours on my computer, maybe even a full day, endlessly circling around different websites in search of stimulation, the quick jolt that comes with learning an interesting fact or watching a funny short video or seeing someone get dunked on for having a bad political opinion.&#xA;I&amp;rsquo;ll eventually wake into a state that could be identified as conscious thought, look back on the many (genuinely exciting!) things I wanted to learn or do that day, and contrast it with what I actually did.&#xA;What did I actually do? I honestly don&amp;rsquo;t even know. I doubt I could list even three things I&amp;rsquo;d read or experienced the entire preceding eight hours.&#xA;At this moment I feel very bad. I know one of the ~30,000 days in my life is gone.&#xA;And I didn&amp;rsquo;t get anything out of it.&#xA;Actually, I&amp;rsquo;m worse off, because spending your time in this way just begets even more time spent in this way.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Taking my home work setup seriously</title>
      <link>https://ahelwer.ca/post/2020-08-14-home-ergonomics/</link>
      <pubDate>Fri, 14 Aug 2020 00:00:00 +0000</pubDate>
      <guid>https://ahelwer.ca/post/2020-08-14-home-ergonomics/</guid>
      <description>&lt;p&gt;The headlines don&amp;rsquo;t lie.&#xA;&lt;a href=&#34;https://www.crn.com/news/mobility/microsoft-extends-work-from-home-option-through-january&#34;&gt;Microsoft&lt;/a&gt;, &lt;a href=&#34;https://www.cnn.com/2020/07/27/tech/google-work-from-home-extension/index.html&#34;&gt;Google&lt;/a&gt;, &lt;a href=&#34;https://www.theverge.com/2020/7/15/21326017/amazon-work-from-home-extend-january-2021-corporate&#34;&gt;Amazon&lt;/a&gt;, &lt;a href=&#34;https://www.cnbc.com/2020/08/06/facebook-will-allow-employees-to-work-remotely-until-july-2021.html&#34;&gt;Facebook&lt;/a&gt;, and a whole host of other tech companies have announced employees will be working from home until early-mid 2021.&#xA;There are reasons to believe this will be pushed back; even if the &lt;a href=&#34;https://blogs.sciencemag.org/pipeline/archives/2020/04/15/coronavirus-vaccine-prospects&#34;&gt;staggeringly ambitious&lt;/a&gt; timelines for vaccine development are met, &lt;a href=&#34;https://www.cbc.ca/player/play/1772035651845&#34;&gt;a vaccine might not be a silver bullet&lt;/a&gt; and the pandemic could require management for the next 2-3 years.&#xA;As a software engineer in big tech&amp;rsquo;s orbit, this means it&amp;rsquo;s time to settle in for the long haul and take my home work setup seriously.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Doing a math assignment with the Lean theorem prover</title>
      <link>https://ahelwer.ca/post/2020-04-05-lean-assignment/</link>
      <pubDate>Sun, 05 Apr 2020 00:00:00 +0000</pubDate>
      <guid>https://ahelwer.ca/post/2020-04-05-lean-assignment/</guid>
      <description>&lt;p&gt;&lt;em&gt;Note: this post was written for Lean 3; the latest version, Lean 4, is a very different language.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Turn back the clock to 2009: a confused physics major newly infatuated with math and computer science, I enrolled in MATH 273: Numbers and Proofs at the University of Calgary.&#xA;This wasn&amp;rsquo;t my first encounter with mathematical proof; in first-year calculus I&amp;rsquo;d mastered rote regurgitation of delta-epsilon proofs.&#xA;Despite writing out several dozen, their meaning never progressed beyond a sort of incantation I can summon to this day (for every \( \epsilon &amp;gt; 0 \) there exists a \( \delta &amp;gt; 0 \) such that&amp;hellip;).&#xA;We were told on the first day of MATH 273 that the purpose of proof is to compel belief.&#xA;This was a bright start but sadly marked the beginning of a deeply embarrassing semester reaching its nadir when I asked the professor &amp;ldquo;how do we prove a definition&amp;rdquo; fully two-thirds of the way through the course.&#xA;I got a B-.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simulating physical reality with a quantum computer</title>
      <link>https://ahelwer.ca/post/2019-12-21-quantum-chemistry/</link>
      <pubDate>Sat, 21 Dec 2019 00:00:00 +0000</pubDate>
      <guid>https://ahelwer.ca/post/2019-12-21-quantum-chemistry/</guid>
      <description>&lt;h2 id=&#34;quantum-computers-not-just-for-breaking-rsa&#34;&gt;Quantum Computers: Not Just for Breaking RSA&lt;/h2&gt;&#xA;&lt;p&gt;There&amp;rsquo;s no denying it, Shor&amp;rsquo;s algorithm was a blockbuster result.&#xA;The thought of an exotic new computer breaking all widely-used public-key crypto plays well with the public imagination, and so you&amp;rsquo;d be forgiven for believing quantum computing is ultimately a sort of billions-dollar make-work project for software engineers: forcing our profession to relive a Y2K-like mass upgrade of old systems to new, &lt;a href=&#34;https://blog.cloudflare.com/the-tls-post-quantum-experiment/&#34;&gt;quantum-safe encryption algorithms&lt;/a&gt;.&#xA;Great for consultants, bad for people who want resources invested toward actual social good.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Walking the faster-than-light tightrope</title>
      <link>https://ahelwer.ca/post/2018-12-07-chsh/</link>
      <pubDate>Fri, 07 Dec 2018 00:00:00 +0000</pubDate>
      <guid>https://ahelwer.ca/post/2018-12-07-chsh/</guid>
      <description>&lt;h2 id=&#34;measurement-and-signaling-in-the-nonlocal-world&#34;&gt;Measurement and signaling in the nonlocal world&lt;/h2&gt;&#xA;&lt;p&gt;Popular understanding of quantum mechanics usually focuses on three learning objectives:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;At small scales, particle properties (position, momentum, spin, etc.) are in &lt;em&gt;superposition&lt;/em&gt; - they don&amp;rsquo;t have a definite value, but instead are &amp;ldquo;smeared&amp;rdquo; across multiple possible values.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Measuring&lt;/em&gt; a superposed particle property makes it &lt;em&gt;collapse&lt;/em&gt; probabilistically to a specific value. We don&amp;rsquo;t simply discover the property&amp;rsquo;s pre-existing value; rather the property is forced to take on a definite value by the act of measurement.&lt;/li&gt;&#xA;&lt;li&gt;Particles can be &lt;em&gt;entangled&lt;/em&gt;, which means operations on one affect the other instantaneously across arbitrarily-large distances (known as &lt;em&gt;nonlocality&lt;/em&gt;); however, this has restrictions and cannot be used for faster-than-light (FTL) communication.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;img src=&#34;mob.jpeg&#34; alt=&#34;18th century woodcut of a mob of men wielding clubs&#34;&gt;&#xA;&lt;div style=&#34;text-align: center;&#34;&gt;&lt;em&gt;Enraged Bohmian Mechanics enthusiasts approach the comment section (&lt;a href=&#34;https://wellcomecollection.org/&#34;&gt;Source: Wellcome Collection&lt;/a&gt;)&lt;/em&gt;&lt;/div&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Checking Firewall Equivalence with Z3</title>
      <link>https://ahelwer.ca/post/2018-02-13-z3-firewall/</link>
      <pubDate>Tue, 13 Feb 2018 00:00:00 +0000</pubDate>
      <guid>https://ahelwer.ca/post/2018-02-13-z3-firewall/</guid>
      <description>&lt;p&gt;Lessons I&amp;rsquo;ve learned from software engineering are uniformly cynical:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Abstraction almost always fails; you can&amp;rsquo;t build something on top of a system without understanding how that system works.&lt;/li&gt;&#xA;&lt;li&gt;Bleeding-edge methods are a recipe for disaster&lt;/li&gt;&#xA;&lt;li&gt;Everything good is hype and you&amp;rsquo;ll only ever get a small fraction of the utility being promised.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Imagine my surprise, then, when the Z3 constraint solver from Microsoft Research effortlessly dispatched the thorniest technical problem I&amp;rsquo;ve been given in my short professional career.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Formal Verification, Casually Explained</title>
      <link>https://ahelwer.ca/post/2018-02-12-formal-verification/</link>
      <pubDate>Mon, 12 Feb 2018 00:00:00 +0000</pubDate>
      <guid>https://ahelwer.ca/post/2018-02-12-formal-verification/</guid>
      <description>&lt;h2 id=&#34;why-are-we-here&#34;&gt;Why are we here?&lt;/h2&gt;&#xA;&lt;p&gt;What guarantees does formal verification provide?&#xA;This question rests at the apex of a hierarchy of inquiry extending all the way down to how we can know anything at all!&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-do-we-mean-by-software-correctness&#34;&gt;What do we mean by software correctness?&lt;/h2&gt;&#xA;&lt;p&gt;There are precisely two different ways for a piece of software to be correct:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The supreme deity of the universe descends from the heavens and decrees, with all the weight of Objective Truth, that a certain piece of software is correct.&lt;/li&gt;&#xA;&lt;li&gt;We have a list of things we want the software to do, and use logic to prove the software does these things.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Crafty readers will come up with, like, twenty different caveats to the second definition.&#xA;I encourage it! Take a minute to unearth some of the hidden assumptions. Good? Good.&#xA;I&amp;rsquo;ll talk about those hidden assumptions in greater detail below, but the point I want to make is this: &lt;em&gt;there is no such thing as inherently correct software&lt;/em&gt;.&#xA;Your wacky program could say 1 * 1 = 2, and that isn&amp;rsquo;t incorrect in any objective sense - if that&amp;rsquo;s how you want your program to behave, heck, knock yourself out.&#xA;We call our list of things we want the software to do a &lt;em&gt;specification&lt;/em&gt;.&#xA;A program is only correct (or incorrect) relative to its specification; if the program is correct relative to its specification, we say it &lt;em&gt;implements&lt;/em&gt; or &lt;em&gt;refines&lt;/em&gt; the specification.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
