<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Brainwagon (reborn)</title>
    
    
    <meta name="description" content="Mark VandeWettering&#39;s notebook: telescope making, optics, radio, woodworking, and whatever is on the bench this week.">
    <link rel="canonical" href="https://brainwagon.org/">
    
    
    <meta property="og:site_name" content="Brainwagon">
    <meta property="og:type" content="website">
    <meta property="og:title" content="Brainwagon">
    <meta property="og:description" content="Mark VandeWettering&#39;s notebook: telescope making, optics, radio, woodworking, and whatever is on the bench this week.">
    <meta property="og:url" content="https://brainwagon.org/">
    <meta property="og:image" content="https://brainwagon.org/images/social-card.jpg">
    <meta property="og:image:alt" content="Brainwagon">
    
    <meta property="og:image:width" content="1200">
    <meta property="og:image:height" content="630">
    <meta property="og:image:type" content="image/jpeg">
    <meta property="og:locale" content="en_US">
    
    <meta name="twitter:card" content="summary_large_image">
    <meta name="twitter:title" content="Brainwagon">
    <meta name="twitter:description" content="Mark VandeWettering&#39;s notebook: telescope making, optics, radio, woodworking, and whatever is on the bench this week.">
    <meta name="twitter:image" content="https://brainwagon.org/images/social-card.jpg">
    
    
    <script type="application/ld+json">{"@context": "https://schema.org", "@graph": [{"@type": "WebSite", "author": {"@type": "Person", "name": "Mark VandeWettering", "sameAs": ["https://mastodon.social/@brainwagon", "https://twitter.com/brainwagon", "https://mvandewettering.com"], "url": "https://mvandewettering.com"}, "description": "Mark VandeWettering\u0027s notebook: telescope making, optics, radio, woodworking, and whatever is on the bench this week.", "name": "Brainwagon", "publisher": {"@type": "Person", "name": "Mark VandeWettering", "sameAs": ["https://mastodon.social/@brainwagon", "https://twitter.com/brainwagon", "https://mvandewettering.com"], "url": "https://mvandewettering.com"}, "url": "https://brainwagon.org/"}, {"@type": "Person", "name": "Mark VandeWettering", "sameAs": ["https://mastodon.social/@brainwagon", "https://twitter.com/brainwagon", "https://mvandewettering.com"], "url": "https://mvandewettering.com"}]}</script>
    
    
    <link rel="stylesheet" href="/style.css?v=12">
    <link rel="alternate" type="application/rss+xml" title="Brainwagon" href="/blog/rss.xml">
    
    <link rel="me" href="https://mastodon.social/@brainwagon">
    <link rel="icon" href="/images/caricature-small.png" type="image/png">
    <meta name="theme-color" content="#ffffff" media="(prefers-color-scheme: light)">
    <meta name="theme-color" content="#000000" media="(prefers-color-scheme: dark)">
    
    <link rel="dns-prefetch" href="https://gc.zgo.at">
    <script>
      const savedTheme = localStorage.getItem('theme');
      if (savedTheme === 'dark' || (!savedTheme && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
        document.documentElement.classList.add('dark-theme');
      }
    </script>
</head>
<body>
    
    <a class="skip-link" href="#main">Skip to content</a>
    <nav aria-label="Main">
        <section>
            <a href="/">Home</a>
            <a href='/blog/'>Blog</a>
            <a href="/telescopes/">Telescopes</a>
            <a href="/github/">Github</a>
            <a href="/podcasts/">Radio</a>
            <a href="/contact/">Contact</a>

            <div style="float: right; display: flex; align-items: center;">
                <div class="search-container" role="search" aria-label="Site search" style="display: inline-block; position: relative; margin-right: 1em;">
                    <label for="search-input" class="visually-hidden">Search brainwagon.org</label>
                    <input type="text" id="search-input" placeholder="Search..." autocomplete="off" aria-controls="search-results">
                    <div id="search-results" class="search-results" role="region" aria-label="Search results" aria-live="polite" hidden></div>
                </div>
                <a href="/about/">About</a>
                <a href="/blog/rss.xml" class="rss">RSS</a>
                <button id="theme-toggle" type="button" title="Toggle dark mode" aria-label="Toggle dark mode" aria-pressed="false" style="background: none; border: none; cursor: pointer; color: var(--nav-link-color); font-size: 1.2em; vertical-align: middle;">
                    <svg class="theme-icon theme-icon-moon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" style="width: 1em; height: 1em; vertical-align: middle; fill: currentColor;"><path d="M20.742 13.045a8.088 8.088 0 0 1-2.077.271c-2.135 0-4.14-.83-5.646-2.336a8.025 8.025 0 0 1-2.064-7.723A1 1 0 0 0 9.73 2.034a10.014 10.014 0 0 0-4.489 2.582c-3.898 3.898-3.898 10.243 0 14.143a9.937 9.937 0 0 0 7.072 2.93 9.93 9.93 0 0 0 7.07-2.929 10.007 10.007 0 0 0 2.583-4.491 1.001 1.001 0 0 0-1.224-1.224zm-2.772 4.301a7.947 7.947 0 0 1-5.656 2.343 7.953 7.953 0 0 1-5.658-2.344c-3.118-3.119-3.118-8.195 0-11.314a7.923 7.923 0 0 1 2.06-1.483 10.027 10.027 0 0 0 2.89 7.848 9.972 9.972 0 0 0 7.848 2.891 8.036 8.036 0 0 1-1.484 2.059z"/></svg>
                    <svg class="theme-icon theme-icon-sun" aria-hidden="true" focusable="false" viewBox="0 0 24 24" style="width: 1em; height: 1em; vertical-align: middle; fill: currentColor;"><path d="M6.993 12c0 2.761 2.246 5.007 5.007 5.007s5.007-2.246 5.007-5.007S14.761 6.993 12 6.993 6.993 9.239 6.993 12zM12 8.993c1.658 0 3.007 1.349 3.007 3.007S13.658 15.007 12 15.007 8.993 13.658 8.993 12 10.342 8.993 12 8.993zM10.998 19h2v3h-2zm0-17h2v3h-2zm-9 9h3v2h-3zm17 0h3v2h-3zM4.219 18.363l2.12-2.122 1.415 1.414-2.12 2.122zM16.24 6.344l2.122-2.122 1.414 1.414-2.122 2.122zM6.342 7.759 4.22 5.637l1.415-1.414 2.12 2.122zm13.434 10.605-1.414 1.414-2.122-2.122 1.414-1.414z"/></svg>
                </button>
            </div>
        </section>
    </nav>
    <main id="main">
        <section>
            
<h1>brainwagon (reborn)</h1>
<img src="/images/caricature-small.png" alt="Caricature courtesy of Domee Shi" width="200" height="321" fetchpriority="high" decoding="async" style="float: right; margin-left: 20px;"/>
<p>Welcome to the site of Mark VandeWettering.</p>

<p class="bio">I spent 33 years at Pixar Animation Studios, with credits from
<em>Toy Story</em> to <em>Elemental</em>, and over three decades at the
<a href="https://chabotspace.org/">Chabot</a> Telescope Makers' Workshop in
Oakland, California, teaching people to grind their own telescope mirrors. I
write here about telescope making, woodworking, radio, and whatever I am
building this week. My <a href="https://mvandewettering.com">resume is
here</a>.</p>
<p>Want to catch up with my blog? <a href='/blog/'><strong>Browse the archive</strong></a> and get all the latest. Or use <a class="rss" href="/blog/rss.xml">RSS</a> to stay up to date.</p>

<p>The blog is now generated by a script which I wrote using Google's Antigravity CLI, and which is taking advantage of Google's <a href="https://github.com/google/open-knowledge-format">Open Knowledge Format</a> to store posts.</p>

<p>
In any case, if you are reading this and have any comments or questions,
feel free to send me an email and I'll try to respond. My goal
is to eventually write up a more complete HOWTO on how I created this.
</p>

        </section>
    </main>
    <footer>
        <section>
            <p class="footer-invite">Questions, corrections, or a project you
            would like a second pair of hands on? Write to me at
            <a href="/cdn-cgi/l/email-protection#573a21363933322032232332253e393017303a363e3b7934383a"><span class="__cf_email__" data-cfemail="234e55424d47465446575746514a4d4463444e424a4f0d404c4e">[email&#160;protected]</span></a>.
            I read my email and I answer it.</p>
            <p class="footer-links">
                <a href="/about/">About</a>
                <a href="/contact/">Contact</a>
                <a href="/accessibility/">Accessibility</a>
                <a href="/blog/rss.xml" class="rss">RSS</a>
            </p>
            <p>&copy; 2002-2026, Mark VandeWettering</p>
        </section>
    </footer>
    <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script>
        const themeToggle = document.getElementById('theme-toggle');
        const html = document.documentElement;
        const body = document.body;

        // `aria-pressed` is the button's state, not its label: the label stays
        // "Toggle dark mode" and the state says whether dark mode is on. A
        // screen reader then announces "Toggle dark mode, pressed" without the
        // name having to be rewritten on every click.
        const setThemeState = (isDark) => {
            themeToggle.setAttribute('aria-pressed', String(isDark));
        };

        const isDark = html.classList.contains('dark-theme');
        if (isDark) {
            body.classList.add('dark-theme');
        }
        setThemeState(isDark);

        themeToggle.addEventListener('click', () => {
            const nowDark = body.classList.toggle('dark-theme');
            html.classList.toggle('dark-theme', nowDark);
            localStorage.setItem('theme', nowDark ? 'dark' : 'light');
            setThemeState(nowDark);
        });
    </script>
    <script type="speculationrules">
    {
      "prerender": [{
        "where": {"href_matches": "/*"},
        "eagerness": "moderate"
      }]
    }
    </script>
    <script src="/search.js"></script>
    <script data-goatcounter="https://brainwagon.goatcounter.com/count"
        async src="//gc.zgo.at/count.js"></script>
</body>
</html>