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