RSSAmplifier

Blog

jointhefreeworld news

News and Insights from the jointhefreeworld and jjba23 projects!

jointhefreeworld.orgRSS feed ↗76 posts

Latest posts

Emacs Eglot for Scala and Kotlin (JVM)

When Emacs 29 made eglot the built-in, default Language Server Protocol (LSP) client, many of us rejoiced. It is lightweight, fast, adheres strictly to Emacs philosophy, and doesn’t try to reinvent the wheel. However, being minimal means that when an LSP server steps out of line or acts quirky, eglot doesn’t provide a million customizable toggles to fix it out-of-the-box. Instead, it expects you…

Maak: The power of Lisp that powers your trusty command runner and the enlightments

The infinitely extensible command runner, control plane and project automator à la Make (Guile Scheme - Lisp) Find the project at https://codeberg.org/jjba23/maak Most build tools invent their own limited domain-specific language. Maak embraces the powerful λ Lisp . This also means your code is solid, reliable and robust for the next 50 years at least. If you like my work, please support me by…

Hacking Freedom: Compiling GNU Emacs from Source

By compiling GNU Emacs directly from the upstream Savannah repositories, you unlock the absolute bleeding edge of the extensible, self-documenting operating system disguised as a text editor. True autonomy over your computing environment sometimes involves building your own tools and customizing many programs. We start by cloning the live development branch straight from the GNU project’s forge. #…

jointhefreeworld - A Style Guide for Documentation

Table of Contents Basic points of style More points of style Ordering your text Code examples Metaphors English usage Based largely on comments by: Ron Hale-Evans, Robert J. Chassell, and Richard M. Stallman. Basic points of style # Show, don’t just tell. Use plenty of examples, but avoid being overly redundant. Move slowly. Do not impose too much of a cognitive load at once on the reader. Explain…

Scriba v0.3.3 - Structured Logging in Lisp

A structured logging framework for Guile Scheme “Scriba is a structured logging library for GNU Guile that prioritizes flexibility and observability. It provides modular log routing, formatting, and filtering, allowing developers to generate human-readable console logs during development and machine-readable JSON logs for production environments. Key features include an auto-logger configured via…

Manifesto for Agile Software Development

We are uncovering better ways of developing software by doing it and helping others do it. Find the original manifesto here . Through this work we have come to value: Individuals and interactions beat processes and tools Working software beats comprehensive documentation Customer collaboration beats contract negotiation Responding to change beats following a plan That is, while there is value in…

jointhefreeworld - AI Policy

Table of Contents Purpose and Scope Code Contributions Human Reasoning Recommended Usage Autonomous Agents Communication and Community Interaction Issues and Pull Requests Comment Moderation Transparency and Context Non-Native English Speakers Media Generation Reporting and Resolution License of This Document Thank You Purpose and Scope # This AI policy establishes safe guardrails for the…

Why I Still Reach for Scheme and Lisp Instead of Haskell

There is a persistent tension in software engineering between the beautiful, mathematically pure ideal of a program, and the messy, pragmatic reality of just getting things done. Over my career, I’ve explored the depths of both extremes in an attempt to find my personal sweet spot for hacking. Before you sharpen your keyboards and start a flame war over the title, let me point out that I haven’t…

Functional repository pattern in Scheme? Decoupling and abstracting the data layer in Lisp

Implementing the Repository Pattern with Hygienic Macros in Scheme Hi everyone! I’ve been working on a new approach for the data layer of my projects lately, and I’d love to poke your brains and get some feedback. What is the repository pattern? # Repository Pattern is an architectural software design pattern that decouples the data layer of a program with the core logic and domain. It brings…

Don’t Reward the Best Firefighter

The “Hero” Trap # Every engineering team has that one “hero.” You know the one: the 3 AM incident response god. They dive into a production dumpster fire, pull a rabbit out of a hat, and somehow bring the system back online. We love them for it. We give them the shout-outs in Slack, the fat bonuses, and the “Senior Staff” titles because they’re the “go-to” person when everything breaks. But by…

Most Technical Problems are People Problems

I have worked at several companies doing Software Engineering and I feel like I’ve seen the best and the worst. From aging systems containing millions of lines of untested code, built on frameworks past their expiry date, to repulsive code and deployment constructs that stemmed from disagreements, bad communication, and terrible processes, I’ve seen it all, ticking technical time bombs, and all,…

Simple Rust Guix Emacs development environment

A minimal, declarative setup for productive Rust hacking on Emacs + Guix Introduction # I noticed there was a blatant lack of resources and documentation on this particular setup. So I rolled up my sleeves and wrote this article, which hopefully you find useful. Rust is a modern systems programming language with a strong focus on safety and performance. In this article, I want to show you how to…

Git Riddance

Git Riddance - for Good Riddance! Introduction # git-riddance is an Emacs package available at ( https://codeberg.org/jjba23/git-riddance.el ) that will help you completely destroy the Git history of your desired directory, and allow you to start a new one with 1 commit, effectively obliterating other history in that branch. Licensing Git Riddance is licensed under the GNU General Public License…

Hexagon of Doom - The Cost of Over-Abstraction and Indirection

Disclaimer: This article reflects personal experiences and gripes within specific team environments. Your mileage may vary, but the warning against premature or redundant abstraction stands. When “Clean Code” Becomes “Complicated Code” # Hexagonal Architecture, often called Ports and Adapters (P&A) , is lauded for its promise of decoupling the core business logic (the “domain”) from external…

The FREE stack - My Tech Radar

Tech changes fast. But it’s becoming an ever-more critical component of success. A Tech Radar is our trusty compass and map, charting the ever-shifting landscape of technology. The FREE stack is my collection of choices, knowledge, skills, opinions and way of working. F – Functional : Building declarative, predictible systems with clear effects, leveraging the magical and mathematical algebra…

Increase the file descriptor count in GNU/Linux

In Linux, you can change the maximum amount of open files. You may modify this number by using the ulimit command. It grants you the ability to control the resources available for the shell or process started by it. Read Also: Set Linux Running Processes Limits on Per-Userl Level In this short tutorial we will show you how to check your current limit of open files and files descriptions, but to do…

Embracing the eternal Sexp wisdom with the GNU

Behold the holy Sexp (sqrt (+ 14 5 3 1)) I have recently reached new heights in declarative configurations of operating systems, programs and my workflow ⚙️ and development. The universe blessed me and the GNU inspired me and I am configuring most of my life and projects with several variants of Lisp and dialects. This includes things like: operating system (Guix), project management, websites,…

Taming Complexity with Scheme: The Byggsteg Story

Abstract # Introducing Scheme # Scheme is a classic programming language in the Lisp family. It emphasizes functional programming and domain-specific languages but adapts to other styles. Known for its clean and minimalist design, Scheme is one of the longest-lived and best-studied dynamic languages, and has many fast and portable implementations. In Scheme https://www.scheme.org/ This paper’s…

Mètsàtron’s astral analysis of Joe’s being

My brother from another mother, ⁨Mètsàtron Sucurí Jibōia⁩ did some astral and digital readings about me (Joe) Lots of his insights deeply resonate with me. Some might be yet to be uncovered. Thanks bud! Mètsàtron’s astral analysis of Joe’s being # Your astrology is giving me goose bumps! Planet Sign Notes ☀️Sun Capricorn︎ Sacred Architect of Joy. The master builder of systems, structured…

Markdown Cheat-sheet for Beginners

Table of Contents Common Formatting Headers Emphasis (Bold and Italic) Lists Unordered Lists (bullet points) Ordered Lists (numbered) Links and Images Links Images Other Useful Elements Blockquotes Horizontal Rule Code Blocks On editors Markdown is a simple, lightweight markup language used for formatting plain text. It’s designed to be easy to read and write, and it can be converted into HTML,…

Scheme and Lisps are Great for production

I want to start by thanking the great NalaGinrut that wrote an article on this topic, which I adapted to explain my experience with Scheme and Lisps. What if I told you one of the oldest high-level programming languages is also one of the most advanced? A language so flexible and powerful, that really lets your ideas flow and super-boosts expressiveness.. In the vast universe of programming…

The Best Programmers I Know

Original article by Matthias Endler I have met a lot of developers in my life. Lately, I asked myself: “What does it take to be one of the best? What do they all have in common?” In the hope that this will be an inspiration to someone out there, I wrote down the traits I observed in the most exceptional people in our craft. I wish I had that list when I was starting out. Had I followed this path,…

Why I Program in Lisp?

Original article by Joe Marshall Lisp is not the most popular language. It never was. Other general purpose languages are more popular and ultimately can do everything that Lisp can (if Church and Turing are correct). They have more libraries and a larger user community than Lisp does. They are more likely to be installed on a machine than Lisp is. Yet I prefer to program in Lisp. I keep a Lisp…

jointhefreeworld - Code of Conduct

Purpose # This Code of Conduct exists to foster an inclusive, respectful, and cooperative environment for all contributors and users of this free software project. Inspired by the ideals of the GNU Project, we strive to uphold freedom, equality, and community as guiding principles. We believe that collaboration in a community of mutual respect is essential to creating excellent free software. Our…

Moving from Sway to Hyprland - Archived SwayFX config

After using Sway as my daily Wayland compositor for quite some time, I recently made the switch to Hyprland. The decision wasn’t made lightly, as Sway, especially with the SwayFX fork, served me well. However, Hyprland’s growing community and advanced feature set made it an attractive choice. Why Hyprland? # The main reasons for switching are: Community Size: Hyprland has a much larger and more…

Building Conky with Wayland Support on GNU Guix

Conky is a lightweight system monitor that can display system statistics on the desktop. While it was originally built for X11, recent versions have added experimental Wayland support. Since I use GNU Guix and run a Wayland-based environment (Sway), I wanted to get Conky building with Wayland support. This post explains how I achieved that. Guix is a functional package manager that allows you to…

Legendary Lisp Laptop - a modern Lisp machine with Framework laptop

For the past month or so, I’ve been running Guix system on my Framework laptop, turning it into what I like to call a modern Lisp machine. I have affectionately also started calling it a Legendary Lisp Laptop - LLL I chose the Framework Laptop 13,5" since it is big enough for me and it is really lightweight and portable. I mostly have external monitors anyway, at home and at work. Technical…

Scheme & Lisp Style Guide

Riastradh’s Lisp Style Rules Copyright (C) 2007–2011 Taylor R. Campbell CC BY-NC-SA 3.0 This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License: http://creativecommons.org/licenses/by-nc-sa/3.0/ . This is a guide to Lisp style, written by Taylor R. Campbell, to describe the standard rules of Lisp style as well as a set of more stringent rules for…

Podman root-less setup on GNU Guix

Note: There is a better way to go about this, Guix now contains rootless-podman-service-type which will take care of it all pretty much for you. This article is thus outdated, and explains how we did things before that! Thanks Hugo Buddelmeijer for alerting me to that, he wrote a blog post here: https://entropynaut.com/post/guixpodman/ Have you ever heard about Docker ? Containerization has…

YAML Schemas in Emacs with Eglot

Are you someone that enjoys Emacs and the amazing built-in package Eglot, which enables Emacs to provide intelligent completions and error reporting, linting, and more with language servers ? Are you ocasionally editing YAML files and would like to use JSON Schemas for YAML, get some feedback from Emacs, the right completions for a configuration file ? Almost a type system for YAML 💚 # Let me…

Emacs registers - a god-send for your day job

Ever had to work very long files, in projects that you are not familiar with, and felt very lost, without an anchor point? Enter Emacs and its registry system, which allows you to “bookmark” locations of a file (buffer) and return to them, and much much more! Registers # Emacs registers are places you can save text or positions for later use. Text and rectangles saved in registers can be copied…

Brief aan mijzelf

Lieve Joe, Jij en ik weten dat levend zijn pieken en dalen betekent. Alles wat je heb meegemaakt heeft dit een volle, veelzijdige, maar gezellige bus. In deze bus zitten heel veel Joe's: doelgerichte Joe, aan de kant duwen Joe, vechter, niet-empatisch, idealistisch, hoge verwachtingen, hoge lat, inspirerend, hulpzaam, creatief, chill, zal goed komen, etc. Het is waar, vaak staat gladiator Joe…

Free à la Carte

Free monads based on from intuitions from the Data types à la Carte paper. Combine functors and make embedded DSLs in Haskell. See the original paper, by Wouter Swierstra: https://webspace.science.uu.nl/~swier004/publications/2008-jfp.pdf . See the Haskell library I built around it: https://codeberg.org/jjba23/free-alacarte . How do you use this ? # This section gives a brief demonstration of…

Black Box Testing in modern Software

Testing software at a high level means freedom of implementation and refactoring, while maintaining guarantees of correctness. This is something all good engineers love 💘 Black-box testing is a method of software testing that examines the functionality of an application without peering into its internal structures or workings. In my opinion, for complex systems and system interactions, one should…

Open VPN 3 on NixOS with Web-based SAML

OpenVPN 3 on NixOS with Web-based SAML # Recently at work we migrated from a simple OpenVPN profile with AWS credentials to a profile that authenticates based on SAML via your browser. Worth noting, SAML web-based authentication for OpenVPN only works with OpenVPN 3. This means that we need OpenVPN 3 now running, and also that you can’t run the VPN as a systemd service unfortunately. I got it…

Create a Windows 11 bootable USB from GNU Linux

Below is the procedure for creating a bootable USB flash drive with Windows 11. The same process should also work with any HDD/SSD connected to your system. Download Windows 11 image # https://www.microsoft.com/software-download/windows11 sha256sum Win11_English_x64v1.iso 4bc6c7e7c61af4b5d1b086c5d279947357cff45c2f82021bb58628c2503eb64e Win11_English_x64v1.iso Plug your USB flash drive # Linux…

Open VPN 3 on Void Linux

OpenVPN 3 on Void Linux # Recently at work we migrated from a simple OpenVPN profile with AWS credentials to a profile that authenticates based on SAML via your browser. This means that we need OpenVPN 3 now running. At the time of writing there was no package in the Void Linux repos for v3 so I decided to build from source, since otherwise this would mean I cannot do my work, from Void Linux. ⚠️…

Emacs for absolute beginners

In this article, I’m going to give you exactly what you need to get started using Emacs and understand the basic concepts and key bindings of the editor. I know this article might seem long, but I promise you will come out with a plethora of knowledge about Emacs. I have taken lots of parts and inspiration from the excellent guide made by System Crafters . Watch the great introductory video too on…

Emacs and Scala setup with Eglot

In this post I want to show you how to setup your favourite text editor, Emacs, as a super powerful and capable Scala IDE (integrated development environment) with the latest and most performant approach. You might think I am crazy and I make my life more difficult than it needs to be. Let me tell you this already, my development experience in Emacs with Scala is 5 star ⭐. I use this setup at work…

Running Hoogle locally

Stackage is a neat tool to use when developing Software in Haskell. It’s integrated with the Hoogle search engine that can search on type signatures (and function names) which lets you find almost any function easily. One of the downsides of Hoogle is that it can be slow for people with some slower connections and so looking up any kind of documentation becomes a really frustrating experience. The…

Type safety back and forth

Taken from the brilliant post of Matt Parsons . Types are a powerful construct for improving program safety. Haskell has a few notable ways of handling potential failure, the most famous being the venerable Maybe type: data Maybe a = Nothing | Just a We can use Maybe as the result of a function to indicate: Hey, friend! This function might fail. You’ll need to handle the Nothing case. This allows…

Why Haskell is important?

A really nice explanation from the Tweag team, that reflects exactly how I think about the subject. People keep asking me, “What’s the point of Haskell, why do you folks even use it?”. How can you answer this? Most of us Haskell practitioners would start talking about strong static types, the elegance of abstractions, and ease of refactoring—but we would be missing the bigger picture. That’s…

Arch Linux UEFI + Encryption

This is a step by step guide to installing Arch Linux on UEFI with full disk encryption. It deliberately contains no unnecessary words or bling. It is heavily based on the Arch Linux wiki’s installation guide so if you’re ever stuck, just refer to it and the rest of the awesome Arch wiki . Download ISO # Download the latest ISO from the Arch Linux website . Create Bootable USB Stick # You can skip…

GNU Guix VM aarch64

One day, I decided on a whim to try Guix in a VM on a M3 Mac. It seemed like a good idea at the time, but I’d never used Guix before and it ended up being quite a grind to figure out how to get it running. The initial issue for me was that Guix doesn’t provide iso installer images for aarch64. Yes, you can build one yourself, but after I’d put in the time to figure out how to do that, though, the…

rc.d scripting

FreeBSD uses the init system, and system services must be made as rc.d scripts. You can find more detailed information and examples in the handbook: Practical rc.d scripting in FreeBSD . CLI options choice for daemons # Find below the options we normally use for any /etc/rc.d script as daemon. See more options by in the terminal issuing: man daemon -f : Redirect standard input, standard output and…

How I write HTTP services

This is a very interesting learning experience written originally by Mat Ryer . The way I have written services has changed over time, so I wanted to share how I write the services today—in case the patterns are useful to you and your work. A Server struct # A Server struct is an object that represents the service, and holds all of its dependencies. All of my components have a single server…

Project Structure

In this post I will try to give an explanation to the project structure I follow commonly while making Go projects. This is a basic layout for Go application projects. It’s not an official standard defined by the core Go dev team; however, it is a set of common historical and emerging project layout patterns in the Go ecosystem. Some of these patterns are more popular than others. It also has a…

German naming convention

Table of Contents Expect the Violent Psychopath Naming Tropes It’s All Greek To Me German / Dutch Naming Convention Isomorphic Naming There’s one thing that could make our life as software engineers much easier: better naming convention. Expect the Violent Psychopath # You’re trying to tell a story with your code. Your code should tell that story clearly, not cryptically, for an audience besides…

pkg or ports ?

Table of Contents What I prefer Package (pkg) Benefits Port Benefits FreeBSD is bundled with a rich collection of system tools as part of the base system. In addition, FreeBSD provides two complementary technologies for installing third-party software: the FreeBSD Ports Collection, for installing from source packages, for installing from pre-built binaries. Either method may be used to install…

SQL transactions

There are several advantages into using prepared statements and transactions in SQL, in my case mostly with MariaDB. I will explain some of the advantages, some of the caveats and handy tips to manage them, specifically with Go. Why SQL Transactions ? # We want our unit of work to be reliable and consistent, even in case of system failure. We want to provide isolation between programs that access…