Blog (RSS)

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

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 | 2025-08-25

An extremely unsophisticated Ponzi scheme

blackdiamand's site | 2025-08-24

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 | 2025-08-22

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 | 2025-08-21

Brief overview of CPU caching

Why caches Over the years, the gap between the throughput of the processor and the throughput of main memory has widened. Programs cannot make use of higher processor speeds or a large number of cores...

James Ma | 2025-08-15

CS + Data Science Done Right

Why most students waste this easy double major combination and how to actually build valuable skills instead of just collecting credentials.

salm.dev | 2025-08-15

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 | 2025-08-10

Attention Span August

A month without social media or recommendation algorithms.

Nick Winans | 2025-07-31

Building My Perfect Keyboard — The Plan

Perfecting every part of my Lily58 keyboard.

Nick Winans | 2025-07-29

Beyond If Statements and For Loops

How pattern matching, type systems, and functional thinking transformed my approach to solving problems.

salm.dev | 2025-07-27

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 | 2025-07-14

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 | 2025-07-04

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.

salm.dev | 2025-06-27

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 p...

James Ma | 2025-05-23

Winning Pokemon Showdown

We examined Pokémon Showdown battles using game theory and identified the mathematically optimal strategies.

salm.dev | 2025-05-11

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 | 2025-04-29

Dungeons, Dragons & Development

In both homebrew D&D worlds and software development, you create vast interconnected systems that must remain cohesive while evolving over time.

salm.dev | 2025-04-21

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 | 2025-03-23

Abstracting over Futures and Options

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...

James Ma | 2025-03-19

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 | 2025-03-16

eCommerce Automations

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

Nick Winans | 2025-02-23

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 ...

James Ma | 2025-02-15

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 | 2025-02-11

InkLink

Real-time Collaborative E-Paper Canvas

Nick Winans | 2025-01-26

A gallery of randomly generated art

In a paper from CMU, security researchers describe a nifty algorithm used to generate random images known as RandomArt. In a nutshell, the algorithm takes as input a seed to a pseudo-random number gen...

James Ma | 2025-01-18

Learning the NATO phonetic alphabet with the Web Speech API

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

Andrew Moses | 2024-12-29

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 ap...

Blog on Michael Noguera | 2024-12-09

In defense of bad grammar

From the moment we begin formal education we are drilled with the idea of “proper grammar.” “My friend and I,” not “me and my friend.” “A large number of people,” not “lots of people...

James Ma | 2024-11-30

Currying C functions using a heap-based trampoline

Suppose you have a function and an argument that you want to send off to a worker thread. The canonical way to do this in C is via pthreadcreate. $ man pthreadcreate SYNOPSIS include pthread.h...

James Ma | 2024-11-27

Obligatory Meta First Post About Creating This Blog

Visit post for details.

ben.enterprises Blog | 2024-11-24

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 | 2024-10-30

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 ser...

Blog on Lucas's Webpage | 2024-10-19

Revamping the UPL's people counter

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

Andrew Moses | 2024-10-14

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. Li...

Blog on Lucas's Webpage | 2024-10-13

Command Line Productivity

I am not a fan of bloated workflows or feature overload. In this article, I describe my minimal, focused, keyboard-centric workflow where I do my best work. In other words: I shill Vim.

salm.dev | 2024-10-10

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 | 2024-10-07

Simple backpropogation in Python and numpy

In our previous post, we introduced backpropogation as a means for efficiently training neural networks. Here we’ll attempt to implement a simple Python framework to train a fully-connected neural n...

James Ma | 2024-09-28

Deriving backpropogation from scratch

Most sizable neural networks today rely on backpropogation to make the training process more efficient. While backpropogation is pretty ubiquitous in libraries such as torch.autograd, I was curious ho...

James Ma | 2024-09-10

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 | 2024-09-02

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 “competiti...

Blog on Lucas's Webpage | 2024-08-31

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 def...

Blog on Lucas's Webpage | 2024-08-30

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 | 2024-08-23

Preserving My Future Self

I underwent an ergonomic overhaul to improve health and reduce strain. Or: I bought an expensive new split-keyboard. Either way, an adventure worth sharing.

salm.dev | 2024-08-18

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 | 2024-08-11

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 | 2024-07-26

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 | 2024-07-26

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...

Blog on Lucas's Webpage | 2024-06-26

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...

Blog on Lucas's Webpage | 2024-05-30

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 | 2024-05-24

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 perha...

Blog on Lucas's Webpage | 2024-05-17

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 usua...

Blog on Lucas's Webpage | 2024-05-15

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 | 2024-05-05

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 | 2024-05-03

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 s...

Blog on Lucas's Webpage | 2024-04-30

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 | 2024-04-25

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 tha...

Blog on Lucas's Webpage | 2024-04-21

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 | 2024-04-01

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 follo...

Blog on Lucas's Webpage | 2024-04-01

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 you...

Blog on Lucas's Webpage | 2024-03-29

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 fo...

blackdiamand's site | 2024-03-26

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 | 2024-03-17

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 | 2024-03-15

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...

Blog on Lucas's Webpage | 2024-03-13

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 | 2024-03-06

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 | 2024-01-28

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...

Blog on Lucas's Webpage | 2023-11-27

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 | 2023-11-11

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 | 2023-10-01

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 inte...

Blog on Lucas's Webpage | 2023-09-05

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 | 2023-08-13

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 | 2023-07-08

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 | 2023-07-04

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 hab...

Blog on Lucas's Webpage | 2023-07-01

Making My Blog 3x Faster

Optimizing fonts to slash load times

Nick Winans | 2023-06-27

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 | 2023-06-26

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...

blackdiamand's site | 2023-01-06

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 | 2022-12-28

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 | 2022-07-14

A CS Course Map for Incoming UW-Madison Students

Visit post for details.

Blog on Michael Noguera | 2022-06-07

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 | 2022-05-09

Exploiting GitHub Actions

Finding a way around GitHub's build matrix limits with GitHub Script

Nick Winans | 2022-03-17

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 communi...

Blog on Michael Noguera | 2021-12-22

Mysterious Broken Bootloader

Investigating and fixing the bootloader woes of ZMK

Nick Winans | 2020-10-03

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 | 2020-01-14

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 | 2019-10-04

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 | 2019-04-06

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,...

Blog on Michael Noguera | 2019-04-04

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, that...

Blog on Michael Noguera | 2018-12-03

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 pas...

Blog on Michael Noguera | 2018-07-19

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 | 2018-07-18