Blog (RSS)

Articles written by friends and alumni of the UPL. Learn something new about technology, and maybe even yourself.

Want to add yours? Add your RSS feed or submit a post directly.

PostgreSQL: Transactions, Row Locks, and Advisory Locks

How PostgreSQL row locks for update, for share and advisory locks interact: session vs transaction scope, pgadvisoryxactlock, deadlocks, bigint keys, and fetch–lock–refetch.

David Teather | March 27, 2026

SimpleStreet: A Chrome Extension for StreetEasy

I built a Chrome extension to make NYC apartment hunting on StreetEasy less painful by showing move-in dates, hiding noise, and adding notes/tags/ratings.

David Teather | March 16, 2026

Remote SSH with Zed

How to get Zed's remote SSH working on UW-Madison’s CS lab machines with AFS, load balancers, and all.

Nico Salm | March 11, 2026

MadHacks Potpourri

Some hacks for hacking a hackathon

Andrew Moses | March 7, 2026

As Bad atime as Any: Every Read a Write

Visit post for details.

ben.enterprises Blog | March 3, 2026

Dynamic linking with lazy binding

I recently had to debug a dynamic linking issue. This took me down a rabbit hole exploring how dynamic linkers work - in particular, how a dynamic linker resolves an external function at runtime. How...

James Ma | February 5, 2026

From Rivers Rose Empires

No really, where would we be without them?

Nico Salm | January 4, 2026

A Better Judging Algorithm for the Largest Hackathon in Wisconsin

Visit post for details.

ben.enterprises Blog | December 15, 2025

Regular expression matching

This is a writeup of Leetcode 10. Regular Expression Matching. My motivation for writing this is twofold. The first is that most of the submitted solutions on Leetcode try to be too clever and succinc...

James Ma | December 10, 2025

It's your fault my laptop knows where I am

How dare you

Andrew Moses | November 19, 2025

Matrix multiplication tricks on CPU

In this post we’ll iteratively improve on multiplying two random 1024 x 1024 float matrices, resulting in a 20x speedup on CPU. We’ll mostly focus on how different mathematical interpretations of matr...

James Ma | October 27, 2025

C++ smart pointers speedrun

Raw pointers can be useful when you want to manipulate memory directly, but using them comes with consequences if improperly managed, e.g. if you forget to free a pointer, free a pointer more than onc...

James Ma | October 4, 2025

Lvalues, rvalues, and move semantics in C++

I’ve written a decent amount of C, but never really took the time to understand its internals. In the first of what will hopefully become a series of articles, we will look at lvalues, rvalues, and...

James Ma | August 31, 2025

How to fight the attention economy

If you’ve ever been to a casino, you’ll notice that there are no clocks, no windows, and no straight angles. Ugly carpet patterns keep your eyes forward as you wander through curved hallways, your gaz...

James Ma | August 30, 2025

Adding Mermaid Diagrams to Rehype in Astro (With rehype-mermaid-cli)

Render UML and system design diagrams in Astro using rehype-mermaid-cli. Covers setup, light/dark mode, and comparisons with rehype-mermaid.

David Teather | August 25, 2025

Aspects of an unsophisticated Ponzi scheme

Intro Silicon Valley is home to some of the largest boom and bust cycles. Housing prices are among the highest in the world. Due to laws preventing more dense housing being built though more dense ho...

blackdiamand's site | August 24, 2025

How to Add Live Stats To Your Site

Learn how to add live, constantly updating stats from GitHub, YouTube, LinkedIn, and more to your website using APIs, web scraping, and Cloudflare Functions.

David Teather | August 22, 2025

Reflections A Year Into My Career

A brain dump of lessons, advice, and realizations from my first year as a new grad software engineer. Take what’s useful, ignore the rest.

David Teather | August 21, 2025

Letting Go

Most normal people find skydiving frightening, and for good reason1. When you jump out of the plane, you put complete trust in your parachute2. Letting go of the aircraft becomes an act of faith3. Whi...

Blog on Lucas's Webpage | August 10, 2025

Attention Span August

A month without social media or recommendation algorithms.

Nick Winans | July 31, 2025

Building My Perfect Keyboard — The Plan

Perfecting every part of my Lily58 keyboard.

Nick Winans | July 29, 2025

Why 99% of GitHub Projects Die (And the 3 Rules That Got Me 2M+ Downloads)

Learn the 3 critical rules that separate successful GitHub projects from the 99% that fail. Discover proven strategies that took my TikTokAPI from 0 to 5000 stars and 2M downloads, including search...

David Teather | July 14, 2025

Parser combinators for postal addresses

A while ago, Tsoding did a stream on parsing JSON with parser combinators. I was curious how hard it would be to use the basic parsers he implemented to create a new parser for U.S. postal addresses....

James Ma | July 4, 2025

Create, Don't Consume

We're trading long-term fulfillment for short-term dopamine hits, and each trade makes the next one harder to resist.

Nico Salm | June 27, 2025

Attention as a kernel smoothing problem

Reddit discussion This post is about a rarely discussed interpretation of “attention,” the underlying technique behind transformers, which has found its way into everything from natural language proce...

James Ma | May 23, 2025

Winning Pokemon Showdown

We used game theory to find the mathematically optimal strategies in Pokémon Showdown battles.

Nico Salm | May 11, 2025

Automating keyword extraction and ranking to enhance a resume

TL;DR I extracted keywords from job descriptions with Gemini and created a Python script to rank them to enhance my friend's resume. I spent some time this past week helping a friend update their res...

Michael Berkey | April 29, 2025

I Made a Million Dollar Product from My Dorm Room

The story of the nicenano; a wireless Pro Micro-compatible microcontroller board I made in my freshman year of college.

Nick Winans | March 23, 2025

Combining Futures and Options in Scala

In Scala, two interesting concepts you’ll often work with are Futures and Options. A Future is an abstraction for some value that might not be available yet. An Option abstracts over the possibility o...

James Ma | March 19, 2025

How and Why I made this website

TL;DR I made this website using Zola to discuss my work/interests. People kept asking, so I thought I'd make my first post to answer their questions. Why make a personal website? I wanted a place to...

Michael Berkey | March 16, 2025

eCommerce Automations

Sharing my Shopify store's automations after 3 years of optimization

Nick Winans | February 23, 2025

Configuring external storage devices for Jellyfin

This post serves as a personal guide to running a Jellyfin server locally using an external hard drive. The following assumes: Debian GNU/Linux 12 I’m using a Raspberry Pi 4 External hard drive e...

James Ma | February 15, 2025

Adding Giscus Discussions to Astro

Discover how to integrate Giscus discussions into your Astro blog. Learn to boost engagement with interactive comments, effortless moderation, and theme customization.

David Teather | February 11, 2025

InkLink

Real-time Collaborative E-Paper Canvas

Nick Winans | January 26, 2025

Learning the NATO phonetic alphabet with the Web Speech API

...and they told me "video games can't teach you anything"

Andrew Moses | December 29, 2024

List of WISCERS 2024 Faculty Mentors

I participated in Wisconsin Science and Computing Emerging Research Stars WISCERS as part of the 2022-23 cohort and really enjoyed the experience. Even if you’re uncertain, you should definetly appl...

Blog on Michael Noguera | December 9, 2024

Obligatory Meta First Post About Creating This Blog

Visit post for details.

ben.enterprises Blog | November 24, 2024

Adding Interactive Charts to Astro

Learn how to add interactive data visualizations to your Astro site using Apex Charts. This guide includes setup steps, customization tips, and code examples to help you bring your data to life with i...

David Teather | October 30, 2024

Types and Programming Languages

“Types and Programming Languages” T&PLs is a relatively-esoteric1 textbook about type theory. The professor2 of my college PLs class3 has an old webpage that recommends this book: If you are serious...

Blog on Lucas's Webpage | October 19, 2024

Revamping the UPL's people counter

Who knew figuring out the lab's occupancy would be so much work?

Andrew Moses | October 14, 2024

Git Cheatsheet Prime

I’m an enthusiast and daily user of git’s command line interface 1. While GUIs offer advantages in visualization and intuition2, they greatly fall short in power3, concision, and extensibility. Like v...

Blog on Lucas's Webpage | October 13, 2024

Command Line Productivity

I describe my minimal, focused, keyboard-centric workflow where I do my best work. In other words: I shill Vim.

Nico Salm | October 10, 2024

Adding UML Diagrams to Rehype in Astro (With rehype-mermaid)

Learn how to add and style UML diagrams in your Astro project using Rehype and Mermaid.js. This step-by-step guide covers setup, customization for dark mode, and image support, making it perfect for s...

David Teather | October 7, 2024

Problems and Solutions to Long term Prediction Markets

Long term forecasting and prediction markets If you were to visit Manifold about a year ago, you would have noticed a market that claimed AI had a 30% chance of wiping out humanity before 2030 or a 4%...

blackdiamand's site | September 2, 2024

On Competitive Programming

What is Competitive Programming? “Competitive Programming” by its name encompasses all programming done in competitive nature. This post will specifically focus on and use the term “competitive pro...

Blog on Lucas's Webpage | August 31, 2024

Fueling the Fire

Intro Motivation, though often overlooked, is arguably the strongest influence on a developer’s1 productivity. While skills, obstacles, and environments define the challenges we face, motivation defin...

Blog on Lucas's Webpage | August 30, 2024

Is Web Scraping Ethical?

Web scraping: a tool for innovation or a threat to privacy? Dive into the ethical gray areas of data extraction and explore the real-world impacts on research, competition, and personal privacy.

David Teather | August 23, 2024

Programming Paradigms

Ideas and Code Writing code is a never-ending battle to translate abstract ideas into formal instructions. This translation is lossy by nature: by making our ideas concrete, we are forced to face thei...

Blog on Lucas's Webpage | August 11, 2024

Adding an Astro Search Bar

Enhance your Astro-built website with a powerful, locally-powered search bar Join David Teather as he guides you through adding a custom search feature using astro-pagefind. This blog includes easy-t...

David Teather | July 26, 2024

Astro Optimized Images With Markdown

Learn how to optimize images using Astro with Markdown in this detailed guide by David Teather. Discover step-by-step instructions on moving images for better web performance and reducing load times,...

David Teather | July 26, 2024

Hacking Is Necessary

Note: this isn’t a security post: “hacking” here means “unclean coding”, i.e. “I quickly hacked together a shell script as a temporary fix to the issue”. Sorry, cybersecurity enthusiasts. Obsession Ov...

Blog on Lucas's Webpage | June 26, 2024

Design Patterns

All Hail The Object Design Patterns is a classic book from the 90s that centers around low-level OOP idioms. While I’m sometimes quick to criticize OOP1, I still think there’s a lot of utility in unde...

Blog on Lucas's Webpage | May 30, 2024

Punching Through the Board

In my youth, I practiced Tae-Kwon-Do1. I had very little talent, but I still learned many valuable lessons. Few of those lessons were directly related to computer programming, but I have a knack for d...

Blog on Lucas's Webpage | May 24, 2024

The Power of the Commit

I don’t know of a developer who doesn’t appreciate version control. The undo-on-steroids it provides is convenient and invaluable. But there’s a much more subtle aspect of version control perhaps eve...

Blog on Lucas's Webpage | May 17, 2024

Rewriting a Toy Compiler

I’ve written a lot of posts glorifying functional programming lately, but they tend to be abstract and hypothetical. They roughly amount to “ADTs, higher-order-functions, and immutability are usually...

Blog on Lucas's Webpage | May 15, 2024

The Breadth-Depth Phase Shift

Learning computer science is a lot like forming an n-dimensional1 snowball. Beginning is tough, because you must start from nothing; the snowball begins as a tiny clump, and is prone to crumbling. Eve...

Blog on Lucas's Webpage | May 5, 2024

IMC Prosperity 2

Join David Teather in his compelling account of competing in the IMC Prosperity 2 competition. This blog post covers his journey through the stages of virtual asset trading, from algorithmic to manual...

David Teather | May 3, 2024

Computers Are Magic

Disclaimer: This post is unapologetically romantic. When people ask me why I’ve chosen CS over other majors/careers, I usually respond something along the lines of: “Computers have interested me since...

Blog on Lucas's Webpage | April 30, 2024

My UW Madison Course Tier List

I'm about to graduate from UW Madison and I thought I'd share my thoughts on the classes that I've taken. I'm a Computer Science major with a certificate in Entrepreneurship. Hopefully this can help y...

David Teather | April 25, 2024

Code Without Fear

Programming is hard. It’s hard to work with tools, to formulate ideas into code, and to make that code work. As developers, we are inevitably forced to manage many responsibilities at once, more than...

Blog on Lucas's Webpage | April 21, 2024

Pushing Random Buttons

Before I discovered programming, a lot of my time around computers was spent becoming intimately familiar with the software I used on a daily basis. I became a master of Microsoft Power-Point transiti...

Blog on Lucas's Webpage | April 1, 2024

Why Haskell is a Great Language

No, this is not an April Fools’ Day joke. I’m currently taking a class on programming languages as a part of my CS degree at UW. The class briefly touches on Haskell, and somebody posted the following...

Blog on Lucas's Webpage | April 1, 2024

Speedrunning College

A few decades ago, universities were the only place where it was possible for students to use and learn about computers; now it’s possible to teach yourself the entire curriculum without leaving your...

Blog on Lucas's Webpage | March 29, 2024

Create The World's Simplest Trading Bot, For Free!

Create your own trading bot This is an unofficial guide and not created by Manifold If you notice something doesn’t work, report it on Discord, in the api-and-bots channel. You are responsible for...

blackdiamand's site | March 26, 2024

Functional Refactoring: Wordle

Functional programming FP has an odd status among developers. It is1 simultaneously loved and feared. I suspect most programmers would agree that maps and folds are useful, but concepts like immutab...

Blog on Lucas's Webpage | March 17, 2024

GitHub Field Day NYC 2024 Organizer

I had the pleasure of helping organize GitHub Field Day NYC 2024, and it took a lot of planning and coordination to make it happen. I had a lot of fun at the event and wanted to detail some of the thi...

David Teather | March 15, 2024

Lazy vs Eager Learning

There are a lot of opinions about the “best ways” to learn programming on the internet, but they’re usually some combination of the following: “Just write code” “learn by doing” Learn “the basics” ...

Blog on Lucas's Webpage | March 13, 2024

Monads

Monads are data types1 that expose methods for chaining, typically for the sake of abstracting state. More concretely, a monad is a type m where there exist the two2 functions: class Monad m where ...

Blog on Lucas's Webpage | March 6, 2024

Battlecode 2024 Finalist

I was dragged into Battlecode 2024 by one of our teammates. I had never heard of Battlecode before, but I was excited to try it out. I had a lot of fun and I'm glad I did it, and we ended up qualifyin...

David Teather | January 28, 2024

APL Tutorial

I’ve been working on writing an APL Interpreter recently. Understanding the language is a prerequisite to writing an interpreter, and I’m pretty sure I’ve got it figured out, but I figure it’s still a...

Blog on Lucas's Webpage | November 27, 2023

Organizing MadHacks Fall 2023 Reflections

David Teather's reflections on organizing MadHacks Fall 2023, a 24-hour hackathon at the University of Wisconsin-Madison, and the lessons learned from the experience.

David Teather | November 11, 2023

Every Vim Binding I Know

I love vim. It makes editing text fast and fun. The learning-curve is admittedly steep, however, and the return-on-investment for seeking new bindings looks too much like the reciprocal function. I ha...

Blog on Lucas's Webpage | October 1, 2023

Implicit Recursion

I recently started learning Haskell, and I came across a structure in the language that really made me think: Currying. Consider a function called “add” that takes two integers and returns an integer...

Blog on Lucas's Webpage | September 5, 2023

Why I Use Vim

The Vim Lecture I was initially hesitant to write a post about Vim, because most of what I have to say about it has already been said somewhere on the internet1. My mind was recently changed when, in...

Blog on Lucas's Webpage | August 13, 2023

Effective Anki Cards

TL;DR: long cards are bad; short cards are good. The TL;DR says it all, but I want to elaborate on how I fell into the trap of making bad cards. I have no excuse for not knowing what good cards look l...

Blog on Lucas's Webpage | July 8, 2023

Leetcode: 4 Types of Problems

What and Why Leetcode is a popular platform for studying DSA Data Structures and Algorithms, especially for coding/technical interviews, competitive programming, and education in general. It offers...

Blog on Lucas's Webpage | July 4, 2023

UW Madison Computer Science

I like to plan things out, especially things of high importance. Since college happens to fall into that category, I’ve spent a significant amount of time planning out courses, and I’ve made a habit o...

Blog on Lucas's Webpage | July 1, 2023

Making My Blog 3x Faster

Optimizing fonts to slash load times

Nick Winans | June 27, 2023

Using a Chromebook as a CS Student

There seems to be a notion that owning an expensive computer is necessary to study computer science. While I do think that buying the most expensive notebook at Best-Buy would probably be the most con...

Blog on Lucas's Webpage | June 26, 2023

A Software Engineering (SWE) Job Primer

A Quick Guide to SWE Internships and New Grad Positions.

Ben Wallen | May 5, 2023

Alaska's Top Four Primary, Game Theory, and How to Not Campaign in a Ranked Choice Election

How to Not Campaign in a Ranked Choice Election Don’t attack your allies Background Alaska’s new electoral system, adopted by voters in a 2020 referendum, has created some interesting results. In the...

blackdiamand's site | January 6, 2023

Exploring the Anshel-Anshel-Goldfeld Key Exchange System

Final project for CS 642 Information Security at UW-Madison, Fall 2022 sophomore year. Two UPL friends and I implemented the Anshel-Anshel-Goldfeld key exchange protocol and wrote our term paper a...

Blog on Michael Noguera | December 28, 2022

LINK.social Exposed Users' Sensitive Information & Mass Account Hijacking

Learn how LINK.social exposed sensitive user information, including locations, phone numbers, and birthdays, along with vulnerabilities allowing mass account hijacking.

David Teather | July 14, 2022

A CS Course Map for Incoming UW-Madison Students

Visit post for details.

Blog on Michael Noguera | June 7, 2022

Using GPT-3 To Write A Blog Post

Michael Berkey | May 12, 2022

YikYak Is Exposing Millions of User Locations

Discover how YikYak's exposed GPS coordinates and user IDs put millions at risk. Learn the implications, recommended fixes, and how to protect your privacy.

David Teather | May 9, 2022

Game Design and Education

Matt Wildman | April 16, 2022

Why I Use Firefox

James Ma | April 3, 2022

Exploiting GitHub Actions

AWS offers free lessons for developers who want to learn about their products. Just be careful when following the lab tutorial and use software that is not free.

Nick Winans | March 17, 2022

Incorrect Reification: An Anti-Pattern

A discussion of incorrect reification — when you implement something as an API when it should merely be a pattern.

Phoenix Kahlo | February 25, 2022

Learning to Code With Projects

How learning to program can be effective through creating projects.

Rudy Banerjee | February 2, 2022

Hugo Shortcode: License Badges on Code Blocks

One of my favorite features of the static site generator Hugo is “shortcodes”, which allow you to abstract away chunks of website content and invoke them from your markdown posts. The Hugo community h...

Blog on Michael Noguera | December 22, 2021

Mysterious Broken Bootloader

Investigating and fixing the bootloader woes of ZMK

Nick Winans | October 3, 2020

AP Chem: Spectrophotometric Mixture Analysis

To determine the composition of a mystery mixture consisting of various types of food coloring, I wrote this program that works with Vernier’s Spectral Analysis software.

Blog on Michael Noguera | January 14, 2020

Zybooks Autoplay

Zybooks online textbooks include animated activities that you must watch to completion. This script makes them auto-play at double speed when you load the page.

Blog on Michael Noguera | October 4, 2019

TJCTF 2019: All The Zips

Forensics - 20 points 140 zips in the zip, all protected by a dictionary word. This was the first zip file challenge that I attempted. Afterwards, I have noticed that almost every CTF competition has...

Blog on Michael Noguera | April 6, 2019

Reverse Engineering the Wisconsin Driver Practice Test

Note from a future me, after I took the test: It’s pretty easy but it tries to trick you. Glance over these questions because they were good to know. The Problem I am currently taking Drivers’ Ed, and...

Blog on Michael Noguera | April 4, 2019

Hack This Site: Basic Challenges

Basic 1: HTML Comment This level is what we call “The Idiot Test”, if you can’t complete it, don’t give up on learning all you can, but, don’t go begging to someone else for the answer, thats one way...

Blog on Michael Noguera | December 3, 2018

How To: Blind SQL Injection, HSCTF 2018: Password

Here are some rudimentary notes on how I solved the challenge ‘Password’ for HSCTF 2018. The puzzle gave a mock-up social media website with a login form, and asked that you retrieve Keith’s password...

Blog on Michael Noguera | July 19, 2018

Making backups of hard drives using the bash utility “dd”

I had an old corrupted hard drive that I needed to back up so that it could be reused.

Blog on Michael Noguera | July 18, 2018