Sync: 2026-03-29 00:00

This commit is contained in:
Split 2026-03-29 00:00:17 -04:00
parent c21cc75b4f
commit 8bd59ec46d
49 changed files with 3341 additions and 553 deletions

View File

@ -3,24 +3,27 @@ date = '2025-03-19T08:44:50-04:00'
draft = false draft = false
title = '' title = ''
+++ +++
![](images/journey_home.png) <div style="text-align: center; margin-bottom: 20px;">
<img src="images/journey_home.png" alt="The Journey Home by Matthew Wong" style="max-width: 100%;">
<p style="font-size: 14px; color: #666; margin-top: 8px; font-style: italic;">"The Journey Home" — Matthew Wong, 2017</p>
</div>
<div style="text-align: center; margin: 20px 0;"> <div style="text-align: center; margin: 20px 0;">
<a href="/pickleball.html" style=" <a href="/pickleball.html" style="
display: inline-block; display: inline-block;
background: linear-gradient(45deg, #ff6b6b, #feca57, #48dbfb, #ff9ff3, #ff6b6b); background: linear-gradient(45deg, #8b4a4a, #8c7a3d, #3d7a8c, #7a5278, #8b4a4a);
background-size: 300% 300%; background-size: 300% 300%;
animation: gradient-shift 3s ease infinite; animation: gradient-shift 3s ease infinite;
color: #000; color: #f0e6d3;
font-family: 'Comic Sans MS', cursive; font-family: 'Comic Sans MS', cursive;
font-size: 24px; font-size: 24px;
font-weight: bold; font-weight: bold;
padding: 15px 30px; padding: 15px 30px;
border-radius: 50px; border-radius: 50px;
text-decoration: none; text-decoration: none;
box-shadow: 0 4px 15px rgba(255,107,107,0.4); box-shadow: 0 4px 15px rgba(100,60,60,0.5);
transform: rotate(-2deg); transform: rotate(-2deg);
border: 3px dashed #000; border: 3px dashed #5a4a4a;
">🏓 PICKLEBALL STATS 🏓</a> ">🏓 PICKLEBALL STATS 🏓</a>
</div> </div>
<style> <style>

View File

@ -0,0 +1,182 @@
---
title: "I Built a Rating System for My Pickleball League (And Definitely Didn't Cook the Books)"
date: 2026-02-26
draft: true
tags: ["pickleball", "rating systems", "ELO", "statistics"]
categories: ["Projects", "Recreation"]
---
After running my pickleball league with Glicko-2 for over a month, I realized the system had problems. So I did what any reasonable person would do: I threw it out and rebuilt it from scratch with an ELO system.
And yes, I happen to be the biggest beneficiary of the change. Coincidence? Probably. Let me explain the math, and you can be the judge.
## The Problem: Glicko-2 Was Overkill
Glicko-2 is a sophisticated rating system designed for competitive chess. It tracks three values per player:
- **Rating** — Your skill estimate (default: 1500)
- **Rating Deviation** — How *uncertain* the system is about your skill
- **Volatility** — How *consistent* you are
The math involves converting to different scales, computing probabilities with hyperbolic functions, and solving iteratively for new volatility. It's clever, but for a casual league of six players, it's like bringing a sports car to a parking lot.
But the real problem was this: I added a *margin bonus* to account for wins by different margins (winning 11-9 vs 11-2). The formula?
```
weighted_score = base_score + tanh(margin/11 × 0.3) × (base_score - 0.5)
```
**Translation:** I took the hyperbolic tangent of a fraction, multiplied by an arbitrary constant (why 0.3? No particular reason), and called it science.
This is what's known as "making stuff up." It had no theoretical basis and was impossible to explain to players.
## The Doubles Problem
The old system calculated team ratings by averaging both partners' ratings. Sounds reasonable, right?
Until you think about it: If you (1400) play with a strong partner (1700) against two 1550s, the system thinks it's an even match. But *you* were carried by a stronger player! Winning that match shouldn't boost your rating as much as winning with a weaker partner.
The system didn't account for partner strength, making it unfair for everyone.
## Enter: Pure ELO
ELO is elegantly simple. Every player has *one number* representing their skill. When two players compete:
1. Calculate the probability that one player beats the other based on rating difference
2. Compare expected performance to actual performance
3. Adjust ratings based on the difference
The key formula is:
```
Expected Win Probability = 1 / (1 + 10^((opponent_rating - your_rating) / 400))
```
If you're 1500 and your opponent is 1500, you should win 50% of the time. If you're 1600 and they're 1500, you should win about 64% of the time. Simple.
After a match:
```
Rating Change = K × (Actual Performance - Expected Performance)
```
Where `K = 32` (how much weight each match carries) and `Actual Performance` is your *per-point performance*:
```
Actual Performance = Points Scored / Total Points Played
```
Win 11-9? That's 0.55 (55% of points). Win 11-2? That's 0.846 (84.6%). This captures match quality far better than binary win/loss.
## The Secret Sauce: The Effective Opponent Formula
In doubles, we use:
```
Effective Opponent Rating = Opponent1 + Opponent2 - Your Teammate
```
**Why this works:**
If your teammate is strong, the effective opponent rating drops—because your teammate made the match easier. If your teammate is weak, the effective opponent rating rises—because you were undermanned.
Beating 1500-rated opponents with a 1600-rated partner? Effective opponent: 1400. You gain less because your partner carried you.
Beating 1500-rated opponents with a 1400-rated partner? Effective opponent: 1600. You gain more because you did heavy lifting.
This is *fair*.
## The Migration: Before and After
Here's where things get spicy. I replayed all 29 historical matches through the new ELO system:
<table style="width: 100%; border-collapse: collapse; margin: 20px 0;">
<tr style="background-color: #f0f0f0;">
<th style="border: 1px solid #ddd; padding: 10px; text-align: left;">Player</th>
<th style="border: 1px solid #ddd; padding: 10px; text-align: right;">Old Glicko-2</th>
<th style="border: 1px solid #ddd; padding: 10px; text-align: right;">New ELO</th>
<th style="border: 1px solid #ddd; padding: 10px; text-align: right;">Change</th>
<th style="border: 1px solid #ddd; padding: 10px; text-align: right;">Matches</th>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 10px;">Andrew Stricklin</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1651</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1538</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;"><span style="color: #c80000;">113</span></td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">19</td>
</tr>
<tr style="background-color: #fafafa;">
<td style="border: 1px solid #ddd; padding: 10px;">David Pabst</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1562</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1522</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;"><span style="color: #c80000;">40</span></td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">11</td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 10px;">Jacklyn Wyszynski</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1557</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1514</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;"><span style="color: #c80000;">43</span></td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">9</td>
</tr>
<tr style="background-color: #fafafa;">
<td style="border: 1px solid #ddd; padding: 10px;">Eliana Crew</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1485</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1497</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;"><span style="color: #00640a;">+11</span></td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">13</td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 10px;">Krzysztof Radziszeski</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1473</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1476</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;"><span style="color: #00640a;">+3</span></td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">25</td>
</tr>
<tr style="background-color: #fafafa;">
<td style="border: 1px solid #ddd; padding: 10px;"><strong>Dane Sabo</strong></td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1290</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1449</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;"><strong><span style="color: #00640a;">+159</span></strong></td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">25</td>
</tr>
</table>
### Observations
**The Rating Spread Compressed**
The old system spread players across 361 rating points. The new system compresses them into 89 points. This makes sense—we're a recreational group, not chess grandmasters. The new system rates us fairly within a tighter band.
**The Winners**
- **Dane Sabo**: +159 points. The old system penalized him for losses with weaker partners. The effective opponent formula gives credit for "carrying." (Purely coincidental that I benefit from my own math.)
- **Eliana Crew**: +11 points
- **Krzysztof Radziszeski**: +3 points
**The Losers**
- **Andrew Stricklin**: 113 points. Still ranked #1, but the old system over-credited wins with strong partners.
- **Jacklyn Wyszynski**: 43 points
- **David Pabst**: 40 points
## A Note on Conflicts of Interest
You may notice that the system designer (me) is also the biggest beneficiary of the new ratings, gaining a convenient 159 points.
I want to assure you this is *purely coincidental* and the result of *rigorous mathematical analysis*, not at all influenced by the fact that I was tired of being ranked last.
The new formulas are based on *sound theoretical principles* that just *happen* to conclude I was being unfairly penalized all along.
*Trust the math.* 😉
## Why This System Works
**For a small league:**
- Simple to understand (one rating per player)
- Fair to individual skill (per-point scoring)
- Respects partnership (effective opponent formula)
- Transparent (you can calculate rating changes yourself)
- Fast convergence (5-10 matches to stabilize a rating)
**The bottom line:** Your rating now reflects your true skill more accurately than before. Even if it means Dane finally looks respectable.

393
content/cv.md Normal file
View File

@ -0,0 +1,393 @@
+++
date = '2026-03-24'
draft = false
title = 'CV'
+++
<style>
.cv-container {
max-width: 800px;
margin: 0 auto;
font-family: 'Source Sans Pro', -apple-system, BlinkMacSystemFont, sans-serif;
}
.cv-header {
text-align: center;
margin-bottom: 2em;
padding-bottom: 1.5em;
border-bottom: 2px solid rgba(100, 150, 255, 0.3);
}
.cv-header h1 {
font-size: 2.4em;
margin-bottom: 0.3em;
letter-spacing: 0.02em;
}
.cv-contact {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 0.5em 1.5em;
font-size: 0.95em;
}
.cv-contact a {
white-space: nowrap;
}
.cv-section {
margin-bottom: 1.8em;
}
.cv-section h2 {
font-size: 1.4em;
border-bottom: 1.5px solid rgba(100, 150, 255, 0.3);
padding-bottom: 0.3em;
margin-bottom: 0.8em;
}
.cv-section h3 {
font-size: 1.1em;
margin-bottom: 0.5em;
margin-top: 0.8em;
}
.cv-entry {
margin-bottom: 1.2em;
padding-left: 0.2em;
}
.cv-entry-header {
display: flex;
justify-content: space-between;
align-items: baseline;
flex-wrap: wrap;
gap: 0.5em;
}
.cv-entry-title {
font-weight: 700;
font-size: 1.05em;
}
.cv-entry-date {
font-size: 0.9em;
opacity: 0.7;
white-space: nowrap;
}
.cv-entry-subtitle {
font-size: 0.95em;
margin-top: 0.15em;
opacity: 0.85;
}
.cv-entry ul {
margin-top: 0.4em;
margin-bottom: 0;
padding-left: 1.4em;
}
.cv-entry li {
margin-bottom: 0.25em;
font-size: 0.92em;
line-height: 1.5;
}
.cv-skills {
display: grid;
grid-template-columns: auto 1fr;
gap: 0.4em 1em;
font-size: 0.95em;
}
.cv-skill-label {
font-weight: 700;
white-space: nowrap;
}
.cv-award-note {
font-style: italic;
font-size: 0.9em;
opacity: 0.8;
}
.cv-pub-venue {
font-size: 0.9em;
opacity: 0.8;
}
.cv-download {
text-align: center;
margin: 1.5em 0 0.5em;
font-size: 0.9em;
opacity: 0.7;
}
.cv-updated {
text-align: right;
font-size: 0.8em;
opacity: 0.5;
font-style: italic;
margin-top: 2em;
}
@media (max-width: 600px) {
.cv-entry-header {
flex-direction: column;
gap: 0.1em;
}
.cv-contact {
flex-direction: column;
align-items: center;
gap: 0.3em;
}
.cv-skills {
grid-template-columns: 1fr;
}
}
</style>
<div class="cv-container">
<div class="cv-header">
<h1>Dane Sabo</h1>
<div class="cv-contact">
<span>📍 Greater Pittsburgh Area</span>
<span>✉️ <a href="mailto:yourstruly@danesabo.com">yourstruly@danesabo.com</a></span>
<span>🔗 <a href="https://danesabo.com">danesabo.com</a></span>
<span><a href="https://linkedin.com/in/dane-sabo-819b211b6/">LinkedIn</a></span>
<span><a href="https://github.com/namelessfaceless">GitHub</a></span>
</div>
</div>
<div class="cv-download">
<a href="/cv.pdf">⬇ Download PDF version</a>
</div>
<div class="cv-section">
<h2>Education</h2>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">Ph.D. — Mechanical Engineering</span>
<span class="cv-entry-date">Aug 2023 Present</span>
</div>
<div class="cv-entry-subtitle"><strong>NRC Fellow, University of Pittsburgh</strong></div>
<ul>
<li>GPA: 3.896/4.0 (<a href="/transcript.pdf">Unofficial Transcript</a>)</li>
<li><strong>Coursework:</strong> High-Assurance Cyber-Physical Systems, Linear and Digital Control Systems, Nonlinear Dynamical Systems, Advanced Dynamics</li>
<li><strong>Nuclear Engineering Certificate:</strong> Fundamentals of Nuclear Engineering, Integration of Nuclear Plant Systems, Nuclear Core Dynamics, Radiation Detection &amp; Measurement, Management Principles for Nuclear Power</li>
</ul>
</div>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">B.S. — Mechanical Engineering</span>
<span class="cv-entry-date">Aug 2019 Aug 2023</span>
</div>
<div class="cv-entry-subtitle"><strong>University of Pittsburgh</strong></div>
<ul>
<li>GPA: 3.433, Dean's Honor List throughout</li>
<li><strong>Coursework:</strong> Linear Algebra for Machine Learning (Graduate), Mechatronics</li>
</ul>
</div>
</div>
<div class="cv-section">
<h2>Awards &amp; Honors</h2>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">Best Student Paper Award</span>
<span class="cv-entry-date">2025</span>
</div>
<div class="cv-entry-subtitle">NPIC&amp;HMIT 2025</div>
<ul>
<li>Awarded for "Employing a Hardware-in-the-Loop Approach to Realize a Fully Homomorphic Encrypted Controller for a Small Modular Advanced High Temperature Reactor"</li>
</ul>
</div>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">Student Representative, MEMS Department Chair Search Committee</span>
<span class="cv-entry-date">2025</span>
</div>
<ul>
<li>Selected as student representative on the search committee for the next Department Chair of Mechanical Engineering and Materials Science at the University of Pittsburgh</li>
</ul>
</div>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">NRC Graduate Fellowship</span>
<span class="cv-entry-date">2023 Present</span>
</div>
<div class="cv-entry-subtitle">U.S. Nuclear Regulatory Commission</div>
<ul>
<li>Competitive fellowship supporting graduate research in nuclear engineering and related fields</li>
</ul>
</div>
</div>
<div class="cv-section">
<h2>Publications &amp; Presentations</h2>
<h3>First Author</h3>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">Analysis of Vortex Generating Fences on a Formula Student Multi-Element Rear Wing</span>
<span class="cv-entry-date">2023</span>
</div>
<div class="cv-pub-venue">Published in <em>Ingenium Undergraduate Research at the Swanson School of Engineering</em>, Pages 106111</div>
</div>
<h3>Major Contributor</h3>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">Employing a Hardware-in-the-Loop Approach to Realize a Fully Homomorphic Encrypted Controller for a Small Modular Advanced High Temperature Reactor</span>
<span class="cv-entry-date">2025</span>
</div>
<div class="cv-pub-venue">NPIC&amp;HMIT 2025, Conference Paper (Second Author)</div>
<div class="cv-award-note">🏆 Best Student Paper Award</div>
</div>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">Demonstration of Advanced Encryption for an Instrumentation and Control System using ARCADE</span>
<span class="cv-entry-date">2024</span>
</div>
<div class="cv-pub-venue">TRTR 2024 Annual Meeting, Presentation</div>
</div>
</div>
<div class="cv-section">
<h2>Skills</h2>
<div class="cv-skills">
<span class="cv-skill-label">Programming</span>
<span>C/C++ (embedded), LaTeX, MATLAB, Python (Pandas, NumPy, SciPy, SymPy), Rust</span>
<span class="cv-skill-label">Engineering</span>
<span>ANSYS Simulation Suite, FDM printing, Fusion 360, Soldering, SolidWorks</span>
<span class="cv-skill-label">Business</span>
<span>Customer discovery, Team management, Office Suite</span>
<span class="cv-skill-label">Other</span>
<span>Adobe Illustrator, Adobe Photoshop, Blender</span>
</div>
</div>
<div class="cv-section">
<h2>Professional Experience</h2>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">Graduate Student Researcher</span>
<span class="cv-entry-date">Aug 2023 Present</span>
</div>
<div class="cv-entry-subtitle">Instrumentation and Controls Laboratory, University of Pittsburgh — Advisor: Dr. Daniel G. Cole</div>
<ul>
<li>Developing formal verification methods for autonomous hybrid control systems with application to nuclear reactor startup sequences and safety-critical cyber-physical systems</li>
<li>Collaborating with Idaho National Laboratory and Sandia National Laboratory on hardware-in-the-loop control system validation and encrypted controller implementations for advanced reactor designs</li>
<li>Conducting research on virtualized networks to simulate control systems with genuine network traffic for nuanced analysis of system dynamics</li>
</ul>
</div>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">Independent Contractor (Mechanical Engineer)</span>
<span class="cv-entry-date">Dec 2022 Jun 2023</span>
</div>
<div class="cv-entry-subtitle">Human Motion Technologies LLC — Remote / Pittsburgh, PA</div>
<ul>
<li><strong>Hip Exoskeleton EXO-004:</strong> Provided expertise in composites and manufacturing for carbon fiber-reinforced polymer (CFRP) parts, adopting resin infusion as a standard practice.</li>
<li><strong>Prosthetics Foot Testing TES-001A02:</strong> Developed a testing fixture for prosthetic feet, evaluating products for fatigue and ultimate strength failure per ISO-10328 standards, designed for up to 5700 N and two million cycles.</li>
</ul>
</div>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">Summer Undergraduate Research Intern</span>
<span class="cv-entry-date">Jun 2022 Aug 2022</span>
</div>
<div class="cv-entry-subtitle">University of Pittsburgh</div>
<ul>
<li>Analyzed the effects of corotating and counterrotating pairs of vortex-generating fences, focusing on separation prevention at various yaw angles and speeds.</li>
</ul>
</div>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">Mechanical Engineering Co-op</span>
<span class="cv-entry-date">Jan 2021 Apr 2021, Aug Dec 2021</span>
</div>
<div class="cv-entry-subtitle">BMW Manufacturing — Spartanburg, SC</div>
<ul>
<li><strong>Pruefcubing:</strong> Evaluated buildability and geometric validity of supplier parts for BMW XM performance SUV, supporting metrology processes.</li>
<li><strong>Quality Steering:</strong> Monitored development series buildability on manufacturing lines and audited prototype vehicles (X3, X4, X5, X6, X7, XM). Developed data management tools to enhance workflows and database accessibility.</li>
</ul>
</div>
</div>
<div class="cv-section">
<h2>Teaching Experience</h2>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">Technical Director / Aerodynamics Lead</span>
<span class="cv-entry-date">2020 2022</span>
</div>
<div class="cv-entry-subtitle">Panther Racing (Formula SAE) — University of Pittsburgh</div>
<ul>
<li>Led a team of 30+ engineers and managed a six-figure budget for researching and producing an open-wheel-style racecar.</li>
<li>Rehabilitated team culture and mentored younger members to develop engineering and communication skills.</li>
<li>Engineered and designed the aerodynamic package and demonstrated expertise in carbon fiber composites manufacturing, including vacuum-bagging, wet lay-up, and mold preparation.</li>
<li>Delivered a final car that completed all events at FSAE Michigan without failures, improving team performance from 37th/40 (45.4 pts) to 32nd/99 (462.6 pts).</li>
</ul>
</div>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">Content Developer &amp; Teaching Assistant</span>
<span class="cv-entry-date">Aug 2022 Dec 2022</span>
</div>
<div class="cv-entry-subtitle">MEMS 0071 "Intro to Fluid Mechanics" — University of Pittsburgh</div>
<ul>
<li>Developed curriculum incorporating fundamental CFD concepts, with a focus on postprocessing, simulation, and meshing for hydrostatic and hydrodynamic problems.</li>
<li>Conducted weekly office hours to assist students in understanding course material.</li>
</ul>
</div>
</div>
<div class="cv-section">
<h2>Projects</h2>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">King's Eunuch — Poker Engine (Rust)</span>
<span class="cv-entry-date">2025 Present</span>
</div>
<ul>
<li>Developing a type-safe poker library in Rust with near-zero dependencies as a language learning project.</li>
<li>Implemented custom types for cards and hands with ordering traits, and complete hand detection and evaluation logic.</li>
<li>Building toward game state simulation and eventual use as a poker training aid.</li>
</ul>
</div>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">1986 Nissan 300ZX — LS V8 Engine Swap</span>
<span class="cv-entry-date">2021 Present</span>
</div>
<ul>
<li>Performing a 5.3L LS swap using a junkyard-sourced 2008 Avalanche engine, pulled and disassembled personally.</li>
<li>Completed engine teardown, cleaning, rear main seal, flywheel torque, and timing chain assembly.</li>
<li>Sourced transmission, ECU, sensors, and engine mounts. Stripped factory engine bay to prepare for installation.</li>
</ul>
</div>
</div>
<div class="cv-updated">Last updated March 2026</div>
</div>

View File

@ -18,7 +18,7 @@ email = 'yourstruly@danesabo.com'
[[menu.main]] [[menu.main]]
name = 'CV' name = 'CV'
weight = 8 weight = 8
url = "/cv.pdf" url = "/cv/"

View File

@ -0,0 +1,22 @@
<head>
<title>{{ .Site.Title }} {{ with .Title }}- {{ . }} {{ end }}</title>
<link rel="stylesheet" type="text/css" href="{{ "css/fonts.css" | relURL }}">
<link rel="stylesheet" type="text/css" href="{{ "css/fontawesome.css" | relURL }}">
{{ $options := dict "transpiler" "libsass" "targetPath" "css/styles.css" }}
{{ $style := resources.Get "styles.scss" | toCSS $options | minify | fingerprint }}
<link rel="stylesheet" type="text/css" href="{{ $style.RelPermalink }}">
{{ with resources.Get "css/userstyles.css" }}
<link rel="stylesheet" type="text/css" href="{{ .Permalink }}">
{{ end }}
<!-- Dark Night Sky Theme -->
<link rel="stylesheet" type="text/css" href="{{ "css/dark-theme.css" | relURL }}">
{{ with .Site.Params.favicon }}
<link rel="icon" href="{{ . | relURL }}">
{{ end }}
<meta charset="UTF-8">
<meta name="author" content="{{ .Site.Params.Author }}">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
{{ range .AlternativeOutputFormats -}}
{{ printf `<link rel="%s" type="%s" href="%s" title="%s" />` .Rel .MediaType.Type .Permalink $.Site.Title | safeHTML }}
{{ end -}}
</head>

353
mockup.html Normal file
View File

@ -0,0 +1,353 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dane Sabo - Mockup</title>
<!-- Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600&family=IBM+Plex+Serif:wght@500;600&display=swap" rel="stylesheet">
<style>
:root {
--accent: #2563eb;
--accent-light: #3b82f6;
--text: #1f2937;
--text-muted: #6b7280;
--bg: #fafafa;
--card-bg: #ffffff;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html {
scroll-behavior: smooth;
}
body {
font-family: 'IBM Plex Sans', -apple-system, sans-serif;
font-size: 17px;
line-height: 1.7;
color: var(--text);
background: var(--bg);
}
/* Fade in animation */
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.animate {
animation: fadeInUp 0.6s ease-out forwards;
}
.delay-1 { animation-delay: 0.1s; opacity: 0; }
.delay-2 { animation-delay: 0.2s; opacity: 0; }
.delay-3 { animation-delay: 0.3s; opacity: 0; }
.delay-4 { animation-delay: 0.4s; opacity: 0; }
/* Layout */
.container {
max-width: 720px;
margin: 0 auto;
padding: 0 24px;
}
/* Nav */
nav {
padding: 24px 0;
border-bottom: 1px solid #e5e7eb;
background: var(--card-bg);
}
nav .container {
display: flex;
justify-content: space-between;
align-items: center;
}
nav .logo {
font-family: 'IBM Plex Serif', serif;
font-size: 1.25rem;
font-weight: 600;
color: var(--text);
text-decoration: none;
}
nav ul {
display: flex;
gap: 32px;
list-style: none;
}
nav a {
color: var(--text-muted);
text-decoration: none;
font-size: 0.95rem;
font-weight: 500;
position: relative;
transition: color 0.2s ease;
}
nav a:hover {
color: var(--accent);
}
nav a::after {
content: '';
position: absolute;
bottom: -4px;
left: 0;
width: 0;
height: 2px;
background: var(--accent);
transition: width 0.2s ease;
}
nav a:hover::after {
width: 100%;
}
/* Hero */
.hero {
padding: 80px 0 60px;
}
.hero h1 {
font-family: 'IBM Plex Serif', serif;
font-size: 3rem;
font-weight: 600;
margin-bottom: 16px;
letter-spacing: -0.02em;
}
.hero .tagline {
font-size: 1.15rem;
color: var(--text-muted);
margin-bottom: 24px;
}
.hero .tagline span {
color: var(--accent);
}
.hero .intro {
font-size: 1.1rem;
max-width: 600px;
}
/* Section */
section {
padding: 48px 0;
}
section h2 {
font-family: 'IBM Plex Serif', serif;
font-size: 1.75rem;
font-weight: 600;
margin-bottom: 24px;
letter-spacing: -0.01em;
}
/* Links */
a {
color: var(--accent);
text-decoration: none;
transition: color 0.2s ease;
}
a:hover {
color: var(--accent-light);
}
/* Cards */
.card-grid {
display: grid;
gap: 20px;
}
.card {
background: var(--card-bg);
border: 1px solid #e5e7eb;
border-radius: 12px;
padding: 24px;
transition: all 0.2s ease;
}
.card:hover {
border-color: var(--accent);
box-shadow: 0 4px 12px rgba(37, 99, 235, 0.1);
transform: translateY(-2px);
}
.card h3 {
font-family: 'IBM Plex Serif', serif;
font-size: 1.25rem;
margin-bottom: 8px;
}
.card p {
color: var(--text-muted);
font-size: 0.95rem;
}
.card .tag {
display: inline-block;
margin-top: 12px;
font-size: 0.8rem;
padding: 4px 10px;
background: #eff6ff;
color: var(--accent);
border-radius: 4px;
font-weight: 500;
}
/* Quick links */
.quick-links {
display: flex;
gap: 16px;
margin-top: 32px;
}
.quick-links a {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 12px 20px;
border: 1px solid #e5e7eb;
border-radius: 8px;
color: var(--text);
font-weight: 500;
transition: all 0.2s ease;
}
.quick-links a:hover {
border-color: var(--accent);
color: var(--accent);
}
.quick-links a.primary {
background: var(--accent);
border-color: var(--accent);
color: white;
}
.quick-links a.primary:hover {
background: var(--accent-light);
}
/* Footer */
footer {
padding: 48px 0;
margin-top: 48px;
border-top: 1px solid #e5e7eb;
color: var(--text-muted);
font-size: 0.9rem;
}
/* Comparison toggle */
.toggle-bar {
position: fixed;
bottom: 24px;
left: 50%;
transform: translateX(-50%);
background: var(--text);
color: white;
padding: 12px 24px;
border-radius: 100px;
font-size: 0.9rem;
z-index: 100;
box-shadow: 0 4px 20px rgba(0,0,0,0.2);
}
</style>
</head>
<body>
<nav class="animate">
<div class="container">
<a href="/" class="logo">Dane Sabo</a>
<ul>
<li><a href="#projects">Projects</a></li>
<li><a href="#about">About</a></li>
<li><a href="/cv.pdf">CV</a></li>
</ul>
</div>
</nav>
<main>
<section class="hero">
<div class="container">
<h1 class="animate delay-1">Hey, I'm Dane</h1>
<p class="tagline animate delay-2">
PhD Candidate · <span>Control Systems</span> · NRC Fellow
</p>
<p class="intro animate delay-3">
I'm a Mechanical Engineering PhD student at Pitt researching high-assurance autonomous hybrid control systems. When I'm not in the lab, you'll find me wrenching on my Honda CRF or working on an LS swap.
</p>
<div class="quick-links animate delay-4">
<a href="/cv.pdf" class="primary">View CV →</a>
<a href="mailto:yourstruly@danesabo.com">Get in touch</a>
</div>
</div>
</section>
<section id="projects">
<div class="container">
<h2 class="animate">Projects</h2>
<div class="card-grid">
<a href="#" class="card animate delay-1">
<h3>Hybrid Systems Verification</h3>
<p>Developing formal guarantees for autonomous systems operating in complex, dynamic environments.</p>
<span class="tag">Research</span>
</a>
<a href="#" class="card animate delay-2">
<h3>300ZX LS Swap</h3>
<p>Dropping a 5.3L LS into an '86 300ZX. Custom mounts, wiring, and fabrication.</p>
<span class="tag">Build</span>
</a>
<a href="#" class="card animate delay-3">
<h3>Custom 3D Printer</h3>
<p>Building a CoreXY printer from scratch with Klipper firmware.</p>
<span class="tag">Build</span>
</a>
</div>
</div>
</section>
<section id="about">
<div class="container">
<h2 class="animate">About</h2>
<p class="animate delay-1">
I spent three years with Pitt's Formula SAE team, progressing from Marketing Director to Technical Director, leading 30+ engineers and managing a six-figure budget. My undergrad research on aerodynamic vortex-generating fences was published in <em>Ingenium</em>.
</p>
<br>
<p class="animate delay-2">
Currently serving on the MEMS Department Chair Search Committee and co-founded the RPM Club to help students learn hands-on automotive skills.
</p>
</div>
</section>
</main>
<footer>
<div class="container">
<p>© 2026 Dane Sabo · Built with Hugo</p>
</div>
</footer>
<div class="toggle-bar">
✨ Mockup v1 — Typography + Hero + Cards
</div>
</body>
</html>

View File

@ -1,6 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html><head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<title>Dane Sabo - 404 Page not found </title> <title>Dane Sabo - 404 Page not found </title>
<link rel="stylesheet" type="text/css" href="/css/fonts.css"> <link rel="stylesheet" type="text/css" href="/css/fonts.css">
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css"> <link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
@ -9,6 +8,8 @@
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css"> <link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="author" content="Dane Sabo"> <meta name="author" content="Dane Sabo">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
@ -21,7 +22,7 @@
<nav> <nav>
<ul class="navbar"> <ul class="navbar">
<li class=""> <li class="">
<a href="/cv.pdf"> <a href="/cv/">
<span>CV</span> <span>CV</span>
</a> </a>
</li> </li>

View File

@ -1,6 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html><head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<title>Dane Sabo - Blog </title> <title>Dane Sabo - Blog </title>
<link rel="stylesheet" type="text/css" href="/css/fonts.css"> <link rel="stylesheet" type="text/css" href="/css/fonts.css">
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css"> <link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
@ -9,6 +8,8 @@
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css"> <link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="author" content="Dane Sabo"> <meta name="author" content="Dane Sabo">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
@ -22,7 +23,7 @@
<nav> <nav>
<ul class="navbar"> <ul class="navbar">
<li class=""> <li class="">
<a href="/cv.pdf"> <a href="/cv/">
<span>CV</span> <span>CV</span>
</a> </a>
</li> </li>
@ -72,6 +73,22 @@

View File

@ -1,50 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?> &lt;?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel></channel></rss>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Dane Sabo</title>
<link>http://localhost:1313/blog/</link>
<description>Latest blog posts from Dane Sabo</description>
<language>en-us</language>
<lastBuildDate>Wed, 19 Mar 2025 08:55:12 -0400</lastBuildDate>
<atom:link href="http://localhost:1313/blog/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Formula Student</title>
<link>http://localhost:1313/projects/formula_student/</link>
<pubDate>Thu, 20 Mar 2025 16:51:04 -0400</pubDate>
<guid>http://localhost:1313/projects/formula_student/</guid>
<description><!-- raw HTML omitted -->
</description>
</item>
<item>
<title>This Is a Secret</title>
<link>http://localhost:1313/blog/this-is-a-secret/</link>
<pubDate>Sun, 16 Mar 2025 21:11:16 -0400</pubDate>
<guid>http://localhost:1313/blog/this-is-a-secret/</guid>
<description><!-- raw HTML omitted -->
</description>
</item>
</channel>
</rss>

View File

@ -0,0 +1,209 @@
<!DOCTYPE html>
<html><head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<title>Dane Sabo - I Built a Rating System for My Pickleball League (And Definitely Didn&#39;t Cook the Books) </title>
<link rel="stylesheet" type="text/css" href="/css/fonts.css">
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
<meta charset="UTF-8">
<meta name="author" content="Dane Sabo">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<header class="page-header">
<div class="myname">
<h2><a href="http://localhost:1313/">Dane Sabo</a></h2>
</div>
<nav>
<ul class="navbar">
<li class="">
<a href="/cv/">
<span>CV</span>
</a>
</li>
<li class="">
<a href="/projects/">
<span>Projects</span>
</a>
</li>
<li class="">
<a href="/blog/">
<span>Blog</span>
</a>
</li>
<li class="">
<a href="/contact/">
<span>About Me</span>
</a>
</li>
</ul>
</nav>
</header>
<div id="content">
<main>
<article>
<h1 class="page-title blog">I Built a Rating System for My Pickleball League (And Definitely Didn&#39;t Cook the Books)</h1>
<p class="blog-post-info">Posted: <time>2026-02-26</time>
<span class="blog-taxonomy-info"> &nbsp; | &nbsp; Categories:
<a class="blog-taxonomy-info" href="/categories/projects">Projects</a>, <a class="blog-taxonomy-info" href="/categories/recreation">Recreation</a>
</span>
<span class="blog-taxonomy-info"> &nbsp; | &nbsp; Tags:
<a class="blog-taxonomy-info" href="/tags/elo">ELO</a>, <a class="blog-taxonomy-info" href="/tags/pickleball">pickleball</a>, <a class="blog-taxonomy-info" href="/tags/rating-systems">rating systems</a>, <a class="blog-taxonomy-info" href="/tags/statistics">statistics</a>
</span>
</p>
<div class="blog-post-content">
<p>After running my pickleball league with Glicko-2 for over a month, I realized the system had problems. So I did what any reasonable person would do: I threw it out and rebuilt it from scratch with an ELO system.</p>
<p>And yes, I happen to be the biggest beneficiary of the change. Coincidence? Probably. Let me explain the math, and you can be the judge.</p>
<h2 id="the-problem-glicko-2-was-overkill">The Problem: Glicko-2 Was Overkill</h2>
<p>Glicko-2 is a sophisticated rating system designed for competitive chess. It tracks three values per player:</p>
<ul>
<li><strong>Rating</strong> — Your skill estimate (default: 1500)</li>
<li><strong>Rating Deviation</strong> — How <em>uncertain</em> the system is about your skill</li>
<li><strong>Volatility</strong> — How <em>consistent</em> you are</li>
</ul>
<p>The math involves converting to different scales, computing probabilities with hyperbolic functions, and solving iteratively for new volatility. It&rsquo;s clever, but for a casual league of six players, it&rsquo;s like bringing a sports car to a parking lot.</p>
<p>But the real problem was this: I added a <em>margin bonus</em> to account for wins by different margins (winning 11-9 vs 11-2). The formula?</p>
<pre tabindex="0"><code>weighted_score = base_score + tanh(margin/11 × 0.3) × (base_score - 0.5)
</code></pre><p><strong>Translation:</strong> I took the hyperbolic tangent of a fraction, multiplied by an arbitrary constant (why 0.3? No particular reason), and called it science.</p>
<p>This is what&rsquo;s known as &ldquo;making stuff up.&rdquo; It had no theoretical basis and was impossible to explain to players.</p>
<h2 id="the-doubles-problem">The Doubles Problem</h2>
<p>The old system calculated team ratings by averaging both partners&rsquo; ratings. Sounds reasonable, right?</p>
<p>Until you think about it: If you (1400) play with a strong partner (1700) against two 1550s, the system thinks it&rsquo;s an even match. But <em>you</em> were carried by a stronger player! Winning that match shouldn&rsquo;t boost your rating as much as winning with a weaker partner.</p>
<p>The system didn&rsquo;t account for partner strength, making it unfair for everyone.</p>
<h2 id="enter-pure-elo">Enter: Pure ELO</h2>
<p>ELO is elegantly simple. Every player has <em>one number</em> representing their skill. When two players compete:</p>
<ol>
<li>Calculate the probability that one player beats the other based on rating difference</li>
<li>Compare expected performance to actual performance</li>
<li>Adjust ratings based on the difference</li>
</ol>
<p>The key formula is:</p>
<pre tabindex="0"><code>Expected Win Probability = 1 / (1 + 10^((opponent_rating - your_rating) / 400))
</code></pre><p>If you&rsquo;re 1500 and your opponent is 1500, you should win 50% of the time. If you&rsquo;re 1600 and they&rsquo;re 1500, you should win about 64% of the time. Simple.</p>
<p>After a match:</p>
<pre tabindex="0"><code>Rating Change = K × (Actual Performance - Expected Performance)
</code></pre><p>Where <code>K = 32</code> (how much weight each match carries) and <code>Actual Performance</code> is your <em>per-point performance</em>:</p>
<pre tabindex="0"><code>Actual Performance = Points Scored / Total Points Played
</code></pre><p>Win 11-9? That&rsquo;s 0.55 (55% of points). Win 11-2? That&rsquo;s 0.846 (84.6%). This captures match quality far better than binary win/loss.</p>
<h2 id="the-secret-sauce-the-effective-opponent-formula">The Secret Sauce: The Effective Opponent Formula</h2>
<p>In doubles, we use:</p>
<pre tabindex="0"><code>Effective Opponent Rating = Opponent1 + Opponent2 - Your Teammate
</code></pre><p><strong>Why this works:</strong></p>
<p>If your teammate is strong, the effective opponent rating drops—because your teammate made the match easier. If your teammate is weak, the effective opponent rating rises—because you were undermanned.</p>
<p>Beating 1500-rated opponents with a 1600-rated partner? Effective opponent: 1400. You gain less because your partner carried you.</p>
<p>Beating 1500-rated opponents with a 1400-rated partner? Effective opponent: 1600. You gain more because you did heavy lifting.</p>
<p>This is <em>fair</em>.</p>
<h2 id="the-migration-before-and-after">The Migration: Before and After</h2>
<p>Here&rsquo;s where things get spicy. I replayed all 29 historical matches through the new ELO system:</p>
<table style="width: 100%; border-collapse: collapse; margin: 20px 0;">
<tr style="background-color: #f0f0f0;">
<th style="border: 1px solid #ddd; padding: 10px; text-align: left;">Player</th>
<th style="border: 1px solid #ddd; padding: 10px; text-align: right;">Old Glicko-2</th>
<th style="border: 1px solid #ddd; padding: 10px; text-align: right;">New ELO</th>
<th style="border: 1px solid #ddd; padding: 10px; text-align: right;">Change</th>
<th style="border: 1px solid #ddd; padding: 10px; text-align: right;">Matches</th>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 10px;">Andrew Stricklin</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1651</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1538</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;"><span style="color: #c80000;">113</span></td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">19</td>
</tr>
<tr style="background-color: #fafafa;">
<td style="border: 1px solid #ddd; padding: 10px;">David Pabst</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1562</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1522</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;"><span style="color: #c80000;">40</span></td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">11</td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 10px;">Jacklyn Wyszynski</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1557</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1514</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;"><span style="color: #c80000;">43</span></td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">9</td>
</tr>
<tr style="background-color: #fafafa;">
<td style="border: 1px solid #ddd; padding: 10px;">Eliana Crew</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1485</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1497</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;"><span style="color: #00640a;">+11</span></td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">13</td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 10px;">Krzysztof Radziszeski</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1473</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1476</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;"><span style="color: #00640a;">+3</span></td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">25</td>
</tr>
<tr style="background-color: #fafafa;">
<td style="border: 1px solid #ddd; padding: 10px;"><strong>Dane Sabo</strong></td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1290</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">1449</td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;"><strong><span style="color: #00640a;">+159</span></strong></td>
<td style="border: 1px solid #ddd; padding: 10px; text-align: right;">25</td>
</tr>
</table>
<h3 id="observations">Observations</h3>
<p><strong>The Rating Spread Compressed</strong></p>
<p>The old system spread players across 361 rating points. The new system compresses them into 89 points. This makes sense—we&rsquo;re a recreational group, not chess grandmasters. The new system rates us fairly within a tighter band.</p>
<p><strong>The Winners</strong></p>
<ul>
<li><strong>Dane Sabo</strong>: +159 points. The old system penalized him for losses with weaker partners. The effective opponent formula gives credit for &ldquo;carrying.&rdquo; (Purely coincidental that I benefit from my own math.)</li>
<li><strong>Eliana Crew</strong>: +11 points</li>
<li><strong>Krzysztof Radziszeski</strong>: +3 points</li>
</ul>
<p><strong>The Losers</strong></p>
<ul>
<li><strong>Andrew Stricklin</strong>: 113 points. Still ranked #1, but the old system over-credited wins with strong partners.</li>
<li><strong>Jacklyn Wyszynski</strong>: 43 points</li>
<li><strong>David Pabst</strong>: 40 points</li>
</ul>
<h2 id="a-note-on-conflicts-of-interest">A Note on Conflicts of Interest</h2>
<p>You may notice that the system designer (me) is also the biggest beneficiary of the new ratings, gaining a convenient 159 points.</p>
<p>I want to assure you this is <em>purely coincidental</em> and the result of <em>rigorous mathematical analysis</em>, not at all influenced by the fact that I was tired of being ranked last.</p>
<p>The new formulas are based on <em>sound theoretical principles</em> that just <em>happen</em> to conclude I was being unfairly penalized all along.</p>
<p><em>Trust the math.</em> 😉</p>
<h2 id="why-this-system-works">Why This System Works</h2>
<p><strong>For a small league:</strong></p>
<ul>
<li>Simple to understand (one rating per player)</li>
<li>Fair to individual skill (per-point scoring)</li>
<li>Respects partnership (effective opponent formula)</li>
<li>Transparent (you can calculate rating changes yourself)</li>
<li>Fast convergence (5-10 matches to stabilize a rating)</li>
</ul>
<p><strong>The bottom line:</strong> Your rating now reflects your true skill more accurately than before. Even if it means Dane finally looks respectable.</p>
</div>
</article>
</main>
</div><footer>
<span>This website was built using Hugo and the &#39;notrack&#39; theme.</span>
</footer>
</body>
</html>

View File

@ -1,6 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html><head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<title>Dane Sabo - This Is a Secret </title> <title>Dane Sabo - This Is a Secret </title>
<link rel="stylesheet" type="text/css" href="/css/fonts.css"> <link rel="stylesheet" type="text/css" href="/css/fonts.css">
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css"> <link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
@ -9,6 +8,8 @@
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css"> <link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="author" content="Dane Sabo"> <meta name="author" content="Dane Sabo">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
@ -21,7 +22,7 @@
<nav> <nav>
<ul class="navbar"> <ul class="navbar">
<li class=""> <li class="">
<a href="/cv.pdf"> <a href="/cv/">
<span>CV</span> <span>CV</span>
</a> </a>
</li> </li>

View File

@ -1,6 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html><head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<title>Dane Sabo - Extra Curricular </title> <title>Dane Sabo - Extra Curricular </title>
<link rel="stylesheet" type="text/css" href="/css/fonts.css"> <link rel="stylesheet" type="text/css" href="/css/fonts.css">
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css"> <link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
@ -9,6 +8,8 @@
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css"> <link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="author" content="Dane Sabo"> <meta name="author" content="Dane Sabo">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
@ -22,7 +23,7 @@
<nav> <nav>
<ul class="navbar"> <ul class="navbar">
<li class=""> <li class="">
<a href="/cv.pdf"> <a href="/cv/">
<span>CV</span> <span>CV</span>
</a> </a>
</li> </li>
@ -72,6 +73,22 @@

View File

@ -1,50 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?> &lt;?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel></channel></rss>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Dane Sabo</title>
<link>http://localhost:1313/categories/extra-curricular/</link>
<description>Latest blog posts from Dane Sabo</description>
<language>en-us</language>
<lastBuildDate>Thu, 20 Mar 2025 16:51:04 -0400</lastBuildDate>
<atom:link href="http://localhost:1313/categories/extra-curricular/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Formula Student</title>
<link>http://localhost:1313/projects/formula_student/</link>
<pubDate>Thu, 20 Mar 2025 16:51:04 -0400</pubDate>
<guid>http://localhost:1313/projects/formula_student/</guid>
<description><!-- raw HTML omitted -->
</description>
</item>
<item>
<title>This Is a Secret</title>
<link>http://localhost:1313/blog/this-is-a-secret/</link>
<pubDate>Sun, 16 Mar 2025 21:11:16 -0400</pubDate>
<guid>http://localhost:1313/blog/this-is-a-secret/</guid>
<description><!-- raw HTML omitted -->
</description>
</item>
</channel>
</rss>

View File

@ -1,6 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html><head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<title>Dane Sabo - Categories </title> <title>Dane Sabo - Categories </title>
<link rel="stylesheet" type="text/css" href="/css/fonts.css"> <link rel="stylesheet" type="text/css" href="/css/fonts.css">
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css"> <link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
@ -9,6 +8,8 @@
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css"> <link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="author" content="Dane Sabo"> <meta name="author" content="Dane Sabo">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
@ -22,7 +23,7 @@
<nav> <nav>
<ul class="navbar"> <ul class="navbar">
<li class=""> <li class="">
<a href="/cv.pdf"> <a href="/cv/">
<span>CV</span> <span>CV</span>
</a> </a>
</li> </li>
@ -52,6 +53,10 @@
<li><a href="http://localhost:1313/categories/extra-curricular/">Extra Curricular</a> (1)</li> <li><a href="http://localhost:1313/categories/extra-curricular/">Extra Curricular</a> (1)</li>
<li><a href="http://localhost:1313/categories/projects/">Projects</a> (1)</li>
<li><a href="http://localhost:1313/categories/recreation/">Recreation</a> (1)</li>
</ul> </ul>
</main> </main>

View File

@ -1,50 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?> &lt;?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel></channel></rss>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Dane Sabo</title>
<link>http://localhost:1313/categories/</link>
<description>Latest blog posts from Dane Sabo</description>
<language>en-us</language>
<lastBuildDate>Thu, 20 Mar 2025 16:51:04 -0400</lastBuildDate>
<atom:link href="http://localhost:1313/categories/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Formula Student</title>
<link>http://localhost:1313/projects/formula_student/</link>
<pubDate>Thu, 20 Mar 2025 16:51:04 -0400</pubDate>
<guid>http://localhost:1313/projects/formula_student/</guid>
<description><!-- raw HTML omitted -->
</description>
</item>
<item>
<title>This Is a Secret</title>
<link>http://localhost:1313/blog/this-is-a-secret/</link>
<pubDate>Sun, 16 Mar 2025 21:11:16 -0400</pubDate>
<guid>http://localhost:1313/blog/this-is-a-secret/</guid>
<description><!-- raw HTML omitted -->
</description>
</item>
</channel>
</rss>

View File

@ -0,0 +1,116 @@
<!DOCTYPE html>
<html><head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<title>Dane Sabo - Projects </title>
<link rel="stylesheet" type="text/css" href="/css/fonts.css">
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
<meta charset="UTF-8">
<meta name="author" content="Dane Sabo">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/categories/projects/index.xml" title="Dane Sabo" />
</head>
<body>
<header class="page-header">
<div class="myname">
<h2><a href="http://localhost:1313/">Dane Sabo</a></h2>
</div>
<nav>
<ul class="navbar">
<li class="">
<a href="/cv/">
<span>CV</span>
</a>
</li>
<li class="activetab">
<a href="/projects/">
<span>Projects</span>
</a>
</li>
<li class="">
<a href="/blog/">
<span>Blog</span>
</a>
</li>
<li class="">
<a href="/contact/">
<span>About Me</span>
</a>
</li>
</ul>
</nav>
</header>
<div id="content">
<main>
<h1 class="page-title">Projects</h1>
<div class="taxonomy-links">
<ul>
<li><a href="/categories">categories</a></li>
<li><a href="/tags">tags</a></li>
</ul>
</div>
</main>
</div><footer>
<span>This website was built using Hugo and the &#39;notrack&#39; theme.</span>
</footer>
</body>
</html>

View File

@ -0,0 +1 @@
&lt;?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel></channel></rss>

View File

@ -0,0 +1,9 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<title>http://localhost:1313/categories/projects/</title>
<link rel="canonical" href="http://localhost:1313/categories/projects/">
<meta charset="utf-8">
<meta http-equiv="refresh" content="0; url=http://localhost:1313/categories/projects/">
</head>
</html>

View File

@ -0,0 +1,116 @@
<!DOCTYPE html>
<html><head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<title>Dane Sabo - Recreation </title>
<link rel="stylesheet" type="text/css" href="/css/fonts.css">
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
<meta charset="UTF-8">
<meta name="author" content="Dane Sabo">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/categories/recreation/index.xml" title="Dane Sabo" />
</head>
<body>
<header class="page-header">
<div class="myname">
<h2><a href="http://localhost:1313/">Dane Sabo</a></h2>
</div>
<nav>
<ul class="navbar">
<li class="">
<a href="/cv/">
<span>CV</span>
</a>
</li>
<li class="">
<a href="/projects/">
<span>Projects</span>
</a>
</li>
<li class="">
<a href="/blog/">
<span>Blog</span>
</a>
</li>
<li class="">
<a href="/contact/">
<span>About Me</span>
</a>
</li>
</ul>
</nav>
</header>
<div id="content">
<main>
<h1 class="page-title">Recreation</h1>
<div class="taxonomy-links">
<ul>
<li><a href="/categories">categories</a></li>
<li><a href="/tags">tags</a></li>
</ul>
</div>
</main>
</div><footer>
<span>This website was built using Hugo and the &#39;notrack&#39; theme.</span>
</footer>
</body>
</html>

View File

@ -0,0 +1 @@
&lt;?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel></channel></rss>

View File

@ -0,0 +1,9 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<title>http://localhost:1313/categories/recreation/</title>
<link rel="canonical" href="http://localhost:1313/categories/recreation/">
<meta charset="utf-8">
<meta http-equiv="refresh" content="0; url=http://localhost:1313/categories/recreation/">
</head>
</html>

View File

@ -1,6 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html><head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<title>Dane Sabo - About Me </title> <title>Dane Sabo - About Me </title>
<link rel="stylesheet" type="text/css" href="/css/fonts.css"> <link rel="stylesheet" type="text/css" href="/css/fonts.css">
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css"> <link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
@ -9,6 +8,8 @@
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css"> <link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="author" content="Dane Sabo"> <meta name="author" content="Dane Sabo">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
@ -21,7 +22,7 @@
<nav> <nav>
<ul class="navbar"> <ul class="navbar">
<li class=""> <li class="">
<a href="/cv.pdf"> <a href="/cv/">
<span>CV</span> <span>CV</span>
</a> </a>
</li> </li>

174
public/css/dark-theme.css Normal file
View File

@ -0,0 +1,174 @@
/* Night Sky Dark Theme for danesabo.com */
/* Base dark background with subtle gradient */
html, body {
background: linear-gradient(180deg, #0a0a1a 0%, #1a1a2e 50%, #0f0f23 100%);
background-attachment: fixed;
min-height: 100vh;
}
/* Main content area */
main {
background-color: rgba(15, 15, 35, 0.95) !important;
border-radius: 8px;
box-shadow: 0 0 40px rgba(100, 150, 255, 0.1);
border: 1px solid rgba(100, 150, 255, 0.2);
}
/* Text colors - twilight palette */
h1, h2, h3, h4, h5, h6 {
color: #e8c87a !important; /* twilight gold */
}
p, li, td, th {
color: #9aafc8 !important;
}
strong, b {
color: #d4b86a !important; /* muted gold */
}
/* Links - twilight gold */
a {
color: #d4a85a !important;
transition: color 0.3s ease, text-shadow 0.3s ease;
}
a:hover {
color: #f0c878 !important;
text-shadow: 0 0 8px rgba(240, 200, 120, 0.4);
}
/* Header */
.page-header {
border-bottom: 1px solid rgba(255, 255, 255, 0.2) !important;
background: rgba(10, 10, 30, 0.8);
margin: 0 !important;
padding: 1em;
}
.myname a {
color: #ffffff !important;
text-shadow: 0 0 10px rgba(255, 255, 255, 0.3);
}
/* Navigation */
nav a {
color: #c8c8e0 !important;
}
nav li:hover {
border-color: #7eb8ff !important;
}
.activetab, li.activetab {
background-color: rgba(126, 184, 255, 0.2) !important;
}
.activetab > a, a.activetab {
color: #ffffff !important;
}
/* Code blocks */
code, kbd {
background-color: #1a1a2e !important;
color: #a8d4ff !important;
border: 1px solid rgba(100, 150, 255, 0.3);
}
pre {
background-color: #0f0f23 !important;
border: 1px solid rgba(100, 150, 255, 0.2);
}
pre code {
border: none;
}
/* Footer */
footer {
background-color: rgba(10, 10, 26, 0.95) !important;
color: #8888a0 !important;
border-top: 1px solid rgba(100, 150, 255, 0.2);
}
/* Contact boxes and cards */
.contactbox ul {
background-color: rgba(20, 20, 40, 0.9) !important;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5) !important;
}
.contactbox a {
color: #c8c8e0 !important;
}
/* Blog post titles */
.blog-post-title a {
color: #e8e8ff !important;
}
.blog-post-info {
color: #8888a0 !important;
}
/* Tables */
th {
background-color: rgba(126, 184, 255, 0.2) !important;
color: #e8e8ff !important;
}
tr:hover {
background-color: rgba(126, 184, 255, 0.1) !important;
}
/* Taxonomy/category links */
.taxonomy-links ul li a {
background-color: rgba(30, 30, 50, 0.9) !important;
color: #c8c8e0 !important;
}
.taxonomy-links ul {
border-bottom-color: rgba(255, 255, 255, 0.2) !important;
}
/* Figures and images */
figure.frame {
background-color: rgba(20, 20, 40, 0.8) !important;
border-color: rgba(100, 150, 255, 0.3) !important;
}
figcaption {
border-bottom-color: rgba(255, 255, 255, 0.2) !important;
}
figcaption p, figcaption h4 {
color: #8888a0 !important;
}
/* Blockquotes */
blockquote {
color: #a8a8c0 !important;
border-left: 3px solid rgba(126, 184, 255, 0.5);
padding-left: 1em;
}
/* Pagination */
.page-item {
color: #c8c8e0 !important;
}
.page-item a {
color: #c8c8e0 !important;
}
.page-item.active {
background-color: rgba(126, 184, 255, 0.3) !important;
}
/* Stars - wishlist for later (CSS pseudo-elements tricky with this theme) */
/* TODO: Add canvas-based or JS star animation */
/* Smooth transitions */
* {
transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease;
}

View File

@ -1,14 +1,15 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html><head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<title>Dane Sabo - CV </title> <title>Dane Sabo - CV </title>
<link rel="stylesheet" type="text/css" href="/css/fonts.css"> <link rel="stylesheet" type="text/css" href="/css/fonts.css">
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css"> <link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
<link rel="stylesheet" type="text/css" href="/css/styles.min.72d59454d0bbb10bc521b3b84f3d990767cb00ddf9f2555ea74ac9fcde5adcf3.css"> <link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="author" content="Dane Sabo"> <meta name="author" content="Dane Sabo">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
@ -21,7 +22,7 @@
<nav> <nav>
<ul class="navbar"> <ul class="navbar">
<li class="activetab"> <li class="activetab">
<a href="CV.pdf"> <a href="/cv/">
<span>CV</span> <span>CV</span>
</a> </a>
</li> </li>
@ -49,6 +50,363 @@
<h1 class="page-title">CV</h1> <h1 class="page-title">CV</h1>
<style>
.cv-container {
max-width: 800px;
margin: 0 auto;
font-family: 'Source Sans Pro', -apple-system, BlinkMacSystemFont, sans-serif;
}
.cv-header {
text-align: center;
margin-bottom: 2em;
padding-bottom: 1.5em;
border-bottom: 2px solid rgba(100, 150, 255, 0.3);
}
.cv-header h1 {
font-size: 2.4em;
margin-bottom: 0.3em;
letter-spacing: 0.02em;
}
.cv-contact {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 0.5em 1.5em;
font-size: 0.95em;
}
.cv-contact a {
white-space: nowrap;
}
.cv-section {
margin-bottom: 1.8em;
}
.cv-section h2 {
font-size: 1.4em;
border-bottom: 1.5px solid rgba(100, 150, 255, 0.3);
padding-bottom: 0.3em;
margin-bottom: 0.8em;
}
.cv-section h3 {
font-size: 1.1em;
margin-bottom: 0.5em;
margin-top: 0.8em;
}
.cv-entry {
margin-bottom: 1.2em;
padding-left: 0.2em;
}
.cv-entry-header {
display: flex;
justify-content: space-between;
align-items: baseline;
flex-wrap: wrap;
gap: 0.5em;
}
.cv-entry-title {
font-weight: 700;
font-size: 1.05em;
}
.cv-entry-date {
font-size: 0.9em;
opacity: 0.7;
white-space: nowrap;
}
.cv-entry-subtitle {
font-size: 0.95em;
margin-top: 0.15em;
opacity: 0.85;
}
.cv-entry ul {
margin-top: 0.4em;
margin-bottom: 0;
padding-left: 1.4em;
}
.cv-entry li {
margin-bottom: 0.25em;
font-size: 0.92em;
line-height: 1.5;
}
.cv-skills {
display: grid;
grid-template-columns: auto 1fr;
gap: 0.4em 1em;
font-size: 0.95em;
}
.cv-skill-label {
font-weight: 700;
white-space: nowrap;
}
.cv-award-note {
font-style: italic;
font-size: 0.9em;
opacity: 0.8;
}
.cv-pub-venue {
font-size: 0.9em;
opacity: 0.8;
}
.cv-download {
text-align: center;
margin: 1.5em 0 0.5em;
font-size: 0.9em;
opacity: 0.7;
}
.cv-updated {
text-align: right;
font-size: 0.8em;
opacity: 0.5;
font-style: italic;
margin-top: 2em;
}
@media (max-width: 600px) {
.cv-entry-header {
flex-direction: column;
gap: 0.1em;
}
.cv-contact {
flex-direction: column;
align-items: center;
gap: 0.3em;
}
.cv-skills {
grid-template-columns: 1fr;
}
}
</style>
<div class="cv-container">
<div class="cv-header">
<h1>Dane Sabo</h1>
<div class="cv-contact">
<span>📍 Greater Pittsburgh Area</span>
<span>✉️ <a href="mailto:yourstruly@danesabo.com">yourstruly@danesabo.com</a></span>
<span>🔗 <a href="https://danesabo.com">danesabo.com</a></span>
<span><a href="https://linkedin.com/in/dane-sabo-819b211b6/">LinkedIn</a></span>
<span><a href="https://github.com/namelessfaceless">GitHub</a></span>
</div>
</div>
<div class="cv-download">
<a href="/cv.pdf">⬇ Download PDF version</a>
</div>
<div class="cv-section">
<h2>Education</h2>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">Ph.D. — Mechanical Engineering</span>
<span class="cv-entry-date">Aug 2023 Present</span>
</div>
<div class="cv-entry-subtitle"><strong>NRC Fellow, University of Pittsburgh</strong></div>
<ul>
<li>GPA: 3.896/4.0 (<a href="/transcript.pdf">Unofficial Transcript</a>)</li>
<li><strong>Coursework:</strong> High-Assurance Cyber-Physical Systems, Linear and Digital Control Systems, Nonlinear Dynamical Systems, Advanced Dynamics</li>
<li><strong>Nuclear Engineering Certificate:</strong> Fundamentals of Nuclear Engineering, Integration of Nuclear Plant Systems, Nuclear Core Dynamics, Radiation Detection &amp; Measurement, Management Principles for Nuclear Power</li>
</ul>
</div>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">B.S. — Mechanical Engineering</span>
<span class="cv-entry-date">Aug 2019 Aug 2023</span>
</div>
<div class="cv-entry-subtitle"><strong>University of Pittsburgh</strong></div>
<ul>
<li>GPA: 3.433, Dean's Honor List throughout</li>
<li><strong>Coursework:</strong> Linear Algebra for Machine Learning (Graduate), Mechatronics</li>
</ul>
</div>
</div>
<div class="cv-section">
<h2>Awards &amp; Honors</h2>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">Best Student Paper Award</span>
<span class="cv-entry-date">2025</span>
</div>
<div class="cv-entry-subtitle">NPIC&amp;HMIT 2025</div>
<ul>
<li>Awarded for "Employing a Hardware-in-the-Loop Approach to Realize a Fully Homomorphic Encrypted Controller for a Small Modular Advanced High Temperature Reactor"</li>
</ul>
</div>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">Student Representative, MEMS Department Chair Search Committee</span>
<span class="cv-entry-date">2025</span>
</div>
<ul>
<li>Selected as student representative on the search committee for the next Department Chair of Mechanical Engineering and Materials Science at the University of Pittsburgh</li>
</ul>
</div>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">NRC Graduate Fellowship</span>
<span class="cv-entry-date">2023 Present</span>
</div>
<div class="cv-entry-subtitle">U.S. Nuclear Regulatory Commission</div>
<ul>
<li>Competitive fellowship supporting graduate research in nuclear engineering and related fields</li>
</ul>
</div>
</div>
<div class="cv-section">
<h2>Publications &amp; Presentations</h2>
<h3>First Author</h3>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">Analysis of Vortex Generating Fences on a Formula Student Multi-Element Rear Wing</span>
<span class="cv-entry-date">2023</span>
</div>
<div class="cv-pub-venue">Published in <em>Ingenium Undergraduate Research at the Swanson School of Engineering</em>, Pages 106111</div>
</div>
<h3>Major Contributor</h3>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">Employing a Hardware-in-the-Loop Approach to Realize a Fully Homomorphic Encrypted Controller for a Small Modular Advanced High Temperature Reactor</span>
<span class="cv-entry-date">2025</span>
</div>
<div class="cv-pub-venue">NPIC&amp;HMIT 2025, Conference Paper (Second Author)</div>
<div class="cv-award-note">🏆 Best Student Paper Award</div>
</div>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">Demonstration of Advanced Encryption for an Instrumentation and Control System using ARCADE</span>
<span class="cv-entry-date">2024</span>
</div>
<div class="cv-pub-venue">TRTR 2024 Annual Meeting, Presentation</div>
</div>
</div>
<div class="cv-section">
<h2>Skills</h2>
<div class="cv-skills">
<span class="cv-skill-label">Programming</span>
<span>C/C++ (embedded), LaTeX, MATLAB, Python (Pandas, NumPy, SciPy, SymPy), Rust</span>
<span class="cv-skill-label">Engineering</span>
<span>ANSYS Simulation Suite, FDM printing, Fusion 360, Soldering, SolidWorks</span>
<span class="cv-skill-label">Business</span>
<span>Customer discovery, Team management, Office Suite</span>
<span class="cv-skill-label">Other</span>
<span>Adobe Illustrator, Adobe Photoshop, Blender</span>
</div>
</div>
<div class="cv-section">
<h2>Professional Experience</h2>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">Graduate Student Researcher</span>
<span class="cv-entry-date">Aug 2023 Present</span>
</div>
<div class="cv-entry-subtitle">Instrumentation and Controls Laboratory, University of Pittsburgh — Advisor: Dr. Daniel G. Cole</div>
<ul>
<li>Developing formal verification methods for autonomous hybrid control systems with application to nuclear reactor startup sequences and safety-critical cyber-physical systems</li>
<li>Collaborating with Idaho National Laboratory and Sandia National Laboratory on hardware-in-the-loop control system validation and encrypted controller implementations for advanced reactor designs</li>
<li>Conducting research on virtualized networks to simulate control systems with genuine network traffic for nuanced analysis of system dynamics</li>
</ul>
</div>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">Independent Contractor (Mechanical Engineer)</span>
<span class="cv-entry-date">Dec 2022 Jun 2023</span>
</div>
<div class="cv-entry-subtitle">Human Motion Technologies LLC — Remote / Pittsburgh, PA</div>
<ul>
<li><strong>Hip Exoskeleton EXO-004:</strong> Provided expertise in composites and manufacturing for carbon fiber-reinforced polymer (CFRP) parts, adopting resin infusion as a standard practice.</li>
<li><strong>Prosthetics Foot Testing TES-001A02:</strong> Developed a testing fixture for prosthetic feet, evaluating products for fatigue and ultimate strength failure per ISO-10328 standards, designed for up to 5700 N and two million cycles.</li>
</ul>
</div>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">Summer Undergraduate Research Intern</span>
<span class="cv-entry-date">Jun 2022 Aug 2022</span>
</div>
<div class="cv-entry-subtitle">University of Pittsburgh</div>
<ul>
<li>Analyzed the effects of corotating and counterrotating pairs of vortex-generating fences, focusing on separation prevention at various yaw angles and speeds.</li>
</ul>
</div>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">Mechanical Engineering Co-op</span>
<span class="cv-entry-date">Jan 2021 Apr 2021, Aug Dec 2021</span>
</div>
<div class="cv-entry-subtitle">BMW Manufacturing — Spartanburg, SC</div>
<ul>
<li><strong>Pruefcubing:</strong> Evaluated buildability and geometric validity of supplier parts for BMW XM performance SUV, supporting metrology processes.</li>
<li><strong>Quality Steering:</strong> Monitored development series buildability on manufacturing lines and audited prototype vehicles (X3, X4, X5, X6, X7, XM). Developed data management tools to enhance workflows and database accessibility.</li>
</ul>
</div>
</div>
<div class="cv-section">
<h2>Teaching Experience</h2>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">Technical Director / Aerodynamics Lead</span>
<span class="cv-entry-date">2020 2022</span>
</div>
<div class="cv-entry-subtitle">Panther Racing (Formula SAE) — University of Pittsburgh</div>
<ul>
<li>Led a team of 30+ engineers and managed a six-figure budget for researching and producing an open-wheel-style racecar.</li>
<li>Rehabilitated team culture and mentored younger members to develop engineering and communication skills.</li>
<li>Engineered and designed the aerodynamic package and demonstrated expertise in carbon fiber composites manufacturing, including vacuum-bagging, wet lay-up, and mold preparation.</li>
<li>Delivered a final car that completed all events at FSAE Michigan without failures, improving team performance from 37th/40 (45.4 pts) to 32nd/99 (462.6 pts).</li>
</ul>
</div>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">Content Developer &amp; Teaching Assistant</span>
<span class="cv-entry-date">Aug 2022 Dec 2022</span>
</div>
<div class="cv-entry-subtitle">MEMS 0071 "Intro to Fluid Mechanics" — University of Pittsburgh</div>
<ul>
<li>Developed curriculum incorporating fundamental CFD concepts, with a focus on postprocessing, simulation, and meshing for hydrostatic and hydrodynamic problems.</li>
<li>Conducted weekly office hours to assist students in understanding course material.</li>
</ul>
</div>
</div>
<div class="cv-section">
<h2>Projects</h2>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">King's Eunuch — Poker Engine (Rust)</span>
<span class="cv-entry-date">2025 Present</span>
</div>
<ul>
<li>Developing a type-safe poker library in Rust with near-zero dependencies as a language learning project.</li>
<li>Implemented custom types for cards and hands with ordering traits, and complete hand detection and evaluation logic.</li>
<li>Building toward game state simulation and eventual use as a poker training aid.</li>
</ul>
</div>
<div class="cv-entry">
<div class="cv-entry-header">
<span class="cv-entry-title">1986 Nissan 300ZX — LS V8 Engine Swap</span>
<span class="cv-entry-date">2021 Present</span>
</div>
<ul>
<li>Performing a 5.3L LS swap using a junkyard-sourced 2008 Avalanche engine, pulled and disassembled personally.</li>
<li>Completed engine teardown, cleaning, rear main seal, flywheel torque, and timing chain assembly.</li>
<li>Sourced transmission, ECU, sensors, and engine mounts. Stripped factory engine bay to prepare for installation.</li>
</ul>
</div>
</div>
<div class="cv-updated">Last updated March 2026</div>
</div>
</article> </article>

View File

@ -1,7 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html><head>
<head> <meta name="generator" content="Hugo 0.156.0"><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<meta name="generator" content="Hugo 0.152.2"><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<title>Dane Sabo </title> <title>Dane Sabo </title>
<link rel="stylesheet" type="text/css" href="/css/fonts.css"> <link rel="stylesheet" type="text/css" href="/css/fonts.css">
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css"> <link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
@ -10,6 +9,8 @@
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css"> <link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="author" content="Dane Sabo"> <meta name="author" content="Dane Sabo">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
@ -23,7 +24,7 @@
<nav> <nav>
<ul class="navbar"> <ul class="navbar">
<li class=""> <li class="">
<a href="/cv.pdf"> <a href="/cv/">
<span>CV</span> <span>CV</span>
</a> </a>
</li> </li>
@ -54,7 +55,35 @@
<p><img src="images/journey_home.png" alt=""></p> <div style="text-align: center; margin-bottom: 20px;">
<img src="images/journey_home.png" alt="The Journey Home by Matthew Wong" style="max-width: 100%;">
<p style="font-size: 14px; color: #666; margin-top: 8px; font-style: italic;">"The Journey Home" — Matthew Wong, 2017</p>
</div>
<div style="text-align: center; margin: 20px 0;">
<a href="/pickleball.html" style="
display: inline-block;
background: linear-gradient(45deg, #8b4a4a, #8c7a3d, #3d7a8c, #7a5278, #8b4a4a);
background-size: 300% 300%;
animation: gradient-shift 3s ease infinite;
color: #f0e6d3;
font-family: 'Comic Sans MS', cursive;
font-size: 24px;
font-weight: bold;
padding: 15px 30px;
border-radius: 50px;
text-decoration: none;
box-shadow: 0 4px 15px rgba(100,60,60,0.5);
transform: rotate(-2deg);
border: 3px dashed #5a4a4a;
">🏓 PICKLEBALL STATS 🏓</a>
</div>
<style>
@keyframes gradient-shift {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
</style>
<h2 id="welcome">Welcome!</h2> <h2 id="welcome">Welcome!</h2>
<p>I&rsquo;m Dane Sabo, a Mechanical Engineering PhD student at the University of Pittsburgh with a focus on control systems. When I&rsquo;m not researching, you can find me riding my Honda CRF dual sport around Pittsburgh.</p> <p>I&rsquo;m Dane Sabo, a Mechanical Engineering PhD student at the University of Pittsburgh with a focus on control systems. When I&rsquo;m not researching, you can find me riding my Honda CRF dual sport around Pittsburgh.</p>
<p>Here&rsquo;s what you&rsquo;ll find on this site:</p> <p>Here&rsquo;s what you&rsquo;ll find on this site:</p>

View File

@ -1,50 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?> &lt;?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel></channel></rss>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Dane Sabo</title>
<link>http://localhost:1313/</link>
<description>Latest blog posts from Dane Sabo</description>
<language>en-us</language>
<lastBuildDate>Wed, 19 Mar 2025 08:44:50 -0400</lastBuildDate>
<atom:link href="http://localhost:1313/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Formula Student</title>
<link>http://localhost:1313/projects/formula_student/</link>
<pubDate>Thu, 20 Mar 2025 16:51:04 -0400</pubDate>
<guid>http://localhost:1313/projects/formula_student/</guid>
<description><!-- raw HTML omitted -->
</description>
</item>
<item>
<title>This Is a Secret</title>
<link>http://localhost:1313/blog/this-is-a-secret/</link>
<pubDate>Sun, 16 Mar 2025 21:11:16 -0400</pubDate>
<guid>http://localhost:1313/blog/this-is-a-secret/</guid>
<description><!-- raw HTML omitted -->
</description>
</item>
</channel>
</rss>

287
public/pickleball.html Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html><head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<title>Dane Sabo - Formula Student </title> <title>Dane Sabo - Formula Student </title>
<link rel="stylesheet" type="text/css" href="/css/fonts.css"> <link rel="stylesheet" type="text/css" href="/css/fonts.css">
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css"> <link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
@ -9,6 +8,8 @@
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css"> <link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="author" content="Dane Sabo"> <meta name="author" content="Dane Sabo">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
@ -21,7 +22,7 @@
<nav> <nav>
<ul class="navbar"> <ul class="navbar">
<li class=""> <li class="">
<a href="/cv.pdf"> <a href="/cv/">
<span>CV</span> <span>CV</span>
</a> </a>
</li> </li>

View File

@ -1,6 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html><head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<title>Dane Sabo - Projects </title> <title>Dane Sabo - Projects </title>
<link rel="stylesheet" type="text/css" href="/css/fonts.css"> <link rel="stylesheet" type="text/css" href="/css/fonts.css">
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css"> <link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
@ -9,6 +8,8 @@
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css"> <link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="author" content="Dane Sabo"> <meta name="author" content="Dane Sabo">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
@ -22,7 +23,7 @@
<nav> <nav>
<ul class="navbar"> <ul class="navbar">
<li class=""> <li class="">
<a href="/cv.pdf"> <a href="/cv/">
<span>CV</span> <span>CV</span>
</a> </a>
</li> </li>
@ -72,6 +73,22 @@

View File

@ -1,50 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?> &lt;?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel></channel></rss>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Dane Sabo</title>
<link>http://localhost:1313/projects/</link>
<description>Latest blog posts from Dane Sabo</description>
<language>en-us</language>
<lastBuildDate>Wed, 19 Mar 2025 10:24:03 -0400</lastBuildDate>
<atom:link href="http://localhost:1313/projects/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Formula Student</title>
<link>http://localhost:1313/projects/formula_student/</link>
<pubDate>Thu, 20 Mar 2025 16:51:04 -0400</pubDate>
<guid>http://localhost:1313/projects/formula_student/</guid>
<description><!-- raw HTML omitted -->
</description>
</item>
<item>
<title>This Is a Secret</title>
<link>http://localhost:1313/blog/this-is-a-secret/</link>
<pubDate>Sun, 16 Mar 2025 21:11:16 -0400</pubDate>
<guid>http://localhost:1313/blog/this-is-a-secret/</guid>
<description><!-- raw HTML omitted -->
</description>
</item>
</channel>
</rss>

View File

@ -1,6 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html><head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<title>Dane Sabo - Z </title> <title>Dane Sabo - Z </title>
<link rel="stylesheet" type="text/css" href="/css/fonts.css"> <link rel="stylesheet" type="text/css" href="/css/fonts.css">
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css"> <link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
@ -9,6 +8,8 @@
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css"> <link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="author" content="Dane Sabo"> <meta name="author" content="Dane Sabo">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
@ -22,7 +23,7 @@
<nav> <nav>
<ul class="navbar"> <ul class="navbar">
<li class=""> <li class="">
<a href="/cv.pdf"> <a href="/cv/">
<span>CV</span> <span>CV</span>
</a> </a>
</li> </li>
@ -72,6 +73,22 @@

View File

@ -1,50 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?> &lt;?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel></channel></rss>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Dane Sabo</title>
<link>http://localhost:1313/projects/z/</link>
<description>Latest blog posts from Dane Sabo</description>
<language>en-us</language>
<lastBuildDate>Thu, 20 Mar 2025 16:50:35 -0400</lastBuildDate>
<atom:link href="http://localhost:1313/projects/z/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Formula Student</title>
<link>http://localhost:1313/projects/formula_student/</link>
<pubDate>Thu, 20 Mar 2025 16:51:04 -0400</pubDate>
<guid>http://localhost:1313/projects/formula_student/</guid>
<description><!-- raw HTML omitted -->
</description>
</item>
<item>
<title>This Is a Secret</title>
<link>http://localhost:1313/blog/this-is-a-secret/</link>
<pubDate>Sun, 16 Mar 2025 21:11:16 -0400</pubDate>
<guid>http://localhost:1313/blog/this-is-a-secret/</guid>
<description><!-- raw HTML omitted -->
</description>
</item>
</channel>
</rss>

View File

@ -2,8 +2,35 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml"> xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url> <url>
<loc>http://localhost:1313/cv/</loc>
<lastmod>2026-03-24T00:00:00+00:00</lastmod>
</url><url>
<loc>http://localhost:1313/categories/</loc> <loc>http://localhost:1313/categories/</loc>
<lastmod>2025-03-20T16:51:04-04:00</lastmod> <lastmod>2026-02-26T00:00:00+00:00</lastmod>
</url><url>
<loc>http://localhost:1313/tags/elo/</loc>
<lastmod>2026-02-26T00:00:00+00:00</lastmod>
</url><url>
<loc>http://localhost:1313/blog/pickleball-elo-system/</loc>
<lastmod>2026-02-26T00:00:00+00:00</lastmod>
</url><url>
<loc>http://localhost:1313/tags/pickleball/</loc>
<lastmod>2026-02-26T00:00:00+00:00</lastmod>
</url><url>
<loc>http://localhost:1313/categories/projects/</loc>
<lastmod>2026-02-26T00:00:00+00:00</lastmod>
</url><url>
<loc>http://localhost:1313/tags/rating-systems/</loc>
<lastmod>2026-02-26T00:00:00+00:00</lastmod>
</url><url>
<loc>http://localhost:1313/categories/recreation/</loc>
<lastmod>2026-02-26T00:00:00+00:00</lastmod>
</url><url>
<loc>http://localhost:1313/tags/statistics/</loc>
<lastmod>2026-02-26T00:00:00+00:00</lastmod>
</url><url>
<loc>http://localhost:1313/tags/</loc>
<lastmod>2026-02-26T00:00:00+00:00</lastmod>
</url><url> </url><url>
<loc>http://localhost:1313/categories/extra-curricular/</loc> <loc>http://localhost:1313/categories/extra-curricular/</loc>
<lastmod>2025-03-20T16:51:04-04:00</lastmod> <lastmod>2025-03-20T16:51:04-04:00</lastmod>
@ -28,7 +55,5 @@
</url><url> </url><url>
<loc>http://localhost:1313/blog/this-is-a-secret/</loc> <loc>http://localhost:1313/blog/this-is-a-secret/</loc>
<lastmod>2025-03-16T21:11:16-04:00</lastmod> <lastmod>2025-03-16T21:11:16-04:00</lastmod>
</url><url>
<loc>http://localhost:1313/tags/</loc>
</url> </url>
</urlset> </urlset>

116
public/tags/elo/index.html Normal file
View File

@ -0,0 +1,116 @@
<!DOCTYPE html>
<html><head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<title>Dane Sabo - ELO </title>
<link rel="stylesheet" type="text/css" href="/css/fonts.css">
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
<meta charset="UTF-8">
<meta name="author" content="Dane Sabo">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/elo/index.xml" title="Dane Sabo" />
</head>
<body>
<header class="page-header">
<div class="myname">
<h2><a href="http://localhost:1313/">Dane Sabo</a></h2>
</div>
<nav>
<ul class="navbar">
<li class="">
<a href="/cv/">
<span>CV</span>
</a>
</li>
<li class="">
<a href="/projects/">
<span>Projects</span>
</a>
</li>
<li class="">
<a href="/blog/">
<span>Blog</span>
</a>
</li>
<li class="">
<a href="/contact/">
<span>About Me</span>
</a>
</li>
</ul>
</nav>
</header>
<div id="content">
<main>
<h1 class="page-title">ELO</h1>
<div class="taxonomy-links">
<ul>
<li><a href="/categories">categories</a></li>
<li><a href="/tags">tags</a></li>
</ul>
</div>
</main>
</div><footer>
<span>This website was built using Hugo and the &#39;notrack&#39; theme.</span>
</footer>
</body>
</html>

View File

@ -0,0 +1 @@
&lt;?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel></channel></rss>

View File

@ -0,0 +1,9 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<title>http://localhost:1313/tags/elo/</title>
<link rel="canonical" href="http://localhost:1313/tags/elo/">
<meta charset="utf-8">
<meta http-equiv="refresh" content="0; url=http://localhost:1313/tags/elo/">
</head>
</html>

View File

@ -1,6 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html><head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<title>Dane Sabo - Tags </title> <title>Dane Sabo - Tags </title>
<link rel="stylesheet" type="text/css" href="/css/fonts.css"> <link rel="stylesheet" type="text/css" href="/css/fonts.css">
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css"> <link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
@ -9,6 +8,8 @@
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css"> <link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="author" content="Dane Sabo"> <meta name="author" content="Dane Sabo">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
@ -22,7 +23,7 @@
<nav> <nav>
<ul class="navbar"> <ul class="navbar">
<li class=""> <li class="">
<a href="/cv.pdf"> <a href="/cv/">
<span>CV</span> <span>CV</span>
</a> </a>
</li> </li>
@ -50,6 +51,14 @@
<ul> <ul>
<li><a href="http://localhost:1313/tags/elo/">ELO</a> (1)</li>
<li><a href="http://localhost:1313/tags/pickleball/">Pickleball</a> (1)</li>
<li><a href="http://localhost:1313/tags/rating-systems/">Rating Systems</a> (1)</li>
<li><a href="http://localhost:1313/tags/statistics/">Statistics</a> (1)</li>
</ul> </ul>
</main> </main>

View File

@ -1,48 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?> &lt;?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel></channel></rss>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Dane Sabo</title>
<link>http://localhost:1313/tags/</link>
<description>Latest blog posts from Dane Sabo</description>
<language>en-us</language>
<atom:link href="http://localhost:1313/tags/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Formula Student</title>
<link>http://localhost:1313/projects/formula_student/</link>
<pubDate>Thu, 20 Mar 2025 16:51:04 -0400</pubDate>
<guid>http://localhost:1313/projects/formula_student/</guid>
<description><!-- raw HTML omitted -->
</description>
</item>
<item>
<title>This Is a Secret</title>
<link>http://localhost:1313/blog/this-is-a-secret/</link>
<pubDate>Sun, 16 Mar 2025 21:11:16 -0400</pubDate>
<guid>http://localhost:1313/blog/this-is-a-secret/</guid>
<description><!-- raw HTML omitted -->
</description>
</item>
</channel>
</rss>

View File

@ -0,0 +1,116 @@
<!DOCTYPE html>
<html><head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<title>Dane Sabo - Pickleball </title>
<link rel="stylesheet" type="text/css" href="/css/fonts.css">
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
<meta charset="UTF-8">
<meta name="author" content="Dane Sabo">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/pickleball/index.xml" title="Dane Sabo" />
</head>
<body>
<header class="page-header">
<div class="myname">
<h2><a href="http://localhost:1313/">Dane Sabo</a></h2>
</div>
<nav>
<ul class="navbar">
<li class="">
<a href="/cv/">
<span>CV</span>
</a>
</li>
<li class="">
<a href="/projects/">
<span>Projects</span>
</a>
</li>
<li class="">
<a href="/blog/">
<span>Blog</span>
</a>
</li>
<li class="">
<a href="/contact/">
<span>About Me</span>
</a>
</li>
</ul>
</nav>
</header>
<div id="content">
<main>
<h1 class="page-title">Pickleball</h1>
<div class="taxonomy-links">
<ul>
<li><a href="/categories">categories</a></li>
<li><a href="/tags">tags</a></li>
</ul>
</div>
</main>
</div><footer>
<span>This website was built using Hugo and the &#39;notrack&#39; theme.</span>
</footer>
</body>
</html>

View File

@ -0,0 +1 @@
&lt;?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel></channel></rss>

View File

@ -0,0 +1,9 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<title>http://localhost:1313/tags/pickleball/</title>
<link rel="canonical" href="http://localhost:1313/tags/pickleball/">
<meta charset="utf-8">
<meta http-equiv="refresh" content="0; url=http://localhost:1313/tags/pickleball/">
</head>
</html>

View File

@ -0,0 +1,116 @@
<!DOCTYPE html>
<html><head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<title>Dane Sabo - Rating Systems </title>
<link rel="stylesheet" type="text/css" href="/css/fonts.css">
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
<meta charset="UTF-8">
<meta name="author" content="Dane Sabo">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/rating-systems/index.xml" title="Dane Sabo" />
</head>
<body>
<header class="page-header">
<div class="myname">
<h2><a href="http://localhost:1313/">Dane Sabo</a></h2>
</div>
<nav>
<ul class="navbar">
<li class="">
<a href="/cv/">
<span>CV</span>
</a>
</li>
<li class="">
<a href="/projects/">
<span>Projects</span>
</a>
</li>
<li class="">
<a href="/blog/">
<span>Blog</span>
</a>
</li>
<li class="">
<a href="/contact/">
<span>About Me</span>
</a>
</li>
</ul>
</nav>
</header>
<div id="content">
<main>
<h1 class="page-title">Rating Systems</h1>
<div class="taxonomy-links">
<ul>
<li><a href="/categories">categories</a></li>
<li><a href="/tags">tags</a></li>
</ul>
</div>
</main>
</div><footer>
<span>This website was built using Hugo and the &#39;notrack&#39; theme.</span>
</footer>
</body>
</html>

View File

@ -0,0 +1 @@
&lt;?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel></channel></rss>

View File

@ -0,0 +1,9 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<title>http://localhost:1313/tags/rating-systems/</title>
<link rel="canonical" href="http://localhost:1313/tags/rating-systems/">
<meta charset="utf-8">
<meta http-equiv="refresh" content="0; url=http://localhost:1313/tags/rating-systems/">
</head>
</html>

View File

@ -0,0 +1,116 @@
<!DOCTYPE html>
<html><head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<title>Dane Sabo - Statistics </title>
<link rel="stylesheet" type="text/css" href="/css/fonts.css">
<link rel="stylesheet" type="text/css" href="/css/fontawesome.css">
<link rel="stylesheet" type="text/css" href="/css/styles.min.c2acad37d1be0e44722e7f234c116caef79124df36955647824f8b10da479ba3.css">
<link rel="stylesheet" type="text/css" href="/css/dark-theme.css">
<meta charset="UTF-8">
<meta name="author" content="Dane Sabo">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="alternate" type="application/rss+xml" href="http://localhost:1313/tags/statistics/index.xml" title="Dane Sabo" />
</head>
<body>
<header class="page-header">
<div class="myname">
<h2><a href="http://localhost:1313/">Dane Sabo</a></h2>
</div>
<nav>
<ul class="navbar">
<li class="">
<a href="/cv/">
<span>CV</span>
</a>
</li>
<li class="">
<a href="/projects/">
<span>Projects</span>
</a>
</li>
<li class="">
<a href="/blog/">
<span>Blog</span>
</a>
</li>
<li class="">
<a href="/contact/">
<span>About Me</span>
</a>
</li>
</ul>
</nav>
</header>
<div id="content">
<main>
<h1 class="page-title">Statistics</h1>
<div class="taxonomy-links">
<ul>
<li><a href="/categories">categories</a></li>
<li><a href="/tags">tags</a></li>
</ul>
</div>
</main>
</div><footer>
<span>This website was built using Hugo and the &#39;notrack&#39; theme.</span>
</footer>
</body>
</html>

View File

@ -0,0 +1 @@
&lt;?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel></channel></rss>

View File

@ -0,0 +1,9 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<title>http://localhost:1313/tags/statistics/</title>
<link rel="canonical" href="http://localhost:1313/tags/statistics/">
<meta charset="utf-8">
<meta http-equiv="refresh" content="0; url=http://localhost:1313/tags/statistics/">
</head>
</html>

174
static/css/dark-theme.css Normal file
View File

@ -0,0 +1,174 @@
/* Night Sky Dark Theme for danesabo.com */
/* Base dark background with subtle gradient */
html, body {
background: linear-gradient(180deg, #0a0a1a 0%, #1a1a2e 50%, #0f0f23 100%);
background-attachment: fixed;
min-height: 100vh;
}
/* Main content area */
main {
background-color: rgba(15, 15, 35, 0.95) !important;
border-radius: 8px;
box-shadow: 0 0 40px rgba(100, 150, 255, 0.1);
border: 1px solid rgba(100, 150, 255, 0.2);
}
/* Text colors - twilight palette */
h1, h2, h3, h4, h5, h6 {
color: #e8c87a !important; /* twilight gold */
}
p, li, td, th {
color: #9aafc8 !important;
}
strong, b {
color: #d4b86a !important; /* muted gold */
}
/* Links - twilight gold */
a {
color: #d4a85a !important;
transition: color 0.3s ease, text-shadow 0.3s ease;
}
a:hover {
color: #f0c878 !important;
text-shadow: 0 0 8px rgba(240, 200, 120, 0.4);
}
/* Header */
.page-header {
border-bottom: 1px solid rgba(255, 255, 255, 0.2) !important;
background: rgba(10, 10, 30, 0.8);
margin: 0 !important;
padding: 1em;
}
.myname a {
color: #ffffff !important;
text-shadow: 0 0 10px rgba(255, 255, 255, 0.3);
}
/* Navigation */
nav a {
color: #c8c8e0 !important;
}
nav li:hover {
border-color: #7eb8ff !important;
}
.activetab, li.activetab {
background-color: rgba(126, 184, 255, 0.2) !important;
}
.activetab > a, a.activetab {
color: #ffffff !important;
}
/* Code blocks */
code, kbd {
background-color: #1a1a2e !important;
color: #a8d4ff !important;
border: 1px solid rgba(100, 150, 255, 0.3);
}
pre {
background-color: #0f0f23 !important;
border: 1px solid rgba(100, 150, 255, 0.2);
}
pre code {
border: none;
}
/* Footer */
footer {
background-color: rgba(10, 10, 26, 0.95) !important;
color: #8888a0 !important;
border-top: 1px solid rgba(100, 150, 255, 0.2);
}
/* Contact boxes and cards */
.contactbox ul {
background-color: rgba(20, 20, 40, 0.9) !important;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5) !important;
}
.contactbox a {
color: #c8c8e0 !important;
}
/* Blog post titles */
.blog-post-title a {
color: #e8e8ff !important;
}
.blog-post-info {
color: #8888a0 !important;
}
/* Tables */
th {
background-color: rgba(126, 184, 255, 0.2) !important;
color: #e8e8ff !important;
}
tr:hover {
background-color: rgba(126, 184, 255, 0.1) !important;
}
/* Taxonomy/category links */
.taxonomy-links ul li a {
background-color: rgba(30, 30, 50, 0.9) !important;
color: #c8c8e0 !important;
}
.taxonomy-links ul {
border-bottom-color: rgba(255, 255, 255, 0.2) !important;
}
/* Figures and images */
figure.frame {
background-color: rgba(20, 20, 40, 0.8) !important;
border-color: rgba(100, 150, 255, 0.3) !important;
}
figcaption {
border-bottom-color: rgba(255, 255, 255, 0.2) !important;
}
figcaption p, figcaption h4 {
color: #8888a0 !important;
}
/* Blockquotes */
blockquote {
color: #a8a8c0 !important;
border-left: 3px solid rgba(126, 184, 255, 0.5);
padding-left: 1em;
}
/* Pagination */
.page-item {
color: #c8c8e0 !important;
}
.page-item a {
color: #c8c8e0 !important;
}
.page-item.active {
background-color: rgba(126, 184, 255, 0.3) !important;
}
/* Stars - wishlist for later (CSS pseudo-elements tricky with this theme) */
/* TODO: Add canvas-based or JS star animation */
/* Smooth transitions */
* {
transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease;
}

File diff suppressed because one or more lines are too long