PageSourceSearch

https://wasabipesto.com/

html wasabipesto.com collected 2026-09-28 09:20:03 UTC 13,928 bytes, 260 lines download raw bytes

1<!DOCTYPE html>
2<html>
3<head>
4<meta charset="utf-8">
5<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
6<meta name="generator" content="Observable Framework v1.13.3">
7<title>Home | wasabipesto.com</title>
8<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9<link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=Source+Serif+4:ital,opsz,wght@0,8..60,200..900;1,8..60,200..900&amp;display=swap" crossorigin>
10<link rel="preload" as="style" href="./_observablehq/theme-coffee.fe078dd7.css">
11<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css2?family=Source+Serif+4:ital,opsz,wght@0,8..60,200..900;1,8..60,200..900&amp;display=swap" crossorigin>
12<link rel="stylesheet" type="text/css" href="./_observablehq/theme-coffee.fe078dd7.css">
13<link rel="modulepreload" href="./_observablehq/client.7b59b36c.js">
14<link rel="modulepreload" href="./_observablehq/runtime.e080113b.js">
15<link rel="modulepreload" href="./_observablehq/stdlib.464f9f4c.js">
16    <link rel="icon" type="image/png" href="./_file/homepage/crows.40x40.650f1efe.png">     <link rel="alternate" type="application/rss+xml" title="RSS" href="https://wasabipesto.com/feed/rss.xml">
17<script type="module">
18
19import "./_observablehq/client.7b59b36c.js";
20
21</script>
21
22</head>
23<body>
24<input id="observablehq-sidebar-toggle" type="checkbox" title="Toggle sidebar">
25<label id="observablehq-sidebar-backdrop" for="observablehq-sidebar-toggle"></label>
26<nav id="observablehq-sidebar">
27  <ol>
28    <label id="observablehq-sidebar-close" for="observablehq-sidebar-toggle"></label>
29    <li class="observablehq-link observablehq-link-active"><a href="./">Home</a></li>
30  </ol>
31  <div id="observablehq-search"><input type="search" placeholder="Search"></div>
32  <div id="observablehq-search-results"></div>
33  
33<script>{const o=document.querySelector("#observablehq-search");o.setAttribute("data-shortcut",`${/Mac|iPhone/.test(navigator.platform)?"\u2318":"Alt-"}K`);const t=o.querySelector("input"),r=()=>import("./_observablehq/search.12663f0a.js");t.addEventListener("focus",r,{once:!0}),t.addEventListener("keydown",r,{once:!0});const c=document.querySelector("#observablehq-sidebar-toggle");addEventListener("keydown",e=>{(e.code==="KeyK"&&e.metaKey&&!e.altKey&&!e.ctrlKey||e.key==="/"&&!e.metaKey&&!e.altKey&&!e.ctrlKey&&e.target===document.body)&&(c.checked?t.focus():(c.click(),t.focus(),c.click()),t.select(),e.preventDefault())});}</script>
33
34  <section>
35    <summary>Evergreen</summary>
36    <ol>
37    <li class="observablehq-link"><a href="./blogroll/">Blogroll</a></li>
38    <li class="observablehq-link"><a href="./hardware/">Hardware</a></li>
39    <li class="observablehq-link"><a href="./software/">Software</a></li>
40    <li class="observablehq-link"><a href="./media/">Media</a></li>
41    </ol>
42  </section>
43  <section>
44    <summary>Projects</summary>
45    <ol>
46    <li class="observablehq-link"><a href="./nice/">Nice Numbers</a></li>
47    <li class="observablehq-link"><a href="./spotify/">Better Spotify Wrapped</a></li>
48    <li class="observablehq-link"><a href="./themis/">Project Themis</a></li>
49    </ol>
50  </section>
51  <section>
52    <summary>HVAC</summary>
53    <ol>
54    <li class="observablehq-link"><a href="./schoolhouse/">The Old Schoolhouse</a></li>
55    <li class="observablehq-link"><a href="./controls-life/">Life as a Controls Subcontractor</a></li>
56    <li class="observablehq-link"><a href="./temperature-sensing/">Temperature Sensing</a></li>
57    </ol>
58  </section>
59  <section>
60    <summary>Server</summary>
61    <ol>
62    <li class="observablehq-link"><a href="./ssh-tarpit/">SSH Tarpit</a></li>
63    </ol>
64  </section>
65  <section>
66    <summary>Wrapped</summary>
67    <ol>
68    <li class="observablehq-link"><a href="./sota-2025/">State of the Apps 2025</a></li>
69    <li class="observablehq-link"><a href="./sota-2024/">State of the Apps 2024</a></li>
70    <li class="observablehq-link"><a href="./media-2025/">Reading/Playing/Watching 2025</a></li>
71    <li class="observablehq-link"><a href="./media-2024/">Reading/Playing/Watching 2024</a></li>
72    </ol>
73  </section>
74  <section>
75    <summary>Other</summary>
76    <ol>
77    <li class="observablehq-link"><a href="./city-superposition/">City Superposition</a></li>
78    <li class="observablehq-link"><a href="./discord-gender/">Discord Gender</a></li>
79    <li class="observablehq-link"><a href="./genesis/">Genesis 3:1</a></li>
80    <li class="observablehq-link"><a href="./budget/">Home Budget</a></li>
81    <li class="observablehq-link"><a href="./hyperstition/">Hyperstition</a></li>
82    <li class="observablehq-link"><a href="./465/">I-465</a></li>
83    <li class="observablehq-link"><a href="./notion-graph/">Notion Graph</a></li>
84    <li class="observablehq-link"><a href="./wedding/">Our Wedding</a></li>
85    <li class="observablehq-link"><a href="./outer-wilds/">Outer Wilds</a></li>
86    <li class="observablehq-link"><a href="./salary/">Salary Transparency</a></li>
87    <li class="observablehq-link"><a href="./syndicate-walrus-2025/">Syndicate Walrus 2025</a></li>
88    <li class="observablehq-link"><a href="./work-emails/">Work Emails</a></li>
89    <li class="observablehq-link"><a href="./work-mileage/">Work Mileage</a></li>
90    </ol>
91  </section>
92</nav>
93<script>{const e=document.querySelector("#observablehq-sidebar"),o=document.querySelector("#observablehq-sidebar-toggle"),r=sessionStorage.getItem("observablehq-sidebar");r?o.checked=r==="true":o.indeterminate=!0;for(const t of document.querySelectorAll("#observablehq-sidebar summary")){const s=t.parentElement;switch(sessionStorage.getItem(`observablehq-sidebar:${t.textContent}`)){case"true":s.open=!0;break;case"false":s.classList.contains("observablehq-section-active")||(s.open=!1);break}}addEventListener("beforeunload",()=>sessionStorage.setItem("observablehq-sidebar-scrolly",`${e.scrollTop}`));const a=sessionStorage.getItem("observablehq-sidebar-scrolly");a!=null&&(e.style.cssText="overflow: hidden;",e.scrollTop=+a,e.style.cssText="");}</script>
93
94<div id="observablehq-center">
95<aside id="observablehq-toc" data-selector="h1:not(:first-of-type)[id], h2:first-child[id], :not(h1) + h2[id]">
96<nav>
97<div>Contents</div>
98<ol>
99<li class="observablehq-secondary-link"><a href="#about-me">About Me</a></li>
100<li class="observablehq-secondary-link"><a href="#my-blog">My Blog</a></li>
101<li class="observablehq-secondary-link"><a href="#my-projects">My Projects</a></li>
102<li class="observablehq-secondary-link"><a href="#links">Links</a></li>
103</ol>
104</nav>
105</aside>
106<main id="observablehq-main" class="observablehq">
107<style>
108h1.hero {
109  margin: 2rem 0;
110  font-size: 3rem;
111  background: linear-gradient(30deg, var(--theme-foreground-focus), currentColor);
112  -webkit-background-clip: text;
113  -webkit-text-fill-color: transparent;
114  background-clip: text;
115}
116
117.card {
118  margin: 0;
119}
120.gallery img {
121  max-width: 100%;
122  border-radius: 8px;
123  box-shadow: 0 0 0 0.75px rgba(128, 128, 128, 0.2), 0 6px 12px 0 rgba(0, 0, 0, 0.2);
124  aspect-ratio: 2500 / 1900;
125}
126.center {
127  display: flex;
128  text-align: center;
129  align-items: center;
130  justify-content: center;
131}
132</style>
133<h1 class="hero">Hello, I'm wasabipesto.</h1>
134<p>I'm an engineer and also a human person.</p>
135<h1 id="about-me" tabindex="-1"><a class="observablehq-header-anchor" href="#about-me">About Me</a></h1>
136<p>I work in building construction as an HVAC controls engineer. I'm interested in thermodynamics, air quality, and building comfort in residential and commercial settings.</p>
137<p>I fiddle with computers, like the one serving you this webpage. I usually build things in python or rust and deploy them in docker. I believe in simplicity, and I believe in interpreting that term liberally.</p>
138<p>I run a few tabletop games for my friends and family. I enjoy systems focusing on collaborative worldbuilding, genre-bending narratives, and interesting characters.</p>
139<p>I believe in quantifying things when it's both meaningful and helpful. I believe in trying and failing and learning.</p>
140<h2 id="my-blog" tabindex="-1"><a class="observablehq-header-anchor" href="#my-blog">My Blog</a></h2>
141<p>To the left you'll find some blog posts, authored by me. Many of them contain some amount of data visualization, not because I'm good at it but because I find data interesting.</p>
142<p>Some of my favorite posts are listed here:</p>
143<ul>
144<li><a href="./nice/">Nice Numbers</a>, a story about attempting to solve a silly math problem with high-performance computing.</li>
145<li><a href="./schoolhouse/">The Old Schoolhouse</a>, a digression into how you might approach upgrading HVAC in an old building.</li>
146<li><a href="./wedding/">Our Wedding</a>, some lessons learned from our wedding, and some unsolicited advice for weddings in general.</li>
147</ul>
148<hr>
149<h1 id="my-projects" tabindex="-1"><a class="observablehq-header-anchor" href="#my-projects">My Projects</a></h1>
150<div class="grid grid-cols-2">
151  <div class="card gallery">
152  <a href="https://brier.fyi/" target="_blank" rel="noopener noreferrer">
153    <h3>Brier.fyi</h3>
154    <div>Prediction market calibration and accuracy analysis.</div>
155    <p><img src="./_file/homepage/projects/brierfyi.190cb0fc.png"></p>
156  </a>
157  </div>
158  <div class="card gallery">
159  <a href="https://nicenumbers.net/" target="_blank" rel="noopener noreferrer">
160    <h3>Nice Numbers</h3>
161    <div>The distributed search for square-cube pandigitals.</div>
162    <p><img src="./_file/homepage/projects/nicenumbers.c2a25d6a.png"></p>
163  </a>
164  </div>
165  <div class="card gallery">
166  <a href="https://github.com/wasabipesto/beehive" target="_blank" rel="noopener noreferrer">
167    <h3>Beehive</h3>
168    <div>Visualizing data on this blog with Observable.</div>
169    <p><img src="./_file/homepage/projects/beehive.9e84a39b.png"></p>
170  </a>
171  </div>
172  <div class="card gallery">
173  <a href="https://meme.limo/" target="_blank" rel="noopener noreferrer">
174    <h3>Automeme</h3>
175    <div>A reasonably-fast, reasonably-simple meme generation tool.</div>
176    <p><img src="./_file/homepage/projects/automeme.1563d1e5.png"></p>
177  </a>
178  </div>
179  <div class="card gallery">
180  <a href="https://github.com/wasabipesto/sandiego" target="_blank" rel="noopener noreferrer">
181    <h3>Sandiego</h3>
182    <div>Reclaiming my personal data with nice graphs.</div>
183    <p><img src="./_file/homepage/projects/sandiego.e05b9ff3.png"></p>
184  </a>
185  </div>
186  <div class="card gallery">
187  <a href="https://wasabipesto.com/notion" target="_blank" rel="noopener noreferrer">
188    <h3>Garden</h3>
189    <div>Offloading my brain into Notion.</div>
190    <p><img src="./_file/homepage/projects/garden.4bb2c403.png"></p>
191  </a>
192  </div>
193</div>
194<hr>
195<h1 id="links" tabindex="-1"><a class="observablehq-header-anchor" href="#links">Links</a></h1>
196<div class="grid grid-cols-3">
197  <div class="card center">
198    <a href="https://applianceri.ng/next?host=wasabipesto.com" target="_blank" rel="noopener noreferrer">
199      <img src="./_file/homepage/classe-nBoPjadlesc.500x334.795cfc3e.png" style="max-width: 90%;">
200    </a>
201  </div>
202  <div class="card grid-colspan-2">
203  <div style="width: 95%; margin: 1rem;">
204<table>
205<thead>
206<tr>
207<th>what</th>
208<th>where</th>
209</tr>
210</thead>
211<tbody>
212<tr>
213<td>github</td>
214<td><a href="https://github.com/wasabipesto" target="_blank" rel="noopener noreferrer">github.com/wasabipesto</a></td>
215</tr>
216<tr>
217<td>tumblr</td>
218<td><a href="https://wasabipesto.tumblr.com" target="_blank" rel="noopener noreferrer">wasabipesto.tumblr.com</a></td>
219</tr>
220<tr>
221<td>manifold</td>
222<td><a href="https://manifold.markets/wasabipesto" target="_blank" rel="noopener noreferrer">manifold.markets/wasabipesto</a></td>
223</tr>
224<tr>
225<td>site rss</td>
226<td><a href="https://wasabipesto.com/feed/rss.xml" target="_blank" rel="noopener noreferrer">wasabipesto.com/feed/rss.xml</a></td>
227</tr>
228<tr>
229<td>ssh keys</td>
230<td><a href="https://api.github.com/users/wasabipesto/keys" target="_blank" rel="noopener noreferrer">api.github.com/users/wasabipesto/keys</a></td>
231</tr>
232<tr>
233<td>gpg keys</td>
234<td><a href="https://api.github.com/users/wasabipesto/gpg_keys" target="_blank" rel="noopener noreferrer">api.github.com/users/wasabipesto/gpg_keys</a></td>
235</tr>
236<tr>
237<td>copyright</td>
238<td><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/" target="_blank" rel="noopener noreferrer">CC BY-NC-SA 4.0 Deed</a></td>
239</tr>
240<tr>
241<td>email</td>
242<td><a href="/cdn-cgi/l/email-protection#0926266a66677d686a7d497e687a686b60796c7a7d66276a6664" target="_blank" rel="noopener noreferrer"><span class="__cf_email__" data-cfemail="2d4e4243594c4e596d5a4c5e4c4f445d485e5942034e4240">[email&#160;protected]</span></a></td>
243</tr>
244<tr>
245<td>status</td>
246<td><a href="https://status.wasabipesto.com/" target="_blank" rel="noopener noreferrer">status.wasabipesto.com</a></td>
247</tr>
248</tbody>
249</table>
250  </div>
251  </div>
252</div>
253</main>
254<footer id="observablehq-footer">
255<div>    Made with ❤️ by <a href="https://wasabipesto.com" target="_blank" rel="noopener noreferrer">wasabipesto</a>
255.     Generated with <a href="https://observablehq.com/framework/" target="_blank" rel="noopener noreferrer">Observable Framework</a>. <br>    Page source and data loaders can be found on <a href="https://github.com/wasabipesto/beehive" target="_blank" rel="noopener noreferrer">GitHub</a>.     Content is licensed under <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/" target="_blank" rel="noopener noreferrer">CC BY-NC-SA 4.0 Deed</a>.</div>
256</footer>
257</div>
vendor: 109 bytes, lines 257-258
257
258<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
258<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"110250afe9564f4287aaddc077462994","r":1,"spa":2}' crossorigin="anonymous"></script>
258
259</body>
260</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.