Benki β†’ All Posts

β‡  previous page next page β‡’

A CI server for Nix builds. Optimized to take advantage of Nix’s reproducible builds by integrating a Nix store as a build cache.

Matthias #

I just finished migrating my Mailcow installation from a native Kubernetes port that I had made by hand and that was becoming impossible to update to a more streamlined (albeit wasteful with resources) deployment where I wrap docker-compose and a dedicated Docker instance in a Kata container that I run as a Kubernetes pod.

The container is built as a Nix expression and is available in my public Kubeia repository, which contains part of my Kubernetes deployment configuration and image build scripts. A README is available too, in case you would like to try running it yourself.

Do note that the Kubernetes deployment file is just provided as an example. It contains some pretty specific references to my particular deployment – view it as something like a template that you will have to copy and fill with your own data. Another idiosyncracy is that I really really dislike running multiple database servers on a single piece of hardware and so I kluged something in that makes Mailcow use my already provisioned MariaDB instance rather than its own. In other words, your mileage may very much vary.

A C library that you can use to build native binaries that are portable between Linux, macOS, various BSDs, and Windows. An impressive hack.

Integrates Rust into CMake projects. Useful for when you’ve got an existing C++ project that you want to add some Rust code to.

A binary cache for Nix builds. Makes use of Nix’s reproducible and pure nature to share build artifacts between yourself and your colleagues and even your CI, too.

A JavaFX theme based on Microsoft’s Metro design (or Fluent Design System as they call it nowadays).

If you plan to check out the GitHub repo, note that you have to switch to the 11 branch unless you are still on Java 8.

A Raspberry Pi I/O library for Java.

For when your JBoss application has to tap GPIO pins.

Static pods are pods that are not managed by an API server, but directly by a Kubelet (the thing that represents a node in a Kubernetes cluster). They are used to run the Kubernetes control plane in kubeadm-managed clusters and to run pods on devices that may not be connected to an API server at all times, such as IoT devices.

The Kubelet mirrors static pods as mirror pods on the API server when one is available. That’s why you can see control plane pods in the kube-system namespace if you are on a kubeadm-managed cluster. You cannot, however, use the mirror pods to control the life cycle of the mirrored static pods – they are really just mirror images of the real things, which the cluster has no control over.

Type-safe, LINQ-style queries for JPA. A nice alternative to the JPA Criteria API.

An XML schema language that is easy to read and write and has superb tooling support. The Compact Syntax form is especially nice.

If you use a text editor with good XML support, having a schema around can boost the usability of a data file quite significantly, as it not only gives you static validity checking, but also autocompletion and automatic templates.

A Bazel-like reproducible build system optimized for cross-platform compatibility.

As an example of the cross-platform focus, it can produce Visual Studio project files on Windows.

Takeaways:

  • consumption vs. appreciation: You don’t want to consume only for consumption’s sake. Instead, pay attention and try to experience things.
  • self-restraint vs. entitlement: Self-restraint is what makes entitlement possible. By constantly insisting on pushing the boundaries of your freedom, you damage the foundation of it. More generally, what you are allowed to do is a bad guide on what you ought to do.

The part on self-restraint and entitlement can also be flipped around: On a societal level, it is neither possible nor desirable to mandate good behavior.

β‡  previous page next page β‡’