Plasma

If you’re familiar with the demo-scene, you’ve probably seen the plasma effect: In this article, you’ll learn how to implement plasma effects of your own. The Algorithm To generate a plasma effect, you iterate the pixels in the screen buffer. For each pixel: Apply a function to the pixel’s coordinate producing some value \(v\). Use \(v\) to calculate the new RGB value of the pixel. Update the pixel’s RGB value in the screen buffer. Repeat steps (1)-(3) until you have processed the entire image frame. Display the updated frame. Applying these steps at a high frequency creates the plasma animation. As you’ll see, the choice of function determines the shape and scale of the output image. ...

February 13, 2025 · 3 min

Port Scanning

Port scanning is the name given to the process of discovering open ports on a remote host. In this article, you’ll explore the design and implementation of a basic port scanner written in Rust. Starting with a Ping Utilities with port scanning capabilities often start by sending a ping to the target. For example, nmap pings the target before scanning. This ensures the target is reachable. To send a ping or an ICMP packet, you need to create a raw socket which requires the CAP_NET_RAW capability. A regular user doesn’t have CAP_NET_RAW capability meaning a ping requires sudo or elevated privileges. Luckily, modern Linux provides unpriviledged ping. The unpriviledged ping uses a dgram socket rather than a raw socket. ...

January 21, 2025 · 7 min

Cellular Textures

The article “Making Cellular Textures” gives a good description of how you would go about generating textured images like the ones shown below. The authors’ descriptions and pseudocode provide the basis for the implementation of a CLI texture generator. This article describes such a tool and its performance when generating a number of different textures. Texture Parameters The goal of the tool is to generate a texture as a MxN grayscale PNG. The program exposes five key parameters that control the look of the output image: ...

August 22, 2024 · 5 min

ffmpeg Video Editing Hacks

ffmpeg is a powerful command line tool for processing video and audio files. ffmpeg can do just about anything you can imagine with media files. The trouble is in understanding how to invoke the program correctly. There are a few options that require some Linux and multimedia expertise to get right. This article covers a couple handy ffmpeg hacks that have made much of the audio/visual content on this website possible. The commands presented here are MP4 centric. That said, you can modify most of the commands to work with alternative formats (for example, WebM). ...

July 15, 2024 · 4 min

Ulam Spiral

The Ulam spiral is a graphical depiction of a set of prime numbers devised by the mathematician Stanislaw Ulam. To quote the Wiki, it’s constructed by writing the positive integers in a square spiral and specially marking the prime numbers. The outcome is a square with distinct diagonal, horizontal, and vertical lines. This post will walk through the development of a Ulam spiral visualization tool. Creating a Ulam Spiral Take a look at the 4x4 Ulam spiral below: ...

May 2, 2024 · 8 min

Caesar Cipher

The Caesar Cipher (CC) is a classic symmetric key algorithm dating back to the time of Julius Caesar. If you are new to cryptography, the Caesar Cipher is a great first crypto algorithm to learn. This post will walk through the details of implementing a CC encrypt/decrypt function. You’ll then get a look at the internals of a CC code cracker. Algorithm Description There are four key ingredients to a Caesar Cipher: ...

April 9, 2024 · 10 min

The Sierpinski Triangle

Do you remember when you first learned about recursion? The thought triggered a memory from an old CS101 Java course. The textbook had some fractal triangle thing made with only 20 lines of code. At the time, it was a confusing 20 lines of code. A quick search on Google for “fractal triangle recursion” led straight to the Sierpinski triangle. A Sierpinski triangle generator with an ncurses visualization is a fun afternoon project. ...

February 7, 2024 · 6 min

Signing Git Commits With GPG

If you’ve been around the open source community long enough, you’ve probably heard of people signing their VCS commits/tags. This post covers the why and how of signing your Git commits. The focus will be on commits but keep in mind that these tips equally apply to tags. Why Sign Your Commits The short answer is, signing your commits makes it harder for an attacker to impersonate you. Sure, if you work solo on rinky-dink toy projects, having your commits signed isn’t a big deal. Now consider the case where you make commits to an open source project with sensitive code or at your day job where you make commits and PRs on a product. It might be worth safeguarding those commits just a bit. ...

January 21, 2024 · 6 min

Dotfile Mgmt With GNU Stow

Do you have a bunch of dotfiles? Do you maintain a GitHub repo with all your dotfiles? Whenever you upgrade your machine, do you find yourself manually placing the dotfiles in the right spots in your home directory? If you answered yes to these questions, read on. Enter GNU Stow GNU Stow is a dotfile management utility. Stow has all the makings of a varsity athlete: Stow is small (a 32KB Perl script). Stow is simple to use with a solid manpage. Stow doesn’t get in the way of version controlling dotfiles. Real world Stow usage is pretty simple and best explained with an example. Imagine you had your i3wm and Bash configurations stored in your home directory. The layout might look something like this: ...

January 20, 2024 · 2 min

The Game of Life

If you grind old Advent of Code problems, you might notice a particular style of problem crop up more than once. The people of Reddit refer to their solutions as a variation of Conway’s Game of Life (GoL). Wikipedia has a great article on GoL. The animations are eye catching. The Wiki serves as motivation for a terminal app that visualizes GoL simulations. Rules of the Game What are the GoL rules? The setup is simple. You have an MxN grid of “cells.” Each cell is always in one of two states: live or dead. The grid transitions through states on a frame tick. You apply the following rule at each tick. ...

December 1, 2023 · 6 min