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.
Now: June 2026
What I'm working on, reading, and thinking about right now.
Nico Salm | June 26, 2026
Now: May 2026
What I'm working on, reading, and thinking about right now.
Nico Salm | May 31, 2026
My Wisconsin Experience
I led UW-Madison's UPL and ran Wisconsin's largest hackathon, and got four years of audacity, whimsy, and absurdity to remember it by.
Nico Salm | May 27, 2026
The Outbox Pattern Visualized
An interactive walkthrough of the outbox pattern with live simulations: what it solves, how it works, and what it looks like under load.
David Teather | May 23, 2026
Updates (Now Page) - May 2026
Visit post for details.
Andrew Moses | May 1, 2026
Now: April 2026
What I'm working on, reading, and thinking about right now.
Nico Salm | April 30, 2026
Solving "I Dropped a Neural Net"
How I solved the 'I Dropped a Neural Net' weight permutation puzzle: why pairing beats ordering, Hungarian matching, and the fingerprint that fixed bad pairs.
David Teather | April 24, 2026
PostgreSQL: Transactions, Row Locks, and Advisory Locks
How PostgreSQL row locks for update, for share and advisory locks interact: session vs transaction scope, deadlocks, bigint keys, and fetch-lock-refetch.
David Teather | March 27, 2026
SimpleStreet: A Free StreetEasy Chrome Extension
SimpleStreet is a free Chrome extension for StreetEasy that shows move-in dates, hides sponsored listings, and adds notes, tags, and 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
I pull live GitHub, YouTube, and LinkedIn stats into my site using public APIs, scraping, and a Cloudflare Workers proxy.
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 3M+ Downloads)
I found the 3 rules that took my TikTokAPI project from 0 to 7K stars and 3M downloads: search validation, friction elimination, and discoverability tactics.
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
How to Add Giscus Comments to an Astro Blog
Add Giscus comments to an Astro blog with GitHub Discussions, dark-mode syncing, and no server to maintain.
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
How to Add Interactive Charts to Astro with ApexCharts
Add interactive ApexCharts to Astro Markdown with a custom rehype plugin, dark-mode syncing, and a chart code block workflow.
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)
I render Mermaid diagrams in Astro markdown with rehype-mermaid and Playwright, including dark mode support and inline images.
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?
I look at whether web scraping is ethical, drawing on building TikTokAPI 3M downloads and its use in research at Yale, Northwestern, and UNESCO.
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
I added client-side search to my Astro site with astro-pagefind, no third-party APIs or hosting required. Here's the setup and config.
David Teather | July 26, 2024
How to Optimize Images in Astro Markdown and Content Collections
Optimize images in Astro Markdown and content collections with Astro's Image component, build-time WebP conversion, and lazy loading.
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
I competed in IMC Prosperity 2, a trading competition, writing algorithmic and manual strategies each round, and finished 103 in the US, 381 overall.
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 ranked every UW-Madison computer science course I took into a tier list, starting with 642 Information Security, based on what I actually learned and enjoyed.
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 helped organize GitHub Field Day NYC 2024, an unconference for GitHub Campus Experts. Here's what went into planning it and what stood out at the event.
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 competed in Battlecode 2024 as a first-time participant and qualified for the finals, placing 13th out of about 400 teams.
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
I organized MadHacks Fall 2023, a 24-hour UW-Madison hackathon with 250 attendees and over $15K raised in sponsorships. Here's what I learned running it.
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
I found a broken auth flaw in LINK.social exposing every user's phone number, location, and birthday, plus an exploit to hijack any account. Bug bounty: $500.
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
I found YikYak attaches precise GPS coordinates, accurate to 10-15 feet, on every post, exposing 2 million users' locations. Covered by Vice and The Verge.
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
