RSSAmplifier

Blog

Travis Horn - Data Scientist and Software Engineer

I'm a Data Scientist & Software Engineer passionate about cutting-edge technology. I collaborate with teams to solve complex problems through code.

travishorn.comRSS feed ↗203 posts

Latest posts

Rolling Your Own Node.js Continuous Deployment on Linux

You don't need a bloated, expensive CI/CD platform to deploy your Node.js apps. You can roll your own "push-to-deploy" pipeline directly on your VPS. …

Finding Things Fast on the Command Line

I manage a multi-purpose Linux server. It hosts bare Git repositories, MariaDB databases, automated ETL scripts, and web applications. When a deployme…

Modular Configuration for Clean Upgrades

This guide helps you make sure your Debian server stays in a high integrity state by following the conf.d drop-in pattern. With this method of configu…

Svelte Client-Side Rendering for Observable Plot Done Right

Previously, I wrote about rendering Observable Plot server-side with SvelteKit. Today, I'm tackling client-side rendering. While it might seem straigh…

Keep Your Main Branch Stable with GitHub Flow

I've found that having a consistent version control workflow is crucial, no matter if I'm working solo or with other contributors. Lately I've been ex…

When to Use Flexbox Over CSS Grid

Both Flexbox and CSS Grid are powerful layout tools built into modern CSS. They are often discussed as if you must pick one or the other, but in pract…

Building Accessibility into Web Apps

Web apps have evolved beyond static documents, often relying on complex interfaces like dropdowns and modals built entirely with generic ` `s and …

Switching to uv for Python Management

For years, I relied on the official installer from python.org to manage my Python versions. Recently, however, I uninstalled everything to start fresh…

DuckDB Storage Showdown

We all know DuckDB is fast. It feels like magic when you're working with millions of rows, even on a laptop. But we often treat data storage as an aft…

Materialized Views for Less Downtime

If you manage reporting databases in PostgreSQL, you've probably worked with nightly rebuilding of summary tables. This might involve a script that co…

A Hands-on Exploration of SQLite for Production

If you've worked with SQLite before, you know how versatile a database system it can be. Its simplicity and serverless architecture make it the go-to …

High Performance Data Visualization in the Browser with DuckDB and Parquet

With massive data, frontend visualization often means you either crush the browser with giant JSON payloads or get stuck waiting on slow API endpoints…

Syncing Across Tabs with BroadcastChannel

Here's a scenario: You have a dashboard open in two windows. In the first, you update a record, but when you switch to the second, nothing has changed…

How I Used Spark Broadcast Joins to Speed Up Cross-Border Analysis

Efficiency is the name of the game when you've got massive data volumes that include cross-border and regional aggregations like those you might find …

Modeling a Multi-Currency Settlement Engine

When anyone makes a purchase, whether it's online or in a brick-and-mortar store, the cardholder's bank (the issuer) and the merchant's bank (acquirer…

Refactoring Complex SQL to Reduce Query Time by 99%

A query that works perfectly on a small development dataset can still bring the production database to a halt as data volumes scale. You must understa…

Building an Enrollment Prediction System with Machine Learning

Schools need accurate enrollment forecasting for stability and success. Forecasting informs decisions they face annually: staffing, resource allocatio…

Zero Downtime: Setting up a 3-Node MariaDB Cluster

Most developers are used to spinning up a single instance of their database system and calling it a day. But what happens when you need true redundanc…

Managing Geographic Zones with GeoJSON and MariaDB

One of the most common yet complex challenges in application development is the "zone lookup" problem. It's used in processes like managing school dis…

Why Apache is Returning 200 OK Instead of 304 Not Modified

I recently ran into a frustrating caching issue with Apache. I requested a page where the request headers included `If-Modified-Since` and the respons…

A SQL Window Function Case Study

Imagine you need to run a report showing every student enrolled during the academic year. The catch? The report specification requires one row per stu…

From Auto-Increments to UUID v7

When picking a primary key for a table in a database, sometimes there is an obvious choice. If you're creating a table of users, and users authenticat…

Data Types: Continuous, Discrete, and Related Categories

Recognizing data types is a foundational concept in statistics and data science because the type of data you have dictates the appropriate statistical…

Quick Git Fixes

Git is a powerful tool, but it can also be a source of frustration when things go wrong. I've documented the process I use to quickly fix some common …

Converting TSV to CSV with DuckDB

DuckDB is an incredibly versatile, in-process database. Its powerful SQL engine and ability to read various file formats make it an excellent tool for…

Why Open-Source Principles Aren't Always Obvious in Art

I love the free and open-source software (FOSS) community. The idea that code can be freely shared, studied, modified, and redistributed for the benef…

Data Analysis with Azure Machine Learning: Healthcare Data Demo

Data is the lifeblood driving innovation in many industries, including healthcare. Machine learning algorithms are being used to predict patient outco…

Real-Time Delivery ETA Prediction in Python

I've been playing around with how ML techniques can be applied to logistics and e-commerce. One of the ideas I had floating around my head was to buil…

Cursor Rules for SvelteKit Development

Cursor, the AI-first code editor, significantly speeds up my development workflow, especially when working with modern web frameworks. However, like m…

Simple Python Dependency Management

While powerful tools like virtualenv, pipenv, conda, and Poetry exist to provide extra advantages for dependency management, I've found a simple syste…

Setting up a Project with ESLint and Prettier

ESLint is a tool for "linting" your code. It can analyze your code and warn you of potential errors. In order for it to work, you need to configure it…

Introducing libsql Migrate

libsql Migrate is a database migration and seed management tool for libsql with configurable options, written in JavaScript and available as an npm pa…

Creating a Development Database: Syncing Production Data for Efficient Development

As you develop software, having a development database that mirrors your production data is a game-changer. It allows you to work with realistic data …

Monitoring your Linux Server with Prometheus

Every system administrator would be wise to keep a close eye on the health and performance of their server infrastructure. Prometheus, an open-source …

Integrating SQL Data into your Next.js App

Building dynamic applications often involves connecting to a database to store and retrieve data. Next.js provides an excellent platform for creating …

Comprehensive Guide: Backing Up and Recovering Data in MariaDB

Ensuring the safety and integrity of data in your database management system should be one of the highest priorities. MariaDB, a powerful and widely u…

Getting Started with MariaDB

MariaDB is a great open-source relational database management system. This article will walk you through the process of installing and configuring Mar…

Configuring HTTPS/TLS on nginx: A Complete Guide for Securing Web Traffic

Today, online security is paramount. Configuring HTTPS/TLS/SSL on your web server is crucial to protect sensitive data and establish trust with your u…

Firewall Configuration with nftables

Firewalls are an essential part of network security, and nftables is a powerful tool for configuring them. In this article, we'll explore how to confi…

Reverse Proxying with nginx

Reverse proxying with nginx is a powerful way to manage and distribute web traffic. In this comprehensive guide, we'll walk you through the installati…

Rolling Your Own Continuous Deployment with Node.js, Git, PM2, and Linux

Continuous deployment involves frequently integrating code changes into a shared repository. This allows for your production app to be updated with th…

SvelteKit Magic: Server-Side Rendering for Observable Plot Explained

Using a web application framework like SvelteKit opens up possibilities to bring your data visualizations to life on the server side before sending th…

How to Manage Node.js Processes with PM2

Node.js is a popular runtime environment for building scalable and high-performance applications. However, managing Node.js processes can be challengi…

Serving Next.js Apps on your Linux Server

In this tutorial, we will explore the process of serving Next.js apps on a Linux server. Next.js is a powerful framework for building server-side rend…

The Simple Guide to Installing Node.js using APT and NodeSource

Installing Node.js is a crucial step for developers looking to leverage its powerful features and vast ecosystem. In this comprehensive guide, we will…

Uploading and Saving Files with SvelteKit

Recently, while working on a project, I needed to add a feature to allow users to upload a file and save it on the server. I did quite a bit of search…

Step-by-Step Guide: Setting Up a Git Repository Hosting Server

If you're looking for a reliable and secure way to host your Git repositories, setting up your own server can be a great solution. In this step-by-ste…

Streamline Your Linux Experience with Automatic Updates

Staying up-to-date with software updates and security patches is important for a secure computing experience. However, manually keeping track of updat…

Unlocking the Power of Public Key Authentication in OpenSSH: A Comprehensive Guide

Public key authentication is a fundamental aspect of secure and efficient communication in the realm of server administration. In today's interconnect…

Mastering Port Forwarding in VirtualBox: Unlocking Connectivity

VirtualBox is as a powerful tool to create and manage virtual machines. Using it, you may often encounter scenarios where you need to establish commun…