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 …
Tagged: programming
Analyzing Haskell stability
Cabal exact printing ![[]](https://jappieklooster.nl/theme/images/category-tools.svg)
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 ![[]](https://jappieklooster.nl/theme/images/category-tools.svg)
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 is a more advanced query library that builds on top of the persistent ORM3. Postgres text search brings …
BONUS Announcement mysql pure unfork ![[]](https://jappieklooster.nl/theme/images/category-tools.svg)
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 ![[]](https://jappieklooster.nl/theme/images/category-tools.svg)
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 …
MySQL Persistent Support for Haskell on Windows ![[]](https://jappieklooster.nl/theme/images/category-tools.svg)
The Release Rodeo ![[]](https://jappieklooster.nl/theme/images/category-reflection.svg)
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 ![[]](https://jappieklooster.nl/theme/images/category-reflection.svg)
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. ![[]](https://jappieklooster.nl/theme/images/category-tools.svg)
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 ![[]](https://jappieklooster.nl/theme/images/category-reflection.svg)
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 …
Zurich hack 2022 Denotational Design ![[]](https://jappieklooster.nl/theme/images/category-technique.svg)
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. ![[]](https://jappieklooster.nl/theme/images/category-tools.svg)
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 …
A brief intro to MTL ![[]](https://jappieklooster.nl/theme/images/category-technique.svg)
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). ![[]](https://jappieklooster.nl/theme/images/category-reflection.svg)
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 …
Hacking atom ![[]](https://jappieklooster.nl/theme/images/category-tools.svg)
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 …
Reflex server side html rendering ![[]](https://jappieklooster.nl/theme/images/category-tools.svg)
Authentication in Reflex & Servant ![[]](https://jappieklooster.nl/theme/images/category-tools.svg)
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 ![[]](https://jappieklooster.nl/theme/images/category-technique.svg)
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 ![[]](https://jappieklooster.nl/theme/images/category-tools.svg)
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 …
Pragmatic Haskell III: Beam Postgres DB ![[]](https://jappieklooster.nl/theme/images/category-tools.svg)
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 ![[]](https://jappieklooster.nl/theme/images/category-tools.svg)
- Pragmatic Haskell: Simple servant web server
- Pragmatic Haskell II: IO Webservant
- 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.
The previous blog …
Pragmatic Haskell: Simple servant web server ![[]](https://jappieklooster.nl/theme/images/category-tools.svg)
- 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 …
Elm on fire! Shaders in elm ![[]](https://jappieklooster.nl/theme/images/category-technique.svg)
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 ![[]](https://jappieklooster.nl/theme/images/category-tools.svg)
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 …
Making money with foss ![[]](https://jappieklooster.nl/theme/images/category-technique.svg)
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 …