Even with an edge, you lose?
I rigged the coin such that it lands heads 60% of the time. All you have to do is place your bet and start harvesting. The goal of the game is to reach $999 within 30 minutes. Try it out:
I rigged the coin such that it lands heads 60% of the time. All you have to do is place your bet and start harvesting. The goal of the game is to reach $999 within 30 minutes. Try it out:
There is this book “The Left Hand of Darkness” by miss Ursula Le Guin which I’ve thought about a long time. Especially chapter 12 “On Time and Darkness.” It’s very much the heart of the book, you may even call it the center. Now in the eye of Meshe all
Hatter is like flutter but instead of dart, haskell! Write native mobile apps in Haskell! This works similar to react native where we have tight bindings on the existing UI (user interface) frameworks provided by android and iOS. Have I gone mad? I’m afraid so. You’re entirely bonkers. But I’ll
Code? Reading code is such a 2025 activity, now we just vibe! We should adapt our software such that it’s easier to read for machines. Tokens burn down trees, y’know. So we should minify! For example, consider this program: module Main where main :: IO () main = putStr $
Hello 👋 Announcing unwitch . A primitive conversion library with better safety and error messages. It can do safety on unboxed types as well. The idea is inspired by witch but removes the type class magic from it, instead it uses functions. So it’s like witchcraft without the magic! ✨
Hello 👋 Recently there was some discussion around forking basement as baseplate. After some investigation I found out the basement library isn’t all that useful, so I decided to fork memory instead, as ram , which no longer depends on basement. This follows the recent crypton/cryptonite fork. Crypton now also
It was Friday, 27th of February 2026, when I was reborn. bro. I’m vibe coder now. bro. for real. This is how it looks when I’m writing code now. I managed 1 to log into a claude code terminal. This is a CLI app, which has access to a large
Hi friends! I was recently tasked again with figuring out where stuff is in space. I decided this was an opportunity to cleanup the esqueleto library and releasing v4! Friends, I lied. I was in fact terrified I did the projections of geography wrong by using the geometry type, and
Death (XIII) Symbolizes significant change, transformation, and endings, rather than literal physical death. Have you ever seen a Number grazing in the fields? Or a Functor chirping in the trees? No? That’s because they’re LIES. LIES told by the bourgeoisie to keep common folk down. But I say NO, no
Setting up private dependencies in nix as flake input allows it to cache it properly. Especially if they’re flakes themselves. However it took me a significant amount of time to get a working configuration for this. It’s possible to setup flakes with private inputs, Note the url format uses git+ssh
Stacked against us September 2023, I knew I was in for a wild ride when I won this contract. I already coached other developers in a commercial setting, and I understood what was asked of me. My goal was to get two existing developers comfortable with Haskell while at the
Life and lemons Ever found yourself fixing a problem you weren’t hired to solve? To the point where you’re under qualified? That’s what happened when I dove into firmware. It was my suggestion, nobody asked me to do this, but we needed better scanners, better hardware even, and we couldn’t
Stability - according to gpt4o I joined the Haskell Stability Working Group about a year ago. I was freshly scarred from a GHC upgrade, so I decided to try improving the situation. I think my first contribution was making an example for GHC nightly builds on GitHub Actions. This allows
For a long time, I’ve been annoyed that cabal tells you to add modules to your cabal file. It can detect missing modules, but won’t automatically add them. This is not a big deal for a single module, but if you like splitting code into many small modules, for example
I’ve updated the esqueleto bindings for esqueleto-textsearch to include a tutorial and documentation so it no longer requires guesswork. Furthermore I’ve also created new esqueleto bindings for PostGIS . esqueleto Esqueleto is a more advanced query library that builds on top of the persistent ORM 1 . Postgres text search
Villa Katalina in aruba~ is online . pic of the house You can book this wonderful rental now! This is the rebranded summerhouse Paradis . It’s a villa that can host up to 8 guests, located in Aruba. I think this rental project is slowly turning out to be successful,
Reflective This is a follow-up on the follow up of release rodeo . Okay, I should stop doing these, however, I thought the situation was a bit too ironic not to record. On my final week working for that company 1 , the product manager involved found my original blog
Good news! I’ve come to an agreement with the maintainer of mysql-haskell , winterland . I’ll become a co-maintainer. What this means in practice is that I’ll deprecate mysql-pure and merge the changes back into mysql-haskell . This will make upgrades far more convenient for users. That’s you! It isn’t
I’ve forked mysql-haskell and persistent-mysql-haskell into mysql-pure and persistent-mysql-pure . The original packages were no longer maintained and frequently caused me issues during GHC upgrades, so I decided to take over maintainership. For example, bounds were outdated, or I needed minor patches found on obscure branches in unrelated repositories .
This is a follow-up on the release rodeo . After I wrote that blog post, the CTO found it quickly by coincidence. He was quite okay with everything I had written. However, he took issue with that I called his critique “scolding”. I suppose he didn’t exactly scold me. I
Using Haskell on Windows can be very useful in a WAMP like situation, where the main legacy codebase is stuck at PHP 5.6 1 . However, any new pages can be written with Haskell, which is much easier to upgrade since the compiler will inform you about most changes. New
Release rodeo~ In the beginning, there was nothing. We merged completed features after a month or so of development, leading to large PRs and often unexpected implementations. Then, feature flags were introduced. This allowed the merging of code in chunks, enabling QA to test thoroughly. The people in charge could
raster logo As a founder of raster.click , I was passionate about providing rostering systems for restaurants that were easy to use and affordable. I worked hard to build a functional product that our users loved, and I was proud to have three paying customers (eg restaurants) and around 90
This is a quick after action report on restoring backups. This is mostly for future me to know what I did. The backup scripts on the main server stopped working. The IT person at that company had already figured out this was because of the database not booting on the
THE UNDEAD LOCK OF DETH One thing that always surprises me is how casually serious problems are phrased by business people in their blissful ignorance. “Hey why am I seeing the down for maintenance screen?” “Oh try it now, the pack uploading has finished”, Said the QA engineer to the
This post tracks the progress of a rental property I bought on Aruba. The goal is to rent it out short term to tourists. This video gives a rough overview of the current status: Summerhouse paradis on aruba vlog: Colors, mold and a hole A week later and we’re starting
My motivation for blogging has changed over time. I’d like to revisit my initial reason, and discuss how this changed while maintaining the blog. After all I keep posting articles on here, something has to keep me going right? We can read my original motivation . The initial goal was
zurich hack logo, uwu This blog post and after action report is three months overdue, but I participated in Zurich hack 2022 . Zurich hack is a voluntary hackaton organized in Rapperswil-Jona 1 , with as theme improving the Haskell ecosystem and socializing. Naturally I chose to work on the
Over the weekend a company had a power outage, causing corruption to the on premise hosted mysql innodb database. This means the company can’t do any work, so I had to fix this fast before they opened again on Monday. It’s not trivial because the system runs on windows, which
I’m a Haskell failure, don’t tell anyone! Recently I encountered some dubious error handling code. Not only was it failing, it was failing WRONG 1 . This frustrates me because doing failing correctly in Haskell is quite easy, so why was it implemented wrongly? I believe no-one has addressed failing
A few years ago I wrote a post on installing NixOS on encrypted btrfs . I recently went trough that guide to install NixOS once more. It is good, but it has some issues: btrfs: Which I no longer use due to performance concerns. git : This requires some special
mtl-header Recently a blog post came out which I quite like, it describes how to use the concrete base transformers . It’s very thorough and gives a concrete example for using transformers. Although it looks quite low level and I think you’ll get more out of transformers by using full
a NMMM computer I redid how my services are structured. Instead of running each project on a separate VM, they’re now all running on a dedicated Hetzner machine. This is what I call the nix multi monolith machine (hence forth called NMMM, pronounced like tasting something delicious prefixed with an
Over the past few years I’ve started using git as a template management tool 1 . For example, I clone my haskell template project , edit the names, edit the readme end re-setup the remotes: git remote add template git@github.com:jappeace/haskell-template-project.git git remote set-url origin git@github.com:jappeace/new-project.git This allows me to keep
On my twitch stream I had project where I made a CRT scan line monitor in atom: The inspiration was the fallout pip-boy . I though it would be cool to have this be in your editor, maybe some of the gray beards are nostalgic for this? What amazes me
GHCID magic When I tried Ghcid for a reflex project, it wouldn’t rebuild on file change. This is because reflex has a multi package project setup by default. Recently I found that it is possible to use Ghcid for multi package project builds. The trick is to create an executable
Pinned nixops On one machine my Nixops builds and deploys, but on the other one it fails. Why? Isn’t nix supposed to deliver reproducible builds ? Turns out nixops uses by default your system configurations’ channels rather then a pinned nix packages . Which is not why you’re using nix
Reflex is a single page app framework written in Haskell compiled to JavaScript. A major concern with reflex is the slow loading times, this can be mediated however by doing server side rendering 1 . This blog post will discuss how to do that 2 . Bob doing SSR The
A client had a Citrix environment running. To debug the deployment of a machine, I copied the Citrix environment locally in VirtualBox. Note that the server doesn’t run any machines inside citrix, but it does get the XenCenter operational. It appears that in nixos you can just setup a local
This is a post of things I wanted to do in nixos but isn’t described anywhere. I had to read source code to figure these things out. By explaining here what is going on I make things easier for other people. Nixos notes Nix custom image It’s possible to bypass
In the previous blog post we saw interaction with servant in reflex. Although that covers the basics, there are several more hurdles to overcome to get comfortable with Reflex. I think most of these are encountered by building a simple login system. So let’s build something like: +------------------+ +-----------+ |
Categorical representation of the NT iso All newtypes are isomorphisms – My mother Control.Lens.Wrapped uses the isomorphism property to introduce a type class Wrapped . Let’s explore use cases, because after all, it doesn’t appear to do much at first glance. What’s the point of formalizing wrapping and unwrapping of
In the pragmatic haskell series, we saw how to setup a simple webserver with database. But at some point you still need a frontend. If it were 2005 you may have been able to get away with just blaze . But we are in 2018+, and JavaScript is a problem
After a year in foreign countries, I’ve returned home. Last week my working holiday visa expired, and unlike a friend of mine, I did not want to be deported in handcuffs. Dutch flag I quite enjoyed my stay in Australia, the people are relax, life is good. I’ve drank lots
Nixos is heroin for tinkerers. Paradise can be tinkered together and be freely shared among peers because it’s fully reproducible! Jappie wanted more, he wanted a secure disk and a BTRFS. There used to be no guides for this, now there is. Locked btrfs on nixos The bullet was bitten,
Note, I no longer recommend using beam for business as ORM. Please use persistent instead. Beam is far to complicated for it’s use case. Migrations can be run with postgresql-migration for example, using the suggested migrations from persistent. I’d only recommend using beam for hobby projects or as a case
Pragmatic Haskell: Simple servant web server Pragmatic Haskell II: IO Webservant Pragmatic Haskell III: Beam Postgres DB Most Haskell language guides will leave IO until later . This guide is different, this guide is about using Haskell. Our focus is different: We build first, then learn trough delight . Fancy
Pragmatic Haskell: Simple servant web server Pragmatic Haskell II: IO Webservant Pragmatic Haskell III: Beam Postgres DB There are many guides available for learning Haskell. Setting up a something simple like a web server isn’t so straight forward. Perhaps choosing one of the 14 libraries is a bit much. Type
Elm on fire Shaders have long been on the list of possible subject to study for Jappie. The potential of both creating beautiful art as well as doing parallel processing seem incredible valuable capabilities to have. This post comments on the effort of porting a JavaScript WebGL fire to an
Haskel stack logo Working at Daisee, Jappie uses a lot of Haskell programming. Although Haskell is obviously as amazing as the stereotype asserts , the tooling can be a bit challenging. In this blogpost we explore these challenges. One’s understanding start with the fact that there is not one unified