RSSAmplifier

Blog

Christian Hollinger

Software Engineering, GNU/Linux, Data, GIS, and other things I like.

chollinger.comRSS feed ↗41 posts

Latest posts

ZIP codes are a bad spatial abstraction

ZIP codes are delivery routes, not polygons. See how SkaldMaps combines ACS and other sources using ZCTAs, HUD-USPS crosswalks, spatial joins, and DuckDB.

Building confidence in geospatial data

How SkaldMaps generates a confidence score for data attributes that helps you gauge how accurate data is (or isn't).

I used my homelab to start an LLC: Meet SkaldMaps

I launched SkaldMaps, a SaaS for exploring and ranking U.S. ZIP codes, based on a previous homelab project. It runs a model on my R740XD.

How I run and deploy docker services in my homelab with Komodo and a custom CLI

Alterantive title: I try really hard not to move to Kubernetes.

More random home lab things I've recently learned

From my series of "Christian's Home Lab adventures", here's some more things I've recently learned / discovered and figured are worth sharing: NVMe SSDs on a Raspberry PI, ARM64 adventures, more zfs troubles, and some cool tools you should try.

New Website & Scala Days 2025 Announcement

Some personal updates: My upcoming talk @ Scala Days 2025 in Lausanne, Switzerland, my new website, switching from Hugo, thoughts on the modern web & minimalism, and maintaining ink-free (for the ~2 people using my RSS feed).

A Distributed System from scratch, with Scala 3 - Part 3: Job submission, worker scaling, and leader election & consensus with Raft

Upgrades to Bridge Four, the functional, effectful distributed compute system optimized for embarrassingly parallel workloads: Updating Scala, auto-scaling workers, and implementing leader election with Raft (or half of a replicated state machine).

My 2025 Homelab Updates: Quadrupling Capacity

...because everybody wants 40 cores, 256GB RAM, and 130TB storage. Some 2025 updates to my homelab, which might or might not be getting out of hand.

Why I still self host my servers (and what I've recently learned)

A short story on why I still go through the effort of self hosting servers and some things it taught me recently.

Improving my Distributed System with Scala 3: Consistency Guarantees & Background Tasks (Part 2)

Improving Bridge Four, a simple, functional, effectful, single-leader, multi worker, distributed compute system optimized for embarrassingly parallel workloads by providing consistency guarantees and improving overall code quality (or something like that).

Moving a Proxmox host with a SAS HBA as PCI passthrough for zfs + TrueNAS

How to move a Proxmox host to a new m.2 SSD when using a LSI SAS HBA card to realize PCI passthrough for HDDs for zfs + TrueNAS.

Building a functional, effectful Distributed System from scratch in Scala 3, just to avoid Leetcode (Part 1)

Building something that already exist (but worse) so I don't have to think about Leetcode: Bridge Four, a simple, functional, effectful, single-leader, multi worker, distributed compute system optimized for embarrassingly parallel workloads.

Migrating a Home Server to Proxmox, TrueNas, and zfs, or: How to make your home network really complicated for no good reason

Going from a single, bare metal Debian server to two physical machines, 7 VMS, 5 zfs pools, and a whole bunch of data and networking: An experience. Also, stuff broke.

QGIS is the mapping software you didn't know you needed

QGIS is incredible: You can build maps that make use of the absolute wealth of public data out there and put Google Maps to absolute shame. This article is doing just that.

Tiny Telematics: Tracking my truck's location offline with a Raspberry Pi, redis, Kafka, and Flink (Part 2)

Tracking vehicle location offline with a Raspberry Pi, Part 2: Apache Flink, scala, Kafka, and road-testing.

Tiny Telematics: Tracking my truck's location offline with a Raspberry Pi, redis, Kafka, and Flink (Part 1)

Building custom Linux images, dealing with a 40 year old GPS standard, & trying to shoehorn functional programming into Python: Tracking vehicle location offline with a Raspberry Pi. (Part 1)

Functional Programming concepts I actually like: A bit of praise for Scala (for once)

Types, type classes, implicits, tagless-final, effects, and other things: Not everything in the world of functional programming is bleak and overly academic. A view on FP & scala concepts someone who loves to complain actually likes.

Scala, Spark, Books, and Functional Programming: An Essay

Reviewing 'Essential Scala' and 'Functional Programming Simplified', while explaining why Spark has nothing to do with Scala, and asking why learning Functional Programming is such a pain. A (maybe) productive rant (or an opinionated essay).

Building a Data Lake with Spark and Iceberg at Home to over-complicate shopping for a House

How I build what is essentially a self-service Data Lake at home to narrow down the search area for a new house, instead of using Zillow like a normal person, using Spark, Iceberg, and Python.

Writing a Telegram Bot to control a Raspberry Pi from afar (to observe Guinea Pigs)

A quick project to write a Telegram chat bot that can control a camera, connected to a Raspberry Pi, to take pictures of things; or: Why I refuse to trust IoT vendors and do everything myself

Raspberry Pi Gardening: Monitoring a Vegetable Garden using a Raspberry Pi - Part 2: 3D Printing

Part 2 of throwing Raspberry Pis at the pepper plants in my garden: On the topics of 3D printing, more bad solder jobs, I2C, SPI, Python, go, SQL, and failures in CAD.

Raspberry Pi Gardening: Monitoring a Vegetable Garden using a Raspberry Pi - Part 1

On how growing vegetables is more complicated than it looks, why bad soldering still works, on moving individual bits around, and what I learned about using technology where one probably does not need technology.

Bad Data and Data Engineering: Dissecting Google Play Music Takeout Data using Beam, go, Python, and SQL

On the joy of inheriting a rather bad dataset - dissecting ~120GB of terrible Google Takeout data to make it usable, using Dataflow/Beam, go, Python, and SQL.

Why I use Linux

One question I do get in earnest quite frequently is why I put up with running GNU/Linux distributions for development work. An attempt at a simple response.

RE: Throw Away Code? Use go, not Python or Rust!

Responding to an article on using Rust for throw away code and prototyping: Making a case for go over Rust, Python, and perl.

A Data Engineering Perspective on Go vs. Python (Part 2 - Dataflow)

In Part 2 of our comparison of Python and go from a Data Engineering perspective, we'll finally take a look at Apache Beam and Google Dataflow and how the go SDK and the Python SDK differ, what drawbacks we're dealing with, how fast it is by running extensive benchmarks, and how feasible it is to make the switch

A Data Engineering Perspective on Go vs. Python (Part 1)

Exploring golang - can we ditch Python for go? And have we finally found a use case for go? Part 1 explores high-level differences between Python and go and gives specific examples on the two languages, aiming to answer the question based on Apache Beam and Google Dataflow as a real-world example.

Goodbye, WordPress - Hello, Hugo & nginx

Ditching WordPress for a static site generator

How a broken memory module hid in plain sight

How a broken memory module hid in plain sight – and how I blamed the Linux Kernel and two innocent hard drives

Tensorflow on edge, or – Building a “smart” security camera with a Raspberry Pi

The amount of time my outdoor cameras are being set off by light, wind, cars, or anything other than a human is insane. Overly cautious security cameras might be a feature, but an annoying one at that...

How I built a (tiny) real-time Telematics application on AWS

In 2017, I wrote about how to build a basic, Open Source, Hadoop-driven Telematics application (using Spark, Hive, HDFS, and Zeppelin) that can track your movements while driving, show you how your driving skills are, or how often you go over the speed limit - all without relying on 3rd party vendors processing and using that data on your behalf...

A look at Apache Hadoop in 2019

In this article, we'll take a look at whether Apache Hadoop still a viable option in 2019, with Cloud driven data processing an analytics on the rise...

Building a Home Server

In this article, I’ll document my process of building a home server - or NAS - for local storage, smb drives, backups, processing, git, CD-rips, and other headless computing...

Analyzing Reddit’s Top Posts & Images With Google Cloud (Part 2 - AutoML)

In the last iteration of this article we analyzed the top 100 subreddits and tried to understand what makes a reddit post successful by using Google’s Cloud ML tool set to analyze popular pictures.

Analyzing Reddit’s Top Posts & Images With Google Cloud (Part 1)

In this article (and its successors), we will use a fully serverless Cloud solution, based on Google Cloud, to analyze the top Reddit posts of the 100 most popular subreddits. We will be looking at images, text, questions, and metadata...

Analyzing Twitter Location Data with Heron, Machine Learning, Google's NLP, and BigQuery

In this article, we will use Heron, the distributed stream processing and analytics engine from Twitter, together with Google’s NLP toolkit, Nominatim and some Machine Learning as well as Google’s BigTable, BigQuery, and Data Studio to plot Twitter user's assumed location across the US.

Data Lakes: Some thoughts on Hadoop, Hive, HBase, and Spark

This article will talk about how organizations can make use of the wonderful thing that is commonly referred to as “Data Lake” - what constitutes a Data Lake, how probably should (and shouldn’t) use it to gather insights and why evaluating technologies is just as important as understanding your data...

(Tiny) Telematics with Spark and Zeppelin

How I made an old Crown Victoria "smart" by using Telematics...

Storm vs. Heron – Part 2 – Why Heron? A developer’s view

This article is part 2 of an upcoming article series, Storm vs. Heron.

Storm vs. Heron, Part 1: Reusing a Storm topology for Heron

This article is part 1 of an upcoming article series, Storm vs. Heron.

Update an HBase table with Hive... or sed

This article explains how to edit a structured number of records in HBase by combining Hive on M/R2 and sed - and how to do it properly with Hive.