Firmware lemons 🍋 []

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 …

Analyzing Haskell stability []

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 downstream1 maintainers to build …

Cabal exact printing []

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 …

Announcement: Updated Esqueleto text-search & PostGIS bindings []

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 ORM3. Postgres text search brings …

Lessons from creating a vacation rental. []

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, but it wasn’t easy …

Follow Up on the Follow-Up []

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 …

BONUS Announcement mysql pure unfork []

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 …

Announcing mysql pure fork []

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. I …

Follow up release rodeo []

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 …

MySQL Persistent Support for Haskell on Windows []

Using Haskell on Windows can be very useful in a WAMP like situation, where the main legacy codebase is stuck at PHP 5.61 . 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 …

The Release Rodeo []

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 …

About my startup: raster.click []

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 …

Restoring msyql backup system on windows. []

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 peculiar event sourced deadlock []

THE <abbr>UNDEAD</abbr> LOCK <abbr>OF</abbr> 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 product manager. Once I saw …

Summerhouse Paradis Aruba []

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 …

Why do I still write this blog? []

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 2022 Denotational Design []

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 3, with as theme improving the Haskell ecosystem and socializing. Naturally I chose …

Restoring mysql innodb on windows. []

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 …

Failing in Haskell []

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 with an opinion. Plenty of people describe the …

Installing a NixOS desktop tracked with git []

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:

  1. btrfs: Which I no longer use due to performance concerns.
  2. git: This requires some special attention, but …

A brief intro to MTL []

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 …

The Nix mutli-monolith machine (NMMM). []

a <abbr>NMMM</abbr> 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 N). There …

Using git for templates []

Over the past few years I’ve started using git as a template management tool1. 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 …

Hacking atom []

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 is …

Ghcid for multi package projects []

GHCID magic

When I tried Ghcidfor 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 that …

Pinning nixops builds []

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. You want …

Reflex server side html rendering []

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 rendering1. This blog post will discuss how to do that2.

Bob doing SSR

The main idea is that we …

Citrix XenCenter 7.6 notes []

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 …

Nixos notes []

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 …

Authentication in Reflex & Servant []

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:

                       +------------------+
   +-----------+       |    .      -      |
   | +--------+|       | .    -  .. .     |
   | +--------+|       | . .-- - + m..-.  |
   | +--------+|    \  |   m …

Lens into wrapped newtypes []

Categorical representation of the <abbr>NT</abbr> 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 types?

Instance boilerplate …

Fullstack Haskell: Reflex and Servant []

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. In …

Back to the Netherlands! []

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 on encrypted btrfs []

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, BTRFS was made …

Pragmatic Haskell III: Beam Postgres DB []

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 …

Pragmatic Haskell II: IO Webservant []

  1. Pragmatic Haskell: Simple servant web server
  2. Pragmatic Haskell II: IO Webservant
  3. Pragmatic Haskell III: Beam Postgres DB

Most Haskell language guides will leave IOuntillater. This guide is different, this guide is about using Haskell. Our focus is different: We build first, then learn trough delight.

Fancy intro image

The previous blog …

Pragmatic Haskell: Simple servant web server []

  1. Pragmatic Haskell: Simple servant web server
  2. Pragmatic Haskell II: IO Webservant
  3. 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 …

Elm on fire! Shaders in elm []

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 elm implementation. Elm …

Fun with stack: Haskell dependency management []

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 Haskell package manager …

Reddit poster plugin for pelican []

Yesterday the Reddit Poster plugin for pelican was finished. This is an initial step towards providing Reddit integration with pelican.

What this plugin does is look a predefined list of subreddits names in an article, then it posts the article to all those subreddits. Aside from the subreddits in the …

Starting at Daisee []

Recently quite a few changes have happened within Jappies’ life. First of all, he is no longer at OpenLearning. This relationship ended at the end of February. March was used for job searching. To help with this a proper portfolio was constructed. Last week there were three interviews with Daisee …

Flask, docker and the backend []

Jappie Klooster is working with friends on a react native app. It was attempted to do this completely without server-side with help of Firebase. This post describes the thought process behind not using Firebase for everything, and setting up a custom backend instead.

The first major issue, for this use …

New new website style changes []

Due to circumstances in his life, Jappie Klooster decided it’s time for some more website changes! These are all intended to simply reduce the amount of time it costs maintain this website. This should allow Jappie Klooster to update it more regularly as the friction for updates is decreased …

Plan prediction []

For the raster project a main selling point will be the automatic prediction of future scheduling. There are two major schools of thoughts to go with that I know of. Constraint satisfaction solving and data driven approaches (use statistics).

First of all the most straight forward approach is to use …

Jakartian Christmas []

Unfortunately Jesiska couldn’t make it to Australia in time for Christmas. Therefore I decided basically last week to go to Jakarta instead! I personally don’t care much about Christmas, but I thought the office would be closed during this time. (Many companies close in the Netherlands for sure …

Jappie lives with kangaroos []

I’ve been living in Australia for well over a month now and I really enjoy it! The first two weeks were quite a wild ride, looking for my first job and finding a permanent place to stay.

I had 3 interviews appointments prepared before arriving. I finished them in …

Work work work, ya ya ya []

Last Wednesday I started my first job at Open Learning. It has been interesting, I know for a fact I contributed almost nothing to the company up to this point. This is to be expected according to reddit since it’s the first week. I did ask a lot of …

What do you think about jakarta []

Now I’ve finally arrived in Australia, its time to reflect upon my expectations I had for Jakarta. Actually.. While being in Jakarta I got asked this question quite frequently: “What do you think about jakarta?” and I just stood there with no answer. This post is an attempt to …

Beginning of eternal summer []

Right now I’m in the airport waiting to go to Jakarta. It’s really weird what I’m doing I think, few people actually travel alone by plane, but in my case I’m just sort of emigrating and finding a job in a foreign country.

I want to …

Journey to Oceania []

Wednesday 2017-08-16 I’ll leave towards Oceania. First I will go for a month to Indonesia, having a little holiday and meeting my almost girlfriend. Then I will move on to Australia to do a “working holiday”, where I hope to do my profession, as a software engineer or work …

Making money with foss []

In this blog post I will discuss how to make money with open source software. Why do you care? Making money of this model is hard, yet you got to pay the bills. Even though the free software variant is consumer friendly. (note that these consumers maybe businesses too). This …

Tool survey []

Some time ago I made a blog post about thesis writing tips. However while writing that a large part started to be about text editing tools and version control. To keep the thesis writing tips post more focused I postponed writing about that. This post treats my tools of choice …

Optimus time! []

Using gentoo is a bliss most of the time. The package manager portage is one of the most advanced managers that I’ve ever used. Last week I encountered how much better it is than for example apt, when my old laptops power supply burned out and I had to …

Deployment and todo’s []

Yesterday I deployed the website, to my terror it wasn’t responsive on mobile devices (adapt to screensize). So with this post I fixed that, by replacing the basic font-size specifications from small to 1vw (everything else was em). The rest of the site already used percentages. The site needs …

Website Launch []

So this is the post where I’m launching this website. I finished the css mostly as a beautifull CGA theme. In this post I’ll discuss my decision making process.

Why make a site?

As an extension of my youtube account I will use this website, mostly for subjects …

Second post []

Yeah, I needed two actually to make sure everything looks good.

So I guess I can type lots of information here.

I wonder how long it will continue..

Quite long acutually.

Well, that’s fine. I’ll just think off more spaced out words!

Damn I need to type so …

First post []

So I’m trying to setup this website and to do this I need some filler text. Some people would make prommises about putting something up every week or so. But I don’t wanna do that because I hate chores, so this may as well be a huge waste …