<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> <channel> <title>hyPiRion</title> <description>Blog posts by Jean Niklas L'orange (hyPiRion)</description> <link>https://hypirion.com</link> <atom:link href="https://hypirion.com/rss/all" rel="self" type="application/rss+xml" /> <ttl>60</ttl> <language>en-us</language> <lastBuildDate>Sat, 20 Jul 2024 16:30:00 +0200</lastBuildDate> <item> <title>Making Code Generators Pleasant to Use</title> <description>I feel that code generators for communication protocols are a chore to use. Let's see why that's the case, and how we can improve them.</description> <pubDate>Sat, 20 Jul 2024 16:30:00 +0200</pubDate> <link>https://hypirion.com/musings/making-code-generators-pleasant-to-use</link> <guid isPermaLink="true">https://hypirion.com/musings/making-code-generators-pleasant-to-use</guid> </item> <item> <title>Why I'm Not Nixing My OCaml Builds (Yet)</title> <description>I could ensure my OCaml builds are 100% reproducible, but what's the cost?</description> <pubDate>Fri, 21 Jun 2024 11:49:11 +0200</pubDate> <link>https://hypirion.com/musings/no-nix-for-my-ocaml-builds-yet</link> <guid isPermaLink="true">https://hypirion.com/musings/no-nix-for-my-ocaml-builds-yet</guid> </item> <item> <title>Getting OCaml Through the Eye of a Needle</title> <description>Let's see why OCaml isn't user friendly for web services at the moment, and how we can fix that.</description> <pubDate>Mon, 20 May 2024 19:50:00 +0200</pubDate> <link>https://hypirion.com/musings/getting-ocaml-through-the-eye-of-a-needle</link> <guid isPermaLink="true">https://hypirion.com/musings/getting-ocaml-through-the-eye-of-a-needle</guid> </item> <item> <title>Implementing System-Versioned Tables in Postgres</title> <description>There's no official support for system-versioned tables in Postgres yet, and the temporal extensions aren't supported on Azure/AWS/GCP. Let's implement it ourselves with 3 triggers and an index.</description> <pubDate>Sun, 21 Jan 2024 21:20:00 +0100</pubDate> <link>https://hypirion.com/musings/implementing-system-versioned-tables-in-postgres</link> <guid isPermaLink="true">https://hypirion.com/musings/implementing-system-versioned-tables-in-postgres</guid> </item> <item> <title>Haunting Down Errors in Go</title> <description>Phantom types won't revolutionise your Go debugging experience, but it can make it slightly better! Here's one way they can help out.</description> <pubDate>Sun, 06 Aug 2023 20:43:00 +0200</pubDate> <link>https://hypirion.com/musings/haunting-down-errors-in-go</link> <guid isPermaLink="true">https://hypirion.com/musings/haunting-down-errors-in-go</guid> </item> <item> <title>Go-stly Access Rights</title> <description>With phantom types, we can make a static access control system in Go that will detect errors and act as easy-to-read documentation. Here's how you do it.</description> <pubDate>Sun, 23 Jul 2023 16:00:00 +0200</pubDate> <link>https://hypirion.com/musings/go-stly-access-rights</link> <guid isPermaLink="true">https://hypirion.com/musings/go-stly-access-rights</guid> </item> <item> <title>Spectral Contexts in Go</title> <description>Go has phantom types, and we can use them to attach singletons to contexts. Here is a short post on how to do just that.</description> <pubDate>Sun, 18 Jun 2023 19:00:00 +0200</pubDate> <link>https://hypirion.com/musings/spectral-contexts-in-go</link> <guid isPermaLink="true">https://hypirion.com/musings/spectral-contexts-in-go</guid> </item> <item> <title>GraphQL and Type Systems</title> <description>Like Go, GraphQL isn't at the forefront of type theory. Let's look at what I miss and whether it would be sensible to add them to the specification. </description> <pubDate>Sun, 28 May 2023 17:45:00 +0200</pubDate> <link>https://hypirion.com/musings/graphql-and-type-systems</link> <guid isPermaLink="true">https://hypirion.com/musings/graphql-and-type-systems</guid> </item> <item> <title>On Expectations and Fun</title> <description>A blog usually has its style and shape, and your visitors expects that to continue on. But what do you do if you both want to keep that expectation while also making posts in a completely diferent style? </description> <pubDate>Mon, 26 Dec 2022 15:30:00 +0100</pubDate> <link>https://hypirion.com/musings/on-expectations-and-fun</link> <guid isPermaLink="true">https://hypirion.com/musings/on-expectations-and-fun</guid> </item> <item> <title>Teaching DucKey to Quack 🦆</title> <description>I've wanted to get my Moonlander keyboard's duck key to print the duck emoji for a long time. Here's how I did it! </description> <pubDate>Thu, 27 Oct 2022 22:50:00 +0200</pubDate> <link>https://hypirion.com/musings/duckey</link> <guid isPermaLink="true">https://hypirion.com/musings/duckey</guid> </item> <item> <title>Smaller Static Sites with New Formats</title> <description>Your static site is probably small enough already, but here are some tricks to make the fonts and images even smaller. I cover the things I do with fonts, as well as some utility scripts I use with Jekyll to automate the entire "convert to all the different formats"-problem new formats cause (as one needs to deal with backwards compatibility). </description> <pubDate>Mon, 13 Jun 2022 22:11:00 +0200</pubDate> <link>https://hypirion.com/musings/smaller-static-sites-with-new-formats</link> <guid isPermaLink="true">https://hypirion.com/musings/smaller-static-sites-with-new-formats</guid> </item> <item> <title>Type-Safe HTTP Servers in Go via Generics</title> <description>When generics comes out, here's a possible way to use it for typed HTTP servers in Go. As a bonus, there's a short "rant" about how the implementation causes functional programming to be hard. </description> <pubDate>Fri, 08 Oct 2021 20:48:00 +0200</pubDate> <link>https://hypirion.com/musings/type-safe-http-servers-in-go-via-generics</link> <guid isPermaLink="true">https://hypirion.com/musings/type-safe-http-servers-in-go-via-generics</guid> </item> <item> <title>Row Polymorphism In Go?!</title> <description>A thought experiment on how one could add row polymorphism to Go.</description> <pubDate>Sun, 29 Sep 2019 23:04:00 +0200</pubDate> <link>https://hypirion.com/musings/row-polymorphism-in-go</link> <guid isPermaLink="true">https://hypirion.com/musings/row-polymorphism-in-go</guid> </item> <item> <title>Wibbly Wobbly, Timey Wimey</title> <description>Whoever assumed asymptotic complexity to be easy has not considered to test it in the real world.</description> <pubDate>Sun, 23 Sep 2018 23:50:03 +0200</pubDate> <link>https://hypirion.com/musings/timey-wimey</link> <guid isPermaLink="true">https://hypirion.com/musings/timey-wimey</guid> </item> <item> <title>A Resilient Git Dependency Algorithm</title> <description>What do we do when we can't compare dependency versions?</description> <pubDate>Mon, 26 Mar 2018 17:37:00 +0200</pubDate> <link>https://hypirion.com/musings/a-resilient-git-dependency-algorithm</link> <guid isPermaLink="true">https://hypirion.com/musings/a-resilient-git-dependency-algorithm</guid> </item> <item> <title>Lock Files Are Not the Only Option</title> <description>If you want to make a package manager, think before jumping straight to lock files.</description> <pubDate>Sat, 26 Aug 2017 23:06:11 +0200</pubDate> <link>https://hypirion.com/musings/lockfiles-are-not-the-only-option</link> <guid isPermaLink="true">https://hypirion.com/musings/lockfiles-are-not-the-only-option</guid> </item> <item> <title>From Transducers to Conduits and Back Again</title> <description>By realising that transducers are conduits in disguise, we can create a transducer interface that is much easier to use than the current one.</description> <pubDate>Mon, 11 Jul 2016 13:34:01 +0200</pubDate> <link>https://hypirion.com/musings/transducers-to-conduits-and-back</link> <guid isPermaLink="true">https://hypirion.com/musings/transducers-to-conduits-and-back</guid> </item> <item> <title>Clojure's Transducers in Haskell</title> <description>Let's implement Clojure's Transducers in Haskell!</description> <pubDate>Mon, 23 May 2016 14:20:56 +0200</pubDate> <link>https://hypirion.com/musings/haskell-transducers</link> <guid isPermaLink="true">https://hypirion.com/musings/haskell-transducers</guid> </item> <item> <title>(rationalize inlein)</title> <description>This post describes what the new project Inlein bring to the table for Clojurians.</description> <pubDate>Mon, 14 Mar 2016 02:22:28 +0100</pubDate> <link>https://hypirion.com/musings/inlein-rationale</link> <guid isPermaLink="true">https://hypirion.com/musings/inlein-rationale</guid> </item> <item> <title>The Simplest Collection</title> <description>This blogpost explores what the simplest collection type is, and whether it is useful or not.</description> <pubDate>Sun, 10 Jan 2016 01:51:34 +0100</pubDate> <link>https://hypirion.com/musings/the-simplest-collection</link> <guid isPermaLink="true">https://hypirion.com/musings/the-simplest-collection</guid> </item> <item> <title>Parsing TeX with Recursive Transducers</title> <description>This blogpost experiment with recursive transducers, and how one could use them for composable nanopass parsers.</description> <pubDate>Thu, 12 Nov 2015 22:12:48 +0100</pubDate> <link>https://hypirion.com/musings/recursive-transducers</link> <guid isPermaLink="true">https://hypirion.com/musings/recursive-transducers</guid> </item> <item> <title>Commit Times and Work Culture</title> <description>Punchcards for a collection of projects may give you some indication of work culture.</description> <pubDate>Sun, 27 Sep 2015 17:55:23 +0200</pubDate> <link>https://hypirion.com/musings/git-multipunchcard</link> <guid isPermaLink="true">https://hypirion.com/musings/git-multipunchcard</guid> </item> <item> <title>Persistent Vector Performance Summarised</title> <description>The last post in the persistent vector series, explaining why 32 is chosen as branching factor and what "effectively constant time" is.</description> <pubDate>Mon, 23 Feb 2015 01:38:26 +0100</pubDate> <link>https://hypirion.com/musings/persistent-vector-performance-summarised</link> <guid isPermaLink="true">https://hypirion.com/musings/persistent-vector-performance-summarised</guid> </item> <item> <title>Swearjure is Turing Complete</title> <description>This blog post dives into new discoveries in Swearjure, which makes it possible to prove that it is Turing complete.</description> <pubDate>Tue, 03 Feb 2015 18:04:58 +0100</pubDate> <link>https://hypirion.com/musings/swearjure-is-turing-complete</link> <guid isPermaLink="true">https://hypirion.com/musings/swearjure-is-turing-complete</guid> </item> <item> <title>Persistent Vector Performance</title> <description>This is a very detailed blogpost related to persistent/transient vector performance, with benchmarks and plots.</description> <pubDate>Sun, 25 Jan 2015 00:52:09 +0100</pubDate> <link>https://hypirion.com/musings/persistent-vector-performance</link> <guid isPermaLink="true">https://hypirion.com/musings/persistent-vector-performance</guid> </item> <item> <title>Understanding Clojure's Transients</title> <description>Ever wondered how Clojure's transients work? Or perhaps you don't know how to use transients properly? Both things will be explained in this blog post.</description> <pubDate>Sun, 19 Oct 2014 19:28:56 +0200</pubDate> <link>https://hypirion.com/musings/understanding-clojure-transients</link> <guid isPermaLink="true">https://hypirion.com/musings/understanding-clojure-transients</guid> </item> <item> <title>Improving RRB-Tree Performance through Transience</title> <description>A master's thesis properly describing the persistent vector, the RRB-tree as well as optimisations on the RRB-tree.</description> <pubDate>Sat, 19 Jul 2014 23:06:26 +0200</pubDate> <link>https://hypirion.com/musings/thesis</link> <guid isPermaLink="true">https://hypirion.com/musings/thesis</guid> </item> <item> <title>Understanding Clojure's Persistent Vectors, pt. 3</title> <description>In this blog post, we will have a look at how we reduce constant factors in the persistent vector through a tail implementation.</description> <pubDate>Thu, 10 Apr 2014 01:12:31 +0200</pubDate> <link>https://hypirion.com/musings/understanding-persistent-vector-pt-3</link> <guid isPermaLink="true">https://hypirion.com/musings/understanding-persistent-vector-pt-3</guid> </item> <item> <title>Advanced Clojure/Java Mixing in Leiningen</title> <description>An example of a Leiningen project using several java/clojure compilation steps.</description> <pubDate>Sun, 09 Feb 2014 01:56:12 +0100</pubDate> <link>https://hypirion.com/musings/advanced-intermixing-java-clj</link> <guid isPermaLink="true">https://hypirion.com/musings/advanced-intermixing-java-clj</guid> </item> <item> <title>Suboptimal Optimisations</title> <description>Sometimes, adding mallocs to a program increases performance.</description> <pubDate>Mon, 30 Dec 2013 13:41:34 +0100</pubDate> <link>https://hypirion.com/musings/suboptimal-optimisations</link> <guid isPermaLink="true">https://hypirion.com/musings/suboptimal-optimisations</guid> </item> <item> <title>Understanding Clojure's Persistent Vectors, pt. 2</title> <description>This is part 2 of the blog series which explains Clojure's Persistent Vectors.</description> <pubDate>Thu, 24 Oct 2013 17:51:20 +0200</pubDate> <link>https://hypirion.com/musings/understanding-persistent-vector-pt-2</link> <guid isPermaLink="true">https://hypirion.com/musings/understanding-persistent-vector-pt-2</guid> </item> <item> <title>Understanding Clojure's Persistent Vectors, pt. 1</title> <description>Ever wondered how Clojure's persistent vector actually works? This is part 1 of a blog series which aims to explain them.</description> <pubDate>Wed, 25 Sep 2013 14:46:53 +0200</pubDate> <link>https://hypirion.com/musings/understanding-persistent-vector-pt-1</link> <guid isPermaLink="true">https://hypirion.com/musings/understanding-persistent-vector-pt-1</guid> </item> <item> <title>Read RFC Documents in HTML Form</title> <description>Finding bugs in RFCs, and why you should read them in HTML form.</description> <pubDate>Sat, 24 Aug 2013 14:58:02 +0200</pubDate> <link>https://hypirion.com/musings/read-rfcs-in-html</link> <guid isPermaLink="true">https://hypirion.com/musings/read-rfcs-in-html</guid> </item> <item> <title>Hello World in Swearjure</title> <description>A working Clojure program with a minimal amount of alphanumerics.</description> <pubDate>Sun, 31 Mar 2013 18:47:31 +0200</pubDate> <link>https://hypirion.com/musings/hello-swearjure</link> <guid isPermaLink="true">https://hypirion.com/musings/hello-swearjure</guid> </item> <item> <title>How To Cancel A Blocking Read In Java</title> <description>Cancelling blocking reads in Java is anything but sane.</description> <pubDate>Thu, 21 Feb 2013 17:17:27 +0100</pubDate> <link>https://hypirion.com/musings/how-to-cancel-a-blocking-read</link> <guid isPermaLink="true">https://hypirion.com/musings/how-to-cancel-a-blocking-read</guid> </item> <item> <title>A Language Without Conditionals</title> <description>Can you learn anything valuable by removing programming constructs?</description> <pubDate>Sun, 10 Feb 2013 13:50:51 +0100</pubDate> <link>https://hypirion.com/musings/without-conditionals</link> <guid isPermaLink="true">https://hypirion.com/musings/without-conditionals</guid> </item> <item> <title>FBHC 2013 Intro Round in Clojure</title> <description>In which an unfit language is surprisingly fit.</description> <pubDate>Tue, 29 Jan 2013 01:24:14 +0100</pubDate> <link>https://hypirion.com/musings/fbhc-2013-in-clojure</link> <guid isPermaLink="true">https://hypirion.com/musings/fbhc-2013-in-clojure</guid> </item> <item> <title>Swearjure - Clojure without alphanumerics</title> <description>Is Clojure turing complete without alphanumeric characters?</description> <pubDate>Wed, 09 Jan 2013 18:14:34 +0100</pubDate> <link>https://hypirion.com/musings/swearjure</link> <guid isPermaLink="true">https://hypirion.com/musings/swearjure</guid> </item> </channel> </rss>