RSS Amplifier

Blog

Caleb Helbling

Programming Languages & Systems

helbli.ngRSS feed ↗9 posts

Latest posts

From Directed Graph Hashing to Directed Graph Languages

Over the years I’ve been gradually chipping away at the problem of graph hashing. For those who are unfamiliar with graph hashing, here is the basic problem: how do you extend hashing algorithms so that they can operate over directed graphs and not just over strings or trees. This problem has proved to be substantially deep. Hashing trees is very simple: simply recursively hash children nodes in…

The Magical Game Networking Stack

My first commercially successful foray into the world of computer programming came with my contributions to a project called pyspades, an open source server for the game Ace of Spades. For those who are not familiar, Ace of Spades came out shortly after Minecraft made it big, and unlike Minecraft which was focused on sandbox exploration, Ace of Spades was a free multiplayer voxel (blocky) first…

Gotta Monomorphize Em All

As a functional programming language, Juniper supports the primary feature of any functional language - first class functions. Since Juniper targets Arduino compatible systems that have minimal amounts of RAM, we would like to avoid heap allocations. Indeed, if you look at recommendation guides for embedded system programming, you will find that heap allocation shouldn’t be used or minimized. This…

Written Proof of Work

Large language models are already disrupting many areas of written work such as education, news stories and book publishing. The implications for education are obvious - students can cheat on essay writing by simply offloading all the hard work to the computer. Classical plagiarism checking tools are useless, and textual style of writing can be changed with a little prompt engineering. The story…

Monad Tutorial

Here is my version of “yet another monad tutorial”. In this tutorial I will not cover specific examples of Monad implementations in detail since I think that this distracts from the goal of understanding the overall abstraction. I will also not cover some of the simpler type classes such as Functor and Monoid in detail, since these aren’t really that important for understanding Monad.

MaestroFlow - Composing Reactive Programs

Interprocess communication has been around for quite some time, but nobody seems to use it outside of simple command line programs. Instead, software exists in a walled ecosystem, where programs are unable to communicate except for copy/paste and saving files. MaestroFlow is a program that aims to solve these issues. MaestroFlow consists of a centralized server with a GUI display, and programs…

Continuous Approximations of Logical Functions

Logical functions are critical parts of almost every computer program. However, optimization problems are often solved over the set of real numbers, which does not fit nicely into this rigid binary logic. In many cases, we’d like to take advantage of applying logical operations, which includes their use in things like deep neural networks. How to describe these discrete functions in terms of a…

Type Inference by Solving Constraints

Type inference is used in functional programming languages to automatically deduce the type of expressions based on how the expression is used. Inference reduces the burden on the programmer who would otherwise have to write all the types manually. Anyone who uses an imperative statically typed programming language knows how quickly explicit type annotations can become burdensome. Type inference…

Unifying the Software Toolchain

The Tar Pit