igatsbyjs_charlieharrington.com.rss.xml - sfeed_tests - sfeed tests and RSS and Atom files Err codemadness.org 70 hgit clone git://git.codemadness.org/sfeed_tests URL:git://git.codemadness.org/sfeed_tests codemadness.org 70 1Log /git/sfeed_tests/log.gph codemadness.org 70 1Files /git/sfeed_tests/files.gph codemadness.org 70 1Refs /git/sfeed_tests/refs.gph codemadness.org 70 1README /git/sfeed_tests/file/README.gph codemadness.org 70 1LICENSE /git/sfeed_tests/file/LICENSE.gph codemadness.org 70 i--- Err codemadness.org 70 igatsbyjs_charlieharrington.com.rss.xml (944142B) Err codemadness.org 70 i--- Err codemadness.org 70 i 1 <![CDATA[Charlie Harrington]]>https://www.charlieharrington.comGatsbyJSMon, 26 Jul 2021 19:00:55 GMT<![CDATA[Smart Phone, Dumb Terminal]]>https://www.charlieharrington.com/smart-phone-dumb-terminalhttps://www.charlieharrington.com/smart-phone-dumb-terminalSun, 25 Jul 2021 00:00:00 GMT<p>I'm typing this post on my iPhone in the <a href="https://obsidian.md">Obsidian iOS app</a> using a <a href="https://amzn.to/3rAZfjc">Logitech K380 Bluetooth keyboard</a> and I feel like a 90s computer hacker.</p> Err codemadness.org 70 i 2 <p>Not enough? How about this: I just SSH'ed into a <a href="https://amzn.to/3zE2AkE">Raspberry Pi</a> on my home network using <a href="https://tailscale.com">Tailscale</a> via the <a href="https://termius.com">Termius</a> iOS app to restart a <a href="/flow-and-creative-computing">YouTube-playlist-to-podcast-feed Docker container</a>. </p> Err codemadness.org 70 i 3 <p>Don't get me wrong -- the other stuff is pretty magical, too, especially Tailscale. But this keyboard-to-phone takes the cake.</p> Err codemadness.org 70 i 4 <p>I mean, look at this:</p> Err codemadness.org 70 i 5 <p><span Err codemadness.org 70 i 6 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 7 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 8 > Err codemadness.org 70 i 9 <a Err codemadness.org 70 i 10 class="gatsby-resp-image-link" Err codemadness.org 70 i 11 href="/static/2930c3a3aa4bf3462b52044555a24d56/cd3e9/keyboard.jpg" Err codemadness.org 70 i 12 style="display: block" Err codemadness.org 70 i 13 target="_blank" Err codemadness.org 70 i 14 rel="noopener" Err codemadness.org 70 i 15 > Err codemadness.org 70 i 16 <span Err codemadness.org 70 i 17 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 18 style="padding-bottom: 74.23312883435584%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAMEBf/EABYBAQEBAAAAAAAAAAAAAAAAAAEAAv/aAAwDAQACEAMQAAABfFMjLvmGF//EABkQAAIDAQAAAAAAAAAAAAAAAAECABIiA//aAAgBAQABBQLEvlCGV3sbiL2ZB//EABURAQEAAAAAAAAAAAAAAAAAAAAR/9oACAEDAQE/Aar/xAAWEQEBAQAAAAAAAAAAAAAAAAAAERL/2gAIAQIBAT8BjL//xAAZEAACAwEAAAAAAAAAAAAAAAABEQAQEjH/2gAIAQEABj8CO1ymI6Qn/8QAGhABAQEBAQEBAAAAAAAAAAAAAREAMSFRcf/aAAgBAQABPyFgtHF+4PTERwpvHUH5d+jmHG3f/9oADAMBAAIAAwAAABC03//EABcRAQADAAAAAAAAAAAAAAAAAAARITH/2gAIAQMBAT8QriD/xAAXEQEAAwAAAAAAAAAAAAAAAAAAESEx/9oACAECAQE/EL6k/8QAHBABAAICAwEAAAAAAAAAAAAAAQARIUExUWGx/9oACAEBAAE/EEABL4oqokB21mWmg1EU+BxiJtFnhGgpqjq5/9k='); background-size: cover; display: block;" Err codemadness.org 70 i 19 ></span> Err codemadness.org 70 i 20 <img Err codemadness.org 70 i 21 class="gatsby-resp-image-image" Err codemadness.org 70 i 22 alt="Dumb terminal smart phone" Err codemadness.org 70 i 23 title="Dumb terminal smart phone" Err codemadness.org 70 i 24 src="/static/2930c3a3aa4bf3462b52044555a24d56/6aca1/keyboard.jpg" Err codemadness.org 70 i 25 srcset="/static/2930c3a3aa4bf3462b52044555a24d56/d2f63/keyboard.jpg 163w, Err codemadness.org 70 i 26 /static/2930c3a3aa4bf3462b52044555a24d56/c989d/keyboard.jpg 325w, Err codemadness.org 70 i 27 /static/2930c3a3aa4bf3462b52044555a24d56/6aca1/keyboard.jpg 650w, Err codemadness.org 70 i 28 /static/2930c3a3aa4bf3462b52044555a24d56/7c09c/keyboard.jpg 975w, Err codemadness.org 70 i 29 /static/2930c3a3aa4bf3462b52044555a24d56/01ab0/keyboard.jpg 1300w, Err codemadness.org 70 i 30 /static/2930c3a3aa4bf3462b52044555a24d56/cd3e9/keyboard.jpg 2820w" Err codemadness.org 70 i 31 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 32 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 33 loading="lazy" Err codemadness.org 70 i 34 /> Err codemadness.org 70 i 35 </a> Err codemadness.org 70 i 36 </span></p> Err codemadness.org 70 i 37 <p>It's downright cute, aside from the legs.</p> Err codemadness.org 70 i 38 <p>You kinda forget that your phone is a computer, personally-speaking. Instead, it's usually just a vehicle for social media nightmares. Given the choice between doing something semi-arduous, like checking in for a flight, on a phone app vs the website (on a desktop/laptop), I always choose the latter. Somethings always missing from the app, and if you really want to get all fiddly, which I usually do, they kick you out to a crappy webview anyway.</p> Err codemadness.org 70 i 39 <p>So, I'm usually a laptop-bringer on any trip. Except, this time, I didn't want to. Firstly, my alu-min-i-um portable computer is just plain heavy and bulky, and I was adamant that we were going carry-on only on this voyage. Even more damning, I recently discovered that opening the laptop screen beyond 45 degrees results in the black screen of death. That's something for the Geniuses, if they're willing indulge an admittedly long in the tooth 2016 MBP (I'm doubtful).</p> Err codemadness.org 70 i 40 <p>But I did want to be able to work on edits for my book on this trip. You never know when inspirations gonna strike (usually, for me, around midnight, when I've already gone to bed), and while I'm reasonably fast thumb-typist, I just don't feel the flow feels on the phone keyboard.</p> Err codemadness.org 70 i 41 <p>Luckily, we had this little Bluetooth cutie tucked away in a closet. I'd purchased it as a gift for Carly, so that she could write stuff on the go (very much the same need I'm talking about here). We'd extensively discussed the need for a mobile keyboard writing thingie early in our courtship, and we even entertained the idea of building it ourselves (hint: I'm still entertaining this idea). </p> Err codemadness.org 70 i 42 <p>We're not alone. See the <a href="https://getfreewrite.com/products/freewrite-smart-typewriter">FreeWrite</a> products, which somehow don't quite fit the bill for me, despite almost exactly delivering on our dream product (full-sized keyboard, e-ink-like screen, and supreme battery life). Mostly it's the calculator-sized screen (and the perceived bulky size) that's scaring me away. We want something that you can keep in a purse or a pocket.</p> Err codemadness.org 70 i 43 <p>Now this Bluetooth keyboard doesn't fit in a pocket, but it's also pretty darn cheap, enough so that I'm not going to be devastated if I lose it or spill a beer on it.</p> Err codemadness.org 70 i 44 <p>So, I thought I'd give it a try this trip. And I'm sold. It's legit fun to type on this thing and I think I'm going to bring it with me more places. Along with things like Tailscale and Termius, I can treat my smart phone as a dumb terminal to my real computers.</p> Err codemadness.org 70 i 45 <p>Carly still hasn't given the keyboard a try, but I'm holding out hope. She's watching me tap-tap away right now, and I think this is a gift that just takes a while to kick in.</p> Err codemadness.org 70 i 46 <p>And, meanwhile, I'm going to keep thinking about keyboards-as-computers, whether that's scouring eBay for Commodore VIC-20s, ogling over the latest <a href="https://amzn.to/3749iE0">Raspberry Pi 400</a> keyboard-computer, or sketching out our still-yet-to-be-realized "Kindle for writing." </p> Err codemadness.org 70 i 47 <p>On the latter item, I'm also ogling the <a href="https://remarkable.com">ReMarkable 2</a> as an potential winning entrant, but the lack of keyboard and the lack of backlight are keeping me away... for now. If they're tracking dropped cart analytics at all, I'm just going to apologize now for what I've been doing. You can keep retargeting me if you'd like. You'll get me one day. </p><![CDATA[Writes With]]>https://www.charlieharrington.com/writes-withhttps://www.charlieharrington.com/writes-withThu, 24 Jun 2021 00:00:00 GMT<p>Earlier today, I texted some friends that I regret using <a href="https://www.gatsbyjs.com/">Gatsby</a> for this blog. It came at a moment of frustration, when I was stuck in some weird Node dependencies hell and all I wanted was to write another blog post.</p> Err codemadness.org 70 i 48 <p>If your static site generator does nothing else, it should make it frictionless to write a new blog post. It's hard enough to make the time to write, your software shouldn't be making it harder. </p> Err codemadness.org 70 i 49 <p>Why did I use Gatsby in the first place? Well, it was new and shiny and uses GraphQL. That's enough, right? Really, at the time, I had these grand ambitions of interactive React components within my posts, which I knew would be possible, and possibly easy, with a React-based static site generator. To this date, I've written exactly <a href="/pseudoclassical-star-wars">one</a> of these interactive posts, and that was <em>before</em> I made the Gatsby-switch and I still have never actually ported it from my original Pelicon static site. This post used to have all these Tie Fighters flying around and now it doesn't and I'm still a little bummed about it. If any of that intrigues you, my little Star Wars game is still <a href="https://whatrocks.github.io/aluminum-falcon/">online</a> - it's one of the first things I ever made when I learned how to program.</p> Err codemadness.org 70 i 50 <p>So, anyway, why not switch away from Gatsby? Am I using any of the advanced features of Gatsby? Yes, I am. There's an active plugin ecosystem and I use a bunch of them for things like generating my RSS feed or rendering images or displaying my library or my Instagram posts. But I've realized that some of these, especially the ones that leverage external APIs like the Instagram one, are more trouble than they're worth.</p> Err codemadness.org 70 i 51 <p>With the Instagram plugin/API, all I want to do is <a href="/walkingman">display a neat little grid of all the "walking man" street signs I've discovered</a> and posted to Instagram. But, like all Web 2.0 API platforms, Instagram's API usefulness was continually walked back until it's virtually impossible to do basic things like display your photos (because they want to keep all these useful actions within their own platform/app), and I'm now forced to create a "test account" on a Facebook "app" with a temporary token that expires like every 30 days or something. Now, every time I go to write a new post here, which is usually > 30 days, I can't even build my blog locally because the Gatsby build process fails from the expired Instagram token. I want to blame Instagram here, or Gatsby, but instead, I blame myself. </p> Err codemadness.org 70 i 52 <p>Keep your friends close, and your blog's dependencies closer.</p> Err codemadness.org 70 i 53 <h2>A simpler static site generator</h2> Err codemadness.org 70 i 54 <p>Here's where I announce that I've written a new, <em>better</em>, static site generator, the fourth step in the hero's journey of software engineering.</p> Err codemadness.org 70 i 55 <p>But, nope. Instead, I'm just gonna use the one that my pal <a href="https://benreinhart.com">Ben</a> created. It's called <a href="https://benreinhart.com/syte">Syte</a>. It's extremely lightweight, fast, and does exactly what I really want -- render Markdown files in an HTML template.</p> Err codemadness.org 70 i 56 <p>So, have I switched my blog over to Syte yet? Not yet. But I'm gonna. The main thing that's missing (for me) in Syte is RSS feed generation. I'd like to contribute that back to Ben's repo at some point. I can probably live without the rest of the junk I've bolted onto this site. It may mean that I temporarily dismantle my cool, query-param powered <a href="/library">library searching page</a>, but that's a worthy price to pay for being able to write a blog post exactly when I want to, no questions asked.</p> Err codemadness.org 70 i 57 <p>My inability to bear the blog switching costs at this moment isn't going to stop me from another time-waster of a side project: a new interview site, using Syte, that asks writers about the stuff they use to write, edit, and otherwise create their books!</p> Err codemadness.org 70 i 58 <h2>Writes With</h2> Err codemadness.org 70 i 59 <p><span Err codemadness.org 70 i 60 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 61 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 62 > Err codemadness.org 70 i 63 <a Err codemadness.org 70 i 64 class="gatsby-resp-image-link" Err codemadness.org 70 i 65 href="/static/30ee63ed397c74175268fd0d8f7dea20/136a2/writeswith.png" Err codemadness.org 70 i 66 style="display: block" Err codemadness.org 70 i 67 target="_blank" Err codemadness.org 70 i 68 rel="noopener" Err codemadness.org 70 i 69 > Err codemadness.org 70 i 70 <span Err codemadness.org 70 i 71 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 72 style="padding-bottom: 15.950920245398773%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA40lEQVQI1xWOu0oDYRBG/1J8gfgOttbp8gRCQIi9jWUw+ARqIWpUQkSsRAi4guIahSgGLYTgJfGyaBQtBBXsrHZm9jgpBmbOd2C+kP4m6P0a2q2hN8vo4zry0UR7VfRuznkVedpEH2qkXx3kbc/Zqrsr7jjvLqC3i8h77FlMkM82bASoD2NRHraGsP0C1ixhJ5NkjVHssEi2M4IkEXZahKXg9xh2NOEzjh2XyLZzWGuKkP59oxcV9LqOPEe+z6Idb9kffGyhlzPo1Tx2Pk3603fuzlkZefE82fU5QF5jdwYt2/wDdUbEzGmfEq8AAAAASUVORK5CYII='); background-size: cover; display: block;" Err codemadness.org 70 i 73 ></span> Err codemadness.org 70 i 74 <img Err codemadness.org 70 i 75 class="gatsby-resp-image-image" Err codemadness.org 70 i 76 alt="Writes With logo" Err codemadness.org 70 i 77 title="Writes With logo" Err codemadness.org 70 i 78 src="/static/30ee63ed397c74175268fd0d8f7dea20/a6d36/writeswith.png" Err codemadness.org 70 i 79 srcset="/static/30ee63ed397c74175268fd0d8f7dea20/222b7/writeswith.png 163w, Err codemadness.org 70 i 80 /static/30ee63ed397c74175268fd0d8f7dea20/ff46a/writeswith.png 325w, Err codemadness.org 70 i 81 /static/30ee63ed397c74175268fd0d8f7dea20/a6d36/writeswith.png 650w, Err codemadness.org 70 i 82 /static/30ee63ed397c74175268fd0d8f7dea20/136a2/writeswith.png 884w" Err codemadness.org 70 i 83 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 84 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 85 loading="lazy" Err codemadness.org 70 i 86 /> Err codemadness.org 70 i 87 </a> Err codemadness.org 70 i 88 </span></p> Err codemadness.org 70 i 89 <p>The <a href="https://writeswith">Writes With</a> syte is already live, with two interviews: <a href="https://writeswith.com/interviews/brian-dear/">Brian Dear</a>, author of <strong>The Friendly Orange Glow: The Untold Story of the PLATO System and the Dawn of Cyberculture</strong>, and <a href="https://writeswith.com/interviews/pooja-reddy/">Pooja Reddy</a>, author of <strong>The Big Bold Blue</strong>.</p> Err codemadness.org 70 i 90 <p>Making it was a joy with Syte and I'm happy with it, even if my "design" is still pretty bare bones. I also deployed it with <a href="https://pages.cloudflare.com/">Cloudflare Pages</a>, which mostly importantly comes with (at least for now) free bandwidth. This blog uses Netlify for hosting, which I do like, but occasionally suffer from bandwidth spikes near the end of the monthly billing cycles that trigger their bandwidth "add-ons" fees.</p> Err codemadness.org 70 i 91 <p>Writes With is directly, clearly, obviously, duh inspired by one of my favorite websites: <a href="https://usesthis.com">usesthis.com</a>. In fact, I chatted with Daniel of usesthis.com before launching it, just to make sure he was okay with it, and he gave the thumbs up.</p> Err codemadness.org 70 i 92 <p>I like this little project, because I'm going to get to talk with more people who've published books. As a cub writer myself, I'm happy for any tips and tricks I can get.</p> Err codemadness.org 70 i 93 <p>And I know, I know, the tools aren't the important thing about writing... but I think we all still want to know about them.</p><![CDATA[Computers by the Decade]]>https://www.charlieharrington.com/computers-by-the-decadehttps://www.charlieharrington.com/computers-by-the-decadeWed, 31 Mar 2021 00:00:00 GMT<p>I've been doing a lot of research into the <a href="/library?topic=Computer%20History">history of computers</a><sup>1</sup> for my <a href="/books">forthcoming Middle Grade novel about robots</a> (as of March 2021, I'm linking to a largely blank page here, which I assure you will one day be filled with the multitude of books I'm going to write - end <em>Daily Affirmation</em> now).</p> Err codemadness.org 70 i 94 <p>I'd like to share my current, wait for it, mental model for how I'm thinking about the evolution of computing over the decades. I'll also highlight some current companies that I find interesting because they seem to be fellow computer historians.</p> Err codemadness.org 70 i 95 <p>First, a caveat canem: 🐶 Since this website is my little corner of the dub-dub-dub, I reserve the right to update this framework as I learn more. And I will be learning more, because I can't stop reading about this stuff. I love it. So, there, take that, fellow computer historians! Even better, please let me know what I've messed up or got wrong so I can learn. Woof!</p> Err codemadness.org 70 i 96 <p>So, here's how I see the evolution of computers over the decades (including some predictions): </p> Err codemadness.org 70 i 97 <table> Err codemadness.org 70 i 98 <thead> Err codemadness.org 70 i 99 <tr> Err codemadness.org 70 i 100 <th align="left">Decade</th> Err codemadness.org 70 i 101 <th align="left">Computers</th> Err codemadness.org 70 i 102 </tr> Err codemadness.org 70 i 103 </thead> Err codemadness.org 70 i 104 <tbody> Err codemadness.org 70 i 105 <tr> Err codemadness.org 70 i 106 <td align="left">1940s</td> Err codemadness.org 70 i 107 <td align="left">Analog</td> Err codemadness.org 70 i 108 </tr> Err codemadness.org 70 i 109 <tr> Err codemadness.org 70 i 110 <td align="left">1950s</td> Err codemadness.org 70 i 111 <td align="left">Digital</td> Err codemadness.org 70 i 112 </tr> Err codemadness.org 70 i 113 <tr> Err codemadness.org 70 i 114 <td align="left">1960s</td> Err codemadness.org 70 i 115 <td align="left">Warehouse</td> Err codemadness.org 70 i 116 </tr> Err codemadness.org 70 i 117 <tr> Err codemadness.org 70 i 118 <td align="left">1970s</td> Err codemadness.org 70 i 119 <td align="left">Mini</td> Err codemadness.org 70 i 120 </tr> Err codemadness.org 70 i 121 <tr> Err codemadness.org 70 i 122 <td align="left">1980s</td> Err codemadness.org 70 i 123 <td align="left">8-Bit PC</td> Err codemadness.org 70 i 124 </tr> Err codemadness.org 70 i 125 <tr> Err codemadness.org 70 i 126 <td align="left">1990s</td> Err codemadness.org 70 i 127 <td align="left">Pentium PC</td> Err codemadness.org 70 i 128 </tr> Err codemadness.org 70 i 129 <tr> Err codemadness.org 70 i 130 <td align="left">2000s</td> Err codemadness.org 70 i 131 <td align="left">Laptop</td> Err codemadness.org 70 i 132 </tr> Err codemadness.org 70 i 133 <tr> Err codemadness.org 70 i 134 <td align="left">2010s</td> Err codemadness.org 70 i 135 <td align="left">Smart Phones</td> Err codemadness.org 70 i 136 </tr> Err codemadness.org 70 i 137 <tr> Err codemadness.org 70 i 138 <td align="left">2020s</td> Err codemadness.org 70 i 139 <td align="left">Wearables</td> Err codemadness.org 70 i 140 </tr> Err codemadness.org 70 i 141 <tr> Err codemadness.org 70 i 142 <td align="left">2030s</td> Err codemadness.org 70 i 143 <td align="left">Embeddables</td> Err codemadness.org 70 i 144 </tr> Err codemadness.org 70 i 145 </tbody> Err codemadness.org 70 i 146 </table> Err codemadness.org 70 i 147 <p>Lemme recap these a bit (in a freewheeling manner). We see the first "stored-program" digital computers coming to life in the late 40s. These are your o.g. "Von Neumann" architecture machines, the real-world implementations of the universal Turing machine vision from 1936. Goodbye, Vannevar Bush's Differential Analyzer -- we've now got computers that we can "re-wire" themselves with "code" instead of electromechanical widgets and whatnot that had to be manually reconfigured for different problems (usually military applications around this time, like calculating missile trajectories).</p> Err codemadness.org 70 i 148 <p>Then comes the era of the ominious Warehouse computer, dominated by Big Blue (IBM) and the angry BUNCH (Burroughs, UNIVAC, NCR, Control Data Corporation, and Honeywell) -- aka the FAANG of days of computer future past. Computers were huge, literally, during the 60s and 70s. Actual insects would get lodged inside them and wreak havoc -- "bugs"! This was also around the time that people thought there might only need to be a handful of computers in the whole wide world -- that computers would be a public utility like telephone service. </p> Err codemadness.org 70 i 149 <p>Along related lines, this is where folks started experimenting with "computer networking." Let's layer that strand into our decades framework:</p> Err codemadness.org 70 i 150 <table> Err codemadness.org 70 i 151 <thead> Err codemadness.org 70 i 152 <tr> Err codemadness.org 70 i 153 <th align="left">Decade</th> Err codemadness.org 70 i 154 <th align="left">Computers</th> Err codemadness.org 70 i 155 <th align="left">Networking</th> Err codemadness.org 70 i 156 </tr> Err codemadness.org 70 i 157 </thead> Err codemadness.org 70 i 158 <tbody> Err codemadness.org 70 i 159 <tr> Err codemadness.org 70 i 160 <td align="left">1940s</td> Err codemadness.org 70 i 161 <td align="left">Analog</td> Err codemadness.org 70 i 162 <td align="left">N/A</td> Err codemadness.org 70 i 163 </tr> Err codemadness.org 70 i 164 <tr> Err codemadness.org 70 i 165 <td align="left">1950s</td> Err codemadness.org 70 i 166 <td align="left">Digital</td> Err codemadness.org 70 i 167 <td align="left">N/A</td> Err codemadness.org 70 i 168 </tr> Err codemadness.org 70 i 169 <tr> Err codemadness.org 70 i 170 <td align="left">1960s</td> Err codemadness.org 70 i 171 <td align="left">Warehouse</td> Err codemadness.org 70 i 172 <td align="left">Timeshare</td> Err codemadness.org 70 i 173 </tr> Err codemadness.org 70 i 174 <tr> Err codemadness.org 70 i 175 <td align="left">1970s</td> Err codemadness.org 70 i 176 <td align="left">Mini</td> Err codemadness.org 70 i 177 <td align="left">ARPANET</td> Err codemadness.org 70 i 178 </tr> Err codemadness.org 70 i 179 <tr> Err codemadness.org 70 i 180 <td align="left">1980s</td> Err codemadness.org 70 i 181 <td align="left">8-Bit PC</td> Err codemadness.org 70 i 182 <td align="left">Internet</td> Err codemadness.org 70 i 183 </tr> Err codemadness.org 70 i 184 <tr> Err codemadness.org 70 i 185 <td align="left">1990s</td> Err codemadness.org 70 i 186 <td align="left">Pentium PC</td> Err codemadness.org 70 i 187 <td align="left">WWW</td> Err codemadness.org 70 i 188 </tr> Err codemadness.org 70 i 189 <tr> Err codemadness.org 70 i 190 <td align="left">2000s</td> Err codemadness.org 70 i 191 <td align="left">Laptop</td> Err codemadness.org 70 i 192 <td align="left">Web 2.0</td> Err codemadness.org 70 i 193 </tr> Err codemadness.org 70 i 194 <tr> Err codemadness.org 70 i 195 <td align="left">2010s</td> Err codemadness.org 70 i 196 <td align="left">Smart Phones</td> Err codemadness.org 70 i 197 <td align="left">Apps</td> Err codemadness.org 70 i 198 </tr> Err codemadness.org 70 i 199 <tr> Err codemadness.org 70 i 200 <td align="left">2020s</td> Err codemadness.org 70 i 201 <td align="left">Wearables</td> Err codemadness.org 70 i 202 <td align="left">TBD</td> Err codemadness.org 70 i 203 </tr> Err codemadness.org 70 i 204 <tr> Err codemadness.org 70 i 205 <td align="left">2030s</td> Err codemadness.org 70 i 206 <td align="left">Embeddables</td> Err codemadness.org 70 i 207 <td align="left">TBD</td> Err codemadness.org 70 i 208 </tr> Err codemadness.org 70 i 209 </tbody> Err codemadness.org 70 i 210 </table> Err codemadness.org 70 i 211 <p>Timesharing. You've probably heard of it before. Essentially, the few people lucky enough to have access to these machines would sit at "dumb" Teletype terminals and their commands would be executed in some mainframe somewhere else (usually their university). You didn't have to own a computer to use one, you just needed to pay for access (sounds a lot like "cloud computing" nowadays, right? Time is a flat circle). It wasn't just all university-work. Games were being created and shared, and projects like <a href="https://en.wikipedia.org/wiki/PLATO_(computer_system)">PLATO</a> at University of Illinois were doing interactive things that seem impossible for their era:</p> Err codemadness.org 70 i 212 <p><span Err codemadness.org 70 i 213 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 214 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 624px; " Err codemadness.org 70 i 215 > Err codemadness.org 70 i 216 <span Err codemadness.org 70 i 217 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 218 style="padding-bottom: 76.68711656441718%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAFwABAAMAAAAAAAAAAAAAAAAAAAECBf/EABUBAQEAAAAAAAAAAAAAAAAAAAEA/9oADAMBAAIQAxAAAAHHTUAn/8QAFhABAQEAAAAAAAAAAAAAAAAAARAh/9oACAEBAAEFAijk/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAGBAAAgMAAAAAAAAAAAAAAAAAABABIUH/2gAIAQEABj8CMU0//8QAGhABAAIDAQAAAAAAAAAAAAAAAQARECFBUf/aAAgBAQABPyEFNzWABIb95Ndx/9oADAMBAAIAAwAAABDr7//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8QP//EAB0QAAIBBAMAAAAAAAAAAAAAAAERACExQWFxgZH/2gAIAQEAAT8QMIAQzHmPBhTx1DGIAiz4RmBU9Shtbc//2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 219 ></span> Err codemadness.org 70 i 220 <img Err codemadness.org 70 i 221 class="gatsby-resp-image-image" Err codemadness.org 70 i 222 alt="PLATO" Err codemadness.org 70 i 223 title="PLATO" Err codemadness.org 70 i 224 src="/static/097d01671bc699ec3e60eca532367731/a3695/plato.jpg" Err codemadness.org 70 i 225 srcset="/static/097d01671bc699ec3e60eca532367731/d2f63/plato.jpg 163w, Err codemadness.org 70 i 226 /static/097d01671bc699ec3e60eca532367731/c989d/plato.jpg 325w, Err codemadness.org 70 i 227 /static/097d01671bc699ec3e60eca532367731/a3695/plato.jpg 624w" Err codemadness.org 70 i 228 sizes="(max-width: 624px) 100vw, 624px" Err codemadness.org 70 i 229 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 230 loading="lazy" Err codemadness.org 70 i 231 /> Err codemadness.org 70 i 232 </span></p> Err codemadness.org 70 i 233 <p>Take a look at the rows for 80s and 90s - you're basically looking at Halt and Catch Fire season by season.<sup>2</sup> Personal computers. The World Wide Web. AOL Instant Messager. This is where things start hitting hard on the nostalgia receptors for me. I'll never forget the early `90s Christmas where we got our SoundBlaster 16 sound card. Carmen Sandiego never sounded so good.</p> Err codemadness.org 70 i 234 <p>Let's fast-forward to the new millenium. Frankly, I'm increasingly less interested in the more recent eras of apps and smart phones. Even my predictions are boring to me. I don't have an Apple Watch. I know "AR" is coming (see recent WWDC teaser). I know we're going to be able to read brainwaves of pigs soon (or already are). I should probably keep more of an open mind about these upcoming technologies, so I'll try. But the history major in me just wants to go back and play with <a href="/my-new-old-apple-iie-computer">my Apple IIe</a>.</p> Err codemadness.org 70 i 235 <p>When I think about it, there's tons of additional "strands" that could and should be tracked in this framework. For example, the evolution of memory type and memory capacity over time is super fascinating, and probably is the number one driver of the changes in the "computers" column.</p> Err codemadness.org 70 i 236 <p>Or another idea, even closer to my heart, would be adding the "definitive" book that should be read for each era. Actually, let me try that one.</p> Err codemadness.org 70 i 237 <table> Err codemadness.org 70 i 238 <thead> Err codemadness.org 70 i 239 <tr> Err codemadness.org 70 i 240 <th align="left">Decade</th> Err codemadness.org 70 i 241 <th align="left">Computers</th> Err codemadness.org 70 i 242 <th align="left">Networking</th> Err codemadness.org 70 i 243 <th align="left">Book</th> Err codemadness.org 70 i 244 </tr> Err codemadness.org 70 i 245 </thead> Err codemadness.org 70 i 246 <tbody> Err codemadness.org 70 i 247 <tr> Err codemadness.org 70 i 248 <td align="left">1940s</td> Err codemadness.org 70 i 249 <td align="left">Analog</td> Err codemadness.org 70 i 250 <td align="left">N/A</td> Err codemadness.org 70 i 251 <td align="left"></td> Err codemadness.org 70 i 252 </tr> Err codemadness.org 70 i 253 <tr> Err codemadness.org 70 i 254 <td align="left">1950s</td> Err codemadness.org 70 i 255 <td align="left">Digital</td> Err codemadness.org 70 i 256 <td align="left">N/A</td> Err codemadness.org 70 i 257 <td align="left"><a href="https://amzn.to/3eD3yq3">Turing's Cathedral</a></td> Err codemadness.org 70 i 258 </tr> Err codemadness.org 70 i 259 <tr> Err codemadness.org 70 i 260 <td align="left">1960s</td> Err codemadness.org 70 i 261 <td align="left">Warehouse</td> Err codemadness.org 70 i 262 <td align="left">Timeshare</td> Err codemadness.org 70 i 263 <td align="left"><a href="https://amzn.to/3m8jiD3">The Friendly Orange Glow</a></td> Err codemadness.org 70 i 264 </tr> Err codemadness.org 70 i 265 <tr> Err codemadness.org 70 i 266 <td align="left">1970s</td> Err codemadness.org 70 i 267 <td align="left">Mini</td> Err codemadness.org 70 i 268 <td align="left">ARPANET</td> Err codemadness.org 70 i 269 <td align="left"><a href="https://amzn.to/3e32kUB">The Soul of a New Machine</a></td> Err codemadness.org 70 i 270 </tr> Err codemadness.org 70 i 271 <tr> Err codemadness.org 70 i 272 <td align="left">1980s</td> Err codemadness.org 70 i 273 <td align="left">8-Bit PC</td> Err codemadness.org 70 i 274 <td align="left">Internet</td> Err codemadness.org 70 i 275 <td align="left"><a href="https://amzn.to/3kEztas">Return to the Little Kingdom</a></td> Err codemadness.org 70 i 276 </tr> Err codemadness.org 70 i 277 <tr> Err codemadness.org 70 i 278 <td align="left">1990s</td> Err codemadness.org 70 i 279 <td align="left">Pentium PC</td> Err codemadness.org 70 i 280 <td align="left">WWW</td> Err codemadness.org 70 i 281 <td align="left"><a href="https://amzn.to/3u5aTD4">Hard Drive</a></td> Err codemadness.org 70 i 282 </tr> Err codemadness.org 70 i 283 <tr> Err codemadness.org 70 i 284 <td align="left">2000s</td> Err codemadness.org 70 i 285 <td align="left">Laptop</td> Err codemadness.org 70 i 286 <td align="left">Web 2.0</td> Err codemadness.org 70 i 287 <td align="left"></td> Err codemadness.org 70 i 288 </tr> Err codemadness.org 70 i 289 <tr> Err codemadness.org 70 i 290 <td align="left">2010s</td> Err codemadness.org 70 i 291 <td align="left">Smart Phones</td> Err codemadness.org 70 i 292 <td align="left">Apps</td> Err codemadness.org 70 i 293 <td align="left"></td> Err codemadness.org 70 i 294 </tr> Err codemadness.org 70 i 295 <tr> Err codemadness.org 70 i 296 <td align="left">2020s</td> Err codemadness.org 70 i 297 <td align="left">Wearables</td> Err codemadness.org 70 i 298 <td align="left">TBD</td> Err codemadness.org 70 i 299 <td align="left"></td> Err codemadness.org 70 i 300 </tr> Err codemadness.org 70 i 301 <tr> Err codemadness.org 70 i 302 <td align="left">2030s</td> Err codemadness.org 70 i 303 <td align="left">Embeddables</td> Err codemadness.org 70 i 304 <td align="left">TBD</td> Err codemadness.org 70 i 305 <td align="left"></td> Err codemadness.org 70 i 306 </tr> Err codemadness.org 70 i 307 </tbody> Err codemadness.org 70 i 308 </table> Err codemadness.org 70 i 309 <p>I need some suggestions for the more recent eras!</p> Err codemadness.org 70 i 310 <h3>Three Companies That Seem to Also Appreciate Computer History</h3> Err codemadness.org 70 i 311 <p>Okay, onto the best part...</p> Err codemadness.org 70 i 312 <h4>Replit</h4> Err codemadness.org 70 i 313 <p><a href="http://replit.com/">Replit</a> is a company that makes it easy to spin up an IDE in any language, right in your browser. Goodbye painful local dev environment setup. Students LOVE it. Teachers LOVE it. School administrators apparently DON'T LOVE it (according to what I've seen on Twitter).</p> Err codemadness.org 70 i 314 <p>So, what does Replit know about computer history?</p> Err codemadness.org 70 i 315 <p>They are the modern timesharing system - global, instant access to compute, with collaboration as first-class objective. It's a place to learn, play games, write your own games, build apps, ship stuff. They're even talking about building their own hardware "dumb" terminal that connects instantly to Replit. </p> Err codemadness.org 70 i 316 <blockquote class="twitter-tweet"><p lang="en" dir="ltr">We&#39;re prototyping a computer that boots to Replit and is hardwired with a VPN to make it impossible to block.<br><br>If it works, it will be free for students. Devs will pay full price with each computer sold will sponsor a student. <a href="https://t.co/8cQdhJqvFv">https://t.co/8cQdhJqvFv</a> <a href="https://t.co/Qu1eTYYa1x">pic.twitter.com/Qu1eTYYa1x</a></p>&mdash; Amjad Masad ⠕ (@amasad) <a href="https://twitter.com/amasad/status/1373065904678789121?ref_src=twsrc%5Etfw">March 20, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> Err codemadness.org 70 i 317 <p>Timesharing is back. And this time you don't have to share, unless you want to!</p> Err codemadness.org 70 i 318 <h4>Tailscale</h4> Err codemadness.org 70 i 319 <p><a href="https://tailscale.com/">Tailscale</a> is a company that makes it dead simple to set up a VPN for all your devices: phones, Raspberry Pis, laptops, desktops, you name it.</p> Err codemadness.org 70 i 320 <p>So, what does Tailscale know about computer history?</p> Err codemadness.org 70 i 321 <p>They are making the 90s-LAN party possible again. It was a beautiful thing when you could "easily" make your computers talk to each other, but then the Internet got scary and hard, and Tailscale makes it safe and easy again. </p> Err codemadness.org 70 i 322 <p>I recently used Tailscale to set up a little Raspberry Pi-powered robot car. I can SSH into my little robot and drive it around, and I'm feeling like a kid again.</p> Err codemadness.org 70 i 323 <p><span Err codemadness.org 70 i 324 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 325 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 326 > Err codemadness.org 70 i 327 <span Err codemadness.org 70 i 328 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 329 style="padding-bottom: 151.53374233128832%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAeABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAQBAgMF/8QAFgEBAQEAAAAAAAAAAAAAAAAAAgEA/9oADAMBAAIQAxAAAAHBpW0sjYjXSFwuYNi3/8QAHRAAAgICAwEAAAAAAAAAAAAAAQIAAxETEiEiMv/aAAgBAQABBQL2i1fGnq2xSErs4krEVUgy0arBxN+s7Wn/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/AR//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/AR//xAAeEAABBAEFAAAAAAAAAAAAAAAAAQIRITEQEiKBkf/aAAgBAQAGPwLOR+nBoquXaU5vpQpmOiVIgpyn/8QAHRABAAMAAwADAAAAAAAAAAAAAQARIUFRYXGB0f/aAAgBAQABPyFN2PMZY/MLBUuvf2FBFE+5i8Ba7KiK4XSA53vmY/FS1FPphxgyqJvtxVul6E//2gAMAwEAAgADAAAAEBcTvf/EABgRAAIDAAAAAAAAAAAAAAAAAAABECFR/9oACAEDAQE/EIZWH//EABkRAQACAwAAAAAAAAAAAAAAAAABIRExUf/aAAgBAgEBPxDC0bX1/8QAHhABAQEBAQABBQAAAAAAAAAAAREAITFBcYGRofD/2gAIAQEAAT8QCwCKIbwdzBQf0XAlEFUTkn93VjyTeRLGWzjjrAA/p3uCeufZjRXqT4aTIBD2yfRPjI84K0IhkpV7EP4c2rOg5N//2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 330 ></span> Err codemadness.org 70 i 331 <img Err codemadness.org 70 i 332 class="gatsby-resp-image-image" Err codemadness.org 70 i 333 alt="car" Err codemadness.org 70 i 334 title="car" Err codemadness.org 70 i 335 src="/static/73bec978c3721efeb640ee7c9b4bae90/6aca1/car.jpg" Err codemadness.org 70 i 336 srcset="/static/73bec978c3721efeb640ee7c9b4bae90/d2f63/car.jpg 163w, Err codemadness.org 70 i 337 /static/73bec978c3721efeb640ee7c9b4bae90/c989d/car.jpg 325w, Err codemadness.org 70 i 338 /static/73bec978c3721efeb640ee7c9b4bae90/6aca1/car.jpg 650w, Err codemadness.org 70 i 339 /static/73bec978c3721efeb640ee7c9b4bae90/7c09c/car.jpg 975w, Err codemadness.org 70 i 340 /static/73bec978c3721efeb640ee7c9b4bae90/ec605/car.jpg 1125w" Err codemadness.org 70 i 341 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 342 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 343 loading="lazy" Err codemadness.org 70 i 344 /> Err codemadness.org 70 i 345 </span></p> Err codemadness.org 70 i 346 <h4>Oxide Computer Company</h4> Err codemadness.org 70 i 347 <p><a href="https://oxide.computer/">Oxide Computer Company</a> is a new computer company. Like hardware-hardware computer company! They're building servers for folks who don't want to (or can't) just use AWS, GCP, Azure, Digital Ocean, blah blah... the cloud.</p> Err codemadness.org 70 i 348 <p>So, what does Oxide know about computer history?</p> Err codemadness.org 70 i 349 <p>More than me! Just listen to their epic <a href="https://oxide.computer/podcast/">podcast On the Metal</a> to hear for yourself. They even went through a fun design project of <a href="https://oxide.computer/blog/retro-logos-project-60s/">redesigning their logo to look like definitive computer companies of days past.</a>.</p> Err codemadness.org 70 i 350 <p>But most importantly I think that Oxide harkens back to the `90s era of owning your compute infra end-to-end. We do not have to accept that everything will be in the cloud. Maybe your closet is a better choice. Tradeoffs, amiright? There are going to be even more cases in the future where local compute is needed (e.g. how about the Moon or Mars?!)</p> Err codemadness.org 70 i 351 <h3>Computer historian</h3> Err codemadness.org 70 i 352 <p>In conclusion:</p> Err codemadness.org 70 i 353 <p>By trade, I'm a software engineer. By spirit, I'm a computer historian. By George, I'm trying to combine the two (just like these three companies).</p> Err codemadness.org 70 i 354 <h4>Footnotes</h4> Err codemadness.org 70 i 355 <ol> Err codemadness.org 70 i 356 <li>I'm kinda showing off something neat with this link -- linkable searching using query-params for my <a href="/library">Library book list</a>. I'm proud of this lil' quality of life feature for my site. If you're one of those people who like to strip query params from links, by all means do so, but if you want to share a <a href="/library?topic=Ancient%20Rome">list of the books I've read about Ancient Rome</a> (why would you want to do this if you're not me?), keep 'em in the link.</li> Err codemadness.org 70 i 357 <li>Watch this show. If you love computers, watch this show. If you love great characters making terrible decisions, watch this show. And then watch it again using this <a href="https://bits.ashleyblewer.com/halt-and-catch-fire-syllabus/">college-course level syllabus by Ashley Blewer</a>.</li> Err codemadness.org 70 i 358 </ol><![CDATA[Notes on My Chemotherapy]]>https://www.charlieharrington.com/chemotherapyhttps://www.charlieharrington.com/chemotherapyThu, 04 Feb 2021 00:00:00 GMT<p>Nobody likes an addendum.</p> Err codemadness.org 70 i 359 <p>Appendices are great (ask any Tolkien fan). P.S.'s are <em>the best</em> (especially if they're from a penpal).</p> Err codemadness.org 70 i 360 <p>But addendums. Nope. They change the rules, after you've started playing. After the game's over, even.</p> Err codemadness.org 70 i 361 <p>I recently got dropped with this whopper of an addendum:</p> Err codemadness.org 70 i 362 <div class="gatsby-highlight" data-language="text"><pre class="language-text"><code class="language-text">Orcein stains performed on blocks A3 and A5 highlight elastic fibers Err codemadness.org 70 i 363 wrapping around nests of tumor cells, consistent with vascular invasion</code></pre></div> Err codemadness.org 70 i 364 <h2>A lil' background</h2> Err codemadness.org 70 i 365 <p>Previously, on "Halt and Catch Cancer", I thought I was in the clear. Sure, I'd been <a href="/colon-cancer">diagnosed with Stage II colon cancer at age 34</a>. But the neato robotic surgery to remove my sigmoid colon (and my grisly barnacle of a tumor) was successful, with no signs of the cancer spreading to the nearby lymph nodes (which are essentially the Information Superhighway of your body's immune system).</p> Err codemadness.org 70 i 366 <p>Officially, we're talking a PT3N0 pathology, where N means the number of lymph nodes with tumor cells (zero, in my case, of the 21 that were removed and inspected) and T means the levels of colon wall that the tumor "broke through." N0 is awesome and T3 is not-so-awesome. My tumor was pretty darn close to breaking through the colon wall. But the fact that I had no lymph nodes affected was a good sign -- a good enough sign that no chemotheraphy was being recommended by my USCF doctor crew.</p> Err codemadness.org 70 i 367 <p>Now, after my blog post on this whole "cancer sitch," I'd been in touch with friends and other wood-workers who were, unfortunately, familiar with this process. One, in particular, has been highly tuned into the research and literature around colon cancer, and he pushed me to make sure I fully understood my pathology. He also mentioned that he's seen folks with my PT3N0 pathology do chemotherapy on a preventative basis. Given that my big missive in my last post was about "becoming your own health advocate," his advice hit hard, because I was already lapsing in my attentiveness. Frankly, I was exhausted from the surgery, relieved by the results, ready to move on, and the pathology report itself was confusing af.</p> Err codemadness.org 70 i 368 <p>Actually, you know what? I'm just going to paste it here:</p> Err codemadness.org 70 i 369 <div class="gatsby-highlight" data-language="text"><pre class="language-text"><code class="language-text">FINAL PATHOLOGIC DIAGNOSIS Err codemadness.org 70 i 370 Sigmoid colon, sigmoid colectomy: Err codemadness.org 70 i 371 1. Adenocarcinoma, moderately-differentiated, invasive through Err codemadness.org 70 i 372 muscularis propria into pericolic adipose tissue, negative margins; see Err codemadness.org 70 i 373 comment. Err codemadness.org 70 i 374 2. No tumor in twenty-one lymph nodes (0/21). Err codemadness.org 70 i 375 COMMENT: Err codemadness.org 70 i 376 COLON CARCINOMA SYNOPTIC COMMENT Err codemadness.org 70 i 377 - Procedure: Sigmoid colectomy. Err codemadness.org 70 i 378 Result Information Err codemadness.org 70 i 379 All Reviewers List Err codemadness.org 70 i 380 Pathology PDF Report Err codemadness.org 70 i 381 Narrative &amp; Impression Err codemadness.org 70 i 382 Harrington, Charles Err codemadness.org 70 i 383 - Location of tumor: Sigmoid colon. Err codemadness.org 70 i 384 - Tumor size: 3.3 x 2.5 x 1 cm. Err codemadness.org 70 i 385 - Macroscopic tumor perforation: Not identified. Err codemadness.org 70 i 386 - Histologic Type: Adenocarcinoma. Err codemadness.org 70 i 387 - Histologic Grade: Moderately-differentiated (low grade). Err codemadness.org 70 i 388 - Microscopic depth of invasion: Tumor invades through the muscularis Err codemadness.org 70 i 389 propria into pericolic soft tissue (pT3). Err codemadness.org 70 i 390 - Margins: Negative. Err codemadness.org 70 i 391 - Proximal margin: Negative (tumor is &gt; 4 cm from margin). Err codemadness.org 70 i 392 - Distal margin: Negative (tumor is &gt; 4 cm from margin). Err codemadness.org 70 i 393 - Circumferential (radial) margin: Negative (tumor is &gt; 3 cm from Err codemadness.org 70 i 394 margin). Err codemadness.org 70 i 395 - Treatment effect (modified Ryan score, scale 0-3): No known Err codemadness.org 70 i 396 presurgical therapy. Err codemadness.org 70 i 397 - Lymphovascular invasion: Not identified on H&amp;E (orcein stains will Err codemadness.org 70 i 398 be performed on blocks A3 and A5, and the results will be reported as an Err codemadness.org 70 i 399 addendum). Err codemadness.org 70 i 400 - Perineural invasion: None. Err codemadness.org 70 i 401 - Tumor Deposits: Not identified. Err codemadness.org 70 i 402 - Lymph node status: Negative (number of lymph nodes examined: 21). Err codemadness.org 70 i 403 - Other pathologic findings: None identified. Err codemadness.org 70 i 404 - AJCC Pathologic Stage: pT3N0. Err codemadness.org 70 i 405 - Ancillary studies: Immunohistochemistry for DNA mismatch repair Err codemadness.org 70 i 406 proteins will be reported in an addendum. Err codemadness.org 70 i 407 Err codemadness.org 70 i 408 Addendum Comment Err codemadness.org 70 i 409 Immunohistochemistry was performed to evaluate the status of DNA Err codemadness.org 70 i 410 mismatch repair protein expression on block A3. The results in the tumor Err codemadness.org 70 i 411 cell nuclei are: Err codemadness.org 70 i 412 MLH1 expression: Present. Err codemadness.org 70 i 413 PMS2 expression: Present. Err codemadness.org 70 i 414 MSH2 expression: Present. Err codemadness.org 70 i 415 MSH6 expression: Present. Err codemadness.org 70 i 416 Expression for all four markers, in most cases, indicates that the DNA Err codemadness.org 70 i 417 mismatch repair proteins are intact. This result should be correlated Err codemadness.org 70 i 418 with the clinical presentation and family history to determine the need Err codemadness.org 70 i 419 for further work up for Lynch syndrome</code></pre></div> Err codemadness.org 70 i 420 <p>Probably TMI, but this will actually be easier for me to find later, instead of spelunking through the oh-so-painful EPIC MyChart software. Am I allowed to share this? I DON'T KNOW AND I DON'T CARE.</p> Err codemadness.org 70 i 421 <p>As you can see, this plaintext nightmare is full of strange and wonderous medical terms. Yes, the doctors walk you through it but still... it's a lot. I did push them to explain the terms, like what negative margins mean and why they're a good thing, although I kind of forget already so I won't try to explain.</p> Err codemadness.org 70 i 422 <p>After this walk-through with the docs, I felt good about my plan. No chemo needed. Just ongoing tests and CT scans and blood work and colonoscopies over the next five years to make sure that the cancer wasn't back, led by the UCSF Cancer Survivorship Clinic. Sure, that wasn't nothing, but it also isn't that bad, considering how lucky I am to have caught this thing and gotten it removed ASAP. The idea was, after five years, I'd be back in the general population for risk of colon cancer. <em>Cured</em>.</p> Err codemadness.org 70 i 423 <p>But then, during my first Survivorship Clinic convo in November, I recalled that one line from the pathology... the one mentioning the addendum that I hadn't yet seen. I ask about it. We dig in, and we find this:</p> Err codemadness.org 70 i 424 <div class="gatsby-highlight" data-language="text"><pre class="language-text"><code class="language-text">Addendum Comment Err codemadness.org 70 i 425 Orcein stains performed on blocks A3 and A5 highlight elastic fibers Err codemadness.org 70 i 426 wrapping around nests of tumor cells, consistent with vascular invasion</code></pre></div> Err codemadness.org 70 i 427 <p><code class="language-text">Consistent with vascular invasion</code>. Welp, that can't be good.</p> Err codemadness.org 70 i 428 <p>At this point, I'm immediately whisked off the UCSF Oncology Department.</p> Err codemadness.org 70 i 429 <h2>New faces and new tests and new plans</h2> Err codemadness.org 70 i 430 <p>A hospital is a series of interconnected rings, all slightly Venn Diagramming each other, kind of like the Olympics logo. As a patient, you tend to orbit one of the rings. But sometimes you'll Three Body Problem your way over to another ring.</p> Err codemadness.org 70 i 431 <p>In my entire diagnosis and surgery process, I'd never made it over to the Oncology (aka cancer) ring -- I was stuck in Surgery World. But, after this addendum, I'm now squarely in their circle.</p> Err codemadness.org 70 i 432 <p>So, what's our goal now? Well, now that we've noticed that my cancer has slightly spread into the vascular system, we need to figure out what to do about it. First, let's remember the good stuff - the rest of the pathology is relatively awesome. Next, let's get some more data!</p> Err codemadness.org 70 i 433 <p>We do these tests:</p> Err codemadness.org 70 i 434 <ul> Err codemadness.org 70 i 435 <li>Signatera - looks in your blood for tumor cells</li> Err codemadness.org 70 i 436 <li>Oncotype - looks at your tumor and rates the likelihood of recurrence</li> Err codemadness.org 70 i 437 </ul> Err codemadness.org 70 i 438 <blockquote> Err codemadness.org 70 i 439 <p>Let me reiterate that my explanations of these tests (and anything medical-related) is entirely my random-dudeman-laymen's explanation. I hope to provide one person's context and interpretation of these confusing and scary things. I'm open to feedback and information on what I can do better.</p> Err codemadness.org 70 i 440 </blockquote> Err codemadness.org 70 i 441 <h3>Insurance aside</h3> Err codemadness.org 70 i 442 <p>Insurance didn't want to cover the Oncotype test, because, of course. Insurance doesn't want to cover a lot of things, especially brand new "cutting edge" stuff, like the Oncotype test.</p> Err codemadness.org 70 i 443 <p>Instead, insurance wants to make sure that you really-super-duper-need whatever it is they're going to give you, to the point where there's basically no way they can say no. My doctors have been amazing advocates for me, helping make sure that insurance knows how important these tests and treatments are for my health. THANK YOU, UCSF.</p> Err codemadness.org 70 i 444 <p>Insurance is frustrating and scary. I do not understand it. I do not want to understand it. I wish it was simpler. I wish I didn't have to make sure that I was "covered" for things related to my health and my family's health. I also know that I'm incredibly lucky to have good insurance. I took a screenshot from my insurance app back in December:</p> Err codemadness.org 70 i 445 <p><span Err codemadness.org 70 i 446 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 447 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 448 > Err codemadness.org 70 i 449 <a Err codemadness.org 70 i 450 class="gatsby-resp-image-link" Err codemadness.org 70 i 451 href="/static/b7291d13e21492cbff924ada73137851/c27e7/bill.png" Err codemadness.org 70 i 452 style="display: block" Err codemadness.org 70 i 453 target="_blank" Err codemadness.org 70 i 454 rel="noopener" Err codemadness.org 70 i 455 > Err codemadness.org 70 i 456 <span Err codemadness.org 70 i 457 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 458 style="padding-bottom: 46.62576687116564%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAABKklEQVQoz31Sa1PDIBDk//86P+gnZ3ScmqZNmkdJeEPWO7BMrNab2RwQ2OWWE957OOcyjDEIIWTwmHH7l1JCjLEipZKNi7CeQDmECJEX6aC1tpLymDOL3WLbtl+gVfyMDcITodrdhMmY6Jb3RwrJ/vheqMzF/aa/QpLQ4sPDm+6RCfONjIazBlrrWjbHm3K4uICDdmiMfyhaCfkB5LKgPQ9YFJdtM1kikZO2eGlazMMAOU94ajusZLxyxRImYJuUUvmBeCyyd1RON2kMV4NVFy85Dsrio7+gPzaYuzOeuxEr71cSUkpoQ49HxOM41s4Qnjb4kNBPJuO68mM4rgGR7H2l+YlK/SShd+X+9ToT8qf0VcrYvvuLFRN3AAkeV42W4MiGGEPt1Xsw1xcg+8FrtuDM8QAAAABJRU5ErkJggg=='); background-size: cover; display: block;" Err codemadness.org 70 i 459 ></span> Err codemadness.org 70 i 460 <img Err codemadness.org 70 i 461 class="gatsby-resp-image-image" Err codemadness.org 70 i 462 alt="insurance bill" Err codemadness.org 70 i 463 title="insurance bill" Err codemadness.org 70 i 464 src="/static/b7291d13e21492cbff924ada73137851/a6d36/bill.png" Err codemadness.org 70 i 465 srcset="/static/b7291d13e21492cbff924ada73137851/222b7/bill.png 163w, Err codemadness.org 70 i 466 /static/b7291d13e21492cbff924ada73137851/ff46a/bill.png 325w, Err codemadness.org 70 i 467 /static/b7291d13e21492cbff924ada73137851/a6d36/bill.png 650w, Err codemadness.org 70 i 468 /static/b7291d13e21492cbff924ada73137851/e548f/bill.png 975w, Err codemadness.org 70 i 469 /static/b7291d13e21492cbff924ada73137851/3c492/bill.png 1300w, Err codemadness.org 70 i 470 /static/b7291d13e21492cbff924ada73137851/c27e7/bill.png 2144w" Err codemadness.org 70 i 471 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 472 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 473 loading="lazy" Err codemadness.org 70 i 474 /> Err codemadness.org 70 i 475 </a> Err codemadness.org 70 i 476 </span></p> Err codemadness.org 70 i 477 <p>WTF. That's an insane amount of money. But my life was saved, sooo...? The insurance company even assigned me a nurse to "check in on me" as a resource back in November and December, which sadly was more of a nuisance than anything else. And, then, when my company switched insurance providers at the beginning of 2021, this nurse service stopped abruptly. The whole thing's odd. But I can say again that I am extremely grateful to have had good insurance during my cancer treatment.</p> Err codemadness.org 70 i 478 <h3>Make a new plan</h3> Err codemadness.org 70 i 479 <p>The Signatera is clear, which is great. No circulating tumor cells in my blood. I ask the question, "Doesn't this mean I'm, like, good for life now?" And apparently no. They can't say that. They can only say, "We don't see anything right now." It's the balance sheet of cancer. Just cause things look good right now doesn't mean that next year or next quarter's gonna be the same. Past performance is no indication of future something-something.</p> Err codemadness.org 70 i 480 <p>Oncotype's pretty good, too. From what the doc explains, this test suggests that my tumor has a 12% recurrence rate. This is a low number and I should be happy about it. And I am. But I want it to be zero, obviously. Also, recurrence isn't talking about new polyps growing in my butt and starting cancers -- that can still happen. Recurrence is about whether cells from my now-removed cancer tumor are going rear their awful heads again, somewhere else in my body.</p> Err codemadness.org 70 i 481 <p>It's at this point that we get into the discussion around chemo. There's evidence that chemo can help reduce the recurrence rate even further. My oncology team brings my data to this cool-sounding UCSF "Tumor Board" meeting, and they advise a chemo treatment. The evidence suggests that we can bring down my recurrance rate from 12% to 6%.</p> Err codemadness.org 70 i 482 <p>But they also reiterate that it's my choice. I can say no. As my aforementioned friend said, "You don't do chemo recreationally." In fact, the doctors explain that if I were an old man, they might not advise treatment. But since I'm young and restless, it makes more sense for me to do whatever I can to improve my chances.</p> Err codemadness.org 70 i 483 <p>Duh, let's do this thing.</p> Err codemadness.org 70 i 484 <h2>So, what's chemotherapy like?</h2> Err codemadness.org 70 i 485 <p>Well, first of all, there's all different kinds of chemo. I didn't know that. I'm on a combo colloquially called <a href="https://en.wikipedia.org/wiki/CAPOX">CAPEOX</a> (which I thought sounded a bit like a rival Star Fox gang). It stands for capecitabine (brand name is Xeloda) and oxaliplatin. Cape comes in pills and ox is an IV drip. </p> Err codemadness.org 70 i 486 <p>But wait -- more decisions. Do we do six months or three months of treatment? We review the data from a Japanese study, and we conclude that there's no measurable difference, so we go with 3 months, due to risk of chemo <em>side effects</em>.</p> Err codemadness.org 70 i 487 <h3>Chemo is not a pure function</h3> Err codemadness.org 70 i 488 <p>Chemo has side effects. Here are the things that I've encountered so far:</p> Err codemadness.org 70 i 489 <ul> Err codemadness.org 70 i 490 <li>super cold fingers and toes</li> Err codemadness.org 70 i 491 <li>lockjaw when I start eating</li> Err codemadness.org 70 i 492 <li>clenching claw hands</li> Err codemadness.org 70 i 493 <li>it hurts to cry (and I just finished the last season of Halt and Catch Fire, so yeah..)</li> Err codemadness.org 70 i 494 <li>no appetite, not even for pizza or beer</li> Err codemadness.org 70 i 495 <li>nausea</li> Err codemadness.org 70 i 496 <li>kinda a sad feeling</li> Err codemadness.org 70 i 497 <li>dead sperm(!)</li> Err codemadness.org 70 i 498 </ul> Err codemadness.org 70 i 499 <p>Shockingly, there's no hair loss expected. I'm already in a thinning situation "up there," but it's not supposed to get any worse. A small, dumb part of me thinks that once treatment's over that it might even get better! But this small part is very dumb.</p> Err codemadness.org 70 i 500 <p>Let's talk about the sperm stuff. As a result of doing chemo, there's a good chance that my swimmers are gonna be dead for good. There's also a chance that they can come back. But, if I want to ensure that Carly and I can have the family we want, I need to do sperm banking, quickly! Apparently, there's a ticking clock on starting chemo post-surgery (something like within 8 weeks). So, I've got a week to do as much sperm banking as I can! Fun!</p> Err codemadness.org 70 i 501 <p>The sperm banking process is hilarious. You go to a building, then into a waiting room, then you are led to a tiny little room with a metal door in the wall. When you are done collecting your sample in a cup, you open the door in the wall and put the cup in there, and then press a button, and someone on the other side grabs it. In between that, there's literally a Roku porn subscription and a big TV. I went four times in a week. We got some good stuff collected.</p> Err codemadness.org 70 i 502 <p>Another note on the 3 months vs 6 months decision - there are other potential side effects to chemo that factor into the timing decision. The big one in my case is something called <a href="https://en.wikipedia.org/wiki/Peripheral_neuropathy">neuropathy</a>. Essentially, chemo can potentially cause long-term, life-altering nerve damage. The signs of it often begin with numb feet and hands, which I will admit seem rather easy to confuse with the expected, but not serious symptoms of cold hands and feet. The docs explain that any signs of neuropathy need to be reported immediately and we will halt chemo immediately, because the long-term negative effect of neuropathy far outweighs the gains in any reduction of recurrence rates in my case.</p> Err codemadness.org 70 i 503 <p>Now, given of all that prep and preamble, it's finally time to start chemo!</p> Err codemadness.org 70 i 504 <h2>Charlie the Cyborg</h2> Err codemadness.org 70 i 505 <p>Wait. We need a way to get the chemo into your body. There's two options: a PICC line or a port. In either case, we need a tube that's threaded through your veins directly above your heart. If you go PICC, we gotta thread that in for every single treatment. If you go port, you only do that once, but you get this Tony Stark metal disk thing in your chest. You can guess which one I chose.</p> Err codemadness.org 70 i 506 <p><span Err codemadness.org 70 i 507 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 508 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 509 > Err codemadness.org 70 i 510 <a Err codemadness.org 70 i 511 class="gatsby-resp-image-link" Err codemadness.org 70 i 512 href="/static/326bc664110706ab62928653874483fd/ec605/port.jpg" Err codemadness.org 70 i 513 style="display: block" Err codemadness.org 70 i 514 target="_blank" Err codemadness.org 70 i 515 rel="noopener" Err codemadness.org 70 i 516 > Err codemadness.org 70 i 517 <span Err codemadness.org 70 i 518 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 519 style="padding-bottom: 216.5644171779141%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAArABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAIDBAUB/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAABiOscKQaqNRIiuFxNmIxzeD//xAAeEAACAgEFAQAAAAAAAAAAAAABAgADBBESEyIxMv/aAAgBAQABBQLnM5zBfK0DK9KiXKEbEXrkN2yTq9VqpTa257foq02NDUxJ8U6mf//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQMBAT8BX//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQIBAT8BX//EACAQAAIBAwQDAAAAAAAAAAAAAAABAiExMhARYZEgcoH/2gAIAQEABj8Cui66KtCpfTbgT0j6kVwUPhjPoxmYS8P/xAAfEAEAAgICAgMAAAAAAAAAAAABABEhMRBBYYFxobH/2gAIAQEAAT8hLGqfh4lQbngY8tkWlzS/sJju0C6ZrExSeoIuhXaHfox4ZhNBUEd31S6Leo6aRKXj/9oADAMBAAIAAwAAABDwzA2QD//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQMBAT8QX//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQIBAT8QX//EAB8QAQADAQACAgMAAAAAAAAAAAEAESExQVGx0WFx4f/aAAgBAQABPxCzavm75juFn7fcPRJvg+Y+Igj9dfqJFbEWrYyswoVN+WMGUIm+VDBZmnJefxXd3rKhoYaP7HPcw9R09UDt1rDGRC8vI3UZ8XN2EFWSmQQyHFE14dlHon//2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 520 ></span> Err codemadness.org 70 i 521 <img Err codemadness.org 70 i 522 class="gatsby-resp-image-image" Err codemadness.org 70 i 523 alt="Port" Err codemadness.org 70 i 524 title="Port" Err codemadness.org 70 i 525 src="/static/326bc664110706ab62928653874483fd/6aca1/port.jpg" Err codemadness.org 70 i 526 srcset="/static/326bc664110706ab62928653874483fd/d2f63/port.jpg 163w, Err codemadness.org 70 i 527 /static/326bc664110706ab62928653874483fd/c989d/port.jpg 325w, Err codemadness.org 70 i 528 /static/326bc664110706ab62928653874483fd/6aca1/port.jpg 650w, Err codemadness.org 70 i 529 /static/326bc664110706ab62928653874483fd/7c09c/port.jpg 975w, Err codemadness.org 70 i 530 /static/326bc664110706ab62928653874483fd/ec605/port.jpg 1125w" Err codemadness.org 70 i 531 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 532 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 533 loading="lazy" Err codemadness.org 70 i 534 /> Err codemadness.org 70 i 535 </a> Err codemadness.org 70 i 536 </span></p> Err codemadness.org 70 i 537 <p>Now I have an ID card that explains why metal detectors don't like me anymore.</p> Err codemadness.org 70 i 538 <p><span Err codemadness.org 70 i 539 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 540 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 541 > Err codemadness.org 70 i 542 <a Err codemadness.org 70 i 543 class="gatsby-resp-image-link" Err codemadness.org 70 i 544 href="/static/b331d468b218ca7f228c91db9b47599d/fb7c9/portchest.jpg" Err codemadness.org 70 i 545 style="display: block" Err codemadness.org 70 i 546 target="_blank" Err codemadness.org 70 i 547 rel="noopener" Err codemadness.org 70 i 548 > Err codemadness.org 70 i 549 <span Err codemadness.org 70 i 550 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 551 style="padding-bottom: 133.12883435582822%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAGQAAAwEBAQAAAAAAAAAAAAAAAAIDAQQF/8QAFgEBAQEAAAAAAAAAAAAAAAAAAgAB/9oADAMBAAIQAxAAAAFlrgfCObnpYlC4gV//xAAeEAACAgEFAQAAAAAAAAAAAAABAgARMQMEISIzQv/aAAgBAQABBQKap4oSo6dQBAwcZBq9p5/bZ//EABURAQEAAAAAAAAAAAAAAAAAAAIg/9oACAEDAQE/ATH/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/AR//xAAdEAACAgEFAAAAAAAAAAAAAAAAARAxAhEhIkFx/9oACAEBAAY/AhJ53NanKxtdG8Zez//EABwQAAMAAwADAAAAAAAAAAAAAAABESExQRBhcf/aAAgBAQABPyGEXyNzEQ0OJ36VLB+vtiyTXYW6yhWjoVnc8M9Def/aAAwDAQACAAMAAAAQC9oC/8QAFxEBAQEBAAAAAAAAAAAAAAAAAQAQIf/aAAgBAwEBPxAMsPM//8QAFxEBAQEBAAAAAAAAAAAAAAAAARARIf/aAAgBAgEBPxBSZ2f/xAAdEAEAAwACAwEAAAAAAAAAAAABABEhQVExYXHw/9oACAEBAAE/EDEQRAMio8e4iQDnSyixB3LKhOgKVxsShRFS6r1AQRw/GXc6wvy42Ba25NXflETXxcxV3P/Z'); background-size: cover; display: block;" Err codemadness.org 70 i 552 ></span> Err codemadness.org 70 i 553 <img Err codemadness.org 70 i 554 class="gatsby-resp-image-image" Err codemadness.org 70 i 555 alt="Port Chest" Err codemadness.org 70 i 556 title="Port Chest" Err codemadness.org 70 i 557 src="/static/b331d468b218ca7f228c91db9b47599d/6aca1/portchest.jpg" Err codemadness.org 70 i 558 srcset="/static/b331d468b218ca7f228c91db9b47599d/d2f63/portchest.jpg 163w, Err codemadness.org 70 i 559 /static/b331d468b218ca7f228c91db9b47599d/c989d/portchest.jpg 325w, Err codemadness.org 70 i 560 /static/b331d468b218ca7f228c91db9b47599d/6aca1/portchest.jpg 650w, Err codemadness.org 70 i 561 /static/b331d468b218ca7f228c91db9b47599d/7c09c/portchest.jpg 975w, Err codemadness.org 70 i 562 /static/b331d468b218ca7f228c91db9b47599d/01ab0/portchest.jpg 1300w, Err codemadness.org 70 i 563 /static/b331d468b218ca7f228c91db9b47599d/fb7c9/portchest.jpg 2316w" Err codemadness.org 70 i 564 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 565 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 566 loading="lazy" Err codemadness.org 70 i 567 /> Err codemadness.org 70 i 568 </a> Err codemadness.org 70 i 569 </span></p> Err codemadness.org 70 i 570 <p>Gross and weird, but also cool and weird. With this port, it's a simple little pin prick to get me all connected to the IV stuff. Here I am plugged in.</p> Err codemadness.org 70 i 571 <p><span Err codemadness.org 70 i 572 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 573 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 574 > Err codemadness.org 70 i 575 <a Err codemadness.org 70 i 576 class="gatsby-resp-image-link" Err codemadness.org 70 i 577 href="/static/a2b9526d8bba6f700a5e341eb34f2d35/fb7c9/plugged.jpg" Err codemadness.org 70 i 578 style="display: block" Err codemadness.org 70 i 579 target="_blank" Err codemadness.org 70 i 580 rel="noopener" Err codemadness.org 70 i 581 > Err codemadness.org 70 i 582 <span Err codemadness.org 70 i 583 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 584 style="padding-bottom: 133.12883435582822%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAIEAwH/xAAWAQEBAQAAAAAAAAAAAAAAAAACAQP/2gAMAwEAAhADEAAAAapHypYiBpS+XKQci//EABwQAQACAwADAAAAAAAAAAAAAAEAAgMREiEiMf/aAAgBAQABBQLNT1U5LYo5m8K7lsXnoGlWOmfIHRqf/8QAGBEAAgMAAAAAAAAAAAAAAAAAABEBAhD/2gAIAQMBAT8BiqFjP//EABcRAAMBAAAAAAAAAAAAAAAAAAAQERL/2gAIAQIBAT8B0VQ//8QAHhAAAQMFAQEAAAAAAAAAAAAAAAECERASMUGBMlH/2gAIAQEABj8CJceyyN5NUlqdQuc7hlTgs/af/8QAGxABAQEAAwEBAAAAAAAAAAAAAREAITFBcVH/2gAIAQEAAT8hO6blqR4cs8fc9zfjtoWqlS4kVBnmZtQuIyRTp0YNa/MHQ6wlmyDAOAm//9oADAMBAAIAAwAAABBbw8L/xAAZEQACAwEAAAAAAAAAAAAAAAAAAREhYTH/2gAIAQMBAT8QQ18Mi0kj/8QAGBEAAwEBAAAAAAAAAAAAAAAAAAERYVH/2gAIAQIBAT8QbtaaJwln/8QAHRABAAMBAQEAAwAAAAAAAAAAAQARITFBUXGBkf/aAAgBAQABPxAbZWU/GBPFTNazn4lo/RiVAl4uQHUjj5JMBdqoweQDIRoW0Ba9/s68QYknv2L2J4myoQc3avPJfA7HhB2gFoGp/9k='); background-size: cover; display: block;" Err codemadness.org 70 i 585 ></span> Err codemadness.org 70 i 586 <img Err codemadness.org 70 i 587 class="gatsby-resp-image-image" Err codemadness.org 70 i 588 alt="plugged" Err codemadness.org 70 i 589 title="plugged" Err codemadness.org 70 i 590 src="/static/a2b9526d8bba6f700a5e341eb34f2d35/6aca1/plugged.jpg" Err codemadness.org 70 i 591 srcset="/static/a2b9526d8bba6f700a5e341eb34f2d35/d2f63/plugged.jpg 163w, Err codemadness.org 70 i 592 /static/a2b9526d8bba6f700a5e341eb34f2d35/c989d/plugged.jpg 325w, Err codemadness.org 70 i 593 /static/a2b9526d8bba6f700a5e341eb34f2d35/6aca1/plugged.jpg 650w, Err codemadness.org 70 i 594 /static/a2b9526d8bba6f700a5e341eb34f2d35/7c09c/plugged.jpg 975w, Err codemadness.org 70 i 595 /static/a2b9526d8bba6f700a5e341eb34f2d35/01ab0/plugged.jpg 1300w, Err codemadness.org 70 i 596 /static/a2b9526d8bba6f700a5e341eb34f2d35/fb7c9/plugged.jpg 2316w" Err codemadness.org 70 i 597 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 598 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 599 loading="lazy" Err codemadness.org 70 i 600 /> Err codemadness.org 70 i 601 </a> Err codemadness.org 70 i 602 </span></p> Err codemadness.org 70 i 603 <p>My three week cycle consists of this:</p> Err codemadness.org 70 i 604 <ul> Err codemadness.org 70 i 605 <li>Day One: Ox drip and start taking pills</li> Err codemadness.org 70 i 606 <li>Next 2 weeks: pills 2x a day</li> Err codemadness.org 70 i 607 <li>Third week: Nothing</li> Err codemadness.org 70 i 608 </ul> Err codemadness.org 70 i 609 <p>Then, start over, for 4 times total.</p> Err codemadness.org 70 i 610 <p>The point of the third week is to help your white blood cells recover. The chemo fries them, too. It basically kills anything fast growing in your body (my interpretation!), so your useful blood cells (and sperm and hair etc etc) are impacted. Not a super great thing to happen during a global pandemic, weakening your immune system and all.</p> Err codemadness.org 70 i 611 <p>The drip takes like 2 hours. I usually bring some books and a chicken parm sub and my Nintendo Switch. Here's me after a pee-break:</p> Err codemadness.org 70 i 612 <p><span Err codemadness.org 70 i 613 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 614 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 615 > Err codemadness.org 70 i 616 <a Err codemadness.org 70 i 617 class="gatsby-resp-image-link" Err codemadness.org 70 i 618 href="/static/242e9d3629ee3ccb851bad34bbc33eb5/9568a/bathroom.jpg" Err codemadness.org 70 i 619 style="display: block" Err codemadness.org 70 i 620 target="_blank" Err codemadness.org 70 i 621 rel="noopener" Err codemadness.org 70 i 622 > Err codemadness.org 70 i 623 <span Err codemadness.org 70 i 624 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 625 style="padding-bottom: 133.12883435582822%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAMCBAUB/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/9oADAMBAAIQAxAAAAGw/Lu5tkgGU3RgIOB//8QAHRAAAgICAwEAAAAAAAAAAAAAAQIAAxExBBMhQf/aAAgBAQABBQLxYmCFltp7K3xBOQCz4sIQmJv6d//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQMBAT8BH//EABURAQEAAAAAAAAAAAAAAAAAABAR/9oACAECAQE/AYU//8QAHhAAAgEDBQAAAAAAAAAAAAAAAAEhAhAREiIxQnH/2gAIAQEABj8ClRZmnqYqH6bVKFA88lQ7f//EAB4QAQACAgIDAQAAAAAAAAAAAAEAESFBUWExcYHB/9oACAEBAAE/IVJUBuByUlwVTuZMhwrqIdrxHbIwIpomSMxuHKat+QfRnhvUyVz/2gAMAwEAAgADAAAAENTgjv/EABcRAQEBAQAAAAAAAAAAAAAAAAARASH/2gAIAQMBAT8QuNTqP//EABcRAQEBAQAAAAAAAAAAAAAAAAABEVH/2gAIAQIBAT8Q1EcNf//EACAQAQADAAEDBQAAAAAAAAAAAAEAESExQVFhgZGhwdH/2gAIAQEAAT8QVsFX23wRhNAbt0gAOBxJC+eRXl7zOw1nQUbM25+BizNjpQtks7pRuDcHywoeAfUAcNC3vkcYLVL6RX9bXxP/2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 626 ></span> Err codemadness.org 70 i 627 <img Err codemadness.org 70 i 628 class="gatsby-resp-image-image" Err codemadness.org 70 i 629 alt="bathroom selfie" Err codemadness.org 70 i 630 title="bathroom selfie" Err codemadness.org 70 i 631 src="/static/242e9d3629ee3ccb851bad34bbc33eb5/6aca1/bathroom.jpg" Err codemadness.org 70 i 632 srcset="/static/242e9d3629ee3ccb851bad34bbc33eb5/d2f63/bathroom.jpg 163w, Err codemadness.org 70 i 633 /static/242e9d3629ee3ccb851bad34bbc33eb5/c989d/bathroom.jpg 325w, Err codemadness.org 70 i 634 /static/242e9d3629ee3ccb851bad34bbc33eb5/6aca1/bathroom.jpg 650w, Err codemadness.org 70 i 635 /static/242e9d3629ee3ccb851bad34bbc33eb5/7c09c/bathroom.jpg 975w, Err codemadness.org 70 i 636 /static/242e9d3629ee3ccb851bad34bbc33eb5/01ab0/bathroom.jpg 1300w, Err codemadness.org 70 i 637 /static/242e9d3629ee3ccb851bad34bbc33eb5/9568a/bathroom.jpg 3024w" Err codemadness.org 70 i 638 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 639 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 640 loading="lazy" Err codemadness.org 70 i 641 /> Err codemadness.org 70 i 642 </a> Err codemadness.org 70 i 643 </span></p> Err codemadness.org 70 i 644 <p>I buy this pill box on Amazon, cause why not:</p> Err codemadness.org 70 i 645 <p><span Err codemadness.org 70 i 646 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 647 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 648 > Err codemadness.org 70 i 649 <a Err codemadness.org 70 i 650 class="gatsby-resp-image-link" Err codemadness.org 70 i 651 href="/static/8802dbebea79ef99ab779b12b4d2ce11/9568a/pillbox.jpg" Err codemadness.org 70 i 652 style="display: block" Err codemadness.org 70 i 653 target="_blank" Err codemadness.org 70 i 654 rel="noopener" Err codemadness.org 70 i 655 > Err codemadness.org 70 i 656 <span Err codemadness.org 70 i 657 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 658 style="padding-bottom: 133.12883435582822%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAGQABAAMBAQAAAAAAAAAAAAAAAAEDBAIF/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhADEAAAAdmPOj1XIpuQWJWf/8QAHRAAAgIBBQAAAAAAAAAAAAAAAQIDEQAEEiAhMf/aAAgBAQABBQLzG1PaNazyEmCPebx0vAAorh//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/AR//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/AR//xAAfEAACAQIHAAAAAAAAAAAAAAAAAQIRMRASICEiMlH/2gAIAQEABj8COK2E2qGWyKvqsPRRjbT/AP/EABwQAQADAAIDAAAAAAAAAAAAAAEAESEQUUGh8f/aAAgBAQABPyHBa0EpqL2Ym6NqJ6IeJ93HqKWAdKeyBRiUjwT/2gAMAwEAAgADAAAAEKQIc//EABYRAQEBAAAAAAAAAAAAAAAAABEAEP/aAAgBAwEBPxAxm//EABYRAQEBAAAAAAAAAAAAAAAAAAAREP/aAAgBAgEBPxDIj//EAB4QAQACAgIDAQAAAAAAAAAAAAEAESFBMWEQUaFx/9oACAEBAAE/ELYIFq8EsRPai99RMbNE3jUfD7ny9pLELcX5ZfYwZSB0i1+DqMwPe5Xax1HksE//2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 659 ></span> Err codemadness.org 70 i 660 <img Err codemadness.org 70 i 661 class="gatsby-resp-image-image" Err codemadness.org 70 i 662 alt="pill box" Err codemadness.org 70 i 663 title="pill box" Err codemadness.org 70 i 664 src="/static/8802dbebea79ef99ab779b12b4d2ce11/6aca1/pillbox.jpg" Err codemadness.org 70 i 665 srcset="/static/8802dbebea79ef99ab779b12b4d2ce11/d2f63/pillbox.jpg 163w, Err codemadness.org 70 i 666 /static/8802dbebea79ef99ab779b12b4d2ce11/c989d/pillbox.jpg 325w, Err codemadness.org 70 i 667 /static/8802dbebea79ef99ab779b12b4d2ce11/6aca1/pillbox.jpg 650w, Err codemadness.org 70 i 668 /static/8802dbebea79ef99ab779b12b4d2ce11/7c09c/pillbox.jpg 975w, Err codemadness.org 70 i 669 /static/8802dbebea79ef99ab779b12b4d2ce11/01ab0/pillbox.jpg 1300w, Err codemadness.org 70 i 670 /static/8802dbebea79ef99ab779b12b4d2ce11/9568a/pillbox.jpg 3024w" Err codemadness.org 70 i 671 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 672 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 673 loading="lazy" Err codemadness.org 70 i 674 /> Err codemadness.org 70 i 675 </a> Err codemadness.org 70 i 676 </span></p> Err codemadness.org 70 i 677 <p>This sucker lives in our kitchen counter in plain sight so that I never forget to take my 2x a day sets, and so far, I haven't ever forgotten.</p> Err codemadness.org 70 i 678 <h2>What next?</h2> Err codemadness.org 70 i 679 <p>This has been a long, strange trip of a six-month period. I'm currently in the second week of the third cycle. My third cycle had to be pushed back a week because my white blood cells were too low. I came back the next week, and they were still low, but we decided to proceed, and just dropped my cape dosage from 2000mg to 1500mg (3 pills 2x a day instead of 4 pills 2x a day). In another week, I get to have the glorious "week off" (when I again crave the taste of beer), and then we're back for the fourth and final round.</p> Err codemadness.org 70 i 680 <p>I can't wait for this to be over. I can't wait for this port to be out of my chest. I'm happy that I'm doing everything I can to ensure that I have a long and healthy life. I'm eager to get back on the UCSF Survivorship Clinic plan, and start improving my diet to reduce inflammation (and all this other stuff that's supposed to help prevent cancer).</p> Err codemadness.org 70 i 681 <p>I have learned a lot about cancer and health. My heart breaks when I think about children who've suffered from cancer. My infusion center is the adult center. I'm not sure I could stomach seeing children and babies getting chemo. I'm crying right now even thinking about it (which hurts, if you remember my side effects). Cancer is terrible and it can affect anyone. This is where I re-impart my advice about being your own health advocate. </p> Err codemadness.org 70 i 682 <p>Thanks to Carly and my family and friends and work peeps for your love and support.</p> Err codemadness.org 70 i 683 <p>Fuck cancer. <a href="/create-wonderful-things-be-good-have-fun">Create wonderful things, be good, and have fun.</a></p><![CDATA[Flow and Creative Computing]]>https://www.charlieharrington.com/flow-and-creative-computinghttps://www.charlieharrington.com/flow-and-creative-computingWed, 13 Jan 2021 00:00:00 GMT<p>I recently watched Pixar's SOUL and I loved its depiction of being <em>in the zone</em>:</p> Err codemadness.org 70 i 684 <p><span Err codemadness.org 70 i 685 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 686 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 687 > Err codemadness.org 70 i 688 <span Err codemadness.org 70 i 689 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 690 style="padding-bottom: 74.84662576687117%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAABYlAAAWJQFJUiTwAAAECElEQVQ4yyWU6U9UVxyGL8td5t7ZmBlmY2CYGacOMApDlaFqS0nDNq0DFEVoEIJVxoWKFWVcqkRKrIJLba1AjFJRJK1LW60VSdUuadLYNDVNP/RL0z/l6ZF+OMnJTc5z3vf9vedKqtKBqrRgUhrEasVpHiHoOELcfYRq7wlqfMcJO3fhMXbhUoYwyW3oShpDafv/jNyALndQaB6k0ncFSVXb0NQWNK0Rq9ZJmfVDAZqgMTxHKjzP5ugXrPEeI2gdwasfxix3YVG7MKvvoGsCqjaj5acoMDLUhr56AUyjmzZiEitg7CbtuUlr9B49ZU/YHnvC8cRzOipuUVlyiZD5BHa5V1y8jQLTDqx6j4CmhcOU2G+jJnQPSdNasRqd2MydRGxHaA0t0ht/xkjyL/YnfuNc7T90r15iXeg2NbYJwvJObKYMbmMPLvMAZtMWVDUl7LcTcX+MpOubcJh78Vn7qHRO0rLyR7pivzPc9TepY39wcv2/dJQ/pS6yxAbrOFE5g900SJFlH0XWvSLzd4VKMQdh2yW+SRa9G58tQ7FtgGrHGVrCj2mI/UR/9TNa+5+TSf5Jc3SRisA1Vuv7KVG2CmUHCBaMECnIUmzfh83oQ5PbRba9SE5jO0H7kFh7lhXWF92ipnSBhvB93g4vkY4+Ilk6R9gxxmp1AI+8mULjfQE7TLlzlJjj6LJ1XenGlNeNFLAfJOo4xEpHlgrHWdZ6LlPtm6Y2eIPXQ7dIFn9OyPcRJZZhQnliunIaj3mImGuMhPsMSe85imzDOESuhtyPFHGepMp9mpfdk1S7LhJ1nSFceIqY9wKV/ileck/gsmcxi8nquSmhpF1kt5+E9zz1wXnS4dsCPo7feginNogU905RVzTLG0JJvX+OFc7T+ApGCQiLpc5xiuwfYLW8R76wlJv7JhZRlZB7bBnWXvqQ3fFfaArdJOQ8RcRyHOmVwgVaS26zMXKHxpK7xF0Xlm8rtGVxWrOiTkMoQl1O/iZycttwGDsp81+iKXKf7g0PyCSe0lf+hFUl16gSZ6UNHY9ZU/cr6eLvaCp9IHKZImwcxiUmqpr2Ims7yFF6kPI6ycvbIhpxgKrAdZor7tF2epGNHd/Tv2KJRHCBuH8Wad3AD5SmfyYVfERz+CExzwxxfRSfelA8o90CJoKWBTC/R1SjTwzgAKuKr7I++CW1DQ9o2fItW9fcJRa7gsdzEamx+g7dnXd4q/xrXgt8Q7FrhqR+Hr8yKkCD5IgiS/ILlRlkZReOF110TBILXCZYdp2j2Qk2b7+AtnaWAvenSLWeeV71Xifpv0G8cA6vbYoq7TPxZzmFpBwUoGGhbhhVVCtfz4p3m8ViPSGKfZZg5QyxumlCwU8wEtO4Ylf5Dy0KDrqIrtD+AAAAAElFTkSuQmCC'); background-size: cover; display: block;" Err codemadness.org 70 i 691 ></span> Err codemadness.org 70 i 692 <img Err codemadness.org 70 i 693 class="gatsby-resp-image-image" Err codemadness.org 70 i 694 alt="In the Zone" Err codemadness.org 70 i 695 title="In the Zone" Err codemadness.org 70 i 696 src="/static/0aee6e1c7f7c78355cb80e7835703fca/a6d36/zone.png" Err codemadness.org 70 i 697 srcset="/static/0aee6e1c7f7c78355cb80e7835703fca/222b7/zone.png 163w, Err codemadness.org 70 i 698 /static/0aee6e1c7f7c78355cb80e7835703fca/ff46a/zone.png 325w, Err codemadness.org 70 i 699 /static/0aee6e1c7f7c78355cb80e7835703fca/a6d36/zone.png 650w, Err codemadness.org 70 i 700 /static/0aee6e1c7f7c78355cb80e7835703fca/e548f/zone.png 975w, Err codemadness.org 70 i 701 /static/0aee6e1c7f7c78355cb80e7835703fca/3c492/zone.png 1300w, Err codemadness.org 70 i 702 /static/0aee6e1c7f7c78355cb80e7835703fca/769f8/zone.png 1924w" Err codemadness.org 70 i 703 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 704 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 705 loading="lazy" Err codemadness.org 70 i 706 /> Err codemadness.org 70 i 707 </span></p> Err codemadness.org 70 i 708 <p>This is a beautiful, astrally-projected depiction of Mihaly Csikszentmihalyi's <em>flow</em> concept. For the unfamiliar, here's how Csikszentmihalyi describes flow, or <em>the optimal experience</em>:</p> Err codemadness.org 70 i 709 <blockquote> Err codemadness.org 70 i 710 <p>It is what the sailor holding a tight course feels when the wind whips through her hair, when the boat lunges through the waves like a colt -- sails, hull, wind, and sea humming a harmony that vibrates in the sailor's veins. It is what a painter feels when the colors on the canvas begin to set up a magnetic tension with each other, and a new <em>thing</em>, a living form, takes shape in front of the astonished creator.</p> Err codemadness.org 70 i 711 </blockquote> Err codemadness.org 70 i 712 <p>That sounds pretty good, right? Csikszentmihalyi contends that flow is how we humans can achieve happiness. And it's not something that's given; it's something we have to cultivate and grow and work towards. I cannot recommend his book enough.</p> Err codemadness.org 70 i 713 <p>Even better was SOUL's depiction of the non-flow state - the lost souls:</p> Err codemadness.org 70 i 714 <p><span Err codemadness.org 70 i 715 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 716 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 717 > Err codemadness.org 70 i 718 <span Err codemadness.org 70 i 719 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 720 style="padding-bottom: 41.104294478527606%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAIABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAIF/8QAFgEBAQEAAAAAAAAAAAAAAAAAAgAE/9oADAMBAAIQAxAAAAHEG0yBf//EABUQAQEAAAAAAAAAAAAAAAAAABAh/9oACAEBAAEFAo//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAVEQEBAAAAAAAAAAAAAAAAAAAQEf/aAAgBAgEBPwGn/8QAFBABAAAAAAAAAAAAAAAAAAAAEP/aAAgBAQAGPwJ//8QAFxAAAwEAAAAAAAAAAAAAAAAAABARUf/aAAgBAQABPyGaKv/aAAwDAQACAAMAAAAQiD//xAAWEQEBAQAAAAAAAAAAAAAAAAAAESH/2gAIAQMBAT8Q1X//xAAYEQACAwAAAAAAAAAAAAAAAAAAAREhMf/aAAgBAgEBPxC2KBo//8QAGhAAAwADAQAAAAAAAAAAAAAAAAERMXGB4f/aAAgBAQABPxCGF4iFI7sbd9P/2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 721 ></span> Err codemadness.org 70 i 722 <img Err codemadness.org 70 i 723 class="gatsby-resp-image-image" Err codemadness.org 70 i 724 alt="lost souls" Err codemadness.org 70 i 725 title="lost souls" Err codemadness.org 70 i 726 src="/static/c8e9d78346f3711671078cfd117b81b8/6aca1/lost-souls.jpg" Err codemadness.org 70 i 727 srcset="/static/c8e9d78346f3711671078cfd117b81b8/d2f63/lost-souls.jpg 163w, Err codemadness.org 70 i 728 /static/c8e9d78346f3711671078cfd117b81b8/c989d/lost-souls.jpg 325w, Err codemadness.org 70 i 729 /static/c8e9d78346f3711671078cfd117b81b8/6aca1/lost-souls.jpg 650w, Err codemadness.org 70 i 730 /static/c8e9d78346f3711671078cfd117b81b8/7c09c/lost-souls.jpg 975w, Err codemadness.org 70 i 731 /static/c8e9d78346f3711671078cfd117b81b8/a2510/lost-souls.jpg 1000w" Err codemadness.org 70 i 732 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 733 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 734 loading="lazy" Err codemadness.org 70 i 735 /> Err codemadness.org 70 i 736 </span></p> Err codemadness.org 70 i 737 <p>Definitely been there. Usually its whenever I hear, "Can you see my screen?" These poor creatures wander the astral plane, lost and unhappy and unsure why.</p> Err codemadness.org 70 i 738 <p>Luckily, the movie tells us it's never too late, and I believe them.</p> Err codemadness.org 70 i 739 <p>So, how do we achieve flow?</p> Err codemadness.org 70 i 740 <p>It's the deliberate combination of skill meeting challenge. More from Csikszentmihalyi:</p> Err codemadness.org 70 i 741 <blockquote> Err codemadness.org 70 i 742 <p>The best moments usually occur when a person's body or mind is stretched to its limits in a voluntary effort accomplish something difficult and worthwhile.</p> Err codemadness.org 70 i 743 </blockquote> Err codemadness.org 70 i 744 <p>This post documents a legitimate flow experience I had last week that began with an observation about my podcast addiction.</p> Err codemadness.org 70 i 745 <h2>All My Best Friends are Podcasts</h2> Err codemadness.org 70 i 746 <p>Yes, that's a <a href="https://www.youtube.com/watch?v=Z_63ZZRLylE">Less Than Jake</a> reference. You're welcome, 8th-Grade Charlie.</p> Err codemadness.org 70 i 747 <p>And, if you're at all like 28th-Grade Charlie, then you're also helplessly addicted to podcasts.</p> Err codemadness.org 70 i 748 <p>I listen all the time -- while I'm washing dishes, folding laundry, performing my daily Amazon cardboard box cutting ritual, even taking showers. Carly doesn't understand it, and I certainly can't explain it.</p> Err codemadness.org 70 i 749 <p>Am I that afraid of silence? My own thoughts? Am I so lonely for friendship that I even found this evisceration quietly comforting?</p> Err codemadness.org 70 i 750 <blockquote class="twitter-tweet"><p lang="en" dir="ltr">Podcasts saying literally nothing for 20 minutes. <a href="https://t.co/nmfka1Gjsp">pic.twitter.com/nmfka1Gjsp</a></p>&mdash; Jonathan Ogden (@jogdenUK) <a href="https://twitter.com/jogdenUK/status/1346442437376552962?ref_src=twsrc%5Etfw">January 5, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> Err codemadness.org 70 i 751 <p>I know too much about ancient Rome to be able to answer these questions.</p> Err codemadness.org 70 i 752 <p>So, if I'm just going to accept my Overcast overlords, can I turn the tides on this one-directional relationship?</p> Err codemadness.org 70 i 753 <p>Yes. We can. Enter: the spark of an idea.</p> Err codemadness.org 70 i 754 <h2>Create a podcast from the audio of YouTube videos</h2> Err codemadness.org 70 i 755 <p>If I can't control what my favorite podcast hosts are talking about in any given episode, can I instead choose <em>exactly</em> what I want to listen to? What if there were a virtually unlimited source of content to consume? Surely, I could then be more deliberate in my listening habits.</p> Err codemadness.org 70 i 756 <p>YouTube is our answer. I've been collecting computer science talks and lectures in playlists that I always mean to "watch later" and never do. Fact is, I don't want to watch a YouTube video. I rarely ever sit down and "watch YouTube" (other than The 8-Bit Guy cleaning old VIC-20s). It's not part of my routine. I'm usually moving around too much.</p> Err codemadness.org 70 i 757 <p>YouTube also makes it really hard to consume something "on the go." You need to pay for their PiP or minimized mode, I think.</p> Err codemadness.org 70 i 758 <p>Then I found this <a href="https://benjamincongdon.me/blog/2020/03/02/Creating-a-Podcast-Feed-from-a-YouTube-Playlist/">post by Benjamin Congdon</a>: a simple way to create an audio podcast feed from a YouTube playlist using a <a href="https://amzn.to/3qksZiq">Raspberry Pi</a> home server. His tutorial leverages an open source project called <a href="https://github.com/mxpv/podsync/">PodSync</a>, which itself leverages <code class="language-text">ffmpeg</code> and, everyone's favorite controversy, <code class="language-text">youtube-dl</code>, behind the scenes to download audio from YouTube and generate a podcast RSS feed. This, this, is exactly what I was looking for!</p> Err codemadness.org 70 i 759 <p>Nothing to add here, other than bravo, Benjamin. I was able to follow his tutorial pretty much straight through.</p> Err codemadness.org 70 i 760 <p>Wait, I do have something to add. Benjamin suggests using <code class="language-text">rsync</code> to upload your mp3s and xml RSS feed to s3 or the like. I did this initially, but I didn't like the idea of having to mark these files as <code class="language-text">public</code> on s3 in case of some huge accidental traffic surge.</p> Err codemadness.org 70 i 761 <p>So I came up with another idea:</p> Err codemadness.org 70 i 762 <ul> Err codemadness.org 70 i 763 <li>Create a public repo on GitHub and enable GitHub Pages (mine is <a href="https://github.com/rockswhat/listener">here</a>)</li> Err codemadness.org 70 i 764 <li>Init the repo in your <code class="language-text">/data</code> directory on the Raspberry Pi (this is the directory with the generated <code class="language-text">.xml</code> RSS feed and <code class="language-text">mp3</code> audio files)</li> Err codemadness.org 70 i 765 <li>Change your Podsync config's hostname to your GitHub Pages site: </li> Err codemadness.org 70 i 766 </ul> Err codemadness.org 70 i 767 <div class="gatsby-highlight" data-language="text"><pre class="language-text"><code class="language-text">hostname = &quot;https://rockswhat.github.io/listener&quot;`</code></pre></div> Err codemadness.org 70 i 768 <ul> Err codemadness.org 70 i 769 <li>Change your cron command to push to your repo (instead of <code class="language-text">rsync</code> to s3):</li> Err codemadness.org 70 i 770 </ul> Err codemadness.org 70 i 771 <div class="gatsby-highlight" data-language="text"><pre class="language-text"><code class="language-text">*/15 * * * * cd /home/pi/podsync/data &amp;&amp; git add . &amp;&amp; git commit -m &quot;update feed&quot; &amp;&amp; git push origin main</code></pre></div> Err codemadness.org 70 i 772 <p>Voila! My own podcast feed of YouTube videos, publicly available on the Internet. You can add my feed to Overcast (or your favorite podcast player) with its XML URL:</p> Err codemadness.org 70 i 773 <div class="gatsby-highlight" data-language="text"><pre class="language-text"><code class="language-text">https://rockswhat.github.io/listener/listen_laterz.xml</code></pre></div> Err codemadness.org 70 i 774 <h3>C'mon, you really achieved flow from <em>that</em>?</h3> Err codemadness.org 70 i 775 <p>No, not really, but <em>almost</em>. Tutorials, good ones, at least, are guided paths toward some goal, with micro-feedback and mini-frustrations along the way. And these things are well-suited to flow. They can lead you to flow.</p> Err codemadness.org 70 i 776 <p>In my case, this tutorial got my gears turning. Which now gets us into to the <code class="language-text">creative computing</code> side of this article.</p> Err codemadness.org 70 i 777 <p>I think it's important to remind ourselves to have fun with our computers. To use them to make art, make music, create weird stuff, just because we can. There's so much on our computers and phones now thanks to the Internet that can warp our minds and render us into Lost Souls. We often forget the simple joys of computers of the past, back when they were bicycles for the mind, and used adorable floppy disks or CD-ROM drives for games and encyclopedias. I know there's so much "more" that we can do with computers, but we need to remember that they are here to work for us, and not the other way around.</p> Err codemadness.org 70 i 778 <p>As soon as I saw Overcast fill up with audio from my <code class="language-text">Listen Laterz</code> YouTube playlist, I knew I needed to keep going, to see what else I could render from clay into podcast feeds.</p> Err codemadness.org 70 i 779 <h2>Creating a podcast audiobook from Project Gutenberg e-books</h2> Err codemadness.org 70 i 780 <p>Where else can we find a giant repository of open content on the Internet that also happens to be inconvenient to consume?</p> Err codemadness.org 70 i 781 <p>Hello, <a href="https://www.gutenberg.org/">Project Gutenberg</a>! </p> Err codemadness.org 70 i 782 <p>Project Gutenberg is just about the coolest --- and one of the most important -- things on the internet. The fact that it was <a href="https://en.wikipedia.org/wiki/Project_Gutenberg">started on the ARPANET in 1971</a> blows my mind. That is some creative, forward-thinking from its founder Michael S. Hart.</p> Err codemadness.org 70 i 783 <p>My idea here is simple: pick a public domain book, chop it up into chapters, convert the chapters to audio, and then generate an xml RSS feed.</p> Err codemadness.org 70 i 784 <p>I picked Mary Shelley's <a href="https://www.gutenberg.org/files/84/84-h/84-h.htm">Frankenstein</a>, because, why not? I already read it a few years ago during my October "Spooky Reads" habit, but I figured it's the perfect candidate for re-animation.</p> Err codemadness.org 70 i 785 <p>If you've clicked the link to the text on Project Gutenberg, you'll see it's a plaintext nightmare. I'm not ashamed to admit here that I manually just chopped it up into separate text files, rather than writing a script to somehow do this for me. Whatever, ok?</p> Err codemadness.org 70 i 786 <p>First let's make some files.</p> Err codemadness.org 70 i 787 <div class="gatsby-highlight" data-language="bash"><pre class="language-bash"><code class="language-bash"><span class="token builtin class-name">cd</span> pieces Err codemadness.org 70 i 788 <span class="token function">touch</span> intro.txt Err codemadness.org 70 i 789 <span class="token function">touch</span> letter-<span class="token punctuation">{</span><span class="token number">1</span><span class="token punctuation">..</span><span class="token number">4</span><span class="token punctuation">}</span>.txt Err codemadness.org 70 i 790 <span class="token function">touch</span> chapter-<span class="token punctuation">{</span><span class="token number">1</span><span class="token punctuation">..</span><span class="token number">24</span><span class="token punctuation">}</span>.txt Err codemadness.org 70 i 791 <span class="token function">touch</span> license.txt</code></pre></div> Err codemadness.org 70 i 792 <p>And then we copy-pasta.</p> Err codemadness.org 70 i 793 <p>Now that I've got my chapters (aka future podcast episodes) all set, we're ready to convert them to audio. What's the easiest way I can do that?</p> Err codemadness.org 70 i 794 <p>My "in-the-zone" brain suggests using the terminal's <code class="language-text">say</code> command. I've used this command a few years ago in one of my earliest creative computing projects: a <a href="/terminal-man-live-in-nyc">live musical performance from a telepresence robot</a>).</p> Err codemadness.org 70 i 795 <p>Surely, I can write a neat little script to loop through my text files and <code class="language-text">say</code> them into an <code class="language-text">mp3</code>. Some Googling for <a href="https://stackoverflow.com/questions/16501663/macs-say-command-to-mp3">advice</a>, and I've soon got this Bash script going:</p> Err codemadness.org 70 i 796 <div class="gatsby-highlight" data-language="bash"><pre class="language-bash"><code class="language-bash"><span class="token keyword">for</span> <span class="token for-or-select variable">i</span> <span class="token keyword">in</span> *.txt<span class="token punctuation">;</span> Err codemadness.org 70 i 797 <span class="token keyword">do</span> Err codemadness.org 70 i 798 <span class="token builtin class-name">echo</span> <span class="token string">"processing <span class="token variable">$i</span>..."</span><span class="token punctuation">;</span> Err codemadness.org 70 i 799 <span class="token assign-left variable">name</span><span class="token operator">=</span><span class="token variable"><span class="token variable">$(</span><span class="token builtin class-name">echo</span> <span class="token string">"<span class="token variable">$i</span>"</span> <span class="token operator">|</span> <span class="token function">cut</span> -f <span class="token number">1</span> -d <span class="token string">'.'</span><span class="token variable">)</span></span> Err codemadness.org 70 i 800 say -v Vicki -f <span class="token variable">$i</span> -o aiff/<span class="token variable">$name</span>.aiff Err codemadness.org 70 i 801 lame -m m aiff/<span class="token variable">$name</span>.aiff mp3/<span class="token variable">$name</span>.mp3 Err codemadness.org 70 i 802 <span class="token function">rm</span> aiff/<span class="token variable">$name</span>.aiff Err codemadness.org 70 i 803 <span class="token keyword">done</span></code></pre></div> Err codemadness.org 70 i 804 <p>And it works! Checkpoint reached! The <code class="language-text">mp3</code> files are now sitting happily in their respective <code class="language-text">/mp3</code> folder. I experience a fleeting moment of joy, and then immediately plunge into the next challenge: generating an XML feed.</p> Err codemadness.org 70 i 805 <p>My hack-y brain suggests another copy-pasta. Let's take the feed generated by the Podsync library in the section above, replace pieces of it with Bash variables, and then loop through my text files to jam in the values I want.</p> Err codemadness.org 70 i 806 <p>More googling ensures, including learning a bit more about <a href="https://en.wikipedia.org/wiki/Here_document#:~:text=In%20computing%2C%20a%20here%20document,it%20were%20a%20separate%20file.">heredocs</a>, and I've eventually got this script:</p> Err codemadness.org 70 i 807 <div class="gatsby-highlight" data-language="bash"><pre class="language-bash"><code class="language-bash"><span class="token shebang important">#!/bin/bash</span> Err codemadness.org 70 i 808 Err codemadness.org 70 i 809 <span class="token comment"># edit these to your liking</span> Err codemadness.org 70 i 810 <span class="token assign-left variable">PODCAST_TITLE</span><span class="token operator">=</span><span class="token string">"Castellan - Frankenstein"</span> Err codemadness.org 70 i 811 <span class="token assign-left variable">PODCAST_AUTHOR</span><span class="token operator">=</span><span class="token string">"Castellan"</span> Err codemadness.org 70 i 812 <span class="token assign-left variable">CATEGORY</span><span class="token operator">=</span><span class="token string">"Technology"</span> Err codemadness.org 70 i 813 <span class="token assign-left variable">GENERATOR</span><span class="token operator">=</span><span class="token string">"Castellan"</span> Err codemadness.org 70 i 814 <span class="token assign-left variable">LINK</span><span class="token operator">=</span><span class="token string">"https://whatrocks.github.io/castellan/"</span> Err codemadness.org 70 i 815 <span class="token assign-left variable">IMG</span><span class="token operator">=</span><span class="token string">"https://whatrocks.github.io/castellan/showart.jpg"</span> Err codemadness.org 70 i 816 Err codemadness.org 70 i 817 <span class="token comment"># automatic</span> Err codemadness.org 70 i 818 <span class="token assign-left variable">CURRENT_DATE</span><span class="token operator">=</span><span class="token variable"><span class="token variable">$(</span><span class="token function">date</span> -R<span class="token variable">)</span></span> Err codemadness.org 70 i 819 Err codemadness.org 70 i 820 <span class="token comment"># order</span> Err codemadness.org 70 i 821 <span class="token assign-left variable">EPS</span><span class="token operator">=</span><span class="token punctuation">(</span> Err codemadness.org 70 i 822 intro Err codemadness.org 70 i 823 letter-1 Err codemadness.org 70 i 824 letter-2 Err codemadness.org 70 i 825 letter-3 Err codemadness.org 70 i 826 letter-4 Err codemadness.org 70 i 827 chapter-1 Err codemadness.org 70 i 828 chapter-2 Err codemadness.org 70 i 829 chapter-4 Err codemadness.org 70 i 830 chapter-3 Err codemadness.org 70 i 831 chapter-5 Err codemadness.org 70 i 832 chapter-6 Err codemadness.org 70 i 833 chapter-7 Err codemadness.org 70 i 834 chapter-8 Err codemadness.org 70 i 835 chapter-9 Err codemadness.org 70 i 836 chapter-10 Err codemadness.org 70 i 837 chapter-11 Err codemadness.org 70 i 838 chapter-12 Err codemadness.org 70 i 839 chapter-13 Err codemadness.org 70 i 840 chapter-14 Err codemadness.org 70 i 841 chapter-15 Err codemadness.org 70 i 842 chapter-16 Err codemadness.org 70 i 843 chapter-17 Err codemadness.org 70 i 844 chapter-18 Err codemadness.org 70 i 845 chapter-19 Err codemadness.org 70 i 846 chapter-20 Err codemadness.org 70 i 847 chapter-21 Err codemadness.org 70 i 848 chapter-22 Err codemadness.org 70 i 849 chapter-23 Err codemadness.org 70 i 850 chapter-24 Err codemadness.org 70 i 851 license Err codemadness.org 70 i 852 <span class="token punctuation">)</span> Err codemadness.org 70 i 853 Err codemadness.org 70 i 854 <span class="token builtin class-name">read</span> -d <span class="token string">''</span> feed <span class="token operator">&lt;&lt;</span> <span class="token string">EOF Err codemadness.org 70 i 855 &lt;?xml version="1.0" encoding="UTF-8"?> Err codemadness.org 70 i 856 &lt;rss version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"> Err codemadness.org 70 i 857 &lt;channel> Err codemadness.org 70 i 858 &lt;title><span class="token variable">$PODCAST_TITLE</span>&lt;/title> Err codemadness.org 70 i 859 &lt;link><span class="token variable">$LINK</span>&lt;/link> Err codemadness.org 70 i 860 &lt;description><span class="token variable">$PODCAST_TITLE</span> (<span class="token variable">$CURRENT_DATE</span>)&lt;/description> Err codemadness.org 70 i 861 &lt;category><span class="token variable">$CATEGORY</span>&lt;/category> Err codemadness.org 70 i 862 &lt;generator><span class="token variable">$GENERATOR</span>&lt;/generator> Err codemadness.org 70 i 863 &lt;language>en-us&lt;/language> Err codemadness.org 70 i 864 &lt;lastBuildDate><span class="token variable">$CURRENT_DATE</span>&lt;/lastBuildDate> Err codemadness.org 70 i 865 &lt;pubDate><span class="token variable">$CURRENT_DATE</span>&lt;/pubDate> Err codemadness.org 70 i 866 &lt;itunes:author><span class="token variable">$PODCAST_AUTHOR</span>&lt;/itunes:author> Err codemadness.org 70 i 867 &lt;itunes:subtitle><span class="token variable">$PODCAST_TITLE</span>&lt;/itunes:subtitle> Err codemadness.org 70 i 868 &lt;itunes:summary>&lt;![CDATA[<span class="token variable">$PODCAST_TITLE</span> (<span class="token variable">$CURRENT_DATE</span>)]]>&lt;/itunes:summary> Err codemadness.org 70 i 869 &lt;itunes:image href="<span class="token variable">$IMG</span>"/> Err codemadness.org 70 i 870 &lt;itunes:explicit>no&lt;/itunes:explicit> Err codemadness.org 70 i 871 &lt;itunes:category text="<span class="token variable">$CATEGORY</span>">&lt;/itunes:category> Err codemadness.org 70 i 872 EOF</span> Err codemadness.org 70 i 873 Err codemadness.org 70 i 874 <span class="token builtin class-name">echo</span> <span class="token variable">$feed</span> Err codemadness.org 70 i 875 Err codemadness.org 70 i 876 <span class="token assign-left variable">COUNT</span><span class="token operator">=</span><span class="token number">1</span> Err codemadness.org 70 i 877 <span class="token keyword">for</span> <span class="token for-or-select variable">episode</span> <span class="token keyword">in</span> <span class="token variable">${EPS<span class="token punctuation">[</span>@<span class="token punctuation">]</span>}</span><span class="token punctuation">;</span> <span class="token keyword">do</span> Err codemadness.org 70 i 878 <span class="token builtin class-name">echo</span> <span class="token string">"processing <span class="token variable">$episode</span>..."</span> Err codemadness.org 70 i 879 <span class="token assign-left variable">MP3_FILE</span><span class="token operator">=</span><span class="token string">"book/pieces/mp3/<span class="token variable">$episode</span>.mp3"</span> Err codemadness.org 70 i 880 <span class="token assign-left variable">MP3_SIZE</span><span class="token operator">=</span><span class="token string">"<span class="token variable"><span class="token variable">$(</span><span class="token function">wc</span> -c <span class="token operator">&lt;</span><span class="token string">"<span class="token variable">$MP3_FILE</span>"</span><span class="token variable">)</span></span>"</span> Err codemadness.org 70 i 881 <span class="token assign-left variable">UUID</span><span class="token operator">=</span><span class="token variable"><span class="token variable">$(</span>uuidgen<span class="token variable">)</span></span> Err codemadness.org 70 i 882 <span class="token assign-left variable">NEXT_DATE</span><span class="token operator">=</span><span class="token variable"><span class="token variable">$(</span><span class="token function">date</span> -R<span class="token variable">)</span></span> Err codemadness.org 70 i 883 <span class="token assign-left variable">DURATION</span><span class="token operator">=</span><span class="token string">"<span class="token variable"><span class="token variable">$(</span>ffprobe -show_entries <span class="token assign-left variable">stream</span><span class="token operator">=</span>duration -of <span class="token assign-left variable">compact</span><span class="token operator">=</span>p<span class="token operator">=</span><span class="token number">0</span>:nk<span class="token operator">=</span><span class="token number">1</span> -v fatal $MP3_FILE<span class="token variable">)</span></span>"</span> Err codemadness.org 70 i 884 <span class="token builtin class-name">read</span> -d <span class="token string">''</span> next <span class="token operator">&lt;&lt;</span> <span class="token string">EOF Err codemadness.org 70 i 885 &lt;item> Err codemadness.org 70 i 886 &lt;guid><span class="token variable">$UUID</span>&lt;/guid> Err codemadness.org 70 i 887 &lt;title><span class="token variable">$episode</span>&lt;/title> Err codemadness.org 70 i 888 &lt;link><span class="token variable">$LINK</span><span class="token variable">$MP3_FILE</span>&lt;/link> Err codemadness.org 70 i 889 &lt;description><span class="token variable">$PODCAST_TITLE</span>: <span class="token variable">$episode</span>&lt;/description> Err codemadness.org 70 i 890 &lt;pubDate><span class="token variable">$NEXT_DATE</span>&lt;/pubDate> Err codemadness.org 70 i 891 &lt;enclosure url="<span class="token variable">$LINK</span><span class="token variable">$MP3_FILE</span>" length="<span class="token variable">$MP3_SIZE</span>" type="audio/mpeg">&lt;/enclosure> Err codemadness.org 70 i 892 &lt;itunes:author><span class="token variable">$PODCAST_AUTHOR</span>&lt;/itunes:author> Err codemadness.org 70 i 893 &lt;itunes:subtitle><span class="token variable">$episode</span>&lt;/itunes:subtitle> Err codemadness.org 70 i 894 &lt;itunes:summary>Audio generated from the text of this chapter&lt;/itunes:summary> Err codemadness.org 70 i 895 &lt;itunes:image href="<span class="token variable">$IMG</span>">&lt;/itunes:image> Err codemadness.org 70 i 896 &lt;itunes:duration><span class="token variable">$DURATION</span>&lt;/itunes:duration> Err codemadness.org 70 i 897 &lt;itunes:explicit>no&lt;/itunes:explicit> Err codemadness.org 70 i 898 &lt;itunes:order><span class="token variable">$COUNT</span>&lt;/itunes:order> Err codemadness.org 70 i 899 &lt;/item> Err codemadness.org 70 i 900 EOF</span> Err codemadness.org 70 i 901 <span class="token assign-left variable">feed</span><span class="token operator">=</span><span class="token string">"<span class="token variable">${feed}</span><span class="token variable">${next}</span>"</span> Err codemadness.org 70 i 902 <span class="token assign-left variable">COUNT</span><span class="token operator">=</span><span class="token variable"><span class="token variable">$((</span>COUNT<span class="token operator">+</span><span class="token number">1</span><span class="token variable">))</span></span> Err codemadness.org 70 i 903 <span class="token function">sleep</span> <span class="token number">5</span> Err codemadness.org 70 i 904 <span class="token keyword">done</span> Err codemadness.org 70 i 905 Err codemadness.org 70 i 906 Err codemadness.org 70 i 907 <span class="token assign-left variable">END</span><span class="token operator">=</span><span class="token string">"&lt;/channel>&lt;/rss>"</span> Err codemadness.org 70 i 908 Err codemadness.org 70 i 909 <span class="token builtin class-name">echo</span> <span class="token variable">$feed</span><span class="token variable">$END</span> <span class="token operator">|</span> <span class="token function">tee</span> podcast.xml</code></pre></div> Err codemadness.org 70 i 910 <p>Lots of minor bugs and typos later, and I've got my RSS feed! Is this script hideous? Sure, but it works! I'm having fun and that's all that matters right now. Speaking of fun, I also had to create cover-art, obviously:</p> Err codemadness.org 70 i 911 <p><span Err codemadness.org 70 i 912 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 913 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 914 > Err codemadness.org 70 i 915 <span Err codemadness.org 70 i 916 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 917 style="padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGAABAAMBAAAAAAAAAAAAAAAAAAEDBAL/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAABcTZGEGwFIP/EABwQAQABBAMAAAAAAAAAAAAAAAEAAhIhMQMRQf/aAAgBAQABBQLcRI74rbagZ6PdJmJn/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAGxAAAgEFAAAAAAAAAAAAAAAAAAEQICIxseH/2gAIAQEABj8Ct2dHRhT/AP/EAB0QAAMAAgIDAAAAAAAAAAAAAAABETFBIVFhcaH/2gAIAQEAAT8he+D6E3NyPqEi5Xto0LvofDLySG6ToeHZHqCKP//aAAwDAQACAAMAAAAQdCd+/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPxAf/8QAFREBAQAAAAAAAAAAAAAAAAAAICH/2gAIAQIBAT8Qo//EABoQAQADAQEBAAAAAAAAAAAAAAEAESFBMWH/2gAIAQEAAT8Q3bmhqjz5EUoVrOZ2Jweu3AXNGgu78+S3bhhYp+EK8JXhyZYFLNMenXQKITDs/9k='); background-size: cover; display: block;" Err codemadness.org 70 i 918 ></span> Err codemadness.org 70 i 919 <img Err codemadness.org 70 i 920 class="gatsby-resp-image-image" Err codemadness.org 70 i 921 alt="Cover Art" Err codemadness.org 70 i 922 title="Cover Art" Err codemadness.org 70 i 923 src="/static/9c110a59d1146ed9fc3ad78daa442e0e/6aca1/coverart.jpg" Err codemadness.org 70 i 924 srcset="/static/9c110a59d1146ed9fc3ad78daa442e0e/d2f63/coverart.jpg 163w, Err codemadness.org 70 i 925 /static/9c110a59d1146ed9fc3ad78daa442e0e/c989d/coverart.jpg 325w, Err codemadness.org 70 i 926 /static/9c110a59d1146ed9fc3ad78daa442e0e/6aca1/coverart.jpg 650w, Err codemadness.org 70 i 927 /static/9c110a59d1146ed9fc3ad78daa442e0e/7c09c/coverart.jpg 975w, Err codemadness.org 70 i 928 /static/9c110a59d1146ed9fc3ad78daa442e0e/01ab0/coverart.jpg 1300w, Err codemadness.org 70 i 929 /static/9c110a59d1146ed9fc3ad78daa442e0e/d165a/coverart.jpg 1400w" Err codemadness.org 70 i 930 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 931 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 932 loading="lazy" Err codemadness.org 70 i 933 /> Err codemadness.org 70 i 934 </span></p> Err codemadness.org 70 i 935 <p>Finally, using the same GitHub Pages approach, I upload my stuff and import my Franken-pod into Overcast, like so:</p> Err codemadness.org 70 i 936 <p><span Err codemadness.org 70 i 937 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 938 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 602px; " Err codemadness.org 70 i 939 > Err codemadness.org 70 i 940 <span Err codemadness.org 70 i 941 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 942 style="padding-bottom: 216.5644171779141%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAArABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAQBAgUD/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhADEAAAAdWiPONgUKrTViFhsqhHEaAP/8QAHxABAAEDBAMAAAAAAAAAAAAAAgEAAxEEEBIhExQz/9oACAEBAAEFAleBn2RQcMvKuuK0vxVpc/E6sCRbrO3KM8o2UdDtV//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQMBAT8BX//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQIBAT8BX//EAB4QAAIBBAMBAAAAAAAAAAAAAAABEQIQITEgMoHh/9oACAEBAAY/AocnwmnRVjBhHpU0tnUhrhF27//EAB4QAAICAgIDAAAAAAAAAAAAAAABESExcUFhEFHR/9oACAEBAAE/IWKxoXK2L9bEBsjjI1RJG2PXYfcLdEyfxYqxnLORSTp14a7LOwViFEU+xqHEaMH/2gAMAwEAAgADAAAAEKzDwHAP/8QAFxEAAwEAAAAAAAAAAAAAAAAAARARIP/aAAgBAwEBPxBQ4//EABcRAAMBAAAAAAAAAAAAAAAAABARICH/2gAIAQIBAT8QYyP/xAAdEAEAAwEBAAMBAAAAAAAAAAABABEhMUFRcYHR/9oACAEBAAE/EFZA10n5LNdeaIfaxQojkTtUZKPDz2XakNXR9+5Vmv8AWKsipeOBZtkpay/lX6LyaoCqx6zM1qdgJAtWnYVWRAjV03JemexUuFPL42KQqjlIAKCif//Z'); background-size: cover; display: block;" Err codemadness.org 70 i 943 ></span> Err codemadness.org 70 i 944 <img Err codemadness.org 70 i 945 class="gatsby-resp-image-image" Err codemadness.org 70 i 946 alt="Listen" Err codemadness.org 70 i 947 title="Listen" Err codemadness.org 70 i 948 src="/static/e6c3541f973f230827541a91d1128689/e49d1/listen.jpg" Err codemadness.org 70 i 949 srcset="/static/e6c3541f973f230827541a91d1128689/d2f63/listen.jpg 163w, Err codemadness.org 70 i 950 /static/e6c3541f973f230827541a91d1128689/c989d/listen.jpg 325w, Err codemadness.org 70 i 951 /static/e6c3541f973f230827541a91d1128689/e49d1/listen.jpg 602w" Err codemadness.org 70 i 952 sizes="(max-width: 602px) 100vw, 602px" Err codemadness.org 70 i 953 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 954 loading="lazy" Err codemadness.org 70 i 955 /> Err codemadness.org 70 i 956 </span></p> Err codemadness.org 70 i 957 <p>I decide to call the project <code class="language-text">Castellan</code> because it has the word "cast" in it and it means keeper of a castle or something, and that feels pretty Frankenstein-y to me.</p> Err codemadness.org 70 i 958 <p>Finally, I give it a listen...</p> Err codemadness.org 70 i 959 <p>And it's a horrible monster. Here, I dare you to listen:</p> Err codemadness.org 70 i 960 <audio controls="controls"> Err codemadness.org 70 i 961 <source type="audio/mp3" src="https://whatrocks.github.io/castellan/book/pieces/mp3/chapter-1.mp3"></source> Err codemadness.org 70 i 962 </audio> Err codemadness.org 70 i 963 <p>We've gotta do something about this, cause this thing doesn't sound human at all.</p> Err codemadness.org 70 i 964 <h3>Machine learning to the rescue?</h3> Err codemadness.org 70 i 965 <p>For a brief moment, I escape my zen-like programming mindset, and I go to the orange website and encounter a post about a new text-to-speech deep learning project, and it's damn good. Unfortunately, it's not open source.</p> Err codemadness.org 70 i 966 <p>Surely, there's a good open source text-to-speech project out there. Some more googling, and there is! I find the <code class="language-text">tts</code> project from Mozilla, which deliciously provides a few Google Colab notebooks (aka Jupyter Notebook / Jupyter Lab) with pretrained models ready to go!</p> Err codemadness.org 70 i 967 <p>This is great news. Instead of the <code class="language-text">say</code> command, I'm going to pump my chapters into this trained model and it's going to be awesome.</p> Err codemadness.org 70 i 968 <p>Except the models clip out after three sentences or so. I do some spelunking, and the model is meant to go sentence by sentence, rather than huge swaths of text at once. </p> Err codemadness.org 70 i 969 <p>But that's no problem for me. </p> Err codemadness.org 70 i 970 <p>I'll just split on the <code class="language-text">.</code> period character, generate the audio once sentence at a time, and then concat them all together at the end.</p> Err codemadness.org 70 i 971 <p>Here's a <a href="https://colab.research.google.com/drive/1XpoF6LEU1u9D1H8J4nsvtqNS3Ls58PFs#scrollTo=FuWxZ9Ey5Puj">link to my Colab notebook</a> that you can try yourself. The only things I changed in this notebook are the bottom four or so cells. </p> Err codemadness.org 70 i 972 <p>Here's how I make my machine learning powered audiobook podcast:</p> Err codemadness.org 70 i 973 <ul> Err codemadness.org 70 i 974 <li> Err codemadness.org 70 i 975 <p>Mount my Google Drive, where I've dropped the text files (and I'll store the generated mp3s):</p> Err codemadness.org 70 i 976 <div class="gatsby-highlight" data-language="python"><pre class="language-python"><code class="language-python"><span class="token keyword">from</span> google<span class="token punctuation">.</span>colab <span class="token keyword">import</span> drive Err codemadness.org 70 i 977 drive<span class="token punctuation">.</span>mount<span class="token punctuation">(</span><span class="token string">'/content/gdrive'</span><span class="token punctuation">,</span> force_remount<span class="token operator">=</span><span class="token boolean">True</span><span class="token punctuation">)</span></code></pre></div> Err codemadness.org 70 i 978 </li> Err codemadness.org 70 i 979 <li> Err codemadness.org 70 i 980 <p>Install the <code class="language-text">pydub</code> library to handle audio files</p> Err codemadness.org 70 i 981 <div class="gatsby-highlight" data-language="python"><pre class="language-python"><code class="language-python">!pip install pydub</code></pre></div> Err codemadness.org 70 i 982 </li> Err codemadness.org 70 i 983 <li> Err codemadness.org 70 i 984 <p>Read my text files of the chapters from Google Drive into an array of tuples for processing</p> Err codemadness.org 70 i 985 <div class="gatsby-highlight" data-language="python"><pre class="language-python"><code class="language-python"><span class="token keyword">import</span> os Err codemadness.org 70 i 986 path <span class="token operator">=</span> <span class="token string">'/content/gdrive/My Drive/Castellan/'</span> Err codemadness.org 70 i 987 chapter_path <span class="token operator">=</span> <span class="token string-interpolation"><span class="token string">f'</span><span class="token interpolation"><span class="token punctuation">{</span>path<span class="token punctuation">}</span></span><span class="token string">pieces'</span></span> Err codemadness.org 70 i 988 chapters <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span> Err codemadness.org 70 i 989 <span class="token keyword">for</span> <span class="token builtin">file</span> <span class="token keyword">in</span> os<span class="token punctuation">.</span>listdir<span class="token punctuation">(</span>chapter_path<span class="token punctuation">)</span><span class="token punctuation">:</span> Err codemadness.org 70 i 990 <span class="token keyword">if</span> <span class="token builtin">file</span><span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">4</span><span class="token punctuation">:</span><span class="token punctuation">]</span> <span class="token operator">==</span> <span class="token string">".txt"</span><span class="token punctuation">:</span> Err codemadness.org 70 i 991 <span class="token keyword">with</span> <span class="token builtin">open</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f'</span><span class="token interpolation"><span class="token punctuation">{</span>path<span class="token punctuation">}</span></span><span class="token string">pieces/</span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">file</span><span class="token punctuation">}</span></span><span class="token string">'</span></span><span class="token punctuation">,</span> <span class="token string">'r'</span><span class="token punctuation">)</span> <span class="token keyword">as</span> chapter<span class="token punctuation">:</span> Err codemadness.org 70 i 992 chapter_text <span class="token operator">=</span> chapter<span class="token punctuation">.</span>read<span class="token punctuation">(</span><span class="token punctuation">)</span> Err codemadness.org 70 i 993 name <span class="token operator">=</span> <span class="token builtin">file</span><span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token operator">-</span><span class="token number">4</span><span class="token punctuation">]</span> Err codemadness.org 70 i 994 chapters<span class="token punctuation">.</span>append<span class="token punctuation">(</span><span class="token punctuation">(</span>name<span class="token punctuation">,</span>chapter_text<span class="token punctuation">)</span><span class="token punctuation">)</span></code></pre></div> Err codemadness.org 70 i 995 </li> Err codemadness.org 70 i 996 <li>Loop through the array, split each chapter into sentences, skip weird textual issues like newlines and other nonsense, run each sentence through the <code class="language-text">tts</code> model, concat/reduce that sentence with a accumulating wav file of the entire chapter, and then save the accumulated wav file to an mp3 in Google Drive. Phew! That's a mouthful:</li> Err codemadness.org 70 i 997 </ul> Err codemadness.org 70 i 998 <div class="gatsby-highlight" data-language="python"><pre class="language-python"><code class="language-python"><span class="token keyword">import</span> scipy<span class="token punctuation">.</span>io<span class="token punctuation">.</span>wavfile Err codemadness.org 70 i 999 <span class="token keyword">import</span> uuid Err codemadness.org 70 i 1000 <span class="token keyword">from</span> pydub <span class="token keyword">import</span> AudioSegment<span class="token punctuation">,</span>s Err codemadness.org 70 i 1001 Err codemadness.org 70 i 1002 silence <span class="token operator">=</span> AudioSegment<span class="token punctuation">.</span>silent<span class="token punctuation">(</span>duration<span class="token operator">=</span><span class="token number">500</span><span class="token punctuation">)</span> Err codemadness.org 70 i 1003 <span class="token keyword">for</span> chapter <span class="token keyword">in</span> chapters<span class="token punctuation">:</span> Err codemadness.org 70 i 1004 Err codemadness.org 70 i 1005 <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f'processing chapter </span><span class="token interpolation"><span class="token punctuation">{</span>chapter<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">}</span></span><span class="token string">...'</span></span><span class="token punctuation">)</span> Err codemadness.org 70 i 1006 chapter_audio <span class="token operator">=</span> silence Err codemadness.org 70 i 1007 <span class="token keyword">for</span> sentence <span class="token keyword">in</span> chapter<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token string">'.'</span><span class="token punctuation">)</span><span class="token punctuation">:</span> Err codemadness.org 70 i 1008 Err codemadness.org 70 i 1009 <span class="token comment"># skip these</span> Err codemadness.org 70 i 1010 <span class="token keyword">if</span> sentence <span class="token operator">==</span> <span class="token string">'”\n'</span> <span class="token keyword">or</span> sentence <span class="token operator">==</span> <span class="token string">'\n'</span> <span class="token keyword">or</span> sentence <span class="token operator">==</span> <span class="token string">'\n\n'</span><span class="token punctuation">:</span> Err codemadness.org 70 i 1011 <span class="token keyword">continue</span> Err codemadness.org 70 i 1012 Err codemadness.org 70 i 1013 sentence <span class="token operator">=</span> sentence<span class="token punctuation">.</span>strip<span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">)</span> Err codemadness.org 70 i 1014 Err codemadness.org 70 i 1015 <span class="token comment"># more skips</span> Err codemadness.org 70 i 1016 <span class="token keyword">if</span> <span class="token builtin">len</span><span class="token punctuation">(</span>sentence<span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">0</span> <span class="token keyword">or</span> sentence <span class="token operator">==</span> <span class="token string">''</span><span class="token punctuation">:</span> Err codemadness.org 70 i 1017 <span class="token keyword">continue</span> Err codemadness.org 70 i 1018 Err codemadness.org 70 i 1019 <span class="token comment"># generate wav</span> Err codemadness.org 70 i 1020 align<span class="token punctuation">,</span> spec<span class="token punctuation">,</span> stop_tokens<span class="token punctuation">,</span> wav <span class="token operator">=</span> tts<span class="token punctuation">(</span>model<span class="token punctuation">,</span> sentence<span class="token punctuation">,</span> TTS_CONFIG<span class="token punctuation">,</span> ap<span class="token punctuation">)</span> Err codemadness.org 70 i 1021 Err codemadness.org 70 i 1022 <span class="token comment"># save wav file</span> Err codemadness.org 70 i 1023 wav_unique <span class="token operator">=</span> <span class="token builtin">str</span><span class="token punctuation">(</span>uuid<span class="token punctuation">.</span>uuid4<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> Err codemadness.org 70 i 1024 wav_name <span class="token operator">=</span> <span class="token string-interpolation"><span class="token string">f'</span><span class="token interpolation"><span class="token punctuation">{</span>wav_unique<span class="token punctuation">}</span></span><span class="token string">.wav'</span></span> Err codemadness.org 70 i 1025 wav_path <span class="token operator">=</span> <span class="token string-interpolation"><span class="token string">f'</span><span class="token interpolation"><span class="token punctuation">{</span>path<span class="token punctuation">}</span></span><span class="token string">wav/</span><span class="token interpolation"><span class="token punctuation">{</span>wav_name<span class="token punctuation">}</span></span><span class="token string">'</span></span> Err codemadness.org 70 i 1026 scipy<span class="token punctuation">.</span>io<span class="token punctuation">.</span>wavfile<span class="token punctuation">.</span>write<span class="token punctuation">(</span>wav_path<span class="token punctuation">,</span> TTS_CONFIG<span class="token punctuation">.</span>audio<span class="token punctuation">[</span><span class="token string">'sample_rate'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> wav<span class="token punctuation">)</span> Err codemadness.org 70 i 1027 Err codemadness.org 70 i 1028 <span class="token comment"># read wav file</span> Err codemadness.org 70 i 1029 sound <span class="token operator">=</span> AudioSegment<span class="token punctuation">.</span>from_file<span class="token punctuation">(</span>wav_path<span class="token punctuation">,</span> <span class="token builtin">format</span><span class="token operator">=</span><span class="token string">"wav"</span><span class="token punctuation">)</span> Err codemadness.org 70 i 1030 Err codemadness.org 70 i 1031 <span class="token comment"># combine it</span> Err codemadness.org 70 i 1032 chapter_audio <span class="token operator">+=</span> sound Err codemadness.org 70 i 1033 chapter_audio <span class="token operator">+=</span> silence Err codemadness.org 70 i 1034 Err codemadness.org 70 i 1035 <span class="token comment"># save mp3 file</span> Err codemadness.org 70 i 1036 file_handle <span class="token operator">=</span> chapter_audio<span class="token punctuation">.</span>export<span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"</span><span class="token interpolation"><span class="token punctuation">{</span>path<span class="token punctuation">}</span></span><span class="token string">mp3/</span><span class="token interpolation"><span class="token punctuation">{</span>chapter<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">}</span></span><span class="token string">.mp3"</span></span><span class="token punctuation">,</span> <span class="token builtin">format</span><span class="token operator">=</span><span class="token string">"mp3"</span><span class="token punctuation">)</span> Err codemadness.org 70 i 1037 <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f'done with </span><span class="token interpolation"><span class="token punctuation">{</span>chapter<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">}</span></span><span class="token string">!'</span></span><span class="token punctuation">)</span></code></pre></div> Err codemadness.org 70 i 1038 <p>As you might have guessed, the above cell is the end result of much experimentation. Jupyter Notebooks make this iterative development insanely easy, and I only was able to pull things together like this after I'd figured out each individual piece. Jupyter Notebooks are like REPLs + documentation in one.</p> Err codemadness.org 70 i 1039 <p>Once I had this all set up, I hit <code class="language-text">run all cells</code> and went to sleep. When I woke up, I discovered that about half of my chapters had successfully processed! The only reason it didn't chug through all of them was the Google can randomly preempt your machine at any time, or they have a 12 hour timeout for CPUs. This felt a bit like it must have felt when you feed all your punchcards into the IBM mainframe, and there was some bug halfway through your stack.</p> Err codemadness.org 70 i 1040 <p>No worries, I just removed the already processed chapters from my text files, and re-ran it. I can deal with this annoyance, because this is a toy project. And it's free. And my laptop fan is silent, almost like it's a brand new M1 Macbook, because I'm running this on Google machines.</p> Err codemadness.org 70 i 1041 <p>Want to hear the result?</p> Err codemadness.org 70 i 1042 <audio controls="controls"> Err codemadness.org 70 i 1043 <source type="audio/mp3" src="https://whatrocks.github.io/castellan/book/pieces/bettermp3/chapter-1.mp3"></source> Err codemadness.org 70 i 1044 </audio> Err codemadness.org 70 i 1045 <p>Dang!! That's so much better. Sure, it's still a little weird. But it's actually listen-able now. Thank you, machine learning!</p> Err codemadness.org 70 i 1046 <p>I moved these files from Google Drive onto my local, and then I re-ran my XML generator script, changing the title to "Frankenstein Jr" and referencing the new better mp3s, and then pushed to Github Pages. </p> Err codemadness.org 70 i 1047 <p>Here's a <a href="https://whatrocks.github.io/castellan/podcastjr.xml">link to the podcast feed</a> that you can add to your own player.</p> Err codemadness.org 70 i 1048 <p>Sure, there's still problems. I've encountered these occasional weird sections where the <code class="language-text">tts</code> voice just completely glitches out, perhaps due to the weird encoding of Project Gutenberg files (could be a <code class="language-text">\t</code> character or something). I know that much of machine learning is about "cleaning up your data," so I could probably spend more time doing that, but Frankenstein-ly, I've already flowed onto my next idea.</p> Err codemadness.org 70 i 1049 <h3>Parse a screenplay and create voices for each character</h3> Err codemadness.org 70 i 1050 <p>Wouldn't it be amazing if you could recognize the characters and give them each a unique voice? That's gonna be hard with novels, but you know what's much easier: screenplays! They've got the characters broken out into discrete, named sections, like this:</p> Err codemadness.org 70 i 1051 <div class="gatsby-highlight" data-language="text"><pre class="language-text"><code class="language-text"> PRINCESS Err codemadness.org 70 i 1052 I love you. Err codemadness.org 70 i 1053 Err codemadness.org 70 i 1054 SMUGGLER Err codemadness.org 70 i 1055 I know. Err codemadness.org 70 i 1056 Err codemadness.org 70 i 1057 The smuggler is lowered into the machine. HISSES and SQUEALS. Everyone, including THE BIG BOSS, turns away.</code></pre></div> Err codemadness.org 70 i 1058 <p>I just made this scene up ^, okay?</p> Err codemadness.org 70 i 1059 <p>I could parse a screenplay, then pass each character's lines into a model with a specific voice.</p> Err codemadness.org 70 i 1060 <p>Oh! I know there's sentiment analysis models. What if I first feed the sentences into a sentiment analysis model, and then feed that sentiment into the text-to-speech model.</p> Err codemadness.org 70 i 1061 <p>Now, we're talking...</p> Err codemadness.org 70 i 1062 <p>You can see where this is going. My brain is reeling with possibilities and new directions and new ideas.</p> Err codemadness.org 70 i 1063 <p>This is creative computing. This is why I love programming and its ability to get you into the flow state.</p> Err codemadness.org 70 i 1064 <p>I haven't tackled the screenplay parsing bit yet, but maybe I will. I'm just grateful that I was able to have fun with this project. This is how I want to live my life, being creative, having fun. This is how Csikszentmihalyi describes a life with flow:</p> Err codemadness.org 70 i 1065 <blockquote> Err codemadness.org 70 i 1066 <p>Such individuals lead vigorous lives, are open to a variety of experiences, keep on learning until the day they die, and have strong ties and commitments to other people and to the environment in which they live. They enjoy whatever they do, even if tedious or difficult; they are hardly ever bored, and they can take in stride anything that comes their way.</p> Err codemadness.org 70 i 1067 </blockquote> Err codemadness.org 70 i 1068 <p>I couldn't have put it better myself, obviously. John Cassidy of Klutz Press, <a href="/create-wonderful-things-be-good-have-fun">my favorite publisher</a>, does a great job rephrasing this sentiment, though:</p> Err codemadness.org 70 i 1069 <blockquote> Err codemadness.org 70 i 1070 <p>Create wonderful things, be good, and have fun.</p> Err codemadness.org 70 i 1071 </blockquote> Err codemadness.org 70 i 1072 <h3>P.S. Don't you know about LibriVox, dude?</h3> Err codemadness.org 70 i 1073 <p>Yeah, so there's already a project called <a href="https://librivox.org/">LibriVox</a> that creates audiobooks from public domain texts using real human being voice volunteers. They even provide RSS feeds that you can use in your podcast player. Did I know about this before I went down this rabbit-hole. No! Would it have changed anything no! Maybe? It could have prevented me from exploring ML for this project, and that would have been a bummer. </p> Err codemadness.org 70 i 1074 <p>My takeaway is that your ideas are probably not unique, but that doesn't mean you should explore them and find your own path forward. That's the path to creativity and fun.</p> Err codemadness.org 70 i 1075 <p>Okay, enjoy the feeds!</p><![CDATA[School Supplies]]>https://www.charlieharrington.com/school-supplieshttps://www.charlieharrington.com/school-suppliesMon, 16 Nov 2020 00:00:00 GMT<p>Somedays I remember that I have a <a href="https://amzn.to/2H8SH8O">loop pedal</a>.</p> Err codemadness.org 70 i 1076 <p><span Err codemadness.org 70 i 1077 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 1078 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 1079 > Err codemadness.org 70 i 1080 <a Err codemadness.org 70 i 1081 class="gatsby-resp-image-link" Err codemadness.org 70 i 1082 href="/static/105cc972e126fcbe5ca46d520c2dcad7/8efc2/loop.png" Err codemadness.org 70 i 1083 style="display: block" Err codemadness.org 70 i 1084 target="_blank" Err codemadness.org 70 i 1085 rel="noopener" Err codemadness.org 70 i 1086 > Err codemadness.org 70 i 1087 <span Err codemadness.org 70 i 1088 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 1089 style="padding-bottom: 123.31288343558282%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAZCAYAAAAxFw7TAAAACXBIWXMAABYlAAAWJQFJUiTwAAAGfUlEQVQ4yyWU20+b2RXF/We0UlulapKGXCAhQAw2EBtjjO/Y2P58xcY2NsYGfME22EAwYDB3EiAJGZjMTBLaTjRpm2k6oz6k6kjTt7bqTaMkM2mUahQ1fUgf+/TrSfqw9X06Olp7rbPX2rL5iSRXMnGW8sNsz4xyUCtwb3uGo60yP9mc5GhDlPjeqaW5vpxnfjrHhN/ISj7Mvb05Pru/w42rs8xMp3n4y4+QFRIhyqMRFrNDbJVT3FzMcXulwIeromoTHFTTHCxl2V8YZb1a5Gptmo1ihLmkl6VsiIf3Nnny50f89U+/YntrHlk+5qecDFIZD4uuca6WE+wsFri6UGS3WuBwc4791Rl25lIszabZXi6J/6Q4K7JTzbFxZYzHn3/Iv179ka+f/h5ZJh6klIkxNxFnYUKwXJphb22e3UqaW9UM1xezbFWyzBVGyKZCrC5OcW0+w95qmaP31/jFz/a4sTXLF4/vc/++kJyI+EjFfIwPeylNTVCdKzGXjXIlGyGfDJCJe8gPS5SyMaJhD2PJiGha5MbmFY5ub/Lb3xzx5e8ecHCjRjGfRhYLSSTCEtlM6v8V9zIe85IMOclFJCZjEvmwjdSQl0Q8TNDnIi/uFfJjTBXTTJdyLC6UyWeTOKx6ARh0kUmPMpoIMxK0MxZ2iQYuFkWT9dgA2ZGQYBzn1tIsG5M5yuEAOb+HaY/EgMNMNOQmNujH7/PSo+1GFgkHCQUk/E4DfoeR4aCDeNRDUd/FfHqEjx/+lIyQUsnnWV5dYHKrQK1W5WYkyoBJT7GYYWO9xsr6GqnxcWQeuwGvvYeQZMHnsmLUddF0/iwjTfWMiue4tl1DcrnI5iYolkrkJzNUlze5OTSMQ6ems0OBtrsLg74Xk9mCLOC2EPD2YzH20qm4RLfyIiadkoK2HVW7nOZzDZgNffjTA4yUxKSzaZLLY+wHQ1QmRqjMFqjOz7K2usL8Yg2ZRqOhubkZ5aVGelVyDBoF1i45uwKsYNBRDvhIeyWiLhvzk0U2VtdYXqmyH42QS4aYLYxRmS5QmRHumCkim6vO8Ojnt4QFFjjcnebaVp5bbjP/Vut5aXfzlU3i7z1G/qLo5GmfnX/4/HwbifFE8jExNEAyFiQ/lqAspu6wmZAlh0MsiwTkEi6WJ4dYnBzgjkXLC0eQr2Jpnpi9PLEN8Pz4RZ6Ks6+TeV6MF/nWEeK9KZGcrRlW5nLvLJOIDyLrbjqHTt6Apuks6vqT1J/4Ptunz/K6Q8/TJh3P6tQ8ae/j6WkVzxRGnjv8vAzGeekM8MlygU/vLpHwW7lSGuNvf/gcmdOkxmvpwmdW4zF0YOhV8Km8jTd6N8/1gplK4rncyjNrlG/sYV5EUrwKJ/imz0uoXUlP83m0CgXzJWGtqTFk/QYVDqMKp/EyLgFo1rbxuK2D184w/9T7eGUK8brVypvvNPOfM+28cQ/yX1+ElxoT00EJS1cnVQF2XWTbadIge8vObe7CIxhK5suEtAqWOjoI2ftJSS4KgQCVSIS1cJR9t5+jcIzPEkm+NDkZEVZzmo1imczgsXQTjYaR+QWgx6TCJxg6TJ2kBGBBAF426DFZTBitlnfVJ8xtF/HyDQ7iFCnZ9oUJKTsJuB0Mea1EBkMc3NxB5hbM3kp16hRY9ErSXa0UO1VohOstRhO9PTqMegM2qw2H3YHX48MXGOQgGMUjl6NRd4npRjm8vsG9g2vIfBYhtVeJ1NNKv0Gw626jqNKgNpkxGQRDoxmz2Yq1z4G9X8Lp8uLxhzgUpT11Akn48fbeCh9dX+Hue9vI+jRybN2tSNpWnAYlZSE5pe5GLdgZeg3odQYRPTM2i51+mxOnw43PO8AHgSE0jRfxuyXu7FZ5/9oid/fXBUOnBftbUFULDjGUpS6lANSiFcx0AlRlMtEh5Ldb+1D3O9A6Jcw+AegPY2lvfvcc++tzHG5V+GBXZNnvE/ssMoDfZsAqpFcULXxxsolfH2/k0bFGHvywiaM6JYcNKnaaNawLw6/29PPI6MCgqH/3hkvTedZmcuwtTyNTnj9Fd4ccyWFDctrpsxjp16ixiIVhPN2A41gdUw1KanVyVr57gv1jZ3jwgwZuXmpHefEkncoOseXDxF0mIqJk3S31qJrO0N5wEuX5OjpbLtDe2kxbawstLY2cq6/jVN2POP7jY9SdPcmFi6dpaTyFTnmB1lPfQ9GmwKS5jM3Yg7/fyv8A7LNW1pDPdMIAAAAASUVORK5CYII='); background-size: cover; display: block;" Err codemadness.org 70 i 1090 ></span> Err codemadness.org 70 i 1091 <img Err codemadness.org 70 i 1092 class="gatsby-resp-image-image" Err codemadness.org 70 i 1093 alt="loop pedal" Err codemadness.org 70 i 1094 title="loop pedal" Err codemadness.org 70 i 1095 src="/static/105cc972e126fcbe5ca46d520c2dcad7/a6d36/loop.png" Err codemadness.org 70 i 1096 srcset="/static/105cc972e126fcbe5ca46d520c2dcad7/222b7/loop.png 163w, Err codemadness.org 70 i 1097 /static/105cc972e126fcbe5ca46d520c2dcad7/ff46a/loop.png 325w, Err codemadness.org 70 i 1098 /static/105cc972e126fcbe5ca46d520c2dcad7/a6d36/loop.png 650w, Err codemadness.org 70 i 1099 /static/105cc972e126fcbe5ca46d520c2dcad7/8efc2/loop.png 828w" Err codemadness.org 70 i 1100 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 1101 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 1102 loading="lazy" Err codemadness.org 70 i 1103 /> Err codemadness.org 70 i 1104 </a> Err codemadness.org 70 i 1105 </span></p> Err codemadness.org 70 i 1106 <p>Those are the best sorts of days.</p> Err codemadness.org 70 i 1107 <p>Somedays that leads to a new song.</p> Err codemadness.org 70 i 1108 <h3>A loop pedal is a stack</h3> Err codemadness.org 70 i 1109 <p>A loop pedal is a magical device that lets you record in stacked layers. It's almost like editing something in Figma or Sketch, except each layer is the same "shape" as the first or root layer. And by <em>shape</em> here what I actually mean is <em>length</em>.</p> Err codemadness.org 70 i 1110 <p>Like other guitar pedals, a loop pedal lives somewhere between your guitar (the input) and your amp (the output). It receives the input from your instrument and "does stuff" with it, before sending it onwards. For example, maybe you want to add some <strong>distortion</strong> or <strong>flange</strong> -- OR BOTH. Your guitar pedals are like the world's simplest data flow pipeline. </p> Err codemadness.org 70 i 1111 <div class="gatsby-highlight" data-language="text"><pre class="language-text"><code class="language-text">Guitar -&gt; Distortion Pedal -&gt; Flanger Pedal -&gt; Chorus Pedal -&gt; Amp</code></pre></div> Err codemadness.org 70 i 1112 <p>No cycles or braching in this DAG. I mean, maybe there could branching. Or cycles. I bet some guitarists do that, somehow. But that's beyond my pay grade.</p> Err codemadness.org 70 i 1113 <p>Let's go back to our loop pedal and record something.</p> Err codemadness.org 70 i 1114 <p>Imagine that I tap the loop pedal with my foot, play the following, and tap the pedal again.</p> Err codemadness.org 70 i 1115 <div class="gatsby-highlight" data-language="text"><pre class="language-text"><code class="language-text">X X X X X X X X</code></pre></div> Err codemadness.org 70 i 1116 <p>Each X here might represent one "measure" or "bar" in music theory land, but that's mostly unfamiliar territory for me, too, so instead we can say that we've played the X chord (I wish there was an X chord) 8 times of some fixed duration.</p> Err codemadness.org 70 i 1117 <p>This is now our root layer for our stack.</p> Err codemadness.org 70 i 1118 <p>By default, the pedal will keep "looping" this layer. You can double-tap it to "stop the loop" (maybe you'd do this when you reach a new section of your song, like the chorus).</p> Err codemadness.org 70 i 1119 <p>Otherwise, now it's time to add some more layers. Tap the pedal again and you add the following layer:</p> Err codemadness.org 70 i 1120 <div class="gatsby-highlight" data-language="text"><pre class="language-text"><code class="language-text">X X X X X X X X Err codemadness.org 70 i 1121 y y y y</code></pre></div> Err codemadness.org 70 i 1122 <p>Maybe <code class="language-text">y</code> is an awesome solo or something. Then you do it again.</p> Err codemadness.org 70 i 1123 <div class="gatsby-highlight" data-language="text"><pre class="language-text"><code class="language-text">X X X X X X X X Err codemadness.org 70 i 1124 y y y y Err codemadness.org 70 i 1125 z z z z z z z z</code></pre></div> Err codemadness.org 70 i 1126 <p>Now, this pattern will keep repeating over and over, expanding to the right.</p> Err codemadness.org 70 i 1127 <div class="gatsby-highlight" data-language="text"><pre class="language-text"><code class="language-text">X X X X X X X X X X X X X X X X --&gt; Err codemadness.org 70 i 1128 y y y y y y y y --&gt; Err codemadness.org 70 i 1129 z z z z z z z z z z z z z z z z --&gt;</code></pre></div> Err codemadness.org 70 i 1130 <p>What happens if you are recording a layer that extends longer than the root layer? Good question. The recording simple wraps around to the beginning of the root layer and you can keep going. However you will notice that you are already hearing what you recorded for this layer, so that can sound strange. Let's show an example.</p> Err codemadness.org 70 i 1131 <p>I'm going to add a layer that just plays ascending notes up the guitar neck (a really crappy solo) and have this layer wrap around.</p> Err codemadness.org 70 i 1132 <div class="gatsby-highlight" data-language="text"><pre class="language-text"><code class="language-text">X X X X X X X X Err codemadness.org 70 i 1133 y y y y Err codemadness.org 70 i 1134 z z z z z z z z Err codemadness.org 70 i 1135 1 2 3 4 5 6 7 8</code></pre></div> Err codemadness.org 70 i 1136 <p>So far, so good. Why not keep going...</p> Err codemadness.org 70 i 1137 <div class="gatsby-highlight" data-language="text"><pre class="language-text"><code class="language-text">X X X X X X X X Err codemadness.org 70 i 1138 y y y y Err codemadness.org 70 i 1139 z z z z z z z z Err codemadness.org 70 i 1140 1 2 3 4 5 6 7 8 Err codemadness.org 70 i 1141 9 10</code></pre></div> Err codemadness.org 70 i 1142 <p>As you can see, my latest layer wrapped around to the beginning, such that when I played the <code class="language-text">9</code>, you would hear the <code class="language-text">1</code> at the same time. This may or may not be what you want to do. I'm guessing.. no. Especially if you're playing some epic Type II guitar solo.</p> Err codemadness.org 70 i 1143 <p>Thus, one of the more common use cases of the loop pedal is to lay down some repeatable groove that you can sing various verses or solo over. Instead of making the "unique" or "changable" a layer in your loop stack, you just keep that off to the side.</p> Err codemadness.org 70 i 1144 <p>Reader beware that my loop pedal is relatively simple. There are other, better, more-intense loop pedals where you can have multiple different loop stacks going at the same time. For example, maybe you've got a loop going for the verses and another separate loop stack for the choruses in your song.</p> Err codemadness.org 70 i 1145 <p>But I appreciate the simplicity of my pedal. The one thing I still haven't figured out is whether or not you can do the <code class="language-text">pop</code> stack operation on it. The <a href="https://www.boss.info/us/products/rc-1/">documentation</a> suggests that you can erase the top layer of the stack, but I haven't figured it out yet. For now, I've been living in a <code class="language-text">push</code> only world, flubs included, which you'll hear in the next section.</p> Err codemadness.org 70 i 1146 <h3>School Supplies</h3> Err codemadness.org 70 i 1147 <p>Hello, world, this is your premiere of SCHOOL SUPPLIES, the third single off my forthcoming EP: "Greetings From Buttzville, NJ":</p> Err codemadness.org 70 i 1148 <iframe width="560" height="315" src="https://www.youtube.com/embed/o57rqh88CJY" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> Err codemadness.org 70 i 1149 <p>The chords, for those interested (looking at you, The Grones) are:</p> Err codemadness.org 70 i 1150 <div class="gatsby-highlight" data-language="text"><pre class="language-text"><code class="language-text">Verse Err codemadness.org 70 i 1151 G Bm Em C Err codemadness.org 70 i 1152 Err codemadness.org 70 i 1153 Chorus Err codemadness.org 70 i 1154 D G C Err codemadness.org 70 i 1155 Err codemadness.org 70 i 1156 Outro(key change!) Err codemadness.org 70 i 1157 A C#m F#m D</code></pre></div> Err codemadness.org 70 i 1158 <p>That's right! I pulled off my first key change. Thank you, Taylor Swift "Love Song" for the daily inspiration.</p> Err codemadness.org 70 i 1159 <p>I'll leave the lyrics as an exercise for the reader.</p> Err codemadness.org 70 i 1160 <h4>Uncle Mike's Tips for Running a Zoom-Based Open Mic Night</h4> Err codemadness.org 70 i 1161 <p>Big thanks to Uncle Mike for organizing our second Zoom family open mic night. He runs a tight ship, mostly trying to prevent me from launching into a <a href="/bullet-train-to-merlins-grave">Bullet Train to Merlin's Grave medley like at Popestock</a>.</p> Err codemadness.org 70 i 1162 <p>To paraphrase his tips:</p> Err codemadness.org 70 i 1163 <ul> Err codemadness.org 70 i 1164 <li>Each performer gets one song, of "normal song length" (so that means no Tubular Bells)</li> Err codemadness.org 70 i 1165 <li>Announce the order in advance</li> Err codemadness.org 70 i 1166 <li>Tune up your instrument when you're on deck or in the hole</li> Err codemadness.org 70 i 1167 <li>Don't worry about messing up, start over if you need to, this is fun. Music is the best!</li> Err codemadness.org 70 i 1168 <li>Change your zoom settings to "Original Sound"</li> Err codemadness.org 70 i 1169 </ul> Err codemadness.org 70 i 1170 <p>This last one is key. Zoom does some "stuff" to make things sound "good" during boring work meetings that are boring. It's not optimized for fun singalongs that are fun. So, it's pretty much essential to <a href="https://support.zoom.us/hc/en-us/articles/115003279466-Enabling-option-to-preserve-original-sound">follow these steps</a> when you're singing and strumming over Zoom, unless you're trying to incorporate cosmic waves of hollow nothingness into your jam. Maybe you are?</p> Err codemadness.org 70 i 1171 <p>Oh, you should check out Uncle Mike's music podcast, <a href="https://www.tellyouwhatpodcast.com/">Tell You What! The Podcast</a>. He interviews young musicians and bands on the run and it's fun and great and keeps you on your toes with new upcoming artists.</p> Err codemadness.org 70 i 1172 <p>As Uncle Mike says, music is the best!</p><![CDATA[Unexpected, Useless, and Urgent]]>https://www.charlieharrington.com/unexpected-useless-and-urgenthttps://www.charlieharrington.com/unexpected-useless-and-urgentSun, 25 Oct 2020 00:00:00 GMT<h4>Or, What RSS Gets Right</h4> Err codemadness.org 70 i 1173 <p>Abraham Lincoln once said, "<a href="https://en.wikipedia.org/wiki/Marshall_McLuhan">The medium is the message</a>. And San Francisco summers are cold af."</p> Err codemadness.org 70 i 1174 <p>Putting that aside, I've been thinking a lot (uh-oh) about why I like opening up my RSS reader app so much. And I'm not <em>just</em> talking about its looks, even though it's super cute (I'm using the free, open-source, and all-around neato <a href="https://ranchero.com/netnewswire/">NetNewsWire</a> for my RSS needs).</p> Err codemadness.org 70 i 1175 <p>No, I'm talkin' about them RSS <em>feels</em>.</p> Err codemadness.org 70 i 1176 <p>Why does using opening my RSS inbox feel so much better than typing in gmail.com or tapping the iMessages icon or, heavens forbid, opening up Twitter?</p> Err codemadness.org 70 i 1177 <p>With my sweet-sweet RSS, there's no anxiety. There's no guilt. In our time-tracking Screen Time home screen widget era, there's almost a baccanalian decadance to sifting through an RSS inbox, like watching honey drip from one of those wooden combs in a cereal commercial. Or -- back when we were allowed -- going to the library and reading the newspaper from those weird wooden dowels.</p> Err codemadness.org 70 i 1178 <p>It should go without saying that this feeling does not extend to the other inboxen in my life. And I'd like to understand why -- and see if I can do anything about it.</p> Err codemadness.org 70 i 1179 <h2>A framework for messages</h2> Err codemadness.org 70 i 1180 <p>Butchering some data pipeline terms, let's define an inbox (e.g. email, social media, text messages, RSS, phone calls) as a sink for messages from various data providers, where these messages wait for human-in-the-loop processing (in this case, you).</p> Err codemadness.org 70 i 1181 <p>O! Ye of little time! How are you meant to evaluate the "importance" of a given message? Let's explore that across two vectors: (1) prior awareness of the message's sender and (2) usefulessness of the message contents.</p> Err codemadness.org 70 i 1182 <p><span Err codemadness.org 70 i 1183 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 1184 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 1185 > Err codemadness.org 70 i 1186 <a Err codemadness.org 70 i 1187 class="gatsby-resp-image-link" Err codemadness.org 70 i 1188 href="/static/40108f71e98124d2ba54690789f9cb9e/a1792/msggrid.png" Err codemadness.org 70 i 1189 style="display: block" Err codemadness.org 70 i 1190 target="_blank" Err codemadness.org 70 i 1191 rel="noopener" Err codemadness.org 70 i 1192 > Err codemadness.org 70 i 1193 <span Err codemadness.org 70 i 1194 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 1195 style="padding-bottom: 84.04907975460122%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAYAAADdRIy+AAAACXBIWXMAABYlAAAWJQFJUiTwAAADPklEQVQ4y31US2gbVxSdbdelm24M2bSLdpFNWrLqohQChjaLrLJIGgwt2bilLi3UFIppwUkWMUQLQxaBlOK6DvjTUihqilVZdm3XsiVL8kiaGc3oM5Lmp3+s7+m7N5FxjNw7PN578+6ce+eec5+EETYYDHiQdTodJBIJKIrCs2EY0HUd6XQa0WgUruuefEMmjQI7Pfd6PQYgoGQyiVwuh2w2y4CyLMOyLHS73ZMkpPMyJDs+PkY8HufsyuXySz6O43AgVVVRKpVO3kvnZVYoFDgrLaMhZ+SgqArSShoHBwccQE4l+Z2qaexDGVMC0lmw4ZoyQ1+suwMYZlb8uzgX+729PfT7ffapux7azRavTdNEo14/P0OqT7PRwGer07j8y0eYDTxAp91B5DDK57/+G8LbCzO4sjwHwynBsWxUqlVIBDCM6HkewuEwvGoFhqLjj+hfuDR/BVd/m8BF3/sI61GoSZWJuvb4Hi78/B1en5/CN38uom45sF1nNMv0yHEZMeMI1x99isebi/jc9xW0fAZHRzL7fbg0h3eX7mD8p7v4PrQGL19E2bYgNZtN1hcVlQpeqVT4A1rzr9sKfvx7Edlijvcxqq0wq1HFSjiE0PY/vM8LORHzEjG2vr6OYDAIv9+PSCTCDhsbG9AEg27JQrNSh2s7XPhQKMRBnzWaTEhN1K0q9pubm7BtG1KtVmPkhiCgLliiQUYOBKAXitjdC8MUwI7jYmtri2ttlMzn3aOkUCia2NnZYZGPFDbLJnaItuAq4JvE/tQbWL7/pZBND+lUms/9P8xje/xr+CdmUPMqKIjgnOGQZZpJzFQ7W0RKqaLdYtvYuvkK3G8vwP/xayju+6Hny8ibeTx9uID4+DR+f+82oqtPUbCEdAjwtPYIuN1ui7knukCFXcxj94s3cXhDQnhyDF5BhaZn0ThuITjtwzuvjmHqrQ9Q3o2j6NrwhNCls4IemiJYF82BshaH/GQWlhoBqTURj/F5VTfxya0JrC2v8J4ujepQ2KNaL5fLC5ZFRqKPU0YRclrFoeiSQCDAMkuJPqa6aZkMMmKQ7Fqt1v/fNjT3el30Om10aYhrigaVhS4CAqD14EWnkf0H3WHSUnyUkkQAAAAASUVORK5CYII='); background-size: cover; display: block;" Err codemadness.org 70 i 1196 ></span> Err codemadness.org 70 i 1197 <img Err codemadness.org 70 i 1198 class="gatsby-resp-image-image" Err codemadness.org 70 i 1199 alt="grid" Err codemadness.org 70 i 1200 title="grid" Err codemadness.org 70 i 1201 src="/static/40108f71e98124d2ba54690789f9cb9e/a6d36/msggrid.png" Err codemadness.org 70 i 1202 srcset="/static/40108f71e98124d2ba54690789f9cb9e/222b7/msggrid.png 163w, Err codemadness.org 70 i 1203 /static/40108f71e98124d2ba54690789f9cb9e/ff46a/msggrid.png 325w, Err codemadness.org 70 i 1204 /static/40108f71e98124d2ba54690789f9cb9e/a6d36/msggrid.png 650w, Err codemadness.org 70 i 1205 /static/40108f71e98124d2ba54690789f9cb9e/a1792/msggrid.png 780w" Err codemadness.org 70 i 1206 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 1207 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 1208 loading="lazy" Err codemadness.org 70 i 1209 /> Err codemadness.org 70 i 1210 </a> Err codemadness.org 70 i 1211 </span></p> Err codemadness.org 70 i 1212 <p>The sweet-spot is that upper row: useful messages from both "people we know" and "people we don't know." Whereas if you're in the bottom row, you're gonna have a bad time: useless messages are never... useful.</p> Err codemadness.org 70 i 1213 <h4>Filtering on sender</h4> Err codemadness.org 70 i 1214 <p>The bottom right quadrant is easy to visualize: robo-calls about your non-existent car's expired warranty, social media ads, junk mailers in your meatspace mailbox. </p> Err codemadness.org 70 i 1215 <p>You might think, perhaps, that we can use the "Expected Sender" vs "Unexpected Sender" filter to avoid this quadrant. In fact, this is what Apple allows you to do with the new <a href="https://support.apple.com/en-us/HT207099#:~:text=To%20turn%20on%20Silence%20Unknown,in%20your%20recent%20calls%20list.">Silence Unknown Callers</a> feature in iOS 14 (which doesn't actually prevent the calls, but immediately sends unknown calls to the dead-letter queue that is your voicemailbox).</p> Err codemadness.org 70 i 1216 <p>The problem with this blunt approach of dead-letter queueing the right column is that you're going to miss the serendipity of the upper right quadrant: calls from unexpected sources with useful information. Given <a href="/colon-cancer">my recent cancer diagnosis</a>, I've had tons of important, useful calls from unknown numbers every single day, from doctors and the like -- calls that I want to triage quickly. Sending all calls from unknown numbers straight to voicemail would just be yet another inbox to maintain. Worse, I might miss something important in the upper right quadrant.</p> Err codemadness.org 70 i 1217 <p>A lighter touch approach here is to auto-classify your messages into buckets based on sender. Gmail now does this with their "Primary", "Social", and "Promotion" tabs. Everything's still "in your inbox", but now you can usually just "Select all" on that Promotion tab and safely send those messages straight to the netherworld.</p> Err codemadness.org 70 i 1218 <p>The bottom left quadrant is where your unique lifeforce is slowly chipped away, doomscrolling through your high school classmates' life updates or, gasp, political views. Don't get me wrong -- I really enjoy Instagram and it makes me happy to see people I know doing cool, cute stuff. But I know it can get real bad in this quadrant real quick. Unfollowing and/or muting is key here.</p> Err codemadness.org 70 i 1219 <h4>Filtering on content</h4> Err codemadness.org 70 i 1220 <p>Okay, so, if filtering on sender alone doesn't work, can we use the message contents to figure out if a given message is going to be useful?</p> Err codemadness.org 70 i 1221 <p>We're now talking about <em>pre-processing</em> the messages in our queues.</p> Err codemadness.org 70 i 1222 <p>In the days of future past, you might have employed a staffer to "sort through your office mailbox" to do this. How very Don Draper of you. But in today's era of secure password managers and 2FA, we ideally don't have <em>that many</em> other people in our digital inboxes. The inbox providers are aware of this, and they're starting to provide some tools to help here -- as long as you're okay with them "reading" your messages.</p> Err codemadness.org 70 i 1223 <p>Gmail, for example, has gotten pretty darn good at spam detection. They're "reading your emails" and dropping the bad ones into your "spam folder" dead-letter queue. Maybe, once in a blue moon, they false-positive something that you have to go spelunking into that elephant graveyard to find. But I'm never annoyed by this, because when I see absolute garbage that they've blocked for me day-in and day-out, I'm hashtag grateful again.</p> Err codemadness.org 70 i 1224 <p>This approach, however, isn't possible with all mediums. There's no way to pre-filter on content for an incoming phone-call, for example.</p> Err codemadness.org 70 i 1225 <p>And the tradeoff in pre-filtering on content is, of course, privacy. </p> Err codemadness.org 70 i 1226 <p>If you're down for your inbox provider to "scan" your messages, then they can potentially start to do some smart stuff, like "bubbling up" useful messages or getting rid of bottom row crud.</p> Err codemadness.org 70 i 1227 <p>But, more likely than not, they're also reading them for another purpose.</p> Err codemadness.org 70 i 1228 <h4>The cost of free</h4> Err codemadness.org 70 i 1229 <p>Many of these inbox platforms are free (e.g. social media, Gmail), and someone's gotta pay to keep that spam algorithm ticking. And that someone is you.</p> Err codemadness.org 70 i 1230 <p>Most ads are squarely in the bottom right quadrant. "Good" ads -- I'm talking about those Instagram candles you keep converting on -- are upper right quadrant. The platforms do their darndest to make sure their ads are as upper-right as possible, but they can't guarantee that. YouTube keeps asking me my age because it's genuinely confused as to why my viewing habits fluctuate between watching someone clean old Apple II and VIC-20 computers and the latest Super Mario 3 speed-runs. </p> Err codemadness.org 70 i 1231 <p>And, c'mon, I'd rather just not ever see ads in the first place.</p> Err codemadness.org 70 i 1232 <p>Okay, tough guy. Are you willing to pay for an ad-free inbox then?</p> Err codemadness.org 70 i 1233 <p>Maybe? Ugh. Yes, there's a bunch of new players in the space who are emphasizing privacy and going ad-free. But am I going to willingly add yet another recurring subscription to my life? The Mandalorian is about to come back, and I'm already bracing for the impending Disney+ subscription. </p> Err codemadness.org 70 i 1234 <p>I'll come back to this, because our analysis is still missing two important features.</p> Err codemadness.org 70 i 1235 <h2>A framework for inboxen</h2> Err codemadness.org 70 i 1236 <p>So, far we've only explored the features of an individual message -- not the nature of an inbox itself.</p> Err codemadness.org 70 i 1237 <p>Regardless of an individual message's usefuless or your prior awareness of its sender, an inbox has two other important features that contribute to our mental well-being: (1) typical message volume and (2) expected urgency of triage.</p> Err codemadness.org 70 i 1238 <p><span Err codemadness.org 70 i 1239 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 1240 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 1241 > Err codemadness.org 70 i 1242 <a Err codemadness.org 70 i 1243 class="gatsby-resp-image-link" Err codemadness.org 70 i 1244 href="/static/ed577922c604b352cc74374b10cd9443/2e195/inboxgrid.png" Err codemadness.org 70 i 1245 style="display: block" Err codemadness.org 70 i 1246 target="_blank" Err codemadness.org 70 i 1247 rel="noopener" Err codemadness.org 70 i 1248 > Err codemadness.org 70 i 1249 <span Err codemadness.org 70 i 1250 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 1251 style="padding-bottom: 85.88957055214723%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAYAAADdRIy+AAAACXBIWXMAABYlAAAWJQFJUiTwAAADOklEQVQ4y4VUS2gTURQNLgRdqUs3Iq5diDtLtyIobnSpKG4sKIILCwURFy4UQV34WfgBq2h10YXa4CJItLaVlqTt2MnPyWTSmclnkslMZjL5TZLjuy+mrT964fGYN2/uPfeecyaAf0Sv11vbaXW7Xbiui1qthmazyZfneajX67/dowhsloyi1Wphfn4e0WgUq6uriMfjWFlZgSzLf30b2AyhbdscHSHqdDprdwjtAKXjOPB9f3OEpmkiuhhFLB6DKIrQdR2NRgOWZSGRSECMxZD6kUIymUS1Wu0n3NjaYF4U+XweRsmA59bQsD1UyiY0XUMkEkFGycAwDNRtBx5bdtWGoii8WOBPZIPIZrN8N9wygvEQipbBn5OpJHq/ik6nRXzP9e9RNzSGwEZ0VLVYLPKWVDb8XDGPo69PY+/bIRx7fgqmbUKS0uixed0Nv8P28SvY83gUn1IC6lVCWl1PSJFKpTh7ZbMMXdEQ1QQcuncUVz/dwvDD45iTFpDL6vDqHoafXMf+iRvY93QMlz5PwK84KFXMfsuUlBijNShAgyZ2rwdv41HoGZ5+HIdTd/BDkgBG9s3lEI6/uYPLrx/ho/wddavKZl7qJyQCwuEwpqenOZMUxGrH76DVbCEiR+F6Lj+PMWZJl+j0IGVkFPQcP9dzOZQGCanNYDCI2dlZ3jbFwsIClpYWGaI01JwFSVYgCMv4MDXFBR5ncpF1FWnGuCAIHBBxwBOSOEkO5ACivo9E5LtjFhF//wBp4Rt/llhBnwk8GRWwNBHEXCgMr9lAuVTuI9xICqmd+5OdSWxWtZqLL9cOQzi7BZMXDsLRGSpFheVW8eryDUQOjODt0Dmkl0SmAGu95YGYC4UCQqEQe2FAzxdhKAksj+yAProbyfPboM9NIluoMGHLCD18gRdHRjA+dAaZ4FeYNQeWWVlnmaLdbnOBkmd15opGu4vEyzHEL+6CeOcEPMdGJqMwkntYvP8GO7dux7WT59jMfBhMajXmqv86RVPV/q/KZ57Oq/AabbT9LkRGII2l0fUxOzMDjYmfviQjrFnvX14ms2uahiIbQ7lisXHkOWpCqLJiVJC6KTDJqasqP6POfgJBp9X/o5uBvwAAAABJRU5ErkJggg=='); background-size: cover; display: block;" Err codemadness.org 70 i 1252 ></span> Err codemadness.org 70 i 1253 <img Err codemadness.org 70 i 1254 class="gatsby-resp-image-image" Err codemadness.org 70 i 1255 alt="inbox" Err codemadness.org 70 i 1256 title="inbox" Err codemadness.org 70 i 1257 src="/static/ed577922c604b352cc74374b10cd9443/a6d36/inboxgrid.png" Err codemadness.org 70 i 1258 srcset="/static/ed577922c604b352cc74374b10cd9443/222b7/inboxgrid.png 163w, Err codemadness.org 70 i 1259 /static/ed577922c604b352cc74374b10cd9443/ff46a/inboxgrid.png 325w, Err codemadness.org 70 i 1260 /static/ed577922c604b352cc74374b10cd9443/a6d36/inboxgrid.png 650w, Err codemadness.org 70 i 1261 /static/ed577922c604b352cc74374b10cd9443/2e195/inboxgrid.png 782w" Err codemadness.org 70 i 1262 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 1263 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 1264 loading="lazy" Err codemadness.org 70 i 1265 /> Err codemadness.org 70 i 1266 </a> Err codemadness.org 70 i 1267 </span></p> Err codemadness.org 70 i 1268 <p>The message volume thing is straightforward. Some platforms have a never-ending feed of messages that you can "enjoy," others not so much.</p> Err codemadness.org 70 i 1269 <p>At the same time, each inbox medium connotes a inherent sense of urgency. <strong>The medium is the madness</strong>, if you will. No matter what the message says or who sends it, there's a differentiated inbox-level "urgency punch" to your lizard brain whenever any single message (spam or not) comes flying in.</p> Err codemadness.org 70 i 1270 <p>Let's be more specific with some typical inboxes in our lives:</p> Err codemadness.org 70 i 1271 <p><span Err codemadness.org 70 i 1272 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 1273 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 1274 > Err codemadness.org 70 i 1275 <a Err codemadness.org 70 i 1276 class="gatsby-resp-image-link" Err codemadness.org 70 i 1277 href="/static/f85539e1b1b5e52ca78c881a86f47601/f941f/inboxoverlay.png" Err codemadness.org 70 i 1278 style="display: block" Err codemadness.org 70 i 1279 target="_blank" Err codemadness.org 70 i 1280 rel="noopener" Err codemadness.org 70 i 1281 > Err codemadness.org 70 i 1282 <span Err codemadness.org 70 i 1283 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 1284 style="padding-bottom: 89.57055214723925%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAACXBIWXMAABYlAAAWJQFJUiTwAAADlUlEQVQ4y31US28bVRj1GokdEhtY8gPYgIrYIMEGiQU7FpQNUsWCVqW0AiGhqKJFiiilqDyUPqTQRxTaOE2sFmM7tifxTGOb2NR24pmxPYmfcWqPZ4wfY8dOfLjfNW5wQfmkT3fmzr1nzne+c68N/xODweDJSNnr9dBqtdDpdLC7u8uz2+3y93+vo7AdBjaKfD4PQRAQi8WgaRoSiQTi8ThSqdR/9toOY0YsiB2NlKP5fr+PRqMBy7I4W2JP6w5lOGKWlJN81LRNdBgoBYFsbW3x+XK5jGw2y0E54NOsKNrtNpLJJNSUyjOTTkNRZCQ3NiCKAV5uYn0dsqogqSi89Ewmg1qtNmT4tG6maaK8U+bPLbMJcTWIZSkI37IEn3/5n1IAy6gD3WGp1KBSqXTAkDTY29sbAtZNWM02oloMb8+9j5+ct+B1BWG/70YkvsHXzEdFvDw/iXd+vQhZS/O5MUCiHAqFuB7F7RK6zQ4+XZjAS9dex7G7n+O6fRZufwCh8BqsjoV3r32NF++cxQtXzuDD2R+AvQFyhfwBIOlGAlPoNR1ts4XzS9/hlP1LXBVu4KPpU+h1d6Ftaqwrfbx27wJenf8Gb965gGPCbb6PA47YpZnwI6Pqug6jZqDb7+KSfwrT3hlU6jr/thaNotfuwB4RMfHbDG4u2hFNy6iz9WmGY1NYl1wuFzweDzcsaUndktl8q9lCy/iLgeuoGyY3tccXgC8QQjj0CA+FANweP5Z8IhzOJcTi67AVCgU4nU4Eg0HOcsRwndnCMAyUjQZKegM1sw6V/cQjSHjgFiA+YhaKrMG5IuHq9AzmFn+HksoMSyaWqqo+KblSqfCkUB2Xkbp5BptKApHYBmbv3mMAt/DV8c8wf/wcpj45C39ARPiPCGRZOWjK/v4+bwqdAr1awWPmP2XhItQPbJBPPA/7iSNYuO+CdyUEh3cFzi8uQTlyEstvnUTWHx42hTlkrMuSJHGdTFZqtWbC98sk7N+ehmPqPGa/n8Ci4wEEMQyHywvpxxlcfuMofn7lPfw5NUc+Rz6bG2dI2lHZNQaoV6tIyBkseoO4MeeER4xy49IZblhtrJy7gueeeRaTRz/GgFmsj30U8oXxozcK6jJpmM3l4F7yw+MVID0ModlsgppI0WcZXF3FTq3K3622xb+NXQ7EcnSbFItFruk2OzWPd3awzdgRQ/Is3TKFXJ5XtF0sIcd+THN04/wNCCAG4hCH/UQAAAAASUVORK5CYII='); background-size: cover; display: block;" Err codemadness.org 70 i 1285 ></span> Err codemadness.org 70 i 1286 <img Err codemadness.org 70 i 1287 class="gatsby-resp-image-image" Err codemadness.org 70 i 1288 alt="inbox overlay" Err codemadness.org 70 i 1289 title="inbox overlay" Err codemadness.org 70 i 1290 src="/static/f85539e1b1b5e52ca78c881a86f47601/a6d36/inboxoverlay.png" Err codemadness.org 70 i 1291 srcset="/static/f85539e1b1b5e52ca78c881a86f47601/222b7/inboxoverlay.png 163w, Err codemadness.org 70 i 1292 /static/f85539e1b1b5e52ca78c881a86f47601/ff46a/inboxoverlay.png 325w, Err codemadness.org 70 i 1293 /static/f85539e1b1b5e52ca78c881a86f47601/a6d36/inboxoverlay.png 650w, Err codemadness.org 70 i 1294 /static/f85539e1b1b5e52ca78c881a86f47601/f941f/inboxoverlay.png 736w" Err codemadness.org 70 i 1295 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 1296 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 1297 loading="lazy" Err codemadness.org 70 i 1298 /> Err codemadness.org 70 i 1299 </a> Err codemadness.org 70 i 1300 </span></p> Err codemadness.org 70 i 1301 <p>Phone calls are just about as "urgent" as it gets. Prior to iOS 14, phone calls used to interrupt whatever you were doing, taking up your iPhone's entire screen real estate. Doesn't get more urgent-y than that! Luckily, calls are relatively sparse compared to text messages, which you still need to respond to, but you can "put them on ice" for days at a time with a high-degree of cultural acceptance.</p> Err codemadness.org 70 i 1302 <p>Social media messages are legion in terms of volume. And, while they're not especially urgent from an innate message-level perspective, the platforms do their darndest to "notify" you of "engagement opportunities" to keep you locked-in, so these inboxes fall in the semi-urgent category in my book.</p> Err codemadness.org 70 i 1303 <p>Onto RSS -- my beautiful, dark, twisted RSS. There's truly zero urgency here and relatively few messages (writing blog posts is time-consuming!). Moreover, returning to our message evaluation framework, an RSS inbox only contains messages from known senders, since you've explicitly had to add their RSS feeds to your feed-roll. And, since you've likely done that because you expect to value the contents of their messages, you're likely living in the upper left quadrant in RSS-land, enjoying that drizzled honey and those weird-newspaper rolls.</p> Err codemadness.org 70 i 1304 <p>Email is the real challenge-tunity here.</p> Err codemadness.org 70 i 1305 <h3>Stuck in the Middle With You</h3> Err codemadness.org 70 i 1306 <p>Email is caught in the middle of all these features, both message-level and inbox-level. Anyone can email you at any time with any message, so there's a ton of it, and any message may be useful and/or urgent. That's mostly a good thing, and probably our RFC-writing forerunners wanted it that way.</p> Err codemadness.org 70 i 1307 <p>Thus, we check our email, prodigiously, every single day. All day long. While we're pooping, while we're Zooming, while we're doing any old thing.</p> Err codemadness.org 70 i 1308 <p>Perhaps this is a lens on why newsletters are making a comeback. Email readers are a "captive audience," because we cannot avoid triaging our email inboxes. As long as publishers keep their newsletters top-row-level useful, we'll keep Substacking them. Certainly, the chances of me reading an email newsletter are greater than they would be if I had to visit individual blogs. However, I think my ideal for premium content would be paid RSS feeds, rather than email newsletters, because I want to keep my email inbox clean as possible to aid in my triaging. In fact, this is what many podcasts are now doing (since podcasts are just noisy RSS feeds).</p> Err codemadness.org 70 i 1309 <p>OK, enough about content-monetization (have I mentioned I have a free newsletter below?). How can we make our email inbox <em>feel</em> better? Is it possible to make email feel as good as RSS?</p> Err codemadness.org 70 i 1310 <p>First, we should establish principles-slash-goals for each quadrant in our Conjoined Box of Message Success:</p> Err codemadness.org 70 i 1311 <p><span Err codemadness.org 70 i 1312 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 1313 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 1314 > Err codemadness.org 70 i 1315 <a Err codemadness.org 70 i 1316 class="gatsby-resp-image-link" Err codemadness.org 70 i 1317 href="/static/10539222c9e4e14ed7f74d968fa53c2a/a1792/messageactions.png" Err codemadness.org 70 i 1318 style="display: block" Err codemadness.org 70 i 1319 target="_blank" Err codemadness.org 70 i 1320 rel="noopener" Err codemadness.org 70 i 1321 > Err codemadness.org 70 i 1322 <span Err codemadness.org 70 i 1323 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 1324 style="padding-bottom: 82.82208588957054%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAYAAADdRIy+AAAACXBIWXMAABYlAAAWJQFJUiTwAAACVklEQVQ4y31T2Y7iQAzM/38Sj4MEjDgWhLjv++oEQg5y16YcwpARu5as7nTa7nK5rOGDJUkiTouiCI/HA0EQwPd9hGEoe7rruvL9HqP9TpRbHMeyns9n1Go1tFotfH19YTqdol6vo91uy7nneYX72v/Q8bJt27jf77J/P9/tdjgcDrLyTh6rfUpGZ9B6vRY0RMdgx3Ek+Ha7YbPZYDabYbFY4HK5vB7U8lffkVmWhdFoJAHj8Rij8QiDwQCdTgelUgn9fh/D4RDjyQST1EkD7zFO+80dzTAMmKb5qV8S+MmImnHae5ksia+wEYZuwIs8HM0zLpaC5dmIwkjQ6c4dyr7DfDg4WzeYngt1Ubherz8cMuFqtRJuTqcTdF1HkISoLZtobNpwAxdJnGCUljo3TvizX2CmH/G9nmBlqjThRVBqbHfuuZFkOk3ZBvbmEWEcyaP9lMtPtt/vhSat2+2iXC6jUqmgWq2KUJVSgjKDXlQBm8E1Jk3U35P/V8Jmsym8MGGj0ZBSSW6v15NLorfjQR6gdChuymm5XGI+n0uX2SiKXLrMceKL+QjlJecIw3T0opQOOu/w8Xz0GEv9cc/kHICCsHnA+WSXldKzMsltFKTuyzcRZbXG2fosmZVIU3IN8hXyQ5Ee0lL16w1wFbxlFf76G/6mIfHT2RSB5UC1xzBnW9xXh2LCfwmbmsqmPih0hqOWnScZumcsKSoglM49pcOEbICfonZSChzHlRkm6Rw/rvy200HgMLA6InwJ+z0pjWRvt9tCN/N5pSoobu55xv9UA51xfwHF3BE4LXX2nQAAAABJRU5ErkJggg=='); background-size: cover; display: block;" Err codemadness.org 70 i 1325 ></span> Err codemadness.org 70 i 1326 <img Err codemadness.org 70 i 1327 class="gatsby-resp-image-image" Err codemadness.org 70 i 1328 alt="message actions" Err codemadness.org 70 i 1329 title="message actions" Err codemadness.org 70 i 1330 src="/static/10539222c9e4e14ed7f74d968fa53c2a/a6d36/messageactions.png" Err codemadness.org 70 i 1331 srcset="/static/10539222c9e4e14ed7f74d968fa53c2a/222b7/messageactions.png 163w, Err codemadness.org 70 i 1332 /static/10539222c9e4e14ed7f74d968fa53c2a/ff46a/messageactions.png 325w, Err codemadness.org 70 i 1333 /static/10539222c9e4e14ed7f74d968fa53c2a/a6d36/messageactions.png 650w, Err codemadness.org 70 i 1334 /static/10539222c9e4e14ed7f74d968fa53c2a/a1792/messageactions.png 780w" Err codemadness.org 70 i 1335 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 1336 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 1337 loading="lazy" Err codemadness.org 70 i 1338 /> Err codemadness.org 70 i 1339 </a> Err codemadness.org 70 i 1340 </span></p> Err codemadness.org 70 i 1341 <p>How might we think about upholding these principles in our email inboxes?</p> Err codemadness.org 70 i 1342 <ul> Err codemadness.org 70 i 1343 <li><em>Upper-left</em>: We never want to miss useful emails from people we know. None of our remediation tactics for the bottom row should impact our ability to "avoid missing" these. Got it?</li> Err codemadness.org 70 i 1344 <li><em>Upper-right</em>: This quadrant is kind of a nice-to-have for email. We aren't necessarily "looking" for new emails on a daily basis, but we also don't want to miss that awesome job-opportunity email. We need some way of pre-processing the contents or other features of the email (sender email address, subject line, etc) to bubble these up somehow.</li> Err codemadness.org 70 i 1345 <li><em>Bottom-right</em>: Spam filtering takes the prize here, but that's just table-stakes now. I think that the pre-categorization work of Gmail into Promotions and Social is really helpful, as is the ability to easily unsubscribe from ad-like emails. But the in-line ads of Gmail increase visual thrash, so it's a bit all over the place.</li> Err codemadness.org 70 i 1346 <li><em>Bottom-left</em>: This is less-relevant for email, since we've culturally moved these communications over to Facebook and the like.</li> Err codemadness.org 70 i 1347 </ul> Err codemadness.org 70 i 1348 <p>Hmm, after reviewing message characteristics, email actually seems semi-okay. Most people can easily tell whether an email is going to be useful or not, provided that they take a second to glance it. The problem, then, is volume. Are we going to ensure that we glance at the most useful emails within their respective windows of urgency? </p> Err codemadness.org 70 i 1349 <h2>The medium is the madness</h2> Err codemadness.org 70 i 1350 <p>Maybe we need a faster way to just chug through emails. Power gmail users can't live without their keyboard shortcuts, for example. Or maybe we need better filtering-out of spam-like emails from our favorite clothing providers. Or maybe we need a way to remind us to triage a high-likelihood, potentially-useful email later.</p> Err codemadness.org 70 i 1351 <p>Add up enough of these, and we're building a better imbox. I mean inbox. I do like the idea that companies like Superhuman and Basecamp are innovating in email to try to block and tackle against the useless and steer us towards the useful. I personally haven't made the jump yet. I'm slightly stuck in my Gmail ways now, and I do think that, with a bit more fiddly-work, I can set up my Gmail to reproduce a lot of the most impactful features of Superhuman or hey.com.</p> Err codemadness.org 70 i 1352 <p>I've certainly missed some features in this analysis. But I'm trying to apply these frameworks not just to email, but to all forms on inboxes in my life that require my human-in-the-loop intervention. Something's gotta give, or this is just going to become our full-time job. Cue Slack-message sound.</p> Err codemadness.org 70 i 1353 <p>Email me if you have any other ideas for inbox sanity! Just kidding - send a Tweet, for the love of all things electronic.</p><![CDATA[The Peep-Hole]]>https://www.charlieharrington.com/the-peep-holehttps://www.charlieharrington.com/the-peep-holeThu, 22 Oct 2020 00:00:00 GMT<p>Two weeks ago I woke up at 5 AM on the dot and had this entire creepy dream in my head. I went to the bathroom and scribbled it down while sitting on the toilet before I could forget it. </p> Err codemadness.org 70 i 1354 <p>It being October and all, I thought I'd share this scary story...</p> Err codemadness.org 70 i 1355 <p><span Err codemadness.org 70 i 1356 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 1357 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 1358 > Err codemadness.org 70 i 1359 <a Err codemadness.org 70 i 1360 class="gatsby-resp-image-link" Err codemadness.org 70 i 1361 href="/static/6c61fe51fd42f8edbda8209466e9d038/d438d/yeasayer.png" Err codemadness.org 70 i 1362 style="display: block" Err codemadness.org 70 i 1363 target="_blank" Err codemadness.org 70 i 1364 rel="noopener" Err codemadness.org 70 i 1365 > Err codemadness.org 70 i 1366 <span Err codemadness.org 70 i 1367 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 1368 style="padding-bottom: 52.760736196319016%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAACtklEQVQoz1WQaVtSURRG769QrJwApywTFVFEFHIkMUlUnEpNy0crUxs0xSmcRxAQUBKHUhvsJ6426Jc+rGefe+55197nKFWTQSre7lH2apPSvhWKu5co6phH1+amsHWGQudsYq1zLaLr8VDcv4b+9RaGt17KJwJUTIUxu6NYFmNYl09RLNOyMeHHOLqLQaT6uLTnK0WdInYt3Ii65Lt3mZKBW9kbL0aRVYqsWmTWpRg1q2fUb31HqZ0X+1QI8/j+rXQLvQRLXohYJMXPRdS3in5wg9LhbcpksorJAGYZxCLZGs8J9evn2HYvaPJdoTxZOaF27ug/aZkEDUPyBHHJ0AYGmapsZAfjmA/ThyDVX8I8XohSJ1nb5jl27wWO4BWtkV8oju1znizHqJs7xDp1kLi+6Z1c6c0u5SOCNDDKG1eO+zF/OsA6E6F28RuNqyfYJevYv8AZ+klH9DddsWuUDv8Pnm2dYl8+pkGkNdMhLB+DVE36ExNXSQPLxwBW2a9xR2hYimJfi+HYOaNNsp3hK3qjv+iP/WHw7C/Ky/Al3V75uXFMi+eQpvkwDTMH1E0FqP0cSNT66SA29wFPPUc4N2O49s7oDf5g4PCK17HfjJ7+Yez8molLEQ77jhnYPaZ3I4prJYJzMYRjXsLuIM2zfppnAjg9EVzSsNW9T9vsDj2efV54fAys+Hi17md0J8SYN8z7vRCK0WTFZLFhrm+lytaOSaq5sZ1qezeWludUNrRT19FHU9cQBrMNXYFeKKHwgQ6d8CjvEbqHJbIuovB+AYpWpUKTlIQmORltcpKQnCDrzj2y76aScy+NnNQM8jK05GuyeJCVQ742W6ogNS9TQ256ppAh59JR1CkpqFVCiopM1Q3qOHfuJtCIVJuaRlZaBtnpanIzteSqteSJPIGs43vZIo2f+Qca3NAT8wb3MgAAAABJRU5ErkJggg=='); background-size: cover; display: block;" Err codemadness.org 70 i 1369 ></span> Err codemadness.org 70 i 1370 <img Err codemadness.org 70 i 1371 class="gatsby-resp-image-image" Err codemadness.org 70 i 1372 alt="yeasayer" Err codemadness.org 70 i 1373 title="yeasayer" Err codemadness.org 70 i 1374 src="/static/6c61fe51fd42f8edbda8209466e9d038/a6d36/yeasayer.png" Err codemadness.org 70 i 1375 srcset="/static/6c61fe51fd42f8edbda8209466e9d038/222b7/yeasayer.png 163w, Err codemadness.org 70 i 1376 /static/6c61fe51fd42f8edbda8209466e9d038/ff46a/yeasayer.png 325w, Err codemadness.org 70 i 1377 /static/6c61fe51fd42f8edbda8209466e9d038/a6d36/yeasayer.png 650w, Err codemadness.org 70 i 1378 /static/6c61fe51fd42f8edbda8209466e9d038/e548f/yeasayer.png 975w, Err codemadness.org 70 i 1379 /static/6c61fe51fd42f8edbda8209466e9d038/3c492/yeasayer.png 1300w, Err codemadness.org 70 i 1380 /static/6c61fe51fd42f8edbda8209466e9d038/d438d/yeasayer.png 2290w" Err codemadness.org 70 i 1381 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 1382 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 1383 loading="lazy" Err codemadness.org 70 i 1384 /> Err codemadness.org 70 i 1385 </a> Err codemadness.org 70 i 1386 </span></p> Err codemadness.org 70 i 1387 <p><em>Image source: the <a href="https://www.youtube.com/watch?v=JyBl5ZgnEr4">awesome Yeasayer music video</a> for their song Ambling Alp</em></p> Err codemadness.org 70 i 1388 <h2>The Peep-Hole</h2> Err codemadness.org 70 i 1389 <p>There was peace in the village of Ghir, thanks to the Peep-Hole.</p> Err codemadness.org 70 i 1390 <p>It had been this way for as long as anyone could remember.</p> Err codemadness.org 70 i 1391 <p>"It's better than a thousand kings," said one shop-keeper.</p> Err codemadness.org 70 i 1392 <p>"We're blessed to have the wisdom of our elders at our finger-tips," said another.</p> Err codemadness.org 70 i 1393 <p>Any dispute, conflict, or argument could be brought to the Peep-Hole in the village center. No case or trial would be needed. The Peep-Hole had already seen and heard everything. A voice from the Peep-Hole would utter the Truth, and the matter resolved.</p> Err codemadness.org 70 i 1394 <p>Ori had prepared his whole life to become a Watcher. To be one of the Watchers of the Peep-Hole was Ghir's greatest honor. Only the purest-of-heart and strongest-of-mind were chosen, and only once ever six years.</p> Err codemadness.org 70 i 1395 <p>When Ori was six years old, his mother Cera was Chosen. It was the best day of Ori's life. The honor bestowed upon him was immense. He pledged that day to become a Watcher himself. He would join the Peep-Hole as the youngest Watcher ever, as soon as he came of age.</p> Err codemadness.org 70 i 1396 <p>Everyone in town believed in Ori and thought he would be Chosen.</p> Err codemadness.org 70 i 1397 <p>On the morning of the ritual, Ori woke up and asked the Peep-Hole in his hut for the weather.</p> Err codemadness.org 70 i 1398 <p>"CLEAR AND CALM. LOW TO MID 70'S," replied the Peep-Hole.</p> Err codemadness.org 70 i 1399 <p>Every hut in Ghir had access to the Peep-Hole. Its tubes stretched and tunneled from the village center into their homes. Any question, private or not, could be asked and would be answered by the Peep-Hole.</p> Err codemadness.org 70 i 1400 <p>"Peep-Hole, what does it take to be Chosen as Watcher?" asked Ori.</p> Err codemadness.org 70 i 1401 <p>"ONE MUST BE PURE-OF-HEART, STRONG-OF-MIND, AND BE OF-AGE TO BE CHOSEN."</p> Err codemadness.org 70 i 1402 <p>Ori had heard these words thousands of times before.</p> Err codemadness.org 70 i 1403 <p>"Peep-Hole, will I be Chosen as Watcher today?"</p> Err codemadness.org 70 i 1404 <p>But the Peep-Hole was silent. Fear crept into Ori's heart. He tasted a cold sour in his teeth. Perhaps the ritual has already begun, he worried. Ori put on his finest clothes and raced to the village center.</p> Err codemadness.org 70 i 1405 <p>The entire village of Ghir had already assembled. Ori was late, and the villagers glared at him. Ori took his place in the circle around the Peep-Hole.</p> Err codemadness.org 70 i 1406 <p>The Peep-Hole gurgled and pulsed like liquid mercury. Its tubes flexed like the pulled off limbs of daddy-long-longs. Ori had seen the ritual twice before. He knew that the Peep-Hole would agigate and then announce a name.</p> Err codemadness.org 70 i 1407 <p>"SREN"</p> Err codemadness.org 70 i 1408 <p>The village gasped. Ori felt to the dirt. </p> Err codemadness.org 70 i 1409 <p>A forlorn, meek boy stepped forward. Sren was a farmer's son. He was quiet and unassuming, and, like Ori, had just turned eighteen.</p> Err codemadness.org 70 i 1410 <p>The village watched silently as Sren walked into the rippling quicksilver and disappeared. Before he was gone, he screamed.</p> Err codemadness.org 70 i 1411 <p>Everyone screamed when they entered the Peep-Hole. No one knew why.</p> Err codemadness.org 70 i 1412 <p>The villagers dispersed, but Ori remained. Fig, a younger girl of thirteen, came over to him.</p> Err codemadness.org 70 i 1413 <p>"It's okay, Ori. There's always next ritual."</p> Err codemadness.org 70 i 1414 <p>Ori glanced at her. He heard no kindness in her words. He only saw her as a potential rival.</p> Err codemadness.org 70 i 1415 <p>When he returned home that night, Ori tried using the Peep-Hole again. But it refused to answer him.</p> Err codemadness.org 70 i 1416 <p>Am I being exiled, he wondered. Being cut off from the Peep-Hole was an unimaginable exile. Worse than death. </p> Err codemadness.org 70 i 1417 <p>And Ori wanted to die.</p> Err codemadness.org 70 i 1418 <p>He wandered the village late that night, watching and listening to his fellow villages consult with the Peep-Hole from their fire-lit huts. He went to the town center and spat at the Peep-Hole. His spit fizzled on the liquid metal and evaporated. Ori sat down. He watched the Peep-Hole, watched it shimmer and and pulse. He wondered then, for the first time, where the Peep-Hole had come from. He fell asleep.</p> Err codemadness.org 70 i 1419 <p>His sleep was dreamless, but Ori woke with a new clarity. Last night was the first night ever that he slept somewhere else, other than his hut. Somewhere far from his hut's Peep-Hole tube.</p> Err codemadness.org 70 i 1420 <p>Ori felt powerful and confident.</p> Err codemadness.org 70 i 1421 <p>Later that morning, he called the villagers back to the town center.</p> Err codemadness.org 70 i 1422 <p>"Give it up, Ori," they grumbled.</p> Err codemadness.org 70 i 1423 <p>"You weren't Chosen," they called.</p> Err codemadness.org 70 i 1424 <p>But then they saw what he had done.</p> Err codemadness.org 70 i 1425 <p>Pyres of wood had been stacked around the heptagonal Peep-Hole.</p> Err codemadness.org 70 i 1426 <p>"People of Ghir," said Ori. "For too long we have been under a spell. Today I break that spell. People over Peep-hole!"</p> Err codemadness.org 70 i 1427 <p>All the while, the Peep-Hole was gurgling uncontrollably behind him.</p> Err codemadness.org 70 i 1428 <p>Ori lit a match and threw it into the pyre. Flames encircled the Peep-Hole. The quicksilver melted and slid to the ground, revealing a skeletal structure within.</p> Err codemadness.org 70 i 1429 <p>Screams erupted from the crowd. Everyone vomited. Ori turned his head from the crowd to the Peep-Hole and collapsed again to the dirt, throwing up everywhere.</p> Err codemadness.org 70 i 1430 <p>Inside the Peep-Hole were the Watchers. Or what was left of them. A pale, sickly blob pulsed and writhed from within the geodesic cage. Arms and legs and heads stuck out in all directions from the creature. </p> Err codemadness.org 70 i 1431 <p>Ori couldn't stand the sight -- or smell -- of it burning, so he doused the fires. As the temperature cooled, the mercury reformed around the structure.</p> Err codemadness.org 70 i 1432 <p>"Go," said Ori to the Peep-Hole. "Go and never return. We will lead ourselves."</p> Err codemadness.org 70 i 1433 <p>The Peep-Hole thrummed loudly. It began to move, slowly, snapping off its tube arms one by one. The Peep-Hole slid out of the village center, towards the mountains. Ori watched it disappear into the forests.</p> Err codemadness.org 70 i 1434 <p>The people of Ghir cheered Ori, naming him Hero. </p> Err codemadness.org 70 i 1435 <p>For a while, all was well in the village. But then the disputes resumed. Ori wanted the villagers to settle things themselves, rationally, but he saw that they could not. He tried making rules for them to follow, but the people always found ways to re-interpret his words.</p> Err codemadness.org 70 i 1436 <p>The Hero set up a trial system. The people came before him to argue their case, and Ori did his best to settle their disputes.</p> Err codemadness.org 70 i 1437 <p>But soon the people became clever. They spun their words. Truths became indistinguishable from lies. Lies, truths. It was harder and harder for the Hero to resolve the matters of the village.</p> Err codemadness.org 70 i 1438 <p>More than once as he stood in the town center, Ori caught a glimmer of silver in the corner of his eye, far away on the mountain-tops.</p> Err codemadness.org 70 i 1439 <p>It became too much for the Hero. That day, the people came to the town center and didn't find Ori.</p> Err codemadness.org 70 i 1440 <p>"He's abandoned us, too."</p> Err codemadness.org 70 i 1441 <p>For many days, the villagers retreated to their huts and waited.</p> Err codemadness.org 70 i 1442 <p>Then, one morning, the tubes in their huts were lit. They walked to the town-center.</p> Err codemadness.org 70 i 1443 <p>The Peep-Hole had returned.</p> Err codemadness.org 70 i 1444 <p>Ori was never seen again.</p><![CDATA[Notes on My Colon Cancer]]>https://www.charlieharrington.com/colon-cancerhttps://www.charlieharrington.com/colon-cancerWed, 21 Oct 2020 00:00:00 GMT<p>The giant robot looks like a WED Treadwell, <a href="/robots-i-love">my favorite robot</a> of all the Star Wars droids. I admit, I was worried that it would look organic, like a Sentinel from The Matrix, with wriggling Dr. Octopus arms and pinchy pincers that pinch. But I'm calmed by the robot's EVE-like exterior.</p> Err codemadness.org 70 i 1445 <p>The room is sterile. A dozen masked, gloved attendants in blue buzz. I imagine I'm an astronaut about to step into the rocketship capsule.</p> Err codemadness.org 70 i 1446 <p>Except I won't be going anywhere on this particular journey, unless something goes very, very wrong. In fact, I've already been asked repeatedly by various staffers to describe what I'm expecting to happen in this room over the next few hours:</p> Err codemadness.org 70 i 1447 <blockquote> Err codemadness.org 70 i 1448 <p>"I'm here to remove my sigmoid colon via robotic surgery because of the cancerous tumor inside."</p> Err codemadness.org 70 i 1449 </blockquote> Err codemadness.org 70 i 1450 <p>I'm 34 years old. It's October 12th, 2020. Five weeks ago I was diagnosed with colon cancer.</p> Err codemadness.org 70 i 1451 <h2>Stool, bloody stool</h2> Err codemadness.org 70 i 1452 <p>I've always been a standing wiper. Not sure entirely why. I must have once, accidentally, touched a load of poo during a seated wipe. That sort of thing can change a person.</p> Err codemadness.org 70 i 1453 <p>This charming anecdote does factor into our story, because it means I've always had a pretty good sense for my poo. Consistency, quality, and color, both in the bowl and on the TP. Did you know, there's even a seven-stage scientific classification system for your poo, called the <a href="https://en.wikipedia.org/wiki/Bristol_stool_scale">Bristol stool scale</a>?!</p> Err codemadness.org 70 i 1454 <p><span Err codemadness.org 70 i 1455 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 1456 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 1457 > Err codemadness.org 70 i 1458 <span Err codemadness.org 70 i 1459 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 1460 style="padding-bottom: 53.987730061349694%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAIAAADwazoUAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAB9klEQVQoz0WSSW/TQBiG/ff4EZw5ceZQxIHlBGpVoAKVRYJWoqpaqUiAJeBQgkhiRIA43u3E9tger4lV29kXeG2L8h1G4xk9M+/3jBlLUz6fHp08fzIM/SiKi6Lwfd/zPNsmnkc3m82ff7VcLkVRlCRJUZRer8fzPBNR98v7M/b4MAmDIAzH47FXlVOWu16vgdVHLBYLWZZrWFVVjMwoDG5fv7Z988ZFOiLEybLMNC27KmyHUXQJT6dTkN1ut9VqNZtNBGQosQ4ePnizvxcH1A+COjYhyOxh9KmfJMNRVfP5HLENw8AEB6ELRuh837uz9ejuLcvQkDvPC+pTTdNAIncdwSFE1/XJZIJWsXVpgSGGyn18++3Dqdb7aRMnTVPXdYH1+31gqqbZhAwGJpKjZ47jcPl/2JJ/nz3bfvdyx+B/hFGcZ1mluixKKbrHJ0QARk5YQASsw2sJu4bEvt49P3kRe7bjenme2bal64Zpmq5bOkf+WhhgQRAgrN1uB0FQwo4hHj2+9+r+lqnweBuIsSwbDGBSBh7AkCTJMARPeCq0DdtJkpTw9IIaX5+Kn3ayxIvi4bgo4jgOq8LE9wOEhH+Qq9UKInAWjsBiCeeR0ty/wh1cBayoepqOoITncYEgy4pU/hVyp/MLbUNYo9E4r4pl2dls9hdOiz6ZIoG+hQAAAABJRU5ErkJggg=='); background-size: cover; display: block;" Err codemadness.org 70 i 1461 ></span> Err codemadness.org 70 i 1462 <img Err codemadness.org 70 i 1463 class="gatsby-resp-image-image" Err codemadness.org 70 i 1464 alt="Bristol stool scale" Err codemadness.org 70 i 1465 title="Bristol stool scale" Err codemadness.org 70 i 1466 src="/static/aa89064dc77b216479fbe409ba4b8653/a6d36/bristol.png" Err codemadness.org 70 i 1467 srcset="/static/aa89064dc77b216479fbe409ba4b8653/222b7/bristol.png 163w, Err codemadness.org 70 i 1468 /static/aa89064dc77b216479fbe409ba4b8653/ff46a/bristol.png 325w, Err codemadness.org 70 i 1469 /static/aa89064dc77b216479fbe409ba4b8653/a6d36/bristol.png 650w, Err codemadness.org 70 i 1470 /static/aa89064dc77b216479fbe409ba4b8653/be86f/bristol.png 662w" Err codemadness.org 70 i 1471 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 1472 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 1473 loading="lazy" Err codemadness.org 70 i 1474 /> Err codemadness.org 70 i 1475 </span></p> Err codemadness.org 70 i 1476 <p>I first noticed blood two or three years ago. On a monthly or so cadence, I'd wipe and notice a reddish tinge. Not bright red, more like muddy-red. Poopy-red. Initially, I thought little of it. Just a minor curiousity. It certainly didn't happen every time. Still, I decided to check off the <code class="language-text">Blood in stool</code> box on the forms at my annual physical with my primary care doctor that year.</p> Err codemadness.org 70 i 1477 <p>A brief aside on the phrase "your primary care doctor." Like in <em>Forgetting Sarah Marshall</em>, the last doctor I really thought of as "my doctor" was my pediatrician. Since "becoming an adult", I've lived in three cities in two countries, which means that I've generally had no idea who my primary care doctor is or was, only that I'd need to find one to give me a referral to get this wart on my foot removed.</p> Err codemadness.org 70 i 1478 <p><span Err codemadness.org 70 i 1479 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 1480 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 1481 > Err codemadness.org 70 i 1482 <span Err codemadness.org 70 i 1483 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 1484 style="padding-bottom: 56.44171779141104%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAIAAADwazoUAAAACXBIWXMAAAsTAAALEwEAmpwYAAACeElEQVQozw3QyXLSAACA4ZQdZKcVCxa6UKAIAYxlpyE7JITsCQmyFqh0irW0M9WLh1odx6sHT53x4nvaF/hnvh8oZLN0V5ovrxiMQCpVjmx3kFa1UKhBUPO0RMEISxBUq9VGcJagGZRQBWU4GI/H5/pgCrA99fbuy+O3H4YgCWS7+5yA8v02brC0SlM8jijU2VgmB6I01CYGR081bjVfra82Hy5vAI5XNFEeqarM9qSuUM/n64m42uNkTuxS7U61jIK59ypr8KIu6DLT1Hh4MhjNxrPRaApcf7p7/PFzubhgCLKUK4AHiUo6iddrfZ6nUaRLMaI4W1zc9HlF7ck8UZOZs3F/0CUoTTOAzfXtn6e/D99/9SU17Au4TDafzVlOp5a6PhsvadYQjfVssZEYgW8zDFrhyYYuKrqkyaICLOaX5/PV5vpuvVr7nW4bYHFtWTLR3T5N0mdNtNLoDz/29XMao2gEfV5K4hWOIBSWf0YBGIwZsvb56+Pvp38EgiWCgVgoHPEFoGQSzII7Hs8p1FSUCVpv4k24VQYpGOoSGNvrNXAEaFUb0xa8JPGH+/vJcBp2e2PBbbPJYTfZwdSx2+Eq5suioLdqzWapWC9mKxBIVd6V0ilPKAggMM1gHBaJYiEPubuT8XrNJrvfG7SZHZmjRDy2D0FlDCUqxWwhHc8d+REU5lAqGdndfhkC0m8pqNzpJo+JHT/id8NuR9DisJqd1i3Hq0DI43TvRfdTieRRdDubPjg5OSxUS/E3uXCxiAoSsPc6vh+JdmC0cXgIOqw5l91nsVlMNjNgDri9TrvLvGX1ul4EPZ5IyBcJeesoHs+A/lgcpoT/PvSexpIYz64AAAAASUVORK5CYII='); background-size: cover; display: block;" Err codemadness.org 70 i 1485 ></span> Err codemadness.org 70 i 1486 <img Err codemadness.org 70 i 1487 class="gatsby-resp-image-image" Err codemadness.org 70 i 1488 alt="Firetruck" Err codemadness.org 70 i 1489 title="Firetruck" Err codemadness.org 70 i 1490 src="/static/77fe5d6a0fb7c7f56ef4920d22c1efa9/a6d36/firetruck.png" Err codemadness.org 70 i 1491 srcset="/static/77fe5d6a0fb7c7f56ef4920d22c1efa9/222b7/firetruck.png 163w, Err codemadness.org 70 i 1492 /static/77fe5d6a0fb7c7f56ef4920d22c1efa9/ff46a/firetruck.png 325w, Err codemadness.org 70 i 1493 /static/77fe5d6a0fb7c7f56ef4920d22c1efa9/a6d36/firetruck.png 650w, Err codemadness.org 70 i 1494 /static/77fe5d6a0fb7c7f56ef4920d22c1efa9/e548f/firetruck.png 975w, Err codemadness.org 70 i 1495 /static/77fe5d6a0fb7c7f56ef4920d22c1efa9/3c492/firetruck.png 1300w, Err codemadness.org 70 i 1496 /static/77fe5d6a0fb7c7f56ef4920d22c1efa9/6c2de/firetruck.png 1334w" Err codemadness.org 70 i 1497 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 1498 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 1499 loading="lazy" Err codemadness.org 70 i 1500 /> Err codemadness.org 70 i 1501 </span></p> Err codemadness.org 70 i 1502 <p>Anyway, this season's Dr. Who told me not to worry about the blood. "It's probably hemorrhoids."</p> Err codemadness.org 70 i 1503 <p><em>WTF is a hemorrhoid?</em> I wondered to myself as I said to him, "Sounds good." Googled it after, and I learned that it's a vein that pokes out a little in your butt and doesn't really want to be poking out a little, so it bleeds. Seems like a thing that can happen, so I more or less returned to regularly scheduled programming and just dealt with the occasional poopy-red wipe. This doc also said I probably don't need to come for a physical for a few years, that annual physicals are a myth, dry land in a water world.</p> Err codemadness.org 70 i 1504 <p>Fast-forward to 2020. Everything sucks. And the bloody wipes are making a resurgence. Because, of course, they are. About four months ago I noticed that my first poop of the day (I usually go 2x) would have this purple-red streak embedded in it, like a racing stripe from hell. And it would happen almost without fail every single morning. That just didn't seem right, no matter what Doctors of Physicals Past told me. And then one morning I felt like I had actual blood dripping from my butt.</p> Err codemadness.org 70 i 1505 <p>Now I consider myself to be a mostly healthy person. I eat fairly well (even though I enjoy the occasional sourdough loaf and hazy IPA), I run and bike and hike regularly, I ran an IRONMAN in 2016 and a few ultramarathons since. I also don't like being sick (who does?). But, like with most things in my life, I want to be "good" at health. An ideal dental appointment for me would go something like this, "Wow, Charlie, these are the straightest, whitest teeth we've ever seen. We'd like you to come in and be the model for our Instagram ads and also be our 3D teeth model for dentures. Congratulations. Here's <em>two</em> free toothbrushes. You also never need to floss again."</p> Err codemadness.org 70 i 1506 <p>Anything that deviates from that ideal makes me squirm and I do think I can fix anything. For what it's worth I still believe that, if I ever encounter a blue flower on a mountain-top, I'm only a few months of mystical training away from becoming Batman. I already have the cape (it's actually a Harry Potter robe, but, hey, I'm scrappy).</p> Err codemadness.org 70 i 1507 <p>At the same time, I counterweight this with a mild touch of hypochondria. I'll see the poison oak in the mistletoe, so to speak. In this case it was a gift. I googled again for <em>stool, bloody stool</em> and the dreaded <em>colon cancer</em> came back. Last time, I averted my eyes from these search results. But the bloody racing stripes weren't going away. I needed to get myself checked out.</p> Err codemadness.org 70 i 1508 <p>Then I remembered an email from work: I was eligible for a <a href="http://members.onemedical.com/membership_referrals?code=cha0014&#x26;source=sa">OneMedical</a> membership. I knew there was hype about OneMedical, certainly I've seen the billboards, but I still wasn't exactly sure what they were all about. It had been a few years since my last physical, as you know, so I was primary-care-less, with a bloody problem on my hands. I downloaded the OneMedical app, uploaded a photo of my insurance card, beep-boop, and I've got an appointment with a new doc in a few days in one of their nearby clinics. Already, I loved the experience - I could text my questions any time (see <em>foot wart</em> above). I'd describe OneMedical as a network of clinics with an app for scheduling appointments and texting with a doc. Sure, ZocDoc kinda does the scheduling thing, but Zocdoc feels like you're sifting through the classifieds. Gimme some non-user-generated-ratings-based curation, please. </p> Err codemadness.org 70 i 1509 <p>So, I met with the doc, liked him a lot, discussed my bloody poops, and sheepishly asked if he'd be my new primary care. He agreed, and he also referred me to UCSF for a colonoscopy. Sure, I'm young, and it's probably hemorrhoids, we agreed, but it's the only way to be sure.</p> Err codemadness.org 70 i 1510 <p>After some jiggling about with the referral documentation, we finally get the colonoscopy scheduled for a few weeks later on Sept 9th.</p> Err codemadness.org 70 i 1511 <p>Then, on August 28th, <a href="https://en.wikipedia.org/wiki/Chadwick_Boseman">Chadwick Boseman</a> died of complications from colon cancer.</p> Err codemadness.org 70 i 1512 <p>I wasn't freaked out. Okay, yes, I was very freaked out.</p> Err codemadness.org 70 i 1513 <h2>Colonoscopies are not bad</h2> Err codemadness.org 70 i 1514 <p>What's a colonoscopy? It's a surgical procedure where the doctor goes all the way up your butt to see what's going on in there. You are completely knocked out, so you feel nothing. The only thing you need to do is what we in the business like to call "bowel prep."</p> Err codemadness.org 70 i 1515 <p>Allow me to describe bowel prep: the day before the procedure, you will poop your ever-living guts out for a few hours until you are clean-as-a-whistle, stem to stern. They'll give you a prescription for a gigantic jug of clear laxatives that you'll drink every 15 minutes or so for a few hours. In today's toilet-paper hoarding economy, I'd make sure that you are stocked up, because this gets messy.</p> Err codemadness.org 70 i 1516 <p>Other then the laxatives, you're allowed to drink clear liquids - which is confusing because you can enjoy such clear liquids as black coffee, Gatorade, broth, even green jello.</p> Err codemadness.org 70 i 1517 <p>But that's it. Easy. I watched Stranger Things season 3 again during my bowel prep day. Might not have been the best choice, as I intermittently had to pause Netflix to contribute my own liquified form of the Mind-Flayer, but it got the job done, and I cried my way thru Dustin and Suzie's hymn to childhood, again, as expected.</p> Err codemadness.org 70 i 1518 <p>Okay, next, I woke up on September 9th. My appointment is around 2 PM. Normal day, right?</p> Err codemadness.org 70 i 1519 <p><span Err codemadness.org 70 i 1520 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 1521 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 1522 > Err codemadness.org 70 i 1523 <span Err codemadness.org 70 i 1524 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 1525 style="padding-bottom: 66.87116564417178%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAUBAgT/xAAVAQEBAAAAAAAAAAAAAAAAAAACBP/aAAwDAQACEAMQAAABuJ4np3C8R//EABkQAAMBAQEAAAAAAAAAAAAAAAABAhETA//aAAgBAQABBQLojpJXrMvRMw//xAAXEQEAAwAAAAAAAAAAAAAAAAAAAhIT/9oACAEDAQE/AdFpP//EABcRAQADAAAAAAAAAAAAAAAAAAABEhP/2gAIAQIBAT8BzVh//8QAFxABAQEBAAAAAAAAAAAAAAAAEQAgMf/aAAgBAQAGPwK7A4//xAAZEAACAwEAAAAAAAAAAAAAAAAAAREhYUH/2gAIAQEAAT8h3Q2VAjBNtkxvB2P/2gAMAwEAAgADAAAAEAAv/8QAFxEAAwEAAAAAAAAAAAAAAAAAAAERIf/aAAgBAwEBPxCh0w//xAAWEQEBAQAAAAAAAAAAAAAAAAAAEQH/2gAIAQIBAT8Qhk3/xAAaEAEBAQEBAQEAAAAAAAAAAAABEQAhQTFx/9oACAEBAAE/EJcdGUl8uPyRWp/Lninx3NAB49xqqrv/2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 1526 ></span> Err codemadness.org 70 i 1527 <img Err codemadness.org 70 i 1528 class="gatsby-resp-image-image" Err codemadness.org 70 i 1529 alt="sf" Err codemadness.org 70 i 1530 title="sf" Err codemadness.org 70 i 1531 src="/static/dfe0aae59da7dc3715e8f289c1ae8f7b/6aca1/sf.jpg" Err codemadness.org 70 i 1532 srcset="/static/dfe0aae59da7dc3715e8f289c1ae8f7b/d2f63/sf.jpg 163w, Err codemadness.org 70 i 1533 /static/dfe0aae59da7dc3715e8f289c1ae8f7b/c989d/sf.jpg 325w, Err codemadness.org 70 i 1534 /static/dfe0aae59da7dc3715e8f289c1ae8f7b/6aca1/sf.jpg 650w, Err codemadness.org 70 i 1535 /static/dfe0aae59da7dc3715e8f289c1ae8f7b/8e1fc/sf.jpg 900w" Err codemadness.org 70 i 1536 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 1537 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 1538 loading="lazy" Err codemadness.org 70 i 1539 /> Err codemadness.org 70 i 1540 </span></p> Err codemadness.org 70 i 1541 <blockquote class="twitter-tweet"><p lang="en" dir="ltr">A strange, apocalyptic orange-red sky looms over the Bay Area. Here&#39;s what you need to know.<br>Read more: <a href="https://t.co/JxpYSnUPG9">https://t.co/JxpYSnUPG9</a> <a href="https://t.co/ZPOj4X3jRg">pic.twitter.com/ZPOj4X3jRg</a></p>&mdash; San Francisco Chronicle (@sfchronicle) <a href="https://twitter.com/sfchronicle/status/1303799596515172352?ref_src=twsrc%5Etfw">September 9, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> Err codemadness.org 70 i 1542 <p>Nope.</p> Err codemadness.org 70 i 1543 <p>I decide to walk over to the UCSF Parnassus building in the creepy Mars firelight, imagining I'm the last man on Earth (and hoping I don't step on my reading glasses). Carly makes a plan to pick me up in a few hours in our car.</p> Err codemadness.org 70 i 1544 <p>As expected, the procedure was painless. My only bit of further colonoscopy advice here is to ALWAYS bring a book with you, to every single medical appointment you have, because there's always going to be some sort of delay or waiting room.</p> Err codemadness.org 70 i 1545 <p>An hour or so later, I woke up feeling the feels of that post-anesthesia giddiness. Except no one else was happy. Carly was in the room, a surprise to me. And my doctor looked quite serious.</p> Err codemadness.org 70 i 1546 <p>In addition to two small polyps (which she removed), my colonoscopy surgeon found a tumor in my sigmoid colon. At this point, I don't know a sigmoid colon from a semi-colon, but I knew it wasn't good news. Go 2020!</p> Err codemadness.org 70 i 1547 <p>Despite the odds (my youth, my health), I now had cancer. Well, I probably had it for awhile, but we just found out I had it.</p> Err codemadness.org 70 i 1548 <p>My doc said I'd need to meet with <a href="https://www.ucsfhealth.org/clinics/center-for-colorectal-surgery">UCSF's colorectal surgery team</a>, and I'd also need to get CT scans ("cat scans") to see if the cancer had spread anywhere else in my body.</p> Err codemadness.org 70 i 1549 <p>And so began one of the worst weeks of our lives.</p> Err codemadness.org 70 i 1550 <h2>A brief family history</h2> Err codemadness.org 70 i 1551 <p>Let's talk about the odds for a moment.</p> Err codemadness.org 70 i 1552 <p><span Err codemadness.org 70 i 1553 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 1554 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 1555 > Err codemadness.org 70 i 1556 <span Err codemadness.org 70 i 1557 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 1558 style="padding-bottom: 57.05521472392638%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAADC0lEQVQozzWSf2iUdRzHv/fcPb/vnttzt9tzd7vrdrfbvLlz7Dan6FxbKdam27R24aR0XswmJf5gUFsoSytmGpaI6R9hEFHOkigbo8EImUSQtQwSCpZ/LHIzgooI6o9Xj6P+eP/14f3jw/st+teaPLDG5sq7r/PX3/+w9OvPzM7dYO7mFCO7O9jR3c3xF0/x2NbNtNVYvHNmhJOj7WzrcKhyNJKOgaEpeIQHVVUQrat0zr22j+npj7izuMT3P3zskjYy+niGugpBKig4daDE9YlJJo6Pcnp/Nz0dGeK2l3BAJWBq6K6gpmsoLsQzu1fx7dwUf/z5O4u/3ObGtRFOHEjTmvPjlVSeaCxjZuwIP329xJ1bixwb3E7cL3DKdCxTwbZUYk6AZDqOoqqIM8+vZOLNXczPf8nCwhdMXh4kGpAI6Ap+2Ut/g01xXROXXxrns/c+4a2T4xiqhB0K4TdNFxpBVzSXrSToNxBnhys5fSjGzIdHmf9xkukP9tGYqyfkl0gHvTzbFuVwc4Lze4rcvfUbU29fwdZkFFlZhin7UBWZWLICw3ATDmwKsrZa4rnBJr65PsznVwfYUMiTCkk0RFWebjIoJjwM3b+ehWvf8erRcYQQaIqCoRskMlmC5SEa1q/GilcgAqbqOkgUt9bz1ewYMxObaS+YWO7Lti7TXK6wyS3nhZ5t3J65yfaePlfQg+63XJ5KJFOLFrQI3ZfAvyKPiNgaqahCX2eWc8fWcGI4S10mjOTxoakaYUNnpSG4ePgQs+9/SiKVXU5oVrdgVDViFx7CrFqBGSuntqsT4YTU5Q11tSfJJjRkSSwT/kc+FeXJQoCDfb3kHj2I9ODQfzcFOZRCdaox6mrQHYuyRByhKT5kn4yp+hCGQ1PLOnb1F+ntepjW1jb2PrWXi6+MMbBzJ48cucDGHUP0bumiVCoRSeWQrBhaOo2aTiDfG7bsvdeSO0zXVS50E8lvINdZoqZ/hFjYJp9v4I1LV9n/8llaVjeTjISpydZSX5ejLFKJrzyDYgRQYw6yrvMvYkGDOFaZn64AAAAASUVORK5CYII='); background-size: cover; display: block;" Err codemadness.org 70 i 1559 ></span> Err codemadness.org 70 i 1560 <img Err codemadness.org 70 i 1561 class="gatsby-resp-image-image" Err codemadness.org 70 i 1562 alt="odds" Err codemadness.org 70 i 1563 title="odds" Err codemadness.org 70 i 1564 src="/static/384a14f31566523d7bbc5cfb061fc8fe/a6d36/odds.png" Err codemadness.org 70 i 1565 srcset="/static/384a14f31566523d7bbc5cfb061fc8fe/222b7/odds.png 163w, Err codemadness.org 70 i 1566 /static/384a14f31566523d7bbc5cfb061fc8fe/ff46a/odds.png 325w, Err codemadness.org 70 i 1567 /static/384a14f31566523d7bbc5cfb061fc8fe/a6d36/odds.png 650w, Err codemadness.org 70 i 1568 /static/384a14f31566523d7bbc5cfb061fc8fe/e548f/odds.png 975w, Err codemadness.org 70 i 1569 /static/384a14f31566523d7bbc5cfb061fc8fe/91f10/odds.png 992w" Err codemadness.org 70 i 1570 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 1571 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 1572 loading="lazy" Err codemadness.org 70 i 1573 /> Err codemadness.org 70 i 1574 </span></p> Err codemadness.org 70 i 1575 <p>We've already discussed my vigorous, proto-Batman level of health. And how I'm a fresh-faced, occasionally-bearded, 34 year old with the heart of a child and the strength of a chimpanzee (no, that's a <a href="https://en.wikipedia.org/wiki/Humanzee">humanzee</a>).</p> Err codemadness.org 70 i 1576 <p>Speaking of unfortunate genetics, it turns out that I have some family history of colon cancer. </p> Err codemadness.org 70 i 1577 <p>Here's the scoop: my pops (that's cool talk for Dad) has had benign (non-cancerous) polyps in his previous colonoscopies. What's a poylp? It's a little growth thingy in your colon that may evolve into a tumor. Just like how a Charmander becomes a Charmeleon, polyps can grow bigger and more serious with more destructive power. Polyps are usually just snipped out during your colonoscopy and sent off for pathology (aka to see if they have cancer in them). Most do not. This is the case with my dad's polyp experience. Even though none of his have been cancerous, he still needs to go in for colonoscopies more regularly than those who don't have polyps.</p> Err codemadness.org 70 i 1578 <p>My own tumor began as a lowly polyp, perhaps some ten years ago. We don't know exactly. But if I'd had a colonoscopy ten years ago, or five years ago, they might have seen it and snipped it out and you wouldn't be reading this.</p> Err codemadness.org 70 i 1579 <p>If you go further up the Harrington tree, you'll learn that my dad's aunt (my father's mother's sister) died of colon cancer in her early 60s. And his other aunt (same side, same family) died of colon cancer in her 80s. Two factoids that I had no idea about until I asked my parents for their help filling out one of the many UCSF cancer history surveys. Also, on my mom's side, my grandfather's mother (my great-grandmother, who I never met) probably had colon cancer.</p> Err codemadness.org 70 i 1580 <p>So, colon cancer is bouncing around in my family tree. But neither of my parents have it, and none of my grandparents had it, which I suppose is good. That said, I learned that my grandparents did have <em>other</em> sorts of cancers.</p> Err codemadness.org 70 i 1581 <p>Getting confusing, right? I cannot stress this enough: <strong>Learn your family's medical history and write it down in a note on your phone. You'll be asked for this info 10,000 times before every single appointment. But, more importantly, your family history can be a signal to you and your docs whether are "higher-risk" for certain conditions.</strong></p> Err codemadness.org 70 i 1582 <p>I just didn't know about any of this. I knew there were some heart attacks in there, but not really about any of the cancer stuff. Ideally, each person would be given some sort of family history report when they're born or when they turn 18 or when they get their first Nintendo.</p> Err codemadness.org 70 i 1583 <p>But that's just it. You don't get health info automatically. There's no one, other than you, to own your medical health story. <strong>You must become your own health advocate.</strong> Spoiler alert, but this is the number one lesson I learned during this entire cancer experience. Health literacy is just as important as financial literary or literacy literacy.</p> Err codemadness.org 70 i 1584 <p>There are tools to help, and I'm still digging into them now. I'm much more excited now by the Apple Health stuff on iOS. I'm hoping it can become some sort of private, secure repository for my health data that I carry with me. For example, how many of you, dear readers, know your blood type? There's all sorts of little info-nuggets that you can track down NOW to pay-it-forward for FUTURE you. Cause, ain't nobody else gonna. It's like a scavenger hunt. Okay, enough proselytizing, dude.</p> Err codemadness.org 70 i 1585 <h2>Stage-wise limbo</h2> Err codemadness.org 70 i 1586 <p>Back to our story, we've just learned that I have a cancerous tumor up my butt and we've also filled out a few frightening family history reports. This is where UCSF kicks it into high gear (and, my goodness, do I love UCSF? Yes, yes I do. They are absolutely, amazingly wonderful, competent, and life-changing!).</p> Err codemadness.org 70 i 1587 <p>I'm now starting to get booked for all sorts of appointments, starting with the ones previously mentioned: (1) CT scans of my abdomen and chest and (2) then the consult with the colorectal surgeon.</p> Err codemadness.org 70 i 1588 <p>Because, as I later learned from my colorectal surgeon (who is the best!), when colon cancer spreads, it usually does the evolution thing from cancerous polyp (Stage 1) into tumor (Stage 2). After that, it can break through the wall of the colon into the nearby lymph nodes (Stage 3). Finally, it becomes (Stage 4) if it spreads to other organs, the first often being the liver and the lungs. At least, this is how I understand the various stages. I'm sure I'm missing some technical details and nuance. When <a href="https://www.nytimes.com/2020/08/28/movies/chadwick-boseman-dead.html">reading about Chadwick Boseman</a>, you'll learn that he was initially diagnosed with Stage 3 colon cancer in 2016, which eventually became Stage 4. In sum, you want your stage to be as low as possible.</p> Err codemadness.org 70 i 1589 <p>At this point, pre-CT scan, Carly and I have no idea what stage I'm at. Well, we do know that I'm somewhere from 2 - 4. These appointments are going to help us understand where I'm at. Specifically, the CT scans will tell us if I'm Stage 4 or not.</p> Err codemadness.org 70 i 1590 <p>Carly and I are in a daze for most of the next week. And so are our parents and our siblings. I honestly can't remember how many friends we told at this point, I know a few, but not that many. I didn't know what to say or feel.</p> Err codemadness.org 70 i 1591 <p>Much like the South Park lament "The Simpsons did it!", there's usually an <a href="https://xkcd.com/1048/">xkcd</a> for whatever you're feeling or thinking:</p> Err codemadness.org 70 i 1592 <p><img src="https://imgs.xkcd.com/comics/emotion.png" alt="emotions"></p> Err codemadness.org 70 i 1593 <p>As a wannabe stoic, I allow my negative visualization to run rampant. I'm thinking of the possibility that I've got only a few years (months?) left to live.</p> Err codemadness.org 70 i 1594 <p>My CT scans are scheduled for Thursday afternoon and the meeting with the surgeon is Friday morning. Between then and now, we have the horrible Internet to do horrible searches and we have the two-page summary printout of my colonoscopy, replete with some terrifying photos of the tumor. The tumor looks like a cross between a tadpole and an eyeball (two things that I'd normally love). I don't like looking at this picture, at all, but the two-page summary somehow keeps traveling around our house, and no matter where I look, I see the pink tadpole eye staring back at me, and I wonder, "Are you my death sentence?"</p> Err codemadness.org 70 i 1595 <h3>The sound of silence</h3> Err codemadness.org 70 i 1596 <p>On Thursday, Carly and I walk over to the UCSF CT scanning place. It's slightly less hostile to human life outside today, so that's nice. After checking in with the front desk, I quickly pass through the first waiting room into the second waiting room. There's always a second waiting room.</p> Err codemadness.org 70 i 1597 <p>It's here I realize that the <em>sound</em> of a major health issue is rapidly opening and shutting hospital doors. I scribble this pithy witicism into the back cover of my paperback copy of <a href="https://www.amazon.com/gp/product/0061339202/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=0061339202&#x26;linkId=b76eed264fa980c5471f8c0cc351b2a1">Flow</a> and wait my turn with the CT machine. I'm given two bottles of "contrast" provided by reknowned-drink-maker General Electric to drink. These iodine cocktails will help the machine see my inside stuff. They taste like you're drinking printer ink. They're not that bad at all. Everyone else in here is at least fifty years old. I decide to do a five minute wall-sit to prove my vigor. Finally, I'm called back to the machine.</p> Err codemadness.org 70 i 1598 <p>The CT machine looks like a coldsleep chamber crossed with a Weyland Corporation interdimensional portal. It's over in less than a minute.</p> Err codemadness.org 70 i 1599 <h3>Plan of attack</h3> Err codemadness.org 70 i 1600 <p>The scans are done and now it's up to the radiologist to read them. I'm sure some neat TensorFlow or PyTorch deep learning computer vision model could help here, but I don't have access to the dataset.</p> Err codemadness.org 70 i 1601 <p>The next morning we drive over to the <a href="https://www.ucsfhealth.org/clinics/center-for-colorectal-surgery">UCSF Center for Colorectal Surgery</a>. It's in the beautiful ghost town of the greater Chase Center-Mission Bay area. I look up at the sun before heading in, thinking, "The next time I see you, ball of gas burning billions of miles away (quoth Pumbaa), we'll know the CT results and we'll know the plan."</p> Err codemadness.org 70 i 1602 <p>When I see the sun again, we do.</p> Err codemadness.org 70 i 1603 <p>The CT scans were clean. There's no sign that the cancer spread to other organs, ruling out Stage 4. This is the best news ever.</p> Err codemadness.org 70 i 1604 <p>The second best news we hear is that the tumor is in a relatively excellent spot for surgery. After an impromptu rectal exam that morning (hello!) to make sure there was no cancer in the rectum, my surgeon gives us an overview of the situation and a plan of attack.</p> Err codemadness.org 70 i 1605 <p>He's going to remove my entire <a href="https://en.wikipedia.org/wiki/Sigmoid_colon">sigmoid colon</a> (which is about a foot long), and then simply reattach the rectum to the rest of the colon. And he's going to do this all via "robotic surgery" (using the WED Treadwell-like <a href="https://en.wikipedia.org/wiki/Da_Vinci_Surgical_System">da Vinci Surgical System</a>), so the scars will be teeny and the recovery much easier.</p> Err codemadness.org 70 i 1606 <p>We'll only be able to tell if I'm Stage 2 or Stage 3 post-surgery. He's planning to remove the nearby lymph nodes and a pathology report will tell us if they're cancerous. If they're positive, it's Stage 3.</p> Err codemadness.org 70 i 1607 <p>But, either way, we're getting this thing out of my butt, pronto.</p> Err codemadness.org 70 i 1608 <p>Carly and I have a plan. We're planners. We needed this. A bit of our haze is lifted as we head into our next agenda item.</p> Err codemadness.org 70 i 1609 <h2>Gettin' hitched</h2> Err codemadness.org 70 i 1610 <p>We got married (eloped, both technically and social-distanced-ly) on Sept. 30th!</p> Err codemadness.org 70 i 1611 <p><span Err codemadness.org 70 i 1612 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 1613 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 1614 > Err codemadness.org 70 i 1615 <span Err codemadness.org 70 i 1616 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 1617 style="padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGAABAAMBAAAAAAAAAAAAAAAAAAIDBAX/xAAWAQEBAQAAAAAAAAAAAAAAAAABAAL/2gAMAwEAAhADEAAAAedXdblxoI6ERcQD/8QAHBAAAgICAwAAAAAAAAAAAAAAAAIBAwRBERIh/9oACAEBAAEFApWYZfDkSGse5ei7pMhTf//EABYRAQEBAAAAAAAAAAAAAAAAABABMf/aAAgBAwEBPwEuH//EABURAQEAAAAAAAAAAAAAAAAAABAB/9oACAECAQE/ASH/xAAbEAABBQEBAAAAAAAAAAAAAAABAAIQESExcf/aAAgBAQAGPwITRvi9yHJjrOx//8QAGhABAAMBAQEAAAAAAAAAAAAAAQARITFBcf/aAAgBAQABPyFYR0lUEdMvIB0xBRspSuR60ho+SegL23PImp//2gAMAwEAAgADAAAAEFPoQv/EABYRAQEBAAAAAAAAAAAAAAAAAAEgIf/aAAgBAwEBPxAMWD//xAAYEQACAwAAAAAAAAAAAAAAAAAAEBExYf/aAAgBAgEBPxDCCy//xAAgEAEAAgICAQUAAAAAAAAAAAABABEhQTFxUWGBkaGx/9oACAEBAAE/EPCtaZOzWoml+22A93zASRFznGPuobgAV8N94ngmYDjQF+sMtoUYAHA1zLkt5f2f/9k='); background-size: cover; display: block;" Err codemadness.org 70 i 1618 ></span> Err codemadness.org 70 i 1619 <img Err codemadness.org 70 i 1620 class="gatsby-resp-image-image" Err codemadness.org 70 i 1621 alt="wedding" Err codemadness.org 70 i 1622 title="wedding" Err codemadness.org 70 i 1623 src="/static/ee3c8142b9d95fa6818f729380100569/6aca1/wedding.jpg" Err codemadness.org 70 i 1624 srcset="/static/ee3c8142b9d95fa6818f729380100569/d2f63/wedding.jpg 163w, Err codemadness.org 70 i 1625 /static/ee3c8142b9d95fa6818f729380100569/c989d/wedding.jpg 325w, Err codemadness.org 70 i 1626 /static/ee3c8142b9d95fa6818f729380100569/6aca1/wedding.jpg 650w, Err codemadness.org 70 i 1627 /static/ee3c8142b9d95fa6818f729380100569/bf093/wedding.jpg 888w" Err codemadness.org 70 i 1628 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 1629 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 1630 loading="lazy" Err codemadness.org 70 i 1631 /> Err codemadness.org 70 i 1632 </span></p> Err codemadness.org 70 i 1633 <p>Look at those oblivious smiles. Wait -- we aren't oblivious, I have cancer. We just love eachother.</p> Err codemadness.org 70 i 1634 <p>Originally slated for 2019, then after bouncing around in 2020, our cute elopement threaded a very small needle with a teeny ceremony and it was beautiful and wonderful and just what we hoped for.</p> Err codemadness.org 70 i 1635 <p>Now, onto our first act as a married couple: my surgery on Monday, Oct 12th (and another round of bowel prep the day before).</p> Err codemadness.org 70 i 1636 <h2>Surgery ain't no joke</h2> Err codemadness.org 70 i 1637 <p>I don't have much to add about the surgery itself. I was there. But I don't remember anything. Thank goodness. I also haven't yet watched any YouTubes of how the da Vinci robot works. I didn't want to know before the surgery, and I'm not quite ready now to see it.</p> Err codemadness.org 70 i 1638 <p>I did remember to bring a book, though:</p> Err codemadness.org 70 i 1639 <p><span Err codemadness.org 70 i 1640 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 1641 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 1642 > Err codemadness.org 70 i 1643 <span Err codemadness.org 70 i 1644 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 1645 style="padding-bottom: 133.12883435582822%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAMCBP/EABYBAQEBAAAAAAAAAAAAAAAAAAIBAP/aAAwDAQACEAMQAAAB0h0BZTTdMU1YCj//xAAcEAACAQUBAAAAAAAAAAAAAAABAgMAERIhIjL/2gAIAQEAAQUCkBao8hGDpz0W7ncBwtgYsjcNVtuTinn/xAAYEQACAwAAAAAAAAAAAAAAAAAAEQECEP/aAAgBAwEBPwEZNVn/xAAXEQADAQAAAAAAAAAAAAAAAAAAEBES/9oACAECAQE/ASGqv//EABwQAAICAgMAAAAAAAAAAAAAAAARARADITFBUf/aAAgBAQAGPwLXU+iRs4IuZaQ1WWv/xAAbEAADAQEBAQEAAAAAAAAAAAAAAREhMZFBcf/aAAgBAQABPyGGtU/Ru6l5pKE0Xw1NnkzpEvsFSXrLQ6FWuwknvolt8SEwf//aAAwDAQACAAMAAAAQuCFA/8QAFxEAAwEAAAAAAAAAAAAAAAAAARARIf/aAAgBAwEBPxCbUIFX/8QAGBEBAAMBAAAAAAAAAAAAAAAAARARIUH/2gAIAQIBAT8QBquRDgj/xAAeEAEBAAICAgMAAAAAAAAAAAABEQAhMVFBoWFx0f/aAAgBAQABPxCdrQigCSU+ZhtbcD2Fde8Egg0jaY2kJGVK96wtsI4LriYE8CqeclgrzyrjgDCvJiKCsNzRo9Yp1q9/3BocAfWFx5//2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 1646 ></span> Err codemadness.org 70 i 1647 <img Err codemadness.org 70 i 1648 class="gatsby-resp-image-image" Err codemadness.org 70 i 1649 alt="book" Err codemadness.org 70 i 1650 title="book" Err codemadness.org 70 i 1651 src="/static/a3ae521c3ee36a8aad866c867be69fb0/6aca1/musashi.jpg" Err codemadness.org 70 i 1652 srcset="/static/a3ae521c3ee36a8aad866c867be69fb0/d2f63/musashi.jpg 163w, Err codemadness.org 70 i 1653 /static/a3ae521c3ee36a8aad866c867be69fb0/c989d/musashi.jpg 325w, Err codemadness.org 70 i 1654 /static/a3ae521c3ee36a8aad866c867be69fb0/6aca1/musashi.jpg 650w, Err codemadness.org 70 i 1655 /static/a3ae521c3ee36a8aad866c867be69fb0/7c09c/musashi.jpg 975w, Err codemadness.org 70 i 1656 /static/a3ae521c3ee36a8aad866c867be69fb0/01ab0/musashi.jpg 1300w, Err codemadness.org 70 i 1657 /static/a3ae521c3ee36a8aad866c867be69fb0/9568a/musashi.jpg 3024w" Err codemadness.org 70 i 1658 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 1659 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 1660 loading="lazy" Err codemadness.org 70 i 1661 /> Err codemadness.org 70 i 1662 </span></p> Err codemadness.org 70 i 1663 <p>And, then, after glimpsing my many-limbed robotic friend in the surgery room, it's lights out.</p> Err codemadness.org 70 i 1664 <p>The next thing I know it's five hours later and I'm in a hospital bed and calling Carly to give her my room number. The nurses in the recovery area are amazing. I'm hooked up to an IV and they're monitoring my "ins" and my "outs" (my foods and my pees and poops). They do this every four hours, so you're not exactly going to get a perfect night's sleep here, but it's great to know that they're paying good attention to you.</p> Err codemadness.org 70 i 1665 <p>The big goal for me for the next 24 hours is to walk around. Being the Big Hero 6 that I am, I try to walk at 9 PM on the day of my surgery (which concluded around 6 PM), and I stand up, but my heart starts racing, so I slowly plop back into bed. Then, at midnight, my nurse helps my try again, and I do it. I shuffle around the hallway like a zombie, wheeling along my IV stand. It's a huge win. I end up walking six more times that day, between many Breath of the Wild sessions and most of The Umbrella Academy Season 2.</p> Err codemadness.org 70 i 1666 <p>Sure, my guts feel like someone took a blender to them, but I'm in great spirits, with incredible support from the UCSF team, Carly, and my mom.</p> Err codemadness.org 70 i 1667 <p>Side note that IVs are interesting. They're like open ports into your body, allowing the medical team to either remove or add fluids. I didn't expect that they'd just keep these ports open during your hospital stay, but they do. I guess that makes sense.</p> Err codemadness.org 70 i 1668 <p><span Err codemadness.org 70 i 1669 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 1670 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 1671 > Err codemadness.org 70 i 1672 <span Err codemadness.org 70 i 1673 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 1674 style="padding-bottom: 74.84662576687117%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAUBAgME/8QAFQEBAQAAAAAAAAAAAAAAAAAAAgH/2gAMAwEAAhADEAAAAeFtlIVxeG//xAAaEAEBAAIDAAAAAAAAAAAAAAABAgASAyEi/9oACAEBAAEFApndYIzpyHQvk8tq/wD/xAAWEQEBAQAAAAAAAAAAAAAAAAAAEQH/2gAIAQMBAT8Bi4//xAAWEQEBAQAAAAAAAAAAAAAAAAAAAhL/2gAIAQIBAT8BZp//xAAcEAACAQUBAAAAAAAAAAAAAAAAARECMTJBUWH/2gAIAQEABj8CUU7PDFMhHS5//8QAGhAAAwEBAQEAAAAAAAAAAAAAAAERIXExQf/aAAgBAQABPyHePFZmS/BNOiwVoq+CMPSL5D//2gAMAwEAAgADAAAAEGg//8QAFxEBAQEBAAAAAAAAAAAAAAAAAQARIf/aAAgBAwEBPxAQmkjxv//EABcRAQEBAQAAAAAAAAAAAAAAAAEAESH/2gAIAQIBAT8Q0RtOl//EAB4QAQACAgIDAQAAAAAAAAAAAAEAESFBMVFhcYGh/9oACAEBAAE/EKA1oKkru4AJps5Xef22O8G2T14g3mGTddfJRu17aoxqOsTjqf/Z'); background-size: cover; display: block;" Err codemadness.org 70 i 1675 ></span> Err codemadness.org 70 i 1676 <img Err codemadness.org 70 i 1677 class="gatsby-resp-image-image" Err codemadness.org 70 i 1678 alt="port" Err codemadness.org 70 i 1679 title="port" Err codemadness.org 70 i 1680 src="/static/571a4b7e6bbeb991a19b7f248c5f5e20/6aca1/port.jpg" Err codemadness.org 70 i 1681 srcset="/static/571a4b7e6bbeb991a19b7f248c5f5e20/d2f63/port.jpg 163w, Err codemadness.org 70 i 1682 /static/571a4b7e6bbeb991a19b7f248c5f5e20/c989d/port.jpg 325w, Err codemadness.org 70 i 1683 /static/571a4b7e6bbeb991a19b7f248c5f5e20/6aca1/port.jpg 650w, Err codemadness.org 70 i 1684 /static/571a4b7e6bbeb991a19b7f248c5f5e20/7c09c/port.jpg 975w, Err codemadness.org 70 i 1685 /static/571a4b7e6bbeb991a19b7f248c5f5e20/01ab0/port.jpg 1300w, Err codemadness.org 70 i 1686 /static/571a4b7e6bbeb991a19b7f248c5f5e20/d2602/port.jpg 4032w" Err codemadness.org 70 i 1687 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 1688 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 1689 loading="lazy" Err codemadness.org 70 i 1690 /> Err codemadness.org 70 i 1691 </span></p> Err codemadness.org 70 i 1692 <p>Another secret weapon of mine that aided in my recovery: this cute avocado buddy that my sister and her boyfriend sent me:</p> Err codemadness.org 70 i 1693 <p><span Err codemadness.org 70 i 1694 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 1695 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 1696 > Err codemadness.org 70 i 1697 <span Err codemadness.org 70 i 1698 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 1699 style="padding-bottom: 74.84662576687117%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAQCAwX/xAAWAQEBAQAAAAAAAAAAAAAAAAACAAP/2gAMAwEAAhADEAAAAU9GueSfEx3/xAAZEAEBAQADAAAAAAAAAAAAAAABAhESEyL/2gAIAQEAAQUCDameoEoT1tcYRj//xAAWEQEBAQAAAAAAAAAAAAAAAAAAARL/2gAIAQMBAT8BrD//xAAWEQEBAQAAAAAAAAAAAAAAAAAAARL/2gAIAQIBAT8Btaf/xAAbEAACAwADAAAAAAAAAAAAAAAAAQIREiFBcf/aAAgBAQAGPwKW32Ln2yxktsTP/8QAGhABAQEAAwEAAAAAAAAAAAAAAREAITFR4f/aAAgBAQABPyF2NeFcyqSUDBPjFwdLvBDXRKdb/9oADAMBAAIAAwAAABD/AM//xAAXEQADAQAAAAAAAAAAAAAAAAAAAREh/9oACAEDAQE/EExQh7T/xAAWEQEBAQAAAAAAAAAAAAAAAAABAHH/2gAIAQIBAT8QUbF//8QAHBAAAgIDAQEAAAAAAAAAAAAAAREAITFBYXGB/9oACAEBAAE/EE50mG4DuYEfARiNgSxs0+RSUBuvHNNCaAa5UM8rwRqf/9k='); background-size: cover; display: block;" Err codemadness.org 70 i 1700 ></span> Err codemadness.org 70 i 1701 <img Err codemadness.org 70 i 1702 class="gatsby-resp-image-image" Err codemadness.org 70 i 1703 alt="avo" Err codemadness.org 70 i 1704 title="avo" Err codemadness.org 70 i 1705 src="/static/3c80ba743e37eb45929e343c8fba4082/6aca1/avo.jpg" Err codemadness.org 70 i 1706 srcset="/static/3c80ba743e37eb45929e343c8fba4082/d2f63/avo.jpg 163w, Err codemadness.org 70 i 1707 /static/3c80ba743e37eb45929e343c8fba4082/c989d/avo.jpg 325w, Err codemadness.org 70 i 1708 /static/3c80ba743e37eb45929e343c8fba4082/6aca1/avo.jpg 650w, Err codemadness.org 70 i 1709 /static/3c80ba743e37eb45929e343c8fba4082/7c09c/avo.jpg 975w, Err codemadness.org 70 i 1710 /static/3c80ba743e37eb45929e343c8fba4082/01ab0/avo.jpg 1300w, Err codemadness.org 70 i 1711 /static/3c80ba743e37eb45929e343c8fba4082/f1e22/avo.jpg 2576w" Err codemadness.org 70 i 1712 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 1713 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 1714 loading="lazy" Err codemadness.org 70 i 1715 /> Err codemadness.org 70 i 1716 </span></p> Err codemadness.org 70 i 1717 <p>I'm squeezing this thing every time I'm jabbed with a needle (many, many times), using it as a pillow, and just loving it, cause it's so cute.</p> Err codemadness.org 70 i 1718 <p>On Wednesday, after I've started farting and pooping again (great signs!), I'm sent home early.</p> Err codemadness.org 70 i 1719 <h3>The future</h3> Err codemadness.org 70 i 1720 <p>I'm home and moving slow and still feel a bunch of surgical pain in my tummy, but overall feel so happy about my progress. I have some cool scars, which I'm thinking about submitting to the <a href="https://www.instagram.com/secret_buttholes/?hl=en">@secret_buttholes Instagram</a>:</p> Err codemadness.org 70 i 1721 <p><span Err codemadness.org 70 i 1722 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 1723 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 1724 > Err codemadness.org 70 i 1725 <span Err codemadness.org 70 i 1726 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 1727 style="padding-bottom: 74.84662576687117%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAECBP/EABUBAQEAAAAAAAAAAAAAAAAAAAEC/9oADAMBAAIQAxAAAAFXClyEg//EABsQAAEEAwAAAAAAAAAAAAAAAAEAAgMyESEi/9oACAEBAAEFAh0+W5OTDdx0v//EABURAQEAAAAAAAAAAAAAAAAAAAEQ/9oACAEDAQE/ASf/xAAVEQEBAAAAAAAAAAAAAAAAAAABEP/aAAgBAgEBPwFn/8QAGBABAAMBAAAAAAAAAAAAAAAAAQAQYXH/2gAIAQEABj8CiUdi7X//xAAaEAEAAwADAAAAAAAAAAAAAAABABEhUWFx/9oACAEBAAE/IdvsrYbRY+DRNd0cztMJ/9oADAMBAAIAAwAAABDcP//EABURAQEAAAAAAAAAAAAAAAAAABAx/9oACAEDAQE/ELP/xAAVEQEBAAAAAAAAAAAAAAAAAAAQMf/aAAgBAgEBPxCD/8QAHRABAAICAgMAAAAAAAAAAAAAAQARIUExYVGhsf/aAAgBAQABPxDFeae4GIKW9S3MWAJnHT9goMlum+I7Fvc//9k='); background-size: cover; display: block;" Err codemadness.org 70 i 1728 ></span> Err codemadness.org 70 i 1729 <img Err codemadness.org 70 i 1730 class="gatsby-resp-image-image" Err codemadness.org 70 i 1731 alt="scars" Err codemadness.org 70 i 1732 title="scars" Err codemadness.org 70 i 1733 src="/static/c0d678a41a56e990c23598d139068017/6aca1/scars.jpg" Err codemadness.org 70 i 1734 srcset="/static/c0d678a41a56e990c23598d139068017/d2f63/scars.jpg 163w, Err codemadness.org 70 i 1735 /static/c0d678a41a56e990c23598d139068017/c989d/scars.jpg 325w, Err codemadness.org 70 i 1736 /static/c0d678a41a56e990c23598d139068017/6aca1/scars.jpg 650w, Err codemadness.org 70 i 1737 /static/c0d678a41a56e990c23598d139068017/7c09c/scars.jpg 975w, Err codemadness.org 70 i 1738 /static/c0d678a41a56e990c23598d139068017/01ab0/scars.jpg 1300w, Err codemadness.org 70 i 1739 /static/c0d678a41a56e990c23598d139068017/f1e22/scars.jpg 2576w" Err codemadness.org 70 i 1740 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 1741 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 1742 loading="lazy" Err codemadness.org 70 i 1743 /> Err codemadness.org 70 i 1744 </span></p> Err codemadness.org 70 i 1745 <p>On Thursday, I get a call from my surgeon. The pathology is back early. There's no signs that the cancer spread past the colon walls. The lymph nodes don't show any signs of cancer in them. Which essentially means I had Stage 2 cancer. Per my doctors, there's no immediate need for chemotherapy.</p> Err codemadness.org 70 i 1746 <p>We did it.</p> Err codemadness.org 70 i 1747 <p>I still have some upcoming follow-up appointments, and meetings with cancer genetics to learn if I'm genetically predisposed to cancers. And I'm sure I'll be doing many more colonoscopies and other tests in the future. And I'm still recovering from the surgery, too.</p> Err codemadness.org 70 i 1748 <p>But I (think) I'm cancer-free now. Now, there's no way to know that little microscopic cancer cells didn't manage to break through somehow, or that I don't have cancer in some other random part of my body, so it's kinda arbitrary to say something like "cancer-free." But we do know, for sure, that my colon cancer tumor was safely removed and that my doctors are extremely pleased with the results and the signs that it hasn't spread.</p> Err codemadness.org 70 i 1749 <h3>Hello, impostor's syndrome, my old friend</h3> Err codemadness.org 70 i 1750 <p>So, I guess that means I'm a cancer survivor.</p> Err codemadness.org 70 i 1751 <p>Which is weird to say, because this whole thing happened <em>very</em> quickly. All I did was "bowel prep" for two days and then fall asleep and wake up with a painful stomach.</p> Err codemadness.org 70 i 1752 <p>But I am a survivor.</p> Err codemadness.org 70 i 1753 <p>In fact, I'm probably the luckiest cancer survivor ever, from my access to incredible people and resources at UCSF to the actual state of my tumor to my family and friends support network. I paid attention to my body (noticing the bloody poops) and got the support and encouragement needed to get checked.</p> Err codemadness.org 70 i 1754 <p>UCSF has me signed up for a 5+ year relationship with their cancer survivors unit (I'll learn more in a few weeks when I have my first session). I'm excited about this, because I want to learn as much as I can about how to stay safe and healthy going forward. A few of my friends have told me that there's good research into fasting and Keto and their link with preventing colon cancers. I'm queuing up some <a href="https://tim.blog/2015/11/03/dominic-dagostino/">Tim Ferriss episodes with Dom D'Agostino</a> about this topic.</p> Err codemadness.org 70 i 1755 <p>My wife and my family are depending on me to stay healthy, and I'm going to do everything I can to do so. I'm going to own my health and be my own health advocate.</p> Err codemadness.org 70 i 1756 <h2>Some thanks</h2> Err codemadness.org 70 i 1757 <p>It's now about a week and half out from my surgery. I'm doing better on the Bristol scale, but not quite back to normal yet.</p> Err codemadness.org 70 i 1758 <p><span Err codemadness.org 70 i 1759 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 1760 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 1761 > Err codemadness.org 70 i 1762 <span Err codemadness.org 70 i 1763 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 1764 style="padding-bottom: 177.91411042944785%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAkCAIAAAAGkY33AAAACXBIWXMAAAsTAAALEwEAmpwYAAAEN0lEQVRIx71WSW8jRRTuK7+AA4gDEuLICK78A5DgziI4ICEkTly4cYUbGjEwQxiJA4cRM4dILGKSDAlycByHeDJOMonHieOt23a77V6qunqtenzdHZuEUUTgQOm5ut6r+t5ai7XhAG14eNjodDq9Xl/Xjd3dPaVUmspGo9FqnShFUmYsBjqmdePk5MQaHnLmaaYjgjD2fX84HEHLeGwxxh3HBZnmeDKZuq43ndpgmcdsL7B5NGWhw8MoTrSGqcIoVVKVyxt37y6tra3V67ugUqm0WdlcWbm3sVFZXV39vVyubf/xaBjsGHRfV9t95YpUS5M0iuI0TeCqlDLJWXiIAVyN4+yTR5Fmo0yaUdG0OI49zzMMHT7DN98XRIjNgDyKotx5q9Vqua5bOD8ajUzTxACqAE5s28klY879IAig2LbtJMnAkCBmzEEpcgEWliABCzczy0hSnhiXSMEsnKTLNa3X69VqtaWlJcuaXAS7SK7BIOqJ3Ha7PRSsyM1lLSNI2PQ8Bi1wHpEX2boUuNhMWVmypoq+2FXz/iwLAizOm/a3eJQ6FRSf+WwxyFX8JdfmzJnBvwbTHPP/gh8v6X+OWZ0DS0kyvRCc+3yKKqbPlSrftGdLhQFORLa3/ylmovvLtPVz4f2lE5Zvhuz3/hV645kzYLp0tvH78EV699lTMJZZBo27Z8C4RnBdnGaVVJpkGZJpJlczMNLmjCQWfPQyvfmUyg+PNreg6CLLL9EHL6iDCr32hKz+pD55ld56egZOYrr9qfplQc0D3VhEkpRj0s495Y7pvSv0zvNqe5me09TKLfXxK/T6kxkKYInbZvGqXLsFDhcb0NGP12XpTtw5SG9/lvabSXmR1u/Eo266+LnUj6LKD+rX7+IoRu40XOYCBZydMlRP4JCClSrOMqSiPIoIN2me7QArZntJ4zzkLvccxljAmPA8wT0/IxZAzpngLGP9fFkm9ARzfcZCADXPCziPhEh8Py56znEZQ0vwODEv8HlG0AJWa7f1L6/dWPj65rUvvrpxfeHmN9/WHzz0eeTY3HX8OTkOfBENIygfhfu9sNYOx9NAw8RJd/DwuHfcH+03O13DMiduIEkkIJX3OYVpIGKbxfo0Htqx6cSOG2gCebAH1KmT0aDhEXkjmhrUOyCjSYNjau+R/oiMI/Ld0z00a74faiJS0jGl3pSjdjJoS0tXbCpHHTUdkKWT1aeJoSAUXM22UEYFOIrSnm5sVLf3G83a9ubeXn2rtnPc7a1XNmsPdhvHrXJ166B59FupVK1W8TxYllXsvyzbvo8KMbw4rmMv79mVxsS1J3iTsGhsmpO8dxxnOp02m812u433KswbgBo+QgiOxzHhb3+fXF1PiITHshcPDVPo8ZLgYsfTXalUitcvCEIMAI4wHwZi7Ih6XxwYgnGRgc434LvdLv5WFOpy29Gf/GPyuoEHqP8AAAAASUVORK5CYII='); background-size: cover; display: block;" Err codemadness.org 70 i 1765 ></span> Err codemadness.org 70 i 1766 <img Err codemadness.org 70 i 1767 class="gatsby-resp-image-image" Err codemadness.org 70 i 1768 alt="walking" Err codemadness.org 70 i 1769 title="walking" Err codemadness.org 70 i 1770 src="/static/ca5f150240ad51c2af255f1a5fa14716/a6d36/recovery.png" Err codemadness.org 70 i 1771 srcset="/static/ca5f150240ad51c2af255f1a5fa14716/222b7/recovery.png 163w, Err codemadness.org 70 i 1772 /static/ca5f150240ad51c2af255f1a5fa14716/ff46a/recovery.png 325w, Err codemadness.org 70 i 1773 /static/ca5f150240ad51c2af255f1a5fa14716/a6d36/recovery.png 650w, Err codemadness.org 70 i 1774 /static/ca5f150240ad51c2af255f1a5fa14716/1d69c/recovery.png 750w" Err codemadness.org 70 i 1775 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 1776 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 1777 loading="lazy" Err codemadness.org 70 i 1778 /> Err codemadness.org 70 i 1779 </span></p> Err codemadness.org 70 i 1780 <p>Monday was my surgery. Tuesday didn't capture my walks, because I didn't have my phone on me. But I'm moving around again, and eager to get back to regularly-scheduled life.</p> Err codemadness.org 70 i 1781 <p>Thank you for reading this story. I hope it is informative and shocking and helps you think about your health and the health of those around you. For example, Molly - my sister - is definitely going to have to get a colonoscopy ASAP.</p> Err codemadness.org 70 i 1782 <p>Thank you to:</p> Err codemadness.org 70 i 1783 <ul> Err codemadness.org 70 i 1784 <li>My incredible, magical, beautiful <em>wife</em> Carly!</li> Err codemadness.org 70 i 1785 <li>My parents and my mother-in-law and our siblings!</li> Err codemadness.org 70 i 1786 <li>Our friends and family!</li> Err codemadness.org 70 i 1787 <li>UCSF!</li> Err codemadness.org 70 i 1788 <li>OneMedical!</li> Err codemadness.org 70 i 1789 </ul> Err codemadness.org 70 i 1790 <p>Also, if I got anything wrong in this missive from a medical perspective, let me know and I can attept to correct the errata. This is meant to be <em>my understanding</em> of <em>my situation</em>, YMMV.</p> Err codemadness.org 70 i 1791 <blockquote> Err codemadness.org 70 i 1792 <p><strong>2021 Update!</strong> Read Part II of my cancer story: <a href="/chemotherapy">Notes on My Chemotherapy</a></p> Err codemadness.org 70 i 1793 </blockquote><![CDATA[Add Some Ghibli to Your Raspberry Pi]]>https://www.charlieharrington.com/add-some-ghibli-to-your-raspberry-pihttps://www.charlieharrington.com/add-some-ghibli-to-your-raspberry-piFri, 25 Sep 2020 00:00:00 GMT<p>Maybe you caught this week's <a href="https://news.ycombinator.com/item?id=24564775">HN post</a> that <a href="http://www.ghibli.jp/info/013344/">Studio Ghibli</a> dropped 400 images into the public domain. The comments suggested that there's something odd in Japanese copyright law about taking screenshots of films, and that Studio Ghibli might have furnished these to help keep people talking about their films in reviews and whatnot.</p> Err codemadness.org 70 i 1794 <p><span Err codemadness.org 70 i 1795 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 1796 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 1797 > Err codemadness.org 70 i 1798 <a Err codemadness.org 70 i 1799 class="gatsby-resp-image-link" Err codemadness.org 70 i 1800 href="/static/de45ce1eab470f024caad31db72d94e6/0f98f/marnie004.jpg" Err codemadness.org 70 i 1801 style="display: block" Err codemadness.org 70 i 1802 target="_blank" Err codemadness.org 70 i 1803 rel="noopener" Err codemadness.org 70 i 1804 > Err codemadness.org 70 i 1805 <span Err codemadness.org 70 i 1806 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 1807 style="padding-bottom: 53.987730061349694%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAIEAQP/xAAVAQEBAAAAAAAAAAAAAAAAAAABAv/aAAwDAQACEAMQAAABTi+wSl4T/8QAGhABAQACAwAAAAAAAAAAAAAAAQADEgIRIf/aAAgBAQABBQIy5U52sB2e2pf/xAAWEQEBAQAAAAAAAAAAAAAAAAAAERL/2gAIAQMBAT8BjL//xAAWEQEBAQAAAAAAAAAAAAAAAAAAARH/2gAIAQIBAT8BrX//xAAYEAACAwAAAAAAAAAAAAAAAAABEAIhcf/aAAgBAQAGPwK5FnH/AP/EABkQAQEBAQEBAAAAAAAAAAAAAAERAEFRcf/aAAgBAQABPyGKgdSVv1xXFzjnGAimPDf/2gAMAwEAAgADAAAAEDwv/8QAFxEAAwEAAAAAAAAAAAAAAAAAAAERIf/aAAgBAwEBPxCEsLP/xAAXEQEAAwAAAAAAAAAAAAAAAAAAAREh/9oACAECAQE/EJau/8QAHBABAAMAAgMAAAAAAAAAAAAAAQARITFhcaHR/9oACAEBAAE/EGDHInJb6mO2HWu4gvygjAwIF9QkJAoyU/tn/9k='); background-size: cover; display: block;" Err codemadness.org 70 i 1808 ></span> Err codemadness.org 70 i 1809 <img Err codemadness.org 70 i 1810 class="gatsby-resp-image-image" Err codemadness.org 70 i 1811 alt="marnie" Err codemadness.org 70 i 1812 title="marnie" Err codemadness.org 70 i 1813 src="/static/de45ce1eab470f024caad31db72d94e6/6aca1/marnie004.jpg" Err codemadness.org 70 i 1814 srcset="/static/de45ce1eab470f024caad31db72d94e6/d2f63/marnie004.jpg 163w, Err codemadness.org 70 i 1815 /static/de45ce1eab470f024caad31db72d94e6/c989d/marnie004.jpg 325w, Err codemadness.org 70 i 1816 /static/de45ce1eab470f024caad31db72d94e6/6aca1/marnie004.jpg 650w, Err codemadness.org 70 i 1817 /static/de45ce1eab470f024caad31db72d94e6/7c09c/marnie004.jpg 975w, Err codemadness.org 70 i 1818 /static/de45ce1eab470f024caad31db72d94e6/01ab0/marnie004.jpg 1300w, Err codemadness.org 70 i 1819 /static/de45ce1eab470f024caad31db72d94e6/0f98f/marnie004.jpg 1920w" Err codemadness.org 70 i 1820 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 1821 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 1822 loading="lazy" Err codemadness.org 70 i 1823 /> Err codemadness.org 70 i 1824 </a> Err codemadness.org 70 i 1825 </span> </p> Err codemadness.org 70 i 1826 <p>A more useful comment gave a nice tip for scraping the images in a single <code class="language-text">wget</code> command:</p> Err codemadness.org 70 i 1827 <div class="gatsby-highlight" data-language="bash"><pre class="language-bash"><code class="language-bash"><span class="token function">wget</span> --random-wait --timestamping http://www.ghibli.jp/gallery/<span class="token punctuation">{</span>ged,chihiro,karigurashi,ponyo,kokurikozaka,marnie,kaguyahime,kazetachinu<span class="token punctuation">}</span><span class="token punctuation">{</span>001<span class="token punctuation">..</span>050<span class="token punctuation">}</span>.jpg</code></pre></div> Err codemadness.org 70 i 1828 <p>This uses the nice shell trick of using curly braces <code class="language-text">{}</code> to expand commands and <code class="language-text">..</code> to expand in a numerical or alphabetical series. I first encountered this technique in the MIT course for <a href="https://missing.csail.mit.edu/">The Missing Semester of your CS Education</a>, which I highly recommend checking out.</p> Err codemadness.org 70 i 1829 <p>For example, <code class="language-text">echo foo.{png,jpg}</code> will expand to <code class="language-text">echo foo.png foo.jpg</code>, and <code class="language-text">echo {1..10}</code> will expand to <code class="language-text">echo 1 2 3 4 5 6 7 8 9 10</code>. </p> Err codemadness.org 70 i 1830 <p>Perhaps this might prove useful in your terminal travels.</p> Err codemadness.org 70 i 1831 <p>Back to Ghibli. So, now that I've got all these screenshots downloaded, what can I do with them?</p> Err codemadness.org 70 i 1832 <h2>My little Raspberry Pi server</h2> Err codemadness.org 70 i 1833 <p>I've got a <a href="https://www.amazon.com/gp/product/B08C4SK5C3/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=B08C4SK5C3&#x26;linkId=6371e9a8ce20a36236014adee9eaa56e">Raspberry Pi 4 with 8GB RAM</a> on my home network that I can connect to via <a href="https://tailscale.com/">Tailscale</a>. Usually, I like to SSH in there and <code class="language-text">sudo apt-get update</code> and <code class="language-text">sudo apt-get upgrade</code> just to feel alive. But I also have a few other use-cases.</p> Err codemadness.org 70 i 1834 <p>I run a <a href="https://www.plex.tv/">Plex</a> server on the Pi. For a while, I also experimented with running <a href="https://www.home-assistant.io/">Home Assistant</a> on the Pi, but I just don't have that many internet of things devices (yet). I'm also planning to set up Minecraft server on the Pi, but I haven't found a non-sketchy tutorial yet.</p> Err codemadness.org 70 i 1835 <p>Finally, I also occasionally VNC in using VNC Viewer to check out the latest magazines in the awesome Raspberry Pi magazine app, where they have free subscriptions all these awesome "maker" magazines. This alone is worth the price of a Pi, IMHO.</p> Err codemadness.org 70 i 1836 <p>But, I was getting pretty tired of looking at the same stock desktop background everytime I VNC'ed in.</p> Err codemadness.org 70 i 1837 <h3>Using the Ghibli images as the Pi's desktop background</h3> Err codemadness.org 70 i 1838 <p>There's a neat command to change your Pi's desktop background from the terminal:</p> Err codemadness.org 70 i 1839 <div class="gatsby-highlight" data-language="bash"><pre class="language-bash"><code class="language-bash">pcman --set-wallpaper /home/pi/Pictures/ghibli/ged009.jpg</code></pre></div> Err codemadness.org 70 i 1840 <p><span Err codemadness.org 70 i 1841 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 1842 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 1843 > Err codemadness.org 70 i 1844 <a Err codemadness.org 70 i 1845 class="gatsby-resp-image-link" Err codemadness.org 70 i 1846 href="/static/555d1ff4e6dce7d4942dff1af03b1745/0f98f/ged009.jpg" Err codemadness.org 70 i 1847 style="display: block" Err codemadness.org 70 i 1848 target="_blank" Err codemadness.org 70 i 1849 rel="noopener" Err codemadness.org 70 i 1850 > Err codemadness.org 70 i 1851 <span Err codemadness.org 70 i 1852 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 1853 style="padding-bottom: 53.987730061349694%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAEDBAX/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAABls5zRkiP/8QAGRAAAwEBAQAAAAAAAAAAAAAAAQIhAANB/9oACAEBAAEFAucdnhuG9Y3/xAAWEQEBAQAAAAAAAAAAAAAAAAAAESH/2gAIAQMBAT8BlY//xAAVEQEBAAAAAAAAAAAAAAAAAAAAIf/aAAgBAgEBPwFX/8QAFhABAQEAAAAAAAAAAAAAAAAAMRAg/9oACAEBAAY/AmOP/8QAGRABAAMBAQAAAAAAAAAAAAAAAQARIUFh/9oACAEBAAE/ISK3QMuIsSshFbp8nccxF6n/2gAMAwEAAgADAAAAEAAf/8QAFhEBAQEAAAAAAAAAAAAAAAAAAQAR/9oACAEDAQE/EELbJ//EABYRAQEBAAAAAAAAAAAAAAAAAAABEf/aAAgBAgEBPxCVh//EABoQAQADAQEBAAAAAAAAAAAAAAEAESFRMUH/2gAIAQEAAT8QL1GXVrMGxAOjyCGUChQIAoAHtRX4KwyJa8fJ/9k='); background-size: cover; display: block;" Err codemadness.org 70 i 1854 ></span> Err codemadness.org 70 i 1855 <img Err codemadness.org 70 i 1856 class="gatsby-resp-image-image" Err codemadness.org 70 i 1857 alt="marnie" Err codemadness.org 70 i 1858 title="marnie" Err codemadness.org 70 i 1859 src="/static/555d1ff4e6dce7d4942dff1af03b1745/6aca1/ged009.jpg" Err codemadness.org 70 i 1860 srcset="/static/555d1ff4e6dce7d4942dff1af03b1745/d2f63/ged009.jpg 163w, Err codemadness.org 70 i 1861 /static/555d1ff4e6dce7d4942dff1af03b1745/c989d/ged009.jpg 325w, Err codemadness.org 70 i 1862 /static/555d1ff4e6dce7d4942dff1af03b1745/6aca1/ged009.jpg 650w, Err codemadness.org 70 i 1863 /static/555d1ff4e6dce7d4942dff1af03b1745/7c09c/ged009.jpg 975w, Err codemadness.org 70 i 1864 /static/555d1ff4e6dce7d4942dff1af03b1745/01ab0/ged009.jpg 1300w, Err codemadness.org 70 i 1865 /static/555d1ff4e6dce7d4942dff1af03b1745/0f98f/ged009.jpg 1920w" Err codemadness.org 70 i 1866 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 1867 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 1868 loading="lazy" Err codemadness.org 70 i 1869 /> Err codemadness.org 70 i 1870 </a> Err codemadness.org 70 i 1871 </span></p> Err codemadness.org 70 i 1872 <p>Make sure that you've given the proper directory location for your Ghibli images, which, of course, you can get with the <code class="language-text">pwd</code> print working directory command.</p> Err codemadness.org 70 i 1873 <p>Now, I've already admit that I enjoy manually running apt-get updates, but I definitely don't want to be manually changing the background, so how about some automation?</p> Err codemadness.org 70 i 1874 <h3>Automating a rotating background with a cron job</h3> Err codemadness.org 70 i 1875 <p>We can use a simple cron job for this! First, let's write a one-liner command to randomly set the background from an image in our folder:</p> Err codemadness.org 70 i 1876 <div class="gatsby-highlight" data-language="bash"><pre class="language-bash"><code class="language-bash"><span class="token function">ls</span> /home/pi/Pictures/ghibli <span class="token operator">|</span> <span class="token function">shuf</span> -n <span class="token number">1</span> <span class="token operator">|</span> <span class="token function">xargs</span> -I<span class="token punctuation">{</span><span class="token punctuation">}</span> pcmanfm --set-wallpaper /home/pi/Pictures/ghibli/<span class="token punctuation">{</span><span class="token punctuation">}</span></code></pre></div> Err codemadness.org 70 i 1877 <p>It looks kinda hairy, but it's pretty simple. First, we list the contents of our directory, then we used <code class="language-text">shuf</code> to randomly select one of the files. In fact, if you just stopped there, your output would look like this:</p> Err codemadness.org 70 i 1878 <div class="gatsby-highlight" data-language="bash"><pre class="language-bash"><code class="language-bash"><span class="token function">ls</span> /home/pi/Pictures/ghibli <span class="token operator">|</span> <span class="token function">shuf</span> -n <span class="token number">1</span> Err codemadness.org 70 i 1879 karigurashi024.jpg</code></pre></div> Err codemadness.org 70 i 1880 <p>But we want to pipe this randomly selected file to the <code class="language-text">pcmanfm</code> command! I'm using <code class="language-text">xargs</code> to do that in the next part of the command. There's probably an easier way, but this works for me.</p> Err codemadness.org 70 i 1881 <p>So, now that we have our command to randomly select a background, we just need to write a cron job to run this command every... let's say, ten minutes. First, open up your computer's crontab file:</p> Err codemadness.org 70 i 1882 <div class="gatsby-highlight" data-language="bash"><pre class="language-bash"><code class="language-bash"><span class="token function">crontab</span> -e</code></pre></div> Err codemadness.org 70 i 1883 <p>And add this to the bottom:</p> Err codemadness.org 70 i 1884 <div class="gatsby-highlight" data-language="text"><pre class="language-text"><code class="language-text">*/10 * * * * ls /home/pi/Pictures/ghibli | shuf -n 1 | xargs -I{} pcmanfm --set-wallpaper /home/pi/Pictures/ghibli/{}</code></pre></div> Err codemadness.org 70 i 1885 <p>Save the file, and you're done. Right? No. That didn't work for me. Let's look at the cron logs with this command: <code class="language-text">grep CRON /var/log/syslog</code></p> Err codemadness.org 70 i 1886 <div class="gatsby-highlight" data-language="text"><pre class="language-text"><code class="language-text">raspberrypi CRON[3870]: (pi) CMD (DISPLAY=:0.0 &amp;&amp; ls /home/pi/Pictures/ghibli | shuf -n 1 | xargs -I{} pcmanfm --set-wallpaper /home/pi/Pictures/ghibli/{}) Err codemadness.org 70 i 1887 raspberrypi CRON[3866]: (CRON) info (No MTA installed, discarding output)</code></pre></div> Err codemadness.org 70 i 1888 <p>Not super helful. It does confirm that job ran, which is good, though. That rules out cron syntax errors. This <code class="language-text">info</code> log is interesting. Discarding output. I don't like the sound of that. Googling reveals that we need to install a local mail server, so here we go.</p> Err codemadness.org 70 i 1889 <div class="gatsby-highlight" data-language="bash"><pre class="language-bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">apt-get</span> <span class="token function">install</span> postfix</code></pre></div> Err codemadness.org 70 i 1890 <p><span Err codemadness.org 70 i 1891 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 1892 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 1893 > Err codemadness.org 70 i 1894 <a Err codemadness.org 70 i 1895 class="gatsby-resp-image-link" Err codemadness.org 70 i 1896 href="/static/5af659ddcc5a54584ababc4499e3448d/bff4e/postfix.png" Err codemadness.org 70 i 1897 style="display: block" Err codemadness.org 70 i 1898 target="_blank" Err codemadness.org 70 i 1899 rel="noopener" Err codemadness.org 70 i 1900 > Err codemadness.org 70 i 1901 <span Err codemadness.org 70 i 1902 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 1903 style="padding-bottom: 60.122699386503065%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAABYlAAAWJQFJUiTwAAADLklEQVQozy2T60+bZRjG3wmygwiiEUM8Rrc/wCxxE2Nx9KBQWdaVrmxsw8kOnGXQ0g1YEcYGRbCFgtATfd8eGC2UrnUY/TDjCU2IyTKdCfph8T/5eVP34cr1PE/uXNf13M/9KEuT/dwavsroUAfR2T78k93MT/cx5GxluL8ZR7uVgZ4mhj6z0nXRQrOtngtNJpydFmbcTcw7rIx3WZl0nWdmsBVl2dODZ6QLV/85ArMukskvWVwcY8Y7jNd3g6mpa/hmb+D1DjLlGWDsphOPx8W83004MMp65CZfzY3g6r3EaYsB5dulEa6L2+TgWa582o298XtOWX/gtO1nWW9x6uQWNssWduuvsv+twLtnu7A3/oLd9pPw77RdXsDacARl68fvJNk4WXUUw/vnUZQ1QVaQ4ZmnMlTsy1Besk55cVqQouzpNdmvFXi35n/k+fCYj662epQ7iRCP/npELjnNsaM29u/JUlqUF7EcLodKOBIgFFJRIxrRUJSIsKYlCAU1Xn4hxoE9eYqUTU58vEDnFTOKwaDj4R9/svPgvjTXTYk47ldygjzXBpYJhecIBoOoWpSoukwsrpFOrxKPJ6h6PspeqVOUe5wwL+K8akeprj7C9vY2O/88lJec4IBcd19BMMf1AU2EgpIwQiQcQVMlZVQlnogTDkdFUH0iuEnDRz4mnM0oen0N/z5+zN87Dzhj65OCTCHdXuUuYyNpcvkMK7EVouO3Sd6aYC2WYH0jS0xboapCFfOvCwmbLGEi826UesNRFsTNt+SnztBCWXFOiu4W8Lk7xkZ2mUQiTFxdFOEAiXiQVFqVpAFJGBHzXcENeeVNMfGhmEw16D9xYmhpw6i/LFfOUyxFJcKvVoY49LqPg6/NCfs59Iaft2R9UNZvvjInYinBPRHM0dtxn/WUCOpMdVh6b9PQ7kBn7KTquSSV5SleqpDxeDIypTIipSUblMroPFu0KiOzKucpXixLU1mRkvZo9PZ8Q/qOF6XOfo7j7cOYLzownjzDhZZGOhxt2C51U21upVZ6/F6tmXctPbxTU0+t7jAm0wfodW9jtJ3F2Cyf4fhhDA02Jr6Y5j9M8x3dfcgtkAAAAABJRU5ErkJggg=='); background-size: cover; display: block;" Err codemadness.org 70 i 1904 ></span> Err codemadness.org 70 i 1905 <img Err codemadness.org 70 i 1906 class="gatsby-resp-image-image" Err codemadness.org 70 i 1907 alt="postfix" Err codemadness.org 70 i 1908 title="postfix" Err codemadness.org 70 i 1909 src="/static/5af659ddcc5a54584ababc4499e3448d/a6d36/postfix.png" Err codemadness.org 70 i 1910 srcset="/static/5af659ddcc5a54584ababc4499e3448d/222b7/postfix.png 163w, Err codemadness.org 70 i 1911 /static/5af659ddcc5a54584ababc4499e3448d/ff46a/postfix.png 325w, Err codemadness.org 70 i 1912 /static/5af659ddcc5a54584ababc4499e3448d/a6d36/postfix.png 650w, Err codemadness.org 70 i 1913 /static/5af659ddcc5a54584ababc4499e3448d/e548f/postfix.png 975w, Err codemadness.org 70 i 1914 /static/5af659ddcc5a54584ababc4499e3448d/3c492/postfix.png 1300w, Err codemadness.org 70 i 1915 /static/5af659ddcc5a54584ababc4499e3448d/bff4e/postfix.png 2660w" Err codemadness.org 70 i 1916 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 1917 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 1918 loading="lazy" Err codemadness.org 70 i 1919 /> Err codemadness.org 70 i 1920 </a> Err codemadness.org 70 i 1921 </span></p> Err codemadness.org 70 i 1922 <p>You should choose a "Local" installation. Once we have a mail server, we can now inspect the cron job "mail" logs:</p> Err codemadness.org 70 i 1923 <div class="gatsby-highlight" data-language="text"><pre class="language-text"><code class="language-text">sudo tail -f /var/mail/pi</code></pre></div> Err codemadness.org 70 i 1924 <p>After a bunch of email header jargon, we finally see the error:</p> Err codemadness.org 70 i 1925 <div class="gatsby-highlight" data-language="text"><pre class="language-text"><code class="language-text">Cannot open display: Err codemadness.org 70 i 1926 Err codemadness.org 70 i 1927 --1332E5E8FA.1601069882/raspberrypi--</code></pre></div> Err codemadness.org 70 i 1928 <p>Awesome! I mean, the cron job still doesn't work, but at least we have some more info. That's a win. So, what have we learned? It seems like our cron job can't "open" the display. Some more Googling suggests that I need to add an env var for the display, so I add this <code class="language-text">export DISPLAY=:0.0</code> to the beginning on my cron job right after the cron syntax.</p> Err codemadness.org 70 i 1929 <p>Did that fix it? No. But we get a new error message:</p> Err codemadness.org 70 i 1930 <div class="gatsby-highlight" data-language="text"><pre class="language-text"><code class="language-text">Message: x-terminal-emulator has very limited support, consider choose another terminal</code></pre></div> Err codemadness.org 70 i 1931 <p>Cool. Okay, so, what does this one mean? This <a href="https://stackoverflow.com/questions/45873124/pcmanfm-set-wallpaper-fails-on-raspbian-stretch-in-cron">stack overflow answer</a> suggests that I may need to add another env var to my command. Here goes:</p> Err codemadness.org 70 i 1932 <div class="gatsby-highlight" data-language="text"><pre class="language-text"><code class="language-text">*/10 * * * * export DISPLAY=&quot;:0.0&quot; XDG_RUNTIME_DIR=/run/usr/1000 ls /home/pi/Pictures/ghibli | shuf -n 1 | xargs -I{} pcmanfm --set-wallpaper /home/pi/Pictures/ghibli/{}</code></pre></div> Err codemadness.org 70 i 1933 <p>Yes! Our cron job works!</p> Err codemadness.org 70 i 1934 <p><span Err codemadness.org 70 i 1935 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 1936 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 1937 > Err codemadness.org 70 i 1938 <a Err codemadness.org 70 i 1939 class="gatsby-resp-image-link" Err codemadness.org 70 i 1940 href="/static/7088062c77a79c116dd28f9e93926586/0f98f/karigurashi024.jpg" Err codemadness.org 70 i 1941 style="display: block" Err codemadness.org 70 i 1942 target="_blank" Err codemadness.org 70 i 1943 rel="noopener" Err codemadness.org 70 i 1944 > Err codemadness.org 70 i 1945 <span Err codemadness.org 70 i 1946 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 1947 style="padding-bottom: 53.987730061349694%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAMBAgT/xAAVAQEBAAAAAAAAAAAAAAAAAAACA//aAAwDAQACEAMQAAABrIuB0iwj/8QAGxAAAgEFAAAAAAAAAAAAAAAAAAECAxEhMTL/2gAIAQEAAQUCRfCZLqns/8QAFhEAAwAAAAAAAAAAAAAAAAAAAhAx/9oACAEDAQE/ARq//8QAFhEAAwAAAAAAAAAAAAAAAAAAEBEh/9oACAECAQE/AVR//8QAFRABAQAAAAAAAAAAAAAAAAAAEAH/2gAIAQEABj8Ca//EABsQAQACAgMAAAAAAAAAAAAAAAEAEBExIVFx/9oACAEBAAE/IVxDIJvqKGK2rxr/2gAMAwEAAgADAAAAEHT/AP/EABcRAAMBAAAAAAAAAAAAAAAAAAEQMXH/2gAIAQMBAT8QCNX/xAAXEQADAQAAAAAAAAAAAAAAAAAAAREx/9oACAECAQE/ENEVn//EABwQAQADAAIDAAAAAAAAAAAAAAEAESExQVGh8P/aAAgBAQABPxArZwTLgnXzXmUo9w0J9kS37R+mM//Z'); background-size: cover; display: block;" Err codemadness.org 70 i 1948 ></span> Err codemadness.org 70 i 1949 <img Err codemadness.org 70 i 1950 class="gatsby-resp-image-image" Err codemadness.org 70 i 1951 alt="marnie" Err codemadness.org 70 i 1952 title="marnie" Err codemadness.org 70 i 1953 src="/static/7088062c77a79c116dd28f9e93926586/6aca1/karigurashi024.jpg" Err codemadness.org 70 i 1954 srcset="/static/7088062c77a79c116dd28f9e93926586/d2f63/karigurashi024.jpg 163w, Err codemadness.org 70 i 1955 /static/7088062c77a79c116dd28f9e93926586/c989d/karigurashi024.jpg 325w, Err codemadness.org 70 i 1956 /static/7088062c77a79c116dd28f9e93926586/6aca1/karigurashi024.jpg 650w, Err codemadness.org 70 i 1957 /static/7088062c77a79c116dd28f9e93926586/7c09c/karigurashi024.jpg 975w, Err codemadness.org 70 i 1958 /static/7088062c77a79c116dd28f9e93926586/01ab0/karigurashi024.jpg 1300w, Err codemadness.org 70 i 1959 /static/7088062c77a79c116dd28f9e93926586/0f98f/karigurashi024.jpg 1920w" Err codemadness.org 70 i 1960 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 1961 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 1962 loading="lazy" Err codemadness.org 70 i 1963 /> Err codemadness.org 70 i 1964 </a> Err codemadness.org 70 i 1965 </span></p> Err codemadness.org 70 i 1966 <p>What are these <code class="language-text">DISPLAY</code> and <code class="language-text">XDG_RUNTIME_DIR</code>? According to <a href="https://askubuntu.com/questions/872792/what-is-xdg-runtime-dir">this other Stack Overflow answer</a>, <code class="language-text">DISPLAY</code> is an address for your display and <code class="language-text">XDG_RUNTIME_DIR</code> is a place to store temporary files for your user. Probably some more to dig into here, but for now, I'm just going to stare at my VNC Viewer and watch the background change.</p> Err codemadness.org 70 i 1967 <p>After all this Googling and debugging, we've now got all these cute images keeping our computer happy, even when we're not there.</p> Err codemadness.org 70 i 1968 <p>Automating stuff like this is part of the magic of computers. And that's why I think it goes so well with these magical Studio Ghibli images.</p> Err codemadness.org 70 i 1969 <h2>Watching the Studio Ghibli films</h2> Err codemadness.org 70 i 1970 <p>But, now I've got a ticking clock... </p> Err codemadness.org 70 i 1971 <p>I hate spoilers, and I'm sad to say that I've only seen Howl's Moving Castle (after reading the book earlier this year). I loved it, much more so than book. Which means I need to watch all the Ghibli films <em>fast</em>, before I spoil my way through them with my desktop backgrounds.</p> Err codemadness.org 70 i 1972 <p>In our first episode of the <a href="/escaping-web-season-one-retrospective">Escaping Web podcast</a>, Oz and I chatted with Felix Tripier who brought up <a href="https://en.wikipedia.org/wiki/Grave_of_the_Fireflies">Grave of the Fireflies</a>. I didn't know about the film during our conversation, but I've just discovered that it's available on Hulu. I'll be watching it very soon. As for the rest of films, I've heard they're on HBO GOMAXPROPLUS in the US and Netflix everywhere else in the world.</p> Err codemadness.org 70 i 1973 <p>For now, I'm just glad to have these images on my little server whenever I log in. It's a nice happy thing in my life, and I thank the orange website for the tiny dose of inspiration.</p><![CDATA[Robots I Love]]>https://www.charlieharrington.com/robots-i-lovehttps://www.charlieharrington.com/robots-i-loveMon, 24 Aug 2020 00:00:00 GMT<h3>Beware of scissors</h3> Err codemadness.org 70 i 1974 <p>The other day I lopped off a sizeable chunk of my thumbprint while making a robot. The cut? It was one of those bright-red, swiftly-flowing ones, where you're pretty sure you're seeing bone or muscle or some other gross-thing-that-should-probably-stay-inside-your-body. The robot? It was made of cardboard and beer cans:</p> Err codemadness.org 70 i 1975 <p><span Err codemadness.org 70 i 1976 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 1977 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 1978 > Err codemadness.org 70 i 1979 <a Err codemadness.org 70 i 1980 class="gatsby-resp-image-link" Err codemadness.org 70 i 1981 href="/static/9d940d0f21aec7abb6525a0c3097ef1c/5c744/cardboard.png" Err codemadness.org 70 i 1982 style="display: block" Err codemadness.org 70 i 1983 target="_blank" Err codemadness.org 70 i 1984 rel="noopener" Err codemadness.org 70 i 1985 > Err codemadness.org 70 i 1986 <span Err codemadness.org 70 i 1987 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 1988 style="padding-bottom: 133.12883435582822%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAbCAYAAAB836/YAAAACXBIWXMAABYlAAAWJQFJUiTwAAAG3UlEQVRIx0WUeVCU9xnH9w9xgT3YC9ZddsFlYTkFAiyggHIsN8i5IKhccqmIgOKBCh4IRhNB1HgxSVFjaqJWR50x6aTTJKOTmcyk02ozbWc67Uzzh21ipuO0STS1nz67pu07853f+5v3936e73O8r+LZt//kv9c3T54wNzNDZnoasY5wPNkJFGYmUJHnpqZgBdX5WVStyqSxNI/GEp9yaSx+ee8V1RWtQPHdP576Yf9+8eJ/4K+/+ppNfT1kJjlYmRFPcU4GlfnZlOWmU56XTn1xLvUCqC/J9avBB5QgdR4BPvnbYz/kh3/9IHrO98++f7l//nfK8jNxJzkpWpFOWV4mnuUplOakUVuc8yNQID6gwLxlq/yBFI8+f/Cjr2ciX/pP+e7pX7h2+Q3cyS5eiReXmSl4ctIpzE6hRIB18mJj+Soay/6v5op8Aa9E8fHdd7h9dZ73Fk5x4cQkh8YG6WurF3duvFX5dLdW0VJTTFNVoSifZllbazy0rvbQUu2RfRHNlUX+e295Por35o/T1lhGtWc5W7oamZ8Z5/69t/nsw6t8cO0cNy/NMb13kP2jPewb7mBoQxN9a2voaqqkvaGctbUlrJWAbXWlAi5E8c65o5w4PMrl05P88bP3ef7XR7z45g98+/ghj39/n4cPbnPmtX3MTG7n9QNDAu1iW+8aNrc30NtaQ6f3JbjLW+F3qTgnh986eYh7V8/y1e8e8OVvP+LLL17qzw9/wZ9+8yHXFmY5dXTMH3hqbBP7hjoZ7VvLYGeTQGvZ0FxNb0u1OC1BsXuwk1uXZpmf3c/Dj2/yxad3efTpbdEdfn3/Fr/65GdcuzjLdYFemJng2MRWpnb7oF1+6EB7IxvX1bFJtL6+DMXY1i7uXDnBG6/t4eblOT7/6DoPPrjCg5//lPuiT6SeC2en5dlpbl0+yakju/zAg9t72D3QJjVtZqCjkUFRe2MFioM7+rhydpK3Th3k6IFhfnnnJ7x/4zz3blwQzXP32nnOHB/nktT6xsU5FqTWx8YHGR/ewK7N6xnqbhaYl6EuLx0+4PhIN6ePjPL2uSn2bO/m4tnDXJcSvLtwnKsLM7LOMjO1kzOvT8iZV3lzbr+43MHEtg2MSHMGu5ok7Qa2dvocSso7BzoY29rG7NQIFTL5W/rWcPn8NPMn93NBXn7z9GGOTAwzc3iXzOgW9m7vZW5qG9Nj/Yz2t9C/rpaN6+vY0lH/EvjuhVfZJPQ8+aza1lSwtqmU6X2bxdGYdHYX52QuJ3Zu5IBo7+gm5o7tkxr2Mb2nn/3isrulUjq8mi3isqOxHEWrdKZzTaUMdwl7R9oZ6Jb56qjj0O5+hja20NW6mvGRDoYlvTMnpzgxtZ1dA63sHepgckePzKRXxqbSPzbrZMgVGU4bvW21tNYWMNBZQ015HjEOK+31+RweaWZPl4djW6s4us3L2SNDTPSUsrOtgD0dRayvzJI/UQqJrkhWZSVRU7QcRZzVjNNhw53ooDArnih7GNEWA9mJSynNjKM2J4663Hia8xNZV5RE7+pMNtf65MYu5wwGHQZdELnuOKrk+1do1cFELtGTlRhJ3rJIUqLDMevU2I0anGEhWPVqIk0hLBXFWoxEmQ1YTHqWLbWgDdFgNusxG0NIjwnH7bKjSLAaKUyLpjY3iRK3i4LUKAGqsBjUhApYFaREowryy2rU4rKaiLWFkSJApTKAJWESIFRPjHBirQYUOa5wqjJjqc4Wy1lxFCbZSLOocNvUZISrSAgNIlKnxKJZjCE4AE1gACGqQHSaYAICFhGoVKIOVGIL1UkwI4rajGgasl20rkryqyrdQVGcmYokM+XxJjzRIeRGqsmLUJEdHkyKOZh4UyCOECVm1WKMwYsJUwdhk4wckr6iTOrmzY6htziVgYp0WZPpyE+geYWLitRIypdZyXEaWRmlI9+hJTdCQ45dTbZV3BuDcEpDogwqYkK1xPqANo2kpAlkmUVPQVw49W4n/SXJDFel0eNJprsggTXZDqqSLRS5TGRF6KQUGlItauJMwcQYgnGFagQWgsusQxFjX0KEXoslOBBz4CJskkJUSDCpUuA8l4UGd5QAo6lJixColQJXKMuX6uW5NMikxmkUmTREi0OnSJGaGEOczYZZ7+uWyBBCuHQ3XMA+uF0dSJR0PVGiv2IzkBFhIM2uJyVcR7xZS4zAnCYtUTJmDpkCRXJcFMvsAtQZMIZZMViXoJdhVwUuRu9zLR2N0EpZ1EoiRJFSIt8+QrJYqleJ1H6YD+qTAJ0k2O2EhhjQ6MzoQ00YzUaUMn+LAgJYtFiJTqslzGjCLGuE1NsuXfWVyBosqwS0yt6qUWHTqvkP2dowvoW1Jg8AAAAASUVORK5CYII='); background-size: cover; display: block;" Err codemadness.org 70 i 1989 ></span> Err codemadness.org 70 i 1990 <img Err codemadness.org 70 i 1991 class="gatsby-resp-image-image" Err codemadness.org 70 i 1992 alt="cardboard robot" Err codemadness.org 70 i 1993 title="cardboard robot" Err codemadness.org 70 i 1994 src="/static/9d940d0f21aec7abb6525a0c3097ef1c/a6d36/cardboard.png" Err codemadness.org 70 i 1995 srcset="/static/9d940d0f21aec7abb6525a0c3097ef1c/222b7/cardboard.png 163w, Err codemadness.org 70 i 1996 /static/9d940d0f21aec7abb6525a0c3097ef1c/ff46a/cardboard.png 325w, Err codemadness.org 70 i 1997 /static/9d940d0f21aec7abb6525a0c3097ef1c/a6d36/cardboard.png 650w, Err codemadness.org 70 i 1998 /static/9d940d0f21aec7abb6525a0c3097ef1c/e548f/cardboard.png 975w, Err codemadness.org 70 i 1999 /static/9d940d0f21aec7abb6525a0c3097ef1c/5c744/cardboard.png 1206w" Err codemadness.org 70 i 2000 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 2001 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 2002 loading="lazy" Err codemadness.org 70 i 2003 /> Err codemadness.org 70 i 2004 </a> Err codemadness.org 70 i 2005 </span></p> Err codemadness.org 70 i 2006 <p>This little guy is one of many cardboard robots that I've made over the years. During summers, my sister and I would go to Vineland, New Jersey to stay with my aunt and cousins for a glorious week of catching frogs, playing Sega Genesis, eating spoonfuls of iced tea mix, and arts 'n' crafts.</p> Err codemadness.org 70 i 2007 <p>For some reason, we'd always center on a unique theme each year for our arts 'n' crafts. One summer, it was <a href="https://www.charlieharrington.com/create-wonderful-things-be-good-have-fun">Klutz Press friendship bracelets</a>. Another was god's eyes - we made hundreds. Our proudest summer craft of them all? A "working" cardboard R2-D2. If not for a late '90s winter basement flood, Cardboard Artoo would still be with us today.</p> Err codemadness.org 70 i 2008 <p>I decided to try my hand at making another cardboard robot because I've been thinking a lot about them. Mostly because I'm writing a children's novel about robots, but also cause it's summer and that's the sort of thing you do during summer.</p> Err codemadness.org 70 i 2009 <p>There are all kinds of robots, cardboard and not. But there's a certain sort of robot that makes my gears turn. The rest of this post will review my favorite robots (and the kid who loves them).</p> Err codemadness.org 70 i 2010 <h2>Robots I Love</h2> Err codemadness.org 70 i 2011 <h3>R.O.B. (Robotic Operating Buddy)</h3> Err codemadness.org 70 i 2012 <p>It's a robot... for your original Nintendo. I'm embarassed to admit it, but I've never seen a R.O.B. in real-life, despite scouring every local garage sale in New Jersey for years.</p> Err codemadness.org 70 i 2013 <p><span Err codemadness.org 70 i 2014 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 2015 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 600px; " Err codemadness.org 70 i 2016 > Err codemadness.org 70 i 2017 <a Err codemadness.org 70 i 2018 class="gatsby-resp-image-link" Err codemadness.org 70 i 2019 href="/static/e2bd304c9728a8ea5a8c8a3e6c78b650/0a47e/rob.png" Err codemadness.org 70 i 2020 style="display: block" Err codemadness.org 70 i 2021 target="_blank" Err codemadness.org 70 i 2022 rel="noopener" Err codemadness.org 70 i 2023 > Err codemadness.org 70 i 2024 <span Err codemadness.org 70 i 2025 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 2026 style="padding-bottom: 126.38036809815951%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAZCAYAAAAxFw7TAAAACXBIWXMAACTpAAAk6QFQJOf4AAAHFUlEQVQ4y22UeUzb5xnHH0OzNa22aSpr0hxaUtKgJtwIyGEICXEgCeW+jxASSGAkpFAwYA4bfGFsMBh8YAMGgwFzQwIOV4Bw3yFk6tapU6Wq3aKqU6Yqixrbv2evyR9Ttr3So/d9f++rz+/7HO8DQEZ5Qa51glNn6FDEKrT58ukqNOs696ytLIg215d/3tpYefFkY+Xp5tpix9b60p3tzZUz337zl73L89Ngta62Jvi/g8/j2nyRkw1/frZx9o9P13d2tlZwcXoMV+ancXXpMW6szOPa0iw+GruPYyMD8pnJEVicHaeNDPX8Lyw46KrN5YBLEBYSTP8s6Apm3E7Fqkr+67YmFTVpHLI82VgyLz6eNI+PDLzsamtEXZPSWFHOApmYS+vU/ZfCjJspcNT+mO1xBwc45e0tP3bsE9z/0YGXBw8eopycnZHBYFC1VSKcGB0wGdqbUSOv+VdDXbWTXFoJjcpaG3ZxydtAf18f2Lf/gK3d7/bBkSNHKuh0Onp4eKCTkxOeO+dnOXLUHvOy75oNRFmLWv59b5fOt6mhbhfGLWaCWlH3NvA8/Sy4OLvQTp44CZ9+euJDR0enphMnTn5JzOzp6YWHDh02sYuY2N7c8Fjf3vpbaxKISltBaQEws9Khq137NrCzXQdenl4E6rq73/OLvRAaFv7uwUOHHRPi4rZup6VhCasA62ul2QqZFFqbNe/NTk/ZDPS0w+hwL4wZ78PK0vwbGLuIBYi4uw646E/78Yfn8MPfvweVsn73m4Bb/rBSKEQBl4uNDUpmS3MjbK6vwdTEQ9h+skWbm5mizc1OwdLCY3j+3TcAbeSCFZhxK802PCQYnj194jE9NakYfzi6ODoyvCMRVbzkcjjIKyvDRrXyq/4+g2RizJj7aHLswubGBizMzYAVujg/C7PTEwCDPV3AKS22YRUwQSTgBRk69Tj6YBiHBvtQ06AkrhYil1NGFRcWWMQVfLw/1I/jxhGceDiCM48mC3588Yq2trK4C16cm/5PHDPTb2fdunnjxZ0/pGOnvu1VR7vOTGJmllVLqOrKCpSKRdjZ3mqZGBs1TU0YTcuLc6b11SUkrqpWlxeAGG1pYRZAyCsHVn7eu1wO+x+5OdnI8L+A1eJKbFDUWzRKuUmrabA0EaV6XQs1PNCHU+OjlKGzDXu7uyy9hg40Phh4PthneP/+YC88GOoFqKiqsQqkccvYU2XsUgxgMGRSSeWOoq4WNSoFSYQCCdjyZq2i5LIaKufeXczLyTb7+fqgTqveITmwsULQ/PKNu4kJ8ZB1JzOfV8YhZ7inSa34VV1NtZ9GqUiVSatXVfJ6K9wsrhDiF5/fw/y8POrzrCxMiI1GZm7Ooyufhf3S3cMDfHzoNhAXG/vBBf+LeZkZ6X9LT0t9HRUdfSwxIQGEfB6QMEBhXq6Wlc9EEmNTVEQEdTXwMhVwkYFhwcE/kfMzH9jZZbq6us76+19w8Pb2AvCl069Zn9mpU6fRx8cX6T4+y4lJSf7FrMLoQmbuanxMNHq4uVsuMRh443oyxS5mUfK6GpTLqv6pkFV3d+u1YQ4Ox2+5uDgvRoSH2cFpT8/fODk6Btl/bM9xd3efuHI5EL0JnLxh9Pb2Rlc3N+paYiIpHxaSR0ASJsJqSSVVQ5qFolaMHa2NP5MwvXP8uMOot5dnKpwhMmm0d+DG9WswYRw8r9NqSFyyzVGR4aaAwEDzdaJKJq1CUqtUKVFH4kwVFTCxkl9GNTfUmfu69abAAMa2g4PDxKWL/vYQExVBS0qI2/Ps620wdLfp9HIZalnFr/msfKzilVH10ipKIhIiv4yNIn458thFKOAUYa1EQHV3tFr6DO3IJlVPcrt3N8PtWjVo1XJoVtW9r2/RfEuaJSprxJYKdjElYOZhUXoG8osKsVYsQKmIh/XVIlTJJFRro4LqN+isnRufbW96KuUykFaJbaGtSUlrUdeDViXbR7rzT6QtUVVCrklSwTV36JooXbMK1XXVVKOihrQvFaWsFVsUNWLzgEH3uq9Di/2GtlfdnR37v/7qTzDcb6BBeQmLxszOgvzsLLvy0iJKWF6KbBYTK8isb1abWzUKM2mq5h59i2mwW29R10tRJhGgrlGJMpIYEa/MiPimoDlFxPMA/4u7G2vHCb56NZnUV1dMRLgwKyN9TizgYaNCRgBCrJdKUCLkYmkh87t7mRkzGbdSxZGhocn2Rz/5dVx0NKSlpNCMQ10AfnRfOHeWDl5uHsAg8JCgIEgmL8f6g6jw8Fpy8a9J8XHjCTExd/39zp92Puny4aSxH0oKmRAeEgK/P/wxpKakwJ2MdBgfHQSIjYyEuChikREQHRFhkxgXa5uWkmxrBYaHhsIBu4/eE/E5kBQfD34+58DVyQ3GHvTQeJwS25RrSbY3k5NpVoXXk5KgOC8X/g0JzsMMDT4kIQAAAABJRU5ErkJggg=='); background-size: cover; display: block;" Err codemadness.org 70 i 2027 ></span> Err codemadness.org 70 i 2028 <img Err codemadness.org 70 i 2029 class="gatsby-resp-image-image" Err codemadness.org 70 i 2030 alt="rob1" Err codemadness.org 70 i 2031 title="rob1" Err codemadness.org 70 i 2032 src="/static/e2bd304c9728a8ea5a8c8a3e6c78b650/0a47e/rob.png" Err codemadness.org 70 i 2033 srcset="/static/e2bd304c9728a8ea5a8c8a3e6c78b650/222b7/rob.png 163w, Err codemadness.org 70 i 2034 /static/e2bd304c9728a8ea5a8c8a3e6c78b650/ff46a/rob.png 325w, Err codemadness.org 70 i 2035 /static/e2bd304c9728a8ea5a8c8a3e6c78b650/0a47e/rob.png 600w" Err codemadness.org 70 i 2036 sizes="(max-width: 600px) 100vw, 600px" Err codemadness.org 70 i 2037 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 2038 loading="lazy" Err codemadness.org 70 i 2039 /> Err codemadness.org 70 i 2040 </a> Err codemadness.org 70 i 2041 </span></p> Err codemadness.org 70 i 2042 <blockquote> Err codemadness.org 70 i 2043 <p>Source: <a href="https://en.wikipedia.org/wiki/R.O.B.">Wikipedia</a></p> Err codemadness.org 70 i 2044 </blockquote> Err codemadness.org 70 i 2045 <p>These Nintendo ads are just perfection. I'm still more excited for the promise of this system than any game console out today.</p> Err codemadness.org 70 i 2046 <p><span Err codemadness.org 70 i 2047 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 2048 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 2049 > Err codemadness.org 70 i 2050 <a Err codemadness.org 70 i 2051 class="gatsby-resp-image-link" Err codemadness.org 70 i 2052 href="/static/249e6e5d55d9532ba82345dee293de3a/9c538/rob-1.jpg" Err codemadness.org 70 i 2053 style="display: block" Err codemadness.org 70 i 2054 target="_blank" Err codemadness.org 70 i 2055 rel="noopener" Err codemadness.org 70 i 2056 > Err codemadness.org 70 i 2057 <span Err codemadness.org 70 i 2058 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 2059 style="padding-bottom: 129.4478527607362%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAaABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAMBBAUG/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAAB2luUPJCpkdFQL5If/8QAHhAAAQQCAwEAAAAAAAAAAAAAAQACAwQQExIhIjL/2gAIAQEAAQUCcCvSHQc5rFvixYh2iKtzOK/0v//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQMBAT8BH//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQIBAT8BH//EACAQAAEDAgcAAAAAAAAAAAAAAAEAEBECIRIiM0FxkaH/2gAIAQEABj8CsVu2YgLUp7YXiERj8c8N/8QAHBABAQEAAgMBAAAAAAAAAAAAAREAITEQIGFx/9oACAEBAAE/IS8p+YpMPAtxlN+uEYeBwWzvV0Rg7dCE9E//2gAMAwEAAgADAAAAEDDGQP/EABYRAQEBAAAAAAAAAAAAAAAAABABEf/aAAgBAwEBPxA2n//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQIBAT8QH//EAB0QAQEAAgMAAwAAAAAAAAAAAAERACEQMVFBobH/2gAIAQEAAT8QQXa9MZCmu6OsWhfrgloYJFwciugjh9/4WTSe4bwEdj56N5ApYSuPWfVfvH//2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 2060 ></span> Err codemadness.org 70 i 2061 <img Err codemadness.org 70 i 2062 class="gatsby-resp-image-image" Err codemadness.org 70 i 2063 alt="rob2" Err codemadness.org 70 i 2064 title="rob2" Err codemadness.org 70 i 2065 src="/static/249e6e5d55d9532ba82345dee293de3a/6aca1/rob-1.jpg" Err codemadness.org 70 i 2066 srcset="/static/249e6e5d55d9532ba82345dee293de3a/d2f63/rob-1.jpg 163w, Err codemadness.org 70 i 2067 /static/249e6e5d55d9532ba82345dee293de3a/c989d/rob-1.jpg 325w, Err codemadness.org 70 i 2068 /static/249e6e5d55d9532ba82345dee293de3a/6aca1/rob-1.jpg 650w, Err codemadness.org 70 i 2069 /static/249e6e5d55d9532ba82345dee293de3a/7c09c/rob-1.jpg 975w, Err codemadness.org 70 i 2070 /static/249e6e5d55d9532ba82345dee293de3a/01ab0/rob-1.jpg 1300w, Err codemadness.org 70 i 2071 /static/249e6e5d55d9532ba82345dee293de3a/9c538/rob-1.jpg 2550w" Err codemadness.org 70 i 2072 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 2073 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 2074 loading="lazy" Err codemadness.org 70 i 2075 /> Err codemadness.org 70 i 2076 </a> Err codemadness.org 70 i 2077 </span></p> Err codemadness.org 70 i 2078 <p><span Err codemadness.org 70 i 2079 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 2080 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 2081 > Err codemadness.org 70 i 2082 <a Err codemadness.org 70 i 2083 class="gatsby-resp-image-link" Err codemadness.org 70 i 2084 href="/static/1f2df2dc5f2c9d2e7931bd92c78eef19/a0850/rob-2.jpg" Err codemadness.org 70 i 2085 style="display: block" Err codemadness.org 70 i 2086 target="_blank" Err codemadness.org 70 i 2087 rel="noopener" Err codemadness.org 70 i 2088 > Err codemadness.org 70 i 2089 <span Err codemadness.org 70 i 2090 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 2091 style="padding-bottom: 64.41717791411043%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIDBf/EABQBAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhADEAAAAdiNnGAP/8QAGhABAQEAAwEAAAAAAAAAAAAAAQIDABESMf/aAAgBAQABBQK0K30M+T8rMaqfQHR//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAGRAAAwADAAAAAAAAAAAAAAAAAAEREBKB/9oACAEBAAY/AkK3mNiMh//EABoQAAIDAQEAAAAAAAAAAAAAAAABESExQVH/2gAIAQEAAT8hQ0O9vD34gkLZI2oRwCLTEf/aAAwDAQACAAMAAAAQUM//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/ED//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/ED//xAAcEAEBAAICAwAAAAAAAAAAAAABEQAhMUFRYXH/2gAIAQEAAT8QQD7rFp5gYknLSKsnV95zo0tcCK8UFB+neaksXWkcPQeAz//Z'); background-size: cover; display: block;" Err codemadness.org 70 i 2092 ></span> Err codemadness.org 70 i 2093 <img Err codemadness.org 70 i 2094 class="gatsby-resp-image-image" Err codemadness.org 70 i 2095 alt="rob3" Err codemadness.org 70 i 2096 title="rob3" Err codemadness.org 70 i 2097 src="/static/1f2df2dc5f2c9d2e7931bd92c78eef19/6aca1/rob-2.jpg" Err codemadness.org 70 i 2098 srcset="/static/1f2df2dc5f2c9d2e7931bd92c78eef19/d2f63/rob-2.jpg 163w, Err codemadness.org 70 i 2099 /static/1f2df2dc5f2c9d2e7931bd92c78eef19/c989d/rob-2.jpg 325w, Err codemadness.org 70 i 2100 /static/1f2df2dc5f2c9d2e7931bd92c78eef19/6aca1/rob-2.jpg 650w, Err codemadness.org 70 i 2101 /static/1f2df2dc5f2c9d2e7931bd92c78eef19/7c09c/rob-2.jpg 975w, Err codemadness.org 70 i 2102 /static/1f2df2dc5f2c9d2e7931bd92c78eef19/01ab0/rob-2.jpg 1300w, Err codemadness.org 70 i 2103 /static/1f2df2dc5f2c9d2e7931bd92c78eef19/a0850/rob-2.jpg 4096w" Err codemadness.org 70 i 2104 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 2105 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 2106 loading="lazy" Err codemadness.org 70 i 2107 /> Err codemadness.org 70 i 2108 </a> Err codemadness.org 70 i 2109 </span></p> Err codemadness.org 70 i 2110 <p><span Err codemadness.org 70 i 2111 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 2112 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 2113 > Err codemadness.org 70 i 2114 <a Err codemadness.org 70 i 2115 class="gatsby-resp-image-link" Err codemadness.org 70 i 2116 href="/static/919afde0ddef82184e8b12c4f32a0574/9c538/rob-3.jpg" Err codemadness.org 70 i 2117 style="display: block" Err codemadness.org 70 i 2118 target="_blank" Err codemadness.org 70 i 2119 rel="noopener" Err codemadness.org 70 i 2120 > Err codemadness.org 70 i 2121 <span Err codemadness.org 70 i 2122 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 2123 style="padding-bottom: 129.4478527607362%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAaABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAMFAgH/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAABrcalHjBZ6auYDZX/xAAcEAACAgIDAAAAAAAAAAAAAAABAgADERIQEzH/2gAIAQEAAQUCJOctF8sfRFuJeNW2vUFVDlYABx//xAAVEQEBAAAAAAAAAAAAAAAAAAARIP/aAAgBAwEBPwFj/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAHhAAAQMEAwAAAAAAAAAAAAAAAAECERASIjEhQWH/2gAIAQEABj8COzkV0SI1W79ouM3bLspEWmqf/8QAHhABAAIBBAMAAAAAAAAAAAAAAQARECExQWFRcZH/2gAIAQEAAT8hKgX5iN3m5xYcQvBq1LYQKLrXXghx00q524RmwA9GP//aAAwDAQACAAMAAAAQ58/M/8QAFhEBAQEAAAAAAAAAAAAAAAAAARAR/9oACAEDAQE/EEDk2f/EABURAQEAAAAAAAAAAAAAAAAAABAR/9oACAECAQE/EIQ//8QAHhAAAgMAAgMBAAAAAAAAAAAAAREAITEQUUFhgaH/2gAIAQEAAT8QXLujBc3boZCgJHsIrWKmTZA37Bg+olEHiHBzrY0tIb8CEwgAEmkB1QbvtwyY0aF+S2xpddA4/9k='); background-size: cover; display: block;" Err codemadness.org 70 i 2124 ></span> Err codemadness.org 70 i 2125 <img Err codemadness.org 70 i 2126 class="gatsby-resp-image-image" Err codemadness.org 70 i 2127 alt="rob4" Err codemadness.org 70 i 2128 title="rob4" Err codemadness.org 70 i 2129 src="/static/919afde0ddef82184e8b12c4f32a0574/6aca1/rob-3.jpg" Err codemadness.org 70 i 2130 srcset="/static/919afde0ddef82184e8b12c4f32a0574/d2f63/rob-3.jpg 163w, Err codemadness.org 70 i 2131 /static/919afde0ddef82184e8b12c4f32a0574/c989d/rob-3.jpg 325w, Err codemadness.org 70 i 2132 /static/919afde0ddef82184e8b12c4f32a0574/6aca1/rob-3.jpg 650w, Err codemadness.org 70 i 2133 /static/919afde0ddef82184e8b12c4f32a0574/7c09c/rob-3.jpg 975w, Err codemadness.org 70 i 2134 /static/919afde0ddef82184e8b12c4f32a0574/01ab0/rob-3.jpg 1300w, Err codemadness.org 70 i 2135 /static/919afde0ddef82184e8b12c4f32a0574/9c538/rob-3.jpg 2550w" Err codemadness.org 70 i 2136 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 2137 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 2138 loading="lazy" Err codemadness.org 70 i 2139 /> Err codemadness.org 70 i 2140 </a> Err codemadness.org 70 i 2141 </span></p> Err codemadness.org 70 i 2142 <blockquote> Err codemadness.org 70 i 2143 <p>Source: <a href="https://twitter.com/heyphilsummers/status/1199532600911683585">Twitter</a></p> Err codemadness.org 70 i 2144 </blockquote> Err codemadness.org 70 i 2145 <p>R.O.B. only ever worked with two Nintendo games. From what I've read, neither is very fun. But I'm sure there are some great ROM-hacks out there with more robotic operating buddy interactions.</p> Err codemadness.org 70 i 2146 <h3>Johnny 5</h3> Err codemadness.org 70 i 2147 <p>Duh.</p> Err codemadness.org 70 i 2148 <p>Johnny 5 looks a lot like R.O.B., except with more nuclear-weapons. He loves reading, loves input, loves New York City. A loyal friend, and perhaps a bit too gullible for his own good.</p> Err codemadness.org 70 i 2149 <p><span Err codemadness.org 70 i 2150 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 2151 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 564px; " Err codemadness.org 70 i 2152 > Err codemadness.org 70 i 2153 <a Err codemadness.org 70 i 2154 class="gatsby-resp-image-link" Err codemadness.org 70 i 2155 href="/static/def1bd3463f03cf94b8a53217bafb621/7723c/johnny5.jpg" Err codemadness.org 70 i 2156 style="display: block" Err codemadness.org 70 i 2157 target="_blank" Err codemadness.org 70 i 2158 rel="noopener" Err codemadness.org 70 i 2159 > Err codemadness.org 70 i 2160 <span Err codemadness.org 70 i 2161 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 2162 style="padding-bottom: 123.92638036809815%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAZABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAUBAwQC/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhADEAAAAWlF+BGxIq/GzktOQ//EAB0QAAICAQUAAAAAAAAAAAAAAAIDAAExEhMUICL/2gAIAQEAAQUCxSz9QsCquRG6rBYHu9P/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/AR//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/AR//xAAcEAABBAMBAAAAAAAAAAAAAAACAAEQESAhMUH/2gAIAQEABj8C7SojYpffsUKHH//EABwQAQEBAAIDAQAAAAAAAAAAAAERABAxIVFhgf/aAAgBAQABPyFRVH06flRl60xs+9GFQMT9c4s7HBsSPZrwcf/aAAwDAQACAAMAAAAQnwGC/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPxAf/8QAFREBAQAAAAAAAAAAAAAAAAAAASD/2gAIAQIBAT8QI//EAB8QAQACAQMFAAAAAAAAAAAAAAEAESExUWEQQXGBof/aAAgBAQABPxA9QHAMrUrAUCi796Ri2N2ws7ZMspNBuW8mxf2LMB28LmsRwvkt9IbrPLprjP/Z'); background-size: cover; display: block;" Err codemadness.org 70 i 2163 ></span> Err codemadness.org 70 i 2164 <img Err codemadness.org 70 i 2165 class="gatsby-resp-image-image" Err codemadness.org 70 i 2166 alt="johnny-5" Err codemadness.org 70 i 2167 title="johnny-5" Err codemadness.org 70 i 2168 src="/static/def1bd3463f03cf94b8a53217bafb621/7723c/johnny5.jpg" Err codemadness.org 70 i 2169 srcset="/static/def1bd3463f03cf94b8a53217bafb621/d2f63/johnny5.jpg 163w, Err codemadness.org 70 i 2170 /static/def1bd3463f03cf94b8a53217bafb621/c989d/johnny5.jpg 325w, Err codemadness.org 70 i 2171 /static/def1bd3463f03cf94b8a53217bafb621/7723c/johnny5.jpg 564w" Err codemadness.org 70 i 2172 sizes="(max-width: 564px) 100vw, 564px" Err codemadness.org 70 i 2173 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 2174 loading="lazy" Err codemadness.org 70 i 2175 /> Err codemadness.org 70 i 2176 </a> Err codemadness.org 70 i 2177 </span></p> Err codemadness.org 70 i 2178 <blockquote> Err codemadness.org 70 i 2179 <p>Source: <a href="https://synthiam.com/Community/Questions/Original-Movie-Rc-Johnny-5-For-Sale-6415">Synthiam</a></p> Err codemadness.org 70 i 2180 </blockquote> Err codemadness.org 70 i 2181 <p>Major spoiler-alert for Short Circuit 2, but this action sequence gets me every time:</p> Err codemadness.org 70 i 2182 <iframe width="720" height="415" src="https://www.youtube.com/embed/POxMp61Ksbk" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> Err codemadness.org 70 i 2183 <h3>Wall-E</h3> Err codemadness.org 70 i 2184 <p>What do you get when you cross R.O.B., Johnny 5, and a Tonka truck? This lil' garbage-collecting cutie!</p> Err codemadness.org 70 i 2185 <p><span Err codemadness.org 70 i 2186 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 2187 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 2188 > Err codemadness.org 70 i 2189 <a Err codemadness.org 70 i 2190 class="gatsby-resp-image-link" Err codemadness.org 70 i 2191 href="/static/a0029b6a0a4cd8dce5007aece8b5c0e9/eea4a/walle.jpg" Err codemadness.org 70 i 2192 style="display: block" Err codemadness.org 70 i 2193 target="_blank" Err codemadness.org 70 i 2194 rel="noopener" Err codemadness.org 70 i 2195 > Err codemadness.org 70 i 2196 <span Err codemadness.org 70 i 2197 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 2198 style="padding-bottom: 79.75460122699387%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAQABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAMF/8QAFAEBAAAAAAAAAAAAAAAAAAAAA//aAAwDAQACEAMQAAAB0IYxCuiU/wD/xAAaEAEAAgMBAAAAAAAAAAAAAAABAAIDESIz/9oACAEBAAEFAlN06tl9LXQcqRdz/8QAFhEBAQEAAAAAAAAAAAAAAAAAARAh/9oACAEDAQE/AQE2f//EABYRAAMAAAAAAAAAAAAAAAAAAAABEf/aAAgBAgEBPwF1FP/EABoQAAIDAQEAAAAAAAAAAAAAAAARAQIxcSH/2gAIAQEABj8CjEbWeFjSF5wbP//EABsQAAICAwEAAAAAAAAAAAAAAAABESExUWFB/9oACAEBAAE/IWIJP7OB01VXWwjSunRxTVs8iTKZ/9oADAMBAAIAAwAAABCb3//EABYRAQEBAAAAAAAAAAAAAAAAAAAhUf/aAAgBAwEBPxDXEf/EABcRAQEBAQAAAAAAAAAAAAAAAAEAETH/2gAIAQIBAT8QSYcif//EABwQAQADAQEAAwAAAAAAAAAAAAEAESFBMWFxgf/aAAgBAQABPxBQuFPZyK4WnDTfP2KgpH79yhFhVnIrNrtWPiDoL1bn/9k='); background-size: cover; display: block;" Err codemadness.org 70 i 2199 ></span> Err codemadness.org 70 i 2200 <img Err codemadness.org 70 i 2201 class="gatsby-resp-image-image" Err codemadness.org 70 i 2202 alt="wall-e" Err codemadness.org 70 i 2203 title="wall-e" Err codemadness.org 70 i 2204 src="/static/a0029b6a0a4cd8dce5007aece8b5c0e9/6aca1/walle.jpg" Err codemadness.org 70 i 2205 srcset="/static/a0029b6a0a4cd8dce5007aece8b5c0e9/d2f63/walle.jpg 163w, Err codemadness.org 70 i 2206 /static/a0029b6a0a4cd8dce5007aece8b5c0e9/c989d/walle.jpg 325w, Err codemadness.org 70 i 2207 /static/a0029b6a0a4cd8dce5007aece8b5c0e9/6aca1/walle.jpg 650w, Err codemadness.org 70 i 2208 /static/a0029b6a0a4cd8dce5007aece8b5c0e9/7c09c/walle.jpg 975w, Err codemadness.org 70 i 2209 /static/a0029b6a0a4cd8dce5007aece8b5c0e9/eea4a/walle.jpg 1280w" Err codemadness.org 70 i 2210 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 2211 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 2212 loading="lazy" Err codemadness.org 70 i 2213 /> Err codemadness.org 70 i 2214 </a> Err codemadness.org 70 i 2215 </span></p> Err codemadness.org 70 i 2216 <blockquote> Err codemadness.org 70 i 2217 <p>Source: <a href="https://gsouto-digitalteacher.blogspot.com/2012/04/wall-e-as-green-resource-for-earth-day.html">Blogspot</a></p> Err codemadness.org 70 i 2218 </blockquote> Err codemadness.org 70 i 2219 <p>It's probably becoming quite clear that I'm drawn to a rectangular face on a telescopic neck with tread-like wheels. That's just my type.</p> Err codemadness.org 70 i 2220 <p>I also just discovered this video of someone's real-life Wall-E, and it's frightenly real-looking. Maybe this means I'll get to meet a Wall-E one day, hopefully not on a post-apocalyptic wasteland Earth.</p> Err codemadness.org 70 i 2221 <iframe width="720" height="415" src="https://www.youtube.com/embed/7oVSaUWeKt0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> Err codemadness.org 70 i 2222 <h3>The flying robots from *Batteries Not Included</h3> Err codemadness.org 70 i 2223 <p>I don't remember much about this movie, other than that my sister and I watched the recorded-from-TV VHS tape all the time, and there were these super cute baby flying robots who lived with a bunch of old people in an apartment building in New York City.</p> Err codemadness.org 70 i 2224 <p><span Err codemadness.org 70 i 2225 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 2226 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 2227 > Err codemadness.org 70 i 2228 <a Err codemadness.org 70 i 2229 class="gatsby-resp-image-link" Err codemadness.org 70 i 2230 href="/static/b82a9f26dcde56c27d022b62cf3e394d/7de01/batteries.png" Err codemadness.org 70 i 2231 style="display: block" Err codemadness.org 70 i 2232 target="_blank" Err codemadness.org 70 i 2233 rel="noopener" Err codemadness.org 70 i 2234 > Err codemadness.org 70 i 2235 <span Err codemadness.org 70 i 2236 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 2237 style="padding-bottom: 149.07975460122697%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAACXBIWXMAABYlAAAWJQFJUiTwAAAFqklEQVRIx62UeUxUVxTG3z9N2qRpUm20tTWNUWnUumuF4lLFRomNW4vbICiISzUV2QRFrBGFuhS1IAguoFVRwCioICoqEZlBWcQiiwszwDjMwjIzsswCvz4WAYmapvHm3dyc5X73fOedcwTe8xLeP2Brq/h177bV2kvX2qnraevt16lA6BLa5JaWjm21duyecufZ5dvD3hO8i7LVavlPlMx6PRaT6TXdaxFampp45ONFoZ83L04cQ19WhvpaKupz8ShEWZWYiPZOBrXX0tDduc3j8ENUJMRTe/MGtbcyUEuzu9m1toiURaFcdH60LZBcZ2fub/Lk3rIl3F+8mAdrV5O32oOsRb+QuXIFuZs2URoWxr2ZDtxZ5U5OgD+569djaaPdGaXQVKGg8ekTdDkySo8fRR57jJLoaMpv3qRG1NdVVFD3vBx1YQG6x0U01tdTI5ejKylGVZCP7smTLurNOi1C+a5gsuc4UuDqQpGXJ4WSZSjOnKY8OoryiL9Qx59BnXKJ6rSrlPn6UJ16BU3yRSoPHaBMZKU8FUd1UkKXLGjy8pBnZFCRfp1nycmoZDKUWXcp8vEhW6Qp8/Agx82dpxcSkUkkyFa6Il26FKmYHpmbG1nLl5MdtI0HzhIKxfOthW3UaDDqdDSIf9VYXY1epP6yro56hXjW1qKvrGy3G6vVNBqNGJQvMKhU4k95VWu99v/ulLY+aO8EuruibbW8Am/TveXR1jf4vJFyz9ZqaWnlXe351uHQfaFdoqG5uxtMFutbH+wNKvQ2WKwd+UvPKeLYhQxMZgtV+iYeq/SoNTWYXxreCSr0zturFbQ3isHD7Vm9K46YrGecz1dSKlfx0mTF2tm3ba3WG1Sgy9ihqDc2cCj1EUMW+PPpYFv8Q/Yhe15NtbaWZ4oqMu/mUCKvem1C9YxY6Jm3iqoqzt54wJHUfKR5WZzNzOW+XEtaXinh4UeICI8mPjWT/X9FEht7EkNdzWug3QO2na8VnVbDK5Om2UJRrYVMuYHEhwrC484TuGU76+LS2H8+jYA1q7hxMaEjVT0qoGvAtlhMWA0amsoe8FRVQ1qZhgJlPUXaRtQNVkrrrWRUGDglLSFdjFhlMNFsqKFBWyUCtnRO9c4cNpnNKJ/+w3NpGrL4SFISz5NZrECpb+4ocHH4GsTcag0i+Eszt4oruV6q4mrUbrKjAtAXXsNUq+ig3CCiPpTepSA2lGhvCe6uEjZ7baRSpcZsttLQ0IjeYESt1ohlo21/oEnMi0apYM0cO7wWOXApZC0lKREYtUoEdXMrxelJ7HB2ZMLQgUz8+jMS4qIxNpooKa/gbNJFdofuYefuUCJPnuFKuji96+rbo7l+wJ/tTlPZMPd7InxdqK8qQ7iTcJzcc4eZbzeMVcuXIMu8yQtxgkSdTmBj4A6mzHVi1EQ7pvy0kKVrfmOJ+1p2hoQStncffqtX4LvEAf+fbTkR7Mn96xcQNkic2OA8n0C3BWilyZjrVKRcTcPV73eGjrdj4NDhjJ5ky7DRY/nKZjgj7Kcz0X4Kk+0n8+247xgwdBjzpo/jeJAbsx1mIthOnsFMe1txgEZSl3yQlCAX1nm4M26qA/0G2TBv1gySg9eQfXgLkd6ujB0/rh3EdpId3sudCHRZgGT2NMYMt8FOxBJmOPxIzA5vkvf5kh8XQsiGZUwUL33cpx+Dh43Af8V8FKd3UnzmD7Ijt7LNbSEf9u3PyFFjiA/2pfhUKIc2ujDexoZpP4iACx1nUZh0hPyYHdz+049YvxWMHTUS4aNPsB0/VoxiAZf3evH3Vg8OeLpyzMeFvl98yaAh35AXdwD52YMkBbiT5OlETMBGhIS92yhIPILqUjjXwgJI2CxhmeM0PujTnznT7Ij1X8nl4HXki9FJDweRvHM9fT8fwIQxY0jf48VR319xnT2FmFWO5J0I41+xFtNJHdHuVgAAAABJRU5ErkJggg=='); background-size: cover; display: block;" Err codemadness.org 70 i 2238 ></span> Err codemadness.org 70 i 2239 <img Err codemadness.org 70 i 2240 class="gatsby-resp-image-image" Err codemadness.org 70 i 2241 alt="batteries robots" Err codemadness.org 70 i 2242 title="batteries robots" Err codemadness.org 70 i 2243 src="/static/b82a9f26dcde56c27d022b62cf3e394d/a6d36/batteries.png" Err codemadness.org 70 i 2244 srcset="/static/b82a9f26dcde56c27d022b62cf3e394d/222b7/batteries.png 163w, Err codemadness.org 70 i 2245 /static/b82a9f26dcde56c27d022b62cf3e394d/ff46a/batteries.png 325w, Err codemadness.org 70 i 2246 /static/b82a9f26dcde56c27d022b62cf3e394d/a6d36/batteries.png 650w, Err codemadness.org 70 i 2247 /static/b82a9f26dcde56c27d022b62cf3e394d/7de01/batteries.png 794w" Err codemadness.org 70 i 2248 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 2249 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 2250 loading="lazy" Err codemadness.org 70 i 2251 /> Err codemadness.org 70 i 2252 </a> Err codemadness.org 70 i 2253 </span></p> Err codemadness.org 70 i 2254 <blockquote> Err codemadness.org 70 i 2255 <p>Source: <a href="https://play.google.com/store/movies/details?id=lfDVLChs2jI&#x26;gl=US&#x26;utm_source=na_Med&#x26;utm_medium=hasem&#x26;utm_campaign=MoviesPLA&#x26;pcampaignid=MKT-DR-na-us-all-Med-pla-mo-Evergreen-Dec1115-1-movieslibrary&#x26;gclid=CjwKCAjwyo36BRAXEiwA24CwGWL_psFBrrF21EnfNQPDkkWrr37zjejRvlynYt1oSgr2cXgp5DmPyhoCppwQAvD_BwE&#x26;gclsrc=aw.ds">Google Play Store</a></p> Err codemadness.org 70 i 2256 </blockquote> Err codemadness.org 70 i 2257 <p>I think these robots might actually be aliens, but I'm not sure, so let's keep 'em around.</p> Err codemadness.org 70 i 2258 <h3>2-XL</h3> Err codemadness.org 70 i 2259 <p>I'm all about using robots for learning (see my post on <a href="/mindstorms">Mindstorms, Seymour Papert, and his cute LOGO Turtle robots for teaching kids how to program computers</a>), and 2-XL was my first introduction to robot-powered-learning.</p> Err codemadness.org 70 i 2260 <p><span Err codemadness.org 70 i 2261 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 2262 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 2263 > Err codemadness.org 70 i 2264 <a Err codemadness.org 70 i 2265 class="gatsby-resp-image-link" Err codemadness.org 70 i 2266 href="/static/e427b0ab3f3772309062f6c535faf3a6/eea4a/2-xl.jpg" Err codemadness.org 70 i 2267 style="display: block" Err codemadness.org 70 i 2268 target="_blank" Err codemadness.org 70 i 2269 rel="noopener" Err codemadness.org 70 i 2270 > Err codemadness.org 70 i 2271 <span Err codemadness.org 70 i 2272 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 2273 style="padding-bottom: 132.51533742331287%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAQBAwUG/8QAFQEBAQAAAAAAAAAAAAAAAAAAAgH/2gAMAwEAAhADEAAAAczRU3wuZGhElyC6Rws//8QAHRAAAgIBBQAAAAAAAAAAAAAAAQIAESEDBBATM//aAAgBAQABBQJVsjaXCuU9O/Thy1UwWoowQDK4/8QAFhEBAQEAAAAAAAAAAAAAAAAAEAER/9oACAEDAQE/AYaf/8QAFxEBAAMAAAAAAAAAAAAAAAAAAQAQEf/aAAgBAgEBPwFZt//EABsQAAICAwEAAAAAAAAAAAAAAAERABAgMXHh/9oACAEBAAY/Ap5aBfIa2sf/xAAaEAEBAQADAQAAAAAAAAAAAAABEQAhMVFB/9oACAEBAAE/IZxNciycL00UeYQN6c05XzDR6ua+O8woK59d9BhCmAdGAhv/2gAMAwEAAgADAAAAEFs5Dv/EABgRAQEBAQEAAAAAAAAAAAAAAAEAETEh/9oACAEDAQE/EA8CyEcn12//xAAYEQADAQEAAAAAAAAAAAAAAAAAARExUf/aAAgBAgEBPxDSuCE6JH//xAAdEAEAAgIDAQEAAAAAAAAAAAABABEhMUFRYXGB/9oACAEBAAE/ELUwsN1l1LB7qDyPWr+kRnaR/IaNKLOqqbE7ovP1xDLEFU8ZmZqrI96gjgkOzwinOVcmYCkgWTFAHQVHMnE//9k='); background-size: cover; display: block;" Err codemadness.org 70 i 2274 ></span> Err codemadness.org 70 i 2275 <img Err codemadness.org 70 i 2276 class="gatsby-resp-image-image" Err codemadness.org 70 i 2277 alt="2xl" Err codemadness.org 70 i 2278 title="2xl" Err codemadness.org 70 i 2279 src="/static/e427b0ab3f3772309062f6c535faf3a6/6aca1/2-xl.jpg" Err codemadness.org 70 i 2280 srcset="/static/e427b0ab3f3772309062f6c535faf3a6/d2f63/2-xl.jpg 163w, Err codemadness.org 70 i 2281 /static/e427b0ab3f3772309062f6c535faf3a6/c989d/2-xl.jpg 325w, Err codemadness.org 70 i 2282 /static/e427b0ab3f3772309062f6c535faf3a6/6aca1/2-xl.jpg 650w, Err codemadness.org 70 i 2283 /static/e427b0ab3f3772309062f6c535faf3a6/7c09c/2-xl.jpg 975w, Err codemadness.org 70 i 2284 /static/e427b0ab3f3772309062f6c535faf3a6/eea4a/2-xl.jpg 1280w" Err codemadness.org 70 i 2285 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 2286 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 2287 loading="lazy" Err codemadness.org 70 i 2288 /> Err codemadness.org 70 i 2289 </a> Err codemadness.org 70 i 2290 </span></p> Err codemadness.org 70 i 2291 <blockquote> Err codemadness.org 70 i 2292 <p>Source: <a href="https://en.wikipedia.org/wiki/2-XL">Wikipedia</a></p> Err codemadness.org 70 i 2293 </blockquote> Err codemadness.org 70 i 2294 <p>We got our 2-XL at a garage sale (garage sales were things of wonder to me as a child). Yes, we had the original 2-XL, the eight-track one. In fact, 2-XL was my first and only interaction with an eight-track system. In the early `90s, Tiger Electronics must have bought 2-XL, and they came out with a cassette-version. </p> Err codemadness.org 70 i 2295 <p><span Err codemadness.org 70 i 2296 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 2297 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 500px; " Err codemadness.org 70 i 2298 > Err codemadness.org 70 i 2299 <a Err codemadness.org 70 i 2300 class="gatsby-resp-image-link" Err codemadness.org 70 i 2301 href="/static/b4f82ab27f934ed502846b4686fb90e3/41099/2-xl-cassette.jpg" Err codemadness.org 70 i 2302 style="display: block" Err codemadness.org 70 i 2303 target="_blank" Err codemadness.org 70 i 2304 rel="noopener" Err codemadness.org 70 i 2305 > Err codemadness.org 70 i 2306 <span Err codemadness.org 70 i 2307 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 2308 style="padding-bottom: 78.52760736196319%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAQABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAQBAgP/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAABlpasNmRX/8QAGBABAQEBAQAAAAAAAAAAAAAAAQIDABH/2gAIAQEAAQUC0U6X2evNrinKTQT/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAaEAABBQEAAAAAAAAAAAAAAAAAARAREiEx/9oACAEBAAY/AsfCsHFP/8QAHBAAAgICAwAAAAAAAAAAAAAAAAERQRAhMXGh/9oACAEBAAE/IVXOeyId3hW0Erc1b0iWeB//2gAMAwEAAgADAAAAEIsP/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPxA//8QAFREBAQAAAAAAAAAAAAAAAAAAARD/2gAIAQIBAT8QJ//EABwQAQACAgMBAAAAAAAAAAAAAAEAESExQVFxkf/aAAgBAQABPxBLVAKCh6xnkaBTV8xcxiN0mcPYwE3rfoYedw0zXdXPs//Z'); background-size: cover; display: block;" Err codemadness.org 70 i 2309 ></span> Err codemadness.org 70 i 2310 <img Err codemadness.org 70 i 2311 class="gatsby-resp-image-image" Err codemadness.org 70 i 2312 alt="2xl cassette version" Err codemadness.org 70 i 2313 title="2xl cassette version" Err codemadness.org 70 i 2314 src="/static/b4f82ab27f934ed502846b4686fb90e3/41099/2-xl-cassette.jpg" Err codemadness.org 70 i 2315 srcset="/static/b4f82ab27f934ed502846b4686fb90e3/d2f63/2-xl-cassette.jpg 163w, Err codemadness.org 70 i 2316 /static/b4f82ab27f934ed502846b4686fb90e3/c989d/2-xl-cassette.jpg 325w, Err codemadness.org 70 i 2317 /static/b4f82ab27f934ed502846b4686fb90e3/41099/2-xl-cassette.jpg 500w" Err codemadness.org 70 i 2318 sizes="(max-width: 500px) 100vw, 500px" Err codemadness.org 70 i 2319 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 2320 loading="lazy" Err codemadness.org 70 i 2321 /> Err codemadness.org 70 i 2322 </a> Err codemadness.org 70 i 2323 </span></p> Err codemadness.org 70 i 2324 <blockquote> Err codemadness.org 70 i 2325 <p>Source: <a href="https://en.wikipedia.org/wiki/2-XL">Wikipedia</a></p> Err codemadness.org 70 i 2326 </blockquote> Err codemadness.org 70 i 2327 <p>But I'll always prefer our smart-alecky 8-track 2-XL, and my fond memories of jamming catridges into his belly, wishing that he was a Nintendo Entertainment System instead.</p> Err codemadness.org 70 i 2328 <h3>Mega Man X</h3> Err codemadness.org 70 i 2329 <p>When I was a kid, I was pretty sure that one day I was going to become Mega Man X. Buried alive in a weird time capsule, awokened years later to avenge my creator, upgrading my body with strange new powers.</p> Err codemadness.org 70 i 2330 <p><span Err codemadness.org 70 i 2331 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 2332 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 500px; " Err codemadness.org 70 i 2333 > Err codemadness.org 70 i 2334 <a Err codemadness.org 70 i 2335 class="gatsby-resp-image-link" Err codemadness.org 70 i 2336 href="/static/39d29464655aae0ce2f0e13229322f16/41099/mmx.jpg" Err codemadness.org 70 i 2337 style="display: block" Err codemadness.org 70 i 2338 target="_blank" Err codemadness.org 70 i 2339 rel="noopener" Err codemadness.org 70 i 2340 > Err codemadness.org 70 i 2341 <span Err codemadness.org 70 i 2342 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 2343 style="padding-bottom: 73.61963190184049%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAIE/8QAFQEBAQAAAAAAAAAAAAAAAAAAAgH/2gAMAwEAAhADEAAAAYZjmRQL/8QAGxABAAICAwAAAAAAAAAAAAAAAQACAxESEyH/2gAIAQEAAQUCrxYgK+uYq9jNk//EABYRAQEBAAAAAAAAAAAAAAAAAAEQEf/aAAgBAwEBPwHFn//EABYRAAMAAAAAAAAAAAAAAAAAAAEQEv/aAAgBAgEBPwESv//EABoQAAIDAQEAAAAAAAAAAAAAAAABESExkTL/2gAIAQEABj8CxcLwdLhEFo8o/8QAGxAAAgMAAwAAAAAAAAAAAAAAAAERITFBUWH/2gAIAQEAAT8h51XgiKIRqxY2K0t7Zg1OCSw//9oADAMBAAIAAwAAABA8D//EABcRAQEBAQAAAAAAAAAAAAAAAAEAMRH/2gAIAQMBAT8Q50Izb//EABYRAQEBAAAAAAAAAAAAAAAAAAExAP/aAAgBAgEBPxBBGZs3/8QAHBABAAMAAwEBAAAAAAAAAAAAAQARMSFBUZHR/9oACAEBAAE/EFakNJR1KLVqHhXziKBUgcPY2G6TY2LmeSw0ePf2KUBbff7P/9k='); background-size: cover; display: block;" Err codemadness.org 70 i 2344 ></span> Err codemadness.org 70 i 2345 <img Err codemadness.org 70 i 2346 class="gatsby-resp-image-image" Err codemadness.org 70 i 2347 alt="Mega Man X" Err codemadness.org 70 i 2348 title="Mega Man X" Err codemadness.org 70 i 2349 src="/static/39d29464655aae0ce2f0e13229322f16/41099/mmx.jpg" Err codemadness.org 70 i 2350 srcset="/static/39d29464655aae0ce2f0e13229322f16/d2f63/mmx.jpg 163w, Err codemadness.org 70 i 2351 /static/39d29464655aae0ce2f0e13229322f16/c989d/mmx.jpg 325w, Err codemadness.org 70 i 2352 /static/39d29464655aae0ce2f0e13229322f16/41099/mmx.jpg 500w" Err codemadness.org 70 i 2353 sizes="(max-width: 500px) 100vw, 500px" Err codemadness.org 70 i 2354 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 2355 loading="lazy" Err codemadness.org 70 i 2356 /> Err codemadness.org 70 i 2357 </a> Err codemadness.org 70 i 2358 </span></p> Err codemadness.org 70 i 2359 <blockquote> Err codemadness.org 70 i 2360 <p>Source: <a href="https://www.amazon.co.uk/Mega-Man-Megaman-X/dp/B00004TMBD">Amazon</a></p> Err codemadness.org 70 i 2361 </blockquote> Err codemadness.org 70 i 2362 <p>I'm still waiting for that to happen, but the the mean time, I recently started playing Mega Max X2, and it's hard! I'm four bosses in, haven't found a single upgrade, and only snagged one heart container so far. Wish me luck.</p> Err codemadness.org 70 i 2363 <h3>DUM-E and U</h3> Err codemadness.org 70 i 2364 <p>Robot arms with quirky personalities, built by someone named Tony Stark.</p> Err codemadness.org 70 i 2365 <p><span Err codemadness.org 70 i 2366 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 2367 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 500px; " Err codemadness.org 70 i 2368 > Err codemadness.org 70 i 2369 <a Err codemadness.org 70 i 2370 class="gatsby-resp-image-link" Err codemadness.org 70 i 2371 href="/static/653244aa1db702282adae95d91fb4138/41099/starm.jpg" Err codemadness.org 70 i 2372 style="display: block" Err codemadness.org 70 i 2373 target="_blank" Err codemadness.org 70 i 2374 rel="noopener" Err codemadness.org 70 i 2375 > Err codemadness.org 70 i 2376 <span Err codemadness.org 70 i 2377 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 2378 style="padding-bottom: 80.3680981595092%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAQABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAIEAQX/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAABnbWlnOgH/8QAGxAAAgIDAQAAAAAAAAAAAAAAAAIBAxESEyL/2gAIAQEAAQUCW41qaPCjQ2KVlTmf/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAHhAAAgIABwAAAAAAAAAAAAAAABEBIQIiMTJhgZH/2gAIAQEABj8CmtCFEuRX6ZVyLEujaf/EABsQAQACAwEBAAAAAAAAAAAAAAEAESExQXGh/9oACAEBAAE/IU0Kr5MkralIiAQWeuw1uK4tKcn/2gAMAwEAAgADAAAAEEjv/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPxA//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPxA//8QAGxABAAMBAQEBAAAAAAAAAAAAAQARITFRcWH/2gAIAQEAAT8Qom8BY77+3BK8lKgu3TccAc6r5Kx51JHWfT8m5kOwfIBwL1uuz//Z'); background-size: cover; display: block;" Err codemadness.org 70 i 2379 ></span> Err codemadness.org 70 i 2380 <img Err codemadness.org 70 i 2381 class="gatsby-resp-image-image" Err codemadness.org 70 i 2382 alt="Stark" Err codemadness.org 70 i 2383 title="Stark" Err codemadness.org 70 i 2384 src="/static/653244aa1db702282adae95d91fb4138/41099/starm.jpg" Err codemadness.org 70 i 2385 srcset="/static/653244aa1db702282adae95d91fb4138/d2f63/starm.jpg 163w, Err codemadness.org 70 i 2386 /static/653244aa1db702282adae95d91fb4138/c989d/starm.jpg 325w, Err codemadness.org 70 i 2387 /static/653244aa1db702282adae95d91fb4138/41099/starm.jpg 500w" Err codemadness.org 70 i 2388 sizes="(max-width: 500px) 100vw, 500px" Err codemadness.org 70 i 2389 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 2390 loading="lazy" Err codemadness.org 70 i 2391 /> Err codemadness.org 70 i 2392 </a> Err codemadness.org 70 i 2393 </span></p> Err codemadness.org 70 i 2394 <blockquote> Err codemadness.org 70 i 2395 <p>Source: <a href="https://ironman.fandom.com/wiki/Dum-E_and_U">Fandom</a></p> Err codemadness.org 70 i 2396 </blockquote> Err codemadness.org 70 i 2397 <p>PSA - check out <a href="https://www.amazon.com/gp/product/1250192757/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=1250192757&#x26;linkId=041dcc62a5770e833dc59991bf57e5ee">Sourdough by Robin Sloan</a> for a great little novel on robot arms, bread-making, and San Francisco.</p> Err codemadness.org 70 i 2398 <h3>Metal Head</h3> Err codemadness.org 70 i 2399 <p>Two of my favorite things in one terrifying package - turtles and robots:</p> Err codemadness.org 70 i 2400 <p><span Err codemadness.org 70 i 2401 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 2402 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 2403 > Err codemadness.org 70 i 2404 <a Err codemadness.org 70 i 2405 class="gatsby-resp-image-link" Err codemadness.org 70 i 2406 href="/static/77ae95136bf95ec6a8828bce2a0b9f3f/b8284/metalhead.jpg" Err codemadness.org 70 i 2407 style="display: block" Err codemadness.org 70 i 2408 target="_blank" Err codemadness.org 70 i 2409 rel="noopener" Err codemadness.org 70 i 2410 > Err codemadness.org 70 i 2411 <span Err codemadness.org 70 i 2412 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 2413 style="padding-bottom: 91.41104294478527%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAASABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAEEAgX/xAAWAQEBAQAAAAAAAAAAAAAAAAAAAgH/2gAMAwEAAhADEAAAAfUz9Sa3MzZo1Qf/xAAbEAACAgMBAAAAAAAAAAAAAAABAgMRABASE//aAAgBAQABBQKZl5sBUcOrX6SqQEhHOjn/xAAVEQEBAAAAAAAAAAAAAAAAAAABIP/aAAgBAwEBPwEWP//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQIBAT8BH//EAB4QAAIBBAMBAAAAAAAAAAAAAAABEQIhQWEgIjFx/9oACAEBAAY/At6KXNU/SUPrZ5XpKWLihvh//8QAHBAAAgIDAQEAAAAAAAAAAAAAAAERITFBUWGB/9oACAEBAAE/IWIS7UmHYAcwFPdrgzQQ8r0LbTWSbfBWrtTYmSZ/D//aAAwDAQACAAMAAAAQIO8A/8QAFhEBAQEAAAAAAAAAAAAAAAAAAREg/9oACAEDAQE/EBEMf//EABgRAAIDAAAAAAAAAAAAAAAAAAABECFB/9oACAECAQE/EGtLn//EAB4QAQADAQACAwEAAAAAAAAAAAEAETEhQVFhgcHR/9oACAEBAAE/ELXcUo2/mvGy7NWboeXmf2KHzS1emWvAQLA9t/aipd19BVl+8qPwTARZZEUtYqjrkSClxP/Z'); background-size: cover; display: block;" Err codemadness.org 70 i 2414 ></span> Err codemadness.org 70 i 2415 <img Err codemadness.org 70 i 2416 class="gatsby-resp-image-image" Err codemadness.org 70 i 2417 alt="Metal Head" Err codemadness.org 70 i 2418 title="Metal Head" Err codemadness.org 70 i 2419 src="/static/77ae95136bf95ec6a8828bce2a0b9f3f/6aca1/metalhead.jpg" Err codemadness.org 70 i 2420 srcset="/static/77ae95136bf95ec6a8828bce2a0b9f3f/d2f63/metalhead.jpg 163w, Err codemadness.org 70 i 2421 /static/77ae95136bf95ec6a8828bce2a0b9f3f/c989d/metalhead.jpg 325w, Err codemadness.org 70 i 2422 /static/77ae95136bf95ec6a8828bce2a0b9f3f/6aca1/metalhead.jpg 650w, Err codemadness.org 70 i 2423 /static/77ae95136bf95ec6a8828bce2a0b9f3f/7c09c/metalhead.jpg 975w, Err codemadness.org 70 i 2424 /static/77ae95136bf95ec6a8828bce2a0b9f3f/b8284/metalhead.jpg 985w" Err codemadness.org 70 i 2425 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 2426 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 2427 loading="lazy" Err codemadness.org 70 i 2428 /> Err codemadness.org 70 i 2429 </a> Err codemadness.org 70 i 2430 </span></p> Err codemadness.org 70 i 2431 <blockquote> Err codemadness.org 70 i 2432 <p>Source: <a href="https://turtlepedia.fandom.com/wiki/Metalhead_(IDW)">Fandom</a></p> Err codemadness.org 70 i 2433 </blockquote> Err codemadness.org 70 i 2434 <p>Not to be confused with the always-evil Mechaturtles from the impossible original Nintendo TMNT game:</p> Err codemadness.org 70 i 2435 <p><span Err codemadness.org 70 i 2436 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 2437 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 78px; " Err codemadness.org 70 i 2438 > Err codemadness.org 70 i 2439 <a Err codemadness.org 70 i 2440 class="gatsby-resp-image-link" Err codemadness.org 70 i 2441 href="/static/dfd0388a52796c6aa0b6271fa404d8f9/16745/Mechaturtle1.png" Err codemadness.org 70 i 2442 style="display: block" Err codemadness.org 70 i 2443 target="_blank" Err codemadness.org 70 i 2444 rel="noopener" Err codemadness.org 70 i 2445 > Err codemadness.org 70 i 2446 <span Err codemadness.org 70 i 2447 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 2448 style="padding-bottom: 237.17948717948718%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAvCAYAAADjNOpjAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAI00lEQVRIx5VXCVSU1xV+yqIY44osRsVI0lgVbWIIQYKIAoZlBmaYGYZ9RwQ0RgSpoKDhHFkEFRSDJkAKLljNsbVxC9rYkjTWVu1ps1hzkpNEjyCiIyAZmOXrfe9nWBI16Tvn8r//5/+/d9+93/3uG2Y2m8FHZw/w1y+BS1+R3QA+pevH10343YfNaLvXho4Hndh/shYvqq1xoCEdutv/Av/SbDbBgsEHM4mnXTh/tR1Bxe2Ql7YjpKQNyvL7UJZ8DebOcKSlEYdaDoO9xFC83g6bEhkOvi0TACaTYSQg/3PyUCrK3xyLklxnOIY5gAU4YqFmMnZmW6HsDYYXtXbwiJ6I7esYbH0Z2G8YVIVyAWAwPgLw7HuBSIxgcA2hl70ZXg1lWLXm11hdcgzZO96Hi/YVWC9j8I6dhLrTdWg6fxit//lE8vDHW770NVBbtwvhWXLYx0ZhelwUkrNl+G3pHqhqgPgDwJykeLAlDOPkUzB8DAeyzJlihx7qKiCGPk56G0jYB0TuBSKqgajdOrJuzIoNBfNhcNY8hy+++y9+6OtDv9FI8TMPAJmHANPeAVLJi5T9QHIteUSASWQpNI+q+gETwuaCeTHMiJEhbm8f2AqGP7Q2DfhlEKCmATAOyiYol0OYYjkmKleQNwo4RSvhFKPCzBg5GCVhUVYRvPOaMDs+Ap4bjyG38RaqTgM15/otG4bRNOChqjAY3DRbZZDn+wmAmYEMs4MpQUslW5i1BfPS14uEeec1IrTsDpSVFKY9wOlrJugeYiBBZinLlmGkuDiFOyIxiSEp1Ya2NwZ2wQ6wCrCD1cqnYBfyjNi+R3Y1gfUiYudtBG7X4+Q/7qOv/wF5SR5yHhkM/YL1Ol0bKvKmwE1BnhFNRvtbIaz0BrS7uoSFlX5Fz2wwyt+aFhkL28DJIvbTo8MQVRwgbZkHkpcPHz3dHWgqmoZ5MqJIuCdWFrWIxMRS1rnxuX/RBUxUzMMkpRuW5Z+gmIdhfkYxIisvo/rMALEtgLquDqSvcYS9P2U1Phqr3uUgekRX9wuLqtYjowF4JjoIM4hKnBWcTj6bjiCZmBJa3isBmgYAO3QdGB/qIEjsEh+OuBoJMGaPkQANiNzdQ/e9mKbxom0GIYae8a0vyW1AInE4dg/RiqfbYJQA2+91wEHpKAL/bGIUUomj0dV9wjg/+dUu2Elke3ZClPCas8A776B4l4dkIMsS4MPeDtgr7MU2xoU4Y05iHNSVd8TqK7acxTS1J3wL/kgxnC885IsEFf8dL6RmYNGabeKeXfzchI8+M6L1OqnO5TuYIJ8qMsyNZ1Oz8y6SKFb+hecxk0ifRnGdQYR3jgpAYi1f6Izw2jHCBykHeC1XGKDY0Y9wImpIyR2igj1sXp9A10kYE2QP+fZ/i9jFUZa5p5FU2w4R3nCO9EP4ju/pnWm0sBVck5KIl/fBEvYZKZh6+sBID9qEZ6/lHaLMHROx5JXjW3BSeCavuI9xMhfxjNtTNFeWfyMo5bWxgRJkBRZG3vEHXCC4BzxGqopbUFXehU9ePVWMLZ7TLoB7qgJvFQRgNInDgswiuGXmY5SfNcW4XVDJK++4EF5WfxHQlJ3F/MwKeGxoQMKAhMWRpe0zoyZvGpTRDF7hDOpYSYADtn2MlVv/IpQnkiRuRWEr/DZtRUpFgpTl9Mp42BKZZ2ldEFpyjVa9hXDyUlN2DdlZk1BK0q9OsKZwjIE11bVP/nF45rwjAONrjHha4YPwQt+BJkWMeajXQ9/fj2/bbmJ88FQpdlxpXqMeQnGxDRgttjo2aCrF20QyFin+N5ayy2t5vCIYK3OXDtXykNoYcO7yGZxofR8XrrTg9KUPYLOSCV6y5RKVOAe9NjYS77YK0KdDFyG/bju++PazoSbFQS3lZxmdXZ2o/dO7cH8jj6jhRFxzJAJnCg6+/OZOvLqhlu7TSJxl+PDKVfFNv8EwBGi56vv0Yl535gDYIh70B3iWysw1MV5QJ70OxMOlmKJaLHrQarr/5zeWdoCRAmvps3wcvXhUZHSUH+dlkxAK7e4uUbMu8SohIA7hM3Czo23QGfOPFXs4YPNHzWCeTCTIa+N7oqw0lR2kNJ54JbsK81bnY6LMFvcoNMMV67GAR/58WATdNTFaCAAv/IhdOrjEqankvoNPwTnKPiPJuzei4T8W8PCFJsquNZWkgbg2pItJtdJ8Sc4euCX9ijzU/VIPOaAVYqu7pX69F0IkeGKmaGQILXh9xPuDjf5xgAcvHAHzYJii9cM4pQfc1paLrLomRlCyRkG1VTHYKX9yWBrZSiXAlk+aMZ8OT+4qhpfo8PRy7AIsXFclyo0f8TRvRYw4fT3WQ37e4+P61WaUZjDs2mCD2lxrpCRTWyXJcpDZiMyrtqn/P8AvCbA4naFywxg6OzKy0ShbPwY1uTaYTl7KCsOkHZl+ZsuWGJ5qPQonosVs2vYcuWSzguhK98tyquG3pQGBOe7QdT/4ZUlpbKEsLyYepq7F6EBnWAXNgGtajqie51NXY9Ha3ZibmkI13z14rnkiD0/+7QSma1yxikrthZRVguDaXXep87kLwjtHhSD3CHC/p190Te7gIwGlAIvooLO7D5l10pmRqwvvI/z0MDNWBgdtgPhfn2Ho5PXILQ9nva6nB5OVC+G7uVVUy/LNH4hKsVd7wFHri9X1tNCa5Th/5dxggh7jobRaV283Nu7PxLLcHAJtQTKpM1cdD/J2Xno2Fq8rA3NjqD9TNxiuR3poAeYr8qHc7EsHdg8BqKW+zMvPZ9Nx0Sac1dNx6tNTg1XzSA8lPpqoz0hiqyqSY6omVIgrPyfyduuxoR7jg0bhdmf7k/XQEgvLCMrzhV2g1NidtMuoSZlFHMPKbtIvrYsUFuOTecg9E6X3/ecoqCvA85wyyVmYm5Yl5m4Z+eJ4wg8HGeTxg17Lzwo8mYeHLvyeYuQktsfVWiSEQHjrXLqpWSQntbaXPDQ/2UPLz4NLN8xQ7zSSqOqFoFqMiyy3yCoDVh0w/gTwfzFagPe3ozoLAAAAAElFTkSuQmCC'); background-size: cover; display: block;" Err codemadness.org 70 i 2449 ></span> Err codemadness.org 70 i 2450 <img Err codemadness.org 70 i 2451 class="gatsby-resp-image-image" Err codemadness.org 70 i 2452 alt="Mechaturtles" Err codemadness.org 70 i 2453 title="Mechaturtles" Err codemadness.org 70 i 2454 src="/static/dfd0388a52796c6aa0b6271fa404d8f9/16745/Mechaturtle1.png" Err codemadness.org 70 i 2455 srcset="/static/dfd0388a52796c6aa0b6271fa404d8f9/16745/Mechaturtle1.png 78w" Err codemadness.org 70 i 2456 sizes="(max-width: 78px) 100vw, 78px" Err codemadness.org 70 i 2457 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 2458 loading="lazy" Err codemadness.org 70 i 2459 /> Err codemadness.org 70 i 2460 </a> Err codemadness.org 70 i 2461 </span></p> Err codemadness.org 70 i 2462 <blockquote> Err codemadness.org 70 i 2463 <p>Source: <a href="https://turtlepedia.fandom.com/wiki/Mechaturtle">Fandom</a></p> Err codemadness.org 70 i 2464 </blockquote> Err codemadness.org 70 i 2465 <h3>Sonic Sam</h3> Err codemadness.org 70 i 2466 <p>I had one of these (it's still in my parent's attic). This guy rolled around our kitchen, flashing its eyes and emitting weird smoke from its mouth.</p> Err codemadness.org 70 i 2467 <p><span Err codemadness.org 70 i 2468 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 2469 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 640px; " Err codemadness.org 70 i 2470 > Err codemadness.org 70 i 2471 <a Err codemadness.org 70 i 2472 class="gatsby-resp-image-link" Err codemadness.org 70 i 2473 href="/static/de0408c04849f7c44e84532c3e696f1a/c08c5/robottoy.jpg" Err codemadness.org 70 i 2474 style="display: block" Err codemadness.org 70 i 2475 target="_blank" Err codemadness.org 70 i 2476 rel="noopener" Err codemadness.org 70 i 2477 > Err codemadness.org 70 i 2478 <span Err codemadness.org 70 i 2479 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 2480 style="padding-bottom: 56.44171779141104%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAQBAgX/xAAWAQEBAQAAAAAAAAAAAAAAAAACAAH/2gAMAwEAAhADEAAAAc2khS44Wf/EABkQAAIDAQAAAAAAAAAAAAAAAAABAhAhEf/aAAgBAQABBQKOEmYKuI//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAZEAACAwEAAAAAAAAAAAAAAAAAAQIQETH/2gAIAQEABj8Clg7Zw//EABoQAAMBAAMAAAAAAAAAAAAAAAABIRExQXH/2gAIAQEAAT8hboaIai4eh8UFWzJKOD//2gAMAwEAAgADAAAAECM//8QAFREBAQAAAAAAAAAAAAAAAAAAEEH/2gAIAQMBAT8Qh//EABYRAQEBAAAAAAAAAAAAAAAAAAARQf/aAAgBAgEBPxDVf//EAB8QAQACAgAHAAAAAAAAAAAAAAEAESExQVFhcYGR8P/aAAgBAQABPxDD9AmQPmJiK0xzsiB29RGMfEAQFs32lqZEcJ//2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 2481 ></span> Err codemadness.org 70 i 2482 <img Err codemadness.org 70 i 2483 class="gatsby-resp-image-image" Err codemadness.org 70 i 2484 alt="Sonic Sam" Err codemadness.org 70 i 2485 title="Sonic Sam" Err codemadness.org 70 i 2486 src="/static/de0408c04849f7c44e84532c3e696f1a/c08c5/robottoy.jpg" Err codemadness.org 70 i 2487 srcset="/static/de0408c04849f7c44e84532c3e696f1a/d2f63/robottoy.jpg 163w, Err codemadness.org 70 i 2488 /static/de0408c04849f7c44e84532c3e696f1a/c989d/robottoy.jpg 325w, Err codemadness.org 70 i 2489 /static/de0408c04849f7c44e84532c3e696f1a/c08c5/robottoy.jpg 640w" Err codemadness.org 70 i 2490 sizes="(max-width: 640px) 100vw, 640px" Err codemadness.org 70 i 2491 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 2492 loading="lazy" Err codemadness.org 70 i 2493 /> Err codemadness.org 70 i 2494 </a> Err codemadness.org 70 i 2495 </span></p> Err codemadness.org 70 i 2496 <blockquote> Err codemadness.org 70 i 2497 <p>Source: <a href="https://www.spotern.com/en/spot/tv/stranger-things/188454/the-robot-magic-mike-ii-from-dustin-henderson-gaten-matarazzo-in-stranger-things-season-3">Spotern</a></p> Err codemadness.org 70 i 2498 </blockquote> Err codemadness.org 70 i 2499 <p>And it's now memorialized in one of my favorite TV shows.</p> Err codemadness.org 70 i 2500 <h3>Robo from Chrono Trigger</h3> Err codemadness.org 70 i 2501 <p>The best JRPG of all time? I think so. I loved Chrono and his gang. I used to draw them all the time. Frog and Robo were my favs.</p> Err codemadness.org 70 i 2502 <p><span Err codemadness.org 70 i 2503 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 2504 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 200px; " Err codemadness.org 70 i 2505 > Err codemadness.org 70 i 2506 <a Err codemadness.org 70 i 2507 class="gatsby-resp-image-link" Err codemadness.org 70 i 2508 href="/static/6c22080c421e67c0bac7aee47f76f0de/772e8/robo.png" Err codemadness.org 70 i 2509 style="display: block" Err codemadness.org 70 i 2510 target="_blank" Err codemadness.org 70 i 2511 rel="noopener" Err codemadness.org 70 i 2512 > Err codemadness.org 70 i 2513 <span Err codemadness.org 70 i 2514 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 2515 style="padding-bottom: 167.48466257668713%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAhCAYAAADZPosTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAJW0lEQVRIx51WeVRTZxa/MTrDqe3U1g1EwWUEUXEDS8XRiICCILKvCYYAAZQESEIWlgAmhMhOICEIgRCiyCKLsqOAYVHROigVph5Pp7WdnjmOZ5yZTuso5N1J6Ol2zvw13znfe/e8d7/f+917f999H8D/MWQCIeSlcUiFIhHIhUKHjNjEpgejnWD89zzpfy5gMSOgXlMAIzeHQKdtgMt6JamxsZqkqasCOpUJEo4AinicZeUZprtIKBHFMF9573az9N/v+WsgkSgbCnPp8Mm0FqbGG2C4r5w0PlpJvnz5Ceh015Z8MjM2gjy1G8SsJLJCKIDc8+wGSRILI4/4bacfD/xFGAUyKCotgTypDDj8XNLoyNXlquJQGB2+CN3d37x75UqnjdkvJ3czpPHOkq18V0JyWBCIk5KreVExGH48aAPNzf8XYaYKQCqVQqZISGKd58LdyU6g7AGLKYOaNdArflYo83uRmuzxIOXcyf15F5ggz48VCwWU+Ci34OiQYz6GAnEBICIsXbisSDiXVgISiYQkEopBkpNteUldWjE/Nzz36cwV/PxpJ34214Vi0WEUZ+6cjD/Ho2saav6Wm5d1X6lSS8W50o4Ubq59ZLA3wMhI7xJoeHQ6jN8bJYdJn4BYVtFXpsrDT+7p8XqvYkGriTJOjwUb69VOC4mMTciMD8Ku6704MXkXZ2dn8HJzOzKTcjCcmrwbFkxgiK+huVlBGh4egW3WH63JkcheJ3PpRICXwyItkYa+AR8RvifXEgFujkhz9TGGeuxbSDwXTMjzOcbs7JzFdH7R4nlWAcYlpQctsRsdriE9+2wEvvnma88CScST9ma+8Y6hkhgc0BBtVyWETsNHEf8gRpzajoKYQFSW+hCXm7KJr78cIC7m+xNUaqoxjVOCMfEsD7hxXUWavHMXxqfurBsekP1TmnMMHz2sNT6encSZmQm8bWjFzhYmFsh4KM+PwJFBOuqbJDj/ZBS/+3YaW3SHTCmIxFjmhdfRMSHroVAW8lOlqaG/b3HcaYMqhd/CwwctODnZT7S3cFEmtsYmjRvW1VbgcE80FstOELQoT8LLfSu6u1l/m3Tu/Lf02BxJNP2SGeY2rFllufyDd23g/ZV2kpUWq1B2YdPbx/c5xI0uCd4aKsO52Vace1SF+fnlKBXvxZrKXYT9tg+JFbDW6LDTCeMSePQ4ZgY4O59aBqGB4bDZai3ZctVG2OvgVJXI2IXVCoe3bc3pxGC/GqcM5fjq5TROjWaYwE5htsABB64fxpioXQvvv2OF1tYbupb0ZxqRNDoJjrl6wthQBWnK0ANRIdQrI8MF2NHKWejvb0bD2FXsaKZhb/txvG84g0NdFBzrO4FDPa5EZKjN25XLbUxI76VZWKyH1au3rKCeZQKsemfLTzl02Ob4IJefiOOGjsVxQysxaWjB7qsBqFE7oaaSgk1qd9QqPZCTuIMQ8wIXUln+GBVmLzvj+zuICLUlJyeY6tF7o5b0/Ks/wdz81LbGOuHLZKoXXtWLjP29Mnw0M4StuhNIC92OzGB/jPQ6hsf37sHj2/dhoZC9MNTHNhXsQNv9cTuYve9ESk+hAFxt4pE72vLgWktORKsuAnPTzizWlacTSjkP+zprCB4tFNPjKZjPoaOEE4Tng44g1c2VyOTELYoEcSjgUkf0TQ3w/eIEpCX7mvfyd2RzUl+8+LRseoyPeYKIBb2qjEgPj0FxfAJxIYmDioIAVF3gYj4/mog+cQQ5DBZRo7lOlJVqCXGmAOmRbD9aGBMSGDzy0k4xz2dPR24PdgUhP/XI6+oCPlZmZhDlmRnGfBZ/MY/rYrxUTDWKOe6ENPMAUSQvIyoVCkJVwXgjl3AxLaWsMIVVDpyUguVwd/oZDA1PWT+d73qhqXbBLOGOkbNB/iPipAQsE/IwIYyCVcUHUFF8FFv1cTh4IxRT2d4ok17AvDwVikR1RHys4GgiMxOSEvOWQX9/O7S2ao+O3cwmRBx7TIizb7Sx2qG3s7HHKD/XPi7b9p6iZM+/RFyHvxz7eN/ilo3rjB5u++s1dRXPS4p4yEt1H1aryuGPMy8hOdHUg8dG66Gnp8Glo41t3LNzk0lXlo52NntK3lu5yqxWX7OcfD3ttjKo3rusVm/77h2LD43r19vsF4tCbgp5H+MZn9V6WhgAlw2k097OADpNFNSrz7qXXaRgSMCGL3UN4gP0qJDZ5eR30cJilQnwfTh94iBs3+xsu/6DTW8sfrP0IXeZRD4bFhxutod/1PGa1VYADyfC4NGdyE0Bpx1x7RqL5329dV0To/nIiLZFZuzOiIS4tSbXs+C497BjhvD8W0lOmBkkTqe98jwyLNJsj5rBzIW1XGf9g2EeNhvtqgBWsLs75GNDPQmorXFCSc7u5soSgKmJPhjorXCbMNRjnfoEBp2xKVKriv/q6uJqXjz+I8N1aywBPnuKUKsOJNGoNHj16qutoyNX3n79xQ1ji/4QyiR2txWluKTTJ7P9yqnJTtTUnERpnkNbbiZjPDzYEylHd2STfguw1X4rKdDP+QeGA4O3yPfuz0NjfW7d2C2VqRGEv2nWeWGWwOXR48dzSz5//vzh8/m5KezrCjW1ty03JZLGUxflFY8XUQw2a52BlcSHbZttAbq6b5C7u5uhvrbQXqlUvVZWqrCnw49o0bkusBN9kJVc1jk8oFT9/eUMTt9tMT13JipLnYhqRSg/X/7AynnflhUAuyGGUQJbbEyAOn07XKrV2LZ3jH6hb76NGRna/6Sxghcz+bbo7fkHU3sv+rS7jfOPm4OVqFLVG9XK+AV11R4UcfdenzCkmti7kDwpHwEnrRp4KccBPDwPr9A3DzxRVpv+u+J6TEstfbVj67GDpzxcKHt3UtzN4fLYRykKhfL7uoZbKBQWGxMYXkgN93P1O3kQaOGmLg37ISE+64fKFJdc2lBcrK9MSS6Uss8VMjmphQctPzwMnpR9prfvgbbxJpQrWiuudY2jpqH/TTqvCr092IkM+inIyWaSPnaqAx8vt5+PIIqqeqjX9pkoV5imEtJSCuGQk/uywNP7yPFx6b/R6rpBfrEmpUnfjzJZEyYl5F8zsSYxYpogjiEn7bIrhmD/Qz8DlpbXQkNjHzkrq4YsFNSQU9lFJjAPoEfHQQo7C/x8faBn8DnIZLVpIpEiprPzGcgLtaZGkEuKj80C35Nnf3WC+y98Zb/rNQFP1wAAAABJRU5ErkJggg=='); background-size: cover; display: block;" Err codemadness.org 70 i 2516 ></span> Err codemadness.org 70 i 2517 <img Err codemadness.org 70 i 2518 class="gatsby-resp-image-image" Err codemadness.org 70 i 2519 alt="Robo" Err codemadness.org 70 i 2520 title="Robo" Err codemadness.org 70 i 2521 src="/static/6c22080c421e67c0bac7aee47f76f0de/772e8/robo.png" Err codemadness.org 70 i 2522 srcset="/static/6c22080c421e67c0bac7aee47f76f0de/222b7/robo.png 163w, Err codemadness.org 70 i 2523 /static/6c22080c421e67c0bac7aee47f76f0de/772e8/robo.png 200w" Err codemadness.org 70 i 2524 sizes="(max-width: 200px) 100vw, 200px" Err codemadness.org 70 i 2525 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 2526 loading="lazy" Err codemadness.org 70 i 2527 /> Err codemadness.org 70 i 2528 </a> Err codemadness.org 70 i 2529 </span></p> Err codemadness.org 70 i 2530 <blockquote> Err codemadness.org 70 i 2531 <p>Source: <a href="https://chrono.fandom.com/wiki/Robo">Fandom</a></p> Err codemadness.org 70 i 2532 </blockquote> Err codemadness.org 70 i 2533 <h3>The Iron Giant</h3> Err codemadness.org 70 i 2534 <p>Sometimes giant robots are gentle and curious. They just want to love and learn. The Iron Giant is one of those robots.</p> Err codemadness.org 70 i 2535 <p><span Err codemadness.org 70 i 2536 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 2537 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 269px; " Err codemadness.org 70 i 2538 > Err codemadness.org 70 i 2539 <a Err codemadness.org 70 i 2540 class="gatsby-resp-image-link" Err codemadness.org 70 i 2541 href="/static/2a5c15093914ba94c385d4a49fd0f063/23db2/irongiant.jpg" Err codemadness.org 70 i 2542 style="display: block" Err codemadness.org 70 i 2543 target="_blank" Err codemadness.org 70 i 2544 rel="noopener" Err codemadness.org 70 i 2545 > Err codemadness.org 70 i 2546 <span Err codemadness.org 70 i 2547 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 2548 style="padding-bottom: 137.42331288343559%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAMBAgUE/8QAFwEBAQEBAAAAAAAAAAAAAAAAAwQCBf/aAAwDAQACEAMQAAABSlrhZZok64vRn26EklRcf//EABwQAAICAgMAAAAAAAAAAAAAAAECAAMREhATQf/aAAgBAQABBQIrge9cQyupWVSpWpn2s3A2YQHBLHj/xAAZEQEAAgMAAAAAAAAAAAAAAAARAAEQEhP/2gAIAQMBAT8B3QnSo4//xAAaEQACAgMAAAAAAAAAAAAAAAAAAQIREhMx/9oACAECAQE/AW8emyQ4W7Qj/8QAHRAAAgEFAQEAAAAAAAAAAAAAAAERAhASITFBUf/aAAgBAQAGPwKVeNwOtd8E/pCqiTLNnTR23//EAB0QAAMAAgIDAAAAAAAAAAAAAAABESExQVFhcZH/2gAIAQEAAT8hVFQq8Mq8DR7Qq4di2UEmwYPqLBRG/EJhh62TxPBzG0aQzti+vh//2gAMAwEAAgADAAAAEGv9v//EABkRAQEBAAMAAAAAAAAAAAAAAAEAIRExYf/aAAgBAwEBPxB1YvMgBxPeX//EABgRAQADAQAAAAAAAAAAAAAAAAEAESFh/9oACAECAQE/EKbFOUxMYDkAmk//xAAfEAEAAgICAgMAAAAAAAAAAAABABEhMVFhQYGR8PH/2gAIAQEAAT8QekBmlQO4TJToh0d8+orYr2RA6QwDz3Lc7BMVTZfPiMhrbHU5Jdpf3EzTqWdr/YAFDQOIuHAI6goKKGll+Pgn/9k='); background-size: cover; display: block;" Err codemadness.org 70 i 2549 ></span> Err codemadness.org 70 i 2550 <img Err codemadness.org 70 i 2551 class="gatsby-resp-image-image" Err codemadness.org 70 i 2552 alt="Iron Giant" Err codemadness.org 70 i 2553 title="Iron Giant" Err codemadness.org 70 i 2554 src="/static/2a5c15093914ba94c385d4a49fd0f063/23db2/irongiant.jpg" Err codemadness.org 70 i 2555 srcset="/static/2a5c15093914ba94c385d4a49fd0f063/d2f63/irongiant.jpg 163w, Err codemadness.org 70 i 2556 /static/2a5c15093914ba94c385d4a49fd0f063/23db2/irongiant.jpg 269w" Err codemadness.org 70 i 2557 sizes="(max-width: 269px) 100vw, 269px" Err codemadness.org 70 i 2558 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 2559 loading="lazy" Err codemadness.org 70 i 2560 /> Err codemadness.org 70 i 2561 </a> Err codemadness.org 70 i 2562 </span></p> Err codemadness.org 70 i 2563 <blockquote> Err codemadness.org 70 i 2564 <p>Source: <a href="https://upload.wikimedia.org/wikipedia/en/d/d3/The_Iron_Giant_poster.JPG">Wikipedia</a></p> Err codemadness.org 70 i 2565 </blockquote> Err codemadness.org 70 i 2566 <p>Kids and robots just go together, like kids and E.T.</p> Err codemadness.org 70 i 2567 <h3>Cozmo</h3> Err codemadness.org 70 i 2568 <p>A programmable robot!</p> Err codemadness.org 70 i 2569 <p><span Err codemadness.org 70 i 2570 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 2571 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 2572 > Err codemadness.org 70 i 2573 <a Err codemadness.org 70 i 2574 class="gatsby-resp-image-link" Err codemadness.org 70 i 2575 href="/static/0aa53da4daf21c62993620a41767c0a2/1cfc2/cozmo.png" Err codemadness.org 70 i 2576 style="display: block" Err codemadness.org 70 i 2577 target="_blank" Err codemadness.org 70 i 2578 rel="noopener" Err codemadness.org 70 i 2579 > Err codemadness.org 70 i 2580 <span Err codemadness.org 70 i 2581 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 2582 style="padding-bottom: 73.00613496932516%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAABYlAAAWJQFJUiTwAAADN0lEQVQ4y3WTXUyTZxTH32VXyyLJ4sWuTbbsYln0woXN6ebdzJapbMvm3NagkDBwBt1GZoQoA8agYy2kSOjEQuuWTRMnKCUtVVEosk2hCKWVoVgKUuykYx/9oG/b3563QK1VT3LenOc55/2f//l4JJYlkUgkVZFYLJayM/3pcZkxikiZF/FEPGVPT03iv3Ob6GL4oeAPA5WSzmVHPL4EZr/cz0cF+by08UX2frKLqZvj+GanmF8IEBMJlfiVWAUvHVRaOawE/LuwwJYPd5C1/W2ynnuG3Xkq/NZOhgo/ZqBJw6C1A9l/ZwksHk/nnVSJDHaWbitr169jzbNreDLrCX483srfP7dxu8eG8+Bn2Pfuol9dhud3ewr0AYZxoeFgENc1B7l5uax+ejWrnlrFtpytzExOMPZbPx7/LLOOK7i62+m2nuHqJZsAi2X0NHFvKPNzPgJ+PxZrF3n5KlSqnXhu/IF7dJiOA/v5pSgXfXEBLfp6mnVazpz6iblZT1rpy4BKqX32XkaHBnE6BqmsKqdADKKt9Sj9vT24Rob5x3uLma7TuDtO0id6aBfl33AOM+2ZWGZ4r2zpr0CAYy16LvdepP2EkaJCFSVf7MNkNDA6PMTVgT4qDpegqa9BW/8tppZGdNoaLlg6+XNu5r6BKqDS/Pxd5EgI+6WLHCj5FGu7gQnXCHLwP2wWM2/mvEVbbRU9zY0U7ytky+uv8sLa53lt8wbOn7M8sJeST/TOceVXvq78ig2bsjnaVI3pmI4ZzyT7Py9m27s5BAN3CYlVGRuyY9JXom8o48RxPX3ms9yaGE+xTDHsFv1p0mnYU5RPnboCw/f1eMUy79j5Pq9kr8c36iAw7mbM1kH7SR2nfqhjZOACEfHv9ORN0t9KcijnbWaMhiZqqg9RK7RBU41eJHg5ex2PPybRXHGIKecIDd+Ukr/7HT547w2qyr/Ebuli3OVMAsmyvMQwKPYvIAbjdrsxmoxoNN+h1WooLz9MWWkppUJr1LWYTG2o69TCr6HxyBEMrQbM5k7c16/j9Xrx+XwsLi4iKR9FlQyPEjkqEwyFiEajwo4mY2NyLHkOiftwOEwkEkn28X9pK+6r85CNaAAAAABJRU5ErkJggg=='); background-size: cover; display: block;" Err codemadness.org 70 i 2583 ></span> Err codemadness.org 70 i 2584 <img Err codemadness.org 70 i 2585 class="gatsby-resp-image-image" Err codemadness.org 70 i 2586 alt="Cozmo" Err codemadness.org 70 i 2587 title="Cozmo" Err codemadness.org 70 i 2588 src="/static/0aa53da4daf21c62993620a41767c0a2/a6d36/cozmo.png" Err codemadness.org 70 i 2589 srcset="/static/0aa53da4daf21c62993620a41767c0a2/222b7/cozmo.png 163w, Err codemadness.org 70 i 2590 /static/0aa53da4daf21c62993620a41767c0a2/ff46a/cozmo.png 325w, Err codemadness.org 70 i 2591 /static/0aa53da4daf21c62993620a41767c0a2/a6d36/cozmo.png 650w, Err codemadness.org 70 i 2592 /static/0aa53da4daf21c62993620a41767c0a2/1cfc2/cozmo.png 900w" Err codemadness.org 70 i 2593 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 2594 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 2595 loading="lazy" Err codemadness.org 70 i 2596 /> Err codemadness.org 70 i 2597 </a> Err codemadness.org 70 i 2598 </span></p> Err codemadness.org 70 i 2599 <blockquote> Err codemadness.org 70 i 2600 <p>Source: <a href="https://www.digitaldreamlabs.com/pages/cozmo">Digital Dream Labs</a></p> Err codemadness.org 70 i 2601 </blockquote> Err codemadness.org 70 i 2602 <p>Cozmo's fatal flaw is how nearly impossible it is to connect your phone to the robot's local wifi service, which is how you are forced to control and interact with Cozmo. The connection process is random, non-deterministic, and saps up most of the time you've allocated to play with Cozmo. Also, Cozmo's parent company recently went out of business, which is a huge bummer for the robot-toy industry.</p> Err codemadness.org 70 i 2603 <p>That said, I've had a lot fun with Cozmo, including <a href="https://www.charlieharrington.com/teaching-my-robot-with-tensorflow">teaching him how to find my toothpaste with a TensorFlow computer vision model</a>.</p> Err codemadness.org 70 i 2604 <h3>Droids</h3> Err codemadness.org 70 i 2605 <p>Okay, the main event. Droids.</p> Err codemadness.org 70 i 2606 <p>The Star Wars folks who put together the droids for A New Hope are complete geniuses. They're dirty, they're resilient, they're loyal, they're funny, they're everywhere. I could go through a whole list of them, cause I really do love them all (GNKs, Artoo, Threepio, IG-88, BB-8, those little mouse-like black boxes in the Death Star), but in a rare dose of restraint, here's my favorite Star Wars droid!</p> Err codemadness.org 70 i 2607 <h4>WED-15-1016</h4> Err codemadness.org 70 i 2608 <p>It's R.O.B. with a longer neck, a blue face, and way more creepy claw arms. You may remember this robot critter from its role in repairing the Millenium Falcon at Hoth Base in Empire Strikes Back. Or at least attempting to repair.</p> Err codemadness.org 70 i 2609 <p><span Err codemadness.org 70 i 2610 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 2611 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 320px; " Err codemadness.org 70 i 2612 > Err codemadness.org 70 i 2613 <a Err codemadness.org 70 i 2614 class="gatsby-resp-image-link" Err codemadness.org 70 i 2615 href="/static/da34ef15c6d3d7825f5cff64051e89b3/cb69c/wed-techie.jpg" Err codemadness.org 70 i 2616 style="display: block" Err codemadness.org 70 i 2617 target="_blank" Err codemadness.org 70 i 2618 rel="noopener" Err codemadness.org 70 i 2619 > Err codemadness.org 70 i 2620 <span Err codemadness.org 70 i 2621 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 2622 style="padding-bottom: 74.84662576687117%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAMEAgX/xAAWAQEBAQAAAAAAAAAAAAAAAAACAAH/2gAMAwEAAhADEAAAAVz289jYk2//xAAcEAACAgIDAAAAAAAAAAAAAAAAAQIRAxMEEiH/2gAIAQEAAQUCfH8o1Nl9iWa3ukf/xAAWEQEBAQAAAAAAAAAAAAAAAAAAARH/2gAIAQMBAT8BZX//xAAWEQEBAQAAAAAAAAAAAAAAAAAAEQH/2gAIAQIBAT8Bq4//xAAcEAACAQUBAAAAAAAAAAAAAAAAASEQERIxQZH/2gAIAQEABj8C56LUlxOMaQz/xAAaEAEAAwEBAQAAAAAAAAAAAAABABEhMVFh/9oACAEBAAE/IULi4OdB1vkWIqnmywpA+RFaPATkb9Kn/9oADAMBAAIAAwAAABAIL//EABcRAQADAAAAAAAAAAAAAAAAAAEQITH/2gAIAQMBAT8QC8g//8QAFxEBAAMAAAAAAAAAAAAAAAAAARARMf/aAAgBAgEBPxC6bF//xAAdEAEBAAICAwEAAAAAAAAAAAABEQAhQWExkbHB/9oACAEBAAE/ENigDOzgy0FKbwOtxxybrRPuPPyE20/mIt/NRF4wnskz/9k='); background-size: cover; display: block;" Err codemadness.org 70 i 2623 ></span> Err codemadness.org 70 i 2624 <img Err codemadness.org 70 i 2625 class="gatsby-resp-image-image" Err codemadness.org 70 i 2626 alt="wed-technie" Err codemadness.org 70 i 2627 title="wed-technie" Err codemadness.org 70 i 2628 src="/static/da34ef15c6d3d7825f5cff64051e89b3/cb69c/wed-techie.jpg" Err codemadness.org 70 i 2629 srcset="/static/da34ef15c6d3d7825f5cff64051e89b3/d2f63/wed-techie.jpg 163w, Err codemadness.org 70 i 2630 /static/da34ef15c6d3d7825f5cff64051e89b3/cb69c/wed-techie.jpg 320w" Err codemadness.org 70 i 2631 sizes="(max-width: 320px) 100vw, 320px" Err codemadness.org 70 i 2632 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 2633 loading="lazy" Err codemadness.org 70 i 2634 /> Err codemadness.org 70 i 2635 </a> Err codemadness.org 70 i 2636 </span></p> Err codemadness.org 70 i 2637 <blockquote> Err codemadness.org 70 i 2638 <p>Source: <a href="https://starwarsataglance.wordpress.com/2014/06/30/wed-1016-teche/">Star Wars At a Glance</a></p> Err codemadness.org 70 i 2639 </blockquote> Err codemadness.org 70 i 2640 <p>I treasuring my WED-15-1016 card from the Star Wars collectible card game, and I'd play it every single one of our daily games in latchkey, no matter what. (Side note: listen to this <a href="http://www.zachtronics.com/podcast/">great Zachtronics podcast</a> episode with one of the designers of the Star Wars and Star Trek collectible card games)</p> Err codemadness.org 70 i 2641 <p><span Err codemadness.org 70 i 2642 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 2643 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 206px; " Err codemadness.org 70 i 2644 > Err codemadness.org 70 i 2645 <a Err codemadness.org 70 i 2646 class="gatsby-resp-image-link" Err codemadness.org 70 i 2647 href="/static/42d3d89633a83af49f7eb084c0aa25cc/a414c/wed-card.png" Err codemadness.org 70 i 2648 style="display: block" Err codemadness.org 70 i 2649 target="_blank" Err codemadness.org 70 i 2650 rel="noopener" Err codemadness.org 70 i 2651 > Err codemadness.org 70 i 2652 <span Err codemadness.org 70 i 2653 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 2654 style="padding-bottom: 140.4907975460123%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAcCAIAAADuuAg3AAAACXBIWXMAAAsTAAALEwEAmpwYAAAGVElEQVQ4y0WS6Vda1xrGz4d7V6MxJoIyOlUT58QBNaIUxSiJyniYRBAcIqg44QTeJJLGOKRdbW1rNOltcq2pVWMbh6igEUHCPCrgUJv0rvuf3I390LV+513P2fs87/vstQ+0vrYq5POEAp6Ax+PBMBdm8zkwl83ispl8mAUz6Sx6DYdJAwJm0liMajaDJuByavnc5zPTUF+nIiUhLif1KvlGZiMXlkslEh7vrkjYIq5rEnCbavndsrsdTVK5uE4mBou1crGwHmaU5Wc3C/nQYHc7q7KcVlrMLspZej6z8svPXzzSzE5PzT2f+WZs/Jcf/33mcZ15PYDfPe5Tj/t/x0cb8z/11vOnRzVQq6I/N4tAKioj5FaQCEU1FTVSUbdCrrorkbNuU1lVDAGnnkq6eYdcXEkqon5GrKaQKDcJxBvpEh4balOOKRV9PV0aKvs+Dh/Pb1CPT+2MTL6VdU8Ti5mxcdcyC+ArUYiLYZ+EffKP8Av/vBh+IfJSRGTExYJ8AjQyPsti97d2PK2obsq8kTv5H/0Xz9Yff7/Y82C2itmdlJR+PedWLD42BnEpBnEZg0JiUDGA6KhIUjERuqeZIlepaPyHsbEJNZxO5eNVtvQRXzqgHPuV0/B5WjqRUvPweoHwahoZh8UBMyoGiQXPlUtlFCrU1qnKIzVdSyWkZRU1df/YopprVr6Utj6ZWXN3P5q6WcLgNXxbQlVfLxTG4eIwMUgASIHHp9RKR6C29l5cLLisRKZwRCx/Km6faVA87VRP71qPvv3uGV3QJu14UUhuw+PiUIjL6GgEChGJQaPjk/NZfCUkqReB8xdTWu4w7tWw7jMEY1LZpGb8ldl7NvJ4XNCsbh2YzyFUY1HRIWd0VHRURHIaiVCqrLwNQ2JRLRKJL6nooVR2UasGaMzh1q6pmR/mjWanpKG5pfdJx9Dz5MQkPAaDRl5GISOxaFRWLi2PrICF/ZBUIo0MDysrq+Xz+qqqB2Hu50rV9Nj4d08mX+Xml/AkKnIZIw6Lw6KQwHz1Wu7VlHwCSVxYrmDAjSB2fUT4hczUDJitoLOGaaxhtnCiTqymw91pqXnZ2SXx+FgcBo2KigDXRiikF5EaCEW8hMSsilsVUL1YGBEehkZGlVFFLT3TdN698lIuhXibSWbmp2QmoBF4DAodjUy6RiwoaSz+rIlEUWRkkaMvh1VQSiF5ex8Gg42PxcUnJEllmnrJECHjemF2QUF6VgoeHYdFY1Dgn4jOuFFVUt5RUt6WRxTiMVgU4sqtcgqk+dewXCRqEQpwiEuUUmqLbLiUzEn7NDkRi/4Uj0+Mi4+PTUiMT8nJLi8kcvLyqvJzK1OTMxJxmJo7VOjZ5FfqNvlXw/dH1QOj6r5HAz0jg31jIT0wMTQ4cU89NjQ4quofVSk1vR0PezsnBnqGlV1DCvn3E4+hDycnp17vh0DgY/DoYyAYEoHAB7//7PDAuW/0Wqx/BAL/PQZb/j+DgT+DwY+gHgXOfN4PQT90cnjoMZmMW1v7Op11d9e+t2fb07vfmxxGo/bNm+21dbfJ5DLtg2o37DmMBqAPbJaA03bs80KngYDXbF5ZWHg9N7fx62+7GxtvXy/vrK2Dur60BF63V1f1G5tei9kW6rtnNxhA6yOX48Tng079fmDe39626vU2vd6y+870bmdvc+vd27dGndao0xm2tNZdkOU9GOgxmz3m9wGHLeiwnx4cnJst5u21Ne3Kqm41hHZlxaAN2fY2N/e2tkzb2wAgjFqtAVSd1vPeFHQ6Tg/A5MNDn8UMwjgMBtf+PpgATntos4HtgMMRcDqO3M6gyxmqTsex23XscQddDjD5BJj/CB4dezynPm/AYfc77EdOJ/giZDvH73AEnSFb4BwgTrzu87620GSPxbyxuKBfWz20Wn0Wy4HV6rfb/sZhP+9i94MsrpDTZzYdgTguENsLabo6hgWC9ju3Xk5+fXZweOz2nHg8J17vX/zu8576fMehFc+hzfpm9uVgu2zl1axlZydk7m9seMBiwdnpzTzm5tLi2vyrjYX5rdeL2uUl3fKSdmlRtwxY0q/89sOXEw+UXZ3SujFV35OhweXZF9DC3Fwdky7hwDx6NYdWVcukNQq4MlFtSx3/bi1PxGY08tiAZj4sEwnapeJmAQcgZNJePJv5P+eYEpnb13VkAAAAAElFTkSuQmCC'); background-size: cover; display: block;" Err codemadness.org 70 i 2655 ></span> Err codemadness.org 70 i 2656 <img Err codemadness.org 70 i 2657 class="gatsby-resp-image-image" Err codemadness.org 70 i 2658 alt="wed-card" Err codemadness.org 70 i 2659 title="wed-card" Err codemadness.org 70 i 2660 src="/static/42d3d89633a83af49f7eb084c0aa25cc/a414c/wed-card.png" Err codemadness.org 70 i 2661 srcset="/static/42d3d89633a83af49f7eb084c0aa25cc/222b7/wed-card.png 163w, Err codemadness.org 70 i 2662 /static/42d3d89633a83af49f7eb084c0aa25cc/a414c/wed-card.png 206w" Err codemadness.org 70 i 2663 sizes="(max-width: 206px) 100vw, 206px" Err codemadness.org 70 i 2664 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 2665 loading="lazy" Err codemadness.org 70 i 2666 /> Err codemadness.org 70 i 2667 </a> Err codemadness.org 70 i 2668 </span></p> Err codemadness.org 70 i 2669 <blockquote> Err codemadness.org 70 i 2670 <p>Source: <a href="http://www.cardgamedb.com/index.php/starwars/star-wars-card-spoilers/_/the-hoth-cycle/assault-on-echo-base/wed-15-1016-assault-on-echo-base-55-2">Card Game DB</a></p> Err codemadness.org 70 i 2671 </blockquote> Err codemadness.org 70 i 2672 <p>Here is one of WED-15-1016's cousins, a fully tricked-out WED Treadwell with all sorts of terrifying arms and claws:</p> Err codemadness.org 70 i 2673 <p><span Err codemadness.org 70 i 2674 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 2675 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 2676 > Err codemadness.org 70 i 2677 <a Err codemadness.org 70 i 2678 class="gatsby-resp-image-link" Err codemadness.org 70 i 2679 href="/static/6afe934f96e3f13bbf2ce81b82c3f2c6/0d333/WED-treadwell.jpg" Err codemadness.org 70 i 2680 style="display: block" Err codemadness.org 70 i 2681 target="_blank" Err codemadness.org 70 i 2682 rel="noopener" Err codemadness.org 70 i 2683 > Err codemadness.org 70 i 2684 <span Err codemadness.org 70 i 2685 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 2686 style="padding-bottom: 98.15950920245399%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGQABAAMBAQAAAAAAAAAAAAAAAAMEBQEC/8QAFAEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAAB24PVYdJwkVcG8E//xAAbEAADAAIDAAAAAAAAAAAAAAABAgMAEQQQIf/aAAgBAQABBQIuNzcBcp4nF0yDGmCUkrdf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAGxAAAQQDAAAAAAAAAAAAAAAAAQAQESExYYH/2gAIAQEABj8ChDNsT1aabRlv/8QAHBABAQACAgMAAAAAAAAAAAAAAREAIRAxQWFx/9oACAEBAAE/IQdtzxU2tvBtoIxlJtDDNCZuUPpxCHT84//aAAwDAQACAAMAAAAQE8c8/8QAFxEAAwEAAAAAAAAAAAAAAAAAARARIf/aAAgBAwEBPxCYqYv/xAAXEQADAQAAAAAAAAAAAAAAAAABEBEh/9oACAECAQE/ELqgq//EACAQAQABAwMFAAAAAAAAAAAAAAERACFBYZGhEFFxgbH/2gAIAQEAAT8QZosqYnQqVCApKLMRx0vmmVxFz7UgEIBhk7780UVi3rFNGSaGzTUzEWbvMUWK/9k='); background-size: cover; display: block;" Err codemadness.org 70 i 2687 ></span> Err codemadness.org 70 i 2688 <img Err codemadness.org 70 i 2689 class="gatsby-resp-image-image" Err codemadness.org 70 i 2690 alt="wed-tread" Err codemadness.org 70 i 2691 title="wed-tread" Err codemadness.org 70 i 2692 src="/static/6afe934f96e3f13bbf2ce81b82c3f2c6/6aca1/WED-treadwell.jpg" Err codemadness.org 70 i 2693 srcset="/static/6afe934f96e3f13bbf2ce81b82c3f2c6/d2f63/WED-treadwell.jpg 163w, Err codemadness.org 70 i 2694 /static/6afe934f96e3f13bbf2ce81b82c3f2c6/c989d/WED-treadwell.jpg 325w, Err codemadness.org 70 i 2695 /static/6afe934f96e3f13bbf2ce81b82c3f2c6/6aca1/WED-treadwell.jpg 650w, Err codemadness.org 70 i 2696 /static/6afe934f96e3f13bbf2ce81b82c3f2c6/7c09c/WED-treadwell.jpg 975w, Err codemadness.org 70 i 2697 /static/6afe934f96e3f13bbf2ce81b82c3f2c6/0d333/WED-treadwell.jpg 1175w" Err codemadness.org 70 i 2698 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 2699 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 2700 loading="lazy" Err codemadness.org 70 i 2701 /> Err codemadness.org 70 i 2702 </a> Err codemadness.org 70 i 2703 </span></p> Err codemadness.org 70 i 2704 <blockquote> Err codemadness.org 70 i 2705 <p>Source: <a href="https://starwars.fandom.com/wiki/WED_Treadwell_repair_droid/Legends">Fandom</a></p> Err codemadness.org 70 i 2706 </blockquote> Err codemadness.org 70 i 2707 <p>I even found this questionably-real deleted scene from A New Hope showing an impatient Luke Skywalker interacting with a Treadwell on Tattoine:</p> Err codemadness.org 70 i 2708 <iframe width="720" height="415" src="https://www.youtube.com/embed/nDPZfPe5F-w" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> Err codemadness.org 70 i 2709 <h2>More robots</h2> Err codemadness.org 70 i 2710 <p>So, who did I miss in my list? Data? He's an android, so not exactly a robot. But possibly Mega Man X is an android, so maybe I'm already mixing things up.</p> Err codemadness.org 70 i 2711 <p>Speaking of lists, I also found this gigantic <a href="https://en.wikipedia.org/wiki/List_of_fictional_robots_and_androids">list of fictional robots and androids</a> on Wikipedia.</p> Err codemadness.org 70 i 2712 <p>I'm not-so-secretly hoping that, one day, the robots in my book will be added to this Wikipedia list. Yes, I could edit the Wikipedia page myself, but c'mon, that's not the goal here.</p> Err codemadness.org 70 i 2713 <h2>From cardboard to ciruit boards</h2> Err codemadness.org 70 i 2714 <p>Also, it's high time to upgrade my hobby. I've begun looking into basic robotics kits, and I'll hopefully be constructing some new robotic best friends very soon. Maybe not Maker-Faire worthy, but ya gotta start somewhere.</p><![CDATA[Create wonderful things, be good, have fun]]>https://www.charlieharrington.com/create-wonderful-things-be-good-have-funhttps://www.charlieharrington.com/create-wonderful-things-be-good-have-funWed, 24 Jun 2020 00:00:00 GMT<blockquote> Err codemadness.org 70 i 2715 <p>Create wonderful things, be good, have fun</p> Err codemadness.org 70 i 2716 </blockquote> Err codemadness.org 70 i 2717 <p>This is the credo of Klutz Press, the most important book publisher of my childhood. It being summer and all, Hobbes, ol' buddy... let's going exploring!</p> Err codemadness.org 70 i 2718 <h2>What makes a Klutz Press book so good for learning stuff?</h2> Err codemadness.org 70 i 2719 <p>If you've heard of Klutz, then you've likely seen their debut: <a href="https://www.amazon.com/gp/product/0932592007/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=0932592007&#x26;linkId=adaa512e8af09feab7c571ec8f2863cc">Juggling For the Complete Klutz</a>. </p> Err codemadness.org 70 i 2720 <p><span Err codemadness.org 70 i 2721 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 2722 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 2723 > Err codemadness.org 70 i 2724 <a Err codemadness.org 70 i 2725 class="gatsby-resp-image-link" Err codemadness.org 70 i 2726 href="/static/c28fcf440265c6bea76d51f90e51b462/1cfc2/juggling.png" Err codemadness.org 70 i 2727 style="display: block" Err codemadness.org 70 i 2728 target="_blank" Err codemadness.org 70 i 2729 rel="noopener" Err codemadness.org 70 i 2730 > Err codemadness.org 70 i 2731 <span Err codemadness.org 70 i 2732 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 2733 style="padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAACXBIWXMAAA7DAAAOwwHHb6hkAAADFUlEQVQ4y42Ue0hTURzHLxkIFlEU5VDyjyAyguoPMwn6QwqUpIiiSKwowR4kFqIIQv2hUoQm9vKRRpboKJ2lzsfW3JzuuruXe3j3dNvd3NS73Xnd3dz0zrvlI5ezGX3/OJzfj/M553t+/M4BQusKBoPLIw7JMT60ElJUcKNCUQT8gSlqeXSPwfKcAp/BHM6EtRyQW8Hh1bMjImlds9ZqV4xrJXJYJFWMCEUDfCHY0wu2tlinZsI2gU1OXChG+BchFud9TWPZq8byqvqK6oaK6vqnNR8VRQ+QgpsmE/IXvBoQegOf0a3rarNcu0f/0Pr5ay8kVWm0ep3eqNSZ4J/sjtoGHWKLDi/g+EzfgOzcFVF+qdFiNesnuH08Vj8bEozyWTypTGOedhKEZ335xoItrVx4pp05fDhdUVknGBpprm/pZzBBJkvYz2YzuV+a6GaTYWPdgY2ko5crPpKuSUhR7DnGuFM8Ne+f0+lRLgdlMb0OO6qBMauFXKKiw2PZ+RBAg3enNR641FVS5xN+Rxlv0c43jvaXjvbnNpnYjtgCgUAkvGplkQoOXrwtiDlZlVJRfSpv4EaRC2Q6BumYsM9lVLlgCFWP2w3mQICMgNdK518kv52/zo9N5uxK4wPxYPpV3Kl2OdFZDznnxFANMgkr3biJJKPBC0tLrIyc4e1J0p2HhoB9srxC66TWZtR4fCFskOkdeejGBLhNQm6yvQ4HwMxbFiARi0nqjEsZuFtS3g3RykGBIi/kPEpMv5vF8Lk5Irpt78Ii9+zlrtgTlafvlyVng7mlSgTtlxp1ajqKsHA3tUxaJxHC445okrWZx+v7kZrRsCPt08FMPrBflvvEgaGztkmNclqptFksExq1XCwZxnFXFNg77+tNzZID8TPbaKNAfM+j0iGQN8zniCGeRMQdBQchIU8mExAEHtmeq7MAGeCmZg0BNPbe468TLnQVv1CqxLBKZjJq7TYEc6JuN+7z+yhqiyaRFD6rBuIeJ2bV0M5Y6IxwfitFPAw/QYhrm+C2DsJgCP0+IfyRBP/1k4S3+H/9AqWS8XTUu4ovAAAAAElFTkSuQmCC'); background-size: cover; display: block;" Err codemadness.org 70 i 2734 ></span> Err codemadness.org 70 i 2735 <img Err codemadness.org 70 i 2736 class="gatsby-resp-image-image" Err codemadness.org 70 i 2737 alt="juggling" Err codemadness.org 70 i 2738 title="juggling" Err codemadness.org 70 i 2739 src="/static/c28fcf440265c6bea76d51f90e51b462/a6d36/juggling.png" Err codemadness.org 70 i 2740 srcset="/static/c28fcf440265c6bea76d51f90e51b462/222b7/juggling.png 163w, Err codemadness.org 70 i 2741 /static/c28fcf440265c6bea76d51f90e51b462/ff46a/juggling.png 325w, Err codemadness.org 70 i 2742 /static/c28fcf440265c6bea76d51f90e51b462/a6d36/juggling.png 650w, Err codemadness.org 70 i 2743 /static/c28fcf440265c6bea76d51f90e51b462/1cfc2/juggling.png 900w" Err codemadness.org 70 i 2744 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 2745 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 2746 loading="lazy" Err codemadness.org 70 i 2747 /> Err codemadness.org 70 i 2748 </a> Err codemadness.org 70 i 2749 </span></p> Err codemadness.org 70 i 2750 <p>If not, I highly suggest seeking out a copy. Keep in mind, it's more than just a <em>book</em> -- <em>Juggling for the Complete Klutz</em> has these amazing attributes:</p> Err codemadness.org 70 i 2751 <ul> Err codemadness.org 70 i 2752 <li>It's spiral-bound</li> Err codemadness.org 70 i 2753 <li>It has hilarious drawings</li> Err codemadness.org 70 i 2754 <li>It comes attached with three real-life bean bags!</li> Err codemadness.org 70 i 2755 </ul> Err codemadness.org 70 i 2756 <p>These are book super-powers, in my book (a Klutz-worthy pun?). In our day, my sister and I owned, devoured, and treasured these Klutz titles:</p> Err codemadness.org 70 i 2757 <ul> Err codemadness.org 70 i 2758 <li><a href="https://www.amazon.com/gp/product/0932592082/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=0932592082&#x26;linkId=5bb878d785a02edc2b01eeffd63f9a76">Country and Blues Harmonica for the Musically Hopeless</a> (comes with instructional cassette and a gen-u-ine Hohner harmonica)</li> Err codemadness.org 70 i 2759 <li><a href="https://www.amazon.com/gp/product/1591747007/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=1591747007&#x26;linkId=bf0dda95c016b59824316ebe42f872ec">Friendship Bracelets Craft Kit</a> (comes with string and supplies for making friendship bracelets)</li> Err codemadness.org 70 i 2760 <li><a href="https://www.amazon.com/gp/product/1878257501/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=1878257501&#x26;linkId=7315967f85fba1c812b20b480b0bd966">Table Top Football: A Guide to the Classic Lunchroom Sport</a> (comes with an amazing leather-ish table top football)</li> Err codemadness.org 70 i 2761 <li><a href="https://www.amazon.com/gp/product/1878257536/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=1878257536&#x26;linkId=58c3235cd298baf5ec29fb13ee806ced">Cats Cradle</a> (comes with a tie-die cat's cradle string)</li> Err codemadness.org 70 i 2762 <li><a href="https://www.amazon.com/gp/product/1591745047/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=1591745047&#x26;linkId=905fbe99f4844c375f00baa92f1beee0">Bead Loom Bracelets: Learn to Make Beautiful Beaded Bracelets</a> (comes with beads and string)</li> Err codemadness.org 70 i 2763 <li><a href="https://www.amazon.com/gp/product/1878257412/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=1878257412&#x26;linkId=d283508248a4016cd908bd8e37fcea68">Kids Shenanigans</a> (comes with a Whoopie cushion!)</li> Err codemadness.org 70 i 2764 <li><a href="https://www.amazon.com/gp/product/1878257749/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=1878257749&#x26;linkId=99f448476dd4b6ce6baae76dbf048446">Earthsearch: A Kid's Geography Museum in a Book</a> (comes with interactive spinners, a sand-powered clock, and a real-life penny)</li> Err codemadness.org 70 i 2765 <li><a href="https://www.amazon.com/gp/product/1878257145/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=1878257145&#x26;linkId=6b93493aa3d2cd5660e5e24c404ad5e6">Explorabook: A Kid's Science Museum in a Book</a> (comes with a bunch more interactive projects and whatnots inside the book, like mirrors, spinners, and a packet of algae that you can grow)</li> Err codemadness.org 70 i 2766 </ul> Err codemadness.org 70 i 2767 <p>As a kid, there was nothing better than getting a new Klutz book (ok, maybe a Super Nintendo game). But unlike a replay of <em>Super Mario RPG</em>, these Klutz books require no nostaglia goggles. Here's why I think they're magic:</p> Err codemadness.org 70 i 2768 <h3>Klutz books are spiral-bound</h3> Err codemadness.org 70 i 2769 <p>Books for learning stuff should be able to open up and stay flat. The old 1980s computer manuals for computers like the Commodore VIC-20, the Commodore 64, and <a href="/my-new-old-apple-iie-computer">my new old Apple IIe</a> knew this much -- their manuals were spiral-bound and spell-binding.</p> Err codemadness.org 70 i 2770 <p>So, why don't we see more spiral-bound books? Without knowing that much about printing costs, I imagine they're more expensive. Also, they do look slightly worse on a bookshelf, especially if you're going for that 'grammable color pattern look (so, just don't do this).</p> Err codemadness.org 70 i 2771 <h3>Klutz books come with the required materials</h3> Err codemadness.org 70 i 2772 <p>The little "paper" football that came with the <em>Table Top Football: A Guide to the Classic Lunchroom Sport</em> was a revered grail of mine. I remember that my dad took a sheetrock knife and made a small incision in its plastic case attached to the book so that the football could be slid in and out, with the explicit rule that the football must either be <em>in the case</em> or <em>being used in a game</em>. This is much like the inexorable <a href="https://hypercritical.co">Jon Siracusan</a> rule for Airpods. Obey, or the Airpods will be instantly lost forever.</p> Err codemadness.org 70 i 2773 <p><span Err codemadness.org 70 i 2774 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 2775 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 334px; " Err codemadness.org 70 i 2776 > Err codemadness.org 70 i 2777 <a Err codemadness.org 70 i 2778 class="gatsby-resp-image-link" Err codemadness.org 70 i 2779 href="/static/e4a351feccb1c6d3e7524fa014860c7c/20f07/football.jpg" Err codemadness.org 70 i 2780 style="display: block" Err codemadness.org 70 i 2781 target="_blank" Err codemadness.org 70 i 2782 rel="noopener" Err codemadness.org 70 i 2783 > Err codemadness.org 70 i 2784 <span Err codemadness.org 70 i 2785 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 2786 style="padding-bottom: 149.69325153374234%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAeABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAEEAgP/xAAXAQADAQAAAAAAAAAAAAAAAAAAAgMB/9oADAMBAAIQAxAAAAFvlpbUjNlJxvnF2IF//8QAHhAAAgICAgMAAAAAAAAAAAAAAQIAAwQSESExMkL/2gAIAQEAAQUC+4vYs9+4vhidg41qblTUTLcTeLjkT//EABkRAQADAQEAAAAAAAAAAAAAAAEAAhESIf/aAAgBAwEBPwFtUxYoukN3pns//8QAFhEBAQEAAAAAAAAAAAAAAAAAEBFB/9oACAECAQE/AbhD/8QAHBAAAgEFAQAAAAAAAAAAAAAAAAEREBIhMWEy/9oACAEBAAY/Atm6Yq1A5jmSTaFa44ej/8QAHxAAAgEDBQEAAAAAAAAAAAAAAAERITFREEFhgaFx/9oACAEBAAE/IXdNH0pt60s+YTwWTMoPdkk4oBLInfctKKiGaGunQhijhI//2gAMAwEAAgADAAAAEMgac//EABkRAAMBAQEAAAAAAAAAAAAAAAERMQBRYf/aAAgBAwEBPxB6SJFjqJxi5J5kRfd//8QAFxEBAQEBAAAAAAAAAAAAAAAAAQAhEf/aAAgBAgEBPxAO8QZIcgA5f//EABoQAQADAQEBAAAAAAAAAAAAAAEAESExQVH/2gAIAQEAAT8QOCFLqxOFsfl5YHep2OopSsOwNGiW8yPYjHSMIaUDyIP2miL+adu5nhc+uEGVBtaKhC5o1mB6+jdqIaReYA5P/9k='); background-size: cover; display: block;" Err codemadness.org 70 i 2787 ></span> Err codemadness.org 70 i 2788 <img Err codemadness.org 70 i 2789 class="gatsby-resp-image-image" Err codemadness.org 70 i 2790 alt="football" Err codemadness.org 70 i 2791 title="football" Err codemadness.org 70 i 2792 src="/static/e4a351feccb1c6d3e7524fa014860c7c/20f07/football.jpg" Err codemadness.org 70 i 2793 srcset="/static/e4a351feccb1c6d3e7524fa014860c7c/d2f63/football.jpg 163w, Err codemadness.org 70 i 2794 /static/e4a351feccb1c6d3e7524fa014860c7c/c989d/football.jpg 325w, Err codemadness.org 70 i 2795 /static/e4a351feccb1c6d3e7524fa014860c7c/20f07/football.jpg 334w" Err codemadness.org 70 i 2796 sizes="(max-width: 334px) 100vw, 334px" Err codemadness.org 70 i 2797 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 2798 loading="lazy" Err codemadness.org 70 i 2799 /> Err codemadness.org 70 i 2800 </a> Err codemadness.org 70 i 2801 </span></p> Err codemadness.org 70 i 2802 <p>Side note that there are some people who just love making small cuts into the plastic cases for things, so that you easily return them to their "pristine" condition. I, myself, don't understand these people. I like wripping these cases to shreds instantly.</p> Err codemadness.org 70 i 2803 <p>Anyway, back to these Klutz books. By including juggling bean bags, yarn for friendship bracelets, or a real harmonica, Klutz Press books gave you everything you needed to get your hands dirty. "Active learning", or something like that. Playing = learning. Etcetera.</p> Err codemadness.org 70 i 2804 <h3>Klutz books have hilarious art</h3> Err codemadness.org 70 i 2805 <p><span Err codemadness.org 70 i 2806 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 2807 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 450px; " Err codemadness.org 70 i 2808 > Err codemadness.org 70 i 2809 <a Err codemadness.org 70 i 2810 class="gatsby-resp-image-link" Err codemadness.org 70 i 2811 href="/static/6c99ba6e2419ae976e32b7e293532a7a/20e5d/shenanigan.jpg" Err codemadness.org 70 i 2812 style="display: block" Err codemadness.org 70 i 2813 target="_blank" Err codemadness.org 70 i 2814 rel="noopener" Err codemadness.org 70 i 2815 > Err codemadness.org 70 i 2816 <span Err codemadness.org 70 i 2817 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 2818 style="padding-bottom: 105.52147239263803%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAVABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAMFAQL/xAAWAQEBAQAAAAAAAAAAAAAAAAABAAL/2gAMAwEAAhADEAAAAdbnrMHXTOaxLVhH/8QAHBAAAgICAwAAAAAAAAAAAAAAAQIDEgARISIz/9oACAEBAAEFApN2LODG11PJdu8HjUY8KvirVf/EABgRAQEAAwAAAAAAAAAAAAAAAAEQAhEh/9oACAEDAQE/Acl4E3P/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/AR//xAAbEAACAwADAAAAAAAAAAAAAAAAEQIhQQFRYf/aAAgBAQAGPwKKwdIY/UckSq06Ef/EABwQAQACAwADAAAAAAAAAAAAAAEAESExQVFhof/aAAgBAQABPyHfmlkI6WLkpZRQkhvzZPgjVXSPcPIQgOif/9oADAMBAAIAAwAAABD40Dz/xAAYEQADAQEAAAAAAAAAAAAAAAAAAREh0f/aAAgBAwEBPxDAt3onVUVbRKH/xAAYEQACAwAAAAAAAAAAAAAAAAAAARARIf/aAAgBAgEBPxBYIqP/xAAeEAEBAAMAAQUAAAAAAAAAAAABEQAhMUFRYZHB4f/aAAgBAQABPxApxWslvL8YioBbdp66M2IbXl+8SKLKTxPGbV2tv3wQefrIIQcjra44KFKwLjarpL3P/9k='); background-size: cover; display: block;" Err codemadness.org 70 i 2819 ></span> Err codemadness.org 70 i 2820 <img Err codemadness.org 70 i 2821 class="gatsby-resp-image-image" Err codemadness.org 70 i 2822 alt="shenanigan" Err codemadness.org 70 i 2823 title="shenanigan" Err codemadness.org 70 i 2824 src="/static/6c99ba6e2419ae976e32b7e293532a7a/20e5d/shenanigan.jpg" Err codemadness.org 70 i 2825 srcset="/static/6c99ba6e2419ae976e32b7e293532a7a/d2f63/shenanigan.jpg 163w, Err codemadness.org 70 i 2826 /static/6c99ba6e2419ae976e32b7e293532a7a/c989d/shenanigan.jpg 325w, Err codemadness.org 70 i 2827 /static/6c99ba6e2419ae976e32b7e293532a7a/20e5d/shenanigan.jpg 450w" Err codemadness.org 70 i 2828 sizes="(max-width: 450px) 100vw, 450px" Err codemadness.org 70 i 2829 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 2830 loading="lazy" Err codemadness.org 70 i 2831 /> Err codemadness.org 70 i 2832 </a> Err codemadness.org 70 i 2833 </span></p> Err codemadness.org 70 i 2834 <p>Just look at that paper airplane stuck in the teacher's hair!</p> Err codemadness.org 70 i 2835 <p>Klutz had a particular art direction that spoke to me as a child. The goofy people in their guides made me feel like it was <em>okay to be a klutz</em>. </p> Err codemadness.org 70 i 2836 <p>Which brings me to the most important reason that Klutz books are special.</p> Err codemadness.org 70 i 2837 <h3>Klutz books embrace the Beginner's Mindset</h3> Err codemadness.org 70 i 2838 <blockquote> Err codemadness.org 70 i 2839 <p>In the beginner's mind there are many possibilities. In the experts mind there are few - Shunryū Suzuki</p> Err codemadness.org 70 i 2840 </blockquote> Err codemadness.org 70 i 2841 <p>Everyone starts out as a klutz. No matter what. That means it's okay to make mistakes. It can even be funny - in fact, it should be funny! Because it's fun to learn new things.</p> Err codemadness.org 70 i 2842 <p>Being a klutz, making mistakes, having fun, this is the path to wonderful things.</p> Err codemadness.org 70 i 2843 <h2>Who's behind Klutz Press?</h2> Err codemadness.org 70 i 2844 <p>According to <a href="https://en.wikipedia.org/wiki/Klutz_Press">Wikipedia</a>, Klutz Press was founded in 1977 by three friends in Palo Alto.</p> Err codemadness.org 70 i 2845 <p>The apocryphal story is that <a href="https://en.wikipedia.org/wiki/John_Cassidy_(author)">John Cassidy</a>, a recent Stanford grad working as a high school teacher, brought a bucket of tennis balls and some hand-written instructions for juggling to his remedial reading class. The laughs and learning and genuine reading and genuine juggling that ensued inspired Cassidy and his buddies from Stanford to publish <em>Juggling For the Complete Klutz</em> under their new company: Klutz Press.</p> Err codemadness.org 70 i 2846 <p><em>Juggling For the Complete Klutz</em> has sold over 2.5 million copies. But Googling for Klutz Press is somewhat challenging these days. In 2000, Klutz was acquired by a company called Nelvana for $74 million, and in 2002 Klutz became a subsidiary of Scholastic, Inc. This latter merger is a good match in my book, as the Scholastic Book Fair also ranks heavily in my childhood memories of learning to love reading. The only other company I'd feel comfortable with owning Klutz Press is Pizza Hut - thanks to their delicious <a href="https://www.bookitprogram.com/">BOOK-IT!</a> reading program, which brought me dozens of delicious cheese Personal Pan Pizzas during the 1990s. My parents couldn't decide if they hated or loved Pizza Hut for this.</p> Err codemadness.org 70 i 2847 <p>Nowadays, Klutz.com redirects to the Scholastic website, and it's unclear what's out-of-print or available from the voluminous Klutz catalog. So if you do find a genuine Klutz book and kit, I'd snag them quickly!</p> Err codemadness.org 70 i 2848 <p>Luckily, I was able to find a good interview with Cassidy from 1995 on the <a href="https://web.archive.org/web/20110616182712/http://findarticles.com/p/articles/mi_m1154/is_n5_v83/ai_16857996/">Wayback Machine</a>. In 1995, Klutz was at the height of their power and influence in kid's minds. Here are some choice quotes from Cassidy:</p> Err codemadness.org 70 i 2849 <p>On their company culture at Klutz Press:</p> Err codemadness.org 70 i 2850 <blockquote> Err codemadness.org 70 i 2851 <p>"In terms of being laid back, we take a back seat to nobody."</p> Err codemadness.org 70 i 2852 </blockquote> Err codemadness.org 70 i 2853 <p>On their "teaching" style:</p> Err codemadness.org 70 i 2854 <blockquote> Err codemadness.org 70 i 2855 <p>"Talk to a kid about fun and math, and it's like you're talking about two different sides of the universe. If we can climb this mountain, there's nothing we can't tackle."</p> Err codemadness.org 70 i 2856 </blockquote> Err codemadness.org 70 i 2857 <blockquote> Err codemadness.org 70 i 2858 <p>"Kids don't learn all that much by listening or reading. They need to get elbow-deep in a subject and touch it, feel it, and smell it."</p> Err codemadness.org 70 i 2859 </blockquote> Err codemadness.org 70 i 2860 <p>This reminds me of Seymour Paypert's <a href="https://www.amazon.com/gp/product/0465046746/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=0465046746&#x26;linkId=2949aefc36d4bd9d9f632170d2ac23de">Mindstorms book</a> about his work with LOGO and the Turtle machine (you can check out <a href="/mindstorms">my notes</a> on the book)</p> Err codemadness.org 70 i 2861 <p>The article explains a bit about their business:</p> Err codemadness.org 70 i 2862 <ul> Err codemadness.org 70 i 2863 <li>All of Klutz' books sell for less than $20</li> Err codemadness.org 70 i 2864 <li>They can have low prices because: (1) the books (with their accompanying "stuff") are viewed as more than books - but "toys/novelties", so more retailers than booksellers are interesting in carring them, and (2) they do large printing runs (150k copies vs the usual 10k for children's books)</li> Err codemadness.org 70 i 2865 </ul> Err codemadness.org 70 i 2866 <p>And, importantly, the final word from Cassidy:</p> Err codemadness.org 70 i 2867 <blockquote> Err codemadness.org 70 i 2868 <p>"I can hang a spoon off my nose," Cassidy boasts, "and I take a lot of pride in that".</p> Err codemadness.org 70 i 2869 </blockquote> Err codemadness.org 70 i 2870 <h2>Create wonderful things, be good, have fun</h2> Err codemadness.org 70 i 2871 <p>I just wanted to write that out again. I've decided to adopt their credo as my own life motto.</p> Err codemadness.org 70 i 2872 <p>I learned so much from Klutz Press as a kid. I'm still learning now. Thank you, John Cassidy and team, for making these wonderful books. My juggling is finally starting to get pretty good, but I'll always be a klutz.</p><![CDATA[The Six Levels of Interaction with a System]]>https://www.charlieharrington.com/the-six-levels-of-interaction-with-a-systemhttps://www.charlieharrington.com/the-six-levels-of-interaction-with-a-systemTue, 26 May 2020 00:00:00 GMT<p>We recently borrowed our friends' car, because they're awesome. Along with the keys, they gave us <em>a few, uh, provisos, a, a couple of quid pro quos:</em><sup>1</sup></p> Err codemadness.org 70 i 2873 <ul> Err codemadness.org 70 i 2874 <li>The car takes the expensive kind of gas</li> Err codemadness.org 70 i 2875 <li>The trunk doesn't always open up from the outside</li> Err codemadness.org 70 i 2876 <li>The dash says the tail-light is out, but it's not</li> Err codemadness.org 70 i 2877 <li>You'll need to add more oil every 100 miles or so, and it might need an oil change</li> Err codemadness.org 70 i 2878 </ul> Err codemadness.org 70 i 2879 <p>I nodded throughout. Yup, needs prem-o gas. Trunk's weird, okay. Tail-light-light's-not-alright, good to know. Oil, yes, oil's a thing that cars need.</p> Err codemadness.org 70 i 2880 <p>Meanwhile, I caught myself thinking, "Wow, they really know a lot about cars."</p> Err codemadness.org 70 i 2881 <p>I, for one, don't. My dad knows how to take a car apart and put it back together. I know how to get 120 stars in Super Mario 64. Sure, I learned <em>some stuff</em> about cars growing up. I've changed flat tires in a pinch, once helped my dad replace brake pads on our monstrous Suburban, and sorta payed attention while I helped him change the oil in Old Blue (his beloved sky blue '85 Blazer).</p> Err codemadness.org 70 i 2882 <p>Fact is, I've never owned a car in my adult life (hello, city-living). For those intermittent and unavoidable road trips, I've been a semi-content customer of Zipcar. I never been forced to face the reality of <strong>learning cars</strong>.</p> Err codemadness.org 70 i 2883 <p>But, sure, I'd like to!</p> Err codemadness.org 70 i 2884 <p>Even now, I'm starting to fantasize about acquiring the rusted hulk of a old Volkswagon Beetle, depositing it via crane into my garage workshop lair, tearing it apart and rebuilding it anew from first principles, as I both rediscover the invention of internal combustion and manufacture one pretty-sweet ride.</p> Err codemadness.org 70 i 2885 <p>Where does this fantasy come from? Well, I've been told that Beetles have a relatively straight-forward engine for beginners (though I'm not quite sure what exactly that means). But that's not quite it. Frankly, this is an all-to-familiar headspace for me. Intimidated by the mention of changing oil, my brain races ahead rebuilding a car from scratch in order to understand ... why I needed to change the oil in an entirely different car.</p> Err codemadness.org 70 i 2886 <p>Why do I jump all the way to wanting to understand things from first principles?</p> Err codemadness.org 70 i 2887 <p>Maybe because this has been a mostly-successful ideal for me to aspire to when I learned programming as an adult, and I'm now pattern-matching into other complex systems. But, certainly, I should be able to productive with a system far in advance of knowing how to build it from scratch. Isn't that what interfaces are all about?</p> Err codemadness.org 70 i 2888 <p>Which brings me to the following shower thought:</p> Err codemadness.org 70 i 2889 <h2>The Six Levels of Interaction with Systems</h2> Err codemadness.org 70 i 2890 <p>The six levels of interaction with a system are:</p> Err codemadness.org 70 i 2891 <ol start="0"> Err codemadness.org 70 i 2892 <li>Non-use</li> Err codemadness.org 70 i 2893 <li>Use</li> Err codemadness.org 70 i 2894 <li>Monitor</li> Err codemadness.org 70 i 2895 <li>Maintain</li> Err codemadness.org 70 i 2896 <li>Repair</li> Err codemadness.org 70 i 2897 <li>(Re)build</li> Err codemadness.org 70 i 2898 </ol> Err codemadness.org 70 i 2899 <p>Yes, this is zero-indexed, obviously. Want to see it as a Ben Thompson <a href="https://stratechery.com/">Stratechery-style</a> diagram?</p> Err codemadness.org 70 i 2900 <p><span Err codemadness.org 70 i 2901 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 2902 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 2903 > Err codemadness.org 70 i 2904 <a Err codemadness.org 70 i 2905 class="gatsby-resp-image-link" Err codemadness.org 70 i 2906 href="/static/019fd88c90423bca8237edf07f8b24fe/07d37/stages.png" Err codemadness.org 70 i 2907 style="display: block" Err codemadness.org 70 i 2908 target="_blank" Err codemadness.org 70 i 2909 rel="noopener" Err codemadness.org 70 i 2910 > Err codemadness.org 70 i 2911 <span Err codemadness.org 70 i 2912 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 2913 style="padding-bottom: 18.404907975460123%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAYAAACOXx+WAAAACXBIWXMAABYlAAAWJQFJUiTwAAABOElEQVQY0w2PyyvDcQDAv8q/wU20tIeDPFKIcvHMTUqirM3awsEzq7UxDuTRXNmG2ZiGUstSa2GnpbHRZg42a/LcktPH7/Dpc/vUR1ivJ1gIGdiPOsmnfHwF2ymE+8gG+sm5h/nyDEkeID43QlKj51mn5mbUxJ7ei0fnxjnuZdgXZ/AiTbcvieg5U9F1KmM+PMt3xAzHAs4F77uCz2nBz6SgMCeIt5SQkleTVMkIqHpZrrKxrlzFUmNDWCOItTvEkkSHR0GbvYyZ4DR/sSV+3YKPQ0HeXURWCiYMglfJsdZSwhVKovJy/IpOTIoVFivNmGttFFuupWgIYQxKXGoxBtQ4bh3kEy5yZzLe/PW8nDSR2Woms9FAerOOhylpWzfGo17Dld7EvrR8oHWxYziiaTtCo/cJpf2efzWZ0sRof74lAAAAAElFTkSuQmCC'); background-size: cover; display: block;" Err codemadness.org 70 i 2914 ></span> Err codemadness.org 70 i 2915 <img Err codemadness.org 70 i 2916 class="gatsby-resp-image-image" Err codemadness.org 70 i 2917 alt="levels" Err codemadness.org 70 i 2918 title="levels" Err codemadness.org 70 i 2919 src="/static/019fd88c90423bca8237edf07f8b24fe/a6d36/stages.png" Err codemadness.org 70 i 2920 srcset="/static/019fd88c90423bca8237edf07f8b24fe/222b7/stages.png 163w, Err codemadness.org 70 i 2921 /static/019fd88c90423bca8237edf07f8b24fe/ff46a/stages.png 325w, Err codemadness.org 70 i 2922 /static/019fd88c90423bca8237edf07f8b24fe/a6d36/stages.png 650w, Err codemadness.org 70 i 2923 /static/019fd88c90423bca8237edf07f8b24fe/e548f/stages.png 975w, Err codemadness.org 70 i 2924 /static/019fd88c90423bca8237edf07f8b24fe/3c492/stages.png 1300w, Err codemadness.org 70 i 2925 /static/019fd88c90423bca8237edf07f8b24fe/07d37/stages.png 1790w" Err codemadness.org 70 i 2926 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 2927 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 2928 loading="lazy" Err codemadness.org 70 i 2929 /> Err codemadness.org 70 i 2930 </a> Err codemadness.org 70 i 2931 </span></p> Err codemadness.org 70 i 2932 <p>My thanks to the <a href="https://excalidraw.com">Excalidraw web app</a> for their excellent box drawing tool. While I'm at it, should I add some <a href="https://www.waitbutwhy.com">Wait But Why-style</a> little stick figures?</p> Err codemadness.org 70 i 2933 <p><span Err codemadness.org 70 i 2934 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 2935 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 2936 > Err codemadness.org 70 i 2937 <a Err codemadness.org 70 i 2938 class="gatsby-resp-image-link" Err codemadness.org 70 i 2939 href="/static/05ed9375769929e7791a124d47eac88b/80cfc/people.png" Err codemadness.org 70 i 2940 style="display: block" Err codemadness.org 70 i 2941 target="_blank" Err codemadness.org 70 i 2942 rel="noopener" Err codemadness.org 70 i 2943 > Err codemadness.org 70 i 2944 <span Err codemadness.org 70 i 2945 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 2946 style="padding-bottom: 34.96932515337423%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAABYlAAAWJQFJUiTwAAAB4klEQVQoz02P72tScRTGv1Gv61/oXaFSbWVvg3pdbFAv2wZLiCB60S+QGP2iXkVrEXuxKBpFW0orXdaCwSaRbCyFkaXX203dvJtX77yCylWvfrpaUedwOM85nPM85wjLsmi1WjSbTTrWwZ1eo9HANE3yeQ2r1aZer5NTVQzD+N3XNDQ7OvPFok4ymUTXdUStVkNKJdEKedq2t6wmmbTCll6wF2tkFIlM6iuWLZiWJNKKQsOsk5ZlYktRKkYVo2pzyD+6wqJzVUkr879taBUarX/1mlro5ma7jWr8nbXsCzf/4DZmtdJFoljJM/d9hsWfIWK5L9RLCfTEM6pZP4YUoBIPkV+ZphAJkg/Mkns1RTY4T3Q2zopvmeWwREApMZXYYjFTQkTVz5x656bvrYurny5QWb1FY0ZgfRBsju+g5N1G+aZAHthJyuVG6XWwcKCfO73jTLjuM3TiOWJCRox+48ibDCKmRjgZdHPc5+By+DxW4jZVv8AMCcqPt6NeFGxcE2QHdxFzHmJ1/x4Wevq40TPGQ+ddhvunEWMxxPUwx17bxJIWxzt/hivvT/No6QE1+Yn92m4Kc/tYe3GY9XsHWR91Io8cJTl8jpRniIjHy1OPD//gJCOXAjheJtg7meTsR4Vf/GbF9AWAKbcAAAAASUVORK5CYII='); background-size: cover; display: block;" Err codemadness.org 70 i 2947 ></span> Err codemadness.org 70 i 2948 <img Err codemadness.org 70 i 2949 class="gatsby-resp-image-image" Err codemadness.org 70 i 2950 alt="people" Err codemadness.org 70 i 2951 title="people" Err codemadness.org 70 i 2952 src="/static/05ed9375769929e7791a124d47eac88b/a6d36/people.png" Err codemadness.org 70 i 2953 srcset="/static/05ed9375769929e7791a124d47eac88b/222b7/people.png 163w, Err codemadness.org 70 i 2954 /static/05ed9375769929e7791a124d47eac88b/ff46a/people.png 325w, Err codemadness.org 70 i 2955 /static/05ed9375769929e7791a124d47eac88b/a6d36/people.png 650w, Err codemadness.org 70 i 2956 /static/05ed9375769929e7791a124d47eac88b/e548f/people.png 975w, Err codemadness.org 70 i 2957 /static/05ed9375769929e7791a124d47eac88b/3c492/people.png 1300w, Err codemadness.org 70 i 2958 /static/05ed9375769929e7791a124d47eac88b/80cfc/people.png 1844w" Err codemadness.org 70 i 2959 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 2960 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 2961 loading="lazy" Err codemadness.org 70 i 2962 /> Err codemadness.org 70 i 2963 </a> Err codemadness.org 70 i 2964 </span></p> Err codemadness.org 70 i 2965 <p>Not funny enough? How about a concentric-circle approach? That probably makes more sense, anyway.</p> Err codemadness.org 70 i 2966 <p><span Err codemadness.org 70 i 2967 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 2968 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 2969 > Err codemadness.org 70 i 2970 <a Err codemadness.org 70 i 2971 class="gatsby-resp-image-link" Err codemadness.org 70 i 2972 href="/static/aac83040f2c998858cc7a4acce92d28c/b12f7/onion.png" Err codemadness.org 70 i 2973 style="display: block" Err codemadness.org 70 i 2974 target="_blank" Err codemadness.org 70 i 2975 rel="noopener" Err codemadness.org 70 i 2976 > Err codemadness.org 70 i 2977 <span Err codemadness.org 70 i 2978 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 2979 style="padding-bottom: 107.97546012269939%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAWCAYAAADAQbwGAAAACXBIWXMAABYlAAAWJQFJUiTwAAAFj0lEQVQ4y0WUeVBVdRTHfxcyLa2ZtCl10PYcK9PkbYAKImabUcryeCiL45ILaKIBiSLiilSGuAQIaaOYBg8eILI89D00zW1cpslCcM0kXNPG0vLTeffZ+Md37r1zz/3cc37nnK/acnw9aw8vpuDIcr7StYz1R5ay7rBHS7w6skSPWXMomzUHs8k/sEjXao9+yBIt4vN989hydD1q2q5wPqgbQFS9kYh6fyJ1GfRrtCiqdjAR1W8QWTOY6Dp51t/dV4NX0Q0mwuteY05zLGqOO5bYxiASnaEkOIfrmuAMIa4pFKvrTd4tC+GtkkBGiUbbQxjnDpPY4aIQ4uUar9+PIKYhgIy9k1Cz3Vb9Ic4T0DhMQMFECDyxOoBc+8tsd/ixtfRpSrf3prjiWVLKBxFZF4K1yfPzYYyXb+Ll2+gGM5/umfAAmNAYjE2CbDuGUrStL+3VnaBaQa3iQqHityK536G4XaM4UP44c8teJ6IxVGAPgOnNiV6grcEisFCm1pg5WtYN6hR/bVX8sUbj5HyFK1nDPVPAyxVXCzTuVSr+EfBq+4tECjTRGYxVgGnuBFSKy0q0M5CJtUG02B+BnYqOfF+uZQkgqSvHx/Zkf1gf9o/qzUnbU7TP6czFxYrrmzU9NreiH9FNYZKUmVRXvKcpVj5sCKKuoqce8HuewDI0forwo83kj3uAhe0DwvjutVAODjTSNnQg5yd1p32h4lapxs0dPsyoMhHpDCBtdxwqSVqdVDWAO7UaHRt8uJap+GlsX868YaHJEkOBZQVfDlzM54Oy+cqUzlHTKE4ZTLQmdufyCk0/55qynoyuCyTdJcCp7nFsrOilv+iQgHPTH6PNYMBlHsNqSxGfWdYS/l4eMW/lsdpUJD/I4WfjME4FD+Ryeiduf61or+lMnMzpXM8ZTnHa2O94lLulistybm0Rz9LiH8BGSxYrgwrpO3836ptLqE0XCZ5WRb6hAIdlAueNRi5M6sGNPGmQJJNS1Z9ZLhmbGXXRnKh6mJsbFFcWSobv9OOYIYwS/xzGW79DFZ7Ed8X3qBzRqsOkjfyGUkOKAE2csfbhao7iXoUio/wFkncLcLoAjwvwlgCvC/Ds2/05YRjOJv/lxMWUo4p+EeA+1BeH8Mk7RsbIzWwzJOvAX6L8uCLAf+wCtN8HTnHG0lzZlXtS8o1sRcuY5zjjb2KTaQ65gSX0S3eiSs5Kpq28P8EuJRdSbx7LOb0xUvIqxZ0qjZTqV7wle5pSXC4jI2l3LNO4mPQYp41mDpqGs9aUyyrLBma8XUz6yBLyjcUUG2dxxmThRxmf9tSHuL5OmlLbhbgdg/nE05Qkt3ds7u7UuJTvw02Zr9boZzg3OJBjlhF8a/mYEsMSvjYupNIcxymBtRoCuDDlCTqyNf7drqh19GJ0fRCf/j/YH9QPwWH3js6lZb7cytQ4be0rg22U8s20GofKKAVxVo7iVJCB8xOf5MoCjauFGpcdvkypMBPVJIPtAXpWzyqrN756CCfKu+qlX1jqyw3JtH1mN87a/Gh5/3lawp+jbXwvrn7SmY4sjfb1mr7Pi8r6y+qNkNUzyepJybNdXnMYt0uW3GHhoP1xPdM/xGGurZQslsrZSvd/lx9c8dx/pnFXjOO2OE9uZT9ZOa856G7jTvRkGCPAQBIbxTzFcWLF6wpkBH6t7sIdcRXPwLNZ8fcmrwP9WeXD95U9mO0wECXG6oElCNQqSc3bMxE10xUhFuSPTcq2NVqIkSUPbxwivmiU2XqJDXLg2xw9KLU/ySq7H9PsrxK+M0BMOFCc3oxVvrE1BjKmfhBpe+UMc1xpzK2PZ55zkq6Mpslk7prMfNdHpDbPIMWdRMou0e5kUvfOYsG+ZBbtmU5W8zQy3VNZIHGZrqmkOhNYs38x/wHuOjAwBDroCQAAAABJRU5ErkJggg=='); background-size: cover; display: block;" Err codemadness.org 70 i 2980 ></span> Err codemadness.org 70 i 2981 <img Err codemadness.org 70 i 2982 class="gatsby-resp-image-image" Err codemadness.org 70 i 2983 alt="onion" Err codemadness.org 70 i 2984 title="onion" Err codemadness.org 70 i 2985 src="/static/aac83040f2c998858cc7a4acce92d28c/a6d36/onion.png" Err codemadness.org 70 i 2986 srcset="/static/aac83040f2c998858cc7a4acce92d28c/222b7/onion.png 163w, Err codemadness.org 70 i 2987 /static/aac83040f2c998858cc7a4acce92d28c/ff46a/onion.png 325w, Err codemadness.org 70 i 2988 /static/aac83040f2c998858cc7a4acce92d28c/a6d36/onion.png 650w, Err codemadness.org 70 i 2989 /static/aac83040f2c998858cc7a4acce92d28c/e548f/onion.png 975w, Err codemadness.org 70 i 2990 /static/aac83040f2c998858cc7a4acce92d28c/b12f7/onion.png 1020w" Err codemadness.org 70 i 2991 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 2992 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 2993 loading="lazy" Err codemadness.org 70 i 2994 /> Err codemadness.org 70 i 2995 </a> Err codemadness.org 70 i 2996 </span></p> Err codemadness.org 70 i 2997 <p>Yes, those are the vintage Apple logo colors, because I literally cannot help myself (it was hard enough not to write another post about <a href="/my-new-old-apple-iie-computer">my Apple IIe</a>).</p> Err codemadness.org 70 i 2998 <p>Let's go through the levels one-by-one, continuing our use of a car as the example.</p> Err codemadness.org 70 i 2999 <h3>Level 0: Non-use</h3> Err codemadness.org 70 i 3000 <p>You can't use the system. You don't know how to drive the car.</p> Err codemadness.org 70 i 3001 <h3>Level 1: Use</h3> Err codemadness.org 70 i 3002 <p>You can use the primary purpose of the system. You know how to drive a car safely. You can go in reverse. You can pass a driver's test.</p> Err codemadness.org 70 i 3003 <h3>Level 2: Monitor</h3> Err codemadness.org 70 i 3004 <p>You know how to observe secondary signals from the system. In our car, you know to occasionally review the dashboard for things like the engine light. You don't necessarily know what to do about these signals, but you know they are <em>a thing</em>, and will probably <em>mention</em> them to someone like a mechanic (but, hey, no guarantee).</p> Err codemadness.org 70 i 3005 <h3>Level 3: Maintain</h3> Err codemadness.org 70 i 3006 <p>You are comfortable enough with the previous monitoring signals and your own "handy-ness" (is that a word?) to do routine maintence on the system. You add more washer fluid when it gets low. You replace the dead battery. You add air to your tires at the gas station.</p> Err codemadness.org 70 i 3007 <h3>Level 4: Repair</h3> Err codemadness.org 70 i 3008 <p>You know how to fix sub-systems in the overall system. Not necessary all of them, but the most important ones (probably the ones that break most often). You can change a tire. You can replace brake pads. You can fix a broken headlight.</p> Err codemadness.org 70 i 3009 <h3>Level 5: (Re)build</h3> Err codemadness.org 70 i 3010 <p>You know how to tear apart the system completely and re-build it from scratch. You understand each sub-system, why it's there, and how to make them all work together. You can take apart the Volkswagon Beetle and put it back together. You can levitate.</p> Err codemadness.org 70 i 3011 <h2>Other examples</h2> Err codemadness.org 70 i 3012 <blockquote> Err codemadness.org 70 i 3013 <p>Sure, Charlie, that worked conveniently for your car example. But what about... other stuff?</p> Err codemadness.org 70 i 3014 </blockquote> Err codemadness.org 70 i 3015 <p>Great question!</p> Err codemadness.org 70 i 3016 <p>How about investing?</p> Err codemadness.org 70 i 3017 <ol start="0"> Err codemadness.org 70 i 3018 <li><strong>Non-use</strong>: Don't invest anything</li> Err codemadness.org 70 i 3019 <li><strong>Use</strong>: Invest some money and be able to check-in your returns</li> Err codemadness.org 70 i 3020 <li><strong>Monitor</strong>: Compare your returns with alternative investments</li> Err codemadness.org 70 i 3021 <li><strong>Maintain</strong>: Make slight adjustments based on these alternatives</li> Err codemadness.org 70 i 3022 <li><strong>Repair</strong>: Fix gaping holes or major problems in your investing strategy</li> Err codemadness.org 70 i 3023 <li><strong>Re(build)</strong>: Design a custom investment strategy for you (or anyone else)</li> Err codemadness.org 70 i 3024 </ol> Err codemadness.org 70 i 3025 <p>Okay, admittedly <strong>Repair</strong> and <strong>Rebuild</strong> blended a bit there. But I think that's fine. </p> Err codemadness.org 70 i 3026 <p><strong>In fact, the lines between these levels are meant to be porous</strong>. A Level 3 could probably do some serious Level 4 stuff. Even a Level 0 non-user <em>probably</em> knows enough from pop-culture and context clues to be a Level 1 user, with the proper motivation.</p> Err codemadness.org 70 i 3027 <p>Let's try another example: using a desktop computer!</p> Err codemadness.org 70 i 3028 <ol start="0"> Err codemadness.org 70 i 3029 <li><strong>Non-use</strong>: Don't know how to use a computer. They're evil!</li> Err codemadness.org 70 i 3030 <li><strong>Use</strong>: Can use a computer to do stuff (go online, write a document, print it out, use a spreadsheet, play Minecraft)</li> Err codemadness.org 70 i 3031 <li><strong>Monitor</strong>: Notice that your browser is slower than normal or that you are running out of hard drive space</li> Err codemadness.org 70 i 3032 <li><strong>Maintain</strong>: Empty your "trash bin", delete old unused apps</li> Err codemadness.org 70 i 3033 <li><strong>Repair</strong>: Remove that sketchy ad company browser extension from your parent's computer. Restore your computer's data from a backup drive.</li> Err codemadness.org 70 i 3034 <li><strong>Re(build)</strong>: Take apart a computer, install new hard drive, re-install operating system.</li> Err codemadness.org 70 i 3035 </ol> Err codemadness.org 70 i 3036 <p>I suppose with that example we transitioned from a non-computer-user all the way to computer technician. It's patently obvious that there are levels of understanding even beyond our Level 5 skill of being able to "take apart a computer and install something new in it." Like, how does a hard drive even work? How does memory work? What is physics? What is truth? </p> Err codemadness.org 70 i 3037 <p>The onion is infinite. But these outer levels may prove useful as you encounter unknown systems. </p> Err codemadness.org 70 i 3038 <p>There's often money to be made for more advanced "Levels" to sell their skills to lower level-ers. I'm not going to fix a cavity myself - I'm going to pay an expert, a Level 5 dentist to do it. In a pinch, a desert-island pinch, I'm sure I could figure out how do some Castaway-style dentistry. But I'm not (yet) on a desert island, and I don't want to take the time to go beyond a Level 3 in the kinda-gross system that is my own teeth situation. I'll floss, mostly every day, which puts me squarely in Level 3. The bet I'm making is that my time doing Level 3 work will be worth it, given the effort, compared to my toothless friends in the preceeding levels.</p> Err codemadness.org 70 i 3039 <h2>So, what's the right way to learn a new system?</h2> Err codemadness.org 70 i 3040 <p>I don't know! </p> Err codemadness.org 70 i 3041 <p>On one hand, knowledge stacks on previous or prerequiste knowledge. It's probably helpful to know about arithmetic before tackling algebra.</p> Err codemadness.org 70 i 3042 <p>On the other hand, if all you ever want to do is "use" something, use the system for its primary intended purpose, maybe it's not worth digging deeper -- at least not initially. When we learn how to drive, we don't start with a box of car parts and the skeleton frame of a burned out Cheverolt (as much as I wish we did). No, we got behind the wheel (after watching countless VHS tapes of instructional material) and learned how to drive. We straight-up Level 1'ed that car.</p> Err codemadness.org 70 i 3043 <p>The question to consider is: what's your goal? </p> Err codemadness.org 70 i 3044 <p>Your answer should guide where you should set your North Star in the onion-level-spectrum-chart-thing.</p> Err codemadness.org 70 i 3045 <h3>A note on instructional design</h3> Err codemadness.org 70 i 3046 <p>Great courses and great teachers take a strong viewpoint towards this question.</p> Err codemadness.org 70 i 3047 <p>Sal Khan of <a href="https://www.khanacademy.org/">Khan Academy</a> seems to take the former approach, stacking layers of prerequisite knowledge nuggets in a knowledge graph that goes from counting to category theory, and everywhere in-between. Their approach makes learning math trackable and digestible, relying on momentum, quick wins, and gameification to keep students motivated.</p> Err codemadness.org 70 i 3048 <p>Whereas, <a href="https://www.fast.ai/about/#jeremy">Jeremy Howard</a> and <a href="https://www.fast.ai/about/#rachel">Rachel Thomas</a> of the <a href="https://course.fast.ai/">Fast.ai deep learning course</a> go straight for Level 1, making students feel comfortable "using deep learning to do cool things first", and then and only then start peeling back the layers (good word choice here, I think, given the context) to the complexities beneath the surface.</p> Err codemadness.org 70 i 3049 <p>In both cases, it's about finding the right way to motivate your students. There's no right answer. In fact, I adore both of these courses and projects, even if I think I failed as a student in both of them. In the case of Khan Academy, I lost motivation because there's too much to learn and not enough time to completely do my math-life over (as much as I want to). In the case of fast.ai, I became too self-conscious about linear algebra (a skill that's well past Level 1 stuff).</p> Err codemadness.org 70 i 3050 <h3>"What's next?" asked the life-long learner</h3> Err codemadness.org 70 i 3051 <p>Is this six-levels thing a brilliant and new grand unified theorem of learning systems? No, of course not. I'm probably butchering some existing theorem from an oversized coffee-table-sized book about mental models. But isn't that the point of mental models, so you can re-use them?</p> Err codemadness.org 70 i 3052 <p>For me, this "thereom" (I'm still going to call it that) helps me think about priorities. Which systems do I want to become Level 5 in over the next few years?</p> Err codemadness.org 70 i 3053 <p>Is it this car? Probably not. But I'll still watch some YouTubes so that I can figure how to put more oil in it.</p> Err codemadness.org 70 i 3054 <h4>Footnotes</h4> Err codemadness.org 70 i 3055 <ol> Err codemadness.org 70 i 3056 <li>No actual quid pro quos were exchanged. I merely wanted to quote the Genie.</li> Err codemadness.org 70 i 3057 </ol><![CDATA[My New Old Apple IIe Computer]]>https://www.charlieharrington.com/my-new-old-apple-iie-computerhttps://www.charlieharrington.com/my-new-old-apple-iie-computerTue, 12 May 2020 00:00:00 GMT<p>That Monday morning in February began like any other Monday: I opened my phone immediately upon waking up, browsed Twitter, checked Instagram, and ignored my email, all from bed, making no pretense of daily gratitude journaling. I got up to make the coffee, and then opened eBay to look at old computers.</p> Err codemadness.org 70 i 3058 <p>eBay thrills in me in an early Internet kind-of-way. It's dirty. You can't believe it works. And you can still find a deal.</p> Err codemadness.org 70 i 3059 <p>My greatest feat of all was the 2006 purchase of a Fender American Stratocaster for roughly $300 bucks which had been mislisted into an "Fender - Other" category. Its description warned that the guitar was "missing a few strings."</p> Err codemadness.org 70 i 3060 <p>Jackpot.</p> Err codemadness.org 70 i 3061 <p>I'd been waffling between a <a href="https://en.wikipedia.org/wiki/Commodore_VIC-20">Commodore VIC-20</a> and some kind of Apple II in my vintage computer fantasies. As an undying fan of YouTube's <a href="https://www.youtube.com/channel/UC8uT9cgJorJPWu7ITLGo9Ww">The 8-Bit Guy</a><sup>1</sup>, I longed for a computer of my own that I could clean with hydrogen peroxide and baking soda, as I wondered what sad fate the brave, worthy computer had faced before meeting me, its benevolent new master. We'd write infinite loops in BASIC together. We'd travel the Oregon Trail. We'd poke each other's memory.</p> Err codemadness.org 70 i 3062 <p>I set a few auctions to my watch-list, and then laced on my sneakers for our morning run. Not one block away from our house did I spot something: a yellowed plastic box amid a pile of trash. No. It couldn't be. I stopped, and went back to the trash.</p> Err codemadness.org 70 i 3063 <p>It was an Apple IIe. With its CRT monitor. And a dual floppy drive.</p> Err codemadness.org 70 i 3064 <p>Just. SITTING. THERE.</p> Err codemadness.org 70 i 3065 <p>I explained the situation to Carly. She suggested, wisely, that we continue our run, of which we were less than 30 seconds into, and that if the computer was still outside when we got back, that I should knock on the door of the house, to confirm it was truly being thrown out.</p> Err codemadness.org 70 i 3066 <p>The next 30 minutes were agony. I've never ran so fast in my life.</p> Err codemadness.org 70 i 3067 <p>But it was still there.</p> Err codemadness.org 70 i 3068 <p>I knocked on the door. They were remodeling, I could hear saws or something inside. No one answered. I knocked again. I considered, you know, for a second, just taking it. Finally, the door opened. I introduced myself, likely sounding as insane as felt, and asked if the computer in the trash was.. trash. She nodded, and mentioned that, "It still works."</p> Err codemadness.org 70 i 3069 <blockquote> Err codemadness.org 70 i 3070 <p>It still works.</p> Err codemadness.org 70 i 3071 </blockquote> Err codemadness.org 70 i 3072 <p>No better sounds could have been uttered.</p> Err codemadness.org 70 i 3073 <h3>Plugging it in</h3> Err codemadness.org 70 i 3074 <p>I carried my Precious back home and hurried to plug it in.</p> Err codemadness.org 70 i 3075 <p>Except the monitor cable was missing. I was certain that I'd grabbed everything of computer-ish value from the trash pile. From the looks of the port, I'd need one of those old mono RCA cables, of which I know I have dozens in my parent's attic across the country in New Jersey. </p> Err codemadness.org 70 i 3076 <p>I still turned on the computer and the monitor anyway, and was relieved to hear it chirp happily, even if I couldn't see anything.</p> Err codemadness.org 70 i 3077 <p>By this point, it was high time to get on my bike and head into work (back when we still things like that). But I still made a quick pit-stop at a hardware store along the way, and somehow a physical store in the physical world still carried this little guy:</p> Err codemadness.org 70 i 3078 <p><span Err codemadness.org 70 i 3079 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 3080 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 3081 > Err codemadness.org 70 i 3082 <span Err codemadness.org 70 i 3083 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 3084 style="padding-bottom: 133.12883435582822%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAMFBP/EABYBAQEBAAAAAAAAAAAAAAAAAAACA//aAAwDAQACEAMQAAABpmdOd7yeEtppUwoif//EABsQAQADAQADAAAAAAAAAAAAAAEAAgMREBMz/9oACAEBAAEFAvNtqk9rDS0tXpkJC3JnD6gE/8QAFREBAQAAAAAAAAAAAAAAAAAAARD/2gAIAQMBAT8BiT//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/AR//xAAcEAACAgIDAAAAAAAAAAAAAAAAAREhAhAgUZH/2gAIAQEABj8C4VqEQy591iuykf/EAB0QAAMAAgMBAQAAAAAAAAAAAAABETFBIVFhcYH/2gAIAQEAAT8hq0XwVmjsNZ4LrgvpPm/jY5tW+hDJJzhZEJ2c6GF9GuhkJIhI/9oADAMBAAIAAwAAABAE7M//xAAXEQEBAQEAAAAAAAAAAAAAAAABABEQ/9oACAEDAQE/EOGGll//xAAWEQEBAQAAAAAAAAAAAAAAAAAAEQH/2gAIAQIBAT8QiLqv/8QAHhABAAICAwADAAAAAAAAAAAAAQARIUExYXGBobH/2gAIAQEAAT8QdS/CW6es1H7S7Mq2GDwxKamLpRb29RBfkPwRF25puLDG6Fm9BpnIi1FyHhxE8mVWxk11DF04zD5JoJ//2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 3085 ></span> Err codemadness.org 70 i 3086 <img Err codemadness.org 70 i 3087 class="gatsby-resp-image-image" Err codemadness.org 70 i 3088 alt="Monitor cable" Err codemadness.org 70 i 3089 title="Monitor cable" Err codemadness.org 70 i 3090 src="/static/3cc071bf6fe0055d7adf30d554753558/6aca1/monitorplug.jpg" Err codemadness.org 70 i 3091 srcset="/static/3cc071bf6fe0055d7adf30d554753558/d2f63/monitorplug.jpg 163w, Err codemadness.org 70 i 3092 /static/3cc071bf6fe0055d7adf30d554753558/c989d/monitorplug.jpg 325w, Err codemadness.org 70 i 3093 /static/3cc071bf6fe0055d7adf30d554753558/6aca1/monitorplug.jpg 650w, Err codemadness.org 70 i 3094 /static/3cc071bf6fe0055d7adf30d554753558/7c09c/monitorplug.jpg 975w, Err codemadness.org 70 i 3095 /static/3cc071bf6fe0055d7adf30d554753558/01ab0/monitorplug.jpg 1300w, Err codemadness.org 70 i 3096 /static/3cc071bf6fe0055d7adf30d554753558/ac99c/monitorplug.jpg 1536w" Err codemadness.org 70 i 3097 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 3098 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 3099 loading="lazy" Err codemadness.org 70 i 3100 /> Err codemadness.org 70 i 3101 </span></p> Err codemadness.org 70 i 3102 <p>That night, after work, I turned it on. One beep and then:</p> Err codemadness.org 70 i 3103 <p><span Err codemadness.org 70 i 3104 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 3105 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 3106 > Err codemadness.org 70 i 3107 <span Err codemadness.org 70 i 3108 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 3109 style="padding-bottom: 133.12883435582822%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAIDBAH/xAAXAQADAQAAAAAAAAAAAAAAAAAAAgMB/9oADAMBAAIQAxAAAAHI1WVdx0laU9bvkzoH/8QAHRAAAgIDAAMAAAAAAAAAAAAAAQIAAxESEyIjQf/aAAgBAQABBQJGIHyoBUNTCcXmhw++fbEfx41zhXDWgn//xAAZEQABBQAAAAAAAAAAAAAAAAAAARAREiH/2gAIAQMBAT8BW8mP/8QAGBEBAQADAAAAAAAAAAAAAAAAABECIVH/2gAIAQIBAT8B0uXER//EABwQAAICAgMAAAAAAAAAAAAAAAABMTIRIRASIv/aAAgBAQAGPwJdcQaSMIRBJ442ypUqj//EABwQAQACAgMBAAAAAAAAAAAAAAEAESExQWGhkf/aAAgBAQABPyFxAvNqNiwXeJoQdQDlxZU02vIUNI8AQriLXbEAAPbBN+mdOOUfOf/aAAwDAQACAAMAAAAQgAow/8QAGBEAAwEBAAAAAAAAAAAAAAAAABExAVH/2gAIAQMBAT8QxGC6GM//xAAaEQACAgMAAAAAAAAAAAAAAAAAAREhMVGh/9oACAECAQE/EE43kctdCEtn/8QAHxABAQACAgEFAAAAAAAAAAAAAREAMSFBcWGBsdHw/9oACAEBAAE/EJMONl6fjEYgQHGlwwJazS5XEkQAN+2CMMH83j0Bw5JZgyJ9BMIBf14MLkdgXFLTz92EN/lXC4hLrn//2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 3110 ></span> Err codemadness.org 70 i 3111 <img Err codemadness.org 70 i 3112 class="gatsby-resp-image-image" Err codemadness.org 70 i 3113 alt="boot" Err codemadness.org 70 i 3114 title="boot" Err codemadness.org 70 i 3115 src="/static/cc15f0f4663c4383e24711a1db5cba9d/6aca1/boot.jpg" Err codemadness.org 70 i 3116 srcset="/static/cc15f0f4663c4383e24711a1db5cba9d/d2f63/boot.jpg 163w, Err codemadness.org 70 i 3117 /static/cc15f0f4663c4383e24711a1db5cba9d/c989d/boot.jpg 325w, Err codemadness.org 70 i 3118 /static/cc15f0f4663c4383e24711a1db5cba9d/6aca1/boot.jpg 650w, Err codemadness.org 70 i 3119 /static/cc15f0f4663c4383e24711a1db5cba9d/7c09c/boot.jpg 975w, Err codemadness.org 70 i 3120 /static/cc15f0f4663c4383e24711a1db5cba9d/01ab0/boot.jpg 1300w, Err codemadness.org 70 i 3121 /static/cc15f0f4663c4383e24711a1db5cba9d/ac99c/boot.jpg 1536w" Err codemadness.org 70 i 3122 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 3123 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 3124 loading="lazy" Err codemadness.org 70 i 3125 /> Err codemadness.org 70 i 3126 </span></p> Err codemadness.org 70 i 3127 <p>"Isn't it beautiful?" I said to Carly. "And don't you just love how the <code class="language-text">II</code> is shown as <code class="language-text">//</code> slashes. The green, too, it's like something out of the Rebel Alliance."</p> Err codemadness.org 70 i 3128 <p>"Yes, and what do you do with it?"</p> Err codemadness.org 70 i 3129 <p>"Well... you just..."</p> Err codemadness.org 70 i 3130 <p>Truth was I didn't know how to advance past this welcome screen. My benefactors neglected to include the computer manual for the Apple IIe in their trash. This is a major bummer on multiple fronts, because what I've learned about computer manuals from the 1980s is that they were AWESOME. I recently picked up both the Commodore VIC-20 manual and the Commodore 64 manuals on eBay, even though I have neither machine, because I wanted to enjoy their spiral-bound goodness.</p> Err codemadness.org 70 i 3131 <p>But I'm a software engineer. I know how to Google. Soon, a <code class="language-text">Ctrl-Reset</code> had me at the BASIC prompt.</p> Err codemadness.org 70 i 3132 <p>I was ready for this.</p> Err codemadness.org 70 i 3133 <p><span Err codemadness.org 70 i 3134 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 3135 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 3136 > Err codemadness.org 70 i 3137 <span Err codemadness.org 70 i 3138 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 3139 style="padding-bottom: 133.12883435582822%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAMEAgH/xAAWAQEBAQAAAAAAAAAAAAAAAAABAgP/2gAMAwEAAhADEAAAAYnYbMsOhpQmjQzCAv8A/8QAHBABAQACAwEBAAAAAAAAAAAAAgEAAxESEyEi/9oACAEBAAEFAtPWZOhzc3WNVhgdqQCpOger49hcV/R+ziWf/8QAGREBAAIDAAAAAAAAAAAAAAAAAQARAhAS/9oACAEDAQE/AVyug3zP/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAHhAAAgICAgMAAAAAAAAAAAAAAAECIRExAxAiI2H/2gAIAQEABj8CUnnYrdPOjxk0irXwVUY5NmIdeyF9WJs//8QAHRAAAgICAwEAAAAAAAAAAAAAAAERITFBUWGBcf/aAAgBAQABPyF70eiFY9OVkTmDYTJGym2EA3sPSn5EFU3vZ0PEPEGtXwMl94LwihLg/9oADAMBAAIAAwAAABAP1D//xAAZEQACAwEAAAAAAAAAAAAAAAAAAREhMVH/2gAIAQMBAT8QQWgQYJOH/8QAFxEAAwEAAAAAAAAAAAAAAAAAAAERIf/aAAgBAgEBPxDI22UlZT//xAAfEAEBAAICAgMBAAAAAAAAAAABEQAhMUFhsVFx0eH/2gAIAQEAAT8QccVECcf3Hfsk8LXPjKbAyDHb9dp1PzCwILp4zbJ7rSdT5whqdk1fa49QnXDOshBDDpeR7cJxMUoZhC7EkNesQCfZfuZ//9k='); background-size: cover; display: block;" Err codemadness.org 70 i 3140 ></span> Err codemadness.org 70 i 3141 <img Err codemadness.org 70 i 3142 class="gatsby-resp-image-image" Err codemadness.org 70 i 3143 alt="yup" Err codemadness.org 70 i 3144 title="yup" Err codemadness.org 70 i 3145 src="/static/80419632c0d27acc4c946f5991b0587d/6aca1/yup.jpg" Err codemadness.org 70 i 3146 srcset="/static/80419632c0d27acc4c946f5991b0587d/d2f63/yup.jpg 163w, Err codemadness.org 70 i 3147 /static/80419632c0d27acc4c946f5991b0587d/c989d/yup.jpg 325w, Err codemadness.org 70 i 3148 /static/80419632c0d27acc4c946f5991b0587d/6aca1/yup.jpg 650w, Err codemadness.org 70 i 3149 /static/80419632c0d27acc4c946f5991b0587d/7c09c/yup.jpg 975w, Err codemadness.org 70 i 3150 /static/80419632c0d27acc4c946f5991b0587d/01ab0/yup.jpg 1300w, Err codemadness.org 70 i 3151 /static/80419632c0d27acc4c946f5991b0587d/ac99c/yup.jpg 1536w" Err codemadness.org 70 i 3152 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 3153 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 3154 loading="lazy" Err codemadness.org 70 i 3155 /> Err codemadness.org 70 i 3156 </span></p> Err codemadness.org 70 i 3157 <p><span Err codemadness.org 70 i 3158 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 3159 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 3160 > Err codemadness.org 70 i 3161 <span Err codemadness.org 70 i 3162 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 3163 style="padding-bottom: 133.12883435582822%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAGQAAAwADAAAAAAAAAAAAAAAAAAMEAQIF/8QAFwEAAwEAAAAAAAAAAAAAAAAAAAIDAf/aAAwDAQACEAMQAAABhet2LkcLRiqqA5RoLT//xAAbEAADAAMBAQAAAAAAAAAAAAABAgMAERITQv/aAAgBAQABBQKOhkuVetK+iTKqqMX9lnhAkvVNMBU/fC6z/8QAGREAAgMBAAAAAAAAAAAAAAAAERIAAQIQ/9oACAEDAQE/ATpgOrU//8QAFhEBAQEAAAAAAAAAAAAAAAAAABEQ/9oACAECAQE/Aciv/8QAHRAAAgIDAAMAAAAAAAAAAAAAAAERMQIQEiFB4f/aAAgBAQAGPwKTCXQ+W4JsXg5d+xY4I+HWSU1qtf/EABwQAAIDAQADAAAAAAAAAAAAAAERACFBMVFhcf/aAAgBAQABPyHukssICBqM9EpHyoNAQBOXC069wNNU4mzLbc7IW0G0NkLU0M/Nwb9U/9oADAMBAAIAAwAAABCnFk//xAAYEQADAQEAAAAAAAAAAAAAAAAAAREhUf/aAAgBAwEBPxBwJjpCiarD/8QAFxEAAwEAAAAAAAAAAAAAAAAAAAERIf/aAAgBAgEBPxByW6UpjZYf/8QAHhABAAIDAAIDAAAAAAAAAAAAAQARITFBUXGRscH/2gAIAQEAAT8QVTmyHK/YhjSkUVaqviIpA0DgiwGNvwqMgCiITkYLYUdGHkdMLLasxqNHQBFgCyqWncPipk7k4pFKDobP2jUs6Q9DRP/Z'); background-size: cover; display: block;" Err codemadness.org 70 i 3164 ></span> Err codemadness.org 70 i 3165 <img Err codemadness.org 70 i 3166 class="gatsby-resp-image-image" Err codemadness.org 70 i 3167 alt="loop" Err codemadness.org 70 i 3168 title="loop" Err codemadness.org 70 i 3169 src="/static/fb7fccae78325c62788e78bcdb8af7f3/6aca1/loop.jpg" Err codemadness.org 70 i 3170 srcset="/static/fb7fccae78325c62788e78bcdb8af7f3/d2f63/loop.jpg 163w, Err codemadness.org 70 i 3171 /static/fb7fccae78325c62788e78bcdb8af7f3/c989d/loop.jpg 325w, Err codemadness.org 70 i 3172 /static/fb7fccae78325c62788e78bcdb8af7f3/6aca1/loop.jpg 650w, Err codemadness.org 70 i 3173 /static/fb7fccae78325c62788e78bcdb8af7f3/7c09c/loop.jpg 975w, Err codemadness.org 70 i 3174 /static/fb7fccae78325c62788e78bcdb8af7f3/01ab0/loop.jpg 1300w, Err codemadness.org 70 i 3175 /static/fb7fccae78325c62788e78bcdb8af7f3/ac99c/loop.jpg 1536w" Err codemadness.org 70 i 3176 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 3177 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 3178 loading="lazy" Err codemadness.org 70 i 3179 /> Err codemadness.org 70 i 3180 </span></p> Err codemadness.org 70 i 3181 <p>I didn't grow up coding in BASIC, but I'm a student of history. I certainly knew that it's a rite of passage to code up a little infinite loop whenever you see a BASIC prompt.</p> Err codemadness.org 70 i 3182 <p>Carly nodded. "Cool. Why does it smell like a campfire?"</p> Err codemadness.org 70 i 3183 <h3>Capacitor problems</h3> Err codemadness.org 70 i 3184 <p>Uh-oh. That pop that I'd heard seconds before, and willfully ignored, might not have been a good pop. The smell grew worse.</p> Err codemadness.org 70 i 3185 <blockquote> Err codemadness.org 70 i 3186 <p>Burnt marshmallows on blacktop.</p> Err codemadness.org 70 i 3187 </blockquote> Err codemadness.org 70 i 3188 <p>I flipped off the power. I forgot to mention I already had the fire extinguisher at the ready, but it didn't look like that'd be necessary. Unfortunately, the smell didn't disappear after turning off the power.</p> Err codemadness.org 70 i 3189 <p>Some more Googling revealed the likely problem: a capacitor popped in the power supply. I unscrewed the power supply from the computer (held on by just four small screws), and put it somewhere far away. Days later, weeks later, the power supply still smelled.</p> Err codemadness.org 70 i 3190 <p>At this point, if I had been a more experienced solder-er, I would have considered buying a capacitor for like ten cents and replacing it myself. But as I'm still learning the ropes of soldering, and hacking with power supplies felt a little ahead of me, I thought about getting some more experienced help. (Also, I was kinda terrified that I would accidentally short circuit something and fry the motherboard, before I ever got to really play with the computer).</p> Err codemadness.org 70 i 3191 <p>I spent some time looking for an Apple repair store that would service Apple II's. Even in the Bay Area, this felt like a lost cause. Then someone suggested this site: <a href="https://www.reactivemicro.com/">ReActiveMicro</a>. Its tagline: <code class="language-text">Reactivate Your Vintage Apple Computer</code>. For $95, I could order a <a href="https://www.reactivemicro.com/product/ultimate-universal-power-supply/">new power supply</a> for my Apple IIe.</p> Err codemadness.org 70 i 3192 <p>So I did. It arrived in the mail about a week later, and I installed it in roughly a minute and half. With the extinguisher again at the ready, I turned on the computer again.</p> Err codemadness.org 70 i 3193 <p>And it worked! I looked up an old program in an old Apple magazine online, and coded up this little sine wave program:</p> Err codemadness.org 70 i 3194 <blockquote class="twitter-tweet"><p lang="en" dir="ltr">Back in business <a href="https://twitter.com/hashtag/appleiie?src=hash&amp;ref_src=twsrc%5Etfw">#appleiie</a> <a href="https://t.co/AHi9EBdbVm">pic.twitter.com/AHi9EBdbVm</a></p>&mdash; Charlie Harrington (@whatrocks) <a href="https://twitter.com/whatrocks/status/1231624493040193537?ref_src=twsrc%5Etfw">February 23, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> Err codemadness.org 70 i 3195 <h3>Expansion slots</h3> Err codemadness.org 70 i 3196 <p>Now that I've got a working, adorable Apple IIe, the first thing I decide to do is take it apart. Say what you will about the <a href="https://www.apple.com/mac-pro/">new Mac Pro case design</a>, but it's got nothing on this little hatch.</p> Err codemadness.org 70 i 3197 <p><span Err codemadness.org 70 i 3198 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 3199 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 3200 > Err codemadness.org 70 i 3201 <span Err codemadness.org 70 i 3202 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 3203 style="padding-bottom: 133.12883435582822%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAMEAgX/xAAXAQADAQAAAAAAAAAAAAAAAAAAAQID/9oADAMBAAIQAxAAAAGjK9ZXcLKOeh8iOwSEv//EAB4QAAIBAwUAAAAAAAAAAAAAAAECEgADMRETISIy/9oACAEBAAEFAhFRFSbYAXBpPN/q+7WVPLKxkCdP/8QAFhEAAwAAAAAAAAAAAAAAAAAAABAS/9oACAEDAQE/AXJ//8QAFhEBAQEAAAAAAAAAAAAAAAAAABEQ/9oACAECAQE/AVyv/8QAHBABAAIBBQAAAAAAAAAAAAAAABExAQIQIVFx/9oACAEBAAY/AoiXSkb0pp8cs4W//8QAHRAAAwACAgMAAAAAAAAAAAAAAAERITFBkVFhcf/aAAgBAQABPyFV/ovI73REZD9jaseijtB8yR3JXj2Siy8BabGfMWaOYYP/2gAMAwEAAgADAAAAEIfFD//EABcRAQEBAQAAAAAAAAAAAAAAAAEAETH/2gAIAQMBAT8QALLrYb//xAAWEQEBAQAAAAAAAAAAAAAAAAABABH/2gAIAQIBAT8QVYGWYWr/xAAcEAEAAwEBAAMAAAAAAAAAAAABABEhMUFhwdH/2gAIAQEAAT8QP2ha2t9fyKeb8ASk6D67FoRxS7E1CvdbnPLor7A/sUGDkNJrbhLFrrdyZM8VOTMwVBfCf//Z'); background-size: cover; display: block;" Err codemadness.org 70 i 3204 ></span> Err codemadness.org 70 i 3205 <img Err codemadness.org 70 i 3206 class="gatsby-resp-image-image" Err codemadness.org 70 i 3207 alt="Apple IIe top down" Err codemadness.org 70 i 3208 title="Apple IIe top down" Err codemadness.org 70 i 3209 src="/static/a8324ff3bbaccb5768157d73a8ac790e/6aca1/topclosed.jpg" Err codemadness.org 70 i 3210 srcset="/static/a8324ff3bbaccb5768157d73a8ac790e/d2f63/topclosed.jpg 163w, Err codemadness.org 70 i 3211 /static/a8324ff3bbaccb5768157d73a8ac790e/c989d/topclosed.jpg 325w, Err codemadness.org 70 i 3212 /static/a8324ff3bbaccb5768157d73a8ac790e/6aca1/topclosed.jpg 650w, Err codemadness.org 70 i 3213 /static/a8324ff3bbaccb5768157d73a8ac790e/7c09c/topclosed.jpg 975w, Err codemadness.org 70 i 3214 /static/a8324ff3bbaccb5768157d73a8ac790e/01ab0/topclosed.jpg 1300w, Err codemadness.org 70 i 3215 /static/a8324ff3bbaccb5768157d73a8ac790e/ac99c/topclosed.jpg 1536w" Err codemadness.org 70 i 3216 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 3217 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 3218 loading="lazy" Err codemadness.org 70 i 3219 /> Err codemadness.org 70 i 3220 </span></p> Err codemadness.org 70 i 3221 <p><span Err codemadness.org 70 i 3222 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 3223 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 3224 > Err codemadness.org 70 i 3225 <span Err codemadness.org 70 i 3226 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 3227 style="padding-bottom: 133.12883435582822%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAMCBAH/xAAXAQADAQAAAAAAAAAAAAAAAAAAAQID/9oADAMBAAIQAxAAAAG2K+Z3hzKSCKKuBS//xAAdEAACAgIDAQAAAAAAAAAAAAABAgADBBIQERMj/9oACAEBAAEFAjWWjq6wUgz0CsbNo2SVZhN9Z6p3kH6W8f/EABYRAAMAAAAAAAAAAAAAAAAAAAAQEv/aAAgBAwEBPwEp/wD/xAAWEQEBAQAAAAAAAAAAAAAAAAAAERD/2gAIAQIBAT8BRM//xAAfEAACAQMFAQAAAAAAAAAAAAAAASEREmECAxAiMUH/2gAIAQEABj8Clz8qXo7SxplENWeZEYJ2jQLj/8QAHBABAAICAwEAAAAAAAAAAAAAAQARITFBUWGR/9oACAEBAAE/IVrvEMqg1TTxBrv2TKjyIqNsSOSqKS3UzXofWLpzLe4gd4m58uLP/9oADAMBAAIAAwAAABCEz4z/xAAYEQADAQEAAAAAAAAAAAAAAAAAAVERIf/aAAgBAwEBPxBDSmnIf//EABcRAQEBAQAAAAAAAAAAAAAAAAABESH/2gAIAQIBAT8Qtrbqsf/EAB8QAQADAAIBBQAAAAAAAAAAAAEAESFBYTFRccHh8P/aAAgBAQABPxA4xJYaBwp3FEHtt8JZZutkgy1d50QX7gQwAG6wUlhfhFC0alnCEGdV1dnvNNuVFNgwR5UetxVwFU7uINDk/9k='); background-size: cover; display: block;" Err codemadness.org 70 i 3228 ></span> Err codemadness.org 70 i 3229 <img Err codemadness.org 70 i 3230 class="gatsby-resp-image-image" Err codemadness.org 70 i 3231 alt="lift" Err codemadness.org 70 i 3232 title="lift" Err codemadness.org 70 i 3233 src="/static/327df739a0121ee18eeac70a49ca184c/6aca1/lift.jpg" Err codemadness.org 70 i 3234 srcset="/static/327df739a0121ee18eeac70a49ca184c/d2f63/lift.jpg 163w, Err codemadness.org 70 i 3235 /static/327df739a0121ee18eeac70a49ca184c/c989d/lift.jpg 325w, Err codemadness.org 70 i 3236 /static/327df739a0121ee18eeac70a49ca184c/6aca1/lift.jpg 650w, Err codemadness.org 70 i 3237 /static/327df739a0121ee18eeac70a49ca184c/7c09c/lift.jpg 975w, Err codemadness.org 70 i 3238 /static/327df739a0121ee18eeac70a49ca184c/01ab0/lift.jpg 1300w, Err codemadness.org 70 i 3239 /static/327df739a0121ee18eeac70a49ca184c/ac99c/lift.jpg 1536w" Err codemadness.org 70 i 3240 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 3241 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 3242 loading="lazy" Err codemadness.org 70 i 3243 /> Err codemadness.org 70 i 3244 </span></p> Err codemadness.org 70 i 3245 <p><span Err codemadness.org 70 i 3246 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 3247 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 3248 > Err codemadness.org 70 i 3249 <span Err codemadness.org 70 i 3250 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 3251 style="padding-bottom: 74.84662576687117%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIEA//EABUBAQEAAAAAAAAAAAAAAAAAAAIB/9oADAMBAAIQAxAAAAGfOlggYN//xAAZEAEAAwEBAAAAAAAAAAAAAAABAAIDESL/2gAIAQEAAQUC18w6w2ajm2hXgUn/xAAVEQEBAAAAAAAAAAAAAAAAAAAAIf/aAAgBAwEBPwGq/8QAFxEBAAMAAAAAAAAAAAAAAAAAAAERIf/aAAgBAgEBPwHFQ//EABwQAAICAgMAAAAAAAAAAAAAAAABAhEhMRAiYf/aAAgBAQAGPwLOy0dnFP0uW+MpM//EABsQAQACAwEBAAAAAAAAAAAAAAEAESFBUWEx/9oACAEBAAE/IWPZ+xtc0+wyclLtxnqYwi1VZ8Xk/9oADAMBAAIAAwAAABDTP//EABcRAAMBAAAAAAAAAAAAAAAAAAEQITH/2gAIAQMBAT8QNYn/xAAXEQEAAwAAAAAAAAAAAAAAAAAAASFh/9oACAECAQE/EIo0f//EAB4QAQEAAQQDAQAAAAAAAAAAAAERACExQVFhcYHx/9oACAEBAAE/EKmlixanrjbLIe5kkPmpkjgsqh4evzHCyp4IGhOMtMiGmyTIewCC9DP/2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 3252 ></span> Err codemadness.org 70 i 3253 <img Err codemadness.org 70 i 3254 class="gatsby-resp-image-image" Err codemadness.org 70 i 3255 alt="loaded" Err codemadness.org 70 i 3256 title="loaded" Err codemadness.org 70 i 3257 src="/static/f7fe5f5008054dc957530ffb0ca92ad9/6aca1/loaded.jpg" Err codemadness.org 70 i 3258 srcset="/static/f7fe5f5008054dc957530ffb0ca92ad9/d2f63/loaded.jpg 163w, Err codemadness.org 70 i 3259 /static/f7fe5f5008054dc957530ffb0ca92ad9/c989d/loaded.jpg 325w, Err codemadness.org 70 i 3260 /static/f7fe5f5008054dc957530ffb0ca92ad9/6aca1/loaded.jpg 650w, Err codemadness.org 70 i 3261 /static/f7fe5f5008054dc957530ffb0ca92ad9/7c09c/loaded.jpg 975w, Err codemadness.org 70 i 3262 /static/f7fe5f5008054dc957530ffb0ca92ad9/01ab0/loaded.jpg 1300w, Err codemadness.org 70 i 3263 /static/f7fe5f5008054dc957530ffb0ca92ad9/e1596/loaded.jpg 2048w" Err codemadness.org 70 i 3264 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 3265 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 3266 loading="lazy" Err codemadness.org 70 i 3267 /> Err codemadness.org 70 i 3268 </span></p> Err codemadness.org 70 i 3269 <p>As you can see, I've hit a pretty big jackpot on the expansion card front. I'll walk through each card individually in a bit.</p> Err codemadness.org 70 i 3270 <p>Here's a bare-bones look at the motherboard after removing all the expansion cards.</p> Err codemadness.org 70 i 3271 <p><span Err codemadness.org 70 i 3272 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 3273 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 3274 > Err codemadness.org 70 i 3275 <span Err codemadness.org 70 i 3276 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 3277 style="padding-bottom: 133.12883435582822%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAQFAQL/xAAWAQEBAQAAAAAAAAAAAAAAAAABAgD/2gAMAwEAAhADEAAAAfEGlFDuDMnEQ6SZNf/EAB4QAAEEAgMBAAAAAAAAAAAAAAEAAgMSERMEITEz/9oACAEBAAEFApbFCR9oe2SDCb7xvm+0h0IhZIW6S8j3B3//xAAXEQADAQAAAAAAAAAAAAAAAAAAARAR/9oACAEDAQE/AXcP/8QAFxEAAwEAAAAAAAAAAAAAAAAAAAEQEf/aAAgBAgEBPwFXT//EAB8QAAEDBAMBAAAAAAAAAAAAAAABAhEQEiExUWFxgf/aAAgBAQAGPwJzkcqdG1Mj+afTRNufTCRSLjZ//8QAGxABAAIDAQEAAAAAAAAAAAAAAQARMUFRIZH/2gAIAQEAAT8hHVyKg39mfZbys+0hXmJz6hunnGYbsm4MopVgZc8YP7avkEBpP//aAAwDAQACAAMAAAAQU8oA/8QAGBEBAQEBAQAAAAAAAAAAAAAAAQAhEUH/2gAIAQMBAT8QfI0sgnl//8QAGBEAAgMAAAAAAAAAAAAAAAAAAAEQESH/2gAIAQIBAT8QSNLn/8QAGxABAAMBAQEBAAAAAAAAAAAAAQARITFRgdH/2gAIAQEAAT8QtInF+ThWjF1ACdhoViJ64V7DZ4u2XKHar8yJTW4AZKzjWwRPjFaE6NEURgFhhcKqfkfGFXhP/9k='); background-size: cover; display: block;" Err codemadness.org 70 i 3278 ></span> Err codemadness.org 70 i 3279 <img Err codemadness.org 70 i 3280 class="gatsby-resp-image-image" Err codemadness.org 70 i 3281 alt="Apple IIe top open" Err codemadness.org 70 i 3282 title="Apple IIe top open" Err codemadness.org 70 i 3283 src="/static/5ca83fb901310e0d92734cefb8154e25/6aca1/topdown.jpg" Err codemadness.org 70 i 3284 srcset="/static/5ca83fb901310e0d92734cefb8154e25/d2f63/topdown.jpg 163w, Err codemadness.org 70 i 3285 /static/5ca83fb901310e0d92734cefb8154e25/c989d/topdown.jpg 325w, Err codemadness.org 70 i 3286 /static/5ca83fb901310e0d92734cefb8154e25/6aca1/topdown.jpg 650w, Err codemadness.org 70 i 3287 /static/5ca83fb901310e0d92734cefb8154e25/7c09c/topdown.jpg 975w, Err codemadness.org 70 i 3288 /static/5ca83fb901310e0d92734cefb8154e25/01ab0/topdown.jpg 1300w, Err codemadness.org 70 i 3289 /static/5ca83fb901310e0d92734cefb8154e25/ac99c/topdown.jpg 1536w" Err codemadness.org 70 i 3290 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 3291 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 3292 loading="lazy" Err codemadness.org 70 i 3293 /> Err codemadness.org 70 i 3294 </span></p> Err codemadness.org 70 i 3295 <p>And a close-up of the seven (7!) expansion slots, not including the extra one for adding more memory or 80-column mode.</p> Err codemadness.org 70 i 3296 <p><span Err codemadness.org 70 i 3297 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 3298 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 3299 > Err codemadness.org 70 i 3300 <span Err codemadness.org 70 i 3301 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 3302 style="padding-bottom: 74.84662576687117%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAIDAQT/xAAVAQEBAAAAAAAAAAAAAAAAAAABAv/aAAwDAQACEAMQAAAB5Js0ulwf/8QAGBAAAwEBAAAAAAAAAAAAAAAAAAECEhH/2gAIAQEAAQUC1A6kVVxQYIl5/8QAFREBAQAAAAAAAAAAAAAAAAAAABH/2gAIAQMBAT8Bqv/EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABoQAAICAwAAAAAAAAAAAAAAAAAxARAiMmH/2gAIAQEABj8ChnDFXsf/xAAcEAACAgMBAQAAAAAAAAAAAAAAAREhMUFxUWH/2gAIAQEAAT8hjdIbo0FwIolfwnMEnMWWTwJKqR4j/9oADAMBAAIAAwAAABB87//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QD//EABURAQEAAAAAAAAAAAAAAAAAABAR/9oACAECAQE/EIf/xAAfEAACAgIBBQAAAAAAAAAAAAABEQAxIUFRYXGR4fD/2gAIAQEAAT8QI2SIuzYuENh0MLSvzAmIjCLo+5igKKBGydkwjuGAHqvcfpQsGJ//2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 3303 ></span> Err codemadness.org 70 i 3304 <img Err codemadness.org 70 i 3305 class="gatsby-resp-image-image" Err codemadness.org 70 i 3306 alt="Apple IIe slots" Err codemadness.org 70 i 3307 title="Apple IIe slots" Err codemadness.org 70 i 3308 src="/static/15c5b681c6a5e6c235d5c3a7708a1dfd/6aca1/slots.jpg" Err codemadness.org 70 i 3309 srcset="/static/15c5b681c6a5e6c235d5c3a7708a1dfd/d2f63/slots.jpg 163w, Err codemadness.org 70 i 3310 /static/15c5b681c6a5e6c235d5c3a7708a1dfd/c989d/slots.jpg 325w, Err codemadness.org 70 i 3311 /static/15c5b681c6a5e6c235d5c3a7708a1dfd/6aca1/slots.jpg 650w, Err codemadness.org 70 i 3312 /static/15c5b681c6a5e6c235d5c3a7708a1dfd/7c09c/slots.jpg 975w, Err codemadness.org 70 i 3313 /static/15c5b681c6a5e6c235d5c3a7708a1dfd/01ab0/slots.jpg 1300w, Err codemadness.org 70 i 3314 /static/15c5b681c6a5e6c235d5c3a7708a1dfd/e1596/slots.jpg 2048w" Err codemadness.org 70 i 3315 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 3316 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 3317 loading="lazy" Err codemadness.org 70 i 3318 /> Err codemadness.org 70 i 3319 </span></p> Err codemadness.org 70 i 3320 <p>This again reminds of the recent discussions on <a href="https://atp.fm">Accidental Tech Podcast</a> and other podcasts about the new Mac Pro and its expansion slots. There was a lot of fun discussion about what John Siracusa was going to put into his long-awaited Mac Pro's expansion slots.</p> Err codemadness.org 70 i 3321 <p>But, in modern computers, I haven't seen much that's really that interesting as far as expansion slots go. Mostly, I've heard about video cards and more storage. Otherwise, your computer mostly has everything it needs for the majority of use-cases.</p> Err codemadness.org 70 i 3322 <p>Which is completely the opposite for the Apple II. </p> Err codemadness.org 70 i 3323 <p>These expansion slots in Apple II computers CHANGED your computer. Transmogrified it into something altogether new and exciting. Want to print something? Get a card for it. Go on the.. ARPANet? Get a modem card. Need to save a program on something other than tape cassette recorder (which itself is crazy and I want to try)? Better get a floppy driver card!</p> Err codemadness.org 70 i 3324 <p>Even the back of the Apple IIe shows the potential of this machine to be utterly transformed by each owner. These slots are yours for the shaping, dear computer user.</p> Err codemadness.org 70 i 3325 <p><span Err codemadness.org 70 i 3326 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 3327 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 3328 > Err codemadness.org 70 i 3329 <span Err codemadness.org 70 i 3330 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 3331 style="padding-bottom: 74.84662576687117%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAQFAQP/xAAXAQADAQAAAAAAAAAAAAAAAAAAAQID/9oADAMBAAIQAxAAAAFblW3O0CoI/8QAGhAAAwADAQAAAAAAAAAAAAAAAAECAxESIf/aAAgBAQABBQJ5q10yFVLiJF4K9H//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAVEQEBAAAAAAAAAAAAAAAAAAAAEf/aAAgBAgEBPwFH/8QAGRAAAgMBAAAAAAAAAAAAAAAAAAEDITEQ/9oACAEBAAY/AsXKKjRiMP/EABsQAAMAAwEBAAAAAAAAAAAAAAABESFhoTFR/9oACAEBAAE/IWI5jdmK6LXJX0+G7yJd5iEh/9oADAMBAAIAAwAAABAjz//EABURAQEAAAAAAAAAAAAAAAAAABAh/9oACAEDAQE/EKf/xAAWEQEBAQAAAAAAAAAAAAAAAAAAARH/2gAIAQIBAT8QyKf/xAAdEAEAAgEFAQAAAAAAAAAAAAABABEhMUFRYZGh/9oACAEBAAE/EEmDeKXusSUaxdh+MdsFQF06SpkdVj3aEmY7BKOCVMA4HE//2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 3332 ></span> Err codemadness.org 70 i 3333 <img Err codemadness.org 70 i 3334 class="gatsby-resp-image-image" Err codemadness.org 70 i 3335 alt="Back of Apple IIe" Err codemadness.org 70 i 3336 title="Back of Apple IIe" Err codemadness.org 70 i 3337 src="/static/7e6125158b6d97901b7241bed755f2bd/6aca1/back.jpg" Err codemadness.org 70 i 3338 srcset="/static/7e6125158b6d97901b7241bed755f2bd/d2f63/back.jpg 163w, Err codemadness.org 70 i 3339 /static/7e6125158b6d97901b7241bed755f2bd/c989d/back.jpg 325w, Err codemadness.org 70 i 3340 /static/7e6125158b6d97901b7241bed755f2bd/6aca1/back.jpg 650w, Err codemadness.org 70 i 3341 /static/7e6125158b6d97901b7241bed755f2bd/7c09c/back.jpg 975w, Err codemadness.org 70 i 3342 /static/7e6125158b6d97901b7241bed755f2bd/01ab0/back.jpg 1300w, Err codemadness.org 70 i 3343 /static/7e6125158b6d97901b7241bed755f2bd/e1596/back.jpg 2048w" Err codemadness.org 70 i 3344 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 3345 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 3346 loading="lazy" Err codemadness.org 70 i 3347 /> Err codemadness.org 70 i 3348 </span></p> Err codemadness.org 70 i 3349 <p>So, anyway, what the heck did I find inside my Apple IIe? Let's go through them one-by-one.</p> Err codemadness.org 70 i 3350 <h4>Extended 80-Column Text Card</h4> Err codemadness.org 70 i 3351 <p>The <a href="https://en.wikipedia.org/wiki/Apple_80-Column_Text_Card">Extended 80-Column Text Card</a> is quite literal: it gives you 80 columns of text instead of 40! Mine also provides extra RAM, bringing my Apple IIe's total RAM up to a whopping 128kB.</p> Err codemadness.org 70 i 3352 <p><span Err codemadness.org 70 i 3353 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 3354 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 3355 > Err codemadness.org 70 i 3356 <span Err codemadness.org 70 i 3357 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 3358 style="padding-bottom: 74.84662576687117%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAQBA//EABUBAQEAAAAAAAAAAAAAAAAAAAEC/9oADAMBAAIQAxAAAAGFVsvJOK//xAAaEAABBQEAAAAAAAAAAAAAAAABAAIDERIi/9oACAEBAAEFAqxGHuW5AmjmqRBB/8QAFREBAQAAAAAAAAAAAAAAAAAAABH/2gAIAQMBAT8BV//EABURAQEAAAAAAAAAAAAAAAAAAAAR/9oACAECAQE/AUf/xAAbEAABBAMAAAAAAAAAAAAAAAABABARIRIiMf/aAAgBAQAGPwLLpLammtRK/8QAGhAAAwEBAQEAAAAAAAAAAAAAAAERIUExcf/aAAgBAQABPyFPNGdqo47k7gqbVuujGs+IWnHjQ1cD/9oADAMBAAIAAwAAABCjz//EABYRAQEBAAAAAAAAAAAAAAAAAAARAf/aAAgBAwEBPxC6t//EABYRAQEBAAAAAAAAAAAAAAAAAAARIf/aAAgBAgEBPxDEP//EABsQAQEAAgMBAAAAAAAAAAAAAAERACExQVGR/9oACAEBAAE/EDyobGA4l93l+ByhDO5MmBNAMfc34V0iExUHEUb068wzIqa7z//Z'); background-size: cover; display: block;" Err codemadness.org 70 i 3359 ></span> Err codemadness.org 70 i 3360 <img Err codemadness.org 70 i 3361 class="gatsby-resp-image-image" Err codemadness.org 70 i 3362 alt="80 Column card" Err codemadness.org 70 i 3363 title="80 Column card" Err codemadness.org 70 i 3364 src="/static/81fc4256ab04da82e776a4916fb04021/6aca1/80col.jpg" Err codemadness.org 70 i 3365 srcset="/static/81fc4256ab04da82e776a4916fb04021/d2f63/80col.jpg 163w, Err codemadness.org 70 i 3366 /static/81fc4256ab04da82e776a4916fb04021/c989d/80col.jpg 325w, Err codemadness.org 70 i 3367 /static/81fc4256ab04da82e776a4916fb04021/6aca1/80col.jpg 650w, Err codemadness.org 70 i 3368 /static/81fc4256ab04da82e776a4916fb04021/7c09c/80col.jpg 975w, Err codemadness.org 70 i 3369 /static/81fc4256ab04da82e776a4916fb04021/01ab0/80col.jpg 1300w, Err codemadness.org 70 i 3370 /static/81fc4256ab04da82e776a4916fb04021/e1596/80col.jpg 2048w" Err codemadness.org 70 i 3371 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 3372 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 3373 loading="lazy" Err codemadness.org 70 i 3374 /> Err codemadness.org 70 i 3375 </span></p> Err codemadness.org 70 i 3376 <p><span Err codemadness.org 70 i 3377 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 3378 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 3379 > Err codemadness.org 70 i 3380 <span Err codemadness.org 70 i 3381 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 3382 style="padding-bottom: 133.12883435582822%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAGQABAAMBAQAAAAAAAAAAAAAAAAEDBQIE/8QAFgEBAQEAAAAAAAAAAAAAAAAAAQAC/9oADAMBAAIQAxAAAAHt56sO0kayKN1EoT//xAAdEAABBAMBAQAAAAAAAAAAAAAAAQIDBBESMyMy/9oACAEBAAEFArErmOjlduXOka+hc6RfZhFNUyf/xAAWEQEBAQAAAAAAAAAAAAAAAAAQEUH/2gAIAQMBAT8B0h//xAAVEQEBAAAAAAAAAAAAAAAAAAAQEf/aAAgBAgEBPwEp/8QAGxABAAMBAAMAAAAAAAAAAAAAAQAQEXECIUH/2gAIAQEABj8CAfkBd2jk8e0ch2vZNwr/xAAdEAACAgEFAAAAAAAAAAAAAAABEQAQUSExQXGB/9oACAEBAAE/IVMnBIfQcCkb0D0jXnNOAHsRKBHKr//aAAwDAQACAAMAAAAQ+8yN/8QAFxEBAAMAAAAAAAAAAAAAAAAAEAERMf/aAAgBAwEBPxCRqz//xAAXEQADAQAAAAAAAAAAAAAAAAABEDER/9oACAECAQE/EBFGL//EAB0QAQACAgMBAQAAAAAAAAAAAAEAESExEEFhcZH/2gAIAQEAAT8QfgLEDu9wrgba6xdfYiu4FV6OK9fJeHQ38ccOvisN+M1YoE/Y7YoMHqhqFciUACHH/9k='); background-size: cover; display: block;" Err codemadness.org 70 i 3383 ></span> Err codemadness.org 70 i 3384 <img Err codemadness.org 70 i 3385 class="gatsby-resp-image-image" Err codemadness.org 70 i 3386 alt="col card" Err codemadness.org 70 i 3387 title="col card" Err codemadness.org 70 i 3388 src="/static/35ac506f826bef780af538d3732c4f25/6aca1/eightycol.jpg" Err codemadness.org 70 i 3389 srcset="/static/35ac506f826bef780af538d3732c4f25/d2f63/eightycol.jpg 163w, Err codemadness.org 70 i 3390 /static/35ac506f826bef780af538d3732c4f25/c989d/eightycol.jpg 325w, Err codemadness.org 70 i 3391 /static/35ac506f826bef780af538d3732c4f25/6aca1/eightycol.jpg 650w, Err codemadness.org 70 i 3392 /static/35ac506f826bef780af538d3732c4f25/7c09c/eightycol.jpg 975w, Err codemadness.org 70 i 3393 /static/35ac506f826bef780af538d3732c4f25/01ab0/eightycol.jpg 1300w, Err codemadness.org 70 i 3394 /static/35ac506f826bef780af538d3732c4f25/ac99c/eightycol.jpg 1536w" Err codemadness.org 70 i 3395 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 3396 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 3397 loading="lazy" Err codemadness.org 70 i 3398 /> Err codemadness.org 70 i 3399 </span></p> Err codemadness.org 70 i 3400 <p>How do you get into 80-column mode? Type <code class="language-text">PR#3</code> into the BASIC prompt. It kinda looks worse on this monitor, but I can already see the value for more complex programs.</p> Err codemadness.org 70 i 3401 <h4>Super Serial Card II</h4> Err codemadness.org 70 i 3402 <p>I am probably most excited about this card. The <a href="https://en.wikipedia.org/wiki/Apple_II_serial_cards">Super Serial Card II</a> can be used as a modem, a printer connection, and I have a pretty good suspicion that I'll be able to connect to it an Arduino or a Raspberry Pi for some fun.</p> Err codemadness.org 70 i 3403 <p><span Err codemadness.org 70 i 3404 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 3405 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 3406 > Err codemadness.org 70 i 3407 <span Err codemadness.org 70 i 3408 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 3409 style="padding-bottom: 133.12883435582822%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAQFAQP/xAAWAQEBAQAAAAAAAAAAAAAAAAACAQD/2gAMAwEAAhADEAAAAW5byA105Eak6wpS4YRf/8QAHhAAAQQCAwEAAAAAAAAAAAAAAgABAwQREhATITP/2gAIAQEAAQUCsG4xhIW26sexjjiw+Io/oiFibrFiX//EABURAQEAAAAAAAAAAAAAAAAAAAEQ/9oACAEDAQE/AWJP/8QAFREBAQAAAAAAAAAAAAAAAAAAEAH/2gAIAQIBAT8BIf/EABsQAAICAwEAAAAAAAAAAAAAAAEQAAIRITFR/9oACAEBAAY/AtanS618dVgwYC//xAAbEAEAAwADAQAAAAAAAAAAAAABABEhEEFRof/aAAgBAQABPyFwtVmkKN97YRdK9jTkPY74aw9n0RdlCbIv6N94/9oADAMBAAIAAwAAABA0GwH/xAAYEQADAQEAAAAAAAAAAAAAAAAAAREQIf/aAAgBAwEBPxCL0g5u5//EABgRAAIDAAAAAAAAAAAAAAAAAAEQESEx/9oACAECAQE/EBiKoX//xAAdEAEAAwEAAgMAAAAAAAAAAAABABExIUFRccHR/9oACAEBAAE/ECIgrKalA6PVzItHIAhan7jvEq3upvwSw565ECU18X4ZUJr1YlolHvTLuYvr9js//9k='); background-size: cover; display: block;" Err codemadness.org 70 i 3410 ></span> Err codemadness.org 70 i 3411 <img Err codemadness.org 70 i 3412 class="gatsby-resp-image-image" Err codemadness.org 70 i 3413 alt="Super Serial Card II" Err codemadness.org 70 i 3414 title="Super Serial Card II" Err codemadness.org 70 i 3415 src="/static/a4ba5625407f5479b5ae494069b786a8/6aca1/serial.jpg" Err codemadness.org 70 i 3416 srcset="/static/a4ba5625407f5479b5ae494069b786a8/d2f63/serial.jpg 163w, Err codemadness.org 70 i 3417 /static/a4ba5625407f5479b5ae494069b786a8/c989d/serial.jpg 325w, Err codemadness.org 70 i 3418 /static/a4ba5625407f5479b5ae494069b786a8/6aca1/serial.jpg 650w, Err codemadness.org 70 i 3419 /static/a4ba5625407f5479b5ae494069b786a8/7c09c/serial.jpg 975w, Err codemadness.org 70 i 3420 /static/a4ba5625407f5479b5ae494069b786a8/01ab0/serial.jpg 1300w, Err codemadness.org 70 i 3421 /static/a4ba5625407f5479b5ae494069b786a8/ac99c/serial.jpg 1536w" Err codemadness.org 70 i 3422 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 3423 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 3424 loading="lazy" Err codemadness.org 70 i 3425 /> Err codemadness.org 70 i 3426 </span></p> Err codemadness.org 70 i 3427 <p><span Err codemadness.org 70 i 3428 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 3429 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 3430 > Err codemadness.org 70 i 3431 <span Err codemadness.org 70 i 3432 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 3433 style="padding-bottom: 133.12883435582822%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAMFBAL/xAAXAQADAQAAAAAAAAAAAAAAAAAAAQID/9oADAMBAAIQAxAAAAFTuk51pNAnBZVKmYUQP//EABsQAQEAAgMBAAAAAAAAAAAAAAECAxIAEBEi/9oACAEBAAEFAo9yTPolTzLm0IthDHRre30k1Yd//8QAFhEBAQEAAAAAAAAAAAAAAAAAABEQ/9oACAEDAQE/AciP/8QAFhEBAQEAAAAAAAAAAAAAAAAAEQAQ/9oACAECAQE/ASJz/8QAHRAAAgICAwEAAAAAAAAAAAAAAAECERIxICFBgf/aAAgBAQAGPwKFdNFPR4Yw2W7aLxiWyn84/wD/xAAcEAEAAwEAAwEAAAAAAAAAAAABABExIRBBkXH/2gAIAQEAAT8huNNZfqFypZe5GG/UcwB84ZA1gaRyVx8YbJndbRFRbPyGef/aAAwDAQACAAMAAAAQZN9M/8QAFxEAAwEAAAAAAAAAAAAAAAAAAAERcf/aAAgBAwEBPxCpMrNmz//EABcRAQEBAQAAAAAAAAAAAAAAAAEAERD/2gAIAQIBAT8QUljjb//EAB8QAQACAgICAwAAAAAAAAAAAAEAESExQVFhcYGRwf/aAAgBAQABPxBqKSJSwiamVcTha8b9xArZ2Hr3GjXkUr0vvVHZ88+IIoHxfyVluaUuoqXYaBoZqBPJmGMY70fU/9k='); background-size: cover; display: block;" Err codemadness.org 70 i 3434 ></span> Err codemadness.org 70 i 3435 <img Err codemadness.org 70 i 3436 class="gatsby-resp-image-image" Err codemadness.org 70 i 3437 alt="Super Serial Card II closeup" Err codemadness.org 70 i 3438 title="Super Serial Card II closeup" Err codemadness.org 70 i 3439 src="/static/68c8a050c8e970e5f90bd2aef0ff1473/6aca1/serial2.jpg" Err codemadness.org 70 i 3440 srcset="/static/68c8a050c8e970e5f90bd2aef0ff1473/d2f63/serial2.jpg 163w, Err codemadness.org 70 i 3441 /static/68c8a050c8e970e5f90bd2aef0ff1473/c989d/serial2.jpg 325w, Err codemadness.org 70 i 3442 /static/68c8a050c8e970e5f90bd2aef0ff1473/6aca1/serial2.jpg 650w, Err codemadness.org 70 i 3443 /static/68c8a050c8e970e5f90bd2aef0ff1473/7c09c/serial2.jpg 975w, Err codemadness.org 70 i 3444 /static/68c8a050c8e970e5f90bd2aef0ff1473/01ab0/serial2.jpg 1300w, Err codemadness.org 70 i 3445 /static/68c8a050c8e970e5f90bd2aef0ff1473/ac99c/serial2.jpg 1536w" Err codemadness.org 70 i 3446 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 3447 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 3448 loading="lazy" Err codemadness.org 70 i 3449 /> Err codemadness.org 70 i 3450 </span></p> Err codemadness.org 70 i 3451 <h4>MicroModem IIe</h4> Err codemadness.org 70 i 3452 <p>It's a modem! With an external port that looks like a telephone jack. Some wizards at work told me that I probably cannot just plug this into a modern phone line and expect it to work, though. They said that phone lines don't really work the same way anymore. This is something I'm not quite clear on yet, but I did manage to find the <a href="https://apple2online.com/web_documents/hayes_micromodem_ii_owner__s_guide.pdf">Micromodel II Owner's Manual</a>, so there could be some fun to be had here.</p> Err codemadness.org 70 i 3453 <p><span Err codemadness.org 70 i 3454 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 3455 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 3456 > Err codemadness.org 70 i 3457 <span Err codemadness.org 70 i 3458 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 3459 style="padding-bottom: 74.84662576687117%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAIDBAX/xAAVAQEBAAAAAAAAAAAAAAAAAAABAv/aAAwDAQACEAMQAAABkeo8OgID/8QAGhAAAgMBAQAAAAAAAAAAAAAAAQIAAxQEEf/aAAgBAQABBQLUno6FiMHGQzKZVWUX/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAGRABAQADAQAAAAAAAAAAAAAAABEBITJB/9oACAEBAAY/Apt6uHTpK//EABsQAAMAAwEBAAAAAAAAAAAAAAABESExUUGR/9oACAEBAAE/IcuOdDbaS+TwLYWdm3goYU3MzT//2gAMAwEAAgADAAAAEBcf/8QAFxEBAQEBAAAAAAAAAAAAAAAAAQARMf/aAAgBAwEBPxAXeRf/xAAXEQADAQAAAAAAAAAAAAAAAAAAAREh/9oACAECAQE/EGlMIf/EABoQAQEBAQEBAQAAAAAAAAAAAAERACFBgZH/2gAIAQEAAT8QRRQWol/dyxRexQ+67mEr45U7yYqaJTPQTuYsNdBN/9k='); background-size: cover; display: block;" Err codemadness.org 70 i 3460 ></span> Err codemadness.org 70 i 3461 <img Err codemadness.org 70 i 3462 class="gatsby-resp-image-image" Err codemadness.org 70 i 3463 alt="modem card" Err codemadness.org 70 i 3464 title="modem card" Err codemadness.org 70 i 3465 src="/static/0e5d74e10b2a0f9b0c074343be45c824/6aca1/modem.jpg" Err codemadness.org 70 i 3466 srcset="/static/0e5d74e10b2a0f9b0c074343be45c824/d2f63/modem.jpg 163w, Err codemadness.org 70 i 3467 /static/0e5d74e10b2a0f9b0c074343be45c824/c989d/modem.jpg 325w, Err codemadness.org 70 i 3468 /static/0e5d74e10b2a0f9b0c074343be45c824/6aca1/modem.jpg 650w, Err codemadness.org 70 i 3469 /static/0e5d74e10b2a0f9b0c074343be45c824/7c09c/modem.jpg 975w, Err codemadness.org 70 i 3470 /static/0e5d74e10b2a0f9b0c074343be45c824/01ab0/modem.jpg 1300w, Err codemadness.org 70 i 3471 /static/0e5d74e10b2a0f9b0c074343be45c824/e1596/modem.jpg 2048w" Err codemadness.org 70 i 3472 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 3473 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 3474 loading="lazy" Err codemadness.org 70 i 3475 /> Err codemadness.org 70 i 3476 </span></p> Err codemadness.org 70 i 3477 <p><span Err codemadness.org 70 i 3478 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 3479 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 3480 > Err codemadness.org 70 i 3481 <span Err codemadness.org 70 i 3482 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 3483 style="padding-bottom: 74.84662576687117%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIEA//EABYBAQEBAAAAAAAAAAAAAAAAAAEAA//aAAwDAQACEAMQAAABlsZc3YjG/8QAGhAAAgMBAQAAAAAAAAAAAAAAAgMAARQSIv/aAAgBAQABBQKuVnpGotyiHzctQzNP/8QAFREBAQAAAAAAAAAAAAAAAAAAACH/2gAIAQMBAT8BV//EABURAQEAAAAAAAAAAAAAAAAAAAAh/9oACAECAQE/AUf/xAAbEAACAgMBAAAAAAAAAAAAAAAAAREhAgMxEv/aAAgBAQAGPwKGvZD1nFiWkVR0/8QAHBAAAgICAwAAAAAAAAAAAAAAAREAITFRYXGB/9oACAEBAAE/IWR60S0IQEFriNhsYUAyLyEAuWqETdOp/9oADAMBAAIAAwAAABCs7//EABYRAQEBAAAAAAAAAAAAAAAAAAEAEf/aAAgBAwEBPxAEsn//xAAWEQEBAQAAAAAAAAAAAAAAAAABABH/2gAIAQIBAT8QXYn/xAAdEAEAAgICAwAAAAAAAAAAAAABABEhUTFBcYGR/9oACAEBAAE/EExJ6O1vMShJ737YihSIuPpE1de3KAFAV4eZR2isGJP/2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 3484 ></span> Err codemadness.org 70 i 3485 <img Err codemadness.org 70 i 3486 class="gatsby-resp-image-image" Err codemadness.org 70 i 3487 alt="modem card closeup" Err codemadness.org 70 i 3488 title="modem card closeup" Err codemadness.org 70 i 3489 src="/static/a01edf5e481b4174a9680dd837984dea/6aca1/modem2.jpg" Err codemadness.org 70 i 3490 srcset="/static/a01edf5e481b4174a9680dd837984dea/d2f63/modem2.jpg 163w, Err codemadness.org 70 i 3491 /static/a01edf5e481b4174a9680dd837984dea/c989d/modem2.jpg 325w, Err codemadness.org 70 i 3492 /static/a01edf5e481b4174a9680dd837984dea/6aca1/modem2.jpg 650w, Err codemadness.org 70 i 3493 /static/a01edf5e481b4174a9680dd837984dea/7c09c/modem2.jpg 975w, Err codemadness.org 70 i 3494 /static/a01edf5e481b4174a9680dd837984dea/01ab0/modem2.jpg 1300w, Err codemadness.org 70 i 3495 /static/a01edf5e481b4174a9680dd837984dea/e1596/modem2.jpg 2048w" Err codemadness.org 70 i 3496 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 3497 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 3498 loading="lazy" Err codemadness.org 70 i 3499 /> Err codemadness.org 70 i 3500 </span></p> Err codemadness.org 70 i 3501 <h4>DuoDisk and Disk II Card</h4> Err codemadness.org 70 i 3502 <p>The <a href="https://en.wikipedia.org/wiki/Disk_II#DuoDisk">DuoDisk</a> is a combination drive with two 5 1/4-inch floppy drive bays next to each other. It looks nice when you sandwich it between your Apple II and its monitor.</p> Err codemadness.org 70 i 3503 <p><span Err codemadness.org 70 i 3504 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 3505 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 3506 > Err codemadness.org 70 i 3507 <span Err codemadness.org 70 i 3508 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 3509 style="padding-bottom: 133.12883435582822%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAIEAQP/xAAWAQEBAQAAAAAAAAAAAAAAAAABAgP/2gAMAwEAAhADEAAAAYOy1TLmBp0VqB0QZ//EABwQAQEAAgIDAAAAAAAAAAAAAAECAxEAEgQjQf/aAAgBAQABBQLHSnaxryLhxYXqYa2ht9ZvLwRPswPLCX//xAAYEQACAwAAAAAAAAAAAAAAAAAAEQIQEv/aAAgBAwEBPwFS1bP/xAAXEQADAQAAAAAAAAAAAAAAAAAAAREQ/9oACAECAQE/AashGf/EACAQAAIBAwQDAAAAAAAAAAAAAAABEQISIQMiMZFBYbH/2gAIAQEABj8C5MVEJJkr6TBvcMt0keRX0qfZy+zM9mEj/8QAHBABAAICAwEAAAAAAAAAAAAAAQAhETFBUYGh/9oACAEBAAE/IQd9wBH3NSttgXgb3ASoO8fUyogC6le35E5QMReZ9E5o9Q6AMdT/2gAMAwEAAgADAAAAECs7j//EABgRAQEBAQEAAAAAAAAAAAAAAAEAESEx/9oACAEDAQE/EFwjyy2SPl//xAAYEQEBAQEBAAAAAAAAAAAAAAABABFBUf/aAAgBAgEBPxBATttqPa//xAAcEAEAAgIDAQAAAAAAAAAAAAABABEhMVFxwdH/2gAIAQEAAT8QpAUQu3RW4XKIHBBxgC22rKC1wARfNy60WN3Cmz4WmuZiayqWva7Y0BRyD5MyNglhGgABcH0gojtT2OHFmw5t5n//2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 3510 ></span> Err codemadness.org 70 i 3511 <img Err codemadness.org 70 i 3512 class="gatsby-resp-image-image" Err codemadness.org 70 i 3513 alt="Apple IIe with floppy" Err codemadness.org 70 i 3514 title="Apple IIe with floppy" Err codemadness.org 70 i 3515 src="/static/5cc77f4287f8c875722285ff9d719c92/6aca1/floppymodule.jpg" Err codemadness.org 70 i 3516 srcset="/static/5cc77f4287f8c875722285ff9d719c92/d2f63/floppymodule.jpg 163w, Err codemadness.org 70 i 3517 /static/5cc77f4287f8c875722285ff9d719c92/c989d/floppymodule.jpg 325w, Err codemadness.org 70 i 3518 /static/5cc77f4287f8c875722285ff9d719c92/6aca1/floppymodule.jpg 650w, Err codemadness.org 70 i 3519 /static/5cc77f4287f8c875722285ff9d719c92/7c09c/floppymodule.jpg 975w, Err codemadness.org 70 i 3520 /static/5cc77f4287f8c875722285ff9d719c92/01ab0/floppymodule.jpg 1300w, Err codemadness.org 70 i 3521 /static/5cc77f4287f8c875722285ff9d719c92/ac99c/floppymodule.jpg 1536w" Err codemadness.org 70 i 3522 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 3523 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 3524 loading="lazy" Err codemadness.org 70 i 3525 /> Err codemadness.org 70 i 3526 </span></p> Err codemadness.org 70 i 3527 <p>The card uses the same Disk II system famously designed by Woz. The <a href="https://en.wikipedia.org/wiki/Disk_II">Wikipedia</a> entry on the Disk II is fascinating and well-worth the quick read. Apparently, the Apple II was getting a lot of flak for not including a disk drive, instead relying on external cassette tape storage. Woz's solution was the Disk II system, a simpler design than the industry standards, proved incredibly successful, both financially and functionally. Per Wikipedia:</p> Err codemadness.org 70 i 3528 <blockquote> Err codemadness.org 70 i 3529 <p>Wozniak called the resultant Disk II system "my most incredible experience at Apple and the finest job I did", and credited it and VisiCalc with the Apple II's success.</p> Err codemadness.org 70 i 3530 </blockquote> Err codemadness.org 70 i 3531 <p><span Err codemadness.org 70 i 3532 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 3533 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 3534 > Err codemadness.org 70 i 3535 <span Err codemadness.org 70 i 3536 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 3537 style="padding-bottom: 74.84662576687117%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAMEAf/EABUBAQEAAAAAAAAAAAAAAAAAAAEC/9oADAMBAAIQAxAAAAHGJfDYRhX/xAAbEAEAAgIDAAAAAAAAAAAAAAABAgQAAxESFP/aAAgBAQABBQKVgiwsxw2wRrcvl6hpz//EABURAQEAAAAAAAAAAAAAAAAAABAh/9oACAEDAQE/Aaf/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAZEAADAAMAAAAAAAAAAAAAAAAAETEBEiH/2gAIAQEABj8CSIUexzLKf//EABsQAAMAAgMAAAAAAAAAAAAAAAABIRFRcYGR/9oACAEBAAE/Ia19NgmZ9PIqzlvQmnZbRGp0j//aAAwDAQACAAMAAAAQxM//xAAXEQEAAwAAAAAAAAAAAAAAAAAAASFR/9oACAEDAQE/EI0p/8QAFREBAQAAAAAAAAAAAAAAAAAAACH/2gAIAQIBAT8Qiv/EABsQAQADAQADAAAAAAAAAAAAAAEAETEhQVFx/9oACAEBAAE/EECVFGqR3awEx2CNvgIxm+grMR2ALoz5LDSfSVP/2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 3538 ></span> Err codemadness.org 70 i 3539 <img Err codemadness.org 70 i 3540 class="gatsby-resp-image-image" Err codemadness.org 70 i 3541 alt="floppy card" Err codemadness.org 70 i 3542 title="floppy card" Err codemadness.org 70 i 3543 src="/static/36838def124428fea150870f5a9dbde3/6aca1/floppycard.jpg" Err codemadness.org 70 i 3544 srcset="/static/36838def124428fea150870f5a9dbde3/d2f63/floppycard.jpg 163w, Err codemadness.org 70 i 3545 /static/36838def124428fea150870f5a9dbde3/c989d/floppycard.jpg 325w, Err codemadness.org 70 i 3546 /static/36838def124428fea150870f5a9dbde3/6aca1/floppycard.jpg 650w, Err codemadness.org 70 i 3547 /static/36838def124428fea150870f5a9dbde3/7c09c/floppycard.jpg 975w, Err codemadness.org 70 i 3548 /static/36838def124428fea150870f5a9dbde3/01ab0/floppycard.jpg 1300w, Err codemadness.org 70 i 3549 /static/36838def124428fea150870f5a9dbde3/e1596/floppycard.jpg 2048w" Err codemadness.org 70 i 3550 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 3551 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 3552 loading="lazy" Err codemadness.org 70 i 3553 /> Err codemadness.org 70 i 3554 </span></p> Err codemadness.org 70 i 3555 <p>If anyone's got any spare 5 1⁄4-inch floppies, let me know, because now I've got two whole slots for them (this is actually a serious inquiry, please <a href="https://twitter.com/whatrocks">tweet</a> at me!).</p> Err codemadness.org 70 i 3556 <h3>So, what are you going to do with your new old computer, Charlie?</h3> Err codemadness.org 70 i 3557 <p>I'm not sure. Here are some of my thoughts.</p> Err codemadness.org 70 i 3558 <h4>Serial port</h4> Err codemadness.org 70 i 3559 <p>As mentioned, I suspect that I'll be able to figure out how to use the Super Serial II card with an Arduino or Raspberry Pi.</p> Err codemadness.org 70 i 3560 <p>I recently found a project that uses Raspberry Pi in such a way that it accepts keyboard input from the Apple II and displays its output on the Apple monitor. Definitely want to try that.</p> Err codemadness.org 70 i 3561 <p>But I'm also eager to see if I can rig it up such that I can effectively SSH/remote into the Apple IIe from a laptop, using a Raspberry Pi as a bridge of some kind via the Super Serial II card. </p> Err codemadness.org 70 i 3562 <p>This project is definitely my top priority, because it seems odd and useful. I'd really like to be able to write programs for the Apple IIe and easily save them to GitHub. Being able to write them on my laptop and simply transfer them to the Apple for processing seems like a hilariously fun and distracting project to work on next.</p> Err codemadness.org 70 i 3563 <h4>Repairs</h4> Err codemadness.org 70 i 3564 <p>These are smaller efforts, which means they'll likely linger for a while.</p> Err codemadness.org 70 i 3565 <p><span Err codemadness.org 70 i 3566 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 3567 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 3568 > Err codemadness.org 70 i 3569 <span Err codemadness.org 70 i 3570 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 3571 style="padding-bottom: 133.12883435582822%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAGQAAAwADAAAAAAAAAAAAAAAAAAMEAQIF/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/9oADAMBAAIQAxAAAAFNO68ayUBOmSuXok5H/8QAGhAAAwEBAQEAAAAAAAAAAAAAAQIDEQASIv/aAAgBAQABBQIScGAKTnEEU3PvNPVHpgo5NC+2BQllk5M//8QAFhEBAQEAAAAAAAAAAAAAAAAAEAEh/9oACAEDAQE/ASaf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAGxAAAgIDAQAAAAAAAAAAAAAAAAERITFBUYH/2gAIAQEABj8Cb6mR0bfSFJdelGjOCCmWKWf/xAAbEAEBAQEAAwEAAAAAAAAAAAABEQAhMUFRof/aAAgBAQABPyFkHoTL2Iry6jPcmBgOIe8eFFdbjyQNPW8YxPuhYfrmAkLN0lHKV20/M2Ud/9oADAMBAAIAAwAAABBk+87/xAAWEQEBAQAAAAAAAAAAAAAAAAAAEQH/2gAIAQMBAT8QzERqK//EABgRAAMBAQAAAAAAAAAAAAAAAAABERAh/9oACAECAQE/EKVD4s//xAAeEAEBAQEAAgIDAAAAAAAAAAABEQAhMVFBYXGRsf/aAAgBAQABPxAbqQHUtC5k0wGRSHNKApAZAh/RyBMCgsHhb4xTWcgBf3pCkFVS/OoiIkT36mRFcnZT1oOBx4c/Fwj7QHufG0i/J1uEYlQ9b//Z'); background-size: cover; display: block;" Err codemadness.org 70 i 3572 ></span> Err codemadness.org 70 i 3573 <img Err codemadness.org 70 i 3574 class="gatsby-resp-image-image" Err codemadness.org 70 i 3575 alt="keyboard" Err codemadness.org 70 i 3576 title="keyboard" Err codemadness.org 70 i 3577 src="/static/474d8f4a0061a7b5b03adc4a8b5e1b51/6aca1/keyboard.jpg" Err codemadness.org 70 i 3578 srcset="/static/474d8f4a0061a7b5b03adc4a8b5e1b51/d2f63/keyboard.jpg 163w, Err codemadness.org 70 i 3579 /static/474d8f4a0061a7b5b03adc4a8b5e1b51/c989d/keyboard.jpg 325w, Err codemadness.org 70 i 3580 /static/474d8f4a0061a7b5b03adc4a8b5e1b51/6aca1/keyboard.jpg 650w, Err codemadness.org 70 i 3581 /static/474d8f4a0061a7b5b03adc4a8b5e1b51/7c09c/keyboard.jpg 975w, Err codemadness.org 70 i 3582 /static/474d8f4a0061a7b5b03adc4a8b5e1b51/01ab0/keyboard.jpg 1300w, Err codemadness.org 70 i 3583 /static/474d8f4a0061a7b5b03adc4a8b5e1b51/ac99c/keyboard.jpg 1536w" Err codemadness.org 70 i 3584 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 3585 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 3586 loading="lazy" Err codemadness.org 70 i 3587 /> Err codemadness.org 70 i 3588 </span></p> Err codemadness.org 70 i 3589 <ul> Err codemadness.org 70 i 3590 <li>Find replacement keys for my missing keys. I hope this doesn't mean buying an entire <em>other</em> Apple IIe. Or do I?</li> Err codemadness.org 70 i 3591 <li>"Retro-brite" and deep clean - a la 8 Bit Guy - to make the case look brand new</li> Err codemadness.org 70 i 3592 </ul> Err codemadness.org 70 i 3593 <h4>Games</h4> Err codemadness.org 70 i 3594 <p>I currently have zero software for the Apple IIe. None. Zilch. Which means I have no games. I know that, back in the 1980s, magazines used to print out source code for games, and kids would spend hours plugging them into their Apple IIs or Commodores, praying that they hadn't made a syntax error. Once their games were up and running, this proved a great chance for the curious ones to start messing around with the source code, tweaking it, and eventually making their own games. I'm sure that many of these games and magazines are now scanned and available online. I'll definitely be checking those out.</p> Err codemadness.org 70 i 3595 <p>I'd also be very open to buying some classic Apple II games on eBay. I'd love to hear of favorites or any suggestions.</p> Err codemadness.org 70 i 3596 <h4>Storage</h4> Err codemadness.org 70 i 3597 <p>Given that I immediately lose everything anytime the power goes out (or I simply turn off the computer), these two projects seem important:</p> Err codemadness.org 70 i 3598 <ul> Err codemadness.org 70 i 3599 <li>Get a tape recorder and figure out how to save a program to tape, and then rewind / reload it</li> Err codemadness.org 70 i 3600 <li>Find some blank floppies and do the same</li> Err codemadness.org 70 i 3601 </ul> Err codemadness.org 70 i 3602 <h4>Programming</h4> Err codemadness.org 70 i 3603 <p>Other than AppleSoft BASIC (which was written by Microsoft! For Apple!!), which is burned into a ROM chip on the Apple II, there's also some sort of built-in assembler that you can access by typing this into the BASIC prompt:</p> Err codemadness.org 70 i 3604 <div class="gatsby-highlight" data-language="text"><pre class="language-text"><code class="language-text">CALL-151</code></pre></div> Err codemadness.org 70 i 3605 <p>I believe this is where I'll be able to do some of the more Commodore 64-like peeking and poking directly at memory. I have a feeling there's a lot of exploring (and fun) to be done here. I need to read up more on this.</p> Err codemadness.org 70 i 3606 <h3>One more thing</h3> Err codemadness.org 70 i 3607 <p>This computer represents to me the lost era of computer as appliance. I'm talking about "bicycle for the mind" type-of-stuff. When you still sat down and said, "I'm going to computer now." Or, as in my childhood, "May I please go on the computer now, Mom, PLEASE?"</p> Err codemadness.org 70 i 3608 <p>We're much closer to cyborgs now, with our phones and watches and speakers and other do-dads. Computers are part of us. They're attached to us, they're in our pockets, they're in our bags, they're next to us when we go to sleep. You can't escape them, and as a result, you're no longer able to make an active choice about whether or not to use them. The best we've got is Screen Time warnings, a penal code to make us use them less.</p> Err codemadness.org 70 i 3609 <p>That's why this Apple IIe is such an important machine to me. It's something I can actively choose to dive into and explore. It's the same thing I feel when I really get into a novel. I'm in another world.</p> Err codemadness.org 70 i 3610 <p>And here a few more close-ups of the computer as a reward for making it this far.</p> Err codemadness.org 70 i 3611 <p><span Err codemadness.org 70 i 3612 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 3613 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 3614 > Err codemadness.org 70 i 3615 <span Err codemadness.org 70 i 3616 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 3617 style="padding-bottom: 133.12883435582822%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAMEAQL/xAAWAQEBAQAAAAAAAAAAAAAAAAAAAgH/2gAMAwEAAhADEAAAAdlqhi3nJh8dcY4wP//EABwQAAIBBQEAAAAAAAAAAAAAAAECMgADESIxQf/aAAgBAQABBQI8tplrow5itPIxWnl4o2fv/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFREBAQAAAAAAAAAAAAAAAAAAASD/2gAIAQIBAT8BI//EABkQAAIDAQAAAAAAAAAAAAAAAAEQAAMhAv/aAAgBAQAGPwIzjUZWdRlbC//EAB4QAAICAgIDAAAAAAAAAAAAAAABESFBsVFxMZGh/9oACAEBAAE/IcLgawnt3OBkR8hJQOzuzUP6BqThmofl0K62az//2gAMAwEAAgADAAAAENAijv/EABURAQEAAAAAAAAAAAAAAAAAAAEg/9oACAEDAQE/EGP/xAAVEQEBAAAAAAAAAAAAAAAAAAAQAf/aAAgBAgEBPxAQ/8QAHRABAAMAAgMBAAAAAAAAAAAAAQARITGxcYGRof/aAAgBAQABPxC/Mu9V4iCblTDht0GkSKY36nIA4rb+xrpXE+j6gNYu1fc6EIg8KIAS6wLcnSn/2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 3618 ></span> Err codemadness.org 70 i 3619 <img Err codemadness.org 70 i 3620 class="gatsby-resp-image-image" Err codemadness.org 70 i 3621 alt="Apple IIe Logo" Err codemadness.org 70 i 3622 title="Apple IIe Logo" Err codemadness.org 70 i 3623 src="/static/ddeeecfdae735533db7571d7e8342705/6aca1/apple.jpg" Err codemadness.org 70 i 3624 srcset="/static/ddeeecfdae735533db7571d7e8342705/d2f63/apple.jpg 163w, Err codemadness.org 70 i 3625 /static/ddeeecfdae735533db7571d7e8342705/c989d/apple.jpg 325w, Err codemadness.org 70 i 3626 /static/ddeeecfdae735533db7571d7e8342705/6aca1/apple.jpg 650w, Err codemadness.org 70 i 3627 /static/ddeeecfdae735533db7571d7e8342705/7c09c/apple.jpg 975w, Err codemadness.org 70 i 3628 /static/ddeeecfdae735533db7571d7e8342705/01ab0/apple.jpg 1300w, Err codemadness.org 70 i 3629 /static/ddeeecfdae735533db7571d7e8342705/ac99c/apple.jpg 1536w" Err codemadness.org 70 i 3630 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 3631 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 3632 loading="lazy" Err codemadness.org 70 i 3633 /> Err codemadness.org 70 i 3634 </span></p> Err codemadness.org 70 i 3635 <p><span Err codemadness.org 70 i 3636 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 3637 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 3638 > Err codemadness.org 70 i 3639 <span Err codemadness.org 70 i 3640 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 3641 style="padding-bottom: 133.12883435582822%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIDBP/EABUBAQEAAAAAAAAAAAAAAAAAAAAC/9oADAMBAAIQAxAAAAHCxWKzEwdILU1JB//EABsQAAICAwEAAAAAAAAAAAAAAAACAQMREyIg/9oACAEBAAEFAkvcmx3O5K6JG5JZoNrKbGM+P//EABURAQEAAAAAAAAAAAAAAAAAABEg/9oACAEDAQE/AWP/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/AR//xAAdEAACAQQDAAAAAAAAAAAAAAAAASEQETFBEiBh/9oACAEBAAY/Apk0ZSNFuOPaQyX1/8QAHBAAAwADAAMAAAAAAAAAAAAAAAERITFhcZHh/9oACAEBAAE/Idpky02fLieZ8EIbfYq6PiKNMUSWvHmGuteRu3aPTE8iP//aAAwDAQACAAMAAAAQgydM/8QAGBEAAwEBAAAAAAAAAAAAAAAAAAERIVH/2gAIAQMBAT8QWNZV0pEf/8QAGBEAAwEBAAAAAAAAAAAAAAAAAAERECH/2gAIAQIBAT8QaV4Qmf/EAB0QAQACAQUBAAAAAAAAAAAAAAEAESExQVFhcYH/2gAIAQEAAT8QMW2MSzkmFWg2FGn7AziPDAVMNOrP2sS/YgGoWc9eRaWGuaYZtLucBt7LbKG1ViXol7qEeqI2XaJz7P/Z'); background-size: cover; display: block;" Err codemadness.org 70 i 3642 ></span> Err codemadness.org 70 i 3643 <img Err codemadness.org 70 i 3644 class="gatsby-resp-image-image" Err codemadness.org 70 i 3645 alt="Motherboard" Err codemadness.org 70 i 3646 title="Motherboard" Err codemadness.org 70 i 3647 src="/static/1ac4332a25a559be39a6d6ee535c423c/6aca1/chips.jpg" Err codemadness.org 70 i 3648 srcset="/static/1ac4332a25a559be39a6d6ee535c423c/d2f63/chips.jpg 163w, Err codemadness.org 70 i 3649 /static/1ac4332a25a559be39a6d6ee535c423c/c989d/chips.jpg 325w, Err codemadness.org 70 i 3650 /static/1ac4332a25a559be39a6d6ee535c423c/6aca1/chips.jpg 650w, Err codemadness.org 70 i 3651 /static/1ac4332a25a559be39a6d6ee535c423c/7c09c/chips.jpg 975w, Err codemadness.org 70 i 3652 /static/1ac4332a25a559be39a6d6ee535c423c/01ab0/chips.jpg 1300w, Err codemadness.org 70 i 3653 /static/1ac4332a25a559be39a6d6ee535c423c/ac99c/chips.jpg 1536w" Err codemadness.org 70 i 3654 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 3655 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 3656 loading="lazy" Err codemadness.org 70 i 3657 /> Err codemadness.org 70 i 3658 </span></p> Err codemadness.org 70 i 3659 <p><span Err codemadness.org 70 i 3660 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 3661 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 3662 > Err codemadness.org 70 i 3663 <span Err codemadness.org 70 i 3664 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 3665 style="padding-bottom: 74.84662576687117%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAMBBAX/xAAWAQEBAQAAAAAAAAAAAAAAAAABAgP/2gAMAwEAAhADEAAAAUypOd3jOE//xAAbEAEAAgIDAAAAAAAAAAAAAAABAAIDIRESE//aAAgBAQABBQLnfWpPTFHYrWGUn//EABURAQEAAAAAAAAAAAAAAAAAAAAR/9oACAEDAQE/Aar/xAAVEQEBAAAAAAAAAAAAAAAAAAAAEf/aAAgBAgEBPwFH/8QAGRAAAwADAAAAAAAAAAAAAAAAAAEhETGh/9oACAEBAAY/At8M1lZSFR//xAAbEAEAAwADAQAAAAAAAAAAAAABABEhMVFhgf/aAAgBAQABPyEDqvjJYt8LlGMJmErzEg+7O+og5H0uf//aAAwDAQACAAMAAAAQiP8A/8QAFxEAAwEAAAAAAAAAAAAAAAAAARARMf/aAAgBAwEBPxAxq//EABYRAQEBAAAAAAAAAAAAAAAAAAEQEf/aAAgBAgEBPxANj//EAB0QAQACAgIDAAAAAAAAAAAAAAEAESExQXFRkbH/2gAIAQEAAT8QYhECnZ76hi4XAHy4KXbQvKNR31tbydRaA9otxZS8gL3P/9k='); background-size: cover; display: block;" Err codemadness.org 70 i 3666 ></span> Err codemadness.org 70 i 3667 <img Err codemadness.org 70 i 3668 class="gatsby-resp-image-image" Err codemadness.org 70 i 3669 alt="chips" Err codemadness.org 70 i 3670 title="chips" Err codemadness.org 70 i 3671 src="/static/3e75ae11d6e3bed6e0110e893614c605/6aca1/chips2.jpg" Err codemadness.org 70 i 3672 srcset="/static/3e75ae11d6e3bed6e0110e893614c605/d2f63/chips2.jpg 163w, Err codemadness.org 70 i 3673 /static/3e75ae11d6e3bed6e0110e893614c605/c989d/chips2.jpg 325w, Err codemadness.org 70 i 3674 /static/3e75ae11d6e3bed6e0110e893614c605/6aca1/chips2.jpg 650w, Err codemadness.org 70 i 3675 /static/3e75ae11d6e3bed6e0110e893614c605/7c09c/chips2.jpg 975w, Err codemadness.org 70 i 3676 /static/3e75ae11d6e3bed6e0110e893614c605/01ab0/chips2.jpg 1300w, Err codemadness.org 70 i 3677 /static/3e75ae11d6e3bed6e0110e893614c605/e1596/chips2.jpg 2048w" Err codemadness.org 70 i 3678 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 3679 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 3680 loading="lazy" Err codemadness.org 70 i 3681 /> Err codemadness.org 70 i 3682 </span></p> Err codemadness.org 70 i 3683 <p><span Err codemadness.org 70 i 3684 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 3685 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 3686 > Err codemadness.org 70 i 3687 <span Err codemadness.org 70 i 3688 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 3689 style="padding-bottom: 74.84662576687117%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIEAf/EABYBAQEBAAAAAAAAAAAAAAAAAAACA//aAAwDAQACEAMQAAABlp2nK2ED/8QAGxAAAgIDAQAAAAAAAAAAAAAAAAECAxESIjH/2gAIAQEAAQUC6Km00Kqeyjg9P//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABsQAAIBBQAAAAAAAAAAAAAAAAABMRAhMkKR/9oACAEBAAY/ApfDZkmVq//EABwQAAMAAgMBAAAAAAAAAAAAAAABETFRIXGxwf/aAAgBAQABPyGv8y5t4dGPMdiFtHehVzwWVR//2gAMAwEAAgADAAAAEO8//8QAFREBAQAAAAAAAAAAAAAAAAAAARD/2gAIAQMBAT8QJ//EABURAQEAAAAAAAAAAAAAAAAAAAAR/9oACAECAQE/EEf/xAAcEAEBAAICAwAAAAAAAAAAAAABEQAhkbExUXH/2gAIAQEAAT8Qu7DAtZjZJv7hFtCrHs4wBVDIs4wGBv0DrLohuec//9k='); background-size: cover; display: block;" Err codemadness.org 70 i 3690 ></span> Err codemadness.org 70 i 3691 <img Err codemadness.org 70 i 3692 class="gatsby-resp-image-image" Err codemadness.org 70 i 3693 alt="Double Apple Logo" Err codemadness.org 70 i 3694 title="Double Apple Logo" Err codemadness.org 70 i 3695 src="/static/897f92f522ae024f5885a11e7d7cf7c4/6aca1/doubleapple.jpg" Err codemadness.org 70 i 3696 srcset="/static/897f92f522ae024f5885a11e7d7cf7c4/d2f63/doubleapple.jpg 163w, Err codemadness.org 70 i 3697 /static/897f92f522ae024f5885a11e7d7cf7c4/c989d/doubleapple.jpg 325w, Err codemadness.org 70 i 3698 /static/897f92f522ae024f5885a11e7d7cf7c4/6aca1/doubleapple.jpg 650w, Err codemadness.org 70 i 3699 /static/897f92f522ae024f5885a11e7d7cf7c4/7c09c/doubleapple.jpg 975w, Err codemadness.org 70 i 3700 /static/897f92f522ae024f5885a11e7d7cf7c4/01ab0/doubleapple.jpg 1300w, Err codemadness.org 70 i 3701 /static/897f92f522ae024f5885a11e7d7cf7c4/e1596/doubleapple.jpg 2048w" Err codemadness.org 70 i 3702 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 3703 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 3704 loading="lazy" Err codemadness.org 70 i 3705 /> Err codemadness.org 70 i 3706 </span></p> Err codemadness.org 70 i 3707 <p><span Err codemadness.org 70 i 3708 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 3709 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 3710 > Err codemadness.org 70 i 3711 <span Err codemadness.org 70 i 3712 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 3713 style="padding-bottom: 133.12883435582822%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAQBAgP/xAAVAQEBAAAAAAAAAAAAAAAAAAABAv/aAAwDAQACEAMQAAABgomth5Th4zVR4Bf/xAAfEAACAgIBBQAAAAAAAAAAAAAAAgEDERMSFCEiMUH/2gAIAQEAAQUCos4NZK2N1SwVp3wayW1kv45k9nyT/8QAFhEBAQEAAAAAAAAAAAAAAAAAABEQ/9oACAEDAQE/Acqv/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAHhAAAwABBAMAAAAAAAAAAAAAAAERMRIgITJCUXH/2gAIAQEABj8C9or1JIis+HORdTxMVss2/wD/xAAcEAEAAgMBAQEAAAAAAAAAAAABABEhMUFRYYH/2gAIAQEAAT8harbyfMQVKYtBRCGbDkVXXTEK4MRZQLWKi7ep4H5H1mLpyYM//9oADAMBAAIAAwAAABCv/Mz/xAAYEQADAQEAAAAAAAAAAAAAAAAAAREQIf/aAAgBAwEBPxBPkZXmj//EABgRAAMBAQAAAAAAAAAAAAAAAAABERAh/9oACAECAQE/EHx1ERM//8QAHxABAAIBBAMBAAAAAAAAAAAAAQAhETFBUYFhcaGR/9oACAEBAAE/EHmSBV1ez7h9iChcY78ymetR9YTwvQi3QLNDj0c9xmXZ0Fr6QbQju/HUGmQX6mW8A3lt4gBXtGbaWE0BpP/Z'); background-size: cover; display: block;" Err codemadness.org 70 i 3714 ></span> Err codemadness.org 70 i 3715 <img Err codemadness.org 70 i 3716 class="gatsby-resp-image-image" Err codemadness.org 70 i 3717 alt="memory" Err codemadness.org 70 i 3718 title="memory" Err codemadness.org 70 i 3719 src="/static/eb0b872444e58dcdd1b61ac711cac061/6aca1/memory.jpg" Err codemadness.org 70 i 3720 srcset="/static/eb0b872444e58dcdd1b61ac711cac061/d2f63/memory.jpg 163w, Err codemadness.org 70 i 3721 /static/eb0b872444e58dcdd1b61ac711cac061/c989d/memory.jpg 325w, Err codemadness.org 70 i 3722 /static/eb0b872444e58dcdd1b61ac711cac061/6aca1/memory.jpg 650w, Err codemadness.org 70 i 3723 /static/eb0b872444e58dcdd1b61ac711cac061/7c09c/memory.jpg 975w, Err codemadness.org 70 i 3724 /static/eb0b872444e58dcdd1b61ac711cac061/01ab0/memory.jpg 1300w, Err codemadness.org 70 i 3725 /static/eb0b872444e58dcdd1b61ac711cac061/ac99c/memory.jpg 1536w" Err codemadness.org 70 i 3726 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 3727 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 3728 loading="lazy" Err codemadness.org 70 i 3729 /> Err codemadness.org 70 i 3730 </span></p> Err codemadness.org 70 i 3731 <h4>Footnotes</h4> Err codemadness.org 70 i 3732 <ol> Err codemadness.org 70 i 3733 <li>For the uninitiated, I suggest starting with Part 1 of The 8-Bit Guy's masterful two series: <a href="https://www.youtube.com/watch?v=A_vpfBJZ7JI">Restoration - The Worst VIC-20 I've ever seen - Part 1</a>. I don't know why I like watching this man clean and restore old computers so much, but there it is - I just do.</li> Err codemadness.org 70 i 3734 </ol><![CDATA[Mindstorms]]>https://www.charlieharrington.com/mindstormshttps://www.charlieharrington.com/mindstormsSun, 03 May 2020 00:00:00 GMT<p><a href="https://www.amazon.com/gp/product/0465046746/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=0465046746&#x26;linkId=2949aefc36d4bd9d9f632170d2ac23de">Mindstorms</a> by Seymour Papert is a book written in 1980 about how children can learn with computers - and learn to fall in love with learning along the way.</p> Err codemadness.org 70 i 3735 <p>I read <a href="https://www.amazon.com/gp/product/0465046746/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=0465046746&#x26;linkId=2949aefc36d4bd9d9f632170d2ac23de">Mindstorms</a>, and fell in love with the book. My own mind was besieged, stormed, and ultimately broken - only to be reforged anew like Andúril from the shards of Narsil (sorry, I'm re-reading Lord of the Rings right now). This post, after this short-I-promise expository intro, contains my book notes.</p> Err codemadness.org 70 i 3736 <p>You may have heard of Papert's LOGO programming language before, which issues commands to an adorable round robot called a Turtle. Papert designed LOGO and the Turtle in the late 1960s to help children learn how to learn with computers. Here's a photo of Papert and his robotic operating buddy:</p> Err codemadness.org 70 i 3737 <p><span Err codemadness.org 70 i 3738 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 3739 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 600px; " Err codemadness.org 70 i 3740 > Err codemadness.org 70 i 3741 <a Err codemadness.org 70 i 3742 class="gatsby-resp-image-link" Err codemadness.org 70 i 3743 href="/static/6abfec0f92eaf2f9ebb7ef9d2fd262e4/b4294/papert.jpg" Err codemadness.org 70 i 3744 style="display: block" Err codemadness.org 70 i 3745 target="_blank" Err codemadness.org 70 i 3746 rel="noopener" Err codemadness.org 70 i 3747 > Err codemadness.org 70 i 3748 <span Err codemadness.org 70 i 3749 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 3750 style="padding-bottom: 138.03680981595093%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAcABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAMFBAL/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIQAxAAAAGmt2M0DwXLt8AND//EABwQAAICAwEBAAAAAAAAAAAAAAECAAMREiIQIf/aAAgBAQABBQK3iDqAS9dq6dg0duBZ2v1Sozjz/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAHBAAAQQDAQAAAAAAAAAAAAAAEQABECESQVGh/9oACAEBAAY/AjqXZPkLi2viPiKIn//EABsQAQEBAQEAAwAAAAAAAAAAAAEAEUFRITFx/9oACAEBAAE/IVhppUl9vm7HjflJhZMdbhvoDXxPLGPknosbF//aAAwDAQACAAMAAAAQwwkA/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPxAf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPxAf/8QAHRABAAMBAAIDAAAAAAAAAAAAAQARITFRcUFhkf/aAAgBAQABPxDQAHb+NiFAGVWj9wZ7+JXBqtOCMDjVArmbcBUb1JW2gL/WceBoVVfXmXckNtxiFhrVyu4bABk//9k='); background-size: cover; display: block;" Err codemadness.org 70 i 3751 ></span> Err codemadness.org 70 i 3752 <img Err codemadness.org 70 i 3753 class="gatsby-resp-image-image" Err codemadness.org 70 i 3754 alt="Papert" Err codemadness.org 70 i 3755 title="Papert" Err codemadness.org 70 i 3756 src="/static/6abfec0f92eaf2f9ebb7ef9d2fd262e4/b4294/papert.jpg" Err codemadness.org 70 i 3757 srcset="/static/6abfec0f92eaf2f9ebb7ef9d2fd262e4/d2f63/papert.jpg 163w, Err codemadness.org 70 i 3758 /static/6abfec0f92eaf2f9ebb7ef9d2fd262e4/c989d/papert.jpg 325w, Err codemadness.org 70 i 3759 /static/6abfec0f92eaf2f9ebb7ef9d2fd262e4/b4294/papert.jpg 600w" Err codemadness.org 70 i 3760 sizes="(max-width: 600px) 100vw, 600px" Err codemadness.org 70 i 3761 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 3762 loading="lazy" Err codemadness.org 70 i 3763 /> Err codemadness.org 70 i 3764 </a> Err codemadness.org 70 i 3765 </span></p> Err codemadness.org 70 i 3766 <p>The popular Lego Mindstorms products are inspired by Papert and this book, along with many other cute robot learning toys for children, like <a href="/teaching-my-robot-with-tensorflow">my good friend Cozmo the Robot</a> or the insanely cute Cubetto from <a href="https://www.primotoys.com">Primo Toys</a>:</p> Err codemadness.org 70 i 3767 <p><span Err codemadness.org 70 i 3768 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 3769 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 3770 > Err codemadness.org 70 i 3771 <a Err codemadness.org 70 i 3772 class="gatsby-resp-image-link" Err codemadness.org 70 i 3773 href="/static/7baf9184b196f541a1ed9b85dbe992bf/f3a19/cubetto.png" Err codemadness.org 70 i 3774 style="display: block" Err codemadness.org 70 i 3775 target="_blank" Err codemadness.org 70 i 3776 rel="noopener" Err codemadness.org 70 i 3777 > Err codemadness.org 70 i 3778 <span Err codemadness.org 70 i 3779 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 3780 style="padding-bottom: 57.668711656441715%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAABYlAAAWJQFJUiTwAAAC5UlEQVQoz02T2U8TURTG+w/46IvPxkdfJcYYDA/GB43GGJVEXOqCEexiWzUalxBjopGIOxY0ajQii0rAog1la5iZTmmrVltQFjFoChVBYyoC8/PMAMaHLzdz597fnPOdb2xGxIMROWKJqBPiToz4aXIfGhjv18kkmsiqfn7pl5mJn+ePdpScdoKcfo4feoW8qwCL4cXQvdgM3XzwQI+Xn6ESeluuMpKKMJbsYlyrpT9QzYDSTObLV94k3zHR285kb6tI3sfrSEVqyEXLBOqyoDYj6mFWE2DiKEO1B3AVbMCTv47bZZdQ3g6SiCXIDKepqbpBe/AluYEwY+87yCY7SMWeUdl0kyntmsAcCxV6BSjtxtx8fbYX56p89i9bzu6CXbTUP6Hn6T3Kz5yjeOUS7ly5xM8BVWCtZN62kn3fSbDqMrFQNQjHtM1mCMxQxTvdwffGPTjyVrB9yVIK89fSUe0h5Xfj2rKN0rxFePYWMZpWGU0EGEl3km14QFv9LaKpFmn5rACdCx6aUBfT4cN8vr+NgG8D108VozZVoDw6ySHHJo6vWUy5fTWvw0GmP4YYS3fzsTsE74IMJ6P0hW6AWmJ6aE7Hx6wMJtTmY0YXc9VTZNSHDHc+pC9wgfCVjfReK2DIv5bHd/10BZsJN1TSfP8iz/0nqbvqYLDhoDUYGz3iX4/LmnROcVmVjjYe5NOTUj49spO6tZXvdUXQZoeuQ6RriwlUbCVevZm+mkKGGncy3b5PYE6LYcsqZURbK8VDAZvD0VxMBuwk7+wgXL5JtJ5MfSEoJXJGZBYQl1S89pGNnSAk3RCd69AaylTkGBPdsjmfRyuTcvh3ZwnfXtiZ6pBWtFL+KB60V1X8VuSy5mZGFd9ltTT/Y1hAE4Tu/pd0QzI51Vwqez6p5Jh8fS4OM5qXkfYyAcl5E6KasCNz+h9oQUyYWZ1cnu128+N6kazipz5fhVzGlHZYVvFKkZiZfi9Idf/TX7NY6afiyboeAAAAAElFTkSuQmCC'); background-size: cover; display: block;" Err codemadness.org 70 i 3781 ></span> Err codemadness.org 70 i 3782 <img Err codemadness.org 70 i 3783 class="gatsby-resp-image-image" Err codemadness.org 70 i 3784 alt="Cubetto" Err codemadness.org 70 i 3785 title="Cubetto" Err codemadness.org 70 i 3786 src="/static/7baf9184b196f541a1ed9b85dbe992bf/a6d36/cubetto.png" Err codemadness.org 70 i 3787 srcset="/static/7baf9184b196f541a1ed9b85dbe992bf/222b7/cubetto.png 163w, Err codemadness.org 70 i 3788 /static/7baf9184b196f541a1ed9b85dbe992bf/ff46a/cubetto.png 325w, Err codemadness.org 70 i 3789 /static/7baf9184b196f541a1ed9b85dbe992bf/a6d36/cubetto.png 650w, Err codemadness.org 70 i 3790 /static/7baf9184b196f541a1ed9b85dbe992bf/e548f/cubetto.png 975w, Err codemadness.org 70 i 3791 /static/7baf9184b196f541a1ed9b85dbe992bf/f3a19/cubetto.png 1086w" Err codemadness.org 70 i 3792 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 3793 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 3794 loading="lazy" Err codemadness.org 70 i 3795 /> Err codemadness.org 70 i 3796 </a> Err codemadness.org 70 i 3797 </span></p> Err codemadness.org 70 i 3798 <p>When you conjure up an image of "learning with computers", you might think of a rote "quiz app" or "flashcard app" - but Papert suggests that it can be more -- more creative, more exploratory, more fun, and longer-lasting. I think about how I took Calc AB and Calc BC in high school, and I was pretty good at them, too, but I had no idea what I was really doing. I knew the mechanics, not the meaning. When Papert connects teaching the Turtle to move in a cirle and the principals of differential calculus -- measuring growth by movement at the growing tip -- all I can say is 🤯.</p> Err codemadness.org 70 i 3799 <p>There's obviously also a reference to George Polya in here, too - always a good sign! </p> Err codemadness.org 70 i 3800 <p>And now, onto the notes!</p> Err codemadness.org 70 i 3801 <h3>Learning with computers</h3> Err codemadness.org 70 i 3802 <ul> Err codemadness.org 70 i 3803 <li><strong>Bricolage</strong>: creation from diverse range of things</li> Err codemadness.org 70 i 3804 <li> Err codemadness.org 70 i 3805 <p>Computers have the power to <strong>simulate</strong>. They can take 1000 forms and serve 1000 functions</p> Err codemadness.org 70 i 3806 <ul> Err codemadness.org 70 i 3807 <li>Flexible enough so children can each create with them</li> Err codemadness.org 70 i 3808 <li>Flexible enough to model the world</li> Err codemadness.org 70 i 3809 </ul> Err codemadness.org 70 i 3810 </li> Err codemadness.org 70 i 3811 <li>Remember: people seldom get things right on the first try</li> Err codemadness.org 70 i 3812 <li> Err codemadness.org 70 i 3813 <p>He is not recommending "computer-aided instruction" - like a quiz app</p> Err codemadness.org 70 i 3814 <ul> Err codemadness.org 70 i 3815 <li>Instead, he envisions the child programming the computer!</li> Err codemadness.org 70 i 3816 </ul> Err codemadness.org 70 i 3817 </li> Err codemadness.org 70 i 3818 <li>Learning to program can be a natural process like language acquisition</li> Err codemadness.org 70 i 3819 <li>Learning to communicate with a computer can change the ways we learn other things</li> Err codemadness.org 70 i 3820 <li> Err codemadness.org 70 i 3821 <p><strong>Jean Piaget</strong></p> Err codemadness.org 70 i 3822 <ul> Err codemadness.org 70 i 3823 <li>Papert's mentor / teacher</li> Err codemadness.org 70 i 3824 <li>"Learning without being taught" is perhaps Piaget's main idea</li> Err codemadness.org 70 i 3825 <li>Piaget says that children build their own intellectual structures, models, and then evolve them over time when proven false</li> Err codemadness.org 70 i 3826 <li>Children do thise all without being <em>taught</em></li> Err codemadness.org 70 i 3827 <li>"Child as builder"</li> Err codemadness.org 70 i 3828 </ul> Err codemadness.org 70 i 3829 </li> Err codemadness.org 70 i 3830 </ul> Err codemadness.org 70 i 3831 <h3>Mathophobia</h3> Err codemadness.org 70 i 3832 <ul> Err codemadness.org 70 i 3833 <li>Mathophobia is endemic. To this day, if we see math, we avoid it.</li> Err codemadness.org 70 i 3834 <li>But we often have no trouble with math knowledge if we don't perceive it as "math"</li> Err codemadness.org 70 i 3835 <li> Err codemadness.org 70 i 3836 <p>People's images of themselves as learners is contaminated by mathophobia</p> Err codemadness.org 70 i 3837 <ul> Err codemadness.org 70 i 3838 <li>"I'm not a math person"</li> Err codemadness.org 70 i 3839 <li>"I'm not artistic"</li> Err codemadness.org 70 i 3840 <li>"I'm not musical"</li> Err codemadness.org 70 i 3841 <li>As you can see, it dangerously spreads to other disciplines... "not an X person"</li> Err codemadness.org 70 i 3842 </ul> Err codemadness.org 70 i 3843 </li> Err codemadness.org 70 i 3844 <li>Mathophobia leads to insecurity and self-imposed restrictions, rather than a child's instinctive free exploration of the world</li> Err codemadness.org 70 i 3845 <li>However, the computer can be a carrier of cultural germs and seeds whos intellectual products won't need a computer once they can take root in actively growing mind</li> Err codemadness.org 70 i 3846 </ul> Err codemadness.org 70 i 3847 <h3>The Turtle</h3> Err codemadness.org 70 i 3848 <ul> Err codemadness.org 70 i 3849 <li>"Body knowledge" - useful to think about things in relation to your body. Children do this instinctively</li> Err codemadness.org 70 i 3850 <li> Err codemadness.org 70 i 3851 <p>Children need an "object to think with"</p> Err codemadness.org 70 i 3852 <ul> Err codemadness.org 70 i 3853 <li>This object is "the Turtle"</li> Err codemadness.org 70 i 3854 </ul> Err codemadness.org 70 i 3855 </li> Err codemadness.org 70 i 3856 <li>The Turtle is not a panacea, just a model for other objects not yet invented by the child</li> Err codemadness.org 70 i 3857 <li>LOGO programming language is how children communicate with the Turtle</li> Err codemadness.org 70 i 3858 <li>The Turtle serves no purpose other than being good to program and good to think with</li> Err codemadness.org 70 i 3859 <li> Err codemadness.org 70 i 3860 <p>Example LOGO commands</p> Err codemadness.org 70 i 3861 <ul> Err codemadness.org 70 i 3862 <li>FORWARD 100</li> Err codemadness.org 70 i 3863 <li>PENDOWN</li> Err codemadness.org 70 i 3864 <li>RIGHT 90</li> Err codemadness.org 70 i 3865 <li>PENUP</li> Err codemadness.org 70 i 3866 </ul> Err codemadness.org 70 i 3867 </li> Err codemadness.org 70 i 3868 <li>The idea of programming is done through the metaphor of teaching the Turtle a new word, like SQUARE or TRIANGLE</li> Err codemadness.org 70 i 3869 <li>This is obviously fun, but also powerful learning is happening</li> Err codemadness.org 70 i 3870 <li>Like other builders, children appropriate to their own use materials they find around them, mostly importantly the models and metaphors suggested by surrounding culture</li> Err codemadness.org 70 i 3871 <li>Active, self-directed, recognizable personal purpose, source of power, doing something with knowledge --> all reasons to prefer using LOGO over watching educational programming on TV</li> Err codemadness.org 70 i 3872 <li>Importance of learning systematic procedures and debugging them</li> Err codemadness.org 70 i 3873 <li>Learning to be a master programmer is learning to become highly skilled at isolating and fixing bugs</li> Err codemadness.org 70 i 3874 <li>Programs are not WRONG or RIGHT -> but they are fixable</li> Err codemadness.org 70 i 3875 <li>Deliberately thinking like a computer is extremely valuable (step by step, literal, mechanical). Thinking like a computer is just one "style of thinking", and helps students understand that there are different ways of thinking.</li> Err codemadness.org 70 i 3876 <li>Computers are not something that "rots our brains"</li> Err codemadness.org 70 i 3877 </ul> Err codemadness.org 70 i 3878 <h3>Teaching without curriculum</h3> Err codemadness.org 70 i 3879 <ul> Err codemadness.org 70 i 3880 <li>Doesn't mean free-form, spontaneous classrooms or simply "leaving the child alone"</li> Err codemadness.org 70 i 3881 <li> Err codemadness.org 70 i 3882 <p>Teaching without curriculum means supporting children as they build their own intellectual structures</p> Err codemadness.org 70 i 3883 <ul> Err codemadness.org 70 i 3884 <li>Planting new constructive elements</li> Err codemadness.org 70 i 3885 <li>Eliminating noxious ones</li> Err codemadness.org 70 i 3886 </ul> Err codemadness.org 70 i 3887 </li> Err codemadness.org 70 i 3888 <li>This is an ambitious task, and harder that a mere curriculum change</li> Err codemadness.org 70 i 3889 <li>Educators should be anthropologists and work with the cultural materials of the time</li> Err codemadness.org 70 i 3890 <li>He doesn't recommend BASIC as a learning language</li> Err codemadness.org 70 i 3891 <li> Err codemadness.org 70 i 3892 <p>BASIC is to computation what QWERTY is to typing</p> Err codemadness.org 70 i 3893 <ul> Err codemadness.org 70 i 3894 <li>People say BASIC is easy to learn because of its small vocabulary, but that just gets extremely clunky when working on something more than just a toy problem</li> Err codemadness.org 70 i 3895 </ul> Err codemadness.org 70 i 3896 </li> Err codemadness.org 70 i 3897 </ul> Err codemadness.org 70 i 3898 <h3>Why is it hard to change education</h3> Err codemadness.org 70 i 3899 <ul> Err codemadness.org 70 i 3900 <li> Err codemadness.org 70 i 3901 <p>Radical change is possible, directly tied to the impact of the computer</p> Err codemadness.org 70 i 3902 <ul> Err codemadness.org 70 i 3903 <li>Unfortunately, conservatism in the world of education is a self-perpetuating social phenomenon</li> Err codemadness.org 70 i 3904 <li>But as individuals get computers, education can become a private act, an open marketplace, a Renaissance of thinking about education</li> Err codemadness.org 70 i 3905 </ul> Err codemadness.org 70 i 3906 </li> Err codemadness.org 70 i 3907 <li> Err codemadness.org 70 i 3908 <p>Our culture has unneeded split between "humanities" and "science"</p> Err codemadness.org 70 i 3909 <ul> Err codemadness.org 70 i 3910 <li>But Plato was both</li> Err codemadness.org 70 i 3911 </ul> Err codemadness.org 70 i 3912 </li> Err codemadness.org 70 i 3913 <li>Computer can break down this line</li> Err codemadness.org 70 i 3914 <li> Err codemadness.org 70 i 3915 <p>"Math" just means "learning" in Greek</p> Err codemadness.org 70 i 3916 <ul> Err codemadness.org 70 i 3917 <li>e.g. "polymath" is a person of many learnings</li> Err codemadness.org 70 i 3918 <li>"Mathetic" means "having to do with "learning"</li> Err codemadness.org 70 i 3919 </ul> Err codemadness.org 70 i 3920 </li> Err codemadness.org 70 i 3921 <li>Children begin their lives as eager and competant learners. They have to learn to have trouble with learning in general and mathematics in particular</li> Err codemadness.org 70 i 3922 <li> Err codemadness.org 70 i 3923 <p>Conservation of liquids example from Piaget</p> Err codemadness.org 70 i 3924 <ul> Err codemadness.org 70 i 3925 <li>Children take a while to learn this principle</li> Err codemadness.org 70 i 3926 <li>They have their own coherent world view (taller glass must have more liquid)</li> Err codemadness.org 70 i 3927 <li>This model was spontaneously developed by them</li> Err codemadness.org 70 i 3928 </ul> Err codemadness.org 70 i 3929 </li> Err codemadness.org 70 i 3930 <li>Mathophobia limit's people's lives. Deficiency becomes part of their identity. It is a self-reinforcing taboo</li> Err codemadness.org 70 i 3931 <li>"Cchool math" is not the same as "mathematics"</li> Err codemadness.org 70 i 3932 </ul> Err codemadness.org 70 i 3933 <h3>Turtle geometry</h3> Err codemadness.org 70 i 3934 <ul> Err codemadness.org 70 i 3935 <li> Err codemadness.org 70 i 3936 <p>There are multiple types of geometry</p> Err codemadness.org 70 i 3937 <ul> Err codemadness.org 70 i 3938 <li>Turtle geometry = computational (tracks Position and Heading of the Turtle)</li> Err codemadness.org 70 i 3939 <li>Euclidean geometry = logical (tracks Position and Point)</li> Err codemadness.org 70 i 3940 <li>Descartes geometry = algebraic</li> Err codemadness.org 70 i 3941 </ul> Err codemadness.org 70 i 3942 </li> Err codemadness.org 70 i 3943 <li> Err codemadness.org 70 i 3944 <p>Geometry arises when child asks "How can I make the Turtle draw a circle?"</p> Err codemadness.org 70 i 3945 <ul> Err codemadness.org 70 i 3946 <li>A good teacher doesn't answer the question, but encourages the student to act it out. Literally, to have the child "play Turtle" themselves. What steps do they take to move in a circle?</li> Err codemadness.org 70 i 3947 </ul> Err codemadness.org 70 i 3948 </li> Err codemadness.org 70 i 3949 <li>Learning to "program computers" is done by teaching the Turtle a new word (aka subroutine / function) like CIRCLE, SQUARE, TRIANGLE</li> Err codemadness.org 70 i 3950 <li>Along the way, students learn about <strong>modularity</strong> and <strong>state</strong></li> Err codemadness.org 70 i 3951 <li>Don't forget the error - instead study the bugs!</li> Err codemadness.org 70 i 3952 <li>Try to make sense of what you want to learn</li> Err codemadness.org 70 i 3953 <li> Err codemadness.org 70 i 3954 <p><strong>Syntonic learning</strong></p> Err codemadness.org 70 i 3955 <ul> Err codemadness.org 70 i 3956 <li>The Turtle is body syntonic - firmly related to child's sense and knowledge about their own bodies</li> Err codemadness.org 70 i 3957 <li>Also is "ego syntonic" - the Turtle is coherent with child's sense of themselves with things like (e.g. intentions, goals, desires, dislikes)</li> Err codemadness.org 70 i 3958 </ul> Err codemadness.org 70 i 3959 </li> Err codemadness.org 70 i 3960 <li>Turtle geometry is learnable because it is syntonic.</li> Err codemadness.org 70 i 3961 <li>Turtle geometry encourages deliberate use of problem-solving</li> Err codemadness.org 70 i 3962 <li> Err codemadness.org 70 i 3963 <p><strong>George Polya</strong></p> Err codemadness.org 70 i 3964 <ul> Err codemadness.org 70 i 3965 <li>Came up with a general method for problem solving</li> Err codemadness.org 70 i 3966 <li>Turtle geometry lends itself well to Polya's methods (e.g. "look for something like it")</li> Err codemadness.org 70 i 3967 <li>Turtle geometry is great for learning heuristic thinking</li> Err codemadness.org 70 i 3968 </ul> Err codemadness.org 70 i 3969 </li> Err codemadness.org 70 i 3970 <li>Disassociative learning is something like memorizing the multiplication tables</li> Err codemadness.org 70 i 3971 <li> Err codemadness.org 70 i 3972 <p>Bill, a fifth grader, suggests this unfortunate way to learn multiplication tables</p> Err codemadness.org 70 i 3973 <ul> Err codemadness.org 70 i 3974 <li>"Make your mind a blank and saying it over and over until you know it"</li> Err codemadness.org 70 i 3975 </ul> Err codemadness.org 70 i 3976 </li> Err codemadness.org 70 i 3977 <li>Turtle geometry on the other hand has rhythm, movement, navigational knowledger</li> Err codemadness.org 70 i 3978 <li> Err codemadness.org 70 i 3979 <p>Differential Calculus</p> Err codemadness.org 70 i 3980 <ul> Err codemadness.org 70 i 3981 <li>Differential calculus is ability to describe growth by what is happening at the growing tip</li> Err codemadness.org 70 i 3982 <li>Newton modeled the motions of the planets with it</li> Err codemadness.org 70 i 3983 <li>The Turtle's circle program ( FORWARD 1, RIGHTTURN 1) is a set of DIFFERENTIAL instructions!</li> Err codemadness.org 70 i 3984 </ul> Err codemadness.org 70 i 3985 </li> Err codemadness.org 70 i 3986 <li> Err codemadness.org 70 i 3987 <p>Many students come to Turtle geometry hating numbers as alien concepts, and leave it loving them. For example, angles.</p> Err codemadness.org 70 i 3988 <ul> Err codemadness.org 70 i 3989 <li>Turtle geometry shows students that angles have body syntoncity with compass navigation. The Turtle parallels this</li> Err codemadness.org 70 i 3990 </ul> Err codemadness.org 70 i 3991 </li> Err codemadness.org 70 i 3992 <li>Idea of a "variable" in programming: using a symbol to name an unknown entity</li> Err codemadness.org 70 i 3993 <li> Err codemadness.org 70 i 3994 <p>Idea of "recursion" in programming: a never ending process.</p> Err codemadness.org 70 i 3995 <ul> Err codemadness.org 70 i 3996 <li>Kids already love the idea / fantasy of something "going on forever" (with 2 wishes, always use the second wish to wish for two more wishes!)3</li> Err codemadness.org 70 i 3997 </ul> Err codemadness.org 70 i 3998 </li> Err codemadness.org 70 i 3999 <li> Err codemadness.org 70 i 4000 <p>The Total Turtle Trip Theorem</p> Err codemadness.org 70 i 4001 <ul> Err codemadness.org 70 i 4002 <li>If a Turtle tasks a trip around the boundaries of any area and ends up in the state in which it started (direction and place), then the sum of all the turns will be 360 degrees</li> Err codemadness.org 70 i 4003 </ul> Err codemadness.org 70 i 4004 </li> Err codemadness.org 70 i 4005 <li>One learns to enjoy and to respect the power of powerful ideas. One learns that the most powerful idea is the idea of powerful ideas.</li> Err codemadness.org 70 i 4006 <li>Computers can influence the language we use to talk about ourselves (e.g. input, output, feedback)</li> Err codemadness.org 70 i 4007 </ul> Err codemadness.org 70 i 4008 <h3>Structure programming</h3> Err codemadness.org 70 i 4009 <ul> Err codemadness.org 70 i 4010 <li>Learn to write subprocedures, aka "mind-sized bites"</li> Err codemadness.org 70 i 4011 <li>It's possible to build a large intellectual system without ever making a step that cannot be comprehended, using hierachy of subprocedures</li> Err codemadness.org 70 i 4012 <li>Example of teaching the Turtle to draw a person can use multiple subprocedures, each of which is easily understood</li> Err codemadness.org 70 i 4013 <li>Computers give enough flexibility and power so that child's exploration can be genuine and their own</li> Err codemadness.org 70 i 4014 <li>"Brute force" would be trying to have the Turtle draw the person without any subprocedures - the straight line approach.</li> Err codemadness.org 70 i 4015 <li>Brute force with no internal structure is not a good model for computer programming</li> Err codemadness.org 70 i 4016 <li>For example, in real life, juggling is actually composed of many subroutines</li> Err codemadness.org 70 i 4017 <li>Introduces notion of timing: Err codemadness.org 70 i 4018 `* parallel processes vs serial processes</li> Err codemadness.org 70 i 4019 <li>Introduce notion of condition logic with The "WHEN demon"</li> Err codemadness.org 70 i 4020 <li>"When something happens, the demon pounces out and does its own action"</li> Err codemadness.org 70 i 4021 </ul> Err codemadness.org 70 i 4022 <h3>Debugging</h3> Err codemadness.org 70 i 4023 <ul> Err codemadness.org 70 i 4024 <li>Children seem to have a resistance to debugging</li> Err codemadness.org 70 i 4025 <li>They would rather "throw it out" and start over</li> Err codemadness.org 70 i 4026 <li>Seemingly, they want to do it correctly in one shot</li> Err codemadness.org 70 i 4027 <li>We can empathize, because a bug seems like WRONG or MISTAKE or BAG</li> Err codemadness.org 70 i 4028 <li>Kids like that computers can remove any trace of their errors</li> Err codemadness.org 70 i 4029 <li>But errors and debugging are good!</li> Err codemadness.org 70 i 4030 <li>We must learn to study what happened and understand what went wrong. Through that understanding, we can fix the bug.</li> Err codemadness.org 70 i 4031 <li>Computers will help children "believe in" debugging</li> Err codemadness.org 70 i 4032 <li>Contact with LOGO and the Turtle eventually, gradually, underminds the long-standing resistance to debugging and subprocedures</li> Err codemadness.org 70 i 4033 <li>With LOGO, the teacher is also a learner, and everyone makes mistakes</li> Err codemadness.org 70 i 4034 <li>Children know when teacher "fakes it" with "let's try this one together" - they see right through this.</li> Err codemadness.org 70 i 4035 <li>But LOGO makes that situation feel genuine, because the teacher is trying to figure it out, too, and they make mistakes together</li> Err codemadness.org 70 i 4036 <li>Real intellectual collaboration - together they try to understand the computer and get it to do what they want</li> Err codemadness.org 70 i 4037 <li>Affirmation of the power of ideas and the power of the mind!</li> Err codemadness.org 70 i 4038 </ul><![CDATA[Writer's Bane]]>https://www.charlieharrington.com/writer's-banehttps://www.charlieharrington.com/writer's-baneSun, 26 Apr 2020 00:00:00 GMT<p>That's right, it's a post about writing advice.</p> Err codemadness.org 70 i 4039 <p>Not from me! Goodness, no.</p> Err codemadness.org 70 i 4040 <p>Instead, here's a compendium of books and other odd bits that I've found helpful in my quest. I'll keep this updated when I encounter something new and useful and surprising.</p> Err codemadness.org 70 i 4041 <p>I hope this guide proves useful when you're looking to read about how to write instead of just sitting down and doing the deed.</p> Err codemadness.org 70 i 4042 <h2>Books</h2> Err codemadness.org 70 i 4043 <ul> Err codemadness.org 70 i 4044 <li><strong><a href="https://www.amazon.com/gp/product/1607748894/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=1607748894&#x26;linkId=964c14964dbe0dc13bcfacb3a3594f85">Story Genius</a> - Lisa Cron</strong>: Learn how to write a riveting story using <em>brain science</em> - make sure to bring a pen and a notebook along for the ride!</li> Err codemadness.org 70 i 4045 <li><strong><a href="https://www.amazon.com/gp/product/1439156816/ref=as_li_tl?ie=UTF8&#x26;camp=1789&#x26;creative=9325&#x26;creativeASIN=1439156816&#x26;linkCode=as2&#x26;tag=whatrocks09-20&#x26;linkId=dc4290e47818db79d2fa6b284f9f3e1b">On Writing</a> - Stephen King</strong>: King's biographical guidebook to his craft.</li> Err codemadness.org 70 i 4046 <li><strong><a href="https://www.amazon.com/gp/product/0385480016/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=0385480016&#x26;linkId=3cb65bd21cb9764f04be702fe152c1ff">Bird by Bird</a> - Anne Lamott</strong>: The best advice you'll get about life and writing.</li> Err codemadness.org 70 i 4047 <li><strong><a href="https://www.amazon.com/gp/product/1877741094/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=1877741094&#x26;linkId=e40ad924992964aff49708d25cd7fed0">Zen in the Art of Writing</a> - Ray Bradbury</strong>: How to delight in the joy of BEING ALIVE and also write about it.</li> Err codemadness.org 70 i 4048 <li><strong><a href="https://amzn.to/2IWZ1B3">Draft No. 4</a> - John McPhee</strong>: The master of creative nonfiction gives you a glimpse behind the curtain, and it's mostly 3x5 note cards and some strange vintage word processing software.</li> Err codemadness.org 70 i 4049 <li><strong><a href="https://www.amazon.com/gp/product/020530902X/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=020530902X&#x26;linkId=d79e4ea383d10042e72b29d316802112">The Elements of Style</a> - Strunk and White</strong>: Don't throw this out after high school English. It's tiny. Keep it in the bathroom. Don't tell anyone.</li> Err codemadness.org 70 i 4050 </ul> Err codemadness.org 70 i 4051 <h2>Podcasts</h2> Err codemadness.org 70 i 4052 <ul> Err codemadness.org 70 i 4053 <li><strong><a href="https://www.askthebards.com/">Ask the Bards</a> - Delilah S. Dawson and Kevin Hearne</strong>: A weekly Twitter Q+A with best buddies and writing partners. You'll want to be friends with them.</li> Err codemadness.org 70 i 4054 <li><strong><a href="https://podcasts.apple.com/us/podcast/launch/id1319436103?mt=2">Launch</a> - John August</strong>: What happens when a famous screenwriter and podcaster decides to write a middle grade children's novel called Arlo Finch? He records a charmed six-part podcast about the process of finding an agent, signing a deal, editing, visiting the book-binding factory, and then going on book-tour.</li> Err codemadness.org 70 i 4055 <li><strong><a href="https://johnaugust.com/scriptnotes">Scriptnotes</a> - John August and Craig Mazin</strong>: "A podcast about screenwriting and things that are interesting to screenwriters." This isn't exactly about writing books, but who cares. It's my favorite weekly podcast about an industry I don't work in. And also, "One Cool Thing."</li> Err codemadness.org 70 i 4056 </ul> Err codemadness.org 70 i 4057 <h2>Articles</h2> Err codemadness.org 70 i 4058 <ul> Err codemadness.org 70 i 4059 <li><strong><a href="http://terribleminds.com/ramble/2013/08/13/25-steps-to-being-a-traditionally-published-author-lazy-bastard-edition/">25 Steps to Being a Traditionally Published Author: Lazy Bastard Edition</a> - Delilah S. Dawson</strong>: If you're looking for a hilarious and possibly NSFW roadmap to seeing your book in an airport bookstore, look no further.</li> Err codemadness.org 70 i 4060 </ul> Err codemadness.org 70 i 4061 <h2>Newsletters</h2> Err codemadness.org 70 i 4062 <ul> Err codemadness.org 70 i 4063 <li><strong><a href="https://www.robinsloan.com/overworld/">The Perils of the Overworld - Robin Sloan</a></strong>: What happens when an engineer-author-olive-oil-maker makes a video game? He's not sure either. </li> Err codemadness.org 70 i 4064 </ul> Err codemadness.org 70 i 4065 <p><span Err codemadness.org 70 i 4066 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 4067 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 332px; " Err codemadness.org 70 i 4068 > Err codemadness.org 70 i 4069 <a Err codemadness.org 70 i 4070 class="gatsby-resp-image-link" Err codemadness.org 70 i 4071 href="/static/51db8e397a54c68f2f1d0c7a6e245409/71bac/durin.jpg" Err codemadness.org 70 i 4072 style="display: block" Err codemadness.org 70 i 4073 target="_blank" Err codemadness.org 70 i 4074 rel="noopener" Err codemadness.org 70 i 4075 > Err codemadness.org 70 i 4076 <span Err codemadness.org 70 i 4077 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 4078 style="padding-bottom: 135.58282208588957%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAIBBAUD/8QAFgEBAQEAAAAAAAAAAAAAAAAAAQID/9oADAMBAAIQAxAAAAGldzjPRCS5azmdhcgT/8QAHhAAAQQBBQAAAAAAAAAAAAAAAQACAxIhERMUIjH/2gAIAQEAAQUCheIzyS9E5jbYnq5N9m29UEDmxX//xAAVEQEBAAAAAAAAAAAAAAAAAAARIP/aAAgBAwEBPwFj/8QAFhEBAQEAAAAAAAAAAAAAAAAAAQIg/9oACAECAQE/AWBx/8QAGxAAAQQDAAAAAAAAAAAAAAAAAQAQESECEiD/2gAIAQEABj8Ck2jGIFPDjTn/xAAbEAEAAwEBAQEAAAAAAAAAAAABABEhMUFxYf/aAAgBAQABPyGgXxBZKLNusZTyLWNfs7vmM3yZH2VLvNuFp2Jieo39n//aAAwDAQACAAMAAAAQcMa8/8QAGBEAAwEBAAAAAAAAAAAAAAAAAAERECH/2gAIAQMBAT8QTqD6KTP/xAAXEQEBAQEAAAAAAAAAAAAAAAABABEx/9oACAECAQE/EGdewzZf/8QAHxABAAMAAQQDAAAAAAAAAAAAAQARIUExUWFxgZGh/9oACAEBAAE/ELO3SHfHSXZsOD7hMKX07QSDeri8lukN6P34lcBXqLhVRdhe1OutgAvhkM3exotMJQqHgn//2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 4079 ></span> Err codemadness.org 70 i 4080 <img Err codemadness.org 70 i 4081 class="gatsby-resp-image-image" Err codemadness.org 70 i 4082 alt="balrog" Err codemadness.org 70 i 4083 title="balrog" Err codemadness.org 70 i 4084 src="/static/51db8e397a54c68f2f1d0c7a6e245409/71bac/durin.jpg" Err codemadness.org 70 i 4085 srcset="/static/51db8e397a54c68f2f1d0c7a6e245409/d2f63/durin.jpg 163w, Err codemadness.org 70 i 4086 /static/51db8e397a54c68f2f1d0c7a6e245409/c989d/durin.jpg 325w, Err codemadness.org 70 i 4087 /static/51db8e397a54c68f2f1d0c7a6e245409/71bac/durin.jpg 332w" Err codemadness.org 70 i 4088 sizes="(max-width: 332px) 100vw, 332px" Err codemadness.org 70 i 4089 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 4090 loading="lazy" Err codemadness.org 70 i 4091 /> Err codemadness.org 70 i 4092 </a> Err codemadness.org 70 i 4093 </span></p> Err codemadness.org 70 i 4094 <blockquote> Err codemadness.org 70 i 4095 <p>"Write, you fools!" he cried, and was gone.</p> Err codemadness.org 70 i 4096 </blockquote><![CDATA[Notes on Nike Missile Site SF-88L]]>https://www.charlieharrington.com/notes-on-nike-missile-site-sf-88lhttps://www.charlieharrington.com/notes-on-nike-missile-site-sf-88lTue, 07 Apr 2020 00:00:00 GMT<p>Many, many days ago, when humans could still roam the Earth for non-essential activities, our little crew visited Nike Missile Site SF-88L as another destination in our <a href="/notes-on-map-and-compass-navigation">sixth grade class-trip</a> whistle-stop tour of nerdy places in the Bay Area.</p> Err codemadness.org 70 i 4097 <p><span Err codemadness.org 70 i 4098 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 4099 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 4100 > Err codemadness.org 70 i 4101 <a Err codemadness.org 70 i 4102 class="gatsby-resp-image-link" Err codemadness.org 70 i 4103 href="/static/1789e9ba45b720280866164b35c25854/d2602/site.jpg" Err codemadness.org 70 i 4104 style="display: block" Err codemadness.org 70 i 4105 target="_blank" Err codemadness.org 70 i 4106 rel="noopener" Err codemadness.org 70 i 4107 > Err codemadness.org 70 i 4108 <span Err codemadness.org 70 i 4109 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 4110 style="padding-bottom: 74.84662576687117%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAMCBAX/xAAWAQEBAQAAAAAAAAAAAAAAAAABAAL/2gAMAwEAAhADEAAAAXxprcaQkn//xAAcEAADAAEFAAAAAAAAAAAAAAAAAQIDERITISL/2gAIAQEAAQUC2w5Sxng04zuhTEL/xAAWEQADAAAAAAAAAAAAAAAAAAAAAhP/2gAIAQMBAT8BkpNT/8QAFxEAAwEAAAAAAAAAAAAAAAAAAAETAv/aAAgBAgEBPwGrK6P/xAAbEAACAwADAAAAAAAAAAAAAAAAAQIRIQMxMv/aAAgBAQAGPwK0z0dmPCUrVNlcms//xAAaEAADAQEBAQAAAAAAAAAAAAAAAREhMUFR/9oACAEBAAE/IV70VQxYtXVBy4Mtl6N0YzmkgL7n/9oADAMBAAIAAwAAABBLL//EABcRAAMBAAAAAAAAAAAAAAAAAAABIWH/2gAIAQMBAT8QhUbH/8QAFxEBAQEBAAAAAAAAAAAAAAAAAQAhYf/aAAgBAgEBPxAVy43/xAAcEAEAAgMBAQEAAAAAAAAAAAABETEAIUFRYYH/2gAIAQEAAT8QMIggQ0R3ItQdBHt5qi1+4stkCTE/UL7g3lSIkBWvPcK3IQWBorP/2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 4111 ></span> Err codemadness.org 70 i 4112 <img Err codemadness.org 70 i 4113 class="gatsby-resp-image-image" Err codemadness.org 70 i 4114 alt="site" Err codemadness.org 70 i 4115 title="site" Err codemadness.org 70 i 4116 src="/static/1789e9ba45b720280866164b35c25854/6aca1/site.jpg" Err codemadness.org 70 i 4117 srcset="/static/1789e9ba45b720280866164b35c25854/d2f63/site.jpg 163w, Err codemadness.org 70 i 4118 /static/1789e9ba45b720280866164b35c25854/c989d/site.jpg 325w, Err codemadness.org 70 i 4119 /static/1789e9ba45b720280866164b35c25854/6aca1/site.jpg 650w, Err codemadness.org 70 i 4120 /static/1789e9ba45b720280866164b35c25854/7c09c/site.jpg 975w, Err codemadness.org 70 i 4121 /static/1789e9ba45b720280866164b35c25854/01ab0/site.jpg 1300w, Err codemadness.org 70 i 4122 /static/1789e9ba45b720280866164b35c25854/d2602/site.jpg 4032w" Err codemadness.org 70 i 4123 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 4124 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 4125 loading="lazy" Err codemadness.org 70 i 4126 /> Err codemadness.org 70 i 4127 </a> Err codemadness.org 70 i 4128 </span></p> Err codemadness.org 70 i 4129 <p><a href="https://en.wikipedia.org/wiki/Nike_Missile_Site_SF-88">Nike Missile Site SF 88-L</a> is just over the Golden Gate Bridge in the Marin headlands (essentially behind Hawk Hill), so it's a short drive or hike or bike ride away from the city.</p> Err codemadness.org 70 i 4130 <p><span Err codemadness.org 70 i 4131 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 4132 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 4133 > Err codemadness.org 70 i 4134 <a Err codemadness.org 70 i 4135 class="gatsby-resp-image-link" Err codemadness.org 70 i 4136 href="/static/d115d74ea742126d2c24af84f36d45dd/d2602/radar.jpg" Err codemadness.org 70 i 4137 style="display: block" Err codemadness.org 70 i 4138 target="_blank" Err codemadness.org 70 i 4139 rel="noopener" Err codemadness.org 70 i 4140 > Err codemadness.org 70 i 4141 <span Err codemadness.org 70 i 4142 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 4143 style="padding-bottom: 50.306748466257666%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAKABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAIDAQT/xAAVAQEBAAAAAAAAAAAAAAAAAAACA//aAAwDAQACEAMQAAABbEjSXWVA/wD/xAAaEAACAgMAAAAAAAAAAAAAAAAAEgECAyFC/9oACAEBAAEFAkEgWpi3U5//xAAWEQADAAAAAAAAAAAAAAAAAAAAARP/2gAIAQMBAT8BmiaP/8QAGBEAAgMAAAAAAAAAAAAAAAAAAAECAxP/2gAIAQIBAT8BdzNpH//EABwQAAEDBQAAAAAAAAAAAAAAAAACAzEQESFScf/aAAgBAQAGPwLJJI5fWieH/8QAHBABAAICAwEAAAAAAAAAAAAAAQARMUEhUWHR/9oACAEBAAE/Ia30ieCw2mNVy9Q+yjDrP//aAAwDAQACAAMAAAAQ6O//xAAWEQEBAQAAAAAAAAAAAAAAAAABAEH/2gAIAQMBAT8QNmJ//8QAFhEBAQEAAAAAAAAAAAAAAAAAAQAx/9oACAECAQE/EAYTX//EABwQAQADAAIDAAAAAAAAAAAAAAEAESExQVFxgf/aAAgBAQABPxCo0PaPiU9uQBmfAXGMWJFXWMTreih+QKoajnM//9k='); background-size: cover; display: block;" Err codemadness.org 70 i 4144 ></span> Err codemadness.org 70 i 4145 <img Err codemadness.org 70 i 4146 class="gatsby-resp-image-image" Err codemadness.org 70 i 4147 alt="radar" Err codemadness.org 70 i 4148 title="radar" Err codemadness.org 70 i 4149 src="/static/d115d74ea742126d2c24af84f36d45dd/6aca1/radar.jpg" Err codemadness.org 70 i 4150 srcset="/static/d115d74ea742126d2c24af84f36d45dd/d2f63/radar.jpg 163w, Err codemadness.org 70 i 4151 /static/d115d74ea742126d2c24af84f36d45dd/c989d/radar.jpg 325w, Err codemadness.org 70 i 4152 /static/d115d74ea742126d2c24af84f36d45dd/6aca1/radar.jpg 650w, Err codemadness.org 70 i 4153 /static/d115d74ea742126d2c24af84f36d45dd/7c09c/radar.jpg 975w, Err codemadness.org 70 i 4154 /static/d115d74ea742126d2c24af84f36d45dd/01ab0/radar.jpg 1300w, Err codemadness.org 70 i 4155 /static/d115d74ea742126d2c24af84f36d45dd/d2602/radar.jpg 4032w" Err codemadness.org 70 i 4156 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 4157 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 4158 loading="lazy" Err codemadness.org 70 i 4159 /> Err codemadness.org 70 i 4160 </a> Err codemadness.org 70 i 4161 </span></p> Err codemadness.org 70 i 4162 <p>Check out its <a href="https://www.nps.gov/goga/nike-missile-site.htm">National Park Service website</a> for its operating hours and tour times. As you might expect, it looks like the site is closed for the time being. If you're lucky (and can plan ahead), try to go on the first Saturday of the month, when its staffed by volunteer veterans who worked at various Nike sites around the country. </p> Err codemadness.org 70 i 4163 <p>We got lucky, and the veterans were both hilarious and super interesting. Added bonus: they were also able to operate some of the terrifying machinery, like so:</p> Err codemadness.org 70 i 4164 <p><img src="/c8c202158e218ccd053886bd110d0290/animation.gif" alt="missileloading"></p> Err codemadness.org 70 i 4165 <p>I brought along my little notebook and took copious notes while they were talking (which I've reproduced below). </p> Err codemadness.org 70 i 4166 <p><span Err codemadness.org 70 i 4167 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 4168 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 4169 > Err codemadness.org 70 i 4170 <a Err codemadness.org 70 i 4171 class="gatsby-resp-image-link" Err codemadness.org 70 i 4172 href="/static/f175d4c895d6921cadc6782d98ad3176/d2602/history.jpg" Err codemadness.org 70 i 4173 style="display: block" Err codemadness.org 70 i 4174 target="_blank" Err codemadness.org 70 i 4175 rel="noopener" Err codemadness.org 70 i 4176 > Err codemadness.org 70 i 4177 <span Err codemadness.org 70 i 4178 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 4179 style="padding-bottom: 74.84662576687117%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAIEAQP/xAAWAQEBAQAAAAAAAAAAAAAAAAABAAL/2gAMAwEAAhADEAAAAeTSLluNI//EABgQAQEBAQEAAAAAAAAAAAAAAAIBEgAD/9oACAEBAAEFAto8Lu5veldspLJ13//EABYRAAMAAAAAAAAAAAAAAAAAAAEQEf/aAAgBAwEBPwGBf//EABURAQEAAAAAAAAAAAAAAAAAAAAh/9oACAECAQE/Aar/xAAbEAACAgMBAAAAAAAAAAAAAAAAEQECEBIhQf/aAAgBAQAGPwKJmqYsds9T2Gcsf//EABoQAQADAQEBAAAAAAAAAAAAAAEAESExQWH/2gAIAQEAAT8h1T4XkN6H2LLsBFjWkNdOklBUq62f/9oADAMBAAIAAwAAABB77//EABcRAQEBAQAAAAAAAAAAAAAAAAEAETH/2gAIAQMBAT8QA6SG3//EABcRAQEBAQAAAAAAAAAAAAAAAAEAETH/2gAIAQIBAT8Qxcgn/8QAGxABAAMBAAMAAAAAAAAAAAAAAQARITFBcaH/2gAIAQEAAT8QTUJ27chkBFsrM6VeUeIpMAcPXOxdGodFt/CNRixTcn//2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 4180 ></span> Err codemadness.org 70 i 4181 <img Err codemadness.org 70 i 4182 class="gatsby-resp-image-image" Err codemadness.org 70 i 4183 alt="history" Err codemadness.org 70 i 4184 title="history" Err codemadness.org 70 i 4185 src="/static/f175d4c895d6921cadc6782d98ad3176/6aca1/history.jpg" Err codemadness.org 70 i 4186 srcset="/static/f175d4c895d6921cadc6782d98ad3176/d2f63/history.jpg 163w, Err codemadness.org 70 i 4187 /static/f175d4c895d6921cadc6782d98ad3176/c989d/history.jpg 325w, Err codemadness.org 70 i 4188 /static/f175d4c895d6921cadc6782d98ad3176/6aca1/history.jpg 650w, Err codemadness.org 70 i 4189 /static/f175d4c895d6921cadc6782d98ad3176/7c09c/history.jpg 975w, Err codemadness.org 70 i 4190 /static/f175d4c895d6921cadc6782d98ad3176/01ab0/history.jpg 1300w, Err codemadness.org 70 i 4191 /static/f175d4c895d6921cadc6782d98ad3176/d2602/history.jpg 4032w" Err codemadness.org 70 i 4192 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 4193 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 4194 loading="lazy" Err codemadness.org 70 i 4195 /> Err codemadness.org 70 i 4196 </a> Err codemadness.org 70 i 4197 </span></p> Err codemadness.org 70 i 4198 <p>But first I wanted to share a favorite moment.</p> Err codemadness.org 70 i 4199 <p>Near the end of the tour, we were led underground to where they kept the Nike Hercules missiles. Then, one of the veterans pressed a giant yellow button, which opened a metal hatch and began to lift one of the missiles above ground. This was a common procedure for the soldiers - they'd have to run through drills constantly, at a moment's notice.</p> Err codemadness.org 70 i 4200 <p>Meanwhile, as we're watching this gigantic warhead move skyward a hydraulic lift, I can't help but be distracted: Where have I heard these sounds before?</p> Err codemadness.org 70 i 4201 <audio controls="controls"> Err codemadness.org 70 i 4202 <source type="audio/mp3" src="/5d9feeb82b2ba991d08069eace7479b3/trash_compactor.mp3"></source> Err codemadness.org 70 i 4203 </audio> Err codemadness.org 70 i 4204 <p>That's when the veteran asked, "Anyone ever seen Star Wars?"</p> Err codemadness.org 70 i 4205 <p>My hand burst into the air like Hermoine's.</p> Err codemadness.org 70 i 4206 <p>Apparently, George Lucas visited the Nike missile site before filming <em>A New Hope</em>, and he found some inspiration for this scene:</p> Err codemadness.org 70 i 4207 <p><span Err codemadness.org 70 i 4208 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 4209 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 639px; " Err codemadness.org 70 i 4210 > Err codemadness.org 70 i 4211 <a Err codemadness.org 70 i 4212 class="gatsby-resp-image-link" Err codemadness.org 70 i 4213 href="/static/71d4a050bc2b68ac607f8fc3088a2aa7/df7e7/trash.jpg" Err codemadness.org 70 i 4214 style="display: block" Err codemadness.org 70 i 4215 target="_blank" Err codemadness.org 70 i 4216 rel="noopener" Err codemadness.org 70 i 4217 > Err codemadness.org 70 i 4218 <span Err codemadness.org 70 i 4219 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 4220 style="padding-bottom: 66.87116564417178%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAMCBAX/xAAWAQEBAQAAAAAAAAAAAAAAAAAAAQL/2gAMAwEAAhADEAAAAct6mxWImn//xAAaEAEBAAIDAAAAAAAAAAAAAAABAhIhAAMR/9oACAEBAAEFAid3LinnOlzrJKXf/8QAFREBAQAAAAAAAAAAAAAAAAAAABH/2gAIAQMBAT8BV//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABoQAAICAwAAAAAAAAAAAAAAAAABEBESYZH/2gAIAQEABj8CimYvptR//8QAHBAAAgICAwAAAAAAAAAAAAAAAAERITFRQWFx/9oACAEBAAE/IXQkayTuIJOB9jNuqTgaC5bkc9vT/9oADAMBAAIAAwAAABC/H//EABYRAQEBAAAAAAAAAAAAAAAAAAEQIf/aAAgBAwEBPxAcj//EABcRAQADAAAAAAAAAAAAAAAAAAABETH/2gAIAQIBAT8QnVP/xAAeEAEAAgIBBQAAAAAAAAAAAAABACERMVFBYXGBkf/aAAgBAQABPxDOcrQ4xcqLFclVEUANgcw0zqqLLPJ26xFomGb9Rwq/Sf/Z'); background-size: cover; display: block;" Err codemadness.org 70 i 4221 ></span> Err codemadness.org 70 i 4222 <img Err codemadness.org 70 i 4223 class="gatsby-resp-image-image" Err codemadness.org 70 i 4224 alt="trash" Err codemadness.org 70 i 4225 title="trash" Err codemadness.org 70 i 4226 src="/static/71d4a050bc2b68ac607f8fc3088a2aa7/df7e7/trash.jpg" Err codemadness.org 70 i 4227 srcset="/static/71d4a050bc2b68ac607f8fc3088a2aa7/d2f63/trash.jpg 163w, Err codemadness.org 70 i 4228 /static/71d4a050bc2b68ac607f8fc3088a2aa7/c989d/trash.jpg 325w, Err codemadness.org 70 i 4229 /static/71d4a050bc2b68ac607f8fc3088a2aa7/df7e7/trash.jpg 639w" Err codemadness.org 70 i 4230 sizes="(max-width: 639px) 100vw, 639px" Err codemadness.org 70 i 4231 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 4232 loading="lazy" Err codemadness.org 70 i 4233 /> Err codemadness.org 70 i 4234 </a> Err codemadness.org 70 i 4235 </span></p> Err codemadness.org 70 i 4236 <p>This experience now lends more credence to the apocryphal story of how those Oakland shipping container lift thingies became proto AT-ATs for a day-dreaming Lucas.</p> Err codemadness.org 70 i 4237 <p>Anyway, as mentioned, here's what I scribbled down during the tour:</p> Err codemadness.org 70 i 4238 <ul> Err codemadness.org 70 i 4239 <li>Nike is the "goddess of victory"</li> Err codemadness.org 70 i 4240 <li> Err codemadness.org 70 i 4241 <p>Nike Missile Program</p> Err codemadness.org 70 i 4242 <ul> Err codemadness.org 70 i 4243 <li>1954 - 1974</li> Err codemadness.org 70 i 4244 <li>233 sites across the USA</li> Err codemadness.org 70 i 4245 <li>Billions were spent</li> Err codemadness.org 70 i 4246 <li>Obsoleted by ICBMs (inter-continental ballistic missiles)</li> Err codemadness.org 70 i 4247 </ul> Err codemadness.org 70 i 4248 </li> Err codemadness.org 70 i 4249 <li> Err codemadness.org 70 i 4250 <p>Two types of missiles:</p> Err codemadness.org 70 i 4251 <ul> Err codemadness.org 70 i 4252 <li>(1) Ajax: liquid fuel, very dangerous to handle</li> Err codemadness.org 70 i 4253 <li>(2) Hercules: nuclear version</li> Err codemadness.org 70 i 4254 </ul> Err codemadness.org 70 i 4255 </li> Err codemadness.org 70 i 4256 <li>Many of the Army operators were ~19 years: "We were kids."</li> Err codemadness.org 70 i 4257 <li>Missiles were radar operated</li> Err codemadness.org 70 i 4258 <li>No Nike missiles were ever "officially launched" at any enemy</li> Err codemadness.org 70 i 4259 <li> Err codemadness.org 70 i 4260 <p>Each site had three radars:</p> Err codemadness.org 70 i 4261 <ul> Err codemadness.org 70 i 4262 <li>(1) Friend or Foe?</li> Err codemadness.org 70 i 4263 <li>(2) Foe tracker</li> Err codemadness.org 70 i 4264 <li>(3) Missile tracker</li> Err codemadness.org 70 i 4265 </ul> Err codemadness.org 70 i 4266 </li> Err codemadness.org 70 i 4267 <li> Err codemadness.org 70 i 4268 <p>The U.S. strategy for defending our coasts was:</p> Err codemadness.org 70 i 4269 <ul> Err codemadness.org 70 i 4270 <li>(1) Navy will try first,</li> Err codemadness.org 70 i 4271 <li>(2) Then the Air Force,</li> Err codemadness.org 70 i 4272 <li>(3) Finally, the Army with Nike missiles as a last resort</li> Err codemadness.org 70 i 4273 </ul> Err codemadness.org 70 i 4274 </li> Err codemadness.org 70 i 4275 <li> Err codemadness.org 70 i 4276 <p>Control operators had five words they could send to an in-flight missile:</p> Err codemadness.org 70 i 4277 <ul> Err codemadness.org 70 i 4278 <li>(1) PITCH</li> Err codemadness.org 70 i 4279 <li>(2) YAW</li> Err codemadness.org 70 i 4280 <li>(3) ROLL</li> Err codemadness.org 70 i 4281 <li>(4) SELF-DESTRUCT</li> Err codemadness.org 70 i 4282 <li>(5) EXPLODE (they had to tell the missiles to explode!)</li> Err codemadness.org 70 i 4283 </ul> Err codemadness.org 70 i 4284 </li> Err codemadness.org 70 i 4285 <li>Operators went to annual training in New Mexico where they actually fired unarmed missiles</li> Err codemadness.org 70 i 4286 <li>Hercules had a 35 mile "kill" diameter</li> Err codemadness.org 70 i 4287 <li>There is an electromagnetic pulse during a nuclear explosion, which is why analog radar communication works (vs. digital)</li> Err codemadness.org 70 i 4288 </ul> Err codemadness.org 70 i 4289 <p>And here are some of the better photos from my phone. If you like old control panels for old computers (like me), then this place is your kind of place!</p> Err codemadness.org 70 i 4290 <p><span Err codemadness.org 70 i 4291 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 4292 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 4293 > Err codemadness.org 70 i 4294 <a Err codemadness.org 70 i 4295 class="gatsby-resp-image-link" Err codemadness.org 70 i 4296 href="/static/28a20b6ce46becb1226cd959be3cf0c7/d2602/buttons.jpg" Err codemadness.org 70 i 4297 style="display: block" Err codemadness.org 70 i 4298 target="_blank" Err codemadness.org 70 i 4299 rel="noopener" Err codemadness.org 70 i 4300 > Err codemadness.org 70 i 4301 <span Err codemadness.org 70 i 4302 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 4303 style="padding-bottom: 74.84662576687117%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAMEAQX/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAABYi2WOeYV/8QAHBAAAQMFAAAAAAAAAAAAAAAAAQAREgIDISMy/9oACAEBAAEFAo7YMK8EpmV3r//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABgQAAMBAQAAAAAAAAAAAAAAAAABERBh/9oACAEBAAY/AqNV1kH0ef/EABoQAAMBAQEBAAAAAAAAAAAAAAERIQAxQVH/2gAIAQEAAT8hK1LAXZirufuDqJQVxkoX1ZM4lT4tHb3/2gAMAwEAAgADAAAAEAQP/8QAFREBAQAAAAAAAAAAAAAAAAAAECH/2gAIAQMBAT8Qh//EABURAQEAAAAAAAAAAAAAAAAAAAAB/9oACAECAQE/EEf/xAAcEAACAgMBAQAAAAAAAAAAAAABEQAxIUFRYaH/2gAIAQEAAT8Qa6rtQLnkMe/Uxu1BLIRGxxDoSFQHx2IlxwIindwCXNw3S8n/2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 4304 ></span> Err codemadness.org 70 i 4305 <img Err codemadness.org 70 i 4306 class="gatsby-resp-image-image" Err codemadness.org 70 i 4307 alt="buttons" Err codemadness.org 70 i 4308 title="buttons" Err codemadness.org 70 i 4309 src="/static/28a20b6ce46becb1226cd959be3cf0c7/6aca1/buttons.jpg" Err codemadness.org 70 i 4310 srcset="/static/28a20b6ce46becb1226cd959be3cf0c7/d2f63/buttons.jpg 163w, Err codemadness.org 70 i 4311 /static/28a20b6ce46becb1226cd959be3cf0c7/c989d/buttons.jpg 325w, Err codemadness.org 70 i 4312 /static/28a20b6ce46becb1226cd959be3cf0c7/6aca1/buttons.jpg 650w, Err codemadness.org 70 i 4313 /static/28a20b6ce46becb1226cd959be3cf0c7/7c09c/buttons.jpg 975w, Err codemadness.org 70 i 4314 /static/28a20b6ce46becb1226cd959be3cf0c7/01ab0/buttons.jpg 1300w, Err codemadness.org 70 i 4315 /static/28a20b6ce46becb1226cd959be3cf0c7/d2602/buttons.jpg 4032w" Err codemadness.org 70 i 4316 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 4317 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 4318 loading="lazy" Err codemadness.org 70 i 4319 /> Err codemadness.org 70 i 4320 </a> Err codemadness.org 70 i 4321 </span></p> Err codemadness.org 70 i 4322 <p><span Err codemadness.org 70 i 4323 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 4324 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 4325 > Err codemadness.org 70 i 4326 <a Err codemadness.org 70 i 4327 class="gatsby-resp-image-link" Err codemadness.org 70 i 4328 href="/static/52be07ae64ab63460489c89eefdb569a/6a89c/controls.jpg" Err codemadness.org 70 i 4329 style="display: block" Err codemadness.org 70 i 4330 target="_blank" Err codemadness.org 70 i 4331 rel="noopener" Err codemadness.org 70 i 4332 > Err codemadness.org 70 i 4333 <span Err codemadness.org 70 i 4334 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 4335 style="padding-bottom: 74.84662576687117%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIEA//EABUBAQEAAAAAAAAAAAAAAAAAAAEC/9oADAMBAAIQAxAAAAGhZFl3JhP/xAAaEAACAgMAAAAAAAAAAAAAAAAAAQMREBIT/9oACAEBAAEFAurHMzbDurP/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAVEQEBAAAAAAAAAAAAAAAAAAABEP/aAAgBAgEBPwEn/8QAFxAAAwEAAAAAAAAAAAAAAAAAABARMf/aAAgBAQAGPwLSV1f/xAAcEAEAAgEFAAAAAAAAAAAAAAABABExIUFRgdH/2gAIAQEAAT8hfFcyHSLXMWm94RaHEBWs/9oADAMBAAIAAwAAABAoD//EABYRAQEBAAAAAAAAAAAAAAAAAAEAEf/aAAgBAwEBPxBBtv/EABYRAQEBAAAAAAAAAAAAAAAAAAERAP/aAAgBAgEBPxBQmrv/xAAaEAEBAQEAAwAAAAAAAAAAAAABEQAxQWFx/9oACAEBAAE/EJA7+DMgF15XjXGGklHZgqg0Rm7hvo3/2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 4336 ></span> Err codemadness.org 70 i 4337 <img Err codemadness.org 70 i 4338 class="gatsby-resp-image-image" Err codemadness.org 70 i 4339 alt="controls" Err codemadness.org 70 i 4340 title="controls" Err codemadness.org 70 i 4341 src="/static/52be07ae64ab63460489c89eefdb569a/6aca1/controls.jpg" Err codemadness.org 70 i 4342 srcset="/static/52be07ae64ab63460489c89eefdb569a/d2f63/controls.jpg 163w, Err codemadness.org 70 i 4343 /static/52be07ae64ab63460489c89eefdb569a/c989d/controls.jpg 325w, Err codemadness.org 70 i 4344 /static/52be07ae64ab63460489c89eefdb569a/6aca1/controls.jpg 650w, Err codemadness.org 70 i 4345 /static/52be07ae64ab63460489c89eefdb569a/7c09c/controls.jpg 975w, Err codemadness.org 70 i 4346 /static/52be07ae64ab63460489c89eefdb569a/01ab0/controls.jpg 1300w, Err codemadness.org 70 i 4347 /static/52be07ae64ab63460489c89eefdb569a/6a89c/controls.jpg 3714w" Err codemadness.org 70 i 4348 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 4349 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 4350 loading="lazy" Err codemadness.org 70 i 4351 /> Err codemadness.org 70 i 4352 </a> Err codemadness.org 70 i 4353 </span></p> Err codemadness.org 70 i 4354 <p><span Err codemadness.org 70 i 4355 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 4356 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 4357 > Err codemadness.org 70 i 4358 <a Err codemadness.org 70 i 4359 class="gatsby-resp-image-link" Err codemadness.org 70 i 4360 href="/static/aca59aea2a2e99606c2258c15096e50c/d2602/dials.jpg" Err codemadness.org 70 i 4361 style="display: block" Err codemadness.org 70 i 4362 target="_blank" Err codemadness.org 70 i 4363 rel="noopener" Err codemadness.org 70 i 4364 > Err codemadness.org 70 i 4365 <span Err codemadness.org 70 i 4366 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 4367 style="padding-bottom: 74.84662576687117%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIEA//EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAEzqWSgYP/EABoQAAICAwAAAAAAAAAAAAAAAAECABEDEiH/2gAIAQEAAQUCNQlaQUuqw40gPP/EABYRAQEBAAAAAAAAAAAAAAAAAAABEf/aAAgBAwEBPwGRj//EABURAQEAAAAAAAAAAAAAAAAAAAEQ/9oACAECAQE/AWf/xAAcEAACAgIDAAAAAAAAAAAAAAAAAQIxEBETISP/2gAIAQEABj8CfpI3yyFbK7ZVY//EABsQAAICAwEAAAAAAAAAAAAAAAABETEhQVGB/9oACAEBAAE/IYWkcbOoavAxL0HLnsG4VQ6NH//aAAwDAQACAAMAAAAQOx//xAAVEQEBAAAAAAAAAAAAAAAAAAAAEf/aAAgBAwEBPxCin//EABURAQEAAAAAAAAAAAAAAAAAAAEA/9oACAECAQE/EEEJf//EABsQAQADAQADAAAAAAAAAAAAAAERITEAQVFh/9oACAEBAAE/EHYpUtEGh74lQVKpRq94LH3PNSbQ4YvYJrg3vSSss7N31BhWGb3/2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 4368 ></span> Err codemadness.org 70 i 4369 <img Err codemadness.org 70 i 4370 class="gatsby-resp-image-image" Err codemadness.org 70 i 4371 alt="dials" Err codemadness.org 70 i 4372 title="dials" Err codemadness.org 70 i 4373 src="/static/aca59aea2a2e99606c2258c15096e50c/6aca1/dials.jpg" Err codemadness.org 70 i 4374 srcset="/static/aca59aea2a2e99606c2258c15096e50c/d2f63/dials.jpg 163w, Err codemadness.org 70 i 4375 /static/aca59aea2a2e99606c2258c15096e50c/c989d/dials.jpg 325w, Err codemadness.org 70 i 4376 /static/aca59aea2a2e99606c2258c15096e50c/6aca1/dials.jpg 650w, Err codemadness.org 70 i 4377 /static/aca59aea2a2e99606c2258c15096e50c/7c09c/dials.jpg 975w, Err codemadness.org 70 i 4378 /static/aca59aea2a2e99606c2258c15096e50c/01ab0/dials.jpg 1300w, Err codemadness.org 70 i 4379 /static/aca59aea2a2e99606c2258c15096e50c/d2602/dials.jpg 4032w" Err codemadness.org 70 i 4380 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 4381 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 4382 loading="lazy" Err codemadness.org 70 i 4383 /> Err codemadness.org 70 i 4384 </a> Err codemadness.org 70 i 4385 </span></p> Err codemadness.org 70 i 4386 <p><span Err codemadness.org 70 i 4387 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 4388 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 4389 > Err codemadness.org 70 i 4390 <a Err codemadness.org 70 i 4391 class="gatsby-resp-image-link" Err codemadness.org 70 i 4392 href="/static/94942153f05fff73adbf2b72216ed795/d2602/missile.jpg" Err codemadness.org 70 i 4393 style="display: block" Err codemadness.org 70 i 4394 target="_blank" Err codemadness.org 70 i 4395 rel="noopener" Err codemadness.org 70 i 4396 > Err codemadness.org 70 i 4397 <span Err codemadness.org 70 i 4398 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 4399 style="padding-bottom: 74.84662576687117%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAECBP/EABUBAQEAAAAAAAAAAAAAAAAAAAEC/9oADAMBAAIQAxAAAAFVmVRZmB//xAAaEAACAwEBAAAAAAAAAAAAAAAAAQISExEi/9oACAEBAAEFAs7GLG0V6vMS0D//xAAXEQADAQAAAAAAAAAAAAAAAAAAARIT/9oACAEDAQE/Ac0Qj//EABYRAAMAAAAAAAAAAAAAAAAAAAACE//aAAgBAgEBPwGrFGP/xAAaEAACAgMAAAAAAAAAAAAAAAAAMQERAiFh/9oACAEBAAY/AlQhlwbym+Ck/8QAGxABAAIDAQEAAAAAAAAAAAAAAQAhEWGRQaH/2gAIAQEAAT8hPDtMDSzqZVrsEA07it9RLrbdT//aAAwDAQACAAMAAAAQ6y//xAAWEQEBAQAAAAAAAAAAAAAAAAABEBH/2gAIAQMBAT8QVdn/AP/EABYRAQEBAAAAAAAAAAAAAAAAAAEQEf/aAAgBAgEBPxAAyX//xAAdEAEAAwACAwEAAAAAAAAAAAABABEhMUGhscHR/9oACAEBAAE/ECqi0uqfsL6q4w15liKRpyfYHk7LrnesQ4nGV+ould1Wmf/Z'); background-size: cover; display: block;" Err codemadness.org 70 i 4400 ></span> Err codemadness.org 70 i 4401 <img Err codemadness.org 70 i 4402 class="gatsby-resp-image-image" Err codemadness.org 70 i 4403 alt="missile" Err codemadness.org 70 i 4404 title="missile" Err codemadness.org 70 i 4405 src="/static/94942153f05fff73adbf2b72216ed795/6aca1/missile.jpg" Err codemadness.org 70 i 4406 srcset="/static/94942153f05fff73adbf2b72216ed795/d2f63/missile.jpg 163w, Err codemadness.org 70 i 4407 /static/94942153f05fff73adbf2b72216ed795/c989d/missile.jpg 325w, Err codemadness.org 70 i 4408 /static/94942153f05fff73adbf2b72216ed795/6aca1/missile.jpg 650w, Err codemadness.org 70 i 4409 /static/94942153f05fff73adbf2b72216ed795/7c09c/missile.jpg 975w, Err codemadness.org 70 i 4410 /static/94942153f05fff73adbf2b72216ed795/01ab0/missile.jpg 1300w, Err codemadness.org 70 i 4411 /static/94942153f05fff73adbf2b72216ed795/d2602/missile.jpg 4032w" Err codemadness.org 70 i 4412 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 4413 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 4414 loading="lazy" Err codemadness.org 70 i 4415 /> Err codemadness.org 70 i 4416 </a> Err codemadness.org 70 i 4417 </span></p> Err codemadness.org 70 i 4418 <p><span Err codemadness.org 70 i 4419 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 4420 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 4421 > Err codemadness.org 70 i 4422 <a Err codemadness.org 70 i 4423 class="gatsby-resp-image-link" Err codemadness.org 70 i 4424 href="/static/c5d7694dc4304c2cf704b8ee257ff1ba/d2602/parallax.jpg" Err codemadness.org 70 i 4425 style="display: block" Err codemadness.org 70 i 4426 target="_blank" Err codemadness.org 70 i 4427 rel="noopener" Err codemadness.org 70 i 4428 > Err codemadness.org 70 i 4429 <span Err codemadness.org 70 i 4430 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 4431 style="padding-bottom: 74.84662576687117%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAwQA/8QAFQEBAQAAAAAAAAAAAAAAAAAAAQP/2gAMAwEAAhADEAAAAUSaiZPkw//EABoQAAMBAAMAAAAAAAAAAAAAAAABAhEDEhP/2gAIAQEAAQUCinaxnrBxOujdmI//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAVEQEBAAAAAAAAAAAAAAAAAAAQIf/aAAgBAgEBPwGH/8QAGxAAAgEFAAAAAAAAAAAAAAAAADEBECIyQWH/2gAIAQEABj8CVMi1muig/8QAGhAAAwEAAwAAAAAAAAAAAAAAAAERIVFhgf/aAAgBAQABPyFecq9mkGlxomheYxlM0Dnd4f/aAAwDAQACAAMAAAAQ+M//xAAVEQEBAAAAAAAAAAAAAAAAAAABEP/aAAgBAwEBPxAn/8QAFhEBAQEAAAAAAAAAAAAAAAAAAAER/9oACAECAQE/EDY//8QAHBABAAICAwEAAAAAAAAAAAAAAQARMVEhYXHB/9oACAEBAAE/EKw0Xm/ItYF+xquKRcMuTqPF9yne2+SYOpsDbH//2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 4432 ></span> Err codemadness.org 70 i 4433 <img Err codemadness.org 70 i 4434 class="gatsby-resp-image-image" Err codemadness.org 70 i 4435 alt="parallax" Err codemadness.org 70 i 4436 title="parallax" Err codemadness.org 70 i 4437 src="/static/c5d7694dc4304c2cf704b8ee257ff1ba/6aca1/parallax.jpg" Err codemadness.org 70 i 4438 srcset="/static/c5d7694dc4304c2cf704b8ee257ff1ba/d2f63/parallax.jpg 163w, Err codemadness.org 70 i 4439 /static/c5d7694dc4304c2cf704b8ee257ff1ba/c989d/parallax.jpg 325w, Err codemadness.org 70 i 4440 /static/c5d7694dc4304c2cf704b8ee257ff1ba/6aca1/parallax.jpg 650w, Err codemadness.org 70 i 4441 /static/c5d7694dc4304c2cf704b8ee257ff1ba/7c09c/parallax.jpg 975w, Err codemadness.org 70 i 4442 /static/c5d7694dc4304c2cf704b8ee257ff1ba/01ab0/parallax.jpg 1300w, Err codemadness.org 70 i 4443 /static/c5d7694dc4304c2cf704b8ee257ff1ba/d2602/parallax.jpg 4032w" Err codemadness.org 70 i 4444 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 4445 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 4446 loading="lazy" Err codemadness.org 70 i 4447 /> Err codemadness.org 70 i 4448 </a> Err codemadness.org 70 i 4449 </span></p> Err codemadness.org 70 i 4450 <p><span Err codemadness.org 70 i 4451 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 4452 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 4453 > Err codemadness.org 70 i 4454 <a Err codemadness.org 70 i 4455 class="gatsby-resp-image-link" Err codemadness.org 70 i 4456 href="/static/986e00cad4152a58664883e8a3d330f1/7c297/phone.jpg" Err codemadness.org 70 i 4457 style="display: block" Err codemadness.org 70 i 4458 target="_blank" Err codemadness.org 70 i 4459 rel="noopener" Err codemadness.org 70 i 4460 > Err codemadness.org 70 i 4461 <span Err codemadness.org 70 i 4462 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 4463 style="padding-bottom: 114.7239263803681%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAXABQDASIAAhEBAxEB/8QAGAABAAMBAAAAAAAAAAAAAAAAAAIDBAX/xAAWAQEBAQAAAAAAAAAAAAAAAAABAgD/2gAMAwEAAhADEAAAAd8OVTLcwjAlgK//xAAdEAACAQQDAAAAAAAAAAAAAAACAwEAEBESExQi/9oACAEBAAEFAtRGmTGktHPZ8MbyBfFf/8QAFREBAQAAAAAAAAAAAAAAAAAAESD/2gAIAQMBAT8BY//EABcRAAMBAAAAAAAAAAAAAAAAAAABERD/2gAIAQIBAT8BiJv/xAAaEAACAwEBAAAAAAAAAAAAAAAAIQEQEQIx/9oACAEBAAY/AkPBHjI5m8r/xAAdEAADAQABBQAAAAAAAAAAAAAAAREhMUFRYXGx/9oACAEBAAE/IWgpvwfXBJ6XKwXrHEr0GrGp2iU7EmiXI8j/2gAMAwEAAgADAAAAECfXgP/EABYRAQEBAAAAAAAAAAAAAAAAABARAf/aAAgBAwEBPxC6af/EABcRAAMBAAAAAAAAAAAAAAAAAAABERD/2gAIAQIBAT8QkiBZ/8QAGxABAQADAQEBAAAAAAAAAAAAAREAITFBcYH/2gAIAQEAAT8QojQIKkYFEAg469c0pPFbiWPVX0uDBKY46nMmk/Wao83m4GPRyITsM//Z'); background-size: cover; display: block;" Err codemadness.org 70 i 4464 ></span> Err codemadness.org 70 i 4465 <img Err codemadness.org 70 i 4466 class="gatsby-resp-image-image" Err codemadness.org 70 i 4467 alt="phone" Err codemadness.org 70 i 4468 title="phone" Err codemadness.org 70 i 4469 src="/static/986e00cad4152a58664883e8a3d330f1/6aca1/phone.jpg" Err codemadness.org 70 i 4470 srcset="/static/986e00cad4152a58664883e8a3d330f1/d2f63/phone.jpg 163w, Err codemadness.org 70 i 4471 /static/986e00cad4152a58664883e8a3d330f1/c989d/phone.jpg 325w, Err codemadness.org 70 i 4472 /static/986e00cad4152a58664883e8a3d330f1/6aca1/phone.jpg 650w, Err codemadness.org 70 i 4473 /static/986e00cad4152a58664883e8a3d330f1/7c09c/phone.jpg 975w, Err codemadness.org 70 i 4474 /static/986e00cad4152a58664883e8a3d330f1/01ab0/phone.jpg 1300w, Err codemadness.org 70 i 4475 /static/986e00cad4152a58664883e8a3d330f1/7c297/phone.jpg 3007w" Err codemadness.org 70 i 4476 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 4477 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 4478 loading="lazy" Err codemadness.org 70 i 4479 /> Err codemadness.org 70 i 4480 </a> Err codemadness.org 70 i 4481 </span></p> Err codemadness.org 70 i 4482 <p><span Err codemadness.org 70 i 4483 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 4484 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 4485 > Err codemadness.org 70 i 4486 <a Err codemadness.org 70 i 4487 class="gatsby-resp-image-link" Err codemadness.org 70 i 4488 href="/static/edeea8b83f4d379392bbc93402181f2f/d2602/plot.jpg" Err codemadness.org 70 i 4489 style="display: block" Err codemadness.org 70 i 4490 target="_blank" Err codemadness.org 70 i 4491 rel="noopener" Err codemadness.org 70 i 4492 > Err codemadness.org 70 i 4493 <span Err codemadness.org 70 i 4494 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 4495 style="padding-bottom: 74.84662576687117%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAIEBQb/xAAVAQEBAAAAAAAAAAAAAAAAAAABAv/aAAwDAQACEAMQAAABi0efqFxBj//EABgQAQEBAQEAAAAAAAAAAAAAAAECAwAR/9oACAEBAAEFAroQzhyQ9l6dL8e//8QAFxEAAwEAAAAAAAAAAAAAAAAAAQIQEf/aAAgBAwEBPwFTk//EABYRAQEBAAAAAAAAAAAAAAAAAAEQEf/aAAgBAgEBPwFNn//EABkQAAIDAQAAAAAAAAAAAAAAAAABEBExMv/aAAgBAQAGPwKjlZo4pM0//8QAGRAAAwEBAQAAAAAAAAAAAAAAAAEhETFB/9oACAEBAAE/Icq6IUHcElzYZavGKI7g16TP/9oADAMBAAIAAwAAABC3P//EABgRAAIDAAAAAAAAAAAAAAAAAAABESEx/9oACAEDAQE/EESoen//xAAWEQEBAQAAAAAAAAAAAAAAAAABABH/2gAIAQIBAT8QbGQX/8QAHRABAAIBBQEAAAAAAAAAAAAAAQARITFBUWFxof/aAAgBAQABPxC3KmlrIdXzFOhu5K+wRaaLG0y5QM1HimYB08uGu9wO5//Z'); background-size: cover; display: block;" Err codemadness.org 70 i 4496 ></span> Err codemadness.org 70 i 4497 <img Err codemadness.org 70 i 4498 class="gatsby-resp-image-image" Err codemadness.org 70 i 4499 alt="plot" Err codemadness.org 70 i 4500 title="plot" Err codemadness.org 70 i 4501 src="/static/edeea8b83f4d379392bbc93402181f2f/6aca1/plot.jpg" Err codemadness.org 70 i 4502 srcset="/static/edeea8b83f4d379392bbc93402181f2f/d2f63/plot.jpg 163w, Err codemadness.org 70 i 4503 /static/edeea8b83f4d379392bbc93402181f2f/c989d/plot.jpg 325w, Err codemadness.org 70 i 4504 /static/edeea8b83f4d379392bbc93402181f2f/6aca1/plot.jpg 650w, Err codemadness.org 70 i 4505 /static/edeea8b83f4d379392bbc93402181f2f/7c09c/plot.jpg 975w, Err codemadness.org 70 i 4506 /static/edeea8b83f4d379392bbc93402181f2f/01ab0/plot.jpg 1300w, Err codemadness.org 70 i 4507 /static/edeea8b83f4d379392bbc93402181f2f/d2602/plot.jpg 4032w" Err codemadness.org 70 i 4508 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 4509 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 4510 loading="lazy" Err codemadness.org 70 i 4511 /> Err codemadness.org 70 i 4512 </a> Err codemadness.org 70 i 4513 </span></p> Err codemadness.org 70 i 4514 <p><span Err codemadness.org 70 i 4515 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 4516 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 4517 > Err codemadness.org 70 i 4518 <a Err codemadness.org 70 i 4519 class="gatsby-resp-image-link" Err codemadness.org 70 i 4520 href="/static/7a57d968e5242926589df2368be6cad0/d2602/power.jpg" Err codemadness.org 70 i 4521 style="display: block" Err codemadness.org 70 i 4522 target="_blank" Err codemadness.org 70 i 4523 rel="noopener" Err codemadness.org 70 i 4524 > Err codemadness.org 70 i 4525 <span Err codemadness.org 70 i 4526 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 4527 style="padding-bottom: 74.84662576687117%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAwABBP/EABUBAQEAAAAAAAAAAAAAAAAAAAAC/9oADAMBAAIQAxAAAAE+0lqdjj//xAAbEAACAQUAAAAAAAAAAAAAAAAAAQIDERMhQf/aAAgBAQABBQJbfCMS6Rmpn//EABURAQEAAAAAAAAAAAAAAAAAAAEQ/9oACAEDAQE/AVn/xAAVEQEBAAAAAAAAAAAAAAAAAAABEP/aAAgBAgEBPwEJ/8QAGBAAAgMAAAAAAAAAAAAAAAAAAAEgITH/2gAIAQEABj8ChbNP/8QAGhAAAgIDAAAAAAAAAAAAAAAAAAEQMRFRkf/aAAgBAQABPyF8AqCEXDtDcP/aAAwDAQACAAMAAAAQU+//xAAWEQEBAQAAAAAAAAAAAAAAAAAAESH/2gAIAQMBAT8Qo1//xAAWEQEBAQAAAAAAAAAAAAAAAAAAEQH/2gAIAQIBAT8QguP/xAAcEAEAAgMAAwAAAAAAAAAAAAABABEhMWFBUdH/2gAIAQEAAT8QtW8+CG8G+S1RNJ1yBW0K9fCZEQHU/9k='); background-size: cover; display: block;" Err codemadness.org 70 i 4528 ></span> Err codemadness.org 70 i 4529 <img Err codemadness.org 70 i 4530 class="gatsby-resp-image-image" Err codemadness.org 70 i 4531 alt="power" Err codemadness.org 70 i 4532 title="power" Err codemadness.org 70 i 4533 src="/static/7a57d968e5242926589df2368be6cad0/6aca1/power.jpg" Err codemadness.org 70 i 4534 srcset="/static/7a57d968e5242926589df2368be6cad0/d2f63/power.jpg 163w, Err codemadness.org 70 i 4535 /static/7a57d968e5242926589df2368be6cad0/c989d/power.jpg 325w, Err codemadness.org 70 i 4536 /static/7a57d968e5242926589df2368be6cad0/6aca1/power.jpg 650w, Err codemadness.org 70 i 4537 /static/7a57d968e5242926589df2368be6cad0/7c09c/power.jpg 975w, Err codemadness.org 70 i 4538 /static/7a57d968e5242926589df2368be6cad0/01ab0/power.jpg 1300w, Err codemadness.org 70 i 4539 /static/7a57d968e5242926589df2368be6cad0/d2602/power.jpg 4032w" Err codemadness.org 70 i 4540 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 4541 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 4542 loading="lazy" Err codemadness.org 70 i 4543 /> Err codemadness.org 70 i 4544 </a> Err codemadness.org 70 i 4545 </span></p> Err codemadness.org 70 i 4546 <p><span Err codemadness.org 70 i 4547 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 4548 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 4549 > Err codemadness.org 70 i 4550 <a Err codemadness.org 70 i 4551 class="gatsby-resp-image-link" Err codemadness.org 70 i 4552 href="/static/2d3dab732e50aa4b88aa8d0672a25fda/6f063/secret.jpg" Err codemadness.org 70 i 4553 style="display: block" Err codemadness.org 70 i 4554 target="_blank" Err codemadness.org 70 i 4555 rel="noopener" Err codemadness.org 70 i 4556 > Err codemadness.org 70 i 4557 <span Err codemadness.org 70 i 4558 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 4559 style="padding-bottom: 131.2883435582822%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAaABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAIDBAH/xAAWAQEBAQAAAAAAAAAAAAAAAAACAAH/2gAMAwEAAhADEAAAAXeWgqAgddJ8rWIYv//EAB4QAAEEAQUAAAAAAAAAAAAAAAABAgMRIRITMTIz/9oACAEBAAEFArSRlJRF5VgxG3fRomkk7pwf/8QAFxEAAwEAAAAAAAAAAAAAAAAAAAEREP/aAAgBAwEBPwF5CH//xAAXEQADAQAAAAAAAAAAAAAAAAAAARAR/9oACAECAQE/AUbf/8QAGhAAAgMBAQAAAAAAAAAAAAAAAAEQITEREv/aAAgBAQAGPwJVwyFPhlJmIc//xAAdEAEBAQACAgMAAAAAAAAAAAABABEhMUFRYaHR/9oACAEBAAE/IdYn0n8TiOob85YXgHEPEJE1DxZcVaG19uJ4x1f/2gAMAwEAAgADAAAAEBvosP/EABcRAQEBAQAAAAAAAAAAAAAAAAARASH/2gAIAQMBAT8Q1dR0h//EABYRAAMAAAAAAAAAAAAAAAAAAAABEf/aAAgBAgEBPxBnGUUrP//EABoQAQADAQEBAAAAAAAAAAAAAAEAESExUWH/2gAIAQEAAT8QaDTaPI2gM2yUjKSuqdAT7BmwrDJWLi2qJI6nXb2IYpSzJq/dxAsd8jQAz//Z'); background-size: cover; display: block;" Err codemadness.org 70 i 4560 ></span> Err codemadness.org 70 i 4561 <img Err codemadness.org 70 i 4562 class="gatsby-resp-image-image" Err codemadness.org 70 i 4563 alt="secret" Err codemadness.org 70 i 4564 title="secret" Err codemadness.org 70 i 4565 src="/static/2d3dab732e50aa4b88aa8d0672a25fda/6aca1/secret.jpg" Err codemadness.org 70 i 4566 srcset="/static/2d3dab732e50aa4b88aa8d0672a25fda/d2f63/secret.jpg 163w, Err codemadness.org 70 i 4567 /static/2d3dab732e50aa4b88aa8d0672a25fda/c989d/secret.jpg 325w, Err codemadness.org 70 i 4568 /static/2d3dab732e50aa4b88aa8d0672a25fda/6aca1/secret.jpg 650w, Err codemadness.org 70 i 4569 /static/2d3dab732e50aa4b88aa8d0672a25fda/7c09c/secret.jpg 975w, Err codemadness.org 70 i 4570 /static/2d3dab732e50aa4b88aa8d0672a25fda/01ab0/secret.jpg 1300w, Err codemadness.org 70 i 4571 /static/2d3dab732e50aa4b88aa8d0672a25fda/6f063/secret.jpg 2475w" Err codemadness.org 70 i 4572 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 4573 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 4574 loading="lazy" Err codemadness.org 70 i 4575 /> Err codemadness.org 70 i 4576 </a> Err codemadness.org 70 i 4577 </span></p> Err codemadness.org 70 i 4578 <p><span Err codemadness.org 70 i 4579 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 4580 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 4581 > Err codemadness.org 70 i 4582 <a Err codemadness.org 70 i 4583 class="gatsby-resp-image-link" Err codemadness.org 70 i 4584 href="/static/75ed3e19f967cb450e0a86ee5a2d5e10/ca211/sign.jpg" Err codemadness.org 70 i 4585 style="display: block" Err codemadness.org 70 i 4586 target="_blank" Err codemadness.org 70 i 4587 rel="noopener" Err codemadness.org 70 i 4588 > Err codemadness.org 70 i 4589 <span Err codemadness.org 70 i 4590 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 4591 style="padding-bottom: 108.58895705521472%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAWABQDASIAAhEBAxEB/8QAGAABAQADAAAAAAAAAAAAAAAAAAQCAwX/xAAWAQEBAQAAAAAAAAAAAAAAAAACAQD/2gAMAwEAAhADEAAAAdU9cGlzJFZyiGoFf//EAB0QAAICAgMBAAAAAAAAAAAAAAECAAMRIxIhIjH/2gAIAQEAAQUCtG0MIGBlo9D5QuUddnHEr6X/xAAWEQEBAQAAAAAAAAAAAAAAAAAQAQL/2gAIAQMBAT8Bpo//xAAWEQEBAQAAAAAAAAAAAAAAAAAQAQL/2gAIAQIBAT8Bhk//xAAcEAABAwUAAAAAAAAAAAAAAAAAAhARICExQeH/2gAIAQEABj8CW2Cd8psf/8QAHBABAQEAAwADAAAAAAAAAAAAAREAITFBUXGB/9oACAEBAAE/IQad2hgcvWLsZz6PBnhDcrPcwekn7kCJmxBL87//2gAMAwEAAgADAAAAEOTHv//EABYRAQEBAAAAAAAAAAAAAAAAAAEAIf/aAAgBAwEBPxBIxDYMv//EABcRAQEBAQAAAAAAAAAAAAAAAAEAESH/2gAIAQIBAT8Q7JQZSu3/xAAeEAEAAwABBQEAAAAAAAAAAAABABEhMUFhkbHBcf/aAAgBAQABPxAOTcE7ltxQD8jXmUVhmFSsWytSnkPp8QGyU97gNlb9E1ZG1OWn2KCddFl1ALmnyf/Z'); background-size: cover; display: block;" Err codemadness.org 70 i 4592 ></span> Err codemadness.org 70 i 4593 <img Err codemadness.org 70 i 4594 class="gatsby-resp-image-image" Err codemadness.org 70 i 4595 alt="sign" Err codemadness.org 70 i 4596 title="sign" Err codemadness.org 70 i 4597 src="/static/75ed3e19f967cb450e0a86ee5a2d5e10/6aca1/sign.jpg" Err codemadness.org 70 i 4598 srcset="/static/75ed3e19f967cb450e0a86ee5a2d5e10/d2f63/sign.jpg 163w, Err codemadness.org 70 i 4599 /static/75ed3e19f967cb450e0a86ee5a2d5e10/c989d/sign.jpg 325w, Err codemadness.org 70 i 4600 /static/75ed3e19f967cb450e0a86ee5a2d5e10/6aca1/sign.jpg 650w, Err codemadness.org 70 i 4601 /static/75ed3e19f967cb450e0a86ee5a2d5e10/7c09c/sign.jpg 975w, Err codemadness.org 70 i 4602 /static/75ed3e19f967cb450e0a86ee5a2d5e10/01ab0/sign.jpg 1300w, Err codemadness.org 70 i 4603 /static/75ed3e19f967cb450e0a86ee5a2d5e10/ca211/sign.jpg 2980w" Err codemadness.org 70 i 4604 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 4605 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 4606 loading="lazy" Err codemadness.org 70 i 4607 /> Err codemadness.org 70 i 4608 </a> Err codemadness.org 70 i 4609 </span></p> Err codemadness.org 70 i 4610 <p><span Err codemadness.org 70 i 4611 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 4612 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 4613 > Err codemadness.org 70 i 4614 <a Err codemadness.org 70 i 4615 class="gatsby-resp-image-link" Err codemadness.org 70 i 4616 href="/static/4b3492e94c48707b0b44fceaa14ad0b2/9568a/squib.jpg" Err codemadness.org 70 i 4617 style="display: block" Err codemadness.org 70 i 4618 target="_blank" Err codemadness.org 70 i 4619 rel="noopener" Err codemadness.org 70 i 4620 > Err codemadness.org 70 i 4621 <span Err codemadness.org 70 i 4622 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 4623 style="padding-bottom: 133.12883435582822%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAQFA//EABYBAQEBAAAAAAAAAAAAAAAAAAEDAP/aAAwDAQACEAMQAAABmmrJlCkImxLanSuTRP/EAB4QAAICAQUBAAAAAAAAAAAAAAEDAAISBBARFCEx/9oACAEBAAEFAr/FyuQFU3aummuJ0uYhmCw4Ehnkrt//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/AR//xAAWEQADAAAAAAAAAAAAAAAAAAAAEBH/2gAIAQIBAT8BdP/EABwQAAIBBQEAAAAAAAAAAAAAAAARAQIQIDJBMf/aAAgBAQAGPwLy2g3BvA5rE+ncf//EAB0QAQEBAQABBQAAAAAAAAAAAAERACFBMVFhcbH/2gAIAQEAAT8hltEvjQd+MZVXzzGoQZXG/mOHyF+sNTGtEd5TD0xA5q++/9oADAMBAAIAAwAAABBD/wA8/8QAFxEBAQEBAAAAAAAAAAAAAAAAAQAREP/aAAgBAwEBPxBOBthf/8QAFxEBAQEBAAAAAAAAAAAAAAAAAQARIf/aAAgBAgEBPxAeQytq/8QAHhABAQACAgIDAAAAAAAAAAAAAREAITFBUYFhofH/2gAIAQEAAT8QYSYLZeNcYQWWQa7fzLgwtIVfeGbbhnHxMHETnYykgO0RfvJTJIFtmGeS9svrDwMPFxs7wmiLN4Mu2nzn/9k='); background-size: cover; display: block;" Err codemadness.org 70 i 4624 ></span> Err codemadness.org 70 i 4625 <img Err codemadness.org 70 i 4626 class="gatsby-resp-image-image" Err codemadness.org 70 i 4627 alt="squib" Err codemadness.org 70 i 4628 title="squib" Err codemadness.org 70 i 4629 src="/static/4b3492e94c48707b0b44fceaa14ad0b2/6aca1/squib.jpg" Err codemadness.org 70 i 4630 srcset="/static/4b3492e94c48707b0b44fceaa14ad0b2/d2f63/squib.jpg 163w, Err codemadness.org 70 i 4631 /static/4b3492e94c48707b0b44fceaa14ad0b2/c989d/squib.jpg 325w, Err codemadness.org 70 i 4632 /static/4b3492e94c48707b0b44fceaa14ad0b2/6aca1/squib.jpg 650w, Err codemadness.org 70 i 4633 /static/4b3492e94c48707b0b44fceaa14ad0b2/7c09c/squib.jpg 975w, Err codemadness.org 70 i 4634 /static/4b3492e94c48707b0b44fceaa14ad0b2/01ab0/squib.jpg 1300w, Err codemadness.org 70 i 4635 /static/4b3492e94c48707b0b44fceaa14ad0b2/9568a/squib.jpg 3024w" Err codemadness.org 70 i 4636 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 4637 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 4638 loading="lazy" Err codemadness.org 70 i 4639 /> Err codemadness.org 70 i 4640 </a> Err codemadness.org 70 i 4641 </span></p> Err codemadness.org 70 i 4642 <p><span Err codemadness.org 70 i 4643 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 4644 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 4645 > Err codemadness.org 70 i 4646 <a Err codemadness.org 70 i 4647 class="gatsby-resp-image-link" Err codemadness.org 70 i 4648 href="/static/69d36a8d8a00d7b88158eb8b0e196916/02c19/test.jpg" Err codemadness.org 70 i 4649 style="display: block" Err codemadness.org 70 i 4650 target="_blank" Err codemadness.org 70 i 4651 rel="noopener" Err codemadness.org 70 i 4652 > Err codemadness.org 70 i 4653 <span Err codemadness.org 70 i 4654 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 4655 style="padding-bottom: 119.6319018404908%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAYABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAQF/8QAFgEBAQEAAAAAAAAAAAAAAAAAAQAC/9oADAMBAAIQAxAAAAG7HryQuZg1dAOQr//EABwQAAIDAAMBAAAAAAAAAAAAAAABAgMRBBITIv/aAAgBAQABBQK+Xx7TRHkvLnkHIbLLe600/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFhEAAwAAAAAAAAAAAAAAAAAAABAR/9oACAECAQE/ASP/xAAaEAABBQEAAAAAAAAAAAAAAAAAAQIRICEy/9oACAEBAAY/AnQp0bf/xAAbEAADAAIDAAAAAAAAAAAAAAAAAREQIVFx8P/aAAgBAQABPyHniqYRPTWWekVN4lkUUGPNH//aAAwDAQACAAMAAAAQjwf/AP/EABcRAAMBAAAAAAAAAAAAAAAAAAABERD/2gAIAQMBAT8QrE8p/8QAFhEAAwAAAAAAAAAAAAAAAAAAAREg/9oACAECAQE/EEIf/8QAHBABAQEBAAIDAAAAAAAAAAAAAREAITFhcZHw/9oACAEBAAE/EDtIqx7kFE/McLDftIc1EIoH76zcWs1bSXsCGHUnEfNE1Hl1eIc9Hf/Z'); background-size: cover; display: block;" Err codemadness.org 70 i 4656 ></span> Err codemadness.org 70 i 4657 <img Err codemadness.org 70 i 4658 class="gatsby-resp-image-image" Err codemadness.org 70 i 4659 alt="test" Err codemadness.org 70 i 4660 title="test" Err codemadness.org 70 i 4661 src="/static/69d36a8d8a00d7b88158eb8b0e196916/6aca1/test.jpg" Err codemadness.org 70 i 4662 srcset="/static/69d36a8d8a00d7b88158eb8b0e196916/d2f63/test.jpg 163w, Err codemadness.org 70 i 4663 /static/69d36a8d8a00d7b88158eb8b0e196916/c989d/test.jpg 325w, Err codemadness.org 70 i 4664 /static/69d36a8d8a00d7b88158eb8b0e196916/6aca1/test.jpg 650w, Err codemadness.org 70 i 4665 /static/69d36a8d8a00d7b88158eb8b0e196916/7c09c/test.jpg 975w, Err codemadness.org 70 i 4666 /static/69d36a8d8a00d7b88158eb8b0e196916/01ab0/test.jpg 1300w, Err codemadness.org 70 i 4667 /static/69d36a8d8a00d7b88158eb8b0e196916/02c19/test.jpg 2673w" Err codemadness.org 70 i 4668 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 4669 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 4670 loading="lazy" Err codemadness.org 70 i 4671 /> Err codemadness.org 70 i 4672 </a> Err codemadness.org 70 i 4673 </span></p><![CDATA['Escaping Web' Season One Retrospective]]>https://www.charlieharrington.com/escaping-web-season-one-retrospectivehttps://www.charlieharrington.com/escaping-web-season-one-retrospectiveSun, 29 Mar 2020 00:00:00 GMT<p>My friend <a href="https://twitter.com/oznova_">Oz Nova</a> and I started a podcast last year called <a href="https://escapingweb.github.io">Escaping Web</a>. With a million and one podcasts out there, you might be wondering about our catchy tagline? Our special hook? Our unique... perspective?</p> Err codemadness.org 70 i 4674 <blockquote> Err codemadness.org 70 i 4675 <p>Escaping Web is a show celebrating software engineers who've found their calling beyond routine web development.</p> Err codemadness.org 70 i 4676 </blockquote> Err codemadness.org 70 i 4677 <p>The idea for the podcast began with the observation that most engineers who "break into tech" (read: bootcamp grads or "non-traditional" aka non-CS degree backgrounds) typically begin their careers with web development roles (👋 hi!), and that these engineers often find themselves in a rut after a year or two. Bored at work. Feeling unfulfilled. Looking for something more... (name your favorite Disney or Pixar "I want..." song).</p> Err codemadness.org 70 i 4678 <p>As the head of <a href="https://bradfieldcs.com">Bradfield School of Computer Science</a> (an online school for working software engineers "seeking mastery"), Oz meets lots of interesting characters who fit this mold -- and many who've broken out... into fields like graphics, quantum computing, database design, etc.</p> Err codemadness.org 70 i 4679 <p>Our podcast interviews these engineers to learn what makes the tick, and more importantly, how they found something that they're passionate about at work. Was it a six-month sabbatical to intensely study computer architecture or discrete mathemathics? Or something else?</p> Err codemadness.org 70 i 4680 <p>Mostly, Escaping Web is a podcast about learning how to learn how to learn.</p> Err codemadness.org 70 i 4681 <p>We recorded six episodes last year with six amazing individuals. You can find more details and links to the audio below, along with the voluminous shownotes (which grew and grew with each episode).</p> Err codemadness.org 70 i 4682 <p>We recently decided to put the show on indefinite hiatus (don't worry, I'm calling it Season One), and I'll use the next section of this post to go through some of my own learnings about starting a podcast in 2019.</p> Err codemadness.org 70 i 4683 <h2>Starting a podcast</h2> Err codemadness.org 70 i 4684 <p>It's easy! Everyone says that, and I pretty much agree. Here's a simple list of the things you need to do to release your own podcast:</p> Err codemadness.org 70 i 4685 <ol> Err codemadness.org 70 i 4686 <li>Record one or two episodes of audio</li> Err codemadness.org 70 i 4687 <li>Edit them (optional)</li> Err codemadness.org 70 i 4688 <li>Upload them somewhere on the internet that is publically accessible</li> Err codemadness.org 70 i 4689 <li>Generate an RSS feed that can tell podcast directories where to find your audio files</li> Err codemadness.org 70 i 4690 <li>Tell the podcast directories (e.g. iTunes, Google Play, Spotify) the URL of your RSS feed</li> Err codemadness.org 70 i 4691 <li>Line up sponsorships with Squarespace, Linode, and a subscription coffee service (also optional, unfortunately)</li> Err codemadness.org 70 i 4692 </ol> Err codemadness.org 70 i 4693 <p>But that's it! Podcasting is still an open medium. There are also services that can take care of some of these steps for you. I'll run through my experiences with each step now.</p> Err codemadness.org 70 i 4694 <h3>1. Recording audio</h3> Err codemadness.org 70 i 4695 <p>This one should be easy, you'd think. But it's not. In fact, this one is the primary reason that we went on hiatus. Given the format of our show (bi-weekly interviews with guests), we had a large scheduling onus to coordinate between ourselves and our guest-of-the-week. I think this challenge alone put the pin in "season one" and I think I'll need to do a better job with coordinating schedules if we resume the show. One thought, which I'm only thinking of now and wish I'd thought of earlier, would be a Calendly link for guests to sign up on.</p> Err codemadness.org 70 i 4696 <p>Even if you're not doing a guest-of-the-week format, there's still a mental hurdle to clear of "coming up with something interesting to say" on each episode. That's where your show theme and host chemistry can really make or break you. Shows like <a href="https://www.flophousepodcast.com/">The Flop House</a> really nail this combo: not only are they individually and collectively hilarious, the "bad-movie-recap-of-the-week" format keeps things interesting and fun every single episode. Similarly, the Apple-oriented <a href="https://atp.fm/">Accidental Tech Podcast</a> has become less about Apple news for me, and more about the trials, tribulations, and just-plain-fun quirks of each of the hosts. This is where podcasts have this dangerous turn as a replacement for human-interaction. When I'm thinking to myself, "Oh, Casey, it's time to get a new computer," I know that ATP has me hooked. I'm happily hooked, but hooked nonetheless.</p> Err codemadness.org 70 i 4697 <p>If you do give Escaping Web a listen, you might agree with me that I think we missed the mark on developing host chemistry. We don't really have any <a href="https://mykewasright.com/post/159678908546/follow-up">Siracusan "follow-up"</a> segment to provide weekly continuity (and highlight the strange things in our personalities that keep us up at night). There's also no regular cadence on what "Oz and Charlie are up to."</p> Err codemadness.org 70 i 4698 <p>I still think we went the right way with the interview format for our show, but I'd love to strike a better balance in the future. A show like <a href="https://daringfireball.net/thetalkshow/">John Gruber's The Talk Show</a> does this incredibly well. It's an interview show with a short rotating cast of characters, which makes it feel contiguous. For example, I know that John has a stack of like 400 bundles of firewood in his garage because of an accidental Amazon overpurchase. It's this kind of magic that you seek.</p> Err codemadness.org 70 i 4699 <p>Weren't we supposed to be talking about recording audio? Oh, right. There are two formats for this, one of which should be ignored given our current collective quarantining:</p> Err codemadness.org 70 i 4700 <ol> Err codemadness.org 70 i 4701 <li>In-person, each with an individual mic and headphones</li> Err codemadness.org 70 i 4702 <li>Over Skype, using Skype Call Recorder (and Piezo as a backup)</li> Err codemadness.org 70 i 4703 </ol> Err codemadness.org 70 i 4704 <p>The goal here is to get separate tracks for each speaker so that you can mix and edit them separately. In the case of Escaping Web, we went with an unfortunate third option:</p> Err codemadness.org 70 i 4705 <ol start="3"> Err codemadness.org 70 i 4706 <li>In-person, sharing one mic with no headphones (and occasionally over Skype with Charlie and Oz sharing one mic)</li> Err codemadness.org 70 i 4707 </ol> Err codemadness.org 70 i 4708 <p>Why? Why, oh why, did we go this route?</p> Err codemadness.org 70 i 4709 <p>Mostly because Oz already had this big ol' Blue Yeti mic, and we didn't want to invest more in a more expensive rig. This was probably (definitely) a mistake, which you can hear in some of the episodes like Grant's (sorry, Grant!). When you have one mic, even if it's a "good one", it's impossible to get the voices right. </p> Err codemadness.org 70 i 4710 <p>I, for one, am extremely loud. Oz, not so much. Our guests, somewhere in between. Can't you just fix this on the editing floor? Maybe... if you know what you're doing (I don't). Take this advice: like The Beatles discovered in the '60s, magic can happen in the studio edits when you've got multiple tracks to record on.</p> Err codemadness.org 70 i 4711 <p>I've gone on quite a bit already, and we're still in section one, but I should mention something about the Skype recording experience. It's great! I always hear podcast hosts grumbling something or other about Skype, so I was happy to discover that the experience of recording with <a href="https://www.ecamm.com/mac/callrecorder/">Skype Call Recorder</a> was seamless. It automatically splits your call into multiple tracks. I also fired up <a href="https://rogueamoeba.com/piezo/">Piezo</a> as a backup. We didn't go the full-redundancy route of having each person record their own audio and send it back to me, and we never got burned by this. But I can understand why this important. Also, we didn't go the route of ensuring that our remote guests had any sort of quality mics or anything like that. Maybe this is why <a href="https://www.npr.org/programs/fresh-air/">Terry Gross</a> has her guests go into a radio studio for their interviews. In our case, it was hard enough to align schedules that sending over recording equipment to our guests would have been a clear no-go.</p> Err codemadness.org 70 i 4712 <h3>2. Editing audio</h3> Err codemadness.org 70 i 4713 <p>This can be another rabbit hole time-warp. But it's also not that bad, and maybe even fun.</p> Err codemadness.org 70 i 4714 <p>Our shows ran about an hour or so, which meant we had about 90 minutes of audio, give-or-take. My goal was always to try to edit the show the same night that we recorded it. I wanted to just get it done. This worked the first few times, but less so after a while after the excitement of the first few episodes wore off. The edits became a looming thing on my to-do list for the next few days. One of those to-do's that's not that that hard... um, to do, but you've just got to sit down and do it. And ain't that just the challenge of all to-do lists?</p> Err codemadness.org 70 i 4715 <p>So, what is editing? I'm not totally sure. Here's what I tried to do:</p> Err codemadness.org 70 i 4716 <ul> Err codemadness.org 70 i 4717 <li>Remove weird loud noises and pops</li> Err codemadness.org 70 i 4718 <li>Remove background hum (the Bradfield office had an nice air conditioner thrumming at all times)</li> Err codemadness.org 70 i 4719 <li>Equalize and condense the tracks</li> Err codemadness.org 70 i 4720 <li>Make a funny intro segment (with music!)</li> Err codemadness.org 70 i 4721 </ul> Err codemadness.org 70 i 4722 <p>My tools were the free and awesome Audacity (I'm not sure if this works just yet on MacOS Catalina) and Apple Logic (although you could use the free GarageBand just as easily). I watched a few YouTube videos on editing podcasts, plunked around and did my best. The sound quality is pretty bad on some of the episodes. Someone with real editing chops could have made them sound better, but I think the real culprit was the lack of quality mic-ing of our voices.</p> Err codemadness.org 70 i 4723 <p>Admittedly, the thing I looked forward to most about the edits was coming up a variation on our intro music theme that I "composed" with the on-screen keyboard in Logic. I like to make weird little songs on Logic/Garageband while on flights, and this was too good an opportunity not to get a little musical and a little weird. Each episode is different. I hope you like them! </p> Err codemadness.org 70 i 4724 <h3>3-4. Hosting files and generating RSS feed</h3> Err codemadness.org 70 i 4725 <p>Now we're into what "folks in the biz" call "podcast hosting." I combined items 3 and 4 because these tend to go hand-in-hand.</p> Err codemadness.org 70 i 4726 <p>There are many podcast hosting companies out there. If you're following along, time was our biggest constraint in this entire endeavor, so we decided to outsource this part of the process rather than whip something together ourselves. </p> Err codemadness.org 70 i 4727 <p>I chose <a href="https://transistor.fm/?via=charles">Transistor.FM</a> for our podcast host. I listen to their maker podcast <a href="https://saas.transistor.fm/?via=charles">Build Your SASS</a>, and I've loved following along with Justin and Jon as they document their challenges and wins and concerns as they build Transistor from the ground up. In addition to making it really easy to upload your audio and generate your RSS feed, Transistor also provides (1) an automatic website generater for your show and (2) a listener analytic dashboard. They also provided fantastic customer support when I had a few questions about the process. Definitely worth the $20 a month for our young, growing show.</p> Err codemadness.org 70 i 4728 <p>Unfortunately, now that we've gone on hiatus and we don't know when we'll record our next episode, we decided to cancel our subscription. I've finally done the work of hacking together a simple solution to maintain an RSS feed for our show using public GitHub Pages repos to host our RSS feed and audio files. I think this will work fine, unless we suddenly get a ton of listeners out of the blue. But given what I saw in the Transistor analytics, I think we'll be okay for now.</p> Err codemadness.org 70 i 4729 <h3>5. Adding your RSS feed to the directories</h3> Err codemadness.org 70 i 4730 <p>One slight bummer is that, even with a podcast hosting service, you still need to submit your show to all the different providers separately. These are places like iTunes, Spotify, and Google. There's a few more, too. Stitcher is one. I don't know all of them off of the top of my head, but there are definitely a few more places that you can share your show. Still, the iTunes directory, Spotify, and Google are the big three that "matter."</p> Err codemadness.org 70 i 4731 <p>This is mainly a bummer in that, if you've made it this far, you're ready for your show to hit the world by storm! Don't forget to allocate enough time for your podcast to be (1) approved by iTunes and (2) appear in iTunes. If you're somebody who's expecting a big "launch day", be aware that this can take something like a week or so.</p> Err codemadness.org 70 i 4732 <p>To take the other side of this, I've actually now found it to be an advantage to have a direct relationship with each of the podcast directories, because I've been able to easily update the URL of <a href="https://escapingweb.github.io/rss/feed.rss">our RSS feed</a> to my new GitHub pages solution.</p> Err codemadness.org 70 i 4733 <p>Oh! Also, your show needs show art. Here's what I sketched up for Escaping Web, and Oz (for some strange reason) loved it, too.</p> Err codemadness.org 70 i 4734 <p><span Err codemadness.org 70 i 4735 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 4736 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 4737 > Err codemadness.org 70 i 4738 <span Err codemadness.org 70 i 4739 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 4740 style="padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGAABAAMBAAAAAAAAAAAAAAAAAAEEBQP/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAAB0LMycVcmfcFzQf/EABwQAAICAgMAAAAAAAAAAAAAAAECAAMRMQQSE//aAAgBAQABBQJ2cSvOH2RDqwnK2nstxE5d7+v/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/AR//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/AR//xAAcEAADAAEFAAAAAAAAAAAAAAAAASECEBIxQYH/2gAIAQEABj8CinQ9y1nBSrEmOKPD/8QAGhABAAMBAQEAAAAAAAAAAAAAAQARITFBUf/aAAgBAQABPyG+KsWifQvGukec8g437swL4+SjpTUehQfSKpcdoZQAhR5P/9oADAMBAAIAAwAAABAjMD7/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/EB//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/EB//xAAdEAEAAgIDAQEAAAAAAAAAAAABABEhYTFRgUFx/9oACAEBAAE/EGBW4BYlXenJ5uIiNpQDQXxyeQ8DPHbM85C0SzIVQuH0Yf1mcohpTphQZ2AF11co6QUNr9n/2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 4741 ></span> Err codemadness.org 70 i 4742 <img Err codemadness.org 70 i 4743 class="gatsby-resp-image-image" Err codemadness.org 70 i 4744 alt="ewlogo" Err codemadness.org 70 i 4745 title="ewlogo" Err codemadness.org 70 i 4746 src="/static/cf35047043f8693673a5235362b746ce/6aca1/ew.jpg" Err codemadness.org 70 i 4747 srcset="/static/cf35047043f8693673a5235362b746ce/d2f63/ew.jpg 163w, Err codemadness.org 70 i 4748 /static/cf35047043f8693673a5235362b746ce/c989d/ew.jpg 325w, Err codemadness.org 70 i 4749 /static/cf35047043f8693673a5235362b746ce/6aca1/ew.jpg 650w, Err codemadness.org 70 i 4750 /static/cf35047043f8693673a5235362b746ce/7c09c/ew.jpg 975w, Err codemadness.org 70 i 4751 /static/cf35047043f8693673a5235362b746ce/01ab0/ew.jpg 1300w, Err codemadness.org 70 i 4752 /static/cf35047043f8693673a5235362b746ce/12609/ew.jpg 3000w" Err codemadness.org 70 i 4753 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 4754 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 4755 loading="lazy" Err codemadness.org 70 i 4756 /> Err codemadness.org 70 i 4757 </span></p> Err codemadness.org 70 i 4758 <p>Our spider has a Nand gate on its back. Cute.</p> Err codemadness.org 70 i 4759 <h3>6. Finding sponsors!</h3> Err codemadness.org 70 i 4760 <p>Whoops. We never did this one. This is especially unfortunate, because I think I'd do a great ad-read.</p> Err codemadness.org 70 i 4761 <p>Promotion is hard, in general. Not just for podcasts. Maybe obscure cream can rise to the top amid the noise vortex (mixed metaphor?), and I think we were at least semi-creamy, and now I've lost my train of thought. But... yeah, we didn't focus on promotion and I think we could have done a better job at this. I give us a thumbs-down on this effort.</p> Err codemadness.org 70 i 4762 <p>We did set up a Twitter account for the show (<a href="https://twitter.com/escapingweb">@escapingweb</a>), and Transistor helped by auto-tweeting each new episode as soon it went live. I also tried to get the companies of our guests to re-tweet us, but this was only semi-successful. Like I said (did I say this?), content marketing is hard. We just wanted to talk to interesting people and put our show out there to the world for people to hear it. And we achieved that, so that's nice.</p> Err codemadness.org 70 i 4763 <p>In fact, I wanted to share some of the things that folks Tweeted about our show that make me happy:</p> Err codemadness.org 70 i 4764 <blockquote class="twitter-tweet"><p lang="en" dir="ltr">Highly recommend the <a href="https://twitter.com/EscapingWeb?ref_src=twsrc%5Etfw">@EscapingWeb</a> podcast for any programmers out there <br><br>Lots of great stories from folks who entered the field untraditional and are killing it 💪🏼<a href="https://twitter.com/hashtag/100DaysOfCode?src=hash&amp;ref_src=twsrc%5Etfw">#100DaysOfCode</a> <a href="https://twitter.com/hashtag/coding?src=hash&amp;ref_src=twsrc%5Etfw">#coding</a> <a href="https://twitter.com/hashtag/webDev?src=hash&amp;ref_src=twsrc%5Etfw">#webDev</a> <a href="https://t.co/eolaWhEl4U">https://t.co/eolaWhEl4U</a></p>&mdash; Clifford Fajardo (@CliffordFajard0) <a href="https://twitter.com/CliffordFajard0/status/1169634884081483778?ref_src=twsrc%5Etfw">September 5, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> Err codemadness.org 70 i 4765 <blockquote class="twitter-tweet"><p lang="en" dir="ltr">Agreed. <a href="https://twitter.com/EscapingWeb?ref_src=twsrc%5Etfw">@EscapingWeb</a> is one of my favorite podcasts. Excited to listen to the latest episode! <a href="https://t.co/h9xIyZ0klz">https://t.co/h9xIyZ0klz</a></p>&mdash; Madison Kanna (@Madisonkanna) <a href="https://twitter.com/Madisonkanna/status/1169748861734141953?ref_src=twsrc%5Etfw">September 5, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> Err codemadness.org 70 i 4766 <blockquote class="twitter-tweet"><p lang="en" dir="ltr">Great episode, but it was really difficult to hear Grant</p>&mdash; Vegard Stikbakke (@vegardstikbakke) <a href="https://twitter.com/vegardstikbakke/status/1197577967884492805?ref_src=twsrc%5Etfw">November 21, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> Err codemadness.org 70 i 4767 <p>Yes, I know, I know. The audio on the Grant episode is the worst. I'm sorry, world. But thank you to everyone who tweeted about the show and shared with their friends.</p> Err codemadness.org 70 i 4768 <p>Also, everyone says that leaving ratings on iTunes is "super-helpful", and I encouraged some folks to do that. We got thirteen 5-star reviews. Is that good? Probably not. But at least they were all fives! Two of my close friends even left a nice written review, and also one person I don't recognize at the moment (but probably also know personally).</p> Err codemadness.org 70 i 4769 <p><span Err codemadness.org 70 i 4770 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 4771 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 4772 > Err codemadness.org 70 i 4773 <span Err codemadness.org 70 i 4774 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 4775 style="padding-bottom: 45.39877300613497%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAABKklEQVQoz52SAW+CMBCF+///GkGdTNQQRCowrQQQFWhhvPWKLMS4ZdklX15L78q7tszzPDiOgyzL0Pc9KEin47quDVX1O00jwTgPQUw3eqauG53cmIJXSCnND++3G1injRCDn/+H+gRq1YMVtwYiv+OuXciHi7ZtDV3XQSk1QC6qyjglN6RjHtFIZWDHmMN1FthsNlitVkbDMPxmt/MhhEAScbwvhzzXdbHdbvVRccPhcEAQ7JCeBdjpJOCu1yZxZK3ntDkV0ppIc13EYVkW5vM5ZrOZgea2Vtu2sXhbIjmewS6XAkkcI89zXK9XlGVpdIS+F8VlaEu3SRfwGgWpWrCPRyvBfo/9E0EQwPd9UBd/DZZpB1RM5zASRdFjzBHHCdK8pDf147Oa8gXwa61JSrs3xgAAAABJRU5ErkJggg=='); background-size: cover; display: block;" Err codemadness.org 70 i 4776 ></span> Err codemadness.org 70 i 4777 <img Err codemadness.org 70 i 4778 class="gatsby-resp-image-image" Err codemadness.org 70 i 4779 alt="itunesratings" Err codemadness.org 70 i 4780 title="itunesratings" Err codemadness.org 70 i 4781 src="/static/e9803cd60b32c872b51bf1cc82832262/a6d36/itunesratings.png" Err codemadness.org 70 i 4782 srcset="/static/e9803cd60b32c872b51bf1cc82832262/222b7/itunesratings.png 163w, Err codemadness.org 70 i 4783 /static/e9803cd60b32c872b51bf1cc82832262/ff46a/itunesratings.png 325w, Err codemadness.org 70 i 4784 /static/e9803cd60b32c872b51bf1cc82832262/a6d36/itunesratings.png 650w, Err codemadness.org 70 i 4785 /static/e9803cd60b32c872b51bf1cc82832262/e548f/itunesratings.png 975w, Err codemadness.org 70 i 4786 /static/e9803cd60b32c872b51bf1cc82832262/3c492/itunesratings.png 1300w, Err codemadness.org 70 i 4787 /static/e9803cd60b32c872b51bf1cc82832262/f36fd/itunesratings.png 2488w" Err codemadness.org 70 i 4788 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 4789 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 4790 loading="lazy" Err codemadness.org 70 i 4791 /> Err codemadness.org 70 i 4792 </span></p> Err codemadness.org 70 i 4793 <p>Still, these tweets and these ratings and the personal texts we both received meant a lot to me and Oz. So, thank you!</p> Err codemadness.org 70 i 4794 <h2>What I learned from season one of Escaping Web (other than how to make a podcast)</h2> Err codemadness.org 70 i 4795 <p><strong>Interviewing is challenging.</strong> Duh. But I really thought that I'd be pretty good at this right away, and I wasn't. It's a craft that demands practice. I hope to do more of it in the future, if you'll allow.</p> Err codemadness.org 70 i 4796 <p><strong>Take to time to explore things deeply.</strong> This is critical to finding your path at work, in life, in the woods, wherever. And, yet, it's so hard to do this if you have a Nintendo Switch (that's why I still only have a Super Nintendo). Our guests found this time in many different ways (from sabbaticals to switching teams at work to taking online courses).</p> Err codemadness.org 70 i 4797 <p><strong>Find a friend who's way smarter than you and spend time with them.</strong> This is me talking about Oz, by the way. Every time I hang out with Oz, I learn something about computers or education or whatever that blows my mind and leaves with an even bigger backlog reading list. Thanks for season one, Oz!</p> Err codemadness.org 70 i 4798 <p>And, with that, the retrospective is complete! Onto the shownotes and audio. There are links to amazing things below, and I hope you find them useful in your travels. Here's a short preview of the ones that kept coming up again and again, which probably means something that I'll leave to the reader as an exercise:</p> Err codemadness.org 70 i 4799 <ul> Err codemadness.org 70 i 4800 <li><a href="https://www.cs.virginia.edu/~robins/YouAndYourResearch.html">You and Your Research - Richard Hamming</a></li> Err codemadness.org 70 i 4801 <li><a href="https://en.wikipedia.org/wiki/How_to_Solve_It">How to Solve It - George Polya</a></li> Err codemadness.org 70 i 4802 <li><a href="https://mitpress.mit.edu/sites/default/files/sicp/index.html">SICP</a></li> Err codemadness.org 70 i 4803 <li><a href="https://www.nand2tetris.org/">Nand2Tetris</a></li> Err codemadness.org 70 i 4804 <li><a href="https://www.amazon.com/Flow-Psychology-Experience-Perennial-Classics/dp/0061339202">Flow: The Pyschology of Optimal Experience by Mihaly Csikszentmihalyi</a></li> Err codemadness.org 70 i 4805 </ul> Err codemadness.org 70 i 4806 <h2>Shownotes and audio for Escaping Web</h2> Err codemadness.org 70 i 4807 <h3>1: A Quantum of Sad Things Happening To Felix Tripier of IonQ</h3> Err codemadness.org 70 i 4808 <p>Felix Tripier is a software engineer at a quantum computing company. He's also eating cold lasagna out of a coffee mug.</p> Err codemadness.org 70 i 4809 <blockquote> Err codemadness.org 70 i 4810 <p>Find out how Felix Tripier went from high-school and college dropout (watch out Silicon Valley, he's a double-dropout) to working as web developer at several Bay Area startups to presenting his open-source research at a quantum computing conference, leading to his current gig as a software engineer at IonQ, a quantum computing company. Charlie and Oz dig into Felix's study habits and learning goals, briefly dip into theoretical computing topics before coming up for air, and altogether forget to introduce themselves, Felix, or the podcast itself.</p> Err codemadness.org 70 i 4811 </blockquote> Err codemadness.org 70 i 4812 <audio controls="controls"> Err codemadness.org 70 i 4813 <source type="audio/mp3" src="https://escapingweb.github.io/audio/001_a_quantum_of_sad_things_happening_to_felix_tripier_of_ionq.mp3"></source> Err codemadness.org 70 i 4814 </audio> Err codemadness.org 70 i 4815 <p>Links and resources:</p> Err codemadness.org 70 i 4816 <ul> Err codemadness.org 70 i 4817 <li><a href="https://en.wikipedia.org/wiki/Grave_of_the_Fireflies">Grave of the Fireflies</a></li> Err codemadness.org 70 i 4818 <li> Err codemadness.org 70 i 4819 <p>Richard Hamming, "You And Your Research"</p> Err codemadness.org 70 i 4820 <ul> Err codemadness.org 70 i 4821 <li><a href="https://www.cs.virginia.edu/~robins/YouAndYourResearch.html">Transcript</a></li> Err codemadness.org 70 i 4822 <li><a href="https://www.youtube.com/watch?v=a1zDuOPkMSw">Video</a></li> Err codemadness.org 70 i 4823 </ul> Err codemadness.org 70 i 4824 </li> Err codemadness.org 70 i 4825 <li><a href="https://github.com/ftripier/Q-bug">Q-Bug: Felix's open source, web-based visual debugger for Quil quantum programs</a></li> Err codemadness.org 70 i 4826 <li><a href="https://twitter.com/FelixTripier%22">Felix Tripier on Twitter</a></li> Err codemadness.org 70 i 4827 </ul> Err codemadness.org 70 i 4828 <h3>2: Epic Slacking with Roo Harrigan of Slack</h3> Err codemadness.org 70 i 4829 <p>Roo Harrigan is the Strategic Engineering Projects Lead at Slack. She’s also the self-proclaimed Mentor Queen.</p> Err codemadness.org 70 i 4830 <blockquote> Err codemadness.org 70 i 4831 <p>Find out how Roo Harrigan went from an all-around generalist (product manager, project manager, sales demo'er, customer support agent) to a software engineer on the platform team at Slack, and now the Strategic Engineering Projects Lead reporting to Slack's CTO. Charlie and Oz dig into about Roo's tips for finding mentors, achieving flow state, and onboarding engineers. We also learn that Oz has never worked in the food services industry. Oh, and they remember to introduce themselves and Roo at the beginning. Progress!</p> Err codemadness.org 70 i 4832 </blockquote> Err codemadness.org 70 i 4833 <audio controls="controls"> Err codemadness.org 70 i 4834 <source type="audio/mp3" src="https://escapingweb.github.io/audio/002_epic_slacking_with_roo_harrigan_of_slack.mp3"></source> Err codemadness.org 70 i 4835 </audio> Err codemadness.org 70 i 4836 <p>Links and resources:</p> Err codemadness.org 70 i 4837 <ul> Err codemadness.org 70 i 4838 <li><a href="https://medium.com/hackbright-capstone/day-29-30-and-beyond-reflections-on-the-first-thing-i-made-2f9e2660a04a">Roo's 2015 blog post about becoming an engineer</a></li> Err codemadness.org 70 i 4839 <li><a href="http://frontsttrattoria.com/">Front St. Trattoria, Red Bank, New Jersey</a></li> Err codemadness.org 70 i 4840 <li><a href="https://hackbrightacademy.com">Hackbright Academy</a></li> Err codemadness.org 70 i 4841 <li><a href="https://get.slack.help/hc/en-us/articles/208423427-Set-a-reminder">Slack Reminders: Roo's first project at Slack</a></li> Err codemadness.org 70 i 4842 <li><a href="https://www.amazon.com/Flow-Psychology-Experience-Perennial-Classics/dp/0061339202">Flow: The Pyschology of Optimal Experience by Mihaly Csikszentmihalyi</a></li> Err codemadness.org 70 i 4843 <li><a href="https://twitter.com/roo_harrigan">Roo Harrigan on Twitter</a></li> Err codemadness.org 70 i 4844 </ul> Err codemadness.org 70 i 4845 <h3>3: Getting Time Serious with Richie Artoul of Uber</h3> Err codemadness.org 70 i 4846 <p>Richie Artoul is a software engineer on Uber's Observability infrastructure team. He also really likes distributed timeseries databases, like a lot.</p> Err codemadness.org 70 i 4847 <blockquote> Err codemadness.org 70 i 4848 <p>Find out how Richie Artoul went from bootcamp grad to infrastructure engineer at Uber, where he's now building their open source metrics platform M3 and their open source distributed timeseries database M3DB. Charlie and Oz dive into Richie's tips for side projects, reading programming textbooks, finding mentors at work, and navigating large engineering orgs like Uber. We also learn that Richie recently took up Jiu-Jitsu (just like Oz) - and now Charlie's hoping for a Vader / Obi Wan style "roll" in their future.</p> Err codemadness.org 70 i 4849 </blockquote> Err codemadness.org 70 i 4850 <audio controls="controls"> Err codemadness.org 70 i 4851 <source type="audio/mp3" src="https://escapingweb.github.io/audio/003_getting_time_serious_with_richie_artoul_of_uber.mp3"></source> Err codemadness.org 70 i 4852 </audio> Err codemadness.org 70 i 4853 <p>Links and resources:</p> Err codemadness.org 70 i 4854 <ul> Err codemadness.org 70 i 4855 <li><a href="https://eng.uber.com/optimizing-m3/">Optimizing MS: How Uber Halved Our Metrics Ingestion Latency by (Briefly) Forking the Go Compiler (Richie's post on the Uber engineering blog)</a></li> Err codemadness.org 70 i 4856 <li><a href="https://m3db.io/">M3 &#x26; M3DB</a></li> Err codemadness.org 70 i 4857 <li><a href="https://www.nand2tetris.org/">Nand2Tetris</a></li> Err codemadness.org 70 i 4858 <li><a href="https://en.wikipedia.org/wiki/Rubber_duck_debugging">Rubber duck debugging</a></li> Err codemadness.org 70 i 4859 <li><a href="https://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf">DynamoDB paper</a></li> Err codemadness.org 70 i 4860 <li><a href="https://www.foundationdb.org/">FoundationDB</a></li> Err codemadness.org 70 i 4861 <li><a href="https://jvns.ca/blog/brag-documents/">Write a brag document - Julia Evans</a></li> Err codemadness.org 70 i 4862 <li><a href="https://twitter.com/richardartoul">Richie Artoul on Twitter</a></li> Err codemadness.org 70 i 4863 </ul> Err codemadness.org 70 i 4864 <h3>4: A Graphic(s) Conversation with Lauren Budorick of Figma</h3> Err codemadness.org 70 i 4865 <p>Lauren Budorick is Graphics Software Engineer at Figma. She’s also read the 1989a .gif spec, yet still refuses to pronounce them as "JIFs."</p> Err codemadness.org 70 i 4866 <blockquote> Err codemadness.org 70 i 4867 <p>Find out how Lauren went from bootcamp grad to Graphics Software Engineer, first at Mapbox and now at Figma, where she's building their prototyping rendering engine. Charlie and Oz dig into Lauren's tips for learning linear algebra, how to see everything in the world as a triangle, and navigating a company without managers. Charlie and Oz also each try to recount stories of "achieving the impossible", and both painfully fail to remember the exact details of their anecdotes.</p> Err codemadness.org 70 i 4868 </blockquote> Err codemadness.org 70 i 4869 <audio controls="controls"> Err codemadness.org 70 i 4870 <source type="audio/mp3" src="https://escapingweb.github.io/audio/004_a_graphics_conversation_with_lauren_budorick_of_figma.mp3"></source> Err codemadness.org 70 i 4871 </audio> Err codemadness.org 70 i 4872 <p>Links and resources:</p> Err codemadness.org 70 i 4873 <ul> Err codemadness.org 70 i 4874 <li><a href="https://twitter.com/lbudorick/status/1149118970932281344">Lauren’s 😢.gif tweet</a></li> Err codemadness.org 70 i 4875 <li><a href="https://www.w3.org/Graphics/GIF/spec-gif89a.txt">The 1989 .gif spec (which is still the latest release!)</a></li> Err codemadness.org 70 i 4876 <li><a href="http://www.olsenhome.com/gif/BOB_89A.GIF">Demo of the 1989 .gif spec (as rendered by a modern browser)</a></li> Err codemadness.org 70 i 4877 <li><a href="http://ata4.github.io/gifiddle/#http://www.olsenhome.com/gif/BOB_89A.GIF">Demo of the 1989 .gif spec (as it was intended, in all its feature-laden glory)</a></li> Err codemadness.org 70 i 4878 <li><a href="https://www.theatlantic.com/technology/archive/2019/03/hottest-chat-app-teens-google-docs/584857/">The hottest chap app for teens is... Google Docs - by Taylor Lorenz</a></li> Err codemadness.org 70 i 4879 <li><a href="https://www.youtube.com/watch?v=Opzomu6mgYk">The Story of the SuperFX Chip: The chip that made Star Fox on the Super Nintendo possible</a></li> Err codemadness.org 70 i 4880 <li><a href="https://www.goodreads.com/book/show/7090.The_Soul_of_a_New_Machine">The Soul of a New Machine</a></li> Err codemadness.org 70 i 4881 <li><a href="https://www.youtube.com/watch?v=YFGY2BeyfzA">Lauren’s talk at Nordic.js (The Matrix is Everywhere: A primer on projections in Web Graphics)</a></li> Err codemadness.org 70 i 4882 <li><a href="https://www.3blue1brown.com/essence-of-linear-algebra-page">3Blue1Brown Linear Algebra YouTube series</a></li> Err codemadness.org 70 i 4883 <li><a href="https://www.figma.com/">Figma</a></li> Err codemadness.org 70 i 4884 <li><a href="https://www.figma.com/blog/section/engineering/">Figma's Engineering blog</a></li> Err codemadness.org 70 i 4885 <li><a href="https://www.mapbox.com/">Mapbox</a></li> Err codemadness.org 70 i 4886 <li><a href="https://hackbrightacademy.com/">Hackbright Academy</a></li> Err codemadness.org 70 i 4887 <li><a href="https://www.goodreads.com/book/show/222146.Masters_of_Doom">Masters of Doom</a></li> Err codemadness.org 70 i 4888 <li><a href="https://twitter.com/lbudorick">Lauren Budorick on Twitter</a></li> Err codemadness.org 70 i 4889 </ul> Err codemadness.org 70 i 4890 <h3>5: Learning Your Stripes with Grant Wu of Stripe</h3> Err codemadness.org 70 i 4891 <p>Grant Wu is a Software Engineer at Stripe on the Ruby Application Infrastructure team. He also hates scary movies, but still can’t stop himself from reading their IMDB synopses.</p> Err codemadness.org 70 i 4892 <blockquote> Err codemadness.org 70 i 4893 <p>Charlie and Oz dig into Grant’s study habits for self-guided learning (like building a toy kernel and toy compiler) — and how those low-level projects influenced his path to Stripe. The gang gets into it over bootcamps, baking bread, and learning to play music — all with the broader theme of exploring what it means to be creative. To top it off, we learn that Oz has a joint degree in math(s) and the (Australian) law?!</p> Err codemadness.org 70 i 4894 </blockquote> Err codemadness.org 70 i 4895 <audio controls="controls"> Err codemadness.org 70 i 4896 <source type="audio/mp3" src="https://escapingweb.github.io/audio/005_learning_your_stripes_with_grant_wu_of_stripe.mp3"></source> Err codemadness.org 70 i 4897 </audio> Err codemadness.org 70 i 4898 <p>Links and resources:</p> Err codemadness.org 70 i 4899 <ul> Err codemadness.org 70 i 4900 <li><a href="https://stripe.com">Stripe</a></li> Err codemadness.org 70 i 4901 <li><a href="https://sorbet.org/">Sorbet: Ruby Static Type Checker</a></li> Err codemadness.org 70 i 4902 <li><a href="https://increment.com/">Stripe’s Increment Magazine</a></li> Err codemadness.org 70 i 4903 <li><a href="https://press.stripe.com/">The Dream Machine, Stripe Press</a></li> Err codemadness.org 70 i 4904 <li><a href="https://www.goodreads.com/book/show/830502.It">IT by Stephen King</a></li> Err codemadness.org 70 i 4905 <li><a href="http://teachyourselfcs.com">teachyourselfcs.com</a></li> Err codemadness.org 70 i 4906 <li><a href="https://www.youtube.com/watch?v=v7s8m_-sA-Y">Matt O’Ree (Charlie’s guitar teacher in 8th grade and winner of the 2006 Guitar Center King of The Blues)</a></li> Err codemadness.org 70 i 4907 <li><a href="https://www.amazon.com/Flow-Psychology-Experience-Perennial-Classics/dp/0061339202">Flow: The Psychology of Optimal Experience by Mihaly Csikszentmihalyi (second time that Oz recommended this book!)</a></li> Err codemadness.org 70 i 4908 <li><a href="https://twitter.com/awkc1996/status/1171792460198174726">What happens when you use Excel for your genetics papers</a></li> Err codemadness.org 70 i 4909 <li><a href="https://www.hackreactor.com/">Hack Reactor</a></li> Err codemadness.org 70 i 4910 <li><a href="https://mitpress.mit.edu/sites/default/files/sicp/index.html">SICP</a></li> Err codemadness.org 70 i 4911 <li><a href="https://github.com/gw">Grant Wu on GitHub</a></li> Err codemadness.org 70 i 4912 <li><a href="https://www.linkedin.com/in/gwu01/">Grant Wu on LinkedIn</a></li> Err codemadness.org 70 i 4913 </ul> Err codemadness.org 70 i 4914 <h3>6: Algorithmically Speaking with Elliott Jin of Triplebyte</h3> Err codemadness.org 70 i 4915 <p>Elliott Jin is the Interview Team Tech Lead at Triplebyte. You're gonna hear a lot about Project Euler in this one.</p> Err codemadness.org 70 i 4916 <blockquote> Err codemadness.org 70 i 4917 <p>Charlie and Oz explore Elliott's path down the various intellectual rabbit holes (mostly Project Euler) that led him to software engineering at Dropbox, teaching the Algorithms course at Bradfield, and now leading Triplebyte's Interview tech team. Elliott also reveals the correct way to read a textbook (of which Charlie hadn't the foggiest), and Oz and Elliott try to explain to Charlie how they motivate students in their classes through "guided struggle."</p> Err codemadness.org 70 i 4918 </blockquote> Err codemadness.org 70 i 4919 <audio controls="controls"> Err codemadness.org 70 i 4920 <source type="audio/mp3" src="https://escapingweb.github.io/audio/006_algorithmically_speaking_with_elliott_jin_of_triplebyte.mp3"></source> Err codemadness.org 70 i 4921 </audio> Err codemadness.org 70 i 4922 <p>Links and resources:</p> Err codemadness.org 70 i 4923 <ul> Err codemadness.org 70 i 4924 <li><a href="https://projecteuler.net/">Project Euler</a></li> Err codemadness.org 70 i 4925 <li><a href="https://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628%22">K&#x26;R C book</a></li> Err codemadness.org 70 i 4926 <li><a href="https://en.wikipedia.org/wiki/Gorillas_(video_game)%22">Gorillas - QBasic</a></li> Err codemadness.org 70 i 4927 <li><a href="https://en.wikipedia.org/wiki/Windows_3.1x%22">Windows 3.1</a></li> Err codemadness.org 70 i 4928 <li><a href="https://en.wikipedia.org/wiki/Drugwars%22">Drugwars (TI-83)</a></li> Err codemadness.org 70 i 4929 <li><a href="https://en.wikipedia.org/wiki/Space_Trader_(Palm_OS)%22">Space Trader</a></li> Err codemadness.org 70 i 4930 <li><a href="https://twitter.com/jessitron/status/1183377840089305089%22">Computer Science Principles: Table of Contents tweet</a></li> Err codemadness.org 70 i 4931 <li><a href="https://web.nmsu.edu/~davidp/hpm-subm-2012-number-theory-course.pdf%22">Teaching Number Theory from Sophie Germain's Manuscripts: syllabus by David Pengelly</a></li> Err codemadness.org 70 i 4932 <li><a href="https://en.wikipedia.org/wiki/How_to_Solve_It%22">How to Solve It - George Polya</a></li> Err codemadness.org 70 i 4933 <li><a href="http://pleasingfungus.com/Silicon%20Zeroes/%22">Silicon Zeroes game</a></li> Err codemadness.org 70 i 4934 <li><a href="https://en.wikipedia.org/wiki/The_Diamond_Age%22">The Diamond Age - Neal Stephenson</a></li> Err codemadness.org 70 i 4935 <li><a href="https://www.amazon.com/Computability-Logic-George-S-Boolos/dp/0521701465%22">Computability and Logic</a></li> Err codemadness.org 70 i 4936 <li><a href="https://www.amazon.com/Elements-Programming-Alexander-Stepanov/dp/032163537X%22">Elements of Programming</a></li> Err codemadness.org 70 i 4937 <li><a href="https://mitpress.mit.edu/sites/default/files/sicp/index.html%22">SICP</a></li> Err codemadness.org 70 i 4938 <li><a href="http://augmentingcognition.com/ltm.html%22">Augmenting Long-term Memory: Michael Nielsen</a></li> Err codemadness.org 70 i 4939 <li><a href="https://www.amazon.com/Mind-Play-Shannon-Invented-Information/dp/1476766681%22">A Mind at Play (Claude Shannon biography) - Jimmy Soni and Rob Goodman</a></li> Err codemadness.org 70 i 4940 <li><a href="https://thebitplayer.com/%22">The Bit Player (Claude Shannon movie)</a></li> Err codemadness.org 70 i 4941 <li><a href="https://en.wikipedia.org/wiki/Useless_machine%22">Shannon's ultimate machine</a></li> Err codemadness.org 70 i 4942 <li><a href="https://www.dropbox.com%22">Dropbox</a></li> Err codemadness.org 70 i 4943 <li><a href="https://en.wikipedia.org/wiki/Formative_assessment%22">Formative assessment Wikipedia article</a></li> Err codemadness.org 70 i 4944 <li><a href="https://triplebyte.com/%22">Triplebyte</a></li> Err codemadness.org 70 i 4945 <li><a href="https://github.com/robot-dreams%22">Elliott Jin on GitHub</a></li> Err codemadness.org 70 i 4946 <li><a href="https://medium.com/@robot_dreams%22">Elliott Jin on Medium</a></li> Err codemadness.org 70 i 4947 </ul><![CDATA[Notes on Map and Compass Navigation]]>https://www.charlieharrington.com/notes-on-map-and-compass-navigationhttps://www.charlieharrington.com/notes-on-map-and-compass-navigationFri, 27 Mar 2020 00:00:00 GMT<p>Prior to the shelter-in-place quarantine, my friend Jason and I had been going on what I like to call "sixth grade classtrips" to various nerdy sites of interest in the Bay Area. First on our list was the Nike Missile site, which is right over the Golden Gate Bridge in Marin. I'll share my notes on that one soon. Our next big classtrip was scheduled to be the Stanford Linear Particle Accelerator Center in Menlo Park (maybe you've seen the signs for this on the highway and wondered...), but that's first on our list once everything's safe again.</p> Err codemadness.org 70 i 4948 <p>After the Nike Missile site, we decided to take a course on map &#x26; compass navigation through REI. Here's what we learned in four brisk hours standing on a field in Palo Alto:</p> Err codemadness.org 70 i 4949 <h2>Maps</h2> Err codemadness.org 70 i 4950 <ul> Err codemadness.org 70 i 4951 <li>Using a map is about using <strong>filters</strong> to reduce your search area</li> Err codemadness.org 70 i 4952 <li>Download <a href="https://www.usgs.gov/products/maps/topo-maps">free USGS maps</a>! Print online with <a href="https://caltopo.com/">Caltopo</a>. Best scale is 7 &#x26; 1/2 minute (there are 60 minutes in a degree)</li> Err codemadness.org 70 i 4953 <li> Err codemadness.org 70 i 4954 <p>SCOPE acronym:</p> Err codemadness.org 70 i 4955 <ul> Err codemadness.org 70 i 4956 <li>shape</li> Err codemadness.org 70 i 4957 <li>color</li> Err codemadness.org 70 i 4958 <li>orientation</li> Err codemadness.org 70 i 4959 <li>proportion (aka distance)</li> Err codemadness.org 70 i 4960 </ul> Err codemadness.org 70 i 4961 </li> Err codemadness.org 70 i 4962 <li>You don't have to go in order of the acronym!</li> Err codemadness.org 70 i 4963 </ul> Err codemadness.org 70 i 4964 <h3>Shape</h3> Err codemadness.org 70 i 4965 <ul> Err codemadness.org 70 i 4966 <li>Look for valleys, ridges, hills with flat tops, gulleys, hills in a row (e.g. 3 hills in a straight line), shape of the tree line</li> Err codemadness.org 70 i 4967 <li> Err codemadness.org 70 i 4968 <p>Hidden Valley Ranch Salad Dressing</p> Err codemadness.org 70 i 4969 <ul> Err codemadness.org 70 i 4970 <li>Another acronym. Used by the "military"</li> Err codemadness.org 70 i 4971 <li>Hills Valleys Ridges Spurs Depressions</li> Err codemadness.org 70 i 4972 <li>These are the landshapes to look for on your map and in the area</li> Err codemadness.org 70 i 4973 </ul> Err codemadness.org 70 i 4974 </li> Err codemadness.org 70 i 4975 </ul> Err codemadness.org 70 i 4976 <h3>Color</h3> Err codemadness.org 70 i 4977 <ul> Err codemadness.org 70 i 4978 <li>green = trees, white = not trees</li> Err codemadness.org 70 i 4979 <li>How to tell if you're in trees? Look up, if you see branches, you're in a green area of the map</li> Err codemadness.org 70 i 4980 <li>Sometimes white areas will have scrub brushes and plantlife, don't be confused</li> Err codemadness.org 70 i 4981 <li>Sometimes the tops of green hills will have white scrub / chaparral areas</li> Err codemadness.org 70 i 4982 <li>red or black indicates a human-made object</li> Err codemadness.org 70 i 4983 <li>trails are often not on a map. Many of the surveys were done decades ago, before these trails</li> Err codemadness.org 70 i 4984 </ul> Err codemadness.org 70 i 4985 <h3>Orientation</h3> Err codemadness.org 70 i 4986 <ul> Err codemadness.org 70 i 4987 <li>Use compass to orient the map, then place the map on the ground. This allows you to walk around the map in any direction and see the same things in real-life as the map</li> Err codemadness.org 70 i 4988 <li>Maps usually point North</li> Err codemadness.org 70 i 4989 </ul> Err codemadness.org 70 i 4990 <h3>Proportion (Distance)</h3> Err codemadness.org 70 i 4991 <ul> Err codemadness.org 70 i 4992 <li>Measured as the crow flies, not on the ground</li> Err codemadness.org 70 i 4993 <li>Maps have a scale on them</li> Err codemadness.org 70 i 4994 <li>You can use the string of your compass to trace a trail, and then make the string straight and taut to get the distance of a trail using the map's ruler / scale</li> Err codemadness.org 70 i 4995 <li>Good skill to learn: look at object in the distance and estimate the distance. Use a range and keep getting tighter (e.g. it's somewhere between 10 ft and a mile away)</li> Err codemadness.org 70 i 4996 <li>Make sure you know if your map is in miles or kilometers</li> Err codemadness.org 70 i 4997 </ul> Err codemadness.org 70 i 4998 <h3>Elevation</h3> Err codemadness.org 70 i 4999 <ul> Err codemadness.org 70 i 5000 <li>Measures vertical distance above sea level in feet</li> Err codemadness.org 70 i 5001 <li>5280 feet in a mile</li> Err codemadness.org 70 i 5002 <li>Contour lines have a standard elevation gap between them (e.g. 40 ft), but the land between them can fluctuate in real life as you pass through them (it's not a smooth linear ascent)</li> Err codemadness.org 70 i 5003 <li>Maps have "index" contour lines that state their elevation</li> Err codemadness.org 70 i 5004 <li>"Intermediate" contour lines don't state their elevation, but can be inferred from the index lines</li> Err codemadness.org 70 i 5005 <li>When lines are close together = STEEP!</li> Err codemadness.org 70 i 5006 <li>Fun experiment: slice a potato to measure contour lines! <em>Note I did this when I got home, as you can see here:</em></li> Err codemadness.org 70 i 5007 </ul> Err codemadness.org 70 i 5008 <p><span Err codemadness.org 70 i 5009 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 5010 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 5011 > Err codemadness.org 70 i 5012 <a Err codemadness.org 70 i 5013 class="gatsby-resp-image-link" Err codemadness.org 70 i 5014 href="/static/cd59ff499985ae9c272723cfe801cbf8/d2602/p1.jpg" Err codemadness.org 70 i 5015 style="display: block" Err codemadness.org 70 i 5016 target="_blank" Err codemadness.org 70 i 5017 rel="noopener" Err codemadness.org 70 i 5018 > Err codemadness.org 70 i 5019 <span Err codemadness.org 70 i 5020 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 5021 style="padding-bottom: 74.84662576687117%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAMEAQL/xAAWAQEBAQAAAAAAAAAAAAAAAAADAAL/2gAMAwEAAhADEAAAAXLp4NLDCz//xAAaEAACAgMAAAAAAAAAAAAAAAABAwARAhIT/9oACAEBAAEFAlXqnM9IBQCwGT//xAAVEQEBAAAAAAAAAAAAAAAAAAABEP/aAAgBAwEBPwEn/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAGRAAAgMBAAAAAAAAAAAAAAAAABEBEBIh/9oACAEBAAY/AhTLdcN1/8QAGhABAQEAAwEAAAAAAAAAAAAAAQARMVGh0f/aAAgBAQABPyHIhO+MNllHq5wHq1v/2gAMAwEAAgADAAAAEGM//8QAFhEBAQEAAAAAAAAAAAAAAAAAARAR/9oACAEDAQE/EEA7P//EABYRAQEBAAAAAAAAAAAAAAAAABEBEP/aAAgBAgEBPxCrn//EABoQAQEBAQEBAQAAAAAAAAAAABEBACExUaH/2gAIAQEAAT8QCiS0dOXJfcV3kyB5IHX7invTYP3FIz2O/9k='); background-size: cover; display: block;" Err codemadness.org 70 i 5022 ></span> Err codemadness.org 70 i 5023 <img Err codemadness.org 70 i 5024 class="gatsby-resp-image-image" Err codemadness.org 70 i 5025 alt="potato1" Err codemadness.org 70 i 5026 title="potato1" Err codemadness.org 70 i 5027 src="/static/cd59ff499985ae9c272723cfe801cbf8/6aca1/p1.jpg" Err codemadness.org 70 i 5028 srcset="/static/cd59ff499985ae9c272723cfe801cbf8/d2f63/p1.jpg 163w, Err codemadness.org 70 i 5029 /static/cd59ff499985ae9c272723cfe801cbf8/c989d/p1.jpg 325w, Err codemadness.org 70 i 5030 /static/cd59ff499985ae9c272723cfe801cbf8/6aca1/p1.jpg 650w, Err codemadness.org 70 i 5031 /static/cd59ff499985ae9c272723cfe801cbf8/7c09c/p1.jpg 975w, Err codemadness.org 70 i 5032 /static/cd59ff499985ae9c272723cfe801cbf8/01ab0/p1.jpg 1300w, Err codemadness.org 70 i 5033 /static/cd59ff499985ae9c272723cfe801cbf8/d2602/p1.jpg 4032w" Err codemadness.org 70 i 5034 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 5035 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 5036 loading="lazy" Err codemadness.org 70 i 5037 /> Err codemadness.org 70 i 5038 </a> Err codemadness.org 70 i 5039 </span></p> Err codemadness.org 70 i 5040 <p><span Err codemadness.org 70 i 5041 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 5042 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 5043 > Err codemadness.org 70 i 5044 <a Err codemadness.org 70 i 5045 class="gatsby-resp-image-link" Err codemadness.org 70 i 5046 href="/static/95024dcb4b9020a04454a93913894a99/d2602/p2.jpg" Err codemadness.org 70 i 5047 style="display: block" Err codemadness.org 70 i 5048 target="_blank" Err codemadness.org 70 i 5049 rel="noopener" Err codemadness.org 70 i 5050 > Err codemadness.org 70 i 5051 <span Err codemadness.org 70 i 5052 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 5053 style="padding-bottom: 74.84662576687117%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAGAABAAMBAAAAAAAAAAAAAAAAAAIDBAX/xAAVAQEBAAAAAAAAAAAAAAAAAAACA//aAAwDAQACEAMQAAABdHNfKswh/8QAGxAAAgEFAAAAAAAAAAAAAAAAAQISAAMQESH/2gAIAQEAAQUCkZDDW9heLX//xAAWEQEBAQAAAAAAAAAAAAAAAAARARD/2gAIAQMBAT8BoZ//xAAVEQEBAAAAAAAAAAAAAAAAAAABEP/aAAgBAgEBPwEn/8QAGBAAAgMAAAAAAAAAAAAAAAAAABABIXH/2gAIAQEABj8Cx0Qv/8QAGxABAAIDAQEAAAAAAAAAAAAAAQARITFBUaH/2gAIAQEAAT8hXuYOJoJMduUHZ9gQOwlnk//aAAwDAQACAAMAAAAQEB//xAAXEQADAQAAAAAAAAAAAAAAAAABEBEx/9oACAEDAQE/EKBNX//EABcRAQADAAAAAAAAAAAAAAAAABEBEDH/2gAIAQIBAT8QTLlf/8QAGRABAQEBAQEAAAAAAAAAAAAAAREAMSFh/9oACAEBAAE/ELiUHjjmPCSm78J+OoESkfAaYaAZpdL9rv/Z'); background-size: cover; display: block;" Err codemadness.org 70 i 5054 ></span> Err codemadness.org 70 i 5055 <img Err codemadness.org 70 i 5056 class="gatsby-resp-image-image" Err codemadness.org 70 i 5057 alt="potato1" Err codemadness.org 70 i 5058 title="potato1" Err codemadness.org 70 i 5059 src="/static/95024dcb4b9020a04454a93913894a99/6aca1/p2.jpg" Err codemadness.org 70 i 5060 srcset="/static/95024dcb4b9020a04454a93913894a99/d2f63/p2.jpg 163w, Err codemadness.org 70 i 5061 /static/95024dcb4b9020a04454a93913894a99/c989d/p2.jpg 325w, Err codemadness.org 70 i 5062 /static/95024dcb4b9020a04454a93913894a99/6aca1/p2.jpg 650w, Err codemadness.org 70 i 5063 /static/95024dcb4b9020a04454a93913894a99/7c09c/p2.jpg 975w, Err codemadness.org 70 i 5064 /static/95024dcb4b9020a04454a93913894a99/01ab0/p2.jpg 1300w, Err codemadness.org 70 i 5065 /static/95024dcb4b9020a04454a93913894a99/d2602/p2.jpg 4032w" Err codemadness.org 70 i 5066 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 5067 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 5068 loading="lazy" Err codemadness.org 70 i 5069 /> Err codemadness.org 70 i 5070 </a> Err codemadness.org 70 i 5071 </span></p> Err codemadness.org 70 i 5072 <p><span Err codemadness.org 70 i 5073 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 5074 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 5075 > Err codemadness.org 70 i 5076 <a Err codemadness.org 70 i 5077 class="gatsby-resp-image-link" Err codemadness.org 70 i 5078 href="/static/7e4d6074a9f546fb80b165746dda1325/9568a/p5.jpg" Err codemadness.org 70 i 5079 style="display: block" Err codemadness.org 70 i 5080 target="_blank" Err codemadness.org 70 i 5081 rel="noopener" Err codemadness.org 70 i 5082 > Err codemadness.org 70 i 5083 <span Err codemadness.org 70 i 5084 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 5085 style="padding-bottom: 133.12883435582822%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAECAwT/xAAXAQEBAQEAAAAAAAAAAAAAAAAAAwEC/9oADAMBAAIQAxAAAAHfPsqdGWOZUDaJD//EABwQAAICAgMAAAAAAAAAAAAAAAACAREDEAQSQf/aAAgBAQABBQJ3XAJyZlpmh8aOKipqzsWea//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQMBAT8BH//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQIBAT8BH//EABoQAAICAwAAAAAAAAAAAAAAAAABESIwMTL/2gAIAQEABj8C1LEoOWyyKrB//8QAGxABAAIDAQEAAAAAAAAAAAAAAQARECExcUH/2gAIAQEAAT8h1BZjcuL8jKvQRUbEnOTybya9IOX/2gAMAwEAAgADAAAAEKs3sP/EABYRAQEBAAAAAAAAAAAAAAAAABEQAf/aAAgBAwEBPxBwhP/EABURAQEAAAAAAAAAAAAAAAAAAAAR/9oACAECAQE/EFVX/8QAHhABAQACAgIDAAAAAAAAAAAAAREAITFBYaEQUZH/2gAIAQEAAT8QhRGl4DzgNpUMTIsKdM9uETJBqYBGvsb/AHKjUzUqQXsx017MvkD4LiJr38K3nP/Z'); background-size: cover; display: block;" Err codemadness.org 70 i 5086 ></span> Err codemadness.org 70 i 5087 <img Err codemadness.org 70 i 5088 class="gatsby-resp-image-image" Err codemadness.org 70 i 5089 alt="potato5" Err codemadness.org 70 i 5090 title="potato5" Err codemadness.org 70 i 5091 src="/static/7e4d6074a9f546fb80b165746dda1325/6aca1/p5.jpg" Err codemadness.org 70 i 5092 srcset="/static/7e4d6074a9f546fb80b165746dda1325/d2f63/p5.jpg 163w, Err codemadness.org 70 i 5093 /static/7e4d6074a9f546fb80b165746dda1325/c989d/p5.jpg 325w, Err codemadness.org 70 i 5094 /static/7e4d6074a9f546fb80b165746dda1325/6aca1/p5.jpg 650w, Err codemadness.org 70 i 5095 /static/7e4d6074a9f546fb80b165746dda1325/7c09c/p5.jpg 975w, Err codemadness.org 70 i 5096 /static/7e4d6074a9f546fb80b165746dda1325/01ab0/p5.jpg 1300w, Err codemadness.org 70 i 5097 /static/7e4d6074a9f546fb80b165746dda1325/9568a/p5.jpg 3024w" Err codemadness.org 70 i 5098 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 5099 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 5100 loading="lazy" Err codemadness.org 70 i 5101 /> Err codemadness.org 70 i 5102 </a> Err codemadness.org 70 i 5103 </span></p> Err codemadness.org 70 i 5104 <ul> Err codemadness.org 70 i 5105 <li>Contour lines are shaped like upside down V when there is a small creek valley. The V points uphill, away from the water direction</li> Err codemadness.org 70 i 5106 </ul> Err codemadness.org 70 i 5107 <p><span Err codemadness.org 70 i 5108 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 5109 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 5110 > Err codemadness.org 70 i 5111 <a Err codemadness.org 70 i 5112 class="gatsby-resp-image-link" Err codemadness.org 70 i 5113 href="/static/031c2a9d16ebcff723645aaf9a18bd29/9568a/v.jpg" Err codemadness.org 70 i 5114 style="display: block" Err codemadness.org 70 i 5115 target="_blank" Err codemadness.org 70 i 5116 rel="noopener" Err codemadness.org 70 i 5117 > Err codemadness.org 70 i 5118 <span Err codemadness.org 70 i 5119 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 5120 style="padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGQABAAMBAQAAAAAAAAAAAAAAAAECAwQF/8QAFQEBAQAAAAAAAAAAAAAAAAAAAQD/2gAMAwEAAhADEAAAAfU05pKiBbXGzA//xAAZEAADAQEBAAAAAAAAAAAAAAAAAQIRAyL/2gAIAQEAAQUC0R0XvSa2qXvDEPlLf//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQMBAT8BH//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQIBAT8BH//EABsQAAEEAwAAAAAAAAAAAAAAAAEAECKBAgMR/9oACAEBAAY/AmMdlMUY50X6v//EABwQAQEAAQUBAAAAAAAAAAAAAAEAIRExQVFhkf/aAAgBAQABPyEXUpHIevEMwpMrctZeXfAwTl+x0E1Wur7f/9oADAMBAAIAAwAAABDvP8D/xAAWEQEBAQAAAAAAAAAAAAAAAAAQARH/2gAIAQMBAT8Q0h//xAAWEQEBAQAAAAAAAAAAAAAAAAAQARH/2gAIAQIBAT8Qwp//xAAbEAEBAAMBAQEAAAAAAAAAAAABEQAhMUFxof/aAAgBAQABPxCkoD3eUcRgWuFaOYhQ/MPXEAE1j0KiR6DYeY5TjxoyaavmAtbWMOTP/9k='); background-size: cover; display: block;" Err codemadness.org 70 i 5121 ></span> Err codemadness.org 70 i 5122 <img Err codemadness.org 70 i 5123 class="gatsby-resp-image-image" Err codemadness.org 70 i 5124 alt="vshape" Err codemadness.org 70 i 5125 title="vshape" Err codemadness.org 70 i 5126 src="/static/031c2a9d16ebcff723645aaf9a18bd29/6aca1/v.jpg" Err codemadness.org 70 i 5127 srcset="/static/031c2a9d16ebcff723645aaf9a18bd29/d2f63/v.jpg 163w, Err codemadness.org 70 i 5128 /static/031c2a9d16ebcff723645aaf9a18bd29/c989d/v.jpg 325w, Err codemadness.org 70 i 5129 /static/031c2a9d16ebcff723645aaf9a18bd29/6aca1/v.jpg 650w, Err codemadness.org 70 i 5130 /static/031c2a9d16ebcff723645aaf9a18bd29/7c09c/v.jpg 975w, Err codemadness.org 70 i 5131 /static/031c2a9d16ebcff723645aaf9a18bd29/01ab0/v.jpg 1300w, Err codemadness.org 70 i 5132 /static/031c2a9d16ebcff723645aaf9a18bd29/9568a/v.jpg 3024w" Err codemadness.org 70 i 5133 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 5134 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 5135 loading="lazy" Err codemadness.org 70 i 5136 /> Err codemadness.org 70 i 5137 </a> Err codemadness.org 70 i 5138 </span></p> Err codemadness.org 70 i 5139 <ul> Err codemadness.org 70 i 5140 <li>Spurs look like shallow U shapes</li> Err codemadness.org 70 i 5141 </ul> Err codemadness.org 70 i 5142 <h2>Compass</h2> Err codemadness.org 70 i 5143 <ul> Err codemadness.org 70 i 5144 <li>Four skills to learn:</li> Err codemadness.org 70 i 5145 <li> Err codemadness.org 70 i 5146 <p>Real World</p> Err codemadness.org 70 i 5147 <ul> Err codemadness.org 70 i 5148 <li>(1) Follow a field bearing</li> Err codemadness.org 70 i 5149 <li>(2) Take a bearing of an object</li> Err codemadness.org 70 i 5150 </ul> Err codemadness.org 70 i 5151 </li> Err codemadness.org 70 i 5152 <li> Err codemadness.org 70 i 5153 <p>"Map World"</p> Err codemadness.org 70 i 5154 <ul> Err codemadness.org 70 i 5155 <li>(3) Find object on map and measure angle</li> Err codemadness.org 70 i 5156 <li>(4) Start with angle and draw on the map</li> Err codemadness.org 70 i 5157 </ul> Err codemadness.org 70 i 5158 </li> Err codemadness.org 70 i 5159 <li>Angles are always measured clockwise</li> Err codemadness.org 70 i 5160 </ul> Err codemadness.org 70 i 5161 <p><span Err codemadness.org 70 i 5162 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 5163 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 5164 > Err codemadness.org 70 i 5165 <a Err codemadness.org 70 i 5166 class="gatsby-resp-image-link" Err codemadness.org 70 i 5167 href="/static/71c143c98f02af3d4502f27d460e7d2f/e12a7/compass.jpg" Err codemadness.org 70 i 5168 style="display: block" Err codemadness.org 70 i 5169 target="_blank" Err codemadness.org 70 i 5170 rel="noopener" Err codemadness.org 70 i 5171 > Err codemadness.org 70 i 5172 <span Err codemadness.org 70 i 5173 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 5174 style="padding-bottom: 80.98159509202453%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAQABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAMBAgX/xAAVAQEBAAAAAAAAAAAAAAAAAAABAP/aAAwDAQACEAMQAAAB0xdiYSD/AP/EABkQAAIDAQAAAAAAAAAAAAAAAAABAhARQf/aAAgBAQABBQLTuoRGv//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABQQAQAAAAAAAAAAAAAAAAAAACD/2gAIAQEABj8CX//EABoQAQACAwEAAAAAAAAAAAAAAAEAMRAhUeH/2gAIAQEAAT8hTUOnbUIAKIl9Mf/aAAwDAQACAAMAAAAQDy//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/ED//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/ED//xAAaEAEBAQADAQAAAAAAAAAAAAABEQAhMXFB/9oACAEBAAE/EEokXuZh3qeDIKNv0HBrLzGc1i8wxxv/2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 5175 ></span> Err codemadness.org 70 i 5176 <img Err codemadness.org 70 i 5177 class="gatsby-resp-image-image" Err codemadness.org 70 i 5178 alt="compass" Err codemadness.org 70 i 5179 title="compass" Err codemadness.org 70 i 5180 src="/static/71c143c98f02af3d4502f27d460e7d2f/6aca1/compass.jpg" Err codemadness.org 70 i 5181 srcset="/static/71c143c98f02af3d4502f27d460e7d2f/d2f63/compass.jpg 163w, Err codemadness.org 70 i 5182 /static/71c143c98f02af3d4502f27d460e7d2f/c989d/compass.jpg 325w, Err codemadness.org 70 i 5183 /static/71c143c98f02af3d4502f27d460e7d2f/6aca1/compass.jpg 650w, Err codemadness.org 70 i 5184 /static/71c143c98f02af3d4502f27d460e7d2f/7c09c/compass.jpg 975w, Err codemadness.org 70 i 5185 /static/71c143c98f02af3d4502f27d460e7d2f/01ab0/compass.jpg 1300w, Err codemadness.org 70 i 5186 /static/71c143c98f02af3d4502f27d460e7d2f/e12a7/compass.jpg 2948w" Err codemadness.org 70 i 5187 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 5188 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 5189 loading="lazy" Err codemadness.org 70 i 5190 /> Err codemadness.org 70 i 5191 </a> Err codemadness.org 70 i 5192 </span></p> Err codemadness.org 70 i 5193 <ul> Err codemadness.org 70 i 5194 <li>If you forget the compass directions, it spells "WE" left to right.</li> Err codemadness.org 70 i 5195 <li>True north (north pole) vs Magnetic North (which can move around!)</li> Err codemadness.org 70 i 5196 <li>Declination is number of angles from true north to magnetic north</li> Err codemadness.org 70 i 5197 <li>Always keep your moving needle on the declination</li> Err codemadness.org 70 i 5198 <li>Angle of declination needs to be known for your area (look this up!)</li> Err codemadness.org 70 i 5199 </ul> Err codemadness.org 70 i 5200 <p><span Err codemadness.org 70 i 5201 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 5202 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 5203 > Err codemadness.org 70 i 5204 <a Err codemadness.org 70 i 5205 class="gatsby-resp-image-link" Err codemadness.org 70 i 5206 href="/static/19346824ea175b6cf4796d0c7637dbd4/dbde2/declination.jpg" Err codemadness.org 70 i 5207 style="display: block" Err codemadness.org 70 i 5208 target="_blank" Err codemadness.org 70 i 5209 rel="noopener" Err codemadness.org 70 i 5210 > Err codemadness.org 70 i 5211 <span Err codemadness.org 70 i 5212 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 5213 style="padding-bottom: 26.380368098159508%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAFABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAME/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhADEAAAAd9AqI//xAAWEAEBAQAAAAAAAAAAAAAAAAAAAQL/2gAIAQEAAQUCZR//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAUEAEAAAAAAAAAAAAAAAAAAAAQ/9oACAEBAAY/An//xAAZEAACAwEAAAAAAAAAAAAAAAABIQAQETH/2gAIAQEAAT8hAx0Bdn//2gAMAwEAAgADAAAAEIAv/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPxA//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPxA//8QAFxABAQEBAAAAAAAAAAAAAAAAASEAEf/aAAgBAQABPxAAgtwvOtMvNb//2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 5214 ></span> Err codemadness.org 70 i 5215 <img Err codemadness.org 70 i 5216 class="gatsby-resp-image-image" Err codemadness.org 70 i 5217 alt="declination" Err codemadness.org 70 i 5218 title="declination" Err codemadness.org 70 i 5219 src="/static/19346824ea175b6cf4796d0c7637dbd4/6aca1/declination.jpg" Err codemadness.org 70 i 5220 srcset="/static/19346824ea175b6cf4796d0c7637dbd4/d2f63/declination.jpg 163w, Err codemadness.org 70 i 5221 /static/19346824ea175b6cf4796d0c7637dbd4/c989d/declination.jpg 325w, Err codemadness.org 70 i 5222 /static/19346824ea175b6cf4796d0c7637dbd4/6aca1/declination.jpg 650w, Err codemadness.org 70 i 5223 /static/19346824ea175b6cf4796d0c7637dbd4/7c09c/declination.jpg 975w, Err codemadness.org 70 i 5224 /static/19346824ea175b6cf4796d0c7637dbd4/01ab0/declination.jpg 1300w, Err codemadness.org 70 i 5225 /static/19346824ea175b6cf4796d0c7637dbd4/dbde2/declination.jpg 2815w" Err codemadness.org 70 i 5226 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 5227 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 5228 loading="lazy" Err codemadness.org 70 i 5229 /> Err codemadness.org 70 i 5230 </a> Err codemadness.org 70 i 5231 </span></p> Err codemadness.org 70 i 5232 <ul> Err codemadness.org 70 i 5233 <li>Angle of declination grows larger as you move north</li> Err codemadness.org 70 i 5234 <li>A compass in the Southern hemisphere isn't going to work very well</li> Err codemadness.org 70 i 5235 <li>North Star does point to true North (only object in sky that doesn't move as the Earth rotates)</li> Err codemadness.org 70 i 5236 </ul> Err codemadness.org 70 i 5237 <h2>Triangulation (my favorite part of the class!)</h2> Err codemadness.org 70 i 5238 <ul> Err codemadness.org 70 i 5239 <li>Brings it all together! This helps you "locate" yourself on a map.</li> Err codemadness.org 70 i 5240 <li>General overview: Finding your location a map by taking three field bearings, making their angles, and then putting compass on the map and drawing a straight line with their angles</li> Err codemadness.org 70 i 5241 <li>You definitely need to know exactly where the objects of interest are on the map for this to work (e.g. a mountaintop, a water-tower, etc)</li> Err codemadness.org 70 i 5242 <li> Err codemadness.org 70 i 5243 <p>Steps:</p> Err codemadness.org 70 i 5244 <ol> Err codemadness.org 70 i 5245 <li>Take bearing of an object by pointing compass at object and moving the dial until the needed is at the angle of declination</li> Err codemadness.org 70 i 5246 <li>Move compass to map and line it up so that it is pointing to angle of declination (but don't change anything on your compass dial!)</li> Err codemadness.org 70 i 5247 <li>Draw a straight line</li> Err codemadness.org 70 i 5248 <li>Repeat 2 - 3 times with different objects</li> Err codemadness.org 70 i 5249 </ol> Err codemadness.org 70 i 5250 </li> Err codemadness.org 70 i 5251 <li>At this point, you should have created a "triangle" where you are likely somewhere inside!</li> Err codemadness.org 70 i 5252 </ul><![CDATA[Dean of Discipline]]>https://www.charlieharrington.com/dean-of-disciplinehttps://www.charlieharrington.com/dean-of-disciplineSun, 01 Mar 2020 00:00:00 GMT<p>When I first got to Red Bank Catholic High School, I’d hear some manner of the following all the time:</p> Err codemadness.org 70 i 5253 <p>“Your dad is the best”</p> Err codemadness.org 70 i 5254 <p>“Your dad is so scary”</p> Err codemadness.org 70 i 5255 <p>“Your dad is the MAN”</p> Err codemadness.org 70 i 5256 <p>I’d nod along, because often these comments were from some of the more notorious characters at school. But eventually, I cracked:</p> Err codemadness.org 70 i 5257 <p>“Yeah, he is! But wait til you meet him. Because Mr. Harrington isn't my dad - he's my UNCLE!”</p> Err codemadness.org 70 i 5258 <p>Yes, I will finally admit here that Uncle Dennis gave me a bit of a head start at RBC. But only by throwing me alongside the summer detention kids as part of the St. James / RBC Maintenance Crew in the summers before freshman, sophomore, and junior years.</p> Err codemadness.org 70 i 5259 <p>To this day, it was the best job I’ve ever had. We smashed walls with a sledgehammer, we scraped gum off carpets with Gum-Freez (and sprayed each other in the arms with it, too), we changed the codes on every single locker. And we got a paycheck for it! One day we were told that there were 3 pigeons on the 4th floor. That was our mission. Good luck!</p> Err codemadness.org 70 i 5260 <p>I learned a lot about my uncle from his other charges in summer detention. Even though this man was their ostensible gate-keeper, they respected and adored him. When I told them that my internment was voluntary, they nodded. They understood.</p> Err codemadness.org 70 i 5261 <p>In my dad’s side of the family, the men are commanding, stubborn, strong, and loyal. (No offense, mom’s side). Grandpa Corn, his brothers Willie, Mike, and Dan, my dad.</p> Err codemadness.org 70 i 5262 <p>Uncle Dennis, Mr. Harrington, is no exception. He breaks the mold.</p> Err codemadness.org 70 i 5263 <p>Perhaps this comes from growing up in 1950s and 60s Keansburg - a place that is in my mind a combination of THE WONDER YEARS, A CHRISTMAS STORY, LEAVE IT TO BEAVER, and, of course, DENNIS THE MENACE.</p> Err codemadness.org 70 i 5264 <p>Getting a HARRINGTON in your morning homeroom wasn’t a curse - it was a blessing. You were invited into that inner sanctum of the cafeteria, that little pod with him and Mr. Mont, and you had your chance to make your stuttering case for the uniform violation or whatnot. But what it really was was a chance to get advice from the paragon of what Red Bank Catholic represents: learning, forgiveness, respect for others, self-dignity, community.</p> Err codemadness.org 70 i 5265 <p>Ask just about any RBC student and they’ll agree.</p> Err codemadness.org 70 i 5266 <p>For the last sixteen years, I’ve received countless out-of-the-blue messages from fellow students about Uncle Dennis.</p> Err codemadness.org 70 i 5267 <p>This is what they say:</p> Err codemadness.org 70 i 5268 <p>“Your uncle is the best.”</p> Err codemadness.org 70 i 5269 <p>“Your uncle saved my life”</p> Err codemadness.org 70 i 5270 <p>“Your uncle is the MAN.”</p><![CDATA[Bullet Train to Merlin's Grave]]>https://www.charlieharrington.com/bullet-train-to-merlins-gravehttps://www.charlieharrington.com/bullet-train-to-merlins-graveFri, 08 Nov 2019 00:00:00 GMT<blockquote> Err codemadness.org 70 i 5271 <p>If this is the future, why are you the same?</p> Err codemadness.org 70 i 5272 </blockquote> Err codemadness.org 70 i 5273 <p>My cousin Megeen got married two weeks ago. Instead of the traditional night-before-the-wedding welcome party, she and her now-husband David Pope hosted POPESTOCK - a musical celebration featuring a variety of family-and-friends acts.</p> Err codemadness.org 70 i 5274 <p>It was amazing.</p> Err codemadness.org 70 i 5275 <p>The location for POPESTOCK was the mysterious Elk's Lodge in Red Bank, New Jersey. This rectangular shack of a building stands next to Riverside Gardens Park with perfect views of the Navesink River - the primo of primo locations in my hometown. For years, my cousins and I have wondered what lay beyond its unassuming doorway. We soon learned the answer: a really big bar and an even bigger empty room. In other words, exactly what we needed.</p> Err codemadness.org 70 i 5276 <p>Uncle Mike and Aunt Susan emceeded the festivities. They had one explicit rule: each act would be limited to one song. We've got a lot of musical cousins (see <a href="https://www.buffalorosemusic.com/">Buffalo Rose</a> or <a href="https://www.darkcitystrings.com/">Dark City Strings</a>).</p> Err codemadness.org 70 i 5277 <p>But there were three exceptions to that rule:</p> Err codemadness.org 70 i 5278 <ol> Err codemadness.org 70 i 5279 <li>David's old band <a href="https://lightninging.bandcamp.com/">Lightninging</a> performed the ENTIRE BACKSIDE of Abbey Road, straight-through. It was completely unreal. I felt like I was watching the Beatles, if the Beatles lasted into the 1970s and moved to Brooklyn and also worked at Vinny's Pizzaria. If you have the means, I highly recommend seeing Lightninging live.</li> Err codemadness.org 70 i 5280 <li>Aunt Eileen (the mother of the bride) and her old friend (along with her son-in-law Greg) played two songs that they wrote years ago, one of which was last performed only at her own wedding. I've always been told that Aunt Eileen could give Joni Mitchell a run for her money, and I was told right. Their set was reminiscent of the MUSIC FROM MALLARD concert series that my aunts and uncles put together in the mid-1980s at my Nana and Grandpa's house on Mallard Road in Middletown, New Jersey. These concerts pre-date my appearance on Earth, but I've got a handful of the cassette tapes in my possession and I still wear the MALLARD III t-shirt all the time.</li> Err codemadness.org 70 i 5281 <li>My set.</li> Err codemadness.org 70 i 5282 </ol> Err codemadness.org 70 i 5283 <p>Although, one could argue (and I did) that my performance was really more of a medley than two distinct songs. Further, I think one could even argue that my set was less of a medley and more of a complete disaster.</p> Err codemadness.org 70 i 5284 <p>Allow me to explain.</p> Err codemadness.org 70 i 5285 <p>I've written a six-fingered handful of songs in my life, but the two that seem to echo in eternity are called MERLIN'S GRAVE and BULLET TRAIN. These two have been battle-tested and laughed at across many-a-campfire with my cousins over years.</p> Err codemadness.org 70 i 5286 <p>You see, neither of them are very good. Nor am I a good singer. But you can't tell me that they aren't groovy. </p> Err codemadness.org 70 i 5287 <p>My vision for the one-song set was this: I play the entire Merlin's Grave up to the jam section, which would turn into this epic Mike Oldfield's Tubular Bells style as I introduce additional instruments, one at a time. First, banjo by my cousin Jack. Then, mandolin by my cousin Michael. Finally, electric guitar by my cousin Peter. To cap it off, I'd come in with some harmonica on top of it all. I put together a quick-and-dirty take of my vision on my laptop a few days before the wedding and emailed it to my cousins, which you can listen to here:</p> Err codemadness.org 70 i 5288 <iframe width="560" height="315" src="https://www.youtube.com/embed/8UCJSqumSgg" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> Err codemadness.org 70 i 5289 <p>So far, so good. Simple. One-song. No Bullet Train. I was attempting to be a rules-follower.</p> Err codemadness.org 70 i 5290 <p>But you can't stop the bullet train once it goes off the rails...</p> Err codemadness.org 70 i 5291 <iframe width="560" height="315" src="https://www.youtube.com/embed/WFA1TjSE6L0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> Err codemadness.org 70 i 5292 <p>We are <strong>Hotdog Johnny and the Shady Oaks</strong>:</p> Err codemadness.org 70 i 5293 <ul> Err codemadness.org 70 i 5294 <li>Charlie Harrington - Vocals, Acoustic Guitar, Harmonica</li> Err codemadness.org 70 i 5295 <li>Michael Byrnes - Mandolin, Vocals</li> Err codemadness.org 70 i 5296 <li>Jack Byrnes - Banjo</li> Err codemadness.org 70 i 5297 <li>Aidan Byrnes - Drums</li> Err codemadness.org 70 i 5298 <li>Peter Clabby - Electric Guitar</li> Err codemadness.org 70 i 5299 <li>Alex "The Grones" Groneman - Acoustic Guitar</li> Err codemadness.org 70 i 5300 <li>Some dude no one knew - Bass</li> Err codemadness.org 70 i 5301 <li>Tommy Clabby - Sound engineer</li> Err codemadness.org 70 i 5302 </ul><![CDATA[Summer Wind]]>https://www.charlieharrington.com/summer-windhttps://www.charlieharrington.com/summer-windTue, 10 Sep 2019 00:00:00 GMT<p><span Err codemadness.org 70 i 5303 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 5304 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 5305 > Err codemadness.org 70 i 5306 <a Err codemadness.org 70 i 5307 class="gatsby-resp-image-link" Err codemadness.org 70 i 5308 href="/static/122831651add0d67a1e0dc8f814101f0/f21dd/summerwind.jpg" Err codemadness.org 70 i 5309 style="display: block" Err codemadness.org 70 i 5310 target="_blank" Err codemadness.org 70 i 5311 rel="noopener" Err codemadness.org 70 i 5312 > Err codemadness.org 70 i 5313 <span Err codemadness.org 70 i 5314 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 5315 style="padding-bottom: 66.25766871165644%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABAAD/8QAFQEBAQAAAAAAAAAAAAAAAAAAAQL/2gAMAwEAAhADEAAAAWaE0qEQJP/EABkQAAMBAQEAAAAAAAAAAAAAAAABAhIDEf/aAAgBAQABBQJdINSeoyhyM//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABgQAAMBAQAAAAAAAAAAAAAAAAABMSAy/9oACAEBAAY/AukVFx//xAAcEAACAQUBAAAAAAAAAAAAAAAAATERIUFhkdH/2gAIAQEAAT8hZ9hMjsaXRYEUVZkj/9oADAMBAAIAAwAAABBrL//EABYRAAMAAAAAAAAAAAAAAAAAAAARYf/aAAgBAwEBPxBQcP/EABcRAAMBAAAAAAAAAAAAAAAAAAABEUH/2gAIAQIBAT8Qr0p//8QAHBABAAIDAAMAAAAAAAAAAAAAAQARIVGBMbHx/9oACAEBAAE/EKyutPcLtQaE+WgAAM6ggrkvxDTFvk//2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 5316 ></span> Err codemadness.org 70 i 5317 <img Err codemadness.org 70 i 5318 class="gatsby-resp-image-image" Err codemadness.org 70 i 5319 alt="email" Err codemadness.org 70 i 5320 title="email" Err codemadness.org 70 i 5321 src="/static/122831651add0d67a1e0dc8f814101f0/6aca1/summerwind.jpg" Err codemadness.org 70 i 5322 srcset="/static/122831651add0d67a1e0dc8f814101f0/d2f63/summerwind.jpg 163w, Err codemadness.org 70 i 5323 /static/122831651add0d67a1e0dc8f814101f0/c989d/summerwind.jpg 325w, Err codemadness.org 70 i 5324 /static/122831651add0d67a1e0dc8f814101f0/6aca1/summerwind.jpg 650w, Err codemadness.org 70 i 5325 /static/122831651add0d67a1e0dc8f814101f0/7c09c/summerwind.jpg 975w, Err codemadness.org 70 i 5326 /static/122831651add0d67a1e0dc8f814101f0/01ab0/summerwind.jpg 1300w, Err codemadness.org 70 i 5327 /static/122831651add0d67a1e0dc8f814101f0/f21dd/summerwind.jpg 3583w" Err codemadness.org 70 i 5328 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 5329 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 5330 loading="lazy" Err codemadness.org 70 i 5331 /> Err codemadness.org 70 i 5332 </a> Err codemadness.org 70 i 5333 </span></p> Err codemadness.org 70 i 5334 <p><em>Newport, Rhode Island</em></p> Err codemadness.org 70 i 5335 <p>A film photo I took with my friend <a href="http://www.kristineugenio.com/">Kristen</a>'s old camera. Alternative title: <em>Kite Armada.</em></p><![CDATA[Relay]]>https://www.charlieharrington.com/relayhttps://www.charlieharrington.com/relayTue, 02 Apr 2019 00:00:00 GMT<iframe width="560" height="315" src="https://www.youtube.com/embed/TAogrz_UZV0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> Err codemadness.org 70 i 5336 <p>I opened up <em>Logic</em> on a whim tonight and found the beginnings of this song, just sitting there, from a previous flight or some other bored evening. I think I probably ruined anything good about this song with the new middle section, but I swear it sounded good in my head(phones).</p> Err codemadness.org 70 i 5337 <p>The bouncing ball animation was created with the <a href="https://editor.p5js.org/">p5.js web editor</a>, which is both awesome and easy to use. Don't take my word for it -- try out this code (not exactly the same as in the video, but probably cooler) and you'll see how fun p5.js / processing can be for kids of all ages.</p> Err codemadness.org 70 i 5338 <div class="gatsby-highlight" data-language="javascript"><pre class="language-javascript"><code class="language-javascript"><span class="token keyword">function</span> <span class="token function">setup</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 5339 <span class="token function">createCanvas</span><span class="token punctuation">(</span><span class="token number">400</span><span class="token punctuation">,</span> <span class="token number">400</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 5340 <span class="token function">background</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 5341 <span class="token punctuation">}</span> Err codemadness.org 70 i 5342 Err codemadness.org 70 i 5343 <span class="token keyword">function</span> <span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 5344 <span class="token function">circle</span><span class="token punctuation">(</span>mouseX<span class="token punctuation">,</span> mouseY<span class="token punctuation">,</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 5345 <span class="token punctuation">}</span></code></pre></div><![CDATA[An Afternoon with Arduino]]>https://www.charlieharrington.com/afternoon-with-arduinohttps://www.charlieharrington.com/afternoon-with-arduinoThu, 28 Mar 2019 00:00:00 GMT<p>For the last eight years or so, I've been carrying around an <a href="https://www.arduino.cc/">Arduino</a> (not literally on my person, but, you know, amongst my treasures), waiting for just the right time to start tinkering with it.</p> Err codemadness.org 70 i 5346 <p>That time, it turns out, was yesterday afternoon. This post outlines some of things I've learned so far.</p> Err codemadness.org 70 i 5347 <h3>Ard-what-now?</h3> Err codemadness.org 70 i 5348 <p>An Arduino is a <strong>microcontroller</strong> board. The board contains a CPU (central processing unit) along with some I/O (input / output) connections. You can think about it as a small circuit - a circuit that happens to contain a programmable computer on a chip. A chip that you can learn to easily program.</p> Err codemadness.org 70 i 5349 <p>Here's a picture of my Arduino (of the <a href="https://store.arduino.cc/usa/arduino-uno-rev3">Uno</a> varietal):</p> Err codemadness.org 70 i 5350 <p><span Err codemadness.org 70 i 5351 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 5352 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 5353 > Err codemadness.org 70 i 5354 <a Err codemadness.org 70 i 5355 class="gatsby-resp-image-link" Err codemadness.org 70 i 5356 href="/static/5136bc8af49a005eba462180a3bf7000/9568a/uno.jpg" Err codemadness.org 70 i 5357 style="display: block" Err codemadness.org 70 i 5358 target="_blank" Err codemadness.org 70 i 5359 rel="noopener" Err codemadness.org 70 i 5360 > Err codemadness.org 70 i 5361 <span Err codemadness.org 70 i 5362 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 5363 style="padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAMCBP/EABcBAAMBAAAAAAAAAAAAAAAAAAABAgP/2gAMAwEAAhADEAAAAZJbl9jBVy1I1uEf/8QAGBABAAMBAAAAAAAAAAAAAAAAAQACEhH/2gAIAQEAAQUCylTsqKbVLMrMncEKk//EABgRAAMBAQAAAAAAAAAAAAAAAAABAhEh/9oACAEDAQE/Aatp8FZiMP/EABkRAAIDAQAAAAAAAAAAAAAAAAACARARIf/aAAgBAgEBPwFVjOkqbX//xAAZEAACAwEAAAAAAAAAAAAAAAAAMQEQETL/2gAIAQEABj8C2YOBD0U0r//EAB4QAQACAQQDAAAAAAAAAAAAAAEAETEhQVGBYZGh/9oACAEBAAE/IcQjzN87XLAg7lgCJtMek4iu1stxxDZoK4+wxpfuf//aAAwDAQACAAMAAAAQ+8g+/8QAGREAAgMBAAAAAAAAAAAAAAAAABEBIUFR/9oACAEDAQE/EEQSqxmCcP/EABgRAAMBAQAAAAAAAAAAAAAAAAABESFR/9oACAECAQE/EGqGuFdKz//EAB0QAQEAAgIDAQAAAAAAAAAAAAERACExQVFxgZH/2gAIAQEAAT8QDqJhX3zgkpOgJlqOyJcdi0CqdHH3FlaB5T3igu8F0hoxD5Jb3gKr9ZOwPbP/2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 5364 ></span> Err codemadness.org 70 i 5365 <img Err codemadness.org 70 i 5366 class="gatsby-resp-image-image" Err codemadness.org 70 i 5367 alt="Uno" Err codemadness.org 70 i 5368 title="Uno" Err codemadness.org 70 i 5369 src="/static/5136bc8af49a005eba462180a3bf7000/6aca1/uno.jpg" Err codemadness.org 70 i 5370 srcset="/static/5136bc8af49a005eba462180a3bf7000/d2f63/uno.jpg 163w, Err codemadness.org 70 i 5371 /static/5136bc8af49a005eba462180a3bf7000/c989d/uno.jpg 325w, Err codemadness.org 70 i 5372 /static/5136bc8af49a005eba462180a3bf7000/6aca1/uno.jpg 650w, Err codemadness.org 70 i 5373 /static/5136bc8af49a005eba462180a3bf7000/7c09c/uno.jpg 975w, Err codemadness.org 70 i 5374 /static/5136bc8af49a005eba462180a3bf7000/01ab0/uno.jpg 1300w, Err codemadness.org 70 i 5375 /static/5136bc8af49a005eba462180a3bf7000/9568a/uno.jpg 3024w" Err codemadness.org 70 i 5376 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 5377 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 5378 loading="lazy" Err codemadness.org 70 i 5379 /> Err codemadness.org 70 i 5380 </a> Err codemadness.org 70 i 5381 </span></p> Err codemadness.org 70 i 5382 <p>I love the MADE IN ITALY mark in the upper left.</p> Err codemadness.org 70 i 5383 <p>The microprocessor (the computer chip) is the long flat black rectangle near the bottom-right corner of the device. It has 28 pins (14 on each side). Along the top edge of the Arduino you can see a strip of black input pins - these are the Arduino's "digital" pins (meaning that they can either be "on" or "off"). Below the CPU on the bottom right you can see another 5 "analog" pins (meaning that they can receive analog / continuous signals), and then a few "power" pins to the left to provide voltage, ground, and some other stuff that I don't know about yet.</p> Err codemadness.org 70 i 5384 <h4>Arduino vs Raspberry Pi</h4> Err codemadness.org 70 i 5385 <p>At this point, you might be asking yourself, "How is an Arduino different from a <a href="https://www.raspberrypi.org/">Raspberry Pi</a>?"</p> Err codemadness.org 70 i 5386 <p>It's a good question, since both are affordable, adorable, tiny little computers that you can buy for about $30 bucks or less. But the Raspberry Pi is a full-on Linux computer. An Arduino is... not. Instead, the Arduino computer holds just one program at a time. It stores this program in durable memory, so that you can turn the Arduino on and off, and it will still "remember" its latest program. It's more like a single-purpose device -- except you can dream up and build that single-purpose as many times as you want.</p> Err codemadness.org 70 i 5387 <h4>Open-source roots</h4> Err codemadness.org 70 i 5388 <p>The company behind Arduino is a non-profit and the Arduino itself is open-source - which means that anyone can build an Arduino board themselves. The original idea behind Arduino was to make a simple device that designers and artists could use for rapid prototyping of <em>physical computing</em> projects that use <strong>sensors</strong> (aka <em>inputs</em> like a keyboard or mouse or motion detectors) and <strong>actuators</strong> (aka <em>outputs</em> like a display or printer or lights) to interact and communicate with us human beans. Cool.</p> Err codemadness.org 70 i 5389 <p>Arduino is closely tied to the <a href="https://processing.org/">Processing community</a>. In fact, that's a bit of an understatement, since you actually write Processing code when writing programs for the Arduino -- and, just like in Processing, these programs are also called Sketches. I was happy to see this, since one of my earliest computing classes was <a href="https://twitter.com/blprnt">Jer Thorp</a>'s <a href="http://blog.blprnt.com/workshops">Introduction to Processing course</a> (which I unabashedly recommend, by the way).</p> Err codemadness.org 70 i 5390 <p>As I mentioned, anyone can download the open-source schematics for Arduino and build a board themeselves with basic components. But if you'd like to make your tinkering lifestyle easier, then I suggest picking up a pre-assembled Arduino from a retailer like <a href="https://www.makershed.com/">Makershed</a> or <a href="https://www.adafruit.com">Adafruit</a>. The kit I bought (eight years ago) is the <a href="https://www.makershed.com/products/make-getting-started-with-arduino-kit-special-edition">MAKE: Getting Started With Arduino Kit</a> -- the current version (v3) appears to be retailing for $79.99 bucks. IMHO, it's definitely worth it -- the kit comes along with a bunch of goodies that help you get started right away, like a breadboard, colorful wires, clickable switches, LEDs, sensors, and a friendly introductory book. I also picked up <a href="https://www.amazon.com/Arduino-Quick-Start-Guide-Quick-start-Guides/dp/1934356662">Arduino: A Quick-Start Guide</a> by <a href="https://twitter.com/maik_schmidt">Maik Schmidt</a>, and I've been enjoying this book as well.</p> Err codemadness.org 70 i 5391 <h3>Fun with LEDs</h3> Err codemadness.org 70 i 5392 <p>I believe you're legally required to write a program that blinks an LED on and off as your first project with Arduino.</p> Err codemadness.org 70 i 5393 <p>If you asked me a few days ago about LEDs - yeah, sure, I know about LEDs. Those little red lights in things like my Game Boy. Stands for... light emitting... diode.</p> Err codemadness.org 70 i 5394 <p>Great, you continue, what's a diode?</p> Err codemadness.org 70 i 5395 <p>Um.</p> Err codemadness.org 70 i 5396 <p>This is already one of the fun things about playing with Arduino. There are all sorts of basic electronics stuff that I sorta know about, but couldn't explain to a five-year-old or to a <a href="https://en.wikipedia.org/wiki/Rubber_duck_debugging">rubber duck on my desk</a>. Or just don't know at all. But Arduino is helped me tackle these topics in a practical, tangible way.</p> Err codemadness.org 70 i 5397 <p>So, let's take a look at an LED together.</p> Err codemadness.org 70 i 5398 <p><span Err codemadness.org 70 i 5399 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 5400 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 5401 > Err codemadness.org 70 i 5402 <a Err codemadness.org 70 i 5403 class="gatsby-resp-image-link" Err codemadness.org 70 i 5404 href="/static/cf793aa4e22bdb748b2369630827f146/9568a/led.jpg" Err codemadness.org 70 i 5405 style="display: block" Err codemadness.org 70 i 5406 target="_blank" Err codemadness.org 70 i 5407 rel="noopener" Err codemadness.org 70 i 5408 > Err codemadness.org 70 i 5409 <span Err codemadness.org 70 i 5410 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 5411 style="padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGQABAQADAQAAAAAAAAAAAAAAAAMBAgUE/8QAFwEAAwEAAAAAAAAAAAAAAAAAAQIDAP/aAAwDAQACEAMQAAABtXx3R+iiK8zYxwKz/8QAGhAAAwEAAwAAAAAAAAAAAAAAAAECERAhMf/aAAgBAQABBQJYRct9HpOCzlWz/8QAFREBAQAAAAAAAAAAAAAAAAAAEAH/2gAIAQMBAT8BKf/EABURAQEAAAAAAAAAAAAAAAAAABAB/9oACAECAQE/ASH/xAAZEAABBQAAAAAAAAAAAAAAAAAAEBEgMeH/2gAIAQEABj8CGhq2f//EABwQAAICAgMAAAAAAAAAAAAAAAABESExgUFRkf/aAAgBAQABPyFkVkAKdCpgUdvRsFK2JDkJWYII/9oADAMBAAIAAwAAABAwJ33/xAAYEQACAwAAAAAAAAAAAAAAAAAAERAhQf/aAAgBAwEBPxCtFBn/xAAXEQEAAwAAAAAAAAAAAAAAAAABABAR/9oACAECAQE/EAthP//EABwQAQACAwEBAQAAAAAAAAAAAAEAESExQWGBkf/aAAgBAQABPxAUhDxgNS66H2GjCEAsBlYCgHwESrz+0CuKt5Nkuz2dpuf/2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 5412 ></span> Err codemadness.org 70 i 5413 <img Err codemadness.org 70 i 5414 class="gatsby-resp-image-image" Err codemadness.org 70 i 5415 alt="LED" Err codemadness.org 70 i 5416 title="LED" Err codemadness.org 70 i 5417 src="/static/cf793aa4e22bdb748b2369630827f146/6aca1/led.jpg" Err codemadness.org 70 i 5418 srcset="/static/cf793aa4e22bdb748b2369630827f146/d2f63/led.jpg 163w, Err codemadness.org 70 i 5419 /static/cf793aa4e22bdb748b2369630827f146/c989d/led.jpg 325w, Err codemadness.org 70 i 5420 /static/cf793aa4e22bdb748b2369630827f146/6aca1/led.jpg 650w, Err codemadness.org 70 i 5421 /static/cf793aa4e22bdb748b2369630827f146/7c09c/led.jpg 975w, Err codemadness.org 70 i 5422 /static/cf793aa4e22bdb748b2369630827f146/01ab0/led.jpg 1300w, Err codemadness.org 70 i 5423 /static/cf793aa4e22bdb748b2369630827f146/9568a/led.jpg 3024w" Err codemadness.org 70 i 5424 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 5425 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 5426 loading="lazy" Err codemadness.org 70 i 5427 /> Err codemadness.org 70 i 5428 </a> Err codemadness.org 70 i 5429 </span></p> Err codemadness.org 70 i 5430 <p>See the longer pin / leg sticking out of the red part? That's the <strong>anode</strong> terminal. The anode is the positive end of the LED. The shorter leg is the <strong>cathode</strong> - the negative side. Electrons will flow from the anode to the cathode when connected. You'll want to connect the positive end to something providing voltage, and the negative end needs to be connected to ground. All diodes are polarized, meaning they have these distinct positive and negative sides. And LEDs (light emitting diodes) happen to provide illumination when they're connected to an active circuit.</p> Err codemadness.org 70 i 5431 <p>And they can be lots of pretty colors, too.</p> Err codemadness.org 70 i 5432 <p>Okay, so here's our legally-required sketch for blinking an LED connected to digital pin 13 every half-second.</p> Err codemadness.org 70 i 5433 <div class="gatsby-highlight" data-language="c++"><pre class="language-c++"><code class="language-c++">const int LED = 13; Err codemadness.org 70 i 5434 Err codemadness.org 70 i 5435 void setup() { Err codemadness.org 70 i 5436 pinMode(LED, OUTPUT); Err codemadness.org 70 i 5437 } Err codemadness.org 70 i 5438 Err codemadness.org 70 i 5439 void loop() { Err codemadness.org 70 i 5440 digitalWrite(LED, HIGH); Err codemadness.org 70 i 5441 delay(500); Err codemadness.org 70 i 5442 digitalWrite(LED, LOW); Err codemadness.org 70 i 5443 delay(500); Err codemadness.org 70 i 5444 }</code></pre></div> Err codemadness.org 70 i 5445 <p>Pretty simple, right? We first declare a constant variable for the pin we're using. The <code class="language-text">setup()</code> function will run once per program, right before the <code class="language-text">loop()</code> kicks off its infinite loop, so we'll just let the Arduino know that we want to set pin 13 to <code class="language-text">OUTPUT</code> mode. And then during our infinite loop, we'll toggle the voltage to the pin by passing <code class="language-text">HIGH</code> (5 volts) or <code class="language-text">LOW</code> (0 volts) to our pin 13 using the <code class="language-text">digitalWrite</code> function, pausing 500 milliseconds between these operations.</p> Err codemadness.org 70 i 5446 <p>If you're coming from the Processing world, then this program structure of <code class="language-text">setup()</code> and <code class="language-text">loop()</code> should look very familiar, since it's literally the same.</p> Err codemadness.org 70 i 5447 <p>The Arduino IDE provides an easy way to verify your programs compile before flashing them over to your actual Arduino, so I suggest clicking the <code class="language-text">Verify</code> button first. This will catch syntax errors, like pesky missing semi-colons.</p> Err codemadness.org 70 i 5448 <p>Next, we can set up our physical device.</p> Err codemadness.org 70 i 5449 <p>I'm going to stick the LED into the Arduino, with the anode leg going into pin 13 and the cathode leg into ground. Note here that pin 13 is a special pin on the Arduino that has a resister built-in. If you try this with any other pin the Arduino, then the LED will burn out.</p> Err codemadness.org 70 i 5450 <p>Finally, we can send our program from our computer to the Arduino over a USB connection by clicking the <code class="language-text">Upload</code> button in the IDE. Your Arduino should flash happily once its complete, and then it's off to the infinite races.</p> Err codemadness.org 70 i 5451 <p><img src="/7c4ea7182fa3fc012a5256b4bdb6dd00/blink.gif" alt="Binary Counting"></p> Err codemadness.org 70 i 5452 <p>Look at that blinker. Pretty great, huh? Note that this gif definitely speeds things up a bit.</p> Err codemadness.org 70 i 5453 <h3>Putting the "S" in USB</h3> Err codemadness.org 70 i 5454 <p>So, as I continued building stuff, I inevitably found myself wanting to <code class="language-text">console.log</code> the heck out of a program that wasn't working.</p> Err codemadness.org 70 i 5455 <p>Let's talk about printing stuff with Arduino.</p> Err codemadness.org 70 i 5456 <p>Your Arduino is connected to your computer via a USB cable. USB. USB. That has to stand for something, right? It does. It stands for "Universal Serial Bus." USB is a quote "industry standard" for communications between computers and peripherals. If you think back really hard to the time of Captain Marvel or even earlier, you might remember other ways that we connected peripherals to our computers -- like an dot matrix printer's parallel port or a PS/2 keyboard port. Well, in the time since Carol Danvers left us here to fend for ourselves, USB has taken over our hearts, minds, and wallets. But we're still using a "serial connection" when we're using USB devices - so we'll need to use the serial protocol to communicate with our Arduino.</p> Err codemadness.org 70 i 5457 <p>In other words, if we want to send or receive info from our Arduino program, we need to establish a serial connection with the device. Here's how you do that in a Processing sketch:</p> Err codemadness.org 70 i 5458 <div class="gatsby-highlight" data-language="c++"><pre class="language-c++"><code class="language-c++">const unsigned int BAUD_RATE = 9600; Err codemadness.org 70 i 5459 Err codemadness.org 70 i 5460 void setup() { Err codemadness.org 70 i 5461 Serial.begin(BAUD_RATE); Err codemadness.org 70 i 5462 } Err codemadness.org 70 i 5463 Err codemadness.org 70 i 5464 void loop() { Err codemadness.org 70 i 5465 Serial.println(&quot;Hello, world!&quot;); Err codemadness.org 70 i 5466 }</code></pre></div> Err codemadness.org 70 i 5467 <p>Baud rate, huh? I know this <code class="language-text">baud</code> term, too. Modems had baud rates, IIRC. Some Wikipedia-ing and Google-ing reveal that baud rates are the rates at which information is transferred in a serial channel. In this case, with a baud rate of 9600, we're transferring a max of 9600 bits per second. 9600 happens to be the standard baud rate for Arduinos, but I believe you can choose a different rate.</p> Err codemadness.org 70 i 5468 <p>To view your "console", you can click the "Serial Monitor" button in the IDE. </p> Err codemadness.org 70 i 5469 <p><span Err codemadness.org 70 i 5470 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 5471 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 5472 > Err codemadness.org 70 i 5473 <a Err codemadness.org 70 i 5474 class="gatsby-resp-image-link" Err codemadness.org 70 i 5475 href="/static/486d5a5af4d5686a9ea7aabad18cdbc3/763a5/hello.png" Err codemadness.org 70 i 5476 style="display: block" Err codemadness.org 70 i 5477 target="_blank" Err codemadness.org 70 i 5478 rel="noopener" Err codemadness.org 70 i 5479 > Err codemadness.org 70 i 5480 <span Err codemadness.org 70 i 5481 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 5482 style="padding-bottom: 52.760736196319016%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAACH0lEQVQoz42SS2sTURiG59+4EhdCf4S1lKpFKm66VEQQF4obLytXRcXSCFIiErBVK0VBIZY2bXrL5B6TzD3NRU1KsYg0ySQzeTyZJkVbKb7wzjdzzuHh/eZ8kpKvUqvsoig1EqlvhCMVFtYrzC+WWEuoJNUySaVCWikTzxZZjRssbmp8XDd4u2IyGzKYWTJ4E9KYmMsiXQkuMD7/gUv+AKPTAS76XzH2cpbxwDsUXWd7u0q1VqVer9NqtWg2m9h2A6dtg9vy7Dqi0iS4qSP51BzXl8PcXgpxNxLhQTTK/ViMeysbyPEUqqKgqKoHOqxO1+LhuB3vO5QsIVH/IeCNI4dbu7ukUkl0w0AXSfvAjiActtsDyrkKkmPvsSeAv2ybZrtNy3FwxWbta4Ev6TiFrS1M0xRt2gfAv1J2gb01basqEvZi9+W6rlerZYt0IoYhYJZlHQvsrxnlnX1gWyRzRLKuu+9dlS2NeDSCYZhewj9bPpKwFyIiJ/aB/9LPne8kBFDT9P/4h463p8qfkIYfTzLm8zEy9YzhySlRfQw+neLai+ekU3Hy+TyquOVGo9EDuj33ga4Ym/2urI05pBNnBjk9MsSp4SEGRs8zcOEcJ4fOcvnGVTEyOXEpRYql0sFoHKeC/B7JXH2CHprACj9CDT4k9voOsZlbhPw3WV/+TFTeJCGvYeSTVCyFkpnDUlIUTI1cNoOhZLwuCnqOTHCa30J1FzsyeaLHAAAAAElFTkSuQmCC'); background-size: cover; display: block;" Err codemadness.org 70 i 5483 ></span> Err codemadness.org 70 i 5484 <img Err codemadness.org 70 i 5485 class="gatsby-resp-image-image" Err codemadness.org 70 i 5486 alt="Hello" Err codemadness.org 70 i 5487 title="Hello" Err codemadness.org 70 i 5488 src="/static/486d5a5af4d5686a9ea7aabad18cdbc3/a6d36/hello.png" Err codemadness.org 70 i 5489 srcset="/static/486d5a5af4d5686a9ea7aabad18cdbc3/222b7/hello.png 163w, Err codemadness.org 70 i 5490 /static/486d5a5af4d5686a9ea7aabad18cdbc3/ff46a/hello.png 325w, Err codemadness.org 70 i 5491 /static/486d5a5af4d5686a9ea7aabad18cdbc3/a6d36/hello.png 650w, Err codemadness.org 70 i 5492 /static/486d5a5af4d5686a9ea7aabad18cdbc3/e548f/hello.png 975w, Err codemadness.org 70 i 5493 /static/486d5a5af4d5686a9ea7aabad18cdbc3/3c492/hello.png 1300w, Err codemadness.org 70 i 5494 /static/486d5a5af4d5686a9ea7aabad18cdbc3/763a5/hello.png 2804w" Err codemadness.org 70 i 5495 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 5496 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 5497 loading="lazy" Err codemadness.org 70 i 5498 /> Err codemadness.org 70 i 5499 </a> Err codemadness.org 70 i 5500 </span></p> Err codemadness.org 70 i 5501 <p>In addition to viewing received information, you can also send messages back to the Arduino in this monitor using the text input on the top panel and the <code class="language-text">Send</code> button. For example, you might write a program that toggled an LED on or off based on a specific input key.</p> Err codemadness.org 70 i 5502 <p>What if you don't want to use the Serial Monitor in the Arduino IDE? Maybe it's time to let the old ways die. I agree. If you're on a Mac, then you can try running the <code class="language-text">screen</code> command from your terminal, specifying both the name of your serial connection to your Arduino and the baud rate.</p> Err codemadness.org 70 i 5503 <div class="gatsby-highlight" data-language="bash"><pre class="language-bash"><code class="language-bash"><span class="token function">screen</span> <span class="token operator">&lt;</span>name_of_serial_connection<span class="token operator">></span> <span class="token number">9600</span></code></pre></div> Err codemadness.org 70 i 5504 <p>In my case, the name of the connection was <code class="language-text">/dev/cu.usbmodem14101</code>, which you can find in the <code class="language-text">Tools/Port</code> menu of the Arduino IDE.</p> Err codemadness.org 70 i 5505 <p>Word of warning, however. If you close this terminal window, it won't close the sesssion, and you'll be unable to Upload new programs to your Arduino. This is called a "detached screen" and it's annoying. You need to quit the screen somehow, and you can use this command to do so:</p> Err codemadness.org 70 i 5506 <div class="gatsby-highlight" data-language="bash"><pre class="language-bash"><code class="language-bash"><span class="token function">screen</span> -X -S <span class="token operator">&lt;</span>name_of_session<span class="token operator">></span> quit</code></pre></div> Err codemadness.org 70 i 5507 <p>Oh, to get the name of the detached session, you can type:</p> Err codemadness.org 70 i 5508 <div class="gatsby-highlight" data-language="bash"><pre class="language-bash"><code class="language-bash"><span class="token function">screen</span> -ls <span class="token builtin class-name">.</span></code></pre></div> Err codemadness.org 70 i 5509 <p>This whole serial communications thing opens up some interesting ideas, since you can have two way comms between your Arduino and something else. Forget Alexa. Not-okay, Google. Go away, Siri. Now you can build your own talking robotic best friend, instead. Hopefully gets some gears turning for you, too.</p> Err codemadness.org 70 i 5510 <h3>Counting in binary with LEDs</h3> Err codemadness.org 70 i 5511 <p>In general, life-goal-wise, I've been trying to get better at thinking and counting in binary, so I decided to build a little binary counter for my next Arduino project.</p> Err codemadness.org 70 i 5512 <div class="gatsby-highlight" data-language="c++"><pre class="language-c++"><code class="language-c++">const unsigned int LED_BIT0 = 12; Err codemadness.org 70 i 5513 const unsigned int LED_BIT1 = 11; Err codemadness.org 70 i 5514 const unsigned int LED_BIT2 = 10; Err codemadness.org 70 i 5515 const unsigned int LED_BIT3 = 9; Err codemadness.org 70 i 5516 Err codemadness.org 70 i 5517 long result = 0; Err codemadness.org 70 i 5518 Err codemadness.org 70 i 5519 void setup() { Err codemadness.org 70 i 5520 pinMode(LED_BIT0, OUTPUT); Err codemadness.org 70 i 5521 pinMode(LED_BIT1, OUTPUT); Err codemadness.org 70 i 5522 pinMode(LED_BIT2, OUTPUT); Err codemadness.org 70 i 5523 pinMode(LED_BIT3, OUTPUT); Err codemadness.org 70 i 5524 } Err codemadness.org 70 i 5525 Err codemadness.org 70 i 5526 void loop() { Err codemadness.org 70 i 5527 result++; Err codemadness.org 70 i 5528 if (result == 16) { Err codemadness.org 70 i 5529 result = 0; Err codemadness.org 70 i 5530 } Err codemadness.org 70 i 5531 output_result(result); Err codemadness.org 70 i 5532 delay(500); Err codemadness.org 70 i 5533 } Err codemadness.org 70 i 5534 Err codemadness.org 70 i 5535 void output_result(const long result) { Err codemadness.org 70 i 5536 digitalWrite(LED_BIT0, result &amp; B0001); Err codemadness.org 70 i 5537 digitalWrite(LED_BIT1, result &amp; B0010); Err codemadness.org 70 i 5538 digitalWrite(LED_BIT2, result &amp; B0100); Err codemadness.org 70 i 5539 digitalWrite(LED_BIT3, result &amp; B1000); Err codemadness.org 70 i 5540 }</code></pre></div> Err codemadness.org 70 i 5541 <p><img src="/9f9c59880917a658e0ecd9f3cd98d8ab/binary.gif" alt="Binary Counting"></p> Err codemadness.org 70 i 5542 <p>I'm not sure why the red LED isn't as bright as the other three LEDs. I tried swapping it out with another LED to no avail. But, hey, other than that, this thing works!</p> Err codemadness.org 70 i 5543 <p>I also learned that breadboards are great. Being able to run all the cathode sides of the LEDs to the bottom negative row of the breadboard, and then only connecting that row once to the Arduino's ground port is pretty darn helpful. I have more to learn and appreciate here, for sure.</p> Err codemadness.org 70 i 5544 <p>Also, this is the first time that I've really leveraged the power of the bitwise-and operator. I'm taking my <code class="language-text">result</code> and bitwise-and it with a binary number that represents a binary digit (1's, 2's, 4's, 8's) for each of the LEDs. The bitwise-and operation returns <code class="language-text">true</code> if <code class="language-text">result</code> and our binary number both contain a <code class="language-text">1</code> for the given binary digit. For example, let's look at the number <code class="language-text">3</code></p> Err codemadness.org 70 i 5545 <div class="gatsby-highlight" data-language="c++"><pre class="language-c++"><code class="language-c++">3 &amp; B0001; // true Err codemadness.org 70 i 5546 3 &amp; B0010; // true Err codemadness.org 70 i 5547 3 &amp; B0100; // false Err codemadness.org 70 i 5548 3 &amp; B1000; // false</code></pre></div> Err codemadness.org 70 i 5549 <p>The final trick here is that <code class="language-text">digitalWrite</code> function transforms <code class="language-text">true</code> boolean values into <code class="language-text">HIGH</code> (turn on the LED) and <code class="language-text">false</code> into <code class="language-text">LOW</code> (turn off the LED). So, for the number <code class="language-text">3</code> the LED for the <code class="language-text">1</code>'s digit and the <code class="language-text">2</code>'s digit should be lit, and the <code class="language-text">4</code>'s and <code class="language-text">8</code>'s should be off.</p> Err codemadness.org 70 i 5550 <p>That's pretty awesome and makes this code very concise. There's much more to explore here for me.</p> Err codemadness.org 70 i 5551 <h3>More tinkering</h3> Err codemadness.org 70 i 5552 <p>So, after a mere afternoon, I've learned a ton and had quite a bit of fun along the way.</p> Err codemadness.org 70 i 5553 <p>What's next, you ask? Well, resistors are still perplexing. I'm not sure yet how to determine what level of resistence is needed for a given situation. I've already fried an LED (a delightful puff of smoke wisps out during its last gasp of life), likely for this very reason. It's also really hard to read those colorful bands to try to determine their resistance level. This seems like it could be a great little computer vision / deep learning app. Or perhaps I should just use my multimeter more regularly.</p> Err codemadness.org 70 i 5554 <p>I'm also thinking more about the difference between analog and digital signals. Digital is binary (either on or off), whereas analog is continuous. Most of what we observe in life is an analog signal. So when we choose to digitize them, we need to choose specific moments to "sample" the values of the continuous signal. The Schmidt book explained that an audio CD takes a sample every 44,100 per second (or 44.1 kHz). Maybe this is why vinyl is back.</p> Err codemadness.org 70 i 5555 <p>I thinking that my obvious next project here with Arduino is to make an alarm clock with binary numbers. There are tons of neat examples of this project across the web, and I think it could be a good way to learn / improve my soldering skills, as well as my quick mental binary counting, especially while groggy in the middle of the night.</p><![CDATA[Novels with Giant Possibly Magical Libraries]]>https://www.charlieharrington.com/novels-with-librarieshttps://www.charlieharrington.com/novels-with-librariesWed, 23 Jan 2019 00:00:00 GMT<p>I'm currently reading a fantastic novel where the protaganist - who is in her teens and lives in a sort-of convent for sightseers in the middle of a glacier - is asked by the elders to choose a role for part-time work. Our hero considers two options:</p> Err codemadness.org 70 i 5556 <ul> Err codemadness.org 70 i 5557 <li>Become a pilot of paper-mache, semi-alive airplanes controlled by whistling</li> Err codemadness.org 70 i 5558 <li>Become a librarian</li> Err codemadness.org 70 i 5559 </ul> Err codemadness.org 70 i 5560 <p>I held my breath as I read further: <em>choose The Library!</em></p> Err codemadness.org 70 i 5561 <h3>Why Libraries?</h3> Err codemadness.org 70 i 5562 <p>There are two things that, when I encounter them in a book, immediately cause me to fall in love.</p> Err codemadness.org 70 i 5563 <ul> Err codemadness.org 70 i 5564 <li>The word <code class="language-text">palimpsest</code></li> Err codemadness.org 70 i 5565 <li>A giant, possibly magic, library (extra points for a Forbidden Section or two)</li> Err codemadness.org 70 i 5566 </ul> Err codemadness.org 70 i 5567 <p>The two are not unrelated. A <a href="https://en.wikipedia.org/wiki/Palimpsest">palimpsest</a> is a book that has been one or more books before, with the older knowledge hidden just beneath the surface of the parchment, waiting to be unearthed. A giant library must, invariably, contain books with once-known, now-forgotten knowledge, just beyond that locked door over there.</p> Err codemadness.org 70 i 5568 <p>But I have the key...</p> Err codemadness.org 70 i 5569 <p>I hereby present a list of the very best novels featuring giant libraries filled with secrets.</p> Err codemadness.org 70 i 5570 <h3>My List of Novels with Giant Libraries</h3> Err codemadness.org 70 i 5571 <ul> Err codemadness.org 70 i 5572 <li><a href="https://www.amazon.com/gp/product/0143034901/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=0143034901&#x26;linkId=7b51c22444a8be59bcff15afc13efe51">La Sombra del Viento (The Shadow of the Wind)</a> - Carlos Ruiz Zafón</li> Err codemadness.org 70 i 5573 <li> Err codemadness.org 70 i 5574 <p>The Kingkiller Chronicles</p> Err codemadness.org 70 i 5575 <ul> Err codemadness.org 70 i 5576 <li><a href="https://www.amazon.com/gp/product/0756404746/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=0756404746&#x26;linkId=d4b51238762ea3883b0ed9db5c9cfee1">The Name of the Wind</a> - Patrick Rothfuss</li> Err codemadness.org 70 i 5577 <li><a href="https://www.amazon.com/gp/product/0756407915/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=0756407915&#x26;linkId=c4d23a503d1b93ef9455655661e16edc">The Wise Man's Fear</a> - Patrick Rothfuss</li> Err codemadness.org 70 i 5578 </ul> Err codemadness.org 70 i 5579 </li> Err codemadness.org 70 i 5580 <li><a href="https://www.amazon.com/gp/product/0544176561/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=0544176561&#x26;linkId=57f7feea7ab107e4e2ac694e33798a0b">The Name of the Rose</a> - Umberto Eco</li> Err codemadness.org 70 i 5581 <li><a href="https://www.amazon.com/gp/product/B000FC12L4/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=B000FC12L4&#x26;linkId=0fc0d40b2d8f75a34a52bd01814e3708">Lirael</a> - Garth Nix</li> Err codemadness.org 70 i 5582 <li><a href="https://www.amazon.com/gp/product/0553418629/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=0553418629&#x26;linkId=efcb0fde52892489e0911d1bbf7b62f1">The Library at Mount Char</a> - Scott Hawkins</li> Err codemadness.org 70 i 5583 <li><a href="https://www.amazon.com/gp/product/0765356155/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=0765356155&#x26;linkId=d34ad098edfb335746ed0e4530a99623">Jonathan Strange and Mr. Norrell</a> - Susanna Clarke</li> Err codemadness.org 70 i 5584 <li> Err codemadness.org 70 i 5585 <p>Harry Potter</p> Err codemadness.org 70 i 5586 <ul> Err codemadness.org 70 i 5587 <li><a href="https://www.amazon.com/gp/product/B00OHX65I2/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=B00OHX65I2&#x26;linkId=0798e010bcb3334768f375e8258b7ab3">Harry Potter and the Sorcerer's Stone</a> - J.K. Rowling</li> Err codemadness.org 70 i 5588 <li><a href="https://www.amazon.com/gp/product/0545791324/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=0545791324&#x26;linkId=b5cd0f1b4b5bbf36948989d265050520">Harry Potter and the Chamber of Secrets</a> - J.K. Rowling</li> Err codemadness.org 70 i 5589 <li><a href="https://www.amazon.com/gp/product/0439139600/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=0439139600&#x26;linkId=a6ba2d6b1c2bfdac125d341989ff23e4">Harry Potter and the Goblet of Fire</a> - J.K. Rowling</li> Err codemadness.org 70 i 5590 </ul> Err codemadness.org 70 i 5591 </li> Err codemadness.org 70 i 5592 <li><a href="https://www.amazon.com/gp/product/B00SB32ST4/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=B00SB32ST4&#x26;linkId=a296165c788623176aab44e4cd65db3b">Rainbows End</a> - Vernor Vinge</li> Err codemadness.org 70 i 5593 <li><a href="https://www.amazon.com/gp/product/0812515285/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=0812515285&#x26;linkId=8b3d099da4cca9a239f336344773d2fd">A Fire Upon the Deep</a> - Vernor Vinge</li> Err codemadness.org 70 i 5594 <li><a href="https://www.amazon.com/gp/product/0812536355/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=0812536355&#x26;linkId=6e0133d53af84b4532620de8ad19324e">A Deepness in the Sky</a> - Vernor Vinge</li> Err codemadness.org 70 i 5595 <li><a href="https://www.amazon.com/gp/product/006147410X/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=006147410X&#x26;linkId=acbaea0cf216d3102012a9c426e14f9d">Anathem</a> - Neal Stephenson</li> Err codemadness.org 70 i 5596 <li><a href="https://www.amazon.com/gp/product/0553380958/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=0553380958&#x26;linkId=abf3caf9f77c64ef1503e437b7463153">Snow Crash</a> - Neal Stephenson</li> Err codemadness.org 70 i 5597 <li><a href="https://www.amazon.com/gp/product/1250037751/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=1250037751&#x26;linkId=2a70e649d7428e557e654397bf8560c9">Mr. Penumbra's 24 Hour Bookstore</a> - Robin Sloan</li> Err codemadness.org 70 i 5598 <li><a href="https://www.amazon.com/gp/product/B004DI7HZ6/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=B004DI7HZ6&#x26;linkId=6238642fb928a95804cd6bb997931bc3">A Discovery of Witches</a> - Deborah Harkness*</li> Err codemadness.org 70 i 5599 <li><a href="https://www.amazon.com/gp/product/9939518757/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=9939518757&#x26;linkId=53fb16307682363738f2eb5fe27115ae">The Library of Babel</a> - Jorge Luis Borges*</li> Err codemadness.org 70 i 5600 <li><a href="https://www.amazon.com/gp/product/B00ECTR26U/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=B00ECTR26U&#x26;linkId=bd4c9c2c96287554af6e75458f70676b">The Pagemaster</a> - Todd Strasser*</li> Err codemadness.org 70 i 5601 <li><a href="https://www.amazon.com/gp/product/0385354304/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=0385354304&#x26;linkId=61adf5d2fcd0eef14bafe8f09d5de4f3">The Strange Library</a> - Haruki Murakami*</li> Err codemadness.org 70 i 5602 <li><a href="https://www.amazon.com/gp/product/0156453800/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=0156453800&#x26;linkId=73c9318067a8daf3c6f834e43b73d8b8">Invisible Cities</a> - Italo Calvino*</li> Err codemadness.org 70 i 5603 <li><a href="https://www.amazon.com/gp/product/1400079276/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=1400079276&#x26;linkId=4bb1046b55e17d2c4f2b0599564a5d48">Kafka on the Shore</a> - Haruki Murakami*</li> Err codemadness.org 70 i 5604 <li><a href="https://www.amazon.com/gp/product/B07GCSJ72W/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=B07GCSJ72W&#x26;linkId=fbd212d64827a7deb8331c6203995002">In the Stacks</a> - Scott Lynch*</li> Err codemadness.org 70 i 5605 <li><a href="https://www.amazon.com/gp/product/0451473132/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=0451473132&#x26;linkId=d89f0625907fa90f3b53ab893148d10d">Ink and Bone</a> - Rachel Caine*</li> Err codemadness.org 70 i 5606 <li><a href="https://www.amazon.com/gp/product/0062225677/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=0062225677&#x26;linkId=9ad495e0fd9c2c3f9a419ba8e2ede7fa">The Colour of Magic (Discworld #1)</a> - Terry Pratchett*</li> Err codemadness.org 70 i 5607 <li><a href="https://www.amazon.com/gp/product/0156439611/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=0156439611&#x26;linkId=917a65fce2cbea549967980ec24cd37f">If on a Winter's Night a Traveler</a> - Italo Calvino</li> Err codemadness.org 70 i 5608 <li><a href="https://www.amazon.com/gp/product/1401284779/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=1401284779&#x26;linkId=c35338e2e6f497a3bba6e99781c05e42">Preludes &#x26; Nocturnes (The Sandman #1)</a> - Neil Gaiman*</li> Err codemadness.org 70 i 5609 <li><a href="https://www.amazon.com/gp/product/B002AU7MEK/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=B002AU7MEK&#x26;linkId=cf8dd146c099100b6452a22611d7719b">Wireless</a> - Charles Stross*</li> Err codemadness.org 70 i 5610 <li><a href="https://www.amazon.com/gp/product/B075JL493G/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=B075JL493G&#x26;linkId=6a0cf43320e0c1ea1aa7ec2d484de7c6">The Book of the New Sun</a> - Gene Wolfe*</li> Err codemadness.org 70 i 5611 <li><a href="https://www.amazon.com/gp/product/B00J3EU5RC/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=B00J3EU5RC&#x26;linkId=ab1c6d1ceed5c7bc06227161b7b3fbe2">Eon (The Way #1)</a> - Greg Bear*</li> Err codemadness.org 70 i 5612 <li><a href="https://www.amazon.com/gp/product/0345353129/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=0345353129&#x26;linkId=d2322df408c9bf0ef16b37ece60fffe9">Protector</a> - Larry Niven*</li> Err codemadness.org 70 i 5613 <li><a href="https://www.amazon.com/gp/product/0143105299/ref=as_li_qf_asin_il_tl?ie=UTF8&#x26;tag=whatrocks09-20&#x26;creative=9325&#x26;linkCode=as2&#x26;creativeASIN=0143105299&#x26;linkId=979204c2b6688608dc3e13a40827f384">The Book of Sand</a> - Jorge Luis Borges*</li> Err codemadness.org 70 i 5614 </ul> Err codemadness.org 70 i 5615 <p>*<em>Indicates that I haven't read this book (yet), but rest assured that it was recommended by a semi-close friend, cousin of mine, or <a href="https://news.ycombinator.com/item?id=19108230">Hacker News commenter</a>.</em></p> Err codemadness.org 70 i 5616 <p>Let me know on Twitter (<a href="https://twitter.com/whatrocks">@whatrocks</a>) if I'm missing anything and I'll update the list, almost like a palimpsest.</p><![CDATA[Borrowing Library Books for Your Kindle]]>https://www.charlieharrington.com/borrowing-library-books-for-your-kindlehttps://www.charlieharrington.com/borrowing-library-books-for-your-kindleSun, 13 Jan 2019 00:00:00 GMT<p>Basically, do it. It's super easy. <strong>I'll show you how in this post.</strong></p> Err codemadness.org 70 i 5617 <h3>How to borrow library books for your Kindle</h3> Err codemadness.org 70 i 5618 <ol> Err codemadness.org 70 i 5619 <li><strong>Obtain a Kindle from Amazon.</strong> I'm using the Kindle Paperwhite with Special Offers, which I recommend. The special offers are just ads for random books, and they only appear on the lock screen of the Kindle. Who knows? You might even find something you like with the offers.</li> Err codemadness.org 70 i 5620 <li><strong>Obtain a library card number from your local library.</strong> This takes a few minutes in person, but I'm sure you can also do it online. You'll probably need some proof of residence, like a driver's license or some utility bill. Better be safe and bring both.</li> Err codemadness.org 70 i 5621 <li><strong>Sign into your library's ebook manager on the library's website using your library card number</strong>. Most likely they are using a service called Overdrive. You'll probably also create a PIN number when you register for your library card, so write that down somewhere!</li> Err codemadness.org 70 i 5622 <li><strong>Search for a book on Overdrive (or your library's respective ebook service), and then you'll be able to either borrow or place a hold for it.</strong> The San Francisco Public library, for example, allows you to borrow or place holds for up to something like 20 books at a time!</li> Err codemadness.org 70 i 5623 <li><strong>Once you've borrowed a book, click Read Now with Kindle</strong>. You'll been taken to the Amazon page for the book, and you can send the ebook directly to your Kindle. Next time your Kindle connects to wifi, the borrowed book will be downloaded.</li> Err codemadness.org 70 i 5624 <li><strong>Read, rinse, and repeat.</strong> I like to have several books borrowed at a time, with a few holds as well, so that there's always something coming down the pipe.</li> Err codemadness.org 70 i 5625 </ol> Err codemadness.org 70 i 5626 <h4>🎁 Placing holds for books is like sending a gift to your future self</h4> Err codemadness.org 70 i 5627 <p>Imagine waking up to this email:</p> Err codemadness.org 70 i 5628 <p><span Err codemadness.org 70 i 5629 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 5630 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 5631 > Err codemadness.org 70 i 5632 <a Err codemadness.org 70 i 5633 class="gatsby-resp-image-link" Err codemadness.org 70 i 5634 href="/static/38fd67bd009f81e2d0a8accd93d96ec1/5b4a1/email.png" Err codemadness.org 70 i 5635 style="display: block" Err codemadness.org 70 i 5636 target="_blank" Err codemadness.org 70 i 5637 rel="noopener" Err codemadness.org 70 i 5638 > Err codemadness.org 70 i 5639 <span Err codemadness.org 70 i 5640 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 5641 style="padding-bottom: 42.94478527607362%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAABGklEQVQoz5WR227DIAyGef/H29W0q0lLs5AQwvmQ0P6zkdpN01p1SJ9sjG3Av7AuYF3XzrZtHaUU7XWPzfOCaZp6bFkW2s+QUpKvOppyauKaFa01COe/G3KB1hrWWhhj4JyjCwxCiMg5I8aIlNLNcoxpraKUgsvlArHJCXKS1MD2YmtdP7yy7zueXb1hOw7E4JFTpAb59pIQAmqt+O8SPmXM1kPxLLXus+NvM4a+nuiC3+QHiFHOeHl9w/twwngacBo+bsjPERuLtfLwVffZskD3EGlvsLlijQWmHMQOR5i8Q6cKFXM/21Ihn3Iol9U8aFR/IRSJoZyHrwccJQeypZ2RjzPSDzh2tQ9naK3pXwnewZEfSYxn1LzHF7ebuOMgKZxVAAAAAElFTkSuQmCC'); background-size: cover; display: block;" Err codemadness.org 70 i 5642 ></span> Err codemadness.org 70 i 5643 <img Err codemadness.org 70 i 5644 class="gatsby-resp-image-image" Err codemadness.org 70 i 5645 alt="email" Err codemadness.org 70 i 5646 title="email" Err codemadness.org 70 i 5647 src="/static/38fd67bd009f81e2d0a8accd93d96ec1/a6d36/email.png" Err codemadness.org 70 i 5648 srcset="/static/38fd67bd009f81e2d0a8accd93d96ec1/222b7/email.png 163w, Err codemadness.org 70 i 5649 /static/38fd67bd009f81e2d0a8accd93d96ec1/ff46a/email.png 325w, Err codemadness.org 70 i 5650 /static/38fd67bd009f81e2d0a8accd93d96ec1/a6d36/email.png 650w, Err codemadness.org 70 i 5651 /static/38fd67bd009f81e2d0a8accd93d96ec1/5b4a1/email.png 831w" Err codemadness.org 70 i 5652 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 5653 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 5654 loading="lazy" Err codemadness.org 70 i 5655 /> Err codemadness.org 70 i 5656 </a> Err codemadness.org 70 i 5657 </span></p> Err codemadness.org 70 i 5658 <p>It's like Christmas morning! Once you click that link, you'll be taken to your Overdrive account:</p> Err codemadness.org 70 i 5659 <p><span Err codemadness.org 70 i 5660 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 5661 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 5662 > Err codemadness.org 70 i 5663 <a Err codemadness.org 70 i 5664 class="gatsby-resp-image-link" Err codemadness.org 70 i 5665 href="/static/1300a28363fdaff2b87f555e20f61883/0d1a4/overdrive.png" Err codemadness.org 70 i 5666 style="display: block" Err codemadness.org 70 i 5667 target="_blank" Err codemadness.org 70 i 5668 rel="noopener" Err codemadness.org 70 i 5669 > Err codemadness.org 70 i 5670 <span Err codemadness.org 70 i 5671 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 5672 style="padding-bottom: 48.46625766871166%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAAsTAAALEwEAmpwYAAACAklEQVQoz11SW28SQRTeH+yTTz42Rh+0TRst0cYYMRVvpZiQRqGEXRsiBYtu2bbBYivNVnChsNDuDruz18+ZEQhykpMzc86Zb75zkUzTxGAwgO/78DxvpvweBMF/1vf/+f25vEWVCCGwbVtcKKUzMO63mJ/HLMvCeOzAcV2MHVfkcfD5NzPAOI4RRzGiKAQXlz0S6jgMZCyUg1KPsWQpXhCDsgOPex5FGIaigmkV0o+fLchlFcUvB0im3kI7OsJwOMLo+gZhFLGPImZjkP4piFED7auwuyra7UvobQN91q5g0hbBUNMOUS8XcaqV8X7rBb7V6+iaFkYWAXEoY+YL5margFZ1A+fVZzCOX4NYA8F4XjhbqVLdQ/bRHfSyazjbfoh644SVSMRv82K2FFzUktDVFLqNDPbkHNLbH1DYzSO3k4EsF0U/pcbxV6zcu43N5SWkNxNIpd9hbXUV64kEnq6vYPnBfbQ7PdBeBfr3l2hWkrAudlCrlpDLF5DP5ZD/mEWpVGKAvOSKgrtLt/D4eQIbbzI4UDWMhkMYhoGrnoFB/wo+G4R9qeB8/wl+sZI72itWH8Gi8D5Kfzo6ZOUTdj8Xoexr0H93WYDvXDBLZDMBvdERXDcRWmdwh01QlwhG0wlPVVr8JQwD0QsBxCbM14rbaBKPJ5bvJR+C8PHVY8oB/wKzOuGMkHHwWAAAAABJRU5ErkJggg=='); background-size: cover; display: block;" Err codemadness.org 70 i 5673 ></span> Err codemadness.org 70 i 5674 <img Err codemadness.org 70 i 5675 class="gatsby-resp-image-image" Err codemadness.org 70 i 5676 alt="overdrive" Err codemadness.org 70 i 5677 title="overdrive" Err codemadness.org 70 i 5678 src="/static/1300a28363fdaff2b87f555e20f61883/a6d36/overdrive.png" Err codemadness.org 70 i 5679 srcset="/static/1300a28363fdaff2b87f555e20f61883/222b7/overdrive.png 163w, Err codemadness.org 70 i 5680 /static/1300a28363fdaff2b87f555e20f61883/ff46a/overdrive.png 325w, Err codemadness.org 70 i 5681 /static/1300a28363fdaff2b87f555e20f61883/a6d36/overdrive.png 650w, Err codemadness.org 70 i 5682 /static/1300a28363fdaff2b87f555e20f61883/e548f/overdrive.png 975w, Err codemadness.org 70 i 5683 /static/1300a28363fdaff2b87f555e20f61883/0d1a4/overdrive.png 1036w" Err codemadness.org 70 i 5684 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 5685 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 5686 loading="lazy" Err codemadness.org 70 i 5687 /> Err codemadness.org 70 i 5688 </a> Err codemadness.org 70 i 5689 </span></p> Err codemadness.org 70 i 5690 <p>Even before you've had your (first) coffee of the day, you can probably manage to click that <code class="language-text">Read Now with Kindle</code> button:</p> Err codemadness.org 70 i 5691 <p><span Err codemadness.org 70 i 5692 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 5693 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 5694 > Err codemadness.org 70 i 5695 <a Err codemadness.org 70 i 5696 class="gatsby-resp-image-link" Err codemadness.org 70 i 5697 href="/static/0a46fda51e89ed47752f7b5763e9e8ad/ec3e2/amazon.png" Err codemadness.org 70 i 5698 style="display: block" Err codemadness.org 70 i 5699 target="_blank" Err codemadness.org 70 i 5700 rel="noopener" Err codemadness.org 70 i 5701 > Err codemadness.org 70 i 5702 <span Err codemadness.org 70 i 5703 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 5704 style="padding-bottom: 71.16564417177914%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAADA0lEQVQ4y22S3WsUVxjG5++wN70Tii0UL1qKBHpjJRVa0u80NrZUopG2attcWCiiFw0RCqVQihCKJpjoqkirgiga0H5ALcS2oM0mJtndzOzMzld2dmfnY3d+fc+sW4rxwMPMOfPO877P8xzt2W39vPbWu/QPDLJp83N8cfQ4309O88N0ganZC5w6fY6TZy4xc2KcwVde5Imn+tja9zJPv7CDLc9v5xl5Kmzt6+fJLdvQ9h08zGeHj/Hx51/y+q59DA6P8M6uD3l79yhvDo+y84332f7qEC8NDDMwtJfdew/xydgRBj/4iOGRQ7w3clBq97Nn/6cM7TmAdr+4zJ2797gz/xfz83cJ7DJWaQGzqmNZFo1GkKOdpkStFi1BFEVy1pT3SBDmZ41mSLvdRrt6Y47zl65y6ux5jh6fQDcqGPoyy3oNtx6SJkle+OgKmw3WfRfDsqnZNdkHZFkH7Y9fb7D2ywWiB7f4+/dr8tHClylrtRr+el2KMjqdTk7a6QgyaCch9ZXLuMUCq3/OYt4vUH9wjrihoxXOTnL62CjFE2Pcnv0aw12ntFqiWFxgcbGYE9u2nUNZ4DoOcRxj16pY5hpVo4QpqnzPJpFz7dbcj0wcOcDJb8aZKUxhiwxHfipX1ljTDaqmia7rVCoVQVksMcXDGMdbRzcdTJHsuJ40SXMl2vWL03w1PsZUYYbpiz9hOS5VvyUeOpQMmU7IXdel2WwShiHNKCVOO8SJhJSKfvGNrJ2HlhP+dvs63343weTMGQpXfs47BkGA5/t4nofvK/iSauNhul3zlfyFf+6h1xPKgYSUCDkZWi/BLOump67A6srKQ4kVSqVSjmq1mjdQV0WtpaUl5m7eZMkKWPSkQZB2CRO5Fl3CLmMohMo/RWAYRu6fgtqrgBSpWvV6PW8YRy0JI8oDUQwbCBPxwvIaBGGM+pbKXslVk6t0laJe7aNLnW8gjKSjSrLsRrQ7XV9UKI5jY9Yc/Gb8X70KQT174HETqgmU7DBWlzjbMI3a9s7+T9bDv8gB2jJUsPqmAAAAAElFTkSuQmCC'); background-size: cover; display: block;" Err codemadness.org 70 i 5705 ></span> Err codemadness.org 70 i 5706 <img Err codemadness.org 70 i 5707 class="gatsby-resp-image-image" Err codemadness.org 70 i 5708 alt="amazon" Err codemadness.org 70 i 5709 title="amazon" Err codemadness.org 70 i 5710 src="/static/0a46fda51e89ed47752f7b5763e9e8ad/a6d36/amazon.png" Err codemadness.org 70 i 5711 srcset="/static/0a46fda51e89ed47752f7b5763e9e8ad/222b7/amazon.png 163w, Err codemadness.org 70 i 5712 /static/0a46fda51e89ed47752f7b5763e9e8ad/ff46a/amazon.png 325w, Err codemadness.org 70 i 5713 /static/0a46fda51e89ed47752f7b5763e9e8ad/a6d36/amazon.png 650w, Err codemadness.org 70 i 5714 /static/0a46fda51e89ed47752f7b5763e9e8ad/e548f/amazon.png 975w, Err codemadness.org 70 i 5715 /static/0a46fda51e89ed47752f7b5763e9e8ad/ec3e2/amazon.png 997w" Err codemadness.org 70 i 5716 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 5717 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 5718 loading="lazy" Err codemadness.org 70 i 5719 /> Err codemadness.org 70 i 5720 </a> Err codemadness.org 70 i 5721 </span></p> Err codemadness.org 70 i 5722 <p>Click <code class="language-text">Get Library Book</code>, and you're done! Your morning commute just got a little bit nerdier.</p> Err codemadness.org 70 i 5723 <p><span Err codemadness.org 70 i 5724 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 5725 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 5726 > Err codemadness.org 70 i 5727 <a Err codemadness.org 70 i 5728 class="gatsby-resp-image-link" Err codemadness.org 70 i 5729 href="/static/0e5a93f20244a5bea63f25bb26ef4d7f/58bb7/borrowed.png" Err codemadness.org 70 i 5730 style="display: block" Err codemadness.org 70 i 5731 target="_blank" Err codemadness.org 70 i 5732 rel="noopener" Err codemadness.org 70 i 5733 > Err codemadness.org 70 i 5734 <span Err codemadness.org 70 i 5735 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 5736 style="padding-bottom: 34.355828220858896%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAAAsTAAALEwEAmpwYAAABSUlEQVQoz3WR0WrcMBBF9/9/pxT61Pc8lWWThkDT0G2crS3LlnYlWZIln4y9GyiFjjhcgdDM3Jmdyw6TzcaYRtzsKHLmv065kWoi18w0T7jJbYTkSSURS9zYhTnws33h/njgsfnOsfuFNYbz2QoX7MUxio72Qq2FNWKKnE5vdJ2iH0Y+Yi22yyWjhkivA9ZGhtGjekvbjzT6wm/taU3AT4llWTaq8Px0oG1bWps4qZFJ3mOO14T+zx36+RPDyxfRz9jjV1gy/4taK08Pe7TqSCltTpzz14Srf6t+0L9+E/b0zR71ekD3Sro1aD1grMWHIJ9kZqIrg1jVw4BSCqU1vXHEOV07NOdI0xrazojtIJXA++lGEDuRWiqllE0329LlUpcr2yhgrjM7nz3nGGikourFwmTJ627F8rzc9iz3deAfrNv+lyxMZeIdwz8bSgWQRJsAAAAASUVORK5CYII='); background-size: cover; display: block;" Err codemadness.org 70 i 5737 ></span> Err codemadness.org 70 i 5738 <img Err codemadness.org 70 i 5739 class="gatsby-resp-image-image" Err codemadness.org 70 i 5740 alt="borrowed" Err codemadness.org 70 i 5741 title="borrowed" Err codemadness.org 70 i 5742 src="/static/0e5a93f20244a5bea63f25bb26ef4d7f/a6d36/borrowed.png" Err codemadness.org 70 i 5743 srcset="/static/0e5a93f20244a5bea63f25bb26ef4d7f/222b7/borrowed.png 163w, Err codemadness.org 70 i 5744 /static/0e5a93f20244a5bea63f25bb26ef4d7f/ff46a/borrowed.png 325w, Err codemadness.org 70 i 5745 /static/0e5a93f20244a5bea63f25bb26ef4d7f/a6d36/borrowed.png 650w, Err codemadness.org 70 i 5746 /static/0e5a93f20244a5bea63f25bb26ef4d7f/e548f/borrowed.png 975w, Err codemadness.org 70 i 5747 /static/0e5a93f20244a5bea63f25bb26ef4d7f/58bb7/borrowed.png 985w" Err codemadness.org 70 i 5748 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 5749 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 5750 loading="lazy" Err codemadness.org 70 i 5751 /> Err codemadness.org 70 i 5752 </a> Err codemadness.org 70 i 5753 </span></p> Err codemadness.org 70 i 5754 <h3>Borrowing Audiobooks</h3> Err codemadness.org 70 i 5755 <p>You can do this, too! </p> Err codemadness.org 70 i 5756 <p>There's a great app called <a href="https://meet.libbyapp.com/">Libby</a> that is somehow affiliated with Overdrive, and that's what I recommend using for listening to library audiobooks. Everything that you rent through Overdrive, whether ebook or audiobook, will automatically appear in your Libby app (once you sign into Libby with your library card). This is helpful for when you inevitably forget your Kindle at home (there's also a Kindle phone app, but I haven't used it recently).</p> Err codemadness.org 70 i 5757 <p>I still haven't entirely embraced the audiobook lifestyle, but it's something on my mind for 2019.</p> Err codemadness.org 70 i 5758 <h3>But what about how good paper books smell?</h3> Err codemadness.org 70 i 5759 <p>I'm a paper book monster. And, yes, the smell is half the reason. But public libraries are vitally important -- and were vitally important to my childhood. I'm happy to be bringing them back into my adult life, even in this electronic way.</p> Err codemadness.org 70 i 5760 <p>I'm also still buying an insane amount of paper books, from local booksellers whenever possible. Not even Marie Kondo can stop me from that.</p><![CDATA[The Walkingman Collection]]>https://www.charlieharrington.com/the-walkingman-collectionhttps://www.charlieharrington.com/the-walkingman-collectionThu, 10 Jan 2019 00:00:00 GMT<p>I've pulled all my <a href="https://instagram.com/whatrocks">Instagram #walkingman</a> photos into a handy little page. <a href="/walkingman">Check it out</a>.</p> Err codemadness.org 70 i 5761 <p>So long as the Instagram API continues to play nice (no guarantees), then <a href="/walkingman">this page</a> will stay up-to-date as my travels continue.</p> Err codemadness.org 70 i 5762 <p><span Err codemadness.org 70 i 5763 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 5764 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 577px; " Err codemadness.org 70 i 5765 > Err codemadness.org 70 i 5766 <a Err codemadness.org 70 i 5767 class="gatsby-resp-image-link" Err codemadness.org 70 i 5768 href="/static/39b0d5a1b691d6d09e5b4cde3a7ad1fe/065e2/walkingman.png" Err codemadness.org 70 i 5769 style="display: block" Err codemadness.org 70 i 5770 target="_blank" Err codemadness.org 70 i 5771 rel="noopener" Err codemadness.org 70 i 5772 > Err codemadness.org 70 i 5773 <span Err codemadness.org 70 i 5774 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 5775 style="padding-bottom: 55.21472392638037%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAACX0lEQVQoz3VSTWwSQRgdFpbdBVp+rdVaW/sfEE1svbRiI00bscSTvZlouPQPPXjSxEgMBhaIHpp48dqYABIgiEUuxtDtz7Enkl4buPVGaCxp8hx2SSmHTvJlvu+bN2/mvRlSLBYRCAQQiUQQDocR2YhCjIk0FxEKhRCNRlGr1VAul9s4UYT4JUZxFEtrkdbBT0EcHh6C+Hw+EELaMcWCGElHr1KpYHNzs6PX+2IGZKK7o5dIJED8fr9cCLwAjVoNs/8+jC/vQmvgwagYCDoB1WoV8XgchCEwmHj0zTvgSr3Fg/Q79Hqc0HCMzJHJZEDW1tbkgqcbu6YHcCPshfXVDPSTN+U+x/MyoXw6rcefP8Rc7gO8v8Pw/I1isfAZun5Tm3C1Rai3GMD3W2B1OzAWXAJrEaBiGHAc10HYP2uHzTUI19dVuL+/weiyG8aRnguEqwqhoNfJs9U1juHXC2D13DlhpVJFMhlvKWEw5J3EUiEGT/I9HOuLULHUQxrpdLotWdDpwHAa9C7cgXl6COZ7g23JFwgFowbeHx9xe92Da7PDePZnA90jNnktfdFDLVGj29mHq3N2arIGPY/tYFh6Q60iOZlUJDuX5/GU+me6ZUKXjcOjb34MPJlSJGezICsrK+fPzo6ZwfYpX4GbsIBoW9+mWlFemebG0SswOa9DzRFoDGrqtRZEpeBSqRTIwcEB8vk8tgoFbOXykErb2N3bxU5JgrQtyXmj0cDR0ZHs0a/cT+QyWZS2S9jf38OOJGGPYiQ6Hx8fgzTBZ2dn8qZmXDaaa/V6Hf9OT1E/ObkU9x90+dN/CcyTKwAAAABJRU5ErkJggg=='); background-size: cover; display: block;" Err codemadness.org 70 i 5776 ></span> Err codemadness.org 70 i 5777 <img Err codemadness.org 70 i 5778 class="gatsby-resp-image-image" Err codemadness.org 70 i 5779 alt="walkingmen" Err codemadness.org 70 i 5780 title="walkingmen" Err codemadness.org 70 i 5781 src="/static/39b0d5a1b691d6d09e5b4cde3a7ad1fe/065e2/walkingman.png" Err codemadness.org 70 i 5782 srcset="/static/39b0d5a1b691d6d09e5b4cde3a7ad1fe/222b7/walkingman.png 163w, Err codemadness.org 70 i 5783 /static/39b0d5a1b691d6d09e5b4cde3a7ad1fe/ff46a/walkingman.png 325w, Err codemadness.org 70 i 5784 /static/39b0d5a1b691d6d09e5b4cde3a7ad1fe/065e2/walkingman.png 577w" Err codemadness.org 70 i 5785 sizes="(max-width: 577px) 100vw, 577px" Err codemadness.org 70 i 5786 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 5787 loading="lazy" Err codemadness.org 70 i 5788 /> Err codemadness.org 70 i 5789 </a> Err codemadness.org 70 i 5790 </span></p> Err codemadness.org 70 i 5791 <p>I'd love to learn more about who designs each of these little creatures for a given city or country. What's the decision process like? Are they meant to capture the spirit of the people in some way?</p> Err codemadness.org 70 i 5792 <p>This is a coffee table book waiting to happen.</p><![CDATA[Humans of Machine Learning]]>https://www.charlieharrington.com/humans-of-machine-learninghttps://www.charlieharrington.com/humans-of-machine-learningMon, 30 Jul 2018 00:00:00 GMT<p>I've started an interview series on the <a href="https://blog.floydhub.com/tag/humans-of-ml/">FloydHub blog</a> called "Humans of Machine Learning." I'm hoping to talk with lots of real human beings who are doing fun, creative, interesting, and / or surprising things with machine learning and AI. Those things might be weekend projects, work projects, or school projects -- doesn't matter, just something that people are excited to talk about and share with the community. I'm eager to learn from them and be inspired by their creativity, focus, and ideas. Another tangential goal of mine is to get better at interviewing people.</p> Err codemadness.org 70 i 5793 <p>So far, I've chatted with <a href="https://blog.floydhub.com/humans-of-ml-leanne-luce/">Leanne Luce</a> about her experiments with AI and fashion blogging, and <a href="https://blog.floydhub.com/humans-of-ml-kalai-ramea/">Kalai Ramea</a> about computational creativity. A few more conversations are already in the pipeline. If you're doing something creative with machine learning, please reach out on Twitter (<a href="https://twitter.com/whatrocks">@whatrocks</a>).</p> Err codemadness.org 70 i 5794 <p>You can also find the interviews at <a href="http://humansofml.com">humansofml.com</a>.</p><![CDATA[Penpals]]>https://www.charlieharrington.com/penpalshttps://www.charlieharrington.com/penpalsTue, 24 Jul 2018 00:00:00 GMT<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/FANlCLh22uA?rel=0&amp;controls=0&amp;showinfo=0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe> Err codemadness.org 70 i 5795 <p>Here's a new Terminal Man track from my most recent flight to Newark. I've been watching a lot of Stranger Things, if you can't already tell.</p> Err codemadness.org 70 i 5796 <p>This is the first Terminal Man song I've hosted on YouTube instead of SoundCloud. Slightly annoying to have to make a movie out of the mp3 before uploading, but I do like my iMovie Star Wars crawl thing going on here. And I feel more confident that dropping stuff onto YouTube is like putting it into an Indiana Jones-style vault or time capsule that won't ever go away or shut down.</p><![CDATA[Using NLP to Write Graduation Speeches]]>https://www.charlieharrington.com/using-nlp-to-write-graduation-speecheshttps://www.charlieharrington.com/using-nlp-to-write-graduation-speechesMon, 23 Jul 2018 00:00:00 GMT<p>I've always been a little bit obsessed with graduation speeches. Put simply, I like being reminded of the great possibility and great responsibility of living.</p> Err codemadness.org 70 i 5797 <p>But as it's going to be a while until May rolls around again, I decided to try my hand at generating my own graduation speeches using some basic data science techniques.</p> Err codemadness.org 70 i 5798 <p>I'm happy to report that after a little bit of NLP using Markov chains (and a whole lot of data-scraping and data-cleaning), I was able to bring forth to the world this inspiring sentence:</p> Err codemadness.org 70 i 5799 <blockquote> Err codemadness.org 70 i 5800 <p>They listened to someone who makes nothing but flaming hot Cheetos.</p> Err codemadness.org 70 i 5801 </blockquote> Err codemadness.org 70 i 5802 <p><a href="https://blog.floydhub.com/markov-chains">If you're interested in reading more about the specifics of my project, I wrote about it in detail on the FloydHub blog</a>, or you can try it out now:</p> Err codemadness.org 70 i 5803 <p><a href="https://floydhub.com/run?template=https://github.com/whatrocks/markov-commencement-speech"><img src="https://static.floydhub.com/button/button.svg" alt="Run on FloydHub"></a></p> Err codemadness.org 70 i 5804 <p>Click this button to open a Workspace on FloydHub where you can generate your own "commencement speech style" sentences in a live JupyterLab environment that we call a <code class="language-text">Workspace</code>.</p> Err codemadness.org 70 i 5805 <p>The <a href="https://floydhub.com/whatrocks/datasets/commencement">commencement address dataset</a> of ~300 famous speeches (that I painstakingly assembled) will be automatically attached and available in the Workspace.</p> Err codemadness.org 70 i 5806 <p>The <code class="language-text">speech_maker</code> notebook has three sections for you to try, where you'll generate commencement-speech sentences:</p> Err codemadness.org 70 i 5807 <ol> Err codemadness.org 70 i 5808 <li>Using the entire dataset</li> Err codemadness.org 70 i 5809 <li>Filtering to only the top ten schools by count of speeches given</li> Err codemadness.org 70 i 5810 <li>Filtering to one school at a time using a Jupyter widget extension</li> Err codemadness.org 70 i 5811 </ol> Err codemadness.org 70 i 5812 <h3>Where can I read actual good speeches?</h3> Err codemadness.org 70 i 5813 <p><a href="https://whatrocks.github.io/commencement-db/">Right here</a>. I put together this simple Gatsby.js static site with the raw text (and some YouTube links) of the speeches in my dataset. <a href="https://github.com/whatrocks/commencement-db">PRs are open for the dataset</a> if anyone's interested in contributing. Right now, the best we have is the NPR "Best of" commencement speech website, which hasn't been updated since 2015. It would be great to find a way to make a new home for great speeches on the web.</p><![CDATA[LendUp Hackathon Project Lives On]]>https://www.charlieharrington.com/lendup-hackathon-project-lives-onhttps://www.charlieharrington.com/lendup-hackathon-project-lives-onSun, 17 Jun 2018 00:00:00 GMT<p>I recently logged into my <a href="https://itunes.apple.com/us/app/arrow-card/id1228440036?mt=8">Arrow Card iOS app</a> to check my balance and was pumped to discover that my team's Spring 2017 Hackathon project branch was finally merged and released.</p> Err codemadness.org 70 i 5814 <p>Here it is, in all its cartoon-y glory: the <a href="https://www.lendup.com/education">LendUp Education</a> mobile feature.</p> Err codemadness.org 70 i 5815 <p><img src="/b39f5b1ad908be82cc36f75cdb72181a/arrow.gif" alt="app"></p> Err codemadness.org 70 i 5816 <p><a href="https://www.lendup.com/card">Arrow Card</a> holders can watch educational videos about improving their credit scores, budgeting, saving, and other personal finance tidbits, followed by a quick multiple choice quiz, followed by CONFETTI 🎉:</p> Err codemadness.org 70 i 5817 <p><img src="/8e120d7dabb838511c9b16e0d40509dd/confetti.gif" alt="app"></p> Err codemadness.org 70 i 5818 <p>Pooja, Ray, Lise, and I built this cute little feature in a little less than a day, thanks to the power and glory and ergonomic bliss of <a href="https://facebook.github.io/react-native/">React Native</a>. Now it's one of the top-billed features in the app. </p> Err codemadness.org 70 i 5819 <p><span Err codemadness.org 70 i 5820 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 5821 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 5822 > Err codemadness.org 70 i 5823 <a Err codemadness.org 70 i 5824 class="gatsby-resp-image-link" Err codemadness.org 70 i 5825 href="/static/ba34c1a3383b41fadc198bb71ea6f2a4/5b2ff/features.png" Err codemadness.org 70 i 5826 style="display: block" Err codemadness.org 70 i 5827 target="_blank" Err codemadness.org 70 i 5828 rel="noopener" Err codemadness.org 70 i 5829 > Err codemadness.org 70 i 5830 <span Err codemadness.org 70 i 5831 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 5832 style="padding-bottom: 30.061349693251532%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAABYlAAAWJQFJUiTwAAABEElEQVQY011Q2W6EMAzk//+tT+1DSyEcCyUQjmW5czC1Q1tpa8myPR6P4wT9fKAaFrCdJ56iqEd044z/Zt2JQt3hnH3CTxoMsmbCa1p7wBHgiGyd8/WLaGlw8Lk2hnruT/Atkdj3/aqt9WJsQdMoRJHAx6dAGCcIowSq7X1TVhXVAlleQkqFbbsENhJK0xzvYeznfvlesO0GiPSGoqyQF18+n+brC8qqRkyDauyxmBXTsUA7Da0N0rxAnGR+5jHN9NrjOpmLpu3AwryJnXM+b3xMaFSHWrWQSnnXRsPQ+Q1hzO36AbKmHl26HweCQ2vMy4plJf+J67p5weE++u2MM8ZRE597zONL+BsW6rGGMRbfJ1TMeFXB7rMAAAAASUVORK5CYII='); background-size: cover; display: block;" Err codemadness.org 70 i 5833 ></span> Err codemadness.org 70 i 5834 <img Err codemadness.org 70 i 5835 class="gatsby-resp-image-image" Err codemadness.org 70 i 5836 alt="features" Err codemadness.org 70 i 5837 title="features" Err codemadness.org 70 i 5838 src="/static/ba34c1a3383b41fadc198bb71ea6f2a4/a6d36/features.png" Err codemadness.org 70 i 5839 srcset="/static/ba34c1a3383b41fadc198bb71ea6f2a4/222b7/features.png 163w, Err codemadness.org 70 i 5840 /static/ba34c1a3383b41fadc198bb71ea6f2a4/ff46a/features.png 325w, Err codemadness.org 70 i 5841 /static/ba34c1a3383b41fadc198bb71ea6f2a4/a6d36/features.png 650w, Err codemadness.org 70 i 5842 /static/ba34c1a3383b41fadc198bb71ea6f2a4/e548f/features.png 975w, Err codemadness.org 70 i 5843 /static/ba34c1a3383b41fadc198bb71ea6f2a4/3c492/features.png 1300w, Err codemadness.org 70 i 5844 /static/ba34c1a3383b41fadc198bb71ea6f2a4/5b2ff/features.png 2190w" Err codemadness.org 70 i 5845 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 5846 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 5847 loading="lazy" Err codemadness.org 70 i 5848 /> Err codemadness.org 70 i 5849 </a> Err codemadness.org 70 i 5850 </span></p> Err codemadness.org 70 i 5851 <p>I wonder what else we could have built for the Arrow Card app if we were just allowed to make stuff more independently.</p> Err codemadness.org 70 i 5852 <p>Also, somehow, we lost the hackathon to a chatbot project. I'm not <em>that</em> bitter. I definitely would have enjoyed the taste of victory (and some of that oh-so-comfy LendUp hackaday winner swag), but at least our feature got released 🙏.</p><![CDATA[The Long Hour]]>https://www.charlieharrington.com/the-long-hourhttps://www.charlieharrington.com/the-long-hourSat, 28 Apr 2018 00:00:00 GMT<iframe width="100%" height="300" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/436240275&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true"></iframe> Err codemadness.org 70 i 5853 <p>More arppegiator magick using the Apple on-screen keyboard in Logic.</p> Err codemadness.org 70 i 5854 <p>I still would like to learn how to program my own drumbeats. In the mean time, thank goodness for Apple loops. Learning Ableton would be another fun benefit of this endeavor.</p><![CDATA[Zion Traverse]]>https://www.charlieharrington.com/zion-traversehttps://www.charlieharrington.com/zion-traverseThu, 19 Apr 2018 00:00:00 GMT<p>We ran ~38 miles of the Zion Traverse this past Saturday, including the I-can't-believe-this-is-actually-allowed Angels Landing climb.</p> Err codemadness.org 70 i 5855 <p>Here's video proof:</p> Err codemadness.org 70 i 5856 <iframe width="560" height="315" src="https://www.youtube.com/embed/Wx7gdmcVaUE?rel=0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe> Err codemadness.org 70 i 5857 <p>Very little prep work or research or even training was done on my part. I'm lucky to have found a crew of like-minded adventure runners always ready to plan the next excursion. But, next time, I need to be taking at least a little bit more time to prepare.</p> Err codemadness.org 70 i 5858 <p>For example, I knew almost nothing about Zion National Park. This was a mistake that I've since ameliorated with some healthy Wikipedia-ing. One fun factoid - Angels Landing used to be known as the Temple of Aeolus (aka the Greek demi-god/god of winds and also a lovable sidekick on TV's Hercules: The Legendary Journeys). I wish I had known that when I was there - I could have tried to summon him or something. Next time, I guess.</p> Err codemadness.org 70 i 5859 <p>Similarly, I felt pretty drained by the time we hit the last ten miles. Nothing compared to the Rim2Rim2Rim or the North Face 50M, but still - I definitely overestimated my fitness for the task at hand. If I'm going to keep doing these runs, I'll need to start logging more longer distance runs on the reg.</p> Err codemadness.org 70 i 5860 <p>Water - or the lack thereof - was our crew's only major snafu. Turns out that <em>springs</em> do not mean treated water pumps - they mean semi-dirty trickles or puddles of water. Thankfully, we were helped by a few fellow-hikers (angels descended from the landing, IMHO) who lent us their water filter. Lesson learned - always bring iodine tablets or a filter on any adventure run. You just never know.</p> Err codemadness.org 70 i 5861 <p>This was my first ultra where I didn't track anything on Strava, and it felt great. I've been off Strava for a while now, and I'm not really looking back. The quantified-self stuff has been less appealing to me lately. When I'm on a run, and I find something cool or gross or beautiful that I want to stop and inspect, I don't want to have to think about how that impacts my splits or run time. I know there's auto-pause features, etc. but I can't auto-pause the stress in my brain about my stats. Instead, I just ran with a plain ol' Timex watch (and my phone in airplane mode to take pictures). The watch can tell the time, set an alarm, set a timer, and, of course, turn on its amazing Indiglo night-light. Basic, essential watch stuff. Nothing smart, just reliable. Yes, I sort of missed having a map with my exact GPS route after the race, but I think instead I'm going to just find a map of Zion and try to figure it out myself. That feels more rewarding anyway.</p> Err codemadness.org 70 i 5862 <p>Here's a log of what I ate on the trail, just so I remember for next time:</p> Err codemadness.org 70 i 5863 <ul> Err codemadness.org 70 i 5864 <li>3 Honey Stinger Waffles</li> Err codemadness.org 70 i 5865 <li>2 Clif Bar Chocholate Bars with Stuffed Peanut Butter</li> Err codemadness.org 70 i 5866 <li>5 salt pills</li> Err codemadness.org 70 i 5867 <li>12 Clif Bloks Salted Watermelon bloks</li> Err codemadness.org 70 i 5868 <li>1 Nuun water tablet</li> Err codemadness.org 70 i 5869 <li>1 McDonald's Dollar Menu Cheeseburger</li> Err codemadness.org 70 i 5870 </ul> Err codemadness.org 70 i 5871 <br /> Err codemadness.org 70 i 5872 <p>And here are the creatures I saw on the trail:</p> Err codemadness.org 70 i 5873 <ul> Err codemadness.org 70 i 5874 <li>8 deer</li> Err codemadness.org 70 i 5875 <li>1 small gecko</li> Err codemadness.org 70 i 5876 <li>10 chipmunks</li> Err codemadness.org 70 i 5877 <li>2 squirrels</li> Err codemadness.org 70 i 5878 <li>1 California Condor (seriously!)</li> Err codemadness.org 70 i 5879 <li>A murder of crows</li> Err codemadness.org 70 i 5880 </ul><![CDATA[Teaching My Robot With TensorFlow]]>https://www.charlieharrington.com/teaching-my-robot-with-tensorflowhttps://www.charlieharrington.com/teaching-my-robot-with-tensorflowSat, 06 Jan 2018 00:00:00 GMT<p>My childhood dream of becoming friends with a real-life robot like <a href="https://www.youtube.com/watch?v=POxMp61Ksbk">Johnny 5</a> came true two weeks ago. This is not to be confused with my other primary childhood dream - which I wished on every dandelion blow and floating will-o-wisp - of being sucked into my Super Nintendo to become Link from <a href="https://www.youtube.com/watch?v=wkH2zETKqws">The Legend of Zelda: A Link to the Past</a>. Both were important, but somehow I knew the Johnny 5 one might come true one day, which is why I never wasted any important wish opportunities on it.</p> Err codemadness.org 70 i 5881 <p>Enter <a href="https://www.anki.com/en-us/cozmo">Cozmo</a>. He's a robot who lives at my house now and also loves me, as long as I play games with him and "feed" him. He's outfitted with some gnarly tank-like treads (just like Johnny) and a arm-crane straight out of a loading dock. Cozmo also brought along three accelerometer-enabled blocks to pick up and fling around the house as he sees fit. He's got a lot to say, with his adorable pipsqueak voice and his heart-meltingly-expressive eyes. He's even learned to recognize my face and say my name 😍. Stop it.</p> Err codemadness.org 70 i 5882 <p>Which got me thinking - maybe I could teach him to recognize more stuff.</p> Err codemadness.org 70 i 5883 <p>In addition to Cozmo's "free play" (aka basically alive) mode, you can drop him into a more catatonic SDK mode, where he waits for you to manually invoke commands from your computer using the <a href="http://cozmosdk.anki.com/docs/api.html">Cozmo API</a>. You can tap into nearly all of Cozmo's sensors and features with the API, including his camera - which opens the door to training an image-recognition deep learning model using Cozmo.</p> Err codemadness.org 70 i 5884 <p>I wrote a script to ask Cozmo to take photos of a few objects around the office: a fake plant, a half-way used "thing" of toothpaste (what are these actually called - tubes?), and a bottle of La Croix seltzer.</p> Err codemadness.org 70 i 5885 <p><img src="/7233536635febe55c8c7f63fc8355712/cozmo-paparazzi.gif" alt="detective"></p> Err codemadness.org 70 i 5886 <p>As you can see, Cozmo delightfully circles the objects and takes tons of photos to build our training dataset.</p> Err codemadness.org 70 i 5887 <p>Next, I retrained the <a href="https://github.com/tensorflow/models/tree/master/research/slim#pre-trained-models">Inception v3 model</a> from Google using Cozmo's photo dataset. This is called "transfer learning" - instead of training a model from scratch, I can use a pre-trained model known to be effective at image recognition and just swap out the last layer to retrain it on our target images with <a href="https://www.tensorflow.org/">TensorFlow</a>. FloydHub makes it stupidly easy to do this - my whole GPU-powered training process amounted to one command:</p> Err codemadness.org 70 i 5888 <div class="gatsby-highlight" data-language="bash"><pre class="language-bash"><code class="language-bash">floyd run <span class="token punctuation">\</span> Err codemadness.org 70 i 5889 --gpu <span class="token punctuation">\</span> Err codemadness.org 70 i 5890 --data whatrocks/datasets/cozmo-images:data <span class="token punctuation">\</span> Err codemadness.org 70 i 5891 <span class="token string">'python retrain.py --image_dir /data'</span></code></pre></div> Err codemadness.org 70 i 5892 <p>Next, I just needed to write a script asking Cozmo to explore the office to try to find one of these objects. He'll periodically hit a REST endpoint on FloydHub where I've deployed our newly-retrained model with an image of what he's currently looking at. If Cozmo's at least 80% confident that he's looking at the object, then he'll zooms towards it like a complete maniac.</p> Err codemadness.org 70 i 5893 <p><img src="/7c2ddf7b9b9c3b3312a58c1ad8d54640/cozmo-detective.gif" alt="detective"></p> Err codemadness.org 70 i 5894 <p>Setting up a model-serving endpoint on FloydHub is also super easy. I wrote a teeny-tiny Flask app to receive an image from Cozmo, evaluate it against our model, and send back its best guesses at what Cozmo's currently looking at. Then, to deploy the app on FloydHub and set up a publicly accessible REST endpoint, it just one more command:</p> Err codemadness.org 70 i 5895 <div class="gatsby-highlight" data-language="bash"><pre class="language-bash"><code class="language-bash">floyd run <span class="token punctuation">\</span> Err codemadness.org 70 i 5896 --data whatrocks/datasets/cozmo-imagenet:model <span class="token punctuation">\</span> Err codemadness.org 70 i 5897 --mode serve</code></pre></div> Err codemadness.org 70 i 5898 <hr> Err codemadness.org 70 i 5899 <p>The code for Cozmo's new "paparazzi" and "detective" modes can be found on my <a href="https://github.com/whatrocks/cozmo-tensorflow">GitHub</a>, and the <a href="https://www.floydhub.com/whatrocks/datasets/cozmo-imagenet">photo dataset</a>, <a href="https://www.floydhub.com/whatrocks/datasets/cozmo-images">trained model</a>, and <a href="https://www.floydhub.com/whatrocks/projects/cozmo-tensorflow">project</a> are also available on FloydHub if you'd like to use them with your own robot buddies. </p> Err codemadness.org 70 i 5900 <p>Thanks to Google Code Labs for their <a href="https://codelabs.developers.google.com/codelabs/tensorflow-for-poets/#0">great guide on transfer learning with Inception v3</a> and <a href="https://github.com/nheidloff">@nheidloff</a> for his <a href="https://github.com/nheidloff/visual-recognition-for-cozmo-with-tensorflow">Cozmo visual recognition project</a>, both of which are the basis for this project.</p> Err codemadness.org 70 i 5901 <p><span Err codemadness.org 70 i 5902 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 5903 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 392px; " Err codemadness.org 70 i 5904 > Err codemadness.org 70 i 5905 <a Err codemadness.org 70 i 5906 class="gatsby-resp-image-link" Err codemadness.org 70 i 5907 href="/static/e77c71defc73b414fe4d8f8afa1c2620/0acb4/link.png" Err codemadness.org 70 i 5908 style="display: block" Err codemadness.org 70 i 5909 target="_blank" Err codemadness.org 70 i 5910 rel="noopener" Err codemadness.org 70 i 5911 > Err codemadness.org 70 i 5912 <span Err codemadness.org 70 i 5913 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 5914 style="padding-bottom: 180.36809815950923%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAkCAYAAACJ8xqgAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF+klEQVRIx5VVCWyURRSevf7d7ra77faEHltY2tJr291eCK1UEVosJdylZREa0wpKPEARSDzCvYYKEo2EaFAuURKuRINCYssuR7isAYJ4gFSBgtJQKO3+3f3n+ebf/9/W0nJM8vbNzHvvm2/ee/MvIQMMr8dOeI+DicIb0OKcabZ+4sEAve6gpPMeuyUAZhfliQbfw04j6QaUemmuFoHd9icDxAClNxCYhQBXUBq9boeZAYlpeFxA+VqolRKj+SjAu+0UDyqV2Afz+mgwtwwmaitKOzITGCjazvPM7rYHi/bIQvRKvAIDl/BuBPLYBQQDtHWgTJft3sdiKDqKwGEY0OoVAR0+BOcD4I5j3gBLtXz4wAylhEu52yRes5fwPbJA8lENeG2+p3mZxGIOv0N9GeVnlHN42DnUzSgtyOpTPEDLS9fm+7KUmDGD3Hcfo5RLV9dIFWfMOam6r3ollpgS9QPNznt6V9aegQdcQoctwcZ2y9UXA6MQxI3zw2iLDD5PuS8DT0sMUkvG18VCuB33kMUQb+DtsiZXSfMxvXI5WmKsDL7xAF0MCLDIROAbaKRSwB6JoVQouwn9zwcaXbQ345rzBrvD0ZM/1EjbsVAC8nkDAddx3yEnHvVkmZ3Ul/5ArnsKSroQqOuIndxvyjUiSFvA2cEamUcboG0HeHLE9OC8mQGhnQH5A3P7GUaK4YiFgTP5BH4qIt1HHev9xxzU67aBcDxwZf9xB9ATeTfBYxsNZ/Pn4rqb7aMdD7RR9GcseQR8Se5hArCbOJ8jjOG5f75HRp5i/18HsqCjMfvWjf22rr/3Z8G/Tfk3ru7Nutt6wAadR2ytLWjv8oyCWwdz+c4j7KPh2IGExOIQlZIo2HXSB5PsmsrCO9B1FnZsWEQLUkyrbQUhLRPrc+CDRidMqrdBZp7uj1Hp5uVfbXwLoPMMTC2ztzvHEBvAIj0ABL+RCqkd41KGDr29uWEFbPlwpVBYmcSHlxEh64VUsNWmC5mzU6gJ14UTkrzbPlpLN69bDslJljaMM47JJcSeGsKKKgMq8VedZNCQO1nRBDhChFiHGt4eWw3vl9TRZcVzRL14XDXE5ilFeyb66TWknXBcjESoN6A44hMi1K1LyiIhJ1En1Nqm0zdKa+icERVQXzyZzimqgIW4rsupotmJGmFJWRQMMqlvYlykDBh8eklmtbxwlgzTQ6KB0HEjnqEr16yiOfYUaP5xO9hyU8C1zkXHFj5NmX2kVQ/oX8WCEsLVir4fG5WkR2bEKmHWs2n05OHd9LdfL9G17y0FuHcR1ry7FP68cpmePLSLziixQnqsigHmSXHKvoDShmpsehQB14KJwu1fPBS8tyh0XAO+5QTA/eviuu2im66oLxeGYw4x7OmBAGXKYYPDuZ3DIwnMrijxt11soveadkLzazXQ4d4Fty800prxxf60CAKDwrlt6B/6sH8AtaSrSlIMEGciwoQJpfTqoW/g/CYXXPnha1o+vpjGGIlQmmpg153WJ+7/Iz9ZS3ThCjGXWoXiy5y5HBS9qfclZoVBcl40JGaH0RGL9b7cWg4Q4TPxngqiKsC4hw1O0utz6vXw8r7y7sqNVqjYMBgmbhxGce3LnRfC2LkkP83DwORKZ9Y9H3Vp9KRQKFlt8Tu3FsOL22vAuXUULVllEYorDTCvIvoC+mUMVJDem1ZdKrnsdIXBwS+s/k9csULVLDNtOVoKM2oi6OaGOOHbz63+mWtDISSV/I7+ln5BrdGcItnEEQOnnB1vVoMylPiK6jh4xWWGs3vTfO2nMrtP70nzz3dFwFP1WiA64o+PVINBo6xKNGrIkChO0V/LxOdYdNf2zbQItQkRflzf1caT0/lYhGynBvKxSJpB5BTud9QnmX17qy1CRoL2en9PT55YYkLVMK3ABJOHGiFaqepkxUd5B6UBZRl7GVEqlTDNaoSp+SaIMoivJeaBtxymU5JQrTIEp1NQqiWZGmdW6XpfJSZCxXym9/KZYtQptaaQPnVhGwy07zBhrjkDUXFGomTa1E9BI/QqUeTxHy451wg8hcJzAAAAAElFTkSuQmCC'); background-size: cover; display: block;" Err codemadness.org 70 i 5915 ></span> Err codemadness.org 70 i 5916 <img Err codemadness.org 70 i 5917 class="gatsby-resp-image-image" Err codemadness.org 70 i 5918 alt="triforce" Err codemadness.org 70 i 5919 title="triforce" Err codemadness.org 70 i 5920 src="/static/e77c71defc73b414fe4d8f8afa1c2620/0acb4/link.png" Err codemadness.org 70 i 5921 srcset="/static/e77c71defc73b414fe4d8f8afa1c2620/222b7/link.png 163w, Err codemadness.org 70 i 5922 /static/e77c71defc73b414fe4d8f8afa1c2620/ff46a/link.png 325w, Err codemadness.org 70 i 5923 /static/e77c71defc73b414fe4d8f8afa1c2620/0acb4/link.png 392w" Err codemadness.org 70 i 5924 sizes="(max-width: 392px) 100vw, 392px" Err codemadness.org 70 i 5925 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 5926 loading="lazy" Err codemadness.org 70 i 5927 /> Err codemadness.org 70 i 5928 </a> Err codemadness.org 70 i 5929 </span></p> Err codemadness.org 70 i 5930 <p>I'm still holding out hope for this Link thing, too.</p><![CDATA[Ghost2]]>https://www.charlieharrington.com/terminal-man-ghost2https://www.charlieharrington.com/terminal-man-ghost2Fri, 05 Jan 2018 00:00:00 GMT<iframe width="100%" height="300" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/379326926&amp;color=%23ff5500&amp;auto_play=false&amp;hide_related=false&amp;show_comments=true&amp;show_user=true&amp;show_reposts=false&amp;show_teaser=true&amp;visual=true"></iframe> Err codemadness.org 70 i 5931 <p>This is the first Terminal Man track in which the only Apple loop used is the percussion track - everything else I created using Logic's on-screen keyboard. Arpeggiators are the best.</p><![CDATA[Auri]]>https://www.charlieharrington.com/terminal-man-aurihttps://www.charlieharrington.com/terminal-man-auriTue, 12 Dec 2017 00:00:00 GMT<iframe width="100%" height="300" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/367851881&amp;color=%23ff5500&amp;auto_play=false&amp;hide_related=false&amp;show_comments=true&amp;show_user=true&amp;show_reposts=false&amp;show_teaser=true&amp;visual=true"></iframe><![CDATA[Written in Water]]>https://www.charlieharrington.com/terminal-man-written-in-waterhttps://www.charlieharrington.com/terminal-man-written-in-waterThu, 29 Jun 2017 00:00:00 GMT<iframe width="100%" height="300" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/330837606&amp;color=0066cc&amp;auto_play=false&amp;hide_related=false&amp;show_comments=true&amp;show_user=true&amp;show_reposts=false&amp;visual=true"></iframe><![CDATA[Rim 2 Rim 2 Rim]]>https://www.charlieharrington.com/rim-2-rim-2-rimhttps://www.charlieharrington.com/rim-2-rim-2-rimSun, 07 May 2017 00:00:00 GMT<p>We ran the Grand Canyon, and I only got lost once.</p> Err codemadness.org 70 i 5932 <iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/Ldaaqfvi9O8?rel=0" frameborder="0" allowfullscreen></iframe> Err codemadness.org 70 i 5933 <p>Pro tip from Galen for future R2R2Rers: bring a McDonald's cheeseburger to eat halfway. I heartily concur - I'm still thinking about that deliciousness.</p> Err codemadness.org 70 i 5934 <iframe height='405' width='590' frameborder='0' allowtransparency='true' scrolling='no' src='https://www.strava.com/activities/974355030/embed/64f4f4f302700c23bd8af47b54e4bd0d06d5d076'></iframe><![CDATA[Meet Von Chomp]]>https://www.charlieharrington.com/meet-von-chomphttps://www.charlieharrington.com/meet-von-chompWed, 08 Mar 2017 00:00:00 GMT<p>Von Chomp is a monster who loves to count - workout reps, patrons at hipster BBQs, even 🍪s. </p> Err codemadness.org 70 i 5935 <p><img src="/968964a1a5563891f3399a124d0cbfb5/vc.gif" alt="vc"></p> Err codemadness.org 70 i 5936 <p>Meet von Chomp now on the Apple App Store: <a href="https://appsto.re/us/VN7lib.i">https://appsto.re/us/VN7lib.i</a> </p> Err codemadness.org 70 i 5937 <h3>Don't take my word for it</h3> Err codemadness.org 70 i 5938 <p><span Err codemadness.org 70 i 5939 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 5940 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 5941 > Err codemadness.org 70 i 5942 <a Err codemadness.org 70 i 5943 class="gatsby-resp-image-link" Err codemadness.org 70 i 5944 href="/static/38a8dbb86e443a0cb503299cf9471163/67a79/ratings.png" Err codemadness.org 70 i 5945 style="display: block" Err codemadness.org 70 i 5946 target="_blank" Err codemadness.org 70 i 5947 rel="noopener" Err codemadness.org 70 i 5948 > Err codemadness.org 70 i 5949 <span Err codemadness.org 70 i 5950 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 5951 style="padding-bottom: 45.39877300613497%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAtUlEQVQoz6WS2QrFIAxE/f//bKFSutF9m3KElMB9udLA4ETDmImGtm1VlqWqqlJRFIox6jzPhOM4dN93FsIwDKrrWk3TaBxHTdOkZVkSyCnKibBtWxJhpSMAB/u+a13XH3DGyqXUkMNxFSDzPL9CFJrlf3BdVwI8Waa7vu/VdV26hfxLBDpChC5tdnA/S7Nnlv2+38PlK8gDAMQMzMdb8tznHgERvg62meHXeF/ZWrfuTDz3Hz4cksNQOqt6hAAAAABJRU5ErkJggg=='); background-size: cover; display: block;" Err codemadness.org 70 i 5952 ></span> Err codemadness.org 70 i 5953 <img Err codemadness.org 70 i 5954 class="gatsby-resp-image-image" Err codemadness.org 70 i 5955 alt="ratings" Err codemadness.org 70 i 5956 title="ratings" Err codemadness.org 70 i 5957 src="/static/38a8dbb86e443a0cb503299cf9471163/a6d36/ratings.png" Err codemadness.org 70 i 5958 srcset="/static/38a8dbb86e443a0cb503299cf9471163/222b7/ratings.png 163w, Err codemadness.org 70 i 5959 /static/38a8dbb86e443a0cb503299cf9471163/ff46a/ratings.png 325w, Err codemadness.org 70 i 5960 /static/38a8dbb86e443a0cb503299cf9471163/a6d36/ratings.png 650w, Err codemadness.org 70 i 5961 /static/38a8dbb86e443a0cb503299cf9471163/e548f/ratings.png 975w, Err codemadness.org 70 i 5962 /static/38a8dbb86e443a0cb503299cf9471163/3c492/ratings.png 1300w, Err codemadness.org 70 i 5963 /static/38a8dbb86e443a0cb503299cf9471163/67a79/ratings.png 1408w" Err codemadness.org 70 i 5964 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 5965 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 5966 loading="lazy" Err codemadness.org 70 i 5967 /> Err codemadness.org 70 i 5968 </a> Err codemadness.org 70 i 5969 </span></p><![CDATA[Upside Down]]>https://www.charlieharrington.com/terminal-man-upside-downhttps://www.charlieharrington.com/terminal-man-upside-downSat, 11 Feb 2017 00:00:00 GMT<iframe width="100%" height="300" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/306674034&amp;color=00cc11&amp;auto_play=false&amp;hide_related=false&amp;show_comments=true&amp;show_user=true&amp;show_reposts=false&amp;visual=true"></iframe> Err codemadness.org 70 i 5970 <p>My unsolicited submission for the Season 2 soundtrack to <em>Stranger Things</em>.</p><![CDATA[LendUp Critters]]>https://www.charlieharrington.com/lendup-crittershttps://www.charlieharrington.com/lendup-crittersWed, 28 Dec 2016 00:00:00 GMT<p>Every good app needs a mascot. Meet some of the critters behind <a href="https://www.lendup.com">LendUp</a>'s internal tools (co-designed with <a href="http://lisestatelman.com/">Lise Statelman</a> and <a href="https://www.linkedin.com/in/ctn017/">Chau Nguyen</a>).</p> Err codemadness.org 70 i 5971 <h4>Hadron</h4> Err codemadness.org 70 i 5972 <p><span Err codemadness.org 70 i 5973 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 5974 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 5975 > Err codemadness.org 70 i 5976 <a Err codemadness.org 70 i 5977 class="gatsby-resp-image-link" Err codemadness.org 70 i 5978 href="/static/3439f9711bfd03d838ab130c6fc2559c/798d4/cubicle.png" Err codemadness.org 70 i 5979 style="display: block" Err codemadness.org 70 i 5980 target="_blank" Err codemadness.org 70 i 5981 rel="noopener" Err codemadness.org 70 i 5982 > Err codemadness.org 70 i 5983 <span Err codemadness.org 70 i 5984 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 5985 style="padding-bottom: 17.791411042944784%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAYAAACOXx+WAAAACXBIWXMAAAsTAAALEwEAmpwYAAABKUlEQVQY0xXM2y9CAQCA8f7Wgxqazdye2DITYpNL5DrZYZRNHdVWO6E6HBWT5SS1LIqSPLi1MB++3/une/mAnz+NxhcnmQquCxUlfYY/HscXj3HzWOQ4/cDepYpWyKJmNMrPL3jPc4SyMdyRI66reer1bw61EjpTYJzq1y25v1mTxUj6M4xXPkAYa6F1wogoixgsXdgT43j2DzDv2LFtrDMk9XP/nsdg6ub8SUZVrhBsenST0Q5eqZBOFWkeFVBrZ2x7g7RZDfRu9iAG19CP6JmJDyNKHoadg1gdcwztDnBZLtJp7kNMrbLidNO+IKArVSr8V7x7YmrHilKTCMUU5r3TJN9ktFyGRWmJ1GuIo9MEWxEH/rDMcnSKZPUE0eMiWHDiU4IsBWb5Bcuu/b9i9mCcAAAAAElFTkSuQmCC'); background-size: cover; display: block;" Err codemadness.org 70 i 5986 ></span> Err codemadness.org 70 i 5987 <img Err codemadness.org 70 i 5988 class="gatsby-resp-image-image" Err codemadness.org 70 i 5989 alt="Hadron" Err codemadness.org 70 i 5990 title="Hadron" Err codemadness.org 70 i 5991 src="/static/3439f9711bfd03d838ab130c6fc2559c/a6d36/cubicle.png" Err codemadness.org 70 i 5992 srcset="/static/3439f9711bfd03d838ab130c6fc2559c/222b7/cubicle.png 163w, Err codemadness.org 70 i 5993 /static/3439f9711bfd03d838ab130c6fc2559c/ff46a/cubicle.png 325w, Err codemadness.org 70 i 5994 /static/3439f9711bfd03d838ab130c6fc2559c/a6d36/cubicle.png 650w, Err codemadness.org 70 i 5995 /static/3439f9711bfd03d838ab130c6fc2559c/e548f/cubicle.png 975w, Err codemadness.org 70 i 5996 /static/3439f9711bfd03d838ab130c6fc2559c/798d4/cubicle.png 976w" Err codemadness.org 70 i 5997 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 5998 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 5999 loading="lazy" Err codemadness.org 70 i 6000 /> Err codemadness.org 70 i 6001 </a> Err codemadness.org 70 i 6002 </span></p> Err codemadness.org 70 i 6003 <h4>Badron</h4> Err codemadness.org 70 i 6004 <p><span Err codemadness.org 70 i 6005 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 6006 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 6007 > Err codemadness.org 70 i 6008 <a Err codemadness.org 70 i 6009 class="gatsby-resp-image-link" Err codemadness.org 70 i 6010 href="/static/784c66032f59ba7f5afe0551c7c994e4/561da/holodeck.png" Err codemadness.org 70 i 6011 style="display: block" Err codemadness.org 70 i 6012 target="_blank" Err codemadness.org 70 i 6013 rel="noopener" Err codemadness.org 70 i 6014 > Err codemadness.org 70 i 6015 <span Err codemadness.org 70 i 6016 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 6017 style="padding-bottom: 29.447852760736193%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAABh0lEQVQY0z2QS0tbURSF76/xD3ToRGgpiDiwQ8GZFBFxIooDoYMgYsB0oBKDOvGR2Fa0vjVWjRGieMU3CkENvrC51RhTTe77cycRD2ex9lrr7DNYCm9HNx3+vxhkdaugn01IPRvotvuuTRust/eZnI2sCMueIciaBU/ZS6Q4/acTXIxSPRjm25xK668Y9Svn1A1McaSlaR9bo3YlQcvIMl+nD/BOrNMQTeJbUPHEbuhZUin3jTN/8YDysbmLpvldAqFJPgTC1P7epLStm8rRCFVdQ/TsXFHW7OXTcIQKj5/P/hm+eHqpid7S6P9Jy9op3uAsJR1Bpi+fUCa3Djh+zLJxFMf3R6V/Y5/OyCHjmsWgzIF4is6wSihp0beqMvPgsrS1z/d4mh/bJ/iOk4R2z+hYiLGjZVB06SMt3chFk7ruBZp0k9BdHsW7M4veRa6or3WHDMU8z3+l1Jd8pwJZQ3FdeS1wHIes7WAITJkNxy3MjmSWaF20WciKnM9t8S3h/B85y8YWfgUURaGqG7IdTQAAAABJRU5ErkJggg=='); background-size: cover; display: block;" Err codemadness.org 70 i 6018 ></span> Err codemadness.org 70 i 6019 <img Err codemadness.org 70 i 6020 class="gatsby-resp-image-image" Err codemadness.org 70 i 6021 alt="Badron" Err codemadness.org 70 i 6022 title="Badron" Err codemadness.org 70 i 6023 src="/static/784c66032f59ba7f5afe0551c7c994e4/a6d36/holodeck.png" Err codemadness.org 70 i 6024 srcset="/static/784c66032f59ba7f5afe0551c7c994e4/222b7/holodeck.png 163w, Err codemadness.org 70 i 6025 /static/784c66032f59ba7f5afe0551c7c994e4/ff46a/holodeck.png 325w, Err codemadness.org 70 i 6026 /static/784c66032f59ba7f5afe0551c7c994e4/a6d36/holodeck.png 650w, Err codemadness.org 70 i 6027 /static/784c66032f59ba7f5afe0551c7c994e4/561da/holodeck.png 969w" Err codemadness.org 70 i 6028 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 6029 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 6030 loading="lazy" Err codemadness.org 70 i 6031 /> Err codemadness.org 70 i 6032 </a> Err codemadness.org 70 i 6033 </span></p> Err codemadness.org 70 i 6034 <h4>Levi</h4> Err codemadness.org 70 i 6035 <p><span Err codemadness.org 70 i 6036 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 6037 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 503px; " Err codemadness.org 70 i 6038 > Err codemadness.org 70 i 6039 <a Err codemadness.org 70 i 6040 class="gatsby-resp-image-link" Err codemadness.org 70 i 6041 href="/static/ac74355773bfffc9f0cbbd73829b747a/a4078/levi.png" Err codemadness.org 70 i 6042 style="display: block" Err codemadness.org 70 i 6043 target="_blank" Err codemadness.org 70 i 6044 rel="noopener" Err codemadness.org 70 i 6045 > Err codemadness.org 70 i 6046 <span Err codemadness.org 70 i 6047 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 6048 style="padding-bottom: 32.515337423312886%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAAAsTAAALEwEAmpwYAAABnUlEQVQoz5WST0sbURTF5/P0I7hoaaW0KNKNChFsLFSlWP90Y3e6KEiDpdqFFQRXoiB1I2jddFDHxml0psZOzEwTJ2Y0MiFFRdTYpJP5+RKpVbrywuGcc8+Dy7tcyedmeb5PoVSqaN//l5b1df9/fsnS860N3uwkOCoWmMhmqItpPDbW+fTLrTwoeh4lMcAT7Hmliv6LS+9f+fIAKWhGuaMp1Dtxgo5FtJDnezHPPWONnPeH25Y0F7fQXZcpeQV1bRMnmSZl2tRuRlja30eLRDEsG1mJoKzqpNIZErZDes9FUXUybo54IoWV3CGbO0AaDo3wbVml6m49oXejNLS8or2zT3x9nbczs1Q/bCI0NEZjsIeu3gGa217T3t3P4PsxHtQ8ZejDOE8CHdyvDSIvriK9kE0+Jg95NK0yb+4RmNXoU216nWNaI7s0LmwxvLHLoO4wZR/wbCZMx7xOp5Ik8PkHXV9ivJzTqJ78StjJIS2cgnIC8m8wC6AXwRKri53BioDlQVRkhshsgW2xp7johfPws8znkBBHYQhkhb8ApETjMAq5t+oAAAAASUVORK5CYII='); background-size: cover; display: block;" Err codemadness.org 70 i 6049 ></span> Err codemadness.org 70 i 6050 <img Err codemadness.org 70 i 6051 class="gatsby-resp-image-image" Err codemadness.org 70 i 6052 alt="Levi" Err codemadness.org 70 i 6053 title="Levi" Err codemadness.org 70 i 6054 src="/static/ac74355773bfffc9f0cbbd73829b747a/a4078/levi.png" Err codemadness.org 70 i 6055 srcset="/static/ac74355773bfffc9f0cbbd73829b747a/222b7/levi.png 163w, Err codemadness.org 70 i 6056 /static/ac74355773bfffc9f0cbbd73829b747a/ff46a/levi.png 325w, Err codemadness.org 70 i 6057 /static/ac74355773bfffc9f0cbbd73829b747a/a4078/levi.png 503w" Err codemadness.org 70 i 6058 sizes="(max-width: 503px) 100vw, 503px" Err codemadness.org 70 i 6059 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 6060 loading="lazy" Err codemadness.org 70 i 6061 /> Err codemadness.org 70 i 6062 </a> Err codemadness.org 70 i 6063 </span></p> Err codemadness.org 70 i 6064 <h4>Adele</h4> Err codemadness.org 70 i 6065 <p><span Err codemadness.org 70 i 6066 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 6067 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 229px; " Err codemadness.org 70 i 6068 > Err codemadness.org 70 i 6069 <a Err codemadness.org 70 i 6070 class="gatsby-resp-image-link" Err codemadness.org 70 i 6071 href="/static/c331752af447683fae61633f15c83f4e/d0281/adele.png" Err codemadness.org 70 i 6072 style="display: block" Err codemadness.org 70 i 6073 target="_blank" Err codemadness.org 70 i 6074 rel="noopener" Err codemadness.org 70 i 6075 > Err codemadness.org 70 i 6076 <span Err codemadness.org 70 i 6077 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 6078 style="padding-bottom: 121.47239263803682%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAYCAYAAAD6S912AAAACXBIWXMAAAsTAAALEwEAmpwYAAADJElEQVQ4y4WVW1PaQBiG/XH9Af0FnelVb3rRm15743Rqx9aLTjtVe1BBEDxgBETUimdLtQel1sNUR5QBRTkkhABJNm93FwOJQdyZnWzY3Sfffu+7Hx2GYYA19rR2s1nnc0Wdd0IM25y1dVhh1vFJSsXydhnRdRk1lUCpEPgiIiKrsm2tA2j9UZIJf2q6AWGxhMEpEaOREoUqiKwpcAUlxBMVvoZF2Rb4bVehm0Vs71UwSwG+2RI8oTyGAhn0+87Q5z1F/+gpUhfVOrAFzAY8y6jwhEV8mSrg83iaAo4p4ISOU3AHsxgWcliMS+ygYFtu59oGNCeS6RqGJ5MY8CVphBICMR3CMj3+MoF/XsPPA2KL7k5R2FfNRbKiYT5uYOKrBn+0DO+MyLs7VIQQk6CqdvHaiGJAv7HD3+MahoQiz6kJZOPh6SKOz2oNUVpFabONuYjl0zUtcmHMPjZXxki4hPmNcts8djQN3PzaVUGjEBkjwRwV45IqfYFX79bxpu87fb/GZU5v5LIOvQdYqRrUxHm8eLuKfqq2S8jCNVPA0GwBg4EcNn5XHLfLAWzmo/5F4SsFTF1xHw5S4PveFXQ/6oGXRu6nDjAvwb1Ac3JpS4FnRsaA5x963HvofdiJDw+ewxOj1hIK2DmsthTHATTts/WnwpVmYkws1DDCVA4XuEAjIZFaqARVc1rICWxYp0ptUreLJ8wsJNG8lriFfHTMXHB8rjqi7LhtTGK5iu6QyEGsN/1Yf3cHRcxtyA4L3ZnDPK17dYjUgDR7He4JS0hn7dfREWHTOgTjcxIvGNYbY0Y5NqdgclFDeM1ANt/myCaQ5SWyxm6HxAsFE8PPBapiaklHcAUILBnwRnX8OiT3A2u0CMxuEF5xGIBVHFZ5GGRikRo/qiK6qSMv427bWCcy1wb8CwSTMVa+wJ+BGEFkneDHPpA4ErEZT2A3sY/TZPr+CFkOSwqwe1DEwloSqSxwXST8d9bOz1N4/KQTXS8/Il8Q7wZaFVOUMrpff8LTZ11YWonfbKoDT88y2EkcNfeQNkc2o1QqVb7pPHUJTdNblqzb/5j/AWM++OEwsRzDAAAAAElFTkSuQmCC'); background-size: cover; display: block;" Err codemadness.org 70 i 6079 ></span> Err codemadness.org 70 i 6080 <img Err codemadness.org 70 i 6081 class="gatsby-resp-image-image" Err codemadness.org 70 i 6082 alt="Adele" Err codemadness.org 70 i 6083 title="Adele" Err codemadness.org 70 i 6084 src="/static/c331752af447683fae61633f15c83f4e/d0281/adele.png" Err codemadness.org 70 i 6085 srcset="/static/c331752af447683fae61633f15c83f4e/222b7/adele.png 163w, Err codemadness.org 70 i 6086 /static/c331752af447683fae61633f15c83f4e/d0281/adele.png 229w" Err codemadness.org 70 i 6087 sizes="(max-width: 229px) 100vw, 229px" Err codemadness.org 70 i 6088 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 6089 loading="lazy" Err codemadness.org 70 i 6090 /> Err codemadness.org 70 i 6091 </a> Err codemadness.org 70 i 6092 </span></p> Err codemadness.org 70 i 6093 <h3>Tool time</h3> Err codemadness.org 70 i 6094 <p>You can read more about our work on the Home Improvement team at LendUp on our <a href="https://www.lendup.com/engineering/post/home-improvement">engineering blog</a>.</p><![CDATA[Alcatraz Challenge 2016 - Review]]>https://www.charlieharrington.com/alcatraz-challenge-2016-reviewhttps://www.charlieharrington.com/alcatraz-challenge-2016-reviewFri, 16 Dec 2016 00:00:00 GMT<p>This was a much smaller race than I expected. Only 116 souls according to the official results. I felt lucky to have snagged a race number when I did — the website warned it would be capped at 500 swimmers. That was enough for me. I frantically entered my credit card details and breathed a sigh of terrible relief at what I’d done.</p> Err codemadness.org 70 i 6095 <p>The Alcatraz Challenge is a 1.5 mile swim from Alcatraz Island to the northern shore of San Francisco, followed by a 7 mile run over the Golden Gate Bridge and back to Crissy Field. Alcatraz Island is a tiny rock in the San Francisco Bay surrounded by shark-friendly, freezing cold waters with notorious tidal currents — and famously the former home to an inescapable maximum security prison.</p> Err codemadness.org 70 i 6096 <blockquote> Err codemadness.org 70 i 6097 <p>In its 29 years of operation, there were 14 acknowledged attempts to escape from Alcatraz prison involving 34 inmates. Officially, every escape attempt failed, and most participants were either killed or quickly re-captured. However, the participants in the December 1926 and June 1962 attempts, though presumed dead, disappeared without a trace, giving rise to popular theories that they were successful.</p> Err codemadness.org 70 i 6098 </blockquote> Err codemadness.org 70 i 6099 <p>I paid over $100 dollars to give it a shot.</p> Err codemadness.org 70 i 6100 <p><span Err codemadness.org 70 i 6101 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 6102 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 595px; " Err codemadness.org 70 i 6103 > Err codemadness.org 70 i 6104 <a Err codemadness.org 70 i 6105 class="gatsby-resp-image-link" Err codemadness.org 70 i 6106 href="/static/5a3d0e7e41b61a9822851d5f20ea8527/3dd3e/connery.png" Err codemadness.org 70 i 6107 style="display: block" Err codemadness.org 70 i 6108 target="_blank" Err codemadness.org 70 i 6109 rel="noopener" Err codemadness.org 70 i 6110 > Err codemadness.org 70 i 6111 <span Err codemadness.org 70 i 6112 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 6113 style="padding-bottom: 68.71165644171779%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAIAAACgpqunAAAACXBIWXMAAAsTAAALEwEAmpwYAAADLklEQVQozw2S74vbdBzH80coyuxsu7Zp0mZt2qTJN/nmR5NvfjRJmzTNtdem7by7dbveyd2uY+fBvJ2KqMwdoqJD3WTbcU9OHzg3UFAQJiLssfjE5yL+QARB8IFgPryffnjx/oEF5zY7k3V7sLZ8cefm7Tvz7Uuz57dYpsFVq6YATMB5IuiqsqdKpqrYjtcdrZrhc25/1hmuY53JPJHWnbx8+N7rb964uL0YTKYEUa5XK5YIdL7RlsQIaQ4ELa2pI9QbTs1g4kSrbv8C5o5mzjDR+Xdu3dvefWFx9ZrleiRRIglSZuuuAulyqX62LLE1x0CarvlhZAWxFZxzls5jrf6qFa24w9kH944Xe3sbO5dN26qQZD6TqZWIjgLrJVJkWZVv2AZCBnI9rx2NNW/UClcxe2lF8YbzKwdHJycvvXF9c7ErAoE4k81lM2K1EqqyA8UWhAYUTF1DSLdss7c81tyh5U8xPRgjP37/4+OTz+6/dvh2vLIGBZBLpwvZbFuWujJ0ea4lCi1VtQ2jqUi63oyGI6sT684QQ0GsdZYPb97+5P6D3f2DfjxheSGbx3MFvEwUQY02OT5Jy7NNy7JkKMiSEEaRE4xUq48Bw9f8/qeff/Hwy68Sz4N4zIkSUSjQJEnhRZIkKxTl6k3HaTWbCViUJRD0uu1erFgR9u6Hdx599/jPP/7+9vvHu/v7XhAqyIQAgCpl8g1T5EkCN5CRcGVFkWWYkINu2+sOZBRiv//21y8///rvP/99/c2jtfmG4wcNABRVQ03Nt52O12HYBsfUpeRTUSAUFVn0/XbYjyXUxvZfufHq9bd++PGnW3ePkrRanYBh6jRFKZKCNKQIYhXPU3hBhBKUFMBzEALf727tvHhhcw8TVHs6m390dHzl2oEbLqmGXedA0i1LFHiyCIg8lX6GInCGZQURsgwjAN6yrY3NrUuLq1imWHXDwfrOZacbSbrFAEhWangBV+iKSBF07lk89VSxkCuXyzwQaZrmGqye7CwIhuMplsFp5PXa0ajGSQ3YJM/WcnjpyVPpdCpVPXOayqQyTz9xOnUqly8wLE/XkmMEQWCYRpVm/wdrjfygJbfpGgAAAABJRU5ErkJggg=='); background-size: cover; display: block;" Err codemadness.org 70 i 6114 ></span> Err codemadness.org 70 i 6115 <img Err codemadness.org 70 i 6116 class="gatsby-resp-image-image" Err codemadness.org 70 i 6117 alt="Sean Connery in the Rock" Err codemadness.org 70 i 6118 title="Sean Connery in the Rock" Err codemadness.org 70 i 6119 src="/static/5a3d0e7e41b61a9822851d5f20ea8527/3dd3e/connery.png" Err codemadness.org 70 i 6120 srcset="/static/5a3d0e7e41b61a9822851d5f20ea8527/222b7/connery.png 163w, Err codemadness.org 70 i 6121 /static/5a3d0e7e41b61a9822851d5f20ea8527/ff46a/connery.png 325w, Err codemadness.org 70 i 6122 /static/5a3d0e7e41b61a9822851d5f20ea8527/3dd3e/connery.png 595w" Err codemadness.org 70 i 6123 sizes="(max-width: 595px) 100vw, 595px" Err codemadness.org 70 i 6124 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 6125 loading="lazy" Err codemadness.org 70 i 6126 /> Err codemadness.org 70 i 6127 </a> Err codemadness.org 70 i 6128 </span></p> Err codemadness.org 70 i 6129 <div style="text-align:center;padding-bottom:10px">You know… you’re almost the only evidence that I exist.</div> Err codemadness.org 70 i 6130 <p>I arrived at the East Beach of Crissy Field around 5 AM. The sky was dark grey, the water quiet and serene. All was calm at the transition area. A few people chitter-chattered while applying Body Glide. I looked for someone to chitter-chatter with myself, but no takers. Instead, I jumped on an early shuttle to the appointed ferry building at 5:45 AM instead of my scheduled 6 AM departure. I closed my eyes as we made our way across the city amid the warming sunrise. Err codemadness.org 70 i 6131 It sounded like a bunch of 8th graders were on the bus behind me. I turned around — a bunch of 8th graders were on the bus behind me. My confidence boosted — <em>if they could make the swim with their tiny 8th grade arms</em> — until I remembered their parents. I am 30 years old and I barely told my parents I was swimming this race. These kids must be future Olympians.</p> Err codemadness.org 70 i 6132 <p>After body-marking at the ferry area, I ran into the woman who I sat next to at the Sports Basement race prep talk the day before. She was nervous. Me too. We discussed. We met another woman who swam this race for the last two years. Her times varied widely — the first year took her a speedy 35 minutes and the second a brutal 75. She, like everyone else who has swam these waters, told us that every Alcatraz swim is different. This point was hammered home by the race director during our mandatory prep session. The opening slide was a visualization of GPS data plotting his last 100 swims from Alcatraz — a blooming display of paths stretching across 3+ miles on shore. He told us that he recently completed his 1000th Alcatraz swim. 1000 swims — approximately one crossing a week for 20 years. He also does them naked. Not naked naked. But without a wetsuit. I think we were supposed to be reassured by him.</p> Err codemadness.org 70 i 6133 <p>We boarded the ferry and headed out to the island. I spent some quality pre-race time in the bathroom, and then laid down on the floor of the ferry and pretended to stretch. I felt powerless. I had no choice now but to proceed with this insane trial. I felt like I wasn’t really there — I was someone else watching myself.</p> Err codemadness.org 70 i 6134 <p>After a half hour, we neared the jump-zone. It really was a skydiving-like jump-zone situation. We would be jumping out of the side hatch of the boat into the water from about 8 or more feet, and then told to swim like hell so that we don’t get clobbered by the next leaper behind us. A final warning: “Don’t make this your come-to-Jesus moment at the edge, cause he ain’t coming — it’s already too late.”</p> Err codemadness.org 70 i 6135 <p>Our nervous final tittering centered around our complete lack of visibility of Sutro Tower. We were told the day before by the race director that Sutro Tower would be our one sighting landmark to rule them all: “Just keep it at your 12 o’clock at all times and let the tide do the rest.” With Sutro entirely ensconced in Karl the Fog, we’d now be tracking towards the lesser landmarks of Fort Mason, then the golden dome of the Palace of Fine Arts, and then finally East Beach of Crissy Field.</p> Err codemadness.org 70 i 6136 <p>We crowded around the starboard door, hummed along to the anthem, chanted a 30 second count down, and shuffled to the hatch. The race organizers began yelling “Go! Go! Go!” I neared the edge, came to Jesus, started my watch, and jumped feet first, trying not to go too deep into the colder layers of water below.</p> Err codemadness.org 70 i 6137 <p>It felt great actually. I swam mindlessly and rapidly away from the boat so that I wouldn’t get jumped on. The coldness I feared had been contained by my wetsuit and my beloved new thermal skull cap. After a minute I began to adjust to my new reality:</p> Err codemadness.org 70 i 6138 <blockquote> Err codemadness.org 70 i 6139 <p>I’m over a mile from shore, open water swimming for the first time, with choppy, relentless, clobbering waves smashing into my right side every three seconds. And don’t even get me started thinking about what’s swimming around beneath me right now.</p> Err codemadness.org 70 i 6140 </blockquote> Err codemadness.org 70 i 6141 <p>I turned around to take in Alcatraz in its terrible glory from a few hundred feet out in the water, and then began chopping water towards land. I tried to establish a constant stroke, but found left-breathing to be impossible because I would lose sight of the next incoming wave. My stuttering stroke became 1–2-breath-1–2-gulp-seawater-breath.</p> Err codemadness.org 70 i 6142 <p>I swam like this for what I assumed was a half hour. I tried to conjure Edmund Dantès, escaping from imprisonment after being thrown into the sea from the island tower of Château d’If, en route to Monte Cristo, where I would find fortune, plot revenge, and win back my long-lost love Mercédès. I was scared to look at my watch — I didn’t want to know how long I’d been swimming given how far I had yet to go. At this point, I’d lost sight of all other swimmers. I saw a kayak on my left and a jet-ski ahead in the distance. I was either in first or last place.</p> Err codemadness.org 70 i 6143 <p>My only happiness was that the fog finally broke and Sutro Tower was again visible. I started to kick into high gear, and suddenly cramped in my right calf. The muscle screamed in pain — I couldn’t bend my leg. I waved to the kayak and asked to hang on for a bit to stretch it out. I doggy-paddled over with my aching leg hanging behind me. I held onto his bow and started to massage out the cramp. It didn’t seem to be helping, but it was so good to rest. I was clearly dehydrated from the nearly gallon of seawater I’d drank. I asked him how I was doing, he lied and said okay, but that I needed to start heading for the Palace of Fine Arts now, confirming my fear that I’d been too conservative in my route.</p> Err codemadness.org 70 i 6144 <p>The cramp was not getting any better. There was no way I could make it back to shore like this. I decided to give up — surviving seemed better than drowning.</p> Err codemadness.org 70 i 6145 <p>“Maybe you should go get a boat for me,” I said.</p> Err codemadness.org 70 i 6146 <p>“Okay, but there’s none nearby. I can radio one over if you want.”</p> Err codemadness.org 70 i 6147 <p>What I wanted was to make it to shore. I told him I changed my mind. I was going to make it to shore myself, no matter what, thank you very much. I asked him to please keep an eye on me as I swam away from the kayak. Somehow the cramp started to dissipate. After a few minutes, he said he had to go help someone else, and I was on my own again. Thankfully, the shore start to creep closer. For the next 25 minutes, I slowly plodded forward with my 1–2-breath stroke.</p> Err codemadness.org 70 i 6148 <p>Eventually I saw the beach and then the color of people’s shirts on the beach and then peoples faces on the beach. I closed my eyes for while to just keep moving, but started to get dizzy and thought I was going to black out. Finally, finally, I stood up and ripped off my googles and cap. I felt the sand, the glorious earth, and wanted to puke on it.</p> Err codemadness.org 70 i 6149 <p>I’d made it — I survived. I still had a seven mile run over the Golden Gate Bridge and back, but nothing else mattered. Fortune, revenge, and Mercédès awaited.</p> Err codemadness.org 70 i 6150 <p><span Err codemadness.org 70 i 6151 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 6152 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 6153 > Err codemadness.org 70 i 6154 <a Err codemadness.org 70 i 6155 class="gatsby-resp-image-link" Err codemadness.org 70 i 6156 href="/static/d06e4690a848e0a919b40759b184e577/5a190/success.png" Err codemadness.org 70 i 6157 style="display: block" Err codemadness.org 70 i 6158 target="_blank" Err codemadness.org 70 i 6159 rel="noopener" Err codemadness.org 70 i 6160 > Err codemadness.org 70 i 6161 <span Err codemadness.org 70 i 6162 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 6163 style="padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEh0lEQVQ4y03P+U/aZwDH8ceKoIInzi94K1WH4gGCeKCidUoP14rDo1pn58osa52mW6exrZ1T19qmTWqPzVtBrAgqHqAIiuAB2G7Lmi1T5MtldT8t/RP2lXRJk1c+eZIn7zx5wHO5+cXc/s8LcJ/COqC0Di7ZhpbhUY1TqD0aWzscUdtG1dYxtW1Mc0yIWLW7OESrDuDK4AEljDRDKnhYBYt0R08lxvvPZc9EavGaY3zNKVq1IytGaJ3idefE/8DAkgXJhl3ZiAoW6w57+hfzMllJMRGsFDL/y2tClVmiP5zUOid1BwjJB8CQyjK8Ao+6TOgP7w0sJ31MiQwOiSeGC3jc9qt1Pz4YkJv+nVp3TOmd0o0DmR7xVrqBOAAjanhUDQs1VqHaMvfqXWV9Szg++CyTzaXnTXTd39Wpenv7pg1H05uO6S3HDGLTZcsxu+UAQrV1XANPrFrFGljx27vaq7dIBAKTQqWSKCkkCj2N1djcPm96K992IOYMzg8BscYyqbVI1mGJ1jJnOnw8tkyKjsP54qEA6DwrP52S2tfePi/fnH/1z7zBsWB0vmc6BibXzFPr+1K9RabblxucwlnD6bTMvITUzIiYu7wLjxr4093tapVx/vXhgtG+sONYMDmO1wVMac3S9X2ZzjKt35dv2yQrfwhKK8uYjOK4eAGDLGptkvY+WnqFNPbFnfcUO7bFHRuyQKLdla3vSnV7Mp15dsO8YLRNrfxeVcwppdM5ZNqT5qa1mZcKI6wwWRFKF4XJ5lorkOrMMxuwfBO5tsv1uwoDvPLrAb+86gwt8VxaSi2nYG74qfa1XWWyLSGlwaI0wktG67LJjhzAU5HqSmNHr2jlzoMxieavCeXr5i5hfnpxdS6Dx8po4pXM9j8Z2dwbXHmzuLGHNIvbljn97szaG+W2BZy5+B0ng9nV0ye4cuOzz28QQmPdPMOxXsmfZjDrP2Hzi3Nav+lukPydxW+rrOI/7pdodmxDk+oXg2KlyQ7obEH5pYddjyeYhZfdUH4n3NHuWAj3EYcUmcvNyS7JSC8p7azt0RNS2TQK9VTNtY7lP1+81D8bUbe1PgQVlTc5ZT1RjEvAOwHjjcd4+rphw/zCOGFxX0CRaX6hKdTsjozyXzBEMjmWQsk+m/WT7OI9aU5hDYNRAr5qaC+r/h4Qs7ARLKREe+FRAfHANz4q9UpgHBd4x8YntxLIl90hCvIjiEiC2PUFP4wXFeb6B0WC8prbqcXXUdG5uJhsT08sOiAGFZTs5nsSG5qVVNSCCqTifLiewWxcbAE2OCGEGOGfWBTFu1197ds7LY0glsLyiSvEhDHRQSTkZQ8oFRWY4IEnA1xMXu2TUHKFN+Y0BsrG07iBtDIoPA4XTvPLqDvHbxkZ7gbXb94CeKpnKN3DNwTtA6GJdPfABP/ILExgPO1CJznntocb1YtAx0TlxFTcwSfmoPAJweyr4bk1d7sE4HJ9EwiiY6BklA8BhYM8iDQ0geaNJ2P9I0iZX0fTOoOJRWn5FafO80tvDREZRSf8TkZz23DJPJ6g7j8uA0jDUVocbAAAAABJRU5ErkJggg=='); background-size: cover; display: block;" Err codemadness.org 70 i 6164 ></span> Err codemadness.org 70 i 6165 <img Err codemadness.org 70 i 6166 class="gatsby-resp-image-image" Err codemadness.org 70 i 6167 alt="Finisher pic of Charlie Harrington" Err codemadness.org 70 i 6168 title="Finisher pic of Charlie Harrington" Err codemadness.org 70 i 6169 src="/static/d06e4690a848e0a919b40759b184e577/a6d36/success.png" Err codemadness.org 70 i 6170 srcset="/static/d06e4690a848e0a919b40759b184e577/222b7/success.png 163w, Err codemadness.org 70 i 6171 /static/d06e4690a848e0a919b40759b184e577/ff46a/success.png 325w, Err codemadness.org 70 i 6172 /static/d06e4690a848e0a919b40759b184e577/a6d36/success.png 650w, Err codemadness.org 70 i 6173 /static/d06e4690a848e0a919b40759b184e577/5a190/success.png 800w" Err codemadness.org 70 i 6174 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 6175 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 6176 loading="lazy" Err codemadness.org 70 i 6177 /> Err codemadness.org 70 i 6178 </a> Err codemadness.org 70 i 6179 </span></p> Err codemadness.org 70 i 6180 <div style="text-align:center;padding-bottom:10px">Hey, Mercédès.</div><![CDATA[One Day Lord Shardik Will Return]]>https://www.charlieharrington.com/terminal-man-one-day-lord-shardik-will-returnhttps://www.charlieharrington.com/terminal-man-one-day-lord-shardik-will-returnTue, 06 Dec 2016 00:00:00 GMT<iframe width="100%" height="300" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/296624683&amp;color=00aabb&amp;auto_play=false&amp;hide_related=false&amp;show_comments=true&amp;show_user=true&amp;show_reposts=false&amp;visual=true"></iframe> Err codemadness.org 70 i 6181 <p>Not quite <em>Watership Down</em>, but still pretty weird in a good way. Here's my musical book review of <em>Shardik</em>.</p><![CDATA[Too Much]]>https://www.charlieharrington.com/terminal-man-too-muchhttps://www.charlieharrington.com/terminal-man-too-muchWed, 10 Feb 2016 00:00:00 GMT<iframe width="100%" height="300" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/245527707&amp;color=%2300cc11&amp;auto_play=false&amp;hide_related=false&amp;show_comments=true&amp;show_user=true&amp;show_reposts=false&amp;visual=true"></iframe><![CDATA[Glass-Steagall Act Farewell Show]]>https://www.charlieharrington.com/glass-steagall-act-farewell-showhttps://www.charlieharrington.com/glass-steagall-act-farewell-showFri, 22 Jan 2016 00:00:00 GMT<p>Six years ago Mark Mager convinced me it was a good idea to play an acoustic Beatles medley in front of our entire Morgan Stanley division to celebrate my departure and his return. Now you too can witness the final (only) show of The Glass-Steagall Act (thankfully featuring the talents of Bill "The Intern" Ward):</p> Err codemadness.org 70 i 6182 <iframe width="560" height="315" src="https://www.youtube.com/embed/FOdLVF24zpQ?rel=0" frameborder="0" allowfullscreen></iframe><![CDATA[Space Time Travel with Wormie]]>https://www.charlieharrington.com/space-time-travel-with-wormiehttps://www.charlieharrington.com/space-time-travel-with-wormieSat, 02 Jan 2016 00:00:00 GMT<p><span Err codemadness.org 70 i 6183 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 6184 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 6185 > Err codemadness.org 70 i 6186 <a Err codemadness.org 70 i 6187 class="gatsby-resp-image-link" Err codemadness.org 70 i 6188 href="/static/2ffd4f417faf2083be8def2a5c6fdbd4/00d43/logo.png" Err codemadness.org 70 i 6189 style="display: block" Err codemadness.org 70 i 6190 target="_blank" Err codemadness.org 70 i 6191 rel="noopener" Err codemadness.org 70 i 6192 > Err codemadness.org 70 i 6193 <span Err codemadness.org 70 i 6194 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 6195 style="padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAACXBIWXMAACxLAAAsSwGlPZapAAACoklEQVQ4y2P4TwFgQBf49/f/3z8g9A8h9ucfFOHW/A9D8h+mELKZcM1gZf++ff57dMufddP+7F7+7+VjiMzT73+2PP+26OGXDc++Pf72B1k/A9SpQOLmuV859t99xH54CP3wFv0ZpfF//fQ1z38EHn/ldOiF3eFXjodeANkbnn2F62eA6nx+/2e8/k8v4f+hct99xH/6S/7zE/8YoRl66JHbyff+x1767L0ffOaD17HXTodfHnj9A6jl7z+g5r8gzb+nlf1w4/8dJLtAk8VPkrNaU+CxLdfXROPYY09dtl43TSlStnbSSi0POPzE9cirzPNv//6DO/vXjx8ZNv8DJA6Y87AyMIhJy6qaWKbxM3yP0Uk481ouKkdJQlRTQ52BgcG8YZr/uS++R188+Pobpvn71++Jxv8DJadrsgNVsDMBCUYXXoY3YeoJJ19Ie4QB+cxsICntlNLAi998Dj+//fk3IrR/1oX/9Ra+7iCoyAbSCUQTlRl/xunGnnpl1rWYjYMTKMojJe+69JDXiXdRJ199BUc6Ayg9AH1/YvsPL5F/wXKX7fhbVVg3G3L89xL6lGAcfeih9+mPTvN3G1f0uq0+GXjqnf3BF8sff4EFGCyS/yxsAYbZnxCF/2FyT0M0tgYavIs3ij3yyHH5Ua9t14Iufvc7+c7h0Itpdz9jTyR/Vvb/8JX87SN2L1Trkr/a53iDGGBob7nqvemix9FXrodfzH/4BVfyBMXZ37P7fqZb/vEQAAb+xwTjmCOPvE59dD72JvrU62Nvf0JciyNjgOP8/8e3v2ZU/PIW/RSpFXb4sdOR1+033r/88RdNJ45cBckOZ/d+rAkvP/XowLs/UJP/EcySEP+DvfDnx7cfv39DBYjKz6hBgJYHidZMTklCCgAAH5C+VnS+lRAAAAAASUVORK5CYII='); background-size: cover; display: block;" Err codemadness.org 70 i 6196 ></span> Err codemadness.org 70 i 6197 <img Err codemadness.org 70 i 6198 class="gatsby-resp-image-image" Err codemadness.org 70 i 6199 alt="Live" Err codemadness.org 70 i 6200 title="Live" Err codemadness.org 70 i 6201 src="/static/2ffd4f417faf2083be8def2a5c6fdbd4/a6d36/logo.png" Err codemadness.org 70 i 6202 srcset="/static/2ffd4f417faf2083be8def2a5c6fdbd4/222b7/logo.png 163w, Err codemadness.org 70 i 6203 /static/2ffd4f417faf2083be8def2a5c6fdbd4/ff46a/logo.png 325w, Err codemadness.org 70 i 6204 /static/2ffd4f417faf2083be8def2a5c6fdbd4/a6d36/logo.png 650w, Err codemadness.org 70 i 6205 /static/2ffd4f417faf2083be8def2a5c6fdbd4/e548f/logo.png 975w, Err codemadness.org 70 i 6206 /static/2ffd4f417faf2083be8def2a5c6fdbd4/00d43/logo.png 1000w" Err codemadness.org 70 i 6207 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 6208 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 6209 loading="lazy" Err codemadness.org 70 i 6210 /> Err codemadness.org 70 i 6211 </a> Err codemadness.org 70 i 6212 </span></p> Err codemadness.org 70 i 6213 <p><a href="http://www.wormieapp.com/">Wormie</a> is an iOS app to connect you with people in the places you want to see.</p> Err codemadness.org 70 i 6214 <p><img src="/70f4bb033609f915de56b76602148fd0/WormieLive.gif" alt="Live"></p> Err codemadness.org 70 i 6215 <p>Maybe you want to see if there's a line at your favorite restaurant right now. Or maybe you want to see tonight's sunset, but from Australia.</p> Err codemadness.org 70 i 6216 <p><img src="/5b786d6755995fd58b55716cd22c89c3/WormieExplore.gif" alt="Live"></p> Err codemadness.org 70 i 6217 <p>Just open up Wormie, make a new Wormhole request, and Wormie will connect you with someone who can live stream back your request in real-time.</p> Err codemadness.org 70 i 6218 <p><img src="/dc356b2515de8e3e24a9b9b5e518c828/WormieCreate.gif" alt="Live"></p> Err codemadness.org 70 i 6219 <p>Think TaskRabbit meets Periscope. You can look up specific places with Yelp within Wormie to help you make your Wormhole requests.</p> Err codemadness.org 70 i 6220 <p><img src="/0c968594e3f7338fce7721e74ec8ce78/WormieYelp.gif" alt="Live"></p> Err codemadness.org 70 i 6221 <p>Design your own Wormie icon, and when you make a Wormhole connection, your Wormies will join together in unique heart!</p> Err codemadness.org 70 i 6222 <p><img src="/dc356b2515de8e3e24a9b9b5e518c828/WormieCreate.gif" alt="Live"></p> Err codemadness.org 70 i 6223 <h2>The react natives</h2> Err codemadness.org 70 i 6224 <p>The Wormie team is:</p> Err codemadness.org 70 i 6225 <ul> Err codemadness.org 70 i 6226 <li><a href="https://github.com/SunyoungKim508">Sunyoung Kim</a></li> Err codemadness.org 70 i 6227 <li><a href="https://github.com/nickfujita">Nick Fujita</a></li> Err codemadness.org 70 i 6228 <li>Me (Charlie Harrington)</li> Err codemadness.org 70 i 6229 </ul> Err codemadness.org 70 i 6230 <p>We had a great time building Wormie as a way to learn some new technologies and libraries:</p> Err codemadness.org 70 i 6231 <ul> Err codemadness.org 70 i 6232 <li><a href="https://facebook.github.io/react-native/">React Native</a></li> Err codemadness.org 70 i 6233 <li><a href="http://www.django-rest-framework.org/">Django Rest Framework</a></li> Err codemadness.org 70 i 6234 <li><a href="https://socket.io/">Socket.io</a></li> Err codemadness.org 70 i 6235 <li><a href="https://webrtc.org/">WebRTC</a></li> Err codemadness.org 70 i 6236 <li><a href="https://www.docker.com/">Docker</a></li> Err codemadness.org 70 i 6237 <li><a href="https://developers.google.com/youtube/">YouTube API</a></li> Err codemadness.org 70 i 6238 <li><a href="http://www.graphicsmagick.org/">GraphicsMagick</a></li> Err codemadness.org 70 i 6239 <li><a href="https://www.mapbox.com/api-documentation/">MapBox</a></li> Err codemadness.org 70 i 6240 <li><a href="https://www.yelp.com/developers/documentation/v2/overview">Yelp API</a></li> Err codemadness.org 70 i 6241 </ul><![CDATA[Minnow]]>https://www.charlieharrington.com/terminal-man-minnowhttps://www.charlieharrington.com/terminal-man-minnowMon, 21 Dec 2015 00:00:00 GMT<iframe width="100%" height="300" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/238473937&amp;color=%2300cc11&amp;auto_play=false&amp;hide_related=false&amp;show_comments=true&amp;show_user=true&amp;show_reposts=false&amp;visual=true"></iframe><![CDATA[Pseudoclassical Star Wars]]>https://www.charlieharrington.com/pseudoclassical-star-warshttps://www.charlieharrington.com/pseudoclassical-star-warsMon, 26 Oct 2015 00:00:00 GMT<p>Subclassing in JavaScript is quite useful. I used JavaScript subclasses to create this Star Wars inspired game.</p> Err codemadness.org 70 i 6242 <p><img src="/d133c65d7c3e8457531f4fea327e0e3c/subclasswars.gif" alt="game"></p> Err codemadness.org 70 i 6243 <p>You can <a href="https://whatrocks.github.io/aluminum-falcon/">play it right now</a>, or check out the <a href="https://github.com/whatrocks/aluminum-falcon">code on Github</a>. The rest of this insanely long post will demonstrate how to use JavaScript subclassing to build the foundations of a similar game or visualization.</p> Err codemadness.org 70 i 6244 <h3>Subclassing overview</h3> Err codemadness.org 70 i 6245 <p>A class can be written to create fleets of similar objects with shared properties and methods. For example, if you're building the game Frogger, you can create a class called Vehicle that will produce a single instance of one of those pesky little cars. Let's imagine that your Vehicle class has one property (location, to track a car's current location) and one method (move, to drive a car forward). Based on the difficulty of the game level, you can use your Vehicle class to produce as many cars as you want to hinder that frog from its goal.</p> Err codemadness.org 70 i 6246 <p>But what if you get the idea to introduce a new type of vehicle that nefariously changes lanes at random, or a friendly car that scoops up the froggie and brings him to the pond? You could certainly add those features to your original Vehicle class, but then all instances of Vehicle would have those new properties and methods, and it may prove difficult to track and turn them on for certain Vehicle instances based on your game design (e.g. produce one and only one friendly car per level).</p> Err codemadness.org 70 i 6247 <p>Another option could be replicating the existing class for these new vehicle types. Now you'll have separate Vehicle, AggressiveVehicle, and FriendlyVehicle classes, and you can instantiate them all independently to your heart's delight. However, you've likely duplicated a lot of similar code in each of these classes - such as the location property and the move method. If you ever want to change how all the vehicles move, you'll now need to remember to change the code in each of the classes. There's got to be a better way to do this. And there is - subclassing!</p> Err codemadness.org 70 i 6248 <p>Subclassing allows you to create a fleet of objects that look vaguely similar to other objects. Subclasses are able to "share" properties and methods from their "parent" or "superclass". In JavaScript, subclassing is implemented via delegation. Rather than keeping the Frogger metaphor going, let's transition to a galaxy far, far away...</p> Err codemadness.org 70 i 6249 <h3>Starfield simulation</h3> Err codemadness.org 70 i 6250 <p>Like all great games, SubclassWars.js is based on a Windows screensaver.</p> Err codemadness.org 70 i 6251 <p>We want to simulate moving through space. A good first step could be randomly drawing a bunch of white dots on a black background. They don't even have to move - just get them to show up.</p> Err codemadness.org 70 i 6252 <p>Let's create a base class called Star:</p> Err codemadness.org 70 i 6253 <div class="gatsby-highlight" data-language="javascript"><pre class="language-javascript"><code class="language-javascript"> <span class="token comment">/** Err codemadness.org 70 i 6254 * Star class: the base class Err codemadness.org 70 i 6255 */</span> Err codemadness.org 70 i 6256 <span class="token keyword">var</span> <span class="token function-variable function">Star</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">x<span class="token punctuation">,</span> y</span><span class="token punctuation">)</span><span class="token punctuation">{</span> Err codemadness.org 70 i 6257 <span class="token comment">// "Stars" are just HTML spans </span> Err codemadness.org 70 i 6258 <span class="token keyword">this</span><span class="token punctuation">.</span>$node <span class="token operator">=</span> <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'&lt;span class="star">&lt;/span'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6259 <span class="token comment">// Location along x-axis</span> Err codemadness.org 70 i 6260 <span class="token keyword">this</span><span class="token punctuation">.</span>x <span class="token operator">=</span> x<span class="token punctuation">;</span> Err codemadness.org 70 i 6261 <span class="token comment">// Location along y-axis </span> Err codemadness.org 70 i 6262 <span class="token keyword">this</span><span class="token punctuation">.</span>y <span class="token operator">=</span> y<span class="token punctuation">;</span> Err codemadness.org 70 i 6263 <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function">setPosition</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6264 <span class="token punctuation">}</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6265 <span class="token comment">// // Position the HTML span based on x and y</span> Err codemadness.org 70 i 6266 <span class="token class-name">Star</span><span class="token punctuation">.</span>prototype<span class="token punctuation">.</span><span class="token function-variable function">setPosition</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> Err codemadness.org 70 i 6267 <span class="token keyword">var</span> positionSettings <span class="token operator">=</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 6268 top<span class="token operator">:</span> <span class="token keyword">this</span><span class="token punctuation">.</span>x<span class="token punctuation">,</span> Err codemadness.org 70 i 6269 left<span class="token operator">:</span> <span class="token keyword">this</span><span class="token punctuation">.</span>y Err codemadness.org 70 i 6270 <span class="token punctuation">}</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6271 <span class="token keyword">var</span> styleSettings <span class="token operator">=</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 6272 <span class="token string">"border"</span><span class="token operator">:</span> <span class="token string">"2px"</span><span class="token punctuation">,</span> Err codemadness.org 70 i 6273 <span class="token string">"border-style"</span><span class="token operator">:</span> <span class="token string">"solid"</span><span class="token punctuation">,</span> Err codemadness.org 70 i 6274 <span class="token string">"border-color"</span><span class="token operator">:</span> <span class="token string">"white"</span><span class="token punctuation">,</span> Err codemadness.org 70 i 6275 <span class="token string">"border-radius"</span><span class="token operator">:</span> <span class="token string">"2px"</span><span class="token punctuation">,</span> Err codemadness.org 70 i 6276 <span class="token string">"position"</span><span class="token operator">:</span> <span class="token string">"absolute"</span> Err codemadness.org 70 i 6277 <span class="token punctuation">}</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6278 <span class="token keyword">this</span><span class="token punctuation">.</span>$node<span class="token punctuation">.</span><span class="token function">css</span><span class="token punctuation">(</span>styleSettings<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6279 <span class="token keyword">this</span><span class="token punctuation">.</span>$node<span class="token punctuation">.</span><span class="token function">css</span><span class="token punctuation">(</span>positionSettings<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6280 <span class="token punctuation">}</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6281 Err codemadness.org 70 i 6282 <span class="token comment">/** Err codemadness.org 70 i 6283 * Setup starfield size Err codemadness.org 70 i 6284 */</span> Err codemadness.org 70 i 6285 <span class="token keyword">var</span> height <span class="token operator">=</span> <span class="token number">200</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6286 <span class="token keyword">var</span> width <span class="token operator">=</span> <span class="token number">700</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6287 Err codemadness.org 70 i 6288 <span class="token comment">/** Err codemadness.org 70 i 6289 * Build star helper function Err codemadness.org 70 i 6290 */</span> Err codemadness.org 70 i 6291 <span class="token keyword">var</span> <span class="token function-variable function">buildStar</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 6292 <span class="token keyword">var</span> star <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Star</span><span class="token punctuation">(</span><span class="token punctuation">(</span>Math<span class="token punctuation">.</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">*</span> width<span class="token punctuation">)</span><span class="token punctuation">,</span> Err codemadness.org 70 i 6293 <span class="token punctuation">(</span>Math<span class="token punctuation">.</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">*</span> height<span class="token punctuation">)</span> Err codemadness.org 70 i 6294 <span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6295 <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'#stars'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">append</span><span class="token punctuation">(</span>star<span class="token punctuation">.</span>$node<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6296 <span class="token punctuation">}</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6297 Err codemadness.org 70 i 6298 <span class="token comment">/** Err codemadness.org 70 i 6299 * Initialize the game Err codemadness.org 70 i 6300 */</span> Err codemadness.org 70 i 6301 <span class="token function">$</span><span class="token punctuation">(</span>document<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">ready</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 6302 Err codemadness.org 70 i 6303 <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'.starfield'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">css</span><span class="token punctuation">(</span><span class="token punctuation">{</span> Err codemadness.org 70 i 6304 <span class="token string">"height"</span><span class="token operator">:</span> height<span class="token punctuation">,</span> Err codemadness.org 70 i 6305 <span class="token string">"width"</span><span class="token operator">:</span> width<span class="token punctuation">,</span> Err codemadness.org 70 i 6306 <span class="token string">"background-color"</span><span class="token operator">:</span> <span class="token string">"black"</span><span class="token punctuation">,</span> Err codemadness.org 70 i 6307 <span class="token string">"position"</span><span class="token operator">:</span><span class="token string">"relative"</span> Err codemadness.org 70 i 6308 <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6309 Err codemadness.org 70 i 6310 <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">var</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> <span class="token number">20</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 6311 <span class="token function">buildStar</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6312 <span class="token punctuation">}</span> Err codemadness.org 70 i 6313 Err codemadness.org 70 i 6314 <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre></div> Err codemadness.org 70 i 6315 <p>Hello, stars! Note that I've used the pseudoclassical instantiation pattern (rather than the functional or prototypal patterns) to build the Star class, so new stars need to be instantiated with the "new" keyword. Another important detail for this and any other HTML visualizations is that the origin (the [0,0] location) of any HTML element or document is the upper left corner.</p> Err codemadness.org 70 i 6316 <p>Now, let's make those stars twinkle to show you how subclassing works. We will need to refactor our base Star class slightly:</p> Err codemadness.org 70 i 6317 <div class="gatsby-highlight" data-language="javascript"><pre class="language-javascript"><code class="language-javascript"><span class="token comment">/** Err codemadness.org 70 i 6318 * Star class: the base class Err codemadness.org 70 i 6319 */</span> Err codemadness.org 70 i 6320 <span class="token keyword">var</span> <span class="token function-variable function">Star</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">x<span class="token punctuation">,</span> y<span class="token punctuation">,</span> timeBetweenSteps</span><span class="token punctuation">)</span><span class="token punctuation">{</span> Err codemadness.org 70 i 6321 <span class="token keyword">this</span><span class="token punctuation">.</span>$node <span class="token operator">=</span> <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'&lt;span class="star">&lt;/span'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6322 <span class="token keyword">this</span><span class="token punctuation">.</span>x <span class="token operator">=</span> x<span class="token punctuation">;</span> Err codemadness.org 70 i 6323 <span class="token keyword">this</span><span class="token punctuation">.</span>y <span class="token operator">=</span> y<span class="token punctuation">;</span> Err codemadness.org 70 i 6324 <span class="token comment">// New param to create a loop</span> Err codemadness.org 70 i 6325 <span class="token keyword">this</span><span class="token punctuation">.</span>timeBetweenSteps <span class="token operator">=</span> timeBetweenSteps<span class="token punctuation">;</span> Err codemadness.org 70 i 6326 <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function">step</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6327 <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function">setPosition</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6328 <span class="token punctuation">}</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6329 <span class="token class-name">Star</span><span class="token punctuation">.</span>prototype<span class="token punctuation">.</span><span class="token function-variable function">step</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> Err codemadness.org 70 i 6330 <span class="token function">setTimeout</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function">step</span><span class="token punctuation">.</span><span class="token function">bind</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Err codemadness.org 70 i 6331 <span class="token keyword">this</span><span class="token punctuation">.</span>timeBetweenSteps<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6332 <span class="token punctuation">}</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6333 <span class="token class-name">Star</span><span class="token punctuation">.</span>prototype<span class="token punctuation">.</span><span class="token function-variable function">setPosition</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> Err codemadness.org 70 i 6334 <span class="token keyword">var</span> positionSettings <span class="token operator">=</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 6335 top<span class="token operator">:</span> <span class="token keyword">this</span><span class="token punctuation">.</span>y<span class="token punctuation">,</span> Err codemadness.org 70 i 6336 left<span class="token operator">:</span> <span class="token keyword">this</span><span class="token punctuation">.</span>x Err codemadness.org 70 i 6337 <span class="token punctuation">}</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6338 <span class="token keyword">var</span> styleSettings <span class="token operator">=</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 6339 <span class="token string">"border"</span><span class="token operator">:</span> <span class="token string">"2px"</span><span class="token punctuation">,</span> Err codemadness.org 70 i 6340 <span class="token string">"border-style"</span><span class="token operator">:</span> <span class="token string">"solid"</span><span class="token punctuation">,</span> Err codemadness.org 70 i 6341 <span class="token string">"border-color"</span><span class="token operator">:</span> <span class="token string">"white"</span><span class="token punctuation">,</span> Err codemadness.org 70 i 6342 <span class="token string">"border-radius"</span><span class="token operator">:</span> <span class="token string">"2px"</span><span class="token punctuation">,</span> Err codemadness.org 70 i 6343 <span class="token string">"position"</span><span class="token operator">:</span> <span class="token string">"absolute"</span> Err codemadness.org 70 i 6344 <span class="token punctuation">}</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6345 <span class="token keyword">this</span><span class="token punctuation">.</span>$node<span class="token punctuation">.</span><span class="token function">css</span><span class="token punctuation">(</span>styleSettings<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6346 <span class="token keyword">this</span><span class="token punctuation">.</span>$node<span class="token punctuation">.</span><span class="token function">css</span><span class="token punctuation">(</span>positionSettings<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6347 <span class="token punctuation">}</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6348 Err codemadness.org 70 i 6349 <span class="token comment">/** Err codemadness.org 70 i 6350 * TwinkleStar class (our first subclass!) Err codemadness.org 70 i 6351 */</span> Err codemadness.org 70 i 6352 <span class="token keyword">var</span> <span class="token function-variable function">TwinkleStar</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">x<span class="token punctuation">,</span> y<span class="token punctuation">,</span> timeBetweenSteps</span><span class="token punctuation">)</span><span class="token punctuation">{</span> Err codemadness.org 70 i 6353 <span class="token function">Star</span><span class="token punctuation">.</span><span class="token function">call</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">,</span> x<span class="token punctuation">,</span> y<span class="token punctuation">,</span> timeBetweenSteps<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6354 <span class="token punctuation">}</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6355 <span class="token class-name">TwinkleStar</span><span class="token punctuation">.</span>prototype <span class="token operator">=</span> Object<span class="token punctuation">.</span><span class="token function">create</span><span class="token punctuation">(</span><span class="token class-name">Star</span><span class="token punctuation">.</span>prototype<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6356 <span class="token class-name">TwinkleStar</span><span class="token punctuation">.</span>prototype<span class="token punctuation">.</span>constructor <span class="token operator">=</span> TwinkleStar<span class="token punctuation">;</span> Err codemadness.org 70 i 6357 <span class="token class-name">TwinkleStar</span><span class="token punctuation">.</span>prototype<span class="token punctuation">.</span><span class="token function-variable function">step</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> Err codemadness.org 70 i 6358 <span class="token class-name">Star</span><span class="token punctuation">.</span>prototype<span class="token punctuation">.</span><span class="token function">step</span><span class="token punctuation">.</span><span class="token function">call</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6359 <span class="token keyword">this</span><span class="token punctuation">.</span>$node<span class="token punctuation">.</span><span class="token function">toggle</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6360 <span class="token punctuation">}</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6361 Err codemadness.org 70 i 6362 <span class="token comment">/** Err codemadness.org 70 i 6363 * Setup starfield size Err codemadness.org 70 i 6364 */</span> Err codemadness.org 70 i 6365 <span class="token keyword">var</span> height <span class="token operator">=</span> <span class="token number">200</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6366 <span class="token keyword">var</span> width <span class="token operator">=</span> <span class="token number">700</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6367 Err codemadness.org 70 i 6368 <span class="token comment">/** Err codemadness.org 70 i 6369 * Build star helper function Err codemadness.org 70 i 6370 */</span> Err codemadness.org 70 i 6371 <span class="token keyword">var</span> <span class="token function-variable function">buildStar</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 6372 <span class="token keyword">var</span> star <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Star</span><span class="token punctuation">(</span><span class="token punctuation">(</span>Math<span class="token punctuation">.</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">*</span> width<span class="token punctuation">)</span><span class="token punctuation">,</span> Err codemadness.org 70 i 6373 <span class="token punctuation">(</span>Math<span class="token punctuation">.</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">*</span> height<span class="token punctuation">)</span><span class="token punctuation">,</span> Err codemadness.org 70 i 6374 <span class="token number">100</span> Err codemadness.org 70 i 6375 <span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6376 <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'#stars'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">append</span><span class="token punctuation">(</span>star<span class="token punctuation">.</span>$node<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6377 <span class="token punctuation">}</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6378 Err codemadness.org 70 i 6379 <span class="token keyword">var</span> <span class="token function-variable function">buildTwinkleStar</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 6380 <span class="token keyword">var</span> star <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">TwinkleStar</span><span class="token punctuation">(</span><span class="token punctuation">(</span>Math<span class="token punctuation">.</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">*</span> width<span class="token punctuation">)</span><span class="token punctuation">,</span> Err codemadness.org 70 i 6381 <span class="token punctuation">(</span>Math<span class="token punctuation">.</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">*</span> height<span class="token punctuation">)</span><span class="token punctuation">,</span> Err codemadness.org 70 i 6382 <span class="token number">100</span> Err codemadness.org 70 i 6383 <span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6384 <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'#twinkle'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">append</span><span class="token punctuation">(</span>star<span class="token punctuation">.</span>$node<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6385 <span class="token punctuation">}</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6386 Err codemadness.org 70 i 6387 <span class="token comment">/** Err codemadness.org 70 i 6388 * Initialize the game Err codemadness.org 70 i 6389 */</span> Err codemadness.org 70 i 6390 <span class="token function">$</span><span class="token punctuation">(</span>document<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">ready</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 6391 Err codemadness.org 70 i 6392 <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'.starfield'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">css</span><span class="token punctuation">(</span><span class="token punctuation">{</span> Err codemadness.org 70 i 6393 <span class="token string">"height"</span><span class="token operator">:</span> height<span class="token punctuation">,</span> Err codemadness.org 70 i 6394 <span class="token string">"width"</span><span class="token operator">:</span> width<span class="token punctuation">,</span> Err codemadness.org 70 i 6395 <span class="token string">"background-color"</span><span class="token operator">:</span> <span class="token string">"black"</span><span class="token punctuation">,</span> Err codemadness.org 70 i 6396 <span class="token string">"position"</span><span class="token operator">:</span><span class="token string">"relative"</span> Err codemadness.org 70 i 6397 <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6398 <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">var</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> <span class="token number">20</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 6399 <span class="token function">buildStar</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6400 <span class="token function">buildTwinkleStar</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6401 <span class="token punctuation">}</span> Err codemadness.org 70 i 6402 Err codemadness.org 70 i 6403 <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre></div> Err codemadness.org 70 i 6404 <p>Now we're getting somewhere!</p> Err codemadness.org 70 i 6405 <p>A lot happened in the last in the last iteration of code, and it's important to highlight some things now. First, we introduced a new method to our base Star class called 'step' that essentially mimics a game loop with the native JS function setTimeout. This is a little hacky and definitely not what you want to use for a real game, but this is just a demo, and hey, it's me.</p> Err codemadness.org 70 i 6406 <p>TODO: fix stars</p> Err codemadness.org 70 i 6407 <p>With our new step method built into the base Star class, we can now create lots of different subclasses of Star that add unique functionality. TwinkleStar twinkles, but we might want other stars that don't twinkle. How about stars that move instead of twinkle? Good idea, but we're not ready to get there just yet.</p> Err codemadness.org 70 i 6408 <p>Notice that we are calling setTimeout within the step method, and then passing in step as the function argument for setTimeout. setTimeout takes two arguments, a function to execute after a specified time, and that specified time. However, when setTimeout receives the function argument, it will simply accept the function value without maintaining any reference to the star instance that called step in the first place. That means that step will be called again as a free function invocation - 'this' will be bound to the global window object. That's not what we want at all. One solution is to set a context variable (var that = this) in the step function and use it as context for calling step. Another solution, which I've used, is to use bind to create a function called step where "this" is specifically bound to the star that called step. That was a mouthful, but an important mouthful.</p> Err codemadness.org 70 i 6409 <p>Let's talk about how we created the TwinkleStar subclass. We created a function called TwinkleStar with the same parameter signature as Star. Within that function, the Star class function is called using the .call method to bind 'this' to the new TwinkleStar object being created. Now, the new TwinkleStar will be set up with the base properties of a regular ol' Star (e.g. x, y, timeBetweenSteps, $node). Outside of the TwinkleStar function, we set up property and method delegation to the Star class using the Object.create pattern so that our new TwinkleStars can use any of the methods from the Star class (e.g. step, setPosition). Then we changed the constructor property to the TwinkleStar class so that any new TwinkleStars will be able to state that they are an "instanceof" TwinkleStar (and not Star). Finally, the coolest thing we do is write a new step method for TwinkleStar where we specify our unique action for all TwinkleStars. First we call the original Star step method, and then, crucially, we use jQuery to toggle the star span node on and off each time step gets executed - AKA making them twinkle.</p> Err codemadness.org 70 i 6410 <p>That's it! JavaScript subclassing in the pseudoclassical pattern.</p> Err codemadness.org 70 i 6411 <h3>The lost city of Z</h3> Err codemadness.org 70 i 6412 <p>Now it's time to get serious about our screensaver replica. We need to make moving stars. But not just any moving stars, we need our stars to move in such a way that it feels like we are being whisked away to a faraway planet for a new and exciting adventure. The stars need to move "towards" the screen, even though we can only place these HTML spans on a flat 2D surface. Yikes. Now, there are lots of really impressive implementations of moving starfields on the web, so it's definitely possible, but will require some math. After some searching, I discovered a very simple procedure that can calculate an x and y position for a star taking into account a simulated z-axis property.</p> Err codemadness.org 70 i 6413 <p>I'll walk through our changes in the code. Note that I'm not including the code for the Star or TwinkleStar classes since those won't be changing anymore.</p> Err codemadness.org 70 i 6414 <div class="gatsby-highlight" data-language="javascript"><pre class="language-javascript"><code class="language-javascript"><span class="token comment">/** Err codemadness.org 70 i 6415 * MoveStar class Err codemadness.org 70 i 6416 */</span> Err codemadness.org 70 i 6417 <span class="token keyword">var</span> <span class="token function-variable function">MoveStar</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">x<span class="token punctuation">,</span> y<span class="token punctuation">,</span> z<span class="token punctuation">,</span> timeBetweenSteps</span><span class="token punctuation">)</span><span class="token punctuation">{</span> Err codemadness.org 70 i 6418 <span class="token keyword">this</span><span class="token punctuation">.</span>z <span class="token operator">=</span> z<span class="token punctuation">;</span> Err codemadness.org 70 i 6419 <span class="token function">Star</span><span class="token punctuation">.</span><span class="token function">call</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">,</span> x<span class="token punctuation">,</span> y<span class="token punctuation">,</span> timeBetweenSteps<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6420 <span class="token punctuation">}</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6421 <span class="token class-name">MoveStar</span><span class="token punctuation">.</span>prototype <span class="token operator">=</span> Object<span class="token punctuation">.</span><span class="token function">create</span><span class="token punctuation">(</span><span class="token class-name">Star</span><span class="token punctuation">.</span>prototype<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6422 <span class="token class-name">MoveStar</span><span class="token punctuation">.</span>prototype<span class="token punctuation">.</span>constructor <span class="token operator">=</span> MoveStar<span class="token punctuation">;</span> Err codemadness.org 70 i 6423 <span class="token class-name">MoveStar</span><span class="token punctuation">.</span>prototype<span class="token punctuation">.</span><span class="token function-variable function">setPosition</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> Err codemadness.org 70 i 6424 Err codemadness.org 70 i 6425 <span class="token keyword">var</span> k <span class="token operator">=</span> <span class="token number">128.0</span> <span class="token operator">/</span> <span class="token keyword">this</span><span class="token punctuation">.</span>z<span class="token punctuation">;</span> Err codemadness.org 70 i 6426 <span class="token comment">// Translate into x-pos in 2D</span> Err codemadness.org 70 i 6427 <span class="token keyword">var</span> px <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>x <span class="token operator">*</span> k<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token punctuation">(</span>width <span class="token operator">/</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6428 <span class="token comment">// Translate into y-pos in 2D</span> Err codemadness.org 70 i 6429 <span class="token keyword">var</span> py <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>y <span class="token operator">*</span> k<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token punctuation">(</span>height <span class="token operator">/</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6430 Err codemadness.org 70 i 6431 <span class="token keyword">var</span> positionSettings <span class="token operator">=</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 6432 top<span class="token operator">:</span> py<span class="token punctuation">,</span> Err codemadness.org 70 i 6433 left<span class="token operator">:</span> px Err codemadness.org 70 i 6434 <span class="token punctuation">}</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6435 Err codemadness.org 70 i 6436 <span class="token comment">// Stars "grow" larger when closer</span> Err codemadness.org 70 i 6437 <span class="token keyword">var</span> size <span class="token operator">=</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> <span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>z <span class="token operator">/</span> <span class="token number">32</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">3</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6438 Err codemadness.org 70 i 6439 <span class="token keyword">var</span> styleSettings <span class="token operator">=</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 6440 <span class="token string">"border"</span><span class="token operator">:</span> size<span class="token punctuation">,</span> Err codemadness.org 70 i 6441 <span class="token string">"border-style"</span><span class="token operator">:</span> <span class="token string">"solid"</span><span class="token punctuation">,</span> Err codemadness.org 70 i 6442 <span class="token string">"border-color"</span><span class="token operator">:</span> <span class="token string">"white"</span><span class="token punctuation">,</span> Err codemadness.org 70 i 6443 <span class="token string">"border-radius"</span><span class="token operator">:</span> <span class="token string">"2px"</span><span class="token punctuation">,</span> Err codemadness.org 70 i 6444 <span class="token string">"position"</span><span class="token operator">:</span> <span class="token string">"absolute"</span> Err codemadness.org 70 i 6445 <span class="token punctuation">}</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6446 <span class="token keyword">this</span><span class="token punctuation">.</span>$node<span class="token punctuation">.</span><span class="token function">css</span><span class="token punctuation">(</span>styleSettings<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6447 <span class="token keyword">this</span><span class="token punctuation">.</span>$node<span class="token punctuation">.</span><span class="token function">css</span><span class="token punctuation">(</span>positionSettings<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6448 Err codemadness.org 70 i 6449 <span class="token punctuation">}</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6450 <span class="token class-name">MoveStar</span><span class="token punctuation">.</span>prototype<span class="token punctuation">.</span><span class="token function-variable function">step</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> Err codemadness.org 70 i 6451 Err codemadness.org 70 i 6452 <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function">setPosition</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6453 Err codemadness.org 70 i 6454 <span class="token comment">// Each tick, decrement z slightly</span> Err codemadness.org 70 i 6455 <span class="token keyword">this</span><span class="token punctuation">.</span>z <span class="token operator">-=</span> <span class="token number">0.2</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6456 Err codemadness.org 70 i 6457 <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token keyword">this</span><span class="token punctuation">.</span>z <span class="token operator">&lt;=</span> <span class="token number">0</span> <span class="token operator">||</span> Err codemadness.org 70 i 6458 <span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>y <span class="token operator">*</span> <span class="token number">128.0</span> <span class="token operator">/</span> <span class="token keyword">this</span><span class="token punctuation">.</span>z<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token punctuation">(</span>height <span class="token operator">/</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token operator">&lt;</span> <span class="token number">0</span> <span class="token operator">||</span> Err codemadness.org 70 i 6459 <span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>y <span class="token operator">*</span> <span class="token number">128.0</span> <span class="token operator">/</span> <span class="token keyword">this</span><span class="token punctuation">.</span>z<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token punctuation">(</span>height <span class="token operator">/</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token operator">></span> height <span class="token operator">||</span> Err codemadness.org 70 i 6460 <span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>x <span class="token operator">*</span> <span class="token number">128.0</span> <span class="token operator">/</span> <span class="token keyword">this</span><span class="token punctuation">.</span>z<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token punctuation">(</span>width <span class="token operator">/</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token operator">&lt;</span> <span class="token number">0</span> <span class="token operator">||</span> Err codemadness.org 70 i 6461 <span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>x <span class="token operator">*</span> <span class="token number">128.0</span> <span class="token operator">/</span> <span class="token keyword">this</span><span class="token punctuation">.</span>z<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token punctuation">(</span>width <span class="token operator">/</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token operator">></span> width Err codemadness.org 70 i 6462 <span class="token punctuation">)</span><span class="token punctuation">{</span> Err codemadness.org 70 i 6463 <span class="token comment">// When star "reaches" the screen, send it far away!!</span> Err codemadness.org 70 i 6464 <span class="token keyword">this</span><span class="token punctuation">.</span>x <span class="token operator">=</span> <span class="token function">randomInRange</span><span class="token punctuation">(</span><span class="token number">25</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6465 <span class="token keyword">this</span><span class="token punctuation">.</span>y <span class="token operator">=</span> <span class="token function">randomInRange</span><span class="token punctuation">(</span><span class="token number">25</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6466 <span class="token keyword">this</span><span class="token punctuation">.</span>z <span class="token operator">=</span> <span class="token number">31</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6467 <span class="token punctuation">}</span> Err codemadness.org 70 i 6468 Err codemadness.org 70 i 6469 <span class="token class-name">Star</span><span class="token punctuation">.</span>prototype<span class="token punctuation">.</span><span class="token function">step</span><span class="token punctuation">.</span><span class="token function">call</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6470 <span class="token punctuation">}</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6471 <span class="token comment">/** Err codemadness.org 70 i 6472 * Helper function Err codemadness.org 70 i 6473 */</span> Err codemadness.org 70 i 6474 <span class="token keyword">var</span> <span class="token function-variable function">randomInRange</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">n</span><span class="token punctuation">)</span><span class="token punctuation">{</span> Err codemadness.org 70 i 6475 <span class="token keyword">var</span> sign <span class="token operator">=</span> Math<span class="token punctuation">.</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">></span> <span class="token number">0.5</span> <span class="token operator">?</span> <span class="token number">1</span> <span class="token operator">:</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6476 <span class="token keyword">return</span> sign <span class="token operator">*</span> Math<span class="token punctuation">.</span><span class="token function">floor</span><span class="token punctuation">(</span> Math<span class="token punctuation">.</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">*</span> n<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6477 <span class="token punctuation">}</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6478 Err codemadness.org 70 i 6479 <span class="token comment">/** Err codemadness.org 70 i 6480 * Setup starfield size Err codemadness.org 70 i 6481 */</span> Err codemadness.org 70 i 6482 <span class="token keyword">var</span> height <span class="token operator">=</span> <span class="token number">400</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6483 <span class="token keyword">var</span> width <span class="token operator">=</span> <span class="token number">700</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6484 Err codemadness.org 70 i 6485 <span class="token comment">/** Err codemadness.org 70 i 6486 * Build star helper function Err codemadness.org 70 i 6487 */</span> Err codemadness.org 70 i 6488 <span class="token keyword">var</span> <span class="token function-variable function">buildStar</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 6489 <span class="token keyword">var</span> star <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Star</span><span class="token punctuation">(</span><span class="token punctuation">(</span>Math<span class="token punctuation">.</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">*</span> width<span class="token punctuation">)</span><span class="token punctuation">,</span> Err codemadness.org 70 i 6490 <span class="token punctuation">(</span>Math<span class="token punctuation">.</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">*</span> height<span class="token punctuation">)</span><span class="token punctuation">,</span> Err codemadness.org 70 i 6491 <span class="token number">200</span> Err codemadness.org 70 i 6492 <span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6493 <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'#stars'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">append</span><span class="token punctuation">(</span>star<span class="token punctuation">.</span>$node<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6494 <span class="token punctuation">}</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6495 Err codemadness.org 70 i 6496 <span class="token keyword">var</span> <span class="token function-variable function">buildTwinkleStar</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 6497 <span class="token keyword">var</span> star <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">TwinkleStar</span><span class="token punctuation">(</span><span class="token punctuation">(</span>Math<span class="token punctuation">.</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">*</span> width<span class="token punctuation">)</span><span class="token punctuation">,</span> Err codemadness.org 70 i 6498 <span class="token punctuation">(</span>Math<span class="token punctuation">.</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">*</span> height<span class="token punctuation">)</span><span class="token punctuation">,</span> Err codemadness.org 70 i 6499 <span class="token number">200</span> Err codemadness.org 70 i 6500 <span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6501 <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'#twinkle'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">append</span><span class="token punctuation">(</span>star<span class="token punctuation">.</span>$node<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6502 <span class="token punctuation">}</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6503 <span class="token keyword">var</span> <span class="token function-variable function">buildMoveStar</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 6504 <span class="token keyword">var</span> star <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MoveStar</span><span class="token punctuation">(</span><span class="token function">randomInRange</span><span class="token punctuation">(</span><span class="token number">50</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Err codemadness.org 70 i 6505 <span class="token function">randomInRange</span><span class="token punctuation">(</span><span class="token number">50</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Err codemadness.org 70 i 6506 Math<span class="token punctuation">.</span><span class="token function">floor</span><span class="token punctuation">(</span> <span class="token number">32</span> <span class="token operator">*</span> Math<span class="token punctuation">.</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Err codemadness.org 70 i 6507 <span class="token number">50</span> Err codemadness.org 70 i 6508 <span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6509 <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'#moving'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">append</span><span class="token punctuation">(</span>star<span class="token punctuation">.</span>$node<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6510 <span class="token punctuation">}</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6511 Err codemadness.org 70 i 6512 <span class="token comment">/** Err codemadness.org 70 i 6513 * Initialize the game Err codemadness.org 70 i 6514 */</span> Err codemadness.org 70 i 6515 <span class="token function">$</span><span class="token punctuation">(</span>document<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">ready</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 6516 Err codemadness.org 70 i 6517 <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'.starfield'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">css</span><span class="token punctuation">(</span><span class="token punctuation">{</span> Err codemadness.org 70 i 6518 <span class="token string">"height"</span><span class="token operator">:</span> height<span class="token punctuation">,</span> Err codemadness.org 70 i 6519 <span class="token string">"width"</span><span class="token operator">:</span> width<span class="token punctuation">,</span> Err codemadness.org 70 i 6520 <span class="token string">"background-color"</span><span class="token operator">:</span> <span class="token string">"black"</span><span class="token punctuation">,</span> Err codemadness.org 70 i 6521 <span class="token string">"position"</span><span class="token operator">:</span><span class="token string">"relative"</span> Err codemadness.org 70 i 6522 <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6523 <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">var</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> <span class="token number">20</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 6524 <span class="token function">buildStar</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6525 <span class="token function">buildTwinkleStar</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6526 <span class="token punctuation">}</span> Err codemadness.org 70 i 6527 <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">var</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> <span class="token number">100</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 6528 <span class="token function">buildMoveStar</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6529 <span class="token punctuation">}</span> Err codemadness.org 70 i 6530 Err codemadness.org 70 i 6531 <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre></div> Err codemadness.org 70 i 6532 <p>The MoveStar subclass includes an additional parameter called z that will represent the star's position on the z-axis. A value of 32 is as "far away" as possible and a value of zero is as "close" as possible (basically at the screen). The MoveStar subclass will have to simulate motion along the z-axis by starting the stars quite far away, decrementing their z property with each "step" in the setTimeout loop, and then translating their current posision into an x and y position on the screen. Once the stars reach the screen, we reposition them again far away. Because the stars are being replaced in random positions around the center of the 'div' using the new randomInRange helper function, each star will "move" towards its respective quadrant over time as the decrementing z value exaggerates its respective x and y positions on screen. This is key to the visualization looking realistic. We've also decided to have the stars "grow" larger as they get closer to the screen, which further helps simulate motion.Through the magic of subclassing, the "step" and "setPosition" methods were both overwritten while still referencing the superclass methods.</p> Err codemadness.org 70 i 6533 <h3>The Tie Fighters That Bind</h3> Err codemadness.org 70 i 6534 <p>We've now recreated our 90's screensaver. This alone is a very cool accomplishment. But we're still not yet in game territory yet. Specifically, enemy territory. The next change I'll make is to introduce a new subclass of MoveStar called TieFighter. This should be easy.</p> Err codemadness.org 70 i 6535 <div class="gatsby-highlight" data-language="javascript"><pre class="language-javascript"><code class="language-javascript"><span class="token comment">/** Err codemadness.org 70 i 6536 * TieFighter class Err codemadness.org 70 i 6537 */</span> Err codemadness.org 70 i 6538 <span class="token keyword">var</span> <span class="token function-variable function">TieFighter</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">x<span class="token punctuation">,</span> y<span class="token punctuation">,</span> z<span class="token punctuation">,</span> timeBetweenSteps</span><span class="token punctuation">)</span><span class="token punctuation">{</span> Err codemadness.org 70 i 6539 <span class="token function">MoveStar</span><span class="token punctuation">.</span><span class="token function">apply</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">,</span> arguments<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6540 <span class="token keyword">this</span><span class="token punctuation">.</span>$node <span class="token operator">=</span> <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'&lt;img src="../images/subclass-wars/tiefighter.png">&lt;/img>'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6541 <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function">step</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6542 <span class="token punctuation">}</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6543 <span class="token class-name">TieFighter</span><span class="token punctuation">.</span>prototype <span class="token operator">=</span> Object<span class="token punctuation">.</span><span class="token function">create</span><span class="token punctuation">(</span><span class="token class-name">MoveStar</span><span class="token punctuation">.</span>prototype<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6544 <span class="token class-name">TieFighter</span><span class="token punctuation">.</span>prototype<span class="token punctuation">.</span>constructor <span class="token operator">=</span> TieFighter<span class="token punctuation">;</span> Err codemadness.org 70 i 6545 <span class="token class-name">TieFighter</span><span class="token punctuation">.</span>prototype<span class="token punctuation">.</span><span class="token function-variable function">step</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 6546 <span class="token keyword">var</span> size <span class="token operator">=</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> <span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>z <span class="token operator">/</span> <span class="token number">32</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">100</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6547 <span class="token keyword">this</span><span class="token punctuation">.</span>$node<span class="token punctuation">.</span><span class="token function">css</span><span class="token punctuation">(</span><span class="token punctuation">{</span>height<span class="token operator">:</span> size<span class="token punctuation">,</span> width<span class="token operator">:</span> size<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6548 <span class="token class-name">MoveStar</span><span class="token punctuation">.</span>prototype<span class="token punctuation">.</span><span class="token function">step</span><span class="token punctuation">.</span><span class="token function">call</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 6549 <span class="token punctuation">}</span><span class="token punctuation">;</span></code></pre></div> Err codemadness.org 70 i 6550 <p>Okay, that worked, sort of. Simply by replacing the type of DOM element with an img tag, we've turned our MoveStars into Tiefighters! But there's clearly some kind of CSS border situation going on that we'll have to investigate. And the TieFighters are not disappearing immediately when they hit the bottom or right side of the div. But they are disappearing correctly when they hit the left or top. Strange. However, if you recall that the origin of an HTML element is the upper left hand corner of its rectangle, then this bug makes more sense. In order to resolve, we would have to overwrite some of MoveStar's calculations around resetting the image location to also account for the size of the img.</p> Err codemadness.org 70 i 6551 <p>And then there's this horrible border thing. The border is definitely the result of setting the CSS properties for the Star and MoveStar classes directly in the JavaScript rather than in a separate CSS class that we can toggle on or off. If we move the styling of the Star and MoveStar (specifically the border-style, border-color, and border-radius) to a separate CSS file, then we wouldn't have these white borders on our TieFighters. For now, let's just pretend these boxes are from the Millenium Falcon's weapons targetting system.</p> Err codemadness.org 70 i 6552 <h3>The Force Awakens</h3> Err codemadness.org 70 i 6553 <p>At this point, we've now demonstrated how to use JavaScript subclassing to create the foundations of a Stars Wars or Star Trek type game. A big Chewbacca-style hug to Tate Thurston who was my co-conspirator on this project.</p> Err codemadness.org 70 i 6554 <p>Rather than continue to walkthrough the code (because this post is long enough already), I'll instead list some considerations, challenges, and steps we faced in the transition from this visualization to our game:</p> Err codemadness.org 70 i 6555 <ul> Err codemadness.org 70 i 6556 <li>Millenium Falcon cockpit</li> Err codemadness.org 70 i 6557 <li>Use GIMP to create transparent png and overlay Han and Chewie cockpit image on top with CSS "z-index" property.</li> Err codemadness.org 70 i 6558 <li>Use animate.css to "shake" the cockpit image after a hit from a TieFighter (when the TieFighter reaches a z-position of zero), and/or flash the screen semi-transparent red with CSS.</li> Err codemadness.org 70 i 6559 </ul> Err codemadness.org 70 i 6560 <h4>Tiefighters</h4> Err codemadness.org 70 i 6561 <ul> Err codemadness.org 70 i 6562 <li>Use CSS to flip the image based on initial x-position to make their flight pattern look more realistic.</li> Err codemadness.org 70 i 6563 <li>Turn the mouse cursor into a crosshair with CSS</li> Err codemadness.org 70 i 6564 <li>Use setInterval to consistently generate new Tiefighters</li> Err codemadness.org 70 i 6565 <li>Set an onClick listener to track succesful "hits", and then turn the Tiefighter img source into an explosion-type gif, and then remove the destroyed TieFighter. (Sidenote - this is more challenging than simply removing the DOM node, since the TieFighter object will continue to exist in memory even though the DOM node was removed. Frustratingly, we kept getting invisible "hits" from already-destroyed TieFighters, and we finally resolved by using a boolean flag to track whether a Tiefighter had been destroyed or not before iterating to the next call to the original Star "step" function).</li> Err codemadness.org 70 i 6566 </ul> Err codemadness.org 70 i 6567 <h4>Sounds</h4> Err codemadness.org 70 i 6568 <ul> Err codemadness.org 70 i 6569 <li>Use one of the many free sound effects websites to create laser, explosion, injury, and other fun videogame sounds, and then trigger them via event listeners</li> Err codemadness.org 70 i 6570 <li>Find some background music and set on autoplay with an HTML audio tag</li> Err codemadness.org 70 i 6571 </ul> Err codemadness.org 70 i 6572 <h4>Hyperspace</h4> Err codemadness.org 70 i 6573 <p>If you've already tried the game demo, you may have noticed that the Millenium Falcon's hyperdrive is not operational. That's an obvious next step for future development!</p><![CDATA[Golden Olden]]>https://www.charlieharrington.com/terminal-man-golden-oldenhttps://www.charlieharrington.com/terminal-man-golden-oldenTue, 04 Aug 2015 00:00:00 GMT<iframe width="100%" height="300" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/202166678&amp;color=%2300cc11&amp;auto_play=false&amp;hide_related=false&amp;show_comments=true&amp;show_user=true&amp;show_reposts=false&amp;visual=true"></iframe><![CDATA[NOAH Conference in Berlin]]>https://www.charlieharrington.com/noah-conference-in-berlinhttps://www.charlieharrington.com/noah-conference-in-berlinTue, 09 Jun 2015 00:00:00 GMT<iframe width="560" height="315" src="https://www.youtube.com/embed/SNRU3EV6NrI?rel=0" frameborder="0" allowfullscreen></iframe> Err codemadness.org 70 i 6574 <p>I spoke in Berlin, and took a really bad still image, apparently.</p><![CDATA[Introducing Knerds]]>https://www.charlieharrington.com/introducing-knerdshttps://www.charlieharrington.com/introducing-knerdsSat, 02 May 2015 00:00:00 GMT<p>Knerds is a simple and fun iOS game that helps you learn the names of your co-workers through brute force, cuddly mascots, and spaced repetition.</p> Err codemadness.org 70 i 6575 <p><span Err codemadness.org 70 i 6576 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 6577 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 6578 > Err codemadness.org 70 i 6579 <a Err codemadness.org 70 i 6580 class="gatsby-resp-image-link" Err codemadness.org 70 i 6581 href="/static/277ec697d74df18b6632441f90b2299a/29007/banner.png" Err codemadness.org 70 i 6582 style="display: block" Err codemadness.org 70 i 6583 target="_blank" Err codemadness.org 70 i 6584 rel="noopener" Err codemadness.org 70 i 6585 > Err codemadness.org 70 i 6586 <span Err codemadness.org 70 i 6587 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 6588 style="padding-bottom: 56.44171779141104%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAIAAADwazoUAAAACXBIWXMAAAsTAAALEwEAmpwYAAACGElEQVQoz41RS2sTURSevavURyaPpkWxPiAoBrJQcONSf4AgthXBjUoWKrgSURTfYC1GKygK7cZkJpNna2rMY2buJJO0M2mZqe200WkCaTI6Tac1IC48SaBdqCB893DOvd93z+F8mJ2kdxG0LcDY/wTJ2FqgIe8QzCRtbZcdYI4Acyxe6KFYM0FbAwxO0AC4tAAvwPaGOEcQ2Sm2J4hwknFP8H0htJPI4O0vsH0hJOqGa5zfH+b2htDhWO7IOL/dnzkYyR5NiHtivGtScCdEZ1w4kZxB9dVTKbEvzLkn8jALBhpBN3xq7dZsaXh+ubTehPIskj6t6ItrGxdz8oxukMu1F/Pl6e9r8HpdUJaMH49lFZpjMMaS0TR+/jrNzI5+qT6RVYjBsva5sRGu6reVlcX15vGEwGiNS4UFVG94Cgvp2mq4XG+NDWJgX5tWoO1DWT3HyRAHkfT2ay0mKyc9V8eo0Jmhl8FkuljVopVv/UiKVLT3aq0lhgPbghl2B9leiu1ulxZ/yvZBPHDlxjYMM5m6LgwOPH9wv39oBKcQ7BL6WdprxzZtsLaTDhxkBo9NOW8+YibjDOJQji9J0uVRX5c/7aDYTbcw+98c7iYz5mjedeepLBZpvpBgWKUoesYIk68l3vL5X2I8mnfefaYJXIrzzmWTmlo5P/IOLPwvsTnCH7rnVdPh3MdX2dfD+SlhwPtmBwHiLdpvh9GRMB9s2dQAAAAASUVORK5CYII='); background-size: cover; display: block;" Err codemadness.org 70 i 6589 ></span> Err codemadness.org 70 i 6590 <img Err codemadness.org 70 i 6591 class="gatsby-resp-image-image" Err codemadness.org 70 i 6592 alt="Banner" Err codemadness.org 70 i 6593 title="Banner" Err codemadness.org 70 i 6594 src="/static/277ec697d74df18b6632441f90b2299a/a6d36/banner.png" Err codemadness.org 70 i 6595 srcset="/static/277ec697d74df18b6632441f90b2299a/222b7/banner.png 163w, Err codemadness.org 70 i 6596 /static/277ec697d74df18b6632441f90b2299a/ff46a/banner.png 325w, Err codemadness.org 70 i 6597 /static/277ec697d74df18b6632441f90b2299a/a6d36/banner.png 650w, Err codemadness.org 70 i 6598 /static/277ec697d74df18b6632441f90b2299a/e548f/banner.png 975w, Err codemadness.org 70 i 6599 /static/277ec697d74df18b6632441f90b2299a/3c492/banner.png 1300w, Err codemadness.org 70 i 6600 /static/277ec697d74df18b6632441f90b2299a/29007/banner.png 1600w" Err codemadness.org 70 i 6601 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 6602 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 6603 loading="lazy" Err codemadness.org 70 i 6604 /> Err codemadness.org 70 i 6605 </a> Err codemadness.org 70 i 6606 </span></p> Err codemadness.org 70 i 6607 <h3>Diving into Objective-C</h3> Err codemadness.org 70 i 6608 <p>Like many tech companies, Knewton organizes a hack day every few months. Beyond the inevitable pizza gorging, the fun and hopefully useful projects, and the geeky camaraderie, hack day has always been important to me — discovering this 2011 Knewton hack day video more or less kept me alive as a functioning human organism during the darkest days of my pre-Knewton career.</p> Err codemadness.org 70 i 6609 <p>I had just finished the Big Nerd Ranch Objective-C book when our April 2015 hack day rolled around, and I decided to try my hand at crafting a dead simple iPhone app.</p> Err codemadness.org 70 i 6610 <p>My idea: Tinder for work. Well, not exactly.</p> Err codemadness.org 70 i 6611 <p>I wanted to build a flashcard app that helped you learn the names of your co-workers with pictures and some randomized guessing action. Fun, potentially useful (especially for those of us in the London office), and quite possibly something I could pull off in a few days.</p> Err codemadness.org 70 i 6612 <p>Pretty soon, after an hour or so on Thursday night, Knerd by Knewton lived:</p> Err codemadness.org 70 i 6613 <p><span Err codemadness.org 70 i 6614 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 6615 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 200px; " Err codemadness.org 70 i 6616 > Err codemadness.org 70 i 6617 <a Err codemadness.org 70 i 6618 class="gatsby-resp-image-link" Err codemadness.org 70 i 6619 href="/static/4fedb2f8f5ad7cd73079d370a3c57e0b/772e8/k.png" Err codemadness.org 70 i 6620 style="display: block" Err codemadness.org 70 i 6621 target="_blank" Err codemadness.org 70 i 6622 rel="noopener" Err codemadness.org 70 i 6623 > Err codemadness.org 70 i 6624 <span Err codemadness.org 70 i 6625 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 6626 style="padding-bottom: 170.5521472392638%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAiCAIAAADQyG7qAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFxElEQVRIx5WV6VNTVxjG+Vc67Qxu4IJDBSQJkEC2m3tz7p57k5uE7AsQQiADCkKwoiADbqNsIogKtXVasaCsIiBoEdDgaJlaaKfT1hnLV6fTDz3hsgS7zHTm9+Gc957nLM97znsTlt+svl5e/l+8ev0asra2lvDDyopByAcMTxhM/wYZ16Z4c64aydOiL6JLCSsrqzCkBRRKMLpNYBeC4DQENjR6EsF3fIXxhcXFmJjkBNjBSBbdhLPYGJMVZ40QuJTJ5sJZHo0bAFlYfL4tFkN6moPrnGls7r5x69KVtsutHe3XupvOX4JT6P5DrCNYLaC1OAMR7G5fIOQuCBSWhJ2+Ipc/gNGcjopp4BRw55goXl1dje2N43tvtQx809vT2djV0dR+ue5cQ2VVRbCsyBXyWFxm1iOQPKHhgEqgtBTD6LbEgDFygvDyye03Lwai09ejM32TQz3NjTUcT9KU3sygkSJzhR13U/JSK9JaV+h22zWAXny+KTaYhMWpW2+WBuYneqYHW+/2dRQVuJUqRW5utskATviMx+y4E2SdP54/eP2kLd8MjxYTr6zGUkUwbEtd6eCNpnvXGvuvNnRcaHBbeROjVypkp8IFXZ8FI07CS8pLLbqGsM3A0Ahp2No2bzBZ+nta/AJpY3QunnQb6XwSdTKAR5Q8ps6nEFaTo5Km2/WykFFu5BiEMCyui3+E6RFsrvfv34fLSlIPH5JlpFkxnRuRe9VSu1JizpMcTt63JzExNy2ltcrcf9HjdfBqwIpnhmLeaM3/489ffv913s0jqExSaWbKGU2EVhWh8mpG45ZnVhba68vMZwJ0e43FbuW0OBtvGPfT076170dmBrsrraCj0NQXMHbZiS4HaHPQ/RcbZoZud50NeoissE1nFgwIsSkmDAJKEEvTvYN9V+9/3vLyYWdLkGu1o+d4TY8Law9aV17ND92+evNCxE/IbEAGCICKholuowR7ttJbbCN9Zurn6N2WKnejUdnnAefNmkpa/VVbc++FSHWhLWhQC8oMAge6DbF4PfVERchbBZ+DNvdOZ1skVF6OSY4DaQjJrMbluiy5jQQejnBi0iCrAECPUjvEZLHH2F5Zcbm+7Upzb6EjVKpJPaE/2mjIcauOHkpOPbD3gCxNIqCIoJEplGo9w8c9SYD7LJaqYw0C50IUuuxMpUF6+OsS/SW7Ki05ef+e/SlJB5N2701NSctKl+WpEJjdDTE0TE9SLKDSUjKOHEhVytRHU2W7Pk684kbMioxPPtp1cE/y/l1JybuT9iXu+/TgEQQlsfht6ylWrUYyM7Oys3IRDa5QqGEb3i25NCs9XSKV5kglORJJTmZmdnZWHgLo9ZXXxbTRDGeCDxPajhtMgOUhsHqYHB6ry2d1eT8oafA6fygGrBEwnJ42AJqDj97hK/QXl1idXn9xCNYgjGJjnxgOKneIYYkRC1CshnJmEYwxwmsLZ0Tp7SDswmEi22eGlQUBpNEVqOt6IHK6+0FN50h15/Dp7iHYPXXtfv3NcWdpjQbDYZJ31DBRLHhLmu/MbhHpnau6Ode03m76cuZi/4K34rQG1WPxYgqK1wsiJdjc4ZMirrJaT1nEG464w7XrkVpveR1n86EEDcXbqdpyG1qC4hREB0hAsxRvJFleTzJiEAIzisd85f8hVTCkIwwQLWBYk624rKIgGIYN2BXjGMVB5z90W9wJY7L4gsUi/mDAX1LkDxYVlATESEEoyOfb4WP8m9sko8ZIf0nx4+jY9Iuxmejo0NxE/+yjwW8fDTydgMHJxdG576Zq6mvztACj4w2DeaZYjZ7yh4IzS+OPo+OzS2PDzya+mJq8Ozt578nkTHR86vnYs+XpSMNJJYLDq7JhGPzFwpZSB1QoDqe0eb0iDp/XVeBx+j0Ov2cj4veRvEmlw9UYAZlfWEx49+7d2MOJ4dGxkbHx4ZGxwQfDG9yPYzM4NDIKh4n89vbtX/bUwEpBG6OnAAAAAElFTkSuQmCC'); background-size: cover; display: block;" Err codemadness.org 70 i 6627 ></span> Err codemadness.org 70 i 6628 <img Err codemadness.org 70 i 6629 class="gatsby-resp-image-image" Err codemadness.org 70 i 6630 alt="Knerd by Knewton" Err codemadness.org 70 i 6631 title="Knerd by Knewton" Err codemadness.org 70 i 6632 src="/static/4fedb2f8f5ad7cd73079d370a3c57e0b/772e8/k.png" Err codemadness.org 70 i 6633 srcset="/static/4fedb2f8f5ad7cd73079d370a3c57e0b/222b7/k.png 163w, Err codemadness.org 70 i 6634 /static/4fedb2f8f5ad7cd73079d370a3c57e0b/772e8/k.png 200w" Err codemadness.org 70 i 6635 sizes="(max-width: 200px) 100vw, 200px" Err codemadness.org 70 i 6636 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 6637 loading="lazy" Err codemadness.org 70 i 6638 /> Err codemadness.org 70 i 6639 </a> Err codemadness.org 70 i 6640 </span></p> Err codemadness.org 70 i 6641 <p>It wasn’t a good app — the picture didn’t change, there were no swipes or gestures, and the “quiz” was pretty lame — but the basic elements were there. I had a foundation. I was able to test my app on my actual phone — awesome. Even if I wasn’t able to proceed much further, I knew that I would be able to submit at least a basic working iOS quiz app as my “hack.” Err codemadness.org 70 i 6642 Back to the drawing board</p> Err codemadness.org 70 i 6643 <p>We use a Trello board to organize potential hacks into four categories: Performance, Product, Business, and Culture. The Trello board is also used to recruit fellow hackers to your pet project. Earlier that week, I dropped a vague card into the Product category called “Knerd by Knewton” with an even more mysterious description. </p> Err codemadness.org 70 i 6644 <p>To my shock Dan McGorry, our lead UX designer replied:</p> Err codemadness.org 70 i 6645 <p><span Err codemadness.org 70 i 6646 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 6647 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 558px; " Err codemadness.org 70 i 6648 > Err codemadness.org 70 i 6649 <a Err codemadness.org 70 i 6650 class="gatsby-resp-image-link" Err codemadness.org 70 i 6651 href="/static/6edf9d10f5f0b0955e405e2a80b99587/42a8d/trello.png" Err codemadness.org 70 i 6652 style="display: block" Err codemadness.org 70 i 6653 target="_blank" Err codemadness.org 70 i 6654 rel="noopener" Err codemadness.org 70 i 6655 > Err codemadness.org 70 i 6656 <span Err codemadness.org 70 i 6657 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 6658 style="padding-bottom: 58.89570552147239%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAABk0lEQVQoz52TyVLCQBCG8/6v4M2zD2F5ViFAWLIRQtaZ7AQCHPjtHokFFFrqVH3VM5mltz/a7PUNU8uCPh5jOpsjLytUzQZl3Sgu57f0e73lu9p8oENkGTzPg++vEYYR0jSFpG8ZEUW8FkiSlEgu9nJEcQwpM2WLssSm3ULb7DpkUqoHu65T7HY77Pd7xXa7Vbbf6zkcDl/n2PJaPSjygjwkiCmCkGwiJMIoRr1p0dABBc/VukV1mfJNCVTKURDAXnowLRsO2eXKh+Mu4QchXG8Fj8qwWgdfVlCqsighKZBbMvquvT+/UFNsDPURRhMD84WJyXSmLrMDy3HPD/vwyBlf5Ei+Q+NDEaUbU+HZMgGlnFc1iqoh6ivuRXYV4dPjAxa2izFFNzGmGAx1pNQkrmFfpytIIveoCXaoObatZPApGx9CCJxOpz/DQ3W5JdkEwRqGYcA0TRyPR/x3tCQxjXNPSKwxS4YsCzQvCggSbN006hB7/g0lp5zSRdZfeNYhN2RNfwvLJ04lFbuE+KERPeLclA+ukYnOhcSUdgAAAABJRU5ErkJggg=='); background-size: cover; display: block;" Err codemadness.org 70 i 6659 ></span> Err codemadness.org 70 i 6660 <img Err codemadness.org 70 i 6661 class="gatsby-resp-image-image" Err codemadness.org 70 i 6662 alt="Trello" Err codemadness.org 70 i 6663 title="Trello" Err codemadness.org 70 i 6664 src="/static/6edf9d10f5f0b0955e405e2a80b99587/42a8d/trello.png" Err codemadness.org 70 i 6665 srcset="/static/6edf9d10f5f0b0955e405e2a80b99587/222b7/trello.png 163w, Err codemadness.org 70 i 6666 /static/6edf9d10f5f0b0955e405e2a80b99587/ff46a/trello.png 325w, Err codemadness.org 70 i 6667 /static/6edf9d10f5f0b0955e405e2a80b99587/42a8d/trello.png 558w" Err codemadness.org 70 i 6668 sizes="(max-width: 558px) 100vw, 558px" Err codemadness.org 70 i 6669 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 6670 loading="lazy" Err codemadness.org 70 i 6671 /> Err codemadness.org 70 i 6672 </a> Err codemadness.org 70 i 6673 </span></p> Err codemadness.org 70 i 6674 <p>And that’s when things got real.</p> Err codemadness.org 70 i 6675 <h3>UX</h3> Err codemadness.org 70 i 6676 <p>Dan and I chatted throughout Friday on Slack (him in New York, me in London) and we debated several challenges with the concept:</p> Err codemadness.org 70 i 6677 <ul> Err codemadness.org 70 i 6678 <li>What does a left swipe mean? A right swipe?</li> Err codemadness.org 70 i 6679 <li>Should the quizzing occur when the picture is still on the screen (and thereby losing the Tinder flicking concept, but reinforcing the memorization experience)?</li> Err codemadness.org 70 i 6680 <li>How should we handle incorrect answers?</li> Err codemadness.org 70 i 6681 </ul> Err codemadness.org 70 i 6682 <p>Designing solid UX is more challenging than I thought. My initial concept for a Tinder-like flow was much more complicated than I had initially anticipated. Dan put together an early set of wireframes in blazing speed, and we continued to discuss how to improve the experience as he iterated on the wires. </p> Err codemadness.org 70 i 6683 <p>Here’s a look at one of the early sets:</p> Err codemadness.org 70 i 6684 <p><span Err codemadness.org 70 i 6685 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 6686 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 6687 > Err codemadness.org 70 i 6688 <a Err codemadness.org 70 i 6689 class="gatsby-resp-image-link" Err codemadness.org 70 i 6690 href="/static/0204d5d0f0fc454f84197d43baacba50/fcbaf/wires1.png" Err codemadness.org 70 i 6691 style="display: block" Err codemadness.org 70 i 6692 target="_blank" Err codemadness.org 70 i 6693 rel="noopener" Err codemadness.org 70 i 6694 > Err codemadness.org 70 i 6695 <span Err codemadness.org 70 i 6696 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 6697 style="padding-bottom: 74.23312883435584%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAAAsTAAALEwEAmpwYAAADSUlEQVQ4y2WUy28bVRTG/cew64YFK1iDEN0gsWLJAomwCippFwhBBZGVCpJIRVRKK1FaKlIXOw/HolEjEpuWpHmZxvGj8dgJtR3s+O14ZmyPPT/OvTEIyB0d3Tn33vPdb75zzngcx6HX6zEYDLAsi0AgwNTUFF6vl2g0yvLyMpOTk4yPj7O1tcXKyoreV34kHOZ2YIEPPvuC9658wsO1CB7+NRRwPp8nkUgQj8ep1WoUi0Xtx2Ix7av9dDpNvlDAbDV5dzHCG3eXeOWmn4nf9vCojfWNDRLJpGbZarUol8vU63V9gWma2q8KmPqaSrVKu93+h8THT2I05eyjTI6vfs/gaTWbVAo5ahLU7/dpNBqalQLpdDqcnp5SPilpU36tWqEhAAPXRQIYWd3lh70Drj55xtfRAzxNu8OikSNbbyEUNQvbtjU7RwIGfUe0sHHF1IX9jinnHNwhw3d+fsrLDyJcmF0VwDQeq+ewXqxRsjq4Ety2TCzbErN1khR4W2Zz+K7W2yKDOud0bD4K7/LWfJg35yN8FzPwDORWPdyBsBnQa1n0Ol0GVhenKyxl7spXuPL0hH3fFv/UEtZyVvY7DROz0sJpdehKnM6y1mOY5Z3NLUKhEHP+AEdHR+xLdkNLS/j9fgzDICHZDwWD+O7fJ74fJxHb52EwRMD3gJQk1uMKmDsEVKJPT08zNjbGj7Oz5HI5bt66xejoKCMfjvDLyhrX/Je4+OkFXr/yEt8sfE4yfsBCcJHA3JxUSuKM4d+ASnSfz8fMzAwnpZJeCy4sMHPjW2170T3u7nqJ5Z7y2Fji3s41VHZq9aquBlV25wBVN6yurZHNHopGXVbXN/hp+ZG2RMrg9vqXxDI7hPdD3NmYwLFdCsd5XWoqiecAj48LvDjMUD35U8Tt499+xvXH20z/uknUyHMjMsbl+be5FLjI9xteHddo1jVDVXL/AVQLaSNN6nlKClw6xemRVX58H+N5kmK+xPXwZd6/95rYq9xZnzjTvmvr2HOArmiQMw7JJtNUjkuYbZPCizwH8ZQAZyhXKhwVUmzHI+wdbvJHyaBdP6VULOkOU2179nNQmR7O9MS6A7m2f+b/fzSkc8o9sIblK7XLsFKU/QWb5S63QFZP+QAAAABJRU5ErkJggg=='); background-size: cover; display: block;" Err codemadness.org 70 i 6698 ></span> Err codemadness.org 70 i 6699 <img Err codemadness.org 70 i 6700 class="gatsby-resp-image-image" Err codemadness.org 70 i 6701 alt="Wireframes" Err codemadness.org 70 i 6702 title="Wireframes" Err codemadness.org 70 i 6703 src="/static/0204d5d0f0fc454f84197d43baacba50/a6d36/wires1.png" Err codemadness.org 70 i 6704 srcset="/static/0204d5d0f0fc454f84197d43baacba50/222b7/wires1.png 163w, Err codemadness.org 70 i 6705 /static/0204d5d0f0fc454f84197d43baacba50/ff46a/wires1.png 325w, Err codemadness.org 70 i 6706 /static/0204d5d0f0fc454f84197d43baacba50/a6d36/wires1.png 650w, Err codemadness.org 70 i 6707 /static/0204d5d0f0fc454f84197d43baacba50/fcbaf/wires1.png 895w" Err codemadness.org 70 i 6708 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 6709 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 6710 loading="lazy" Err codemadness.org 70 i 6711 /> Err codemadness.org 70 i 6712 </a> Err codemadness.org 70 i 6713 </span></p> Err codemadness.org 70 i 6714 <p>That Friday was not exactly a day off from work for me, and I told Dan as much — that we should continue to develop the wires and concept up to the end of the day, and that I would devote my weekend to implementing our app, but with no guarantee of my success — just the old hack day try.</p> Err codemadness.org 70 i 6715 <h3>Enter the knerds</h3> Err codemadness.org 70 i 6716 <p>Dan and I had never worked together on anything before, but we were really syncing up well on Friday. I don’t want to say that our collaboration was effortless, because we both put in quite a bit of work, but it was easy. And fun. That’s one of the real beauties of hack day, discovering similar interests and collaborating with folks outside of your day-to-day job.</p> Err codemadness.org 70 i 6717 <p>Importantly, Dan and I agreed that the app was lacking something critical — a cuddly mascot. He showed me a Pinterest board he’d been collecting with mascot ideas, and I also mentioned my love for those armless french-fry guys in the McDonald’s world. </p> Err codemadness.org 70 i 6718 <p>Pretty soon, Dan came back with the knerds:</p> Err codemadness.org 70 i 6719 <p><span Err codemadness.org 70 i 6720 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 6721 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 563px; " Err codemadness.org 70 i 6722 > Err codemadness.org 70 i 6723 <a Err codemadness.org 70 i 6724 class="gatsby-resp-image-link" Err codemadness.org 70 i 6725 href="/static/2caa3c1f9fa01ac16e1bb2d64a1f550f/7cb89/knerds-group.png" Err codemadness.org 70 i 6726 style="display: block" Err codemadness.org 70 i 6727 target="_blank" Err codemadness.org 70 i 6728 rel="noopener" Err codemadness.org 70 i 6729 > Err codemadness.org 70 i 6730 <span Err codemadness.org 70 i 6731 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 6732 style="padding-bottom: 53.37423312883436%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAADgElEQVQozx3SfVDTBRjA8WeOyru6yzrN7rRkE7nF3BjBgP22EjD0fMuiF2JFCNLNoxzKNUHcjg6lnK8TRFFeZtsPAl/Gapf8YAwGJrZ4G1gSbXGlE27zJgz4/Qa706fFH98/n+dz99wDiADojwDf6Cagb8eztDYZW9WXAl/3pear7qSSpc7NmrLx9DT1H+/AkbubWT9vFYFdKoAOqZA1IBOwftqRBpvON8PG79uXAtSvADSsAhQB0JgC+04lPrPbIIWchuQzeQYC95JSzCMljXlGCey/KGEPEnEsMyFaNifjQb9MANRWGQv6/MC/Qi0FqHsZsPZVFm4BmHmasjIRt0ScqI6DXH3y6YxzQnxfJ8DPG5KN7zYnQ6VaGGFNksCPhAj8sjfWjkr5IncCN7wEgW8eAH5TN0DX62LoIqQwZ4+vZBoF3nkN5zbGwEo5+VaF1lKIZ6nDmKsnjBXHCAhfB27u3PVKZscUWy5JUlxIJWLe05wAoaFDLTR2pggMVgCPaBUEstYAU8Ydmyrk4FQRB1G55vKHBml5sTkDD5s/wmyjpBFh3XMjb3Isf4kiPddjoz05EslFxSefQVLNDS6v1oK8OouVW3UVltR5bQwwqsgRnyoKvSU8xAPrSLmeOLeHTMS9zWL8wCQtvR+74cKEfAf+qfgU3fmZ2P92gic8y44mbfWy6iYk6lox2mjbDXS5eBn91YtAH4rsWVBvxGDJBgx8sbw+7LCVFNF8yJ5m/x8dF0fdmiwvwTHT1cWH9dXokgrmc8tOKXlkJyaRVhSHi7lCuYC+VswOVu6CYMn640EtH5kzCfi47SyNiF16p/qeqjOt13lUA+NRL6SPxb2G4yJO6F48F3+PXasDuXkFV9/28T7nP85sh4tcf9myHeboELQqIsB96ybHbd3pcPXucTAhLB1xOqmi4v3ug8UFvqOnzxfg3+bMhePb7kwXbe+lixKphZ4aaxhVzE5OpH7bPzr83a/DJ7NtQwDT09Nmmgku/mZvXzTVnsTrl7TYUnUsp3XQ/bznvsflnfKiz/8YJ0YcSNWUPelq0gU76ioWh6gWfIrYTZpMLVnKgz9kKQ/U5mu+iYaZmRl5IBDQ+R/5DI+83kveyckjD/+diA3rL9H0fNXs3KyLYZjQgweeJwOOQRzqHw790tN3t73NVkC1dYdfECH9y0JYnZEFuvqGZ/8DBcfRMEwTrAcAAAAASUVORK5CYII='); background-size: cover; display: block;" Err codemadness.org 70 i 6733 ></span> Err codemadness.org 70 i 6734 <img Err codemadness.org 70 i 6735 class="gatsby-resp-image-image" Err codemadness.org 70 i 6736 alt="Knerds" Err codemadness.org 70 i 6737 title="Knerds" Err codemadness.org 70 i 6738 src="/static/2caa3c1f9fa01ac16e1bb2d64a1f550f/7cb89/knerds-group.png" Err codemadness.org 70 i 6739 srcset="/static/2caa3c1f9fa01ac16e1bb2d64a1f550f/222b7/knerds-group.png 163w, Err codemadness.org 70 i 6740 /static/2caa3c1f9fa01ac16e1bb2d64a1f550f/ff46a/knerds-group.png 325w, Err codemadness.org 70 i 6741 /static/2caa3c1f9fa01ac16e1bb2d64a1f550f/7cb89/knerds-group.png 563w" Err codemadness.org 70 i 6742 sizes="(max-width: 563px) 100vw, 563px" Err codemadness.org 70 i 6743 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 6744 loading="lazy" Err codemadness.org 70 i 6745 /> Err codemadness.org 70 i 6746 </a> Err codemadness.org 70 i 6747 </span></p> Err codemadness.org 70 i 6748 <p>We chatted through some minor tweaks, like the placement of bows, the eye colors, and the introduction of a fourth triangle-y knerd, but these little geometric critters were pretty much perfect from the start. And my love for the knerds began. </p> Err codemadness.org 70 i 6749 <p>By the end of Friday, our wires looked like a real app:</p> Err codemadness.org 70 i 6750 <p><span Err codemadness.org 70 i 6751 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 6752 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 6753 > Err codemadness.org 70 i 6754 <a Err codemadness.org 70 i 6755 class="gatsby-resp-image-link" Err codemadness.org 70 i 6756 href="/static/f93eb333b5a97bd41214561718d3e36f/c6671/wires2.png" Err codemadness.org 70 i 6757 style="display: block" Err codemadness.org 70 i 6758 target="_blank" Err codemadness.org 70 i 6759 rel="noopener" Err codemadness.org 70 i 6760 > Err codemadness.org 70 i 6761 <span Err codemadness.org 70 i 6762 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 6763 style="padding-bottom: 25.153374233128833%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAAAsTAAALEwEAmpwYAAABfklEQVQY0z2QSUsbAQBG81MEL3oQvKa4FwrFg0cPYk6eirghlZYqLqAnDz2ECE11XIhbI2prYhw1ioyJSyVuNSrUwojJMBlnkjASncTXgOC7fO/0HZ4tm81hPWWxLIv9/T3EgJ/fRxH2wiE2xDWk3TCCMIbb7cbn8+X3G8LYOMFdkQX/OF6/h4eMiWxcYmUtbElD4+zPEeZDhp3tTVxf2gkdHLOxssjoYDeLvwK8raqg/I2dvv4BqsvsvKuqYSbgQRj+jNM5gJJSOb88RtdUbJn7v5xJc6hJk7aWVioKCpmcmqKp0cH7klJGBYGPnZ20NTfjdLlocDhobemg92sPlcVFNNbXoqXjmCmT03j+UNd11LiCbujIskwkckJC07i5+Uc0esXFRRRJkvIJwswt/eTT9wmGJpYZWe/jg9dOl68O4zqAdScTM1LYFEVBvr0lkUiQy+V44fnVY7E7xDWRra0gYr6pZ9rD/OwPDq6DhFQvh+oKmcc099urPKeT/Aeaxjy3miuyWAAAAABJRU5ErkJggg=='); background-size: cover; display: block;" Err codemadness.org 70 i 6764 ></span> Err codemadness.org 70 i 6765 <img Err codemadness.org 70 i 6766 class="gatsby-resp-image-image" Err codemadness.org 70 i 6767 alt="Wireframes" Err codemadness.org 70 i 6768 title="Wireframes" Err codemadness.org 70 i 6769 src="/static/f93eb333b5a97bd41214561718d3e36f/a6d36/wires2.png" Err codemadness.org 70 i 6770 srcset="/static/f93eb333b5a97bd41214561718d3e36f/222b7/wires2.png 163w, Err codemadness.org 70 i 6771 /static/f93eb333b5a97bd41214561718d3e36f/ff46a/wires2.png 325w, Err codemadness.org 70 i 6772 /static/f93eb333b5a97bd41214561718d3e36f/a6d36/wires2.png 650w, Err codemadness.org 70 i 6773 /static/f93eb333b5a97bd41214561718d3e36f/e548f/wires2.png 975w, Err codemadness.org 70 i 6774 /static/f93eb333b5a97bd41214561718d3e36f/c6671/wires2.png 1129w" Err codemadness.org 70 i 6775 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 6776 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 6777 loading="lazy" Err codemadness.org 70 i 6778 /> Err codemadness.org 70 i 6779 </a> Err codemadness.org 70 i 6780 </span></p> Err codemadness.org 70 i 6781 <p>Now it was time for me to code up or shut up.</p> Err codemadness.org 70 i 6782 <h3>Weekend of code</h3> Err codemadness.org 70 i 6783 <p>I spent the next 48 hours doing nothing but coding, reading, power-napping, and drinking coffee, with a few sanity breaks for running and grabbing pizza — and it was amazing. I made continual progress throughout the weekend, which was both exhilarating and nerve-wracking because I needed to get it all working by the Monday deadline.</p> Err codemadness.org 70 i 6784 <p>Some challenges encountered along the way:</p> Err codemadness.org 70 i 6785 <p><strong>Moving between view controllers</strong>: The standard UITabBarController or the UINavigationController flows did not fit into our card-based app design, so I spent time exploring different flows for our game. Eventually, I used modal view controllers to toggle between the three screens (Start, Game, and Finish), with a UIAlertController for the quiz questions. Here’s how I present the Game Screen when a user clicks the “Let’s Go” button:</p> Err codemadness.org 70 i 6786 <div class="gatsby-highlight" data-language="objective-c"><pre class="language-objective-c"><code class="language-objective-c">- (IBAction)playGame:(id)sender { Err codemadness.org 70 i 6787 KDGameViewController *gvc = [[KDGameViewController alloc] init]; Err codemadness.org 70 i 6788 [self presentViewController:gvc animated:YES completion:nil]; Err codemadness.org 70 i 6789 }</code></pre></div> Err codemadness.org 70 i 6790 <p>Once you’re in the KDGameViewController, the “finish/victory” screen is shown in a similar fashion. Then, when the user taps “Play Again”, the “finish” screen is dismissed, and the user returns to the Game screen (where everything is reset).</p> Err codemadness.org 70 i 6791 <div class="gatsby-highlight" data-language="obj-c"><pre class="language-obj-c"><code class="language-obj-c">- (IBAction)playAgain:(id)sender { Err codemadness.org 70 i 6792 [self dismissViewControllerAnimated:YES completion:nil]; Err codemadness.org 70 i 6793 }</code></pre></div> Err codemadness.org 70 i 6794 <p><strong>Resetting the game</strong>: After the Finish screen, I wanted to draw the users back into the app to try the game again (hello, viral hook!), but the analytics counters were not properly resetting (my basic game analytics / metrics included number of hints, wrong choices, cards remaining, etc). I resolved this by utilizing the viewWillAppear() lifecycle method to reset all my counters. Err codemadness.org 70 i 6795 Randomizing the answer choices: This was a fun challenge — displaying randomized answer choices in the “Alert” pop-up. Here’s my naive but workable solution:</p> Err codemadness.org 70 i 6796 <div class="gatsby-highlight" data-language="objective-c"><pre class="language-objective-c"><code class="language-objective-c">// Select the &quot;correct&quot; and &quot;distractor&quot; choices Err codemadness.org 70 i 6797 NSMutableArray *names = [[NSMutableArray alloc] init]; Err codemadness.org 70 i 6798 // name1 points to the &quot;correct&quot; name Err codemadness.org 70 i 6799 [names addObject:name1]; Err codemadness.org 70 i 6800 // name2, name3, and name4 point to the distractor names Err codemadness.org 70 i 6801 [names addObject:name2]; Err codemadness.org 70 i 6802 [names addObject:name3]; Err codemadness.org 70 i 6803 [names addObject:name4]; Err codemadness.org 70 i 6804 // Randomly pick one of the &quot;names&quot; in names, Err codemadness.org 70 i 6805 // then create a new NSString to hold that name, Err codemadness.org 70 i 6806 // and finally remove it from the names array Err codemadness.org 70 i 6807 int random1 = arc4random() % [names count]; Err codemadness.org 70 i 6808 NSString *nameTitle1 = names[random1]; Err codemadness.org 70 i 6809 [names removeObjectAtIndex:random1]; Err codemadness.org 70 i 6810 int random2 = arc4random() % [names count]; Err codemadness.org 70 i 6811 NSString *nameTitle2 = names[random2]; Err codemadness.org 70 i 6812 [names removeObjectAtIndex:random2]; Err codemadness.org 70 i 6813 int random3 = arc4random() % [names count]; Err codemadness.org 70 i 6814 NSString *nameTitle3 = names[random3]; Err codemadness.org 70 i 6815 [names removeObjectAtIndex:random3]; Err codemadness.org 70 i 6816 int random4 = arc4random() % [names count]; Err codemadness.org 70 i 6817 NSString *nameTitle4 = names[random4]; Err codemadness.org 70 i 6818 [names removeObjectAtIndex:random4];</code></pre></div> Err codemadness.org 70 i 6819 <p>At this point, I’ve got 4 NSString pointers called nameTitle1, nameTitle2, etc. that will randomly hold the “correct” answer choice every time — sometimes the correct choice will be nameTitle2, other times it will be nameTitle4, etc. All I then have to do is create UIAlertActions with titles that reference nameTitle1, nameTitle2, etc.</p> Err codemadness.org 70 i 6820 <p><strong>Feature creep</strong>: I kept coming up with ideas for fun new features and mechanics before I even had the base functionality working (e.g. adding score “analytics” to the finish screen). This is a real problem. At the same time, it’s great to feel that continuous inspiration, and I would never want to entirely constrain that creativity.</p> Err codemadness.org 70 i 6821 <p>By 1:45 AM on Monday morning, Knerds was a working iOS game! Here’s a screencast that I recorded to submit the hack, just ahead of the Monday morning deadline (note that I hadn’t yet fixed the “repeated name” bug for the distractor answers, which I resolved later that morning, and also note that I say the word “sweet” a lot in this video):</p> Err codemadness.org 70 i 6822 <iframe src="https://player.vimeo.com/video/125413885" width="640" height="1183" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe> Err codemadness.org 70 i 6823 <p>I shouldn’t have recorded this at 1:42 AM on Sunday.</p> Err codemadness.org 70 i 6824 <h3>What’s next for Knerds</h3> Err codemadness.org 70 i 6825 <p><strong>TestFlight</strong>: After some clunking around with iTunesConnect, I’ve now got a dozen or so actual knerds testing out the app via TestFlight. The swiping UX needs to be improved. It may just make more sense to go with a “double-tap to guess” concept. Also, I need to fix the positioning of the views for different phone sizes. I had quickly used the “Reset to Suggested Constraints” option in Interface Builder for each view object ahead of releasing on TestFlight, but I’ve heard back and it didn’t work out as well as I had hoped.</p> Err codemadness.org 70 i 6826 <p><strong>Release as an internal company app</strong>: This requires an enterprise account, and a Dun &#x26; Bradstreet number. My hope is that we’ll be able to release Knerds for all current and future Knewton employees as a helpful HR tool.</p> Err codemadness.org 70 i 6827 <p><strong>Automatic content refresh</strong>: I scraped the pictures, names, and titles from our company page on Employee-List. It doesn’t look like they have an API, so I’m exploring some options for automatic content updates as more folks join Knewton.</p> Err codemadness.org 70 i 6828 <p><strong>Game improvements</strong>: One obvious improvement could be better distractors — filtering by team or location.</p> Err codemadness.org 70 i 6829 <p>I had a great time building this app with Dan, and I can’t wait to continue to develop Knerds!</p> Err codemadness.org 70 i 6830 <h3>One more thing</h3> Err codemadness.org 70 i 6831 <p>I flew to NYC later that week, and I couldn’t stop thinking about the knerds, and I decided to come up with a backstory for them. I quickly sketched up some storyboards on some scraps of paper during my flight, and emailed them to Dan to see what he could put together.</p> Err codemadness.org 70 i 6832 <p>Here it is — the backstory of the knerds:</p> Err codemadness.org 70 i 6833 <iframe src="//www.slideshare.net/slideshow/embed_code/key/lBIMolu34oh74u" width="768" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> Err codemadness.org 70 i 6834 <p>But Dan and I kept going. We named them all. And then I couldn’t stop myself — the knerds needed personalities:</p> Err codemadness.org 70 i 6835 <h4>Olive</h4> Err codemadness.org 70 i 6836 <p><span Err codemadness.org 70 i 6837 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 6838 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 204px; " Err codemadness.org 70 i 6839 > Err codemadness.org 70 i 6840 <a Err codemadness.org 70 i 6841 class="gatsby-resp-image-link" Err codemadness.org 70 i 6842 href="/static/db4c390ca72be4e62a92aa1bda53b54d/779ef/orange.png" Err codemadness.org 70 i 6843 style="display: block" Err codemadness.org 70 i 6844 target="_blank" Err codemadness.org 70 i 6845 rel="noopener" Err codemadness.org 70 i 6846 > Err codemadness.org 70 i 6847 <span Err codemadness.org 70 i 6848 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 6849 style="padding-bottom: 194.47852760736194%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAnCAYAAAAPZ2gOAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGyklEQVRIx32We2wURRzHp62g/qMmKkJb6d0VS5WHpa1QbSupSnxA0EiUUo1GDdpSwB6F61GMRl5R8YF6LQYhJoghJGq0idGgJggaoKgQpC3hWYXW2mtt7+jt9nb39uf3Nzt7PYp6yTfz2JnPfH8zv509YXYUphvtRYLoBvH7/gpW+tm996ZFj5aMNdFvdhRVWu2FD8UvFAt92+Qx3cuzM84vzUr7Y2mWoNaHxO+1WaLPf7NI/qyOIsFA7djMdCFIQtv2PCAiR0oEgLMBI0Cb6evpIlKVJbqWZYv2xePFn8uz0zuXZKadrckUfwCKRZLAmUZb8VXx48WCOqcycP25fffs/vvwXbVWW+Hf5okiMn8u6I6u8nzY75/4xoVl2U90LB6fyYCTL0wQ55ZkZnQ4CzhQs73wCJz02idmbA0fKtve+UMFde6toO6Ds8k6XUzWySLLPF5I+sZcGlrhIYAp7J84AFcfnK6eMAEScJnhyxASysDNAFKio5Cix0ro3IH7zLOH5pgX9pRb8S+mJMyDBWSdKU4M77jVjPlzDC3otfQGL0VW5hDc9p2ryZx7SkH3VV0vQ55rthXCTVHc2H+72bdtBvXsnkmR9ZNtrS7Hjq32kv7mJFt/+xY7BnexBq8dC3gSgBoX0QaUEPaCM4BiTzME9ucGOOhlJ9orvoRWN9HW63NIWwlY0EuYTLF6R1qDbNuaAyVAzSicIvw4TnsKwELooTxhfD/9O21DLsX8HktCGhxpDQ7EFUMugwa9BvaUXX579JlxQuCBB6EMcjjuIBc2FPBKxQL/2rZd8BC2ACdMCLmCgXXKgakGyMk8yQh6yAx6LmvHRkE59J4Xb2aXzQIdu1KB7uBhQM4s99HxJbkSyO2TS33UUZsr6+44BbT6V8iwWwH07tfkal7LCdlLcbjo9vto0yOT6dV5+dQOSFedjzbOz6cN0AmA2enQCNAexEHiYHQO+ScV5iXAnhVeeu/RyRJyapmPevxeegsL8CLs3BgB8mkTgDaAxMDP3ZBT94+hXXB5FpN1Dhnt83DZ+aJP1lNCZmBiAA5xKF0M3KJSwUDotnuiLtRImZzalotzRjhAdw9/YeDLmrOSGWsYORQXOpImKslT66pELlp9Ti7u5VNerEK23DyU7aAvBeJICyL5Azl4a7JSn8m0CdfJtGlhh3PVg4Sbh7Ltv4liK7MvfVPqbiStMY/iO2sV3HHJwL+cPNzJwBlqgnqd8B433kLDzY+Rtu4Ox5Fyp781h+Itr5L+7jy4zMQcn+vQUIndJLBCFkDDKVC52fr7D1N8dz3FPw06+my144wXgXsFS4aMu5BPeaPA5Ouw0efdsP89ZN9IH+9f0Jd6KGzC7F4mgQF2OAYdv7gHk3yfRx3KSJ8v9dZxgdYFB/g87yFDv0lJbnv0dTW6PqqPx8vbBm/KQk4bBu5QA8zRk/5PLjCmri9ctPdjD73sclMK0L5sovtW8GRH7qdAZgY+BTZgBGgJ3zbssE5NNDXOR4QwajK3nds8mOzj/eaXwcKXUF4M2Md8uYfQQm3EhSzxTSGdVZ+T0Pg2h3T/xISOdxayk2Mh/q7gD4CN1MlygeXK4TAGhuGiK7I2LzG4Id8eeOM2iq7Na4uuy2vtC02n8JbbE+HtMyi6Pm+TviLnaYythNMH4XIWQr/CBV6J0CfFXvJl6/NuvOZiS8HU6M+zopFfS+zIkTsp0nbX8oEz5QsGj5fSQFupwWW/OSfn4rYpQn8uS+CbIvCdFgDyR8qj5BXG4+PEwK4C8Vf77Ozew2XR3tYyu/dQGYUPlQbCB0qf6j1YRpCJfxjU9+OdBd1DD4rI1qljhlZ50nF9sYRMGy0ggWkXP5mWEem6W8CdB3+WIhAclhBUHz1SUqXqpiqn8h8qKF2M/jWtqRGhxmoRbi1L6ztcKnoOlHvDraVRyIYIfaugJ7kOGVz2HCyf3o+xqKfzfFYSppTW0rRoLBH+1PXcNj7228yBoWOzSKkeqlJ1k0s6P20S0Tjx1QcLx4bWVKcloeysqbFGdrzbsERsW7tY7Hjt2Xu/aKqili2LTIhLP7RI1eNfNlfRx68/s/Cj9c+JzQ21IqQMASwduvRrQ4019U1rqjeh7N4cqCXIUKX/nUBtZWofxgxi7GaUqwEcz1Aojd05WlOzBwN4IHHZ/FJ1ArIgrvuhSlU3ITt1LOYeRaRXc7SAVXPY+eqBoZSAuG3iOU/yo17JfSHuc57ZeMZjh2W7sabC2UMn3OsB7Q/JyUmYA5TlCDDZJ93xWMxprMbCNblwLPfQPfb52NQhd/UQO/hvoK3kRNVY/WyTs4fp/wBMhQDTMEHZ6QAAAABJRU5ErkJggg=='); background-size: cover; display: block;" Err codemadness.org 70 i 6850 ></span> Err codemadness.org 70 i 6851 <img Err codemadness.org 70 i 6852 class="gatsby-resp-image-image" Err codemadness.org 70 i 6853 alt="Olive" Err codemadness.org 70 i 6854 title="Olive" Err codemadness.org 70 i 6855 src="/static/db4c390ca72be4e62a92aa1bda53b54d/779ef/orange.png" Err codemadness.org 70 i 6856 srcset="/static/db4c390ca72be4e62a92aa1bda53b54d/222b7/orange.png 163w, Err codemadness.org 70 i 6857 /static/db4c390ca72be4e62a92aa1bda53b54d/779ef/orange.png 204w" Err codemadness.org 70 i 6858 sizes="(max-width: 204px) 100vw, 204px" Err codemadness.org 70 i 6859 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 6860 loading="lazy" Err codemadness.org 70 i 6861 /> Err codemadness.org 70 i 6862 </a> Err codemadness.org 70 i 6863 </span></p> Err codemadness.org 70 i 6864 <p>Olive is the young Captain of the knerds. This mission was her first ever. Olive is brave and bold, and loves to explore, but she’s still young and inexperienced. She’s determined to make the most of their mission!</p> Err codemadness.org 70 i 6865 <h4>Mr. Figg</h4> Err codemadness.org 70 i 6866 <p><span Err codemadness.org 70 i 6867 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 6868 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 183px; " Err codemadness.org 70 i 6869 > Err codemadness.org 70 i 6870 <a Err codemadness.org 70 i 6871 class="gatsby-resp-image-link" Err codemadness.org 70 i 6872 href="/static/ead2b49e58be920cb5122cdaf1a7647c/e6f05/green.png" Err codemadness.org 70 i 6873 style="display: block" Err codemadness.org 70 i 6874 target="_blank" Err codemadness.org 70 i 6875 rel="noopener" Err codemadness.org 70 i 6876 > Err codemadness.org 70 i 6877 <span Err codemadness.org 70 i 6878 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 6879 style="padding-bottom: 266.25766871165644%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAA1CAYAAABBecueAAAACXBIWXMAAAsTAAALEwEAmpwYAAAG0klEQVRYw+1WWVAUVxRtGfXbSlWq4l8sozHummEZGNmmZ3pQY6pccMFhc2EUV4jAqKAoAUVFowaRfdSI+4qoqGgBiooLUYkmajSRqBjXMoqyzM15r3tgMAikKlX5carOnNv33Xvufa/7dT8h6YFxR9JDowUwJz40xoFHAUNh68AuGP8U6Ap8hOtO8AtJDpCvJfn6gVEQEu9L+4EVwBJgV+IDKQFIBDYCmcASYAGwDklRYDMSA2BPgZgWtjrxodQb3BO+zkLyU7/tK577LQK+Wf7EL3v5Y2PUsmojE1iNAmuBuG/vS7Fgq1I4USm6F1gKJANJwB4I9hJmH/esnHvK6+C8Mh/rwmu6g7HXxVVL7hoSlj0yrk5+4rdqxTO/6JUv/CJRMBWIQwMWFI1JqjZugkAMhBYps9sH9BYCs9woMFtGUI4bhWzSvAndonkyeZv7o6m7PG5P26+9OKNgyLHIEu/ieWd98iyXfdPjUDShSsqD4HyIL0x+5rcAhbdhhl8IwbmaBgfYmCgHK5L1DuBjMcFWXvTVpK3u96fu9LgxbZ/2EmZ6Leqsz+cCD5CFbHZbQUMLaFbQDl4s040mbnTtyQSpDdiL0TsF7UXrFbsWnbdLsD0FGdcB/40g46CcD4LKwlLjY+GANvzKo9RCh3ynWDVstzTBqrHvoGYItjY20XqHEza4kP93avJfp+Y8PtWZ+8etdyb/tWoZ8AdsdGm9Q+actMWddFF9qO+YbjQwoDv1Gd2NPMJ78W5cJvegvv6KH+PGuP4UivhWBVmA3tKPBps+I9cpPcl5Ug/SRffl0/aa2xuiPbl/kKk7DY0fQKGb2xBkbGJ7Ml3enwiikFx37mfMrpnfPt7mlLlgjjOgponZajJlO9PELGbbWfax8cCcNtYwJNeDxqb3p+3l66mwcjuduL6b9lVkUcnNfNp7OYNO/byPCq5uoUNXN1PJL/mUXhxP4zIGsM5bvsuhVi2NTOtFV6rK6PFfD+nF6yd0+89Kqq1/Szerr9Crty/p/vO79MezO9xX+NMOGp3Wm+W1LMjWaELmYEo5FkEbixdTRskSWlcUQ9mnk2htUTRlliZQ6qlYYCH3JRSEUUDWYOS+p8MQqwf5p/ej/RXZVHqrgMp+LaSjldvo0u/FdORaHpXfLeLTPgkwX+6Z5XyJkPf+Dtma/HBuNV+nI9e20q6LaXTixm7aeSGVT5EVYzhxYw9tQLetrqH9Lo/PHEhjM/rz6ixhLLoelzGw8ZqBzYQtT/v2MjrlwBKEWN353Zd9Hk1jsIP5c+nW+uvL8S0iP9iOb5p/vrraFGwMxJcsbI8HtpaGf83Y1mP72S7CdpPj66tNQSYSc8mHYq/7Ej74FLChabuF4tUVnq/lr7B/1eH8H30o+ZmBIk/70FCLKw2PdaUZ+UNo6V0dLbqla/+U7S/T+DsiJVbrKbzAk/yiZcEFV3W0/KmBdx8knyLaIYhAHDEoosSLcLbhBSZ8D6S60eyjQyjpgd4Wdd6bTBmNJ4165YP/BughtHDX7Atvw5rZ5F2EBMCEdQw/oLXNODyErXND81wgV9NL4A9mrlvjsQLXddxuuqu2xsNTtpvNlOHKiynFX4PvgM8BmyD4sf301fxLJh+AGsD2M00V3ub3wnZpafp+z7pZh70p/KBn/KgVX34yeat7FzTEdNCcRuBTDpLPJY+BCojkhe3UVsw85EVzCr3rI0/6MvaKPi2Gx5SJBNQwnn9eP2b2UW8hn0I6BOdoOiDXiYkywRHBuW79wF1mFnh1mlXgJSA4kSefEd9GnxHJclY/CIJhUaU6Amo4l+iCLOf0QsQJn05yd3KX/C8YF8yx+KrRaX65XkDwGiW5VmFnwMxsCNcobAIEoKPg+IOgCi074SZ0iCjyVbEgJKSAuSBjQM0EFbtG4ZYF7T9lUKVwipL0QfD/FIwqYXdXVAGMUwDcZbFWYQiKZsWu4VwimpTYjkZJai7GHNM3iYLlgs4ptlInRJfhsSnDs1aGx0ZmNWBW7BrGMWU604IKnWAp16mMBoPA0Cgm4aKzMEwIWanvNDVNL0QeE9dEHhcJeKuwM2BW7NeMI46KwdOsojB5nb4zE2MavFP2J8OgMoiSYPCVug/72lA6fJSBho801AM0fLTBGWzm9khDLRsb+pUhX/SUuiKe5aveFVRBEFUkF3ChpJeqIF4viVIDQLDVYDOzgXo+ppfuIfYAcvo2aciCKqVDLXAcAVVgUtCgsBowK3adfRyxv4EPIn+QUe5QJShGoCRJSJZeonXGSJBsDrYacWbFruNjsl0PvMLYG8SOkJQO5yiBjmBirQmSgyg6RccMkhTyNw1MVvcLqFDtAAAAAElFTkSuQmCC'); background-size: cover; display: block;" Err codemadness.org 70 i 6880 ></span> Err codemadness.org 70 i 6881 <img Err codemadness.org 70 i 6882 class="gatsby-resp-image-image" Err codemadness.org 70 i 6883 alt="Mr Figg" Err codemadness.org 70 i 6884 title="Mr Figg" Err codemadness.org 70 i 6885 src="/static/ead2b49e58be920cb5122cdaf1a7647c/e6f05/green.png" Err codemadness.org 70 i 6886 srcset="/static/ead2b49e58be920cb5122cdaf1a7647c/222b7/green.png 163w, Err codemadness.org 70 i 6887 /static/ead2b49e58be920cb5122cdaf1a7647c/e6f05/green.png 183w" Err codemadness.org 70 i 6888 sizes="(max-width: 183px) 100vw, 183px" Err codemadness.org 70 i 6889 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 6890 loading="lazy" Err codemadness.org 70 i 6891 /> Err codemadness.org 70 i 6892 </a> Err codemadness.org 70 i 6893 </span></p> Err codemadness.org 70 i 6894 <p>Mr. Figg is Head of Security. He’s responsible for protecting the Knerds from trouble, but somehow Isaak always seems to find a way to make it anyway. Mr. Figg has a tough exterior, but also a heart of gold.</p> Err codemadness.org 70 i 6895 <h4>K.A.M.</h4> Err codemadness.org 70 i 6896 <p><span Err codemadness.org 70 i 6897 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 6898 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 286px; " Err codemadness.org 70 i 6899 > Err codemadness.org 70 i 6900 <a Err codemadness.org 70 i 6901 class="gatsby-resp-image-link" Err codemadness.org 70 i 6902 href="/static/a193634d682ab8bccc256ac4db3f4075/357e3/red.png" Err codemadness.org 70 i 6903 style="display: block" Err codemadness.org 70 i 6904 target="_blank" Err codemadness.org 70 i 6905 rel="noopener" Err codemadness.org 70 i 6906 > Err codemadness.org 70 i 6907 <span Err codemadness.org 70 i 6908 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 6909 style="padding-bottom: 147.8527607361963%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGOElEQVRIx51WaUxUVxS+zkD90R/9Z2MiMsCMyAyryszbBiugUosCg0g11GiNW9VqRaSoNdbW1qjQikqqSRvb1JhGjWnSJlrjguBaN0RlFlxocV+KwMwgM/NOv/vmYerPepMv57zzzv3uOeeee99j7DXHVmkUc8u2QTdkG2uVbRboT7yK9dfXIisWBDZLdLCHSoqxSxnJOpWUaXcUK3lkm/q/yUpEUYfAFor2mAWinc0X7eN3S5nP7ikpM15xPitlsiZxlIbTUhZrFrM0ye2nIE/h+RdxNJsKMhAaSyGhDykSxC5FkNfUoQzaOK07n9YJMNkIGPbbHewMns+BkMtjIPsT7zaJ2TFlIHOJQmyxIF4COc0V7cOYPZ+xa3KqFtFxzTnDQOPe1iby5z0OhaHob1yV0968IqXFnIDtIogbsfA4QUQtxX0AAT8CPGqDRhjOiePSeB6R0Ng4TpaHReqBc8Bd4FGzOKoDUR8DvghI6clIs5ZHpiO/JFoGA8PK2PY0w3UQI7UxF6SMxktSOl2W0+kKcBk6bISUCcR0FkDKofcQGWpIIL6wXrQb52LXeW15LxkAhi2f2YZthySfYo0A/UBY1yPwiSD1MDao/yvRzqPq56QzRWHdIpAtEx2x+1ESTsThQlOSjn6PTqxLTYdd9em9dl1KVw+KoyOrQfw7SuKTMpM9KBe6wsDJhsL5qUfhBNYQl17FpnqVVEDTgVQNHk1Gba0oB9IPNaMUqGvjUXEMY/kRxvBykzdK1q85O1NVj5AMjKA2u4XcDgtFdTP0EZrukVJUr9OmnkdtUdfQKU4qZhXx1mMexdoKMr5qGFJ12y1qe4FA7YVO+rs0jzpKcqEr1Fk2nm4XjaX2yU7yjk0nj8OitiFikITQATzKvZCIULZ2D0Tmzk5SHzfUUiQYJAoG6GbLFbrf7iMV+o1zZ+n5vbtE/f3Ud9NLt8oLyAvSC3JWuClKeBkbFsui9bJpafjyRquhJ4+JDxWYPaWINq9dS909PTQhI4N+O3CABsbjXVvJnRGntjgzIzqhD631Fif0v4zQblaf7d0dnaFG6GJzE/muXSM1HKamw4foUWen9ir09AndmT2VvMjompI+EOHVM1LmYBBa3XoNIzxKjjsVU6jjwzJ6+FEF3Z8/nTpmuejx4pnUObecOuZMo5uoKa+1D9m1yqkhnfBgM78cQNTwyi7DidfSw3cVC3Eg+qguJJN7TCJpXYCMfLC1yGkaIS6VCm2XEaEFvRjUmzoyQOrLzaLb0wp0TKTb779L7ZMketla0RMVwvnnrdOCUxaDlDVCjgX6yYjwE8EJeQtpPSeMiEoHpDSSou+ixxPnn7dNGOk6+I3Frzx2Kz/FcGt8CmsfZ93Ao3SLtjAkYAvxuvIGBkiTvM44TTwT+BGiCzbJowpPyhqZUevD54sTjS8+i2fhL4eLT+cl0c38lJB+dkmPmv5znqN2CREWWunhQkvTkTHZ7FCq3UC1Q9lRMZuxYI3JALDeFQn5kOSvSqBOV/J3bQ7bT16n9b4vB5dCDt8Yax/IfG6Hrf7JHLM7UG2ivhoT+iqW0fo4FvjUpN32zL8ywQBwmQsQd0S0ec/mJbGuRUlJ3UsTH3R/nEjPlyRup2+GsfvlI1jfatORwEosvjKhsacygfVWafOj3xN/NQirE7jMBYgDDq7gGhMLrjYNC9Qk3AUoUGPa1LM8kdGWOD65Ufdt1Odq0Eag0mQAuMwFSEdxYIWJ+ZebhkO/p9tqgyvjWV9VPPc9odtOBivjGYcfHNoI1ycZQvVJ7J/N5jz/Nxby11moa7O5pO/bJPZoozm+t87Sye3dteZaakCEPySynjrLcW7rqTM30pV4Rvss7MHXlihh3ZIy49Zl5WzP57OlHZXTaEdlOf28btbEhqoZ7PC2xUMaVpT/tX15GX2/6oMNGxe42KqKSWxn9fQ/tn1SRruqZxyZU+BkCwtzBjXuXKr9ALDpk7ewikkLmEty7p7sUGiKw0mlcs7u8ncmslJZWVYkOKnQrpBLHnu1RMgYjG+xvVh09hZmy1Qi5XSVyvLoqYrCXLJi0Aj1XwsB/yv8wxMpER0U1cUJkO36Z/IFtxWL4iz+LS6BDuJAsaD57uf/OoCRc/0LN5sijCAwUhMAAAAASUVORK5CYII='); background-size: cover; display: block;" Err codemadness.org 70 i 6910 ></span> Err codemadness.org 70 i 6911 <img Err codemadness.org 70 i 6912 class="gatsby-resp-image-image" Err codemadness.org 70 i 6913 alt="K.A.M." Err codemadness.org 70 i 6914 title="K.A.M." Err codemadness.org 70 i 6915 src="/static/a193634d682ab8bccc256ac4db3f4075/357e3/red.png" Err codemadness.org 70 i 6916 srcset="/static/a193634d682ab8bccc256ac4db3f4075/222b7/red.png 163w, Err codemadness.org 70 i 6917 /static/a193634d682ab8bccc256ac4db3f4075/357e3/red.png 286w" Err codemadness.org 70 i 6918 sizes="(max-width: 286px) 100vw, 286px" Err codemadness.org 70 i 6919 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 6920 loading="lazy" Err codemadness.org 70 i 6921 /> Err codemadness.org 70 i 6922 </a> Err codemadness.org 70 i 6923 </span></p> Err codemadness.org 70 i 6924 <p>K.A.M. is the Communications Officer. She’s part robot (we think). Her suction cup legs can rotate around her body, so she can easily climb and stick to any surface. She also can upgrade her legs to new components, like helicopter drone blades so she can fly, but she lost her repair/upgrade kit during the crash.</p> Err codemadness.org 70 i 6925 <h4>Isaak</h4> Err codemadness.org 70 i 6926 <p><span Err codemadness.org 70 i 6927 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 6928 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 274px; " Err codemadness.org 70 i 6929 > Err codemadness.org 70 i 6930 <a Err codemadness.org 70 i 6931 class="gatsby-resp-image-link" Err codemadness.org 70 i 6932 href="/static/1c1349d98a8db2c7dae669ffefc15804/d3fa7/blue.png" Err codemadness.org 70 i 6933 style="display: block" Err codemadness.org 70 i 6934 target="_blank" Err codemadness.org 70 i 6935 rel="noopener" Err codemadness.org 70 i 6936 > Err codemadness.org 70 i 6937 <span Err codemadness.org 70 i 6938 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 6939 style="padding-bottom: 136.1963190184049%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAbCAYAAAB836/YAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEV0lEQVRIx41UW0xcVRQ9w5Ca1hg/TIxflQhU8M4lmGjVmhhjosYhNSbGmDamAxo1aab1txqFmhQEnEGoYwbD6w5QaBMJsdpyL6/SYqQRBdp+SKx2khaoPGQkkPKYmbtd53FhUFQmWdl7zt17nbXP3ucwtsXPY1hMi5jME7HcALeHgVeU76yxbf9EgmG6PJL0HmABm1zRDJNxyO/WdslMhXUlFQBhA4J9mxNtWyUP4KVqhpWm8bIN62GsrQpCiQkQ3qsUuv6X1GOsq0tTSWc0qSyuwP0ysbFhupXa/zg3SeJWpM/JUq0kVNvwbVX2MpCl4tM8spJ/JxQHL0q3hgRBU1dCWOnHucW3dm1Tx83NZJpDFjHd0lo+kdjcHddOXbDx34ZvKz+pSJ/hRE7OptJViS7ZCPNuJES1SDd56r9J6pX1UHbe9tSdtfXKBu4nNNn1QXGGYmZTCNdL3RiF4yiNtLaBNf2Dcsp/aq+tl4VJP1ZKj+57wtY/qSXtVD9KR0zEfOMfw556uNg1A2qXREktvUn9ZJudf/R9O6+2g/TqFtKPHLO1cAd5mnuSqvs3gF2Kw8WnhDmDKufPjPBAlI4RMWmP0W1nRHoos8mkbANltg1QfmuvrcjW5BiZxerI0iUhDlXeW3MfDwCZGJGcpi7b23GJPhy8SqHR69R5fYKuzcToSN+I/VD9OTuPNyciiBeB3ZpsUJqUKiUPCEI1wLmGaT/d3k/7OwfpJRC/CLzw1UV6rLWHHjHEXFLKsDeq8XE7Z3hAfUhwdZpKgErKbDhPWUB2o0SuLJdkjIQ6gifFPKoO/Szlmyt8VwTw84nrmL285m7SsVFes5UUfrPYkA+4cx2XlRhLddn8VO1If7fZ9ecoq+7bZC6U5kAd9/dAbWrMhi9I3+GdRZesahAHYINAFQgqH2/vq3v9wpXEgYtX6fmzQ30FXcNjBy9do1d7R6ahshp5TnyQi8LZh2DfY85ddAZzd/hr9rI5zMaJ7gvNLq2EZpaoYWH1rdr5OzWhmUX6YnbpR/ZuDdt7up+hgo0HVz7KTA01f4rEnXTvN4fTbxCx0ujvmcGpP1cACkzEjgYmY7XcD07Gxvwj4zvZaydcz3Z+ly564OTjlXeuHXOe94qbs67PbsdY1dRcRhUIq6YWCNYPhJU/Gpi4vePz6Vl2Ijq9/jpt+dgWFL7JghNzLoAFbk1nVE3GVgAC/EBY+vOjFb9Gd1RGb7LgrVmRs+WPf+BoIHK1ouTqmYWMk38sL9fMLROsHwgLf37lp/JffruLENMO8BxvYdFWZEXC+ioC6YcbW9jxH8YeLP5+JF4yNEYlQ6N+IFxyeYw+GhweP03kPlRazg4Wf5zmCPE6Sp0FBbeyu7y+okZgFSDAD9QqfxEo8x4qdHIkqS+V0LfxAcEPwJ6BvQO7BghC2C+5r9ZiWAvB7izwicpcBYWbCV1eSZoDRLkS2CSQUCSphHHAVjGXgfu9ipTz/QWRPcxojvYdUQAAAABJRU5ErkJggg=='); background-size: cover; display: block;" Err codemadness.org 70 i 6940 ></span> Err codemadness.org 70 i 6941 <img Err codemadness.org 70 i 6942 class="gatsby-resp-image-image" Err codemadness.org 70 i 6943 alt="Isaak" Err codemadness.org 70 i 6944 title="Isaak" Err codemadness.org 70 i 6945 src="/static/1c1349d98a8db2c7dae669ffefc15804/d3fa7/blue.png" Err codemadness.org 70 i 6946 srcset="/static/1c1349d98a8db2c7dae669ffefc15804/222b7/blue.png 163w, Err codemadness.org 70 i 6947 /static/1c1349d98a8db2c7dae669ffefc15804/d3fa7/blue.png 274w" Err codemadness.org 70 i 6948 sizes="(max-width: 274px) 100vw, 274px" Err codemadness.org 70 i 6949 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 6950 loading="lazy" Err codemadness.org 70 i 6951 /> Err codemadness.org 70 i 6952 </a> Err codemadness.org 70 i 6953 </span></p> Err codemadness.org 70 i 6954 <p>Isaak is Olive’s younger brother. He snuck onto the ship before takeoff because he didn’t want to miss out on the adventure! Isaak is always getting into trouble, which is easy because he’s so tiny, but his misadventures often lead the knerds to important new discoveries.</p> Err codemadness.org 70 i 6955 <h3>The continuing adventure</h3> Err codemadness.org 70 i 6956 <p>I think that the story of the knerds could be the basis for a great game for kids to learn maths (see, I’m living in Europe now) and vocab content on their phones, following along with the mission of the knerds as they relearn their skills and try to salvage their mission in time.</p> Err codemadness.org 70 i 6957 <p>As validation, I showed the knerds to my eight-year-old cousin Avery over the weekend, and she came up with even more superpowers for them. Apparently, Isaak can turn into a tiny paper football. And Mr. Figg can grow his hair really really long. And Olive is actually a popsicle and she can melt and surf along her melted self and then regenerate.</p> Err codemadness.org 70 i 6958 <p>Avery convinced me that helping the knerds solve puzzles would be a fun game for kids. She even started to memorize the names of the Knewton employees after repeatedly playing the app. Err codemadness.org 70 i 6959 Oh, and Avery invented bad guys for the knerds! I asked her to draw them:</p> Err codemadness.org 70 i 6960 <h4>Binky</h4> Err codemadness.org 70 i 6961 <p><span Err codemadness.org 70 i 6962 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 6963 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 400px; " Err codemadness.org 70 i 6964 > Err codemadness.org 70 i 6965 <a Err codemadness.org 70 i 6966 class="gatsby-resp-image-link" Err codemadness.org 70 i 6967 href="/static/99feb273a3b28529e803a9643815a07f/066f9/binky4.jpg" Err codemadness.org 70 i 6968 style="display: block" Err codemadness.org 70 i 6969 target="_blank" Err codemadness.org 70 i 6970 rel="noopener" Err codemadness.org 70 i 6971 > Err codemadness.org 70 i 6972 <span Err codemadness.org 70 i 6973 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 6974 style="padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGAABAAMBAAAAAAAAAAAAAAAAAAMEBQL/xAAWAQEBAQAAAAAAAAAAAAAAAAACAQP/2gAMAwEAAhADEAAAAe7edbzeGnWS3BHMBf8A/8QAHBAAAgICAwAAAAAAAAAAAAAAAQMCEQAyBBIi/9oACAEBAAEFAuJpIipbJPihTlnujSGPJLf/xAAWEQEBAQAAAAAAAAAAAAAAAAAAARH/2gAIAQMBAT8BrVR//8QAFxEAAwEAAAAAAAAAAAAAAAAAAAEQEf/aAAgBAgEBPwFGCn//xAAaEAACAgMAAAAAAAAAAAAAAAAAARBxAiFB/9oACAEBAAY/AncMdxro7jI//8QAGxABAAMAAwEAAAAAAAAAAAAAAQARIRAxYXH/2gAIAQEAAT8hXwjEJUP1lREYKZvnBfAadlpPTRP/2gAMAwEAAgADAAAAEAw3gf/EABYRAQEBAAAAAAAAAAAAAAAAAAEAMf/aAAgBAwEBPxB7AtNgv//EABYRAQEBAAAAAAAAAAAAAAAAAAEAMf/aAAgBAgEBPxA4zME7f//EAB0QAQACAgIDAAAAAAAAAAAAAAEAETFBIbFhgcH/2gAIAQEAAT8Q4PT4IMKZwQ2zHcx3VWh1oiI2O+YR3Qe++om3y6IDjDUHlqqHAT//2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 6975 ></span> Err codemadness.org 70 i 6976 <img Err codemadness.org 70 i 6977 class="gatsby-resp-image-image" Err codemadness.org 70 i 6978 alt="Binky" Err codemadness.org 70 i 6979 title="Binky" Err codemadness.org 70 i 6980 src="/static/99feb273a3b28529e803a9643815a07f/066f9/binky4.jpg" Err codemadness.org 70 i 6981 srcset="/static/99feb273a3b28529e803a9643815a07f/d2f63/binky4.jpg 163w, Err codemadness.org 70 i 6982 /static/99feb273a3b28529e803a9643815a07f/c989d/binky4.jpg 325w, Err codemadness.org 70 i 6983 /static/99feb273a3b28529e803a9643815a07f/066f9/binky4.jpg 400w" Err codemadness.org 70 i 6984 sizes="(max-width: 400px) 100vw, 400px" Err codemadness.org 70 i 6985 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 6986 loading="lazy" Err codemadness.org 70 i 6987 /> Err codemadness.org 70 i 6988 </a> Err codemadness.org 70 i 6989 </span></p> Err codemadness.org 70 i 6990 <h4>Chill Factor</h4> Err codemadness.org 70 i 6991 <p><span Err codemadness.org 70 i 6992 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 6993 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 400px; " Err codemadness.org 70 i 6994 > Err codemadness.org 70 i 6995 <a Err codemadness.org 70 i 6996 class="gatsby-resp-image-link" Err codemadness.org 70 i 6997 href="/static/1d625bcc3a8051394ccd7f5ab0d9ab1f/066f9/chillfactor4.jpg" Err codemadness.org 70 i 6998 style="display: block" Err codemadness.org 70 i 6999 target="_blank" Err codemadness.org 70 i 7000 rel="noopener" Err codemadness.org 70 i 7001 > Err codemadness.org 70 i 7002 <span Err codemadness.org 70 i 7003 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 7004 style="padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAUEAQL/xAAWAQEBAQAAAAAAAAAAAAAAAAACAwD/2gAMAwEAAhADEAAAAfeyZsm4TjbXSHOKBT//xAAdEAACAQQDAAAAAAAAAAAAAAACEQEABCExAxIy/9oACAEBAAEFArTRLpXAShKCwVv6DR5P/8QAFhEBAQEAAAAAAAAAAAAAAAAAEAEC/9oACAEDAQE/AdFP/8QAFREBAQAAAAAAAAAAAAAAAAAAARD/2gAIAQIBAT8BIT//xAAZEAADAQEBAAAAAAAAAAAAAAAAAQIQEXH/2gAIAQEABj8CraWNFHSvT//EAB0QAQACAgIDAAAAAAAAAAAAAAEAIRExEFFhgaH/2gAIAQEAAT8h+qNIr1xjrdQABeWHwyy0aLoS6dsf/9oADAMBAAIAAwAAABAo58P/xAAYEQEBAQEBAAAAAAAAAAAAAAABADERIf/aAAgBAwEBPxBet0tsZf/EABcRAAMBAAAAAAAAAAAAAAAAAAABMRH/2gAIAQIBAT8QWGEodP/EAB4QAQACAgIDAQAAAAAAAAAAAAEAESExQVFhcaGx/9oACAEBAAE/EMxK148QSudlLErtnMkrXuJYq5t7l+cb7Fk9H6wlIKiXrUWFKFn/2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 7005 ></span> Err codemadness.org 70 i 7006 <img Err codemadness.org 70 i 7007 class="gatsby-resp-image-image" Err codemadness.org 70 i 7008 alt="Chill Factor" Err codemadness.org 70 i 7009 title="Chill Factor" Err codemadness.org 70 i 7010 src="/static/1d625bcc3a8051394ccd7f5ab0d9ab1f/066f9/chillfactor4.jpg" Err codemadness.org 70 i 7011 srcset="/static/1d625bcc3a8051394ccd7f5ab0d9ab1f/d2f63/chillfactor4.jpg 163w, Err codemadness.org 70 i 7012 /static/1d625bcc3a8051394ccd7f5ab0d9ab1f/c989d/chillfactor4.jpg 325w, Err codemadness.org 70 i 7013 /static/1d625bcc3a8051394ccd7f5ab0d9ab1f/066f9/chillfactor4.jpg 400w" Err codemadness.org 70 i 7014 sizes="(max-width: 400px) 100vw, 400px" Err codemadness.org 70 i 7015 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 7016 loading="lazy" Err codemadness.org 70 i 7017 /> Err codemadness.org 70 i 7018 </a> Err codemadness.org 70 i 7019 </span></p> Err codemadness.org 70 i 7020 <h4>Bill</h4> Err codemadness.org 70 i 7021 <p><span Err codemadness.org 70 i 7022 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 7023 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 400px; " Err codemadness.org 70 i 7024 > Err codemadness.org 70 i 7025 <a Err codemadness.org 70 i 7026 class="gatsby-resp-image-link" Err codemadness.org 70 i 7027 href="/static/c1ce1b5e15af0c710bbe8779aef91b76/066f9/bill3.jpg" Err codemadness.org 70 i 7028 style="display: block" Err codemadness.org 70 i 7029 target="_blank" Err codemadness.org 70 i 7030 rel="noopener" Err codemadness.org 70 i 7031 > Err codemadness.org 70 i 7032 <span Err codemadness.org 70 i 7033 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 7034 style="padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAUEAQL/xAAVAQEBAAAAAAAAAAAAAAAAAAACAP/aAAwDAQACEAMQAAAB90JukOA6qhpGJAD/AP/EABsQAAEFAQEAAAAAAAAAAAAAAAEAAgMEERIh/9oACAEBAAEFAqi8AVY4G4Q8Y+JNUh6k/8QAGBEAAgMAAAAAAAAAAAAAAAAAAAECEDH/2gAIAQMBAT8BdS0R/8QAFxEAAwEAAAAAAAAAAAAAAAAAAQIQMf/aAAgBAgEBPwERcn//xAAYEAADAQEAAAAAAAAAAAAAAAAAAQIQUf/aAAgBAQAGPwKtsY0XlN9P/8QAGxABAQADAAMAAAAAAAAAAAAAAQAhMWFxgZH/2gAIAQEAAT8h18iFJqcrfHQUXNy5tvSeZuIX/9oADAMBAAIAAwAAABCQ6D7/xAAYEQADAQEAAAAAAAAAAAAAAAAAATERIf/aAAgBAwEBPxB+4JlyEf/EABcRAAMBAAAAAAAAAAAAAAAAAAABETH/2gAIAQIBAT8QSqkMR6f/xAAdEAEAAgIDAQEAAAAAAAAAAAABABEhMUGhsVFx/9oACAEBAAE/EFZmjwgdql0RWF5hMd6dzIF5Jjly1+RoHAjqWVolRl2w+GDyf//Z'); background-size: cover; display: block;" Err codemadness.org 70 i 7035 ></span> Err codemadness.org 70 i 7036 <img Err codemadness.org 70 i 7037 class="gatsby-resp-image-image" Err codemadness.org 70 i 7038 alt="Bill" Err codemadness.org 70 i 7039 title="Bill" Err codemadness.org 70 i 7040 src="/static/c1ce1b5e15af0c710bbe8779aef91b76/066f9/bill3.jpg" Err codemadness.org 70 i 7041 srcset="/static/c1ce1b5e15af0c710bbe8779aef91b76/d2f63/bill3.jpg 163w, Err codemadness.org 70 i 7042 /static/c1ce1b5e15af0c710bbe8779aef91b76/c989d/bill3.jpg 325w, Err codemadness.org 70 i 7043 /static/c1ce1b5e15af0c710bbe8779aef91b76/066f9/bill3.jpg 400w" Err codemadness.org 70 i 7044 sizes="(max-width: 400px) 100vw, 400px" Err codemadness.org 70 i 7045 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 7046 loading="lazy" Err codemadness.org 70 i 7047 /> Err codemadness.org 70 i 7048 </a> Err codemadness.org 70 i 7049 </span></p> Err codemadness.org 70 i 7050 <p>It looks like the knerds will need all the help they can get — will you help them?</p><![CDATA[Terminal Man - Live in Concert]]>https://www.charlieharrington.com/terminal-man-live-in-nychttps://www.charlieharrington.com/terminal-man-live-in-nycTue, 07 Apr 2015 00:00:00 GMT<p>Last week, streaming live from London, <strong>TERMINAL MAN</strong> performed its first show ever, appearing live in New York City at the Knewton Talent Show. This may have been the first musical performance for a Double Robotics robot ever, but I certainly hope it's not the last.</p> Err codemadness.org 70 i 7051 <p>What follows may shock you:</p> Err codemadness.org 70 i 7052 <iframe src="https://player.vimeo.com/video/124292973" width="640" height="1138" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe> Err codemadness.org 70 i 7053 <h3>Here's how I brought TERMINAL MAN to life.</h3> Err codemadness.org 70 i 7054 <h4>The music</h4> Err codemadness.org 70 i 7055 <h5>Garageband</h5> Err codemadness.org 70 i 7056 <p>I've spent a lot of time at airports over the last year and a half. When you have that much free time, you invent some hobbies. One of mine is creating loop-driven songs on Garageband.</p> Err codemadness.org 70 i 7057 <p><span Err codemadness.org 70 i 7058 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 7059 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 7060 > Err codemadness.org 70 i 7061 <a Err codemadness.org 70 i 7062 class="gatsby-resp-image-link" Err codemadness.org 70 i 7063 href="/static/f9b5c6e93322799f0d86bad6b08f8286/59173/garageband.png" Err codemadness.org 70 i 7064 style="display: block" Err codemadness.org 70 i 7065 target="_blank" Err codemadness.org 70 i 7066 rel="noopener" Err codemadness.org 70 i 7067 > Err codemadness.org 70 i 7068 <span Err codemadness.org 70 i 7069 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 7070 style="padding-bottom: 68.09815950920245%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAABYlAAAWJQFJUiTwAAAC/0lEQVQ4y0VTW3PSUBjkbzhjLdBwaYVcSEhIyD0h0JYQxEFrLcW7oy/aobWFXhz64Pjqs5cZZ/R3rt85VH3Y2UlyZrPft3tyVx8XOL+4wOXlJZbLa87zxQKzsyMcvT/C/Qf7GO9NOI/Gj/Dy1Rt+ZkFnrpdLzK/mmF28w/niA87mC+R2uh0EUQeu6yMIIlhtB1rTgKrrUDUdkqJB0Qw0CLKqQzcsNA0TLcuBZVkwTAOtNqFlwDBayO0mIXZ2++j0OohjH0Y8gphMIScTyN1DKAmBWL7hBkGi77qfok2ClmnBcz0y5MK2beSyXoh0kGF4L0Oa9smRimKpCqGyBaG8Sbx5w6vn8maNf29oTTiOzYUcx+HwfZ85DLhDz2N/aEORZRQKeQgbRWwUC4Qix+q5iFJJQCGfh6o2uQATYqIMXHCw3UE2vIduN6Ed+hAlCWtrayRa+Ic8CfyFIGxgfX0djYZKJjw+JsNfYS7IHEbdiA5YcNMp2nuncPeOEU3OEDw+hf3wmHACZ+8E0cEposNzWMl92JbJxUzao2maNzvcTpBlQwQ0uu+b6E3nGJz9wuDkB7LTn+jPvmPwgfE3pLOvGBx/Qzb/DTt7QYIt2I6Lel1ErVbn0+W6gbPaYeyRQxNu9hTtyRLewQWiJ1dwD5ewH83hPfuM6M0XJM+vETz7BKO3D58lywUlDllprFJmO+xQHz2X9pGMUKkpqBs+1HCEcqUKNRiilT6HGo9RqVRQouRlnaUa0JjOP4cKExxuR9xhSH10bAPB+C0a/dcwRu/gTa8hxvucW+PZqovJAfVzSj/JEFCqOpW8VhNXDmXlf8oxhRKEPiR6yXtYrqJQFLBBvH7nNrT0NRwaXyhVIFTrkHR35ZBGFkWJO5QkGbl+N8AuOXR9it1zIIlkPRyj3op5DzdFjXNN9yC1uyjeuYX82i1ImoUwjOn62auRCSITTFnKNztkPVQUhVzRrSiVUb4rw0hfoFTdQs0IofUmqLd3ULdTKBaJUVXY/WUOGZpNHX8AxB7vtVv+wz8AAAAASUVORK5CYII='); background-size: cover; display: block;" Err codemadness.org 70 i 7071 ></span> Err codemadness.org 70 i 7072 <img Err codemadness.org 70 i 7073 class="gatsby-resp-image-image" Err codemadness.org 70 i 7074 alt="Garageband" Err codemadness.org 70 i 7075 title="Garageband" Err codemadness.org 70 i 7076 src="/static/f9b5c6e93322799f0d86bad6b08f8286/a6d36/garageband.png" Err codemadness.org 70 i 7077 srcset="/static/f9b5c6e93322799f0d86bad6b08f8286/222b7/garageband.png 163w, Err codemadness.org 70 i 7078 /static/f9b5c6e93322799f0d86bad6b08f8286/ff46a/garageband.png 325w, Err codemadness.org 70 i 7079 /static/f9b5c6e93322799f0d86bad6b08f8286/a6d36/garageband.png 650w, Err codemadness.org 70 i 7080 /static/f9b5c6e93322799f0d86bad6b08f8286/e548f/garageband.png 975w, Err codemadness.org 70 i 7081 /static/f9b5c6e93322799f0d86bad6b08f8286/3c492/garageband.png 1300w, Err codemadness.org 70 i 7082 /static/f9b5c6e93322799f0d86bad6b08f8286/59173/garageband.png 3014w" Err codemadness.org 70 i 7083 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 7084 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 7085 loading="lazy" Err codemadness.org 70 i 7086 /> Err codemadness.org 70 i 7087 </a> Err codemadness.org 70 i 7088 </span></p> Err codemadness.org 70 i 7089 <p>This screenshot is one of my more recent tracks Over Water, Under You. I assembled July Nineteen in a similar fashion, playing with the pre-set available loops to come up with weird and interesting combinations. I decided to use 'July Nineteen' for the talent show performance because it's loud and short and catchy.</p> Err codemadness.org 70 i 7090 <h4>The video</h4> Err codemadness.org 70 i 7091 <h5>The skull</h5> Err codemadness.org 70 i 7092 <ul> Err codemadness.org 70 i 7093 <li>Wikimedia Commons</li> Err codemadness.org 70 i 7094 <li>GIMP</li> Err codemadness.org 70 i 7095 </ul> Err codemadness.org 70 i 7096 <p>When I was growing up, my dad called me "Skull" as a nickname. To this day, if someone yells "Skull!", I will come running. Anyway, I wanted a giant skull on giant screen, so I grabbed a decent skull image from Wikimedia Commons and then doctored it up in GIMP to remove clutter and the white background, saving as a .png.</p> Err codemadness.org 70 i 7097 <h5>The background</h5> Err codemadness.org 70 i 7098 <ul> Err codemadness.org 70 i 7099 <li>Processing</li> Err codemadness.org 70 i 7100 <li>YouTube</li> Err codemadness.org 70 i 7101 <li>CloudApp</li> Err codemadness.org 70 i 7102 </ul> Err codemadness.org 70 i 7103 <p>I've always loved the weird video backdrops behind live performances of My Morning Jacket or Wilco or Sufjan or Animal Collective. Who creates these trippy backgrounds, and how much input comes from the band?</p> Err codemadness.org 70 i 7104 <p>Hey, so, when we're playing "I'm The Man Who Loves You" I want the background to be like crying rainbow waves. And triangles, lots of triangles.</p> Err codemadness.org 70 i 7105 <p>Well, <strong>TERMINAL MAN</strong> definitely needed its own trippy background for its debut live show, and Processing made it happen.</p> Err codemadness.org 70 i 7106 <p>I created a Processing sketch that used keyboard strokes to trigger different backdrops behind the giant skull. Some of the backgrounds were native Processing functions (like creating random flashing colors or drawing lots of random lines), and others were looped video clips that I grabbed from YouTube with CloudApp. The central theme: the joy of Windows 95.</p> Err codemadness.org 70 i 7107 <p>Here's the code for the sketch:</p> Err codemadness.org 70 i 7108 <div class="gatsby-highlight" data-language="java"><pre class="language-java"><code class="language-java"><span class="token comment">// ----------------------</span> Err codemadness.org 70 i 7109 <span class="token comment">// T E R M I N A L M A N</span> Err codemadness.org 70 i 7110 <span class="token comment">// ----------------------</span> Err codemadness.org 70 i 7111 <span class="token comment">// @ w h a t r o c k s</span> Err codemadness.org 70 i 7112 <span class="token comment">// ----------------------</span> Err codemadness.org 70 i 7113 Err codemadness.org 70 i 7114 <span class="token comment">// import video library</span> Err codemadness.org 70 i 7115 <span class="token keyword">import</span> <span class="token namespace">processing<span class="token punctuation">.</span>video<span class="token punctuation">.</span></span><span class="token operator">*</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7116 Err codemadness.org 70 i 7117 <span class="token comment">// movies</span> Err codemadness.org 70 i 7118 <span class="token class-name">Movie</span> pipeMovie<span class="token punctuation">;</span> Err codemadness.org 70 i 7119 <span class="token class-name">Movie</span> doomMovie<span class="token punctuation">;</span> Err codemadness.org 70 i 7120 <span class="token class-name">Movie</span> solitaireMovie<span class="token punctuation">;</span> Err codemadness.org 70 i 7121 <span class="token class-name">Movie</span> toastersMovie<span class="token punctuation">;</span> Err codemadness.org 70 i 7122 <span class="token class-name">Movie</span> mazeMovie<span class="token punctuation">;</span> Err codemadness.org 70 i 7123 <span class="token class-name">Movie</span> wc2Movie<span class="token punctuation">;</span> Err codemadness.org 70 i 7124 <span class="token class-name">Movie</span> tiefighterMovie<span class="token punctuation">;</span> Err codemadness.org 70 i 7125 <span class="token class-name">Movie</span> rollercoasterMovie<span class="token punctuation">;</span> Err codemadness.org 70 i 7126 Err codemadness.org 70 i 7127 <span class="token comment">// images</span> Err codemadness.org 70 i 7128 <span class="token class-name">PImage</span> skull<span class="token punctuation">;</span> Err codemadness.org 70 i 7129 <span class="token class-name">PImage</span> miniSkull<span class="token punctuation">;</span> Err codemadness.org 70 i 7130 Err codemadness.org 70 i 7131 <span class="token comment">// font</span> Err codemadness.org 70 i 7132 <span class="token class-name">PFont</span> f<span class="token punctuation">;</span> Err codemadness.org 70 i 7133 Err codemadness.org 70 i 7134 <span class="token keyword">void</span> <span class="token function">setup</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 7135 <span class="token function">size</span><span class="token punctuation">(</span><span class="token number">800</span><span class="token punctuation">,</span> <span class="token number">800</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7136 <span class="token function">smooth</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7137 Err codemadness.org 70 i 7138 <span class="token comment">// load the pictures</span> Err codemadness.org 70 i 7139 skull <span class="token operator">=</span> <span class="token function">loadImage</span><span class="token punctuation">(</span><span class="token string">"skull2.png"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7140 miniSkull <span class="token operator">=</span> <span class="token function">loadImage</span><span class="token punctuation">(</span><span class="token string">"skull2.png"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7141 <span class="token comment">// resize the big skull to dimensions of the canvas</span> Err codemadness.org 70 i 7142 skull<span class="token punctuation">.</span><span class="token function">resize</span><span class="token punctuation">(</span>width<span class="token punctuation">,</span> height<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7143 Err codemadness.org 70 i 7144 <span class="token comment">// black background</span> Err codemadness.org 70 i 7145 <span class="token function">background</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7146 Err codemadness.org 70 i 7147 <span class="token comment">// load the font</span> Err codemadness.org 70 i 7148 f <span class="token operator">=</span> <span class="token function">loadFont</span><span class="token punctuation">(</span><span class="token string">"TwCenMT-BoldItalic-100.vlw"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7149 Err codemadness.org 70 i 7150 <span class="token comment">// load the movies</span> Err codemadness.org 70 i 7151 mazeMovie <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Movie</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">,</span> <span class="token string">"maze.mov"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7152 mazeMovie<span class="token punctuation">.</span><span class="token function">loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7153 Err codemadness.org 70 i 7154 solitaireMovie <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Movie</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">,</span> <span class="token string">"solitaire.mov"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7155 solitaireMovie<span class="token punctuation">.</span><span class="token function">loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7156 Err codemadness.org 70 i 7157 doomMovie <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Movie</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">,</span> <span class="token string">"doom.mov"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7158 doomMovie<span class="token punctuation">.</span><span class="token function">loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7159 Err codemadness.org 70 i 7160 pipeMovie <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Movie</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">,</span> <span class="token string">"pipe.mov"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7161 pipeMovie<span class="token punctuation">.</span><span class="token function">loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7162 Err codemadness.org 70 i 7163 toastersMovie <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Movie</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">,</span> <span class="token string">"toasters.mov"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7164 toastersMovie<span class="token punctuation">.</span><span class="token function">loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7165 Err codemadness.org 70 i 7166 tiefighterMovie <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Movie</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">,</span> <span class="token string">"tiefighter.mov"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7167 tiefighterMovie<span class="token punctuation">.</span><span class="token function">loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7168 Err codemadness.org 70 i 7169 wc2Movie <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Movie</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">,</span> <span class="token string">"wc2.mov"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7170 wc2Movie<span class="token punctuation">.</span><span class="token function">loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7171 Err codemadness.org 70 i 7172 rollercoasterMovie <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Movie</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">,</span> <span class="token string">"rollercoaster.mov"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7173 rollercoasterMovie<span class="token punctuation">.</span><span class="token function">loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7174 Err codemadness.org 70 i 7175 <span class="token punctuation">}</span> Err codemadness.org 70 i 7176 Err codemadness.org 70 i 7177 <span class="token keyword">void</span> <span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 7178 Err codemadness.org 70 i 7179 <span class="token comment">// black background</span> Err codemadness.org 70 i 7180 <span class="token keyword">if</span> <span class="token punctuation">(</span>key <span class="token operator">==</span> <span class="token string">'x'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 7181 <span class="token function">background</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7182 <span class="token punctuation">}</span> Err codemadness.org 70 i 7183 Err codemadness.org 70 i 7184 <span class="token comment">// play doom video</span> Err codemadness.org 70 i 7185 <span class="token keyword">if</span> <span class="token punctuation">(</span>key <span class="token operator">==</span> <span class="token string">'1'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 7186 <span class="token function">image</span><span class="token punctuation">(</span>doomMovie<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> width<span class="token punctuation">,</span> height<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7187 <span class="token punctuation">}</span> Err codemadness.org 70 i 7188 Err codemadness.org 70 i 7189 <span class="token comment">// play maze video</span> Err codemadness.org 70 i 7190 <span class="token keyword">if</span> <span class="token punctuation">(</span>key <span class="token operator">==</span> <span class="token string">'2'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 7191 <span class="token function">image</span><span class="token punctuation">(</span>mazeMovie<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> width<span class="token punctuation">,</span> height<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7192 <span class="token punctuation">}</span> Err codemadness.org 70 i 7193 Err codemadness.org 70 i 7194 <span class="token comment">// play toasters video</span> Err codemadness.org 70 i 7195 <span class="token keyword">if</span> <span class="token punctuation">(</span>key <span class="token operator">==</span> <span class="token string">'3'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 7196 <span class="token function">image</span><span class="token punctuation">(</span>toastersMovie<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> width<span class="token punctuation">,</span> height<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7197 <span class="token punctuation">}</span> Err codemadness.org 70 i 7198 Err codemadness.org 70 i 7199 <span class="token comment">// play pipes video</span> Err codemadness.org 70 i 7200 <span class="token keyword">if</span> <span class="token punctuation">(</span>key <span class="token operator">==</span> <span class="token string">'4'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 7201 <span class="token function">image</span><span class="token punctuation">(</span>pipeMovie<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> width<span class="token punctuation">,</span> height<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7202 <span class="token punctuation">}</span> Err codemadness.org 70 i 7203 Err codemadness.org 70 i 7204 <span class="token comment">// play solitaire video</span> Err codemadness.org 70 i 7205 <span class="token keyword">if</span> <span class="token punctuation">(</span>key <span class="token operator">==</span> <span class="token string">'5'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 7206 <span class="token function">image</span><span class="token punctuation">(</span>solitaireMovie<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> width<span class="token punctuation">,</span> height<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7207 <span class="token punctuation">}</span> Err codemadness.org 70 i 7208 Err codemadness.org 70 i 7209 <span class="token comment">// play tiefighter video</span> Err codemadness.org 70 i 7210 <span class="token keyword">if</span> <span class="token punctuation">(</span>key <span class="token operator">==</span> <span class="token string">'6'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 7211 <span class="token function">image</span><span class="token punctuation">(</span>tiefighterMovie<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> width<span class="token punctuation">,</span> height<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7212 <span class="token punctuation">}</span> Err codemadness.org 70 i 7213 Err codemadness.org 70 i 7214 <span class="token comment">// play rollercoaster video</span> Err codemadness.org 70 i 7215 <span class="token keyword">if</span> <span class="token punctuation">(</span>key <span class="token operator">==</span> <span class="token string">'7'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 7216 <span class="token function">image</span><span class="token punctuation">(</span>rollercoasterMovie<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> width<span class="token punctuation">,</span> height<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7217 <span class="token punctuation">}</span> Err codemadness.org 70 i 7218 Err codemadness.org 70 i 7219 <span class="token comment">// play wc2 video</span> Err codemadness.org 70 i 7220 <span class="token keyword">if</span> <span class="token punctuation">(</span>key <span class="token operator">==</span> <span class="token string">'8'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 7221 <span class="token function">image</span><span class="token punctuation">(</span>wc2Movie<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> width<span class="token punctuation">,</span> height<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7222 <span class="token punctuation">}</span> Err codemadness.org 70 i 7223 Err codemadness.org 70 i 7224 <span class="token comment">// print mini skulls everywhere!</span> Err codemadness.org 70 i 7225 <span class="token keyword">if</span> <span class="token punctuation">(</span>key <span class="token operator">==</span> <span class="token string">'s'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 7226 miniSkull<span class="token punctuation">.</span><span class="token function">resize</span><span class="token punctuation">(</span>width<span class="token operator">/</span><span class="token number">10</span><span class="token punctuation">,</span> height<span class="token operator">/</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7227 <span class="token function">image</span><span class="token punctuation">(</span>miniSkull<span class="token punctuation">,</span> <span class="token function">random</span><span class="token punctuation">(</span><span class="token operator">-</span>width<span class="token punctuation">,</span> width<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token function">random</span><span class="token punctuation">(</span><span class="token operator">-</span>height<span class="token punctuation">,</span> height<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7228 <span class="token punctuation">}</span> Err codemadness.org 70 i 7229 Err codemadness.org 70 i 7230 <span class="token comment">// flashy background colors!</span> Err codemadness.org 70 i 7231 <span class="token keyword">if</span> <span class="token punctuation">(</span>key <span class="token operator">==</span> <span class="token string">'b'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 7232 <span class="token function">background</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">(</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token keyword">int</span><span class="token punctuation">(</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token keyword">int</span><span class="token punctuation">(</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token keyword">int</span><span class="token punctuation">(</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7233 <span class="token punctuation">}</span> Err codemadness.org 70 i 7234 Err codemadness.org 70 i 7235 <span class="token comment">// draw blue lines from the center</span> Err codemadness.org 70 i 7236 <span class="token keyword">if</span> <span class="token punctuation">(</span>key <span class="token operator">==</span> <span class="token string">'l'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 7237 <span class="token function">stroke</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token function">random</span><span class="token punctuation">(</span><span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token function">random</span><span class="token punctuation">(</span><span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">150</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7238 <span class="token function">line</span><span class="token punctuation">(</span>width<span class="token operator">/</span><span class="token number">2</span><span class="token punctuation">,</span> height<span class="token operator">/</span><span class="token number">2</span><span class="token punctuation">,</span> width<span class="token operator">/</span><span class="token number">2</span> <span class="token operator">+</span> <span class="token function">random</span><span class="token punctuation">(</span><span class="token operator">-</span>width<span class="token punctuation">,</span> width<span class="token punctuation">)</span><span class="token punctuation">,</span> height<span class="token operator">/</span><span class="token number">2</span> <span class="token operator">+</span> <span class="token function">random</span><span class="token punctuation">(</span><span class="token operator">-</span>height<span class="token punctuation">,</span> height<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7239 <span class="token punctuation">}</span> Err codemadness.org 70 i 7240 Err codemadness.org 70 i 7241 <span class="token comment">// Load big skull picture on top of all these other backgrounds</span> Err codemadness.org 70 i 7242 <span class="token function">image</span><span class="token punctuation">(</span>skull<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7243 Err codemadness.org 70 i 7244 <span class="token comment">// show 'terminal man' text, even on top of the big skull</span> Err codemadness.org 70 i 7245 <span class="token keyword">if</span> <span class="token punctuation">(</span>key <span class="token operator">==</span> <span class="token string">'t'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 7246 <span class="token function">textFont</span><span class="token punctuation">(</span>f<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7247 <span class="token function">textAlign</span><span class="token punctuation">(</span>CENTER<span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7248 <span class="token function">fill</span><span class="token punctuation">(</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token number">155</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token function">random</span><span class="token punctuation">(</span><span class="token number">150</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7249 <span class="token function">text</span><span class="token punctuation">(</span><span class="token string">"TERMINAL MAN"</span><span class="token punctuation">,</span> width<span class="token operator">/</span><span class="token number">2</span><span class="token punctuation">,</span> height<span class="token operator">/</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7250 <span class="token function">fill</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token function">random</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token function">random</span><span class="token punctuation">(</span><span class="token number">150</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7251 <span class="token function">text</span><span class="token punctuation">(</span><span class="token string">"TERMINAL MAN"</span><span class="token punctuation">,</span> width<span class="token operator">/</span><span class="token number">2</span><span class="token operator">+</span><span class="token number">10</span><span class="token punctuation">,</span> height<span class="token operator">/</span><span class="token number">2</span><span class="token operator">+</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7252 <span class="token punctuation">}</span> Err codemadness.org 70 i 7253 <span class="token punctuation">}</span> Err codemadness.org 70 i 7254 Err codemadness.org 70 i 7255 <span class="token comment">// Called everytime a new frame is available</span> Err codemadness.org 70 i 7256 <span class="token keyword">void</span> <span class="token function">movieEvent</span><span class="token punctuation">(</span><span class="token class-name">Movie</span> m<span class="token punctuation">)</span> <span class="token punctuation">{</span> Err codemadness.org 70 i 7257 m<span class="token punctuation">.</span><span class="token function">read</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Err codemadness.org 70 i 7258 <span class="token punctuation">}</span></code></pre></div> Err codemadness.org 70 i 7259 <p>The sketch creates an app that lets you use the keyboard to jump between the different backdrops (for example, I can press 'b' for crazy random flashing colors, and '5' for a looped Solitaire video). Note that the media files need to appear in the 'data' folder of your sketch for this to work correctly.</p> Err codemadness.org 70 i 7260 <h3>Pulling it all together</h3> Err codemadness.org 70 i 7261 <ul> Err codemadness.org 70 i 7262 <li>QuickTime</li> Err codemadness.org 70 i 7263 <li>iMovie</li> Err codemadness.org 70 i 7264 <li>Vimeo</li> Err codemadness.org 70 i 7265 </ul> Err codemadness.org 70 i 7266 <p>Even though the sketch works great as a live companion to the song, I was really concerned with potential lag and getting out of sync with the music, so I decided to record it all as a video. CloudApp stopped cooperating, conveniently right after I registered for the one-month premium package, so I Googled and discovered that I could also use QuickTime to record screencasts. For free.</p> Err codemadness.org 70 i 7267 <p>I put on some DJ-like headphones, press record on the Quicktime screencast, pressed play on the track in iTunes, and just pretended that I was Chris Kuroda, the de facto fifth member of Phish who runs all their stage effects and lights, as I recorded the background changes along with the song.</p> Err codemadness.org 70 i 7268 <p>Then all I had to do was drop the mp3 and the video files into iMovie, line them up, and post to Vimeo!</p> Err codemadness.org 70 i 7269 <iframe src="https://player.vimeo.com/video/123845456" width="640" height="360" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe> Err codemadness.org 70 i 7270 <h3>The live performance</h3> Err codemadness.org 70 i 7271 <ul> Err codemadness.org 70 i 7272 <li>Double Robotics robot (we call it the Krobot at Knewton)</li> Err codemadness.org 70 i 7273 <li>Terminal</li> Err codemadness.org 70 i 7274 <li>Stage crew (Fernando, Sam, and others!)</li> Err codemadness.org 70 i 7275 </ul> Err codemadness.org 70 i 7276 <p>I had elaborate plans to introduce myself in a scary and funny robot voice using the Terminal 'say' command. This totally failed, however, as you can see in the video. No one could hear my hilarious introduction. No one heard me explain that I wrote the song and created the background video.</p> Err codemadness.org 70 i 7277 <p>But none of that mattered once I started to dance.</p><![CDATA[Merlin's Advice]]>https://www.charlieharrington.com/merlin's-advicehttps://www.charlieharrington.com/merlin's-adviceThu, 05 Mar 2015 00:00:00 GMT<blockquote> Err codemadness.org 70 i 7278 <p>The best thing for being sad is to learn something. That's the only thing that never fails. You may grow old and trembling in your anatomies, you may lie awake at night listening to the disorder of your veins, you may miss your only love, you may see the world about you devastated by evil lunatics, or know your honour trampled in the sewers of baser minds. There is only one thing for it then — to learn. Learn why the world wags and what wags it. That is the only thing which the mind can never exhaust, never alienate, never be tortured by, never fear or distrust, and never dream of regretting. Learning is the only thing for you. Look what a lot of things there are to learn.</p> Err codemadness.org 70 i 7279 </blockquote> Err codemadness.org 70 i 7280 <p><span Err codemadness.org 70 i 7281 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 7282 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; " Err codemadness.org 70 i 7283 > Err codemadness.org 70 i 7284 <a Err codemadness.org 70 i 7285 class="gatsby-resp-image-link" Err codemadness.org 70 i 7286 href="/static/80667a21a152af75c83a37789c285779/f212f/ma.jpg" Err codemadness.org 70 i 7287 style="display: block" Err codemadness.org 70 i 7288 target="_blank" Err codemadness.org 70 i 7289 rel="noopener" Err codemadness.org 70 i 7290 > Err codemadness.org 70 i 7291 <span Err codemadness.org 70 i 7292 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 7293 style="padding-bottom: 131.90184049079755%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAaABQDASIAAhEBAxEB/8QAGQAAAwADAAAAAAAAAAAAAAAAAAMEAQIF/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAABio5uxQThhzWkhaH/xAAcEAABBQADAAAAAAAAAAAAAAAAAQIQERIDITH/2gAIAQEAAQUCR5ttbLLiu14zIvrI/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAGBAAAwEBAAAAAAAAAAAAAAAAACAhAUH/2gAIAQEABj8CJi04v//EABwQAAMBAAIDAAAAAAAAAAAAAAABESExUXGBof/aAAgBAQABPyFEZmehZSbFHKZbtNRgZ23s8vgqvBE3qHyf/9oADAMBAAIAAwAAABBADQz/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/EB//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/EB//xAAcEAEAAwEBAAMAAAAAAAAAAAABABEhMUFRkbH/2gAIAQEAAT8QoHKwryU1RF62sb3OSh11+I4USaK59QVl1vZqdS4vkGDVfT9TOMiUDr5MAOekJfJ//9k='); background-size: cover; display: block;" Err codemadness.org 70 i 7294 ></span> Err codemadness.org 70 i 7295 <img Err codemadness.org 70 i 7296 class="gatsby-resp-image-image" Err codemadness.org 70 i 7297 alt="Merlin" Err codemadness.org 70 i 7298 title="Merlin" Err codemadness.org 70 i 7299 src="/static/80667a21a152af75c83a37789c285779/6aca1/ma.jpg" Err codemadness.org 70 i 7300 srcset="/static/80667a21a152af75c83a37789c285779/d2f63/ma.jpg 163w, Err codemadness.org 70 i 7301 /static/80667a21a152af75c83a37789c285779/c989d/ma.jpg 325w, Err codemadness.org 70 i 7302 /static/80667a21a152af75c83a37789c285779/6aca1/ma.jpg 650w, Err codemadness.org 70 i 7303 /static/80667a21a152af75c83a37789c285779/f212f/ma.jpg 916w" Err codemadness.org 70 i 7304 sizes="(max-width: 650px) 100vw, 650px" Err codemadness.org 70 i 7305 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 7306 loading="lazy" Err codemadness.org 70 i 7307 /> Err codemadness.org 70 i 7308 </a> Err codemadness.org 70 i 7309 </span></p><![CDATA[Trickle of Water]]>https://www.charlieharrington.com/trickle-of-waterhttps://www.charlieharrington.com/trickle-of-waterSun, 01 Mar 2015 00:00:00 GMT<p>My favorite <em>Calvin and Hobbes</em> strip</p> Err codemadness.org 70 i 7310 <p><span Err codemadness.org 70 i 7311 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 7312 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 600px; " Err codemadness.org 70 i 7313 > Err codemadness.org 70 i 7314 <a Err codemadness.org 70 i 7315 class="gatsby-resp-image-link" Err codemadness.org 70 i 7316 href="/static/082a73a40fc58149b9098649c62e2b45/b4294/ch.jpg" Err codemadness.org 70 i 7317 style="display: block" Err codemadness.org 70 i 7318 target="_blank" Err codemadness.org 70 i 7319 rel="noopener" Err codemadness.org 70 i 7320 > Err codemadness.org 70 i 7321 <span Err codemadness.org 70 i 7322 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 7323 style="padding-bottom: 31.288343558282207%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAGABQDASIAAhEBAxEB/8QAFwABAAMAAAAAAAAAAAAAAAAAAAIDBf/EABQBAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhADEAAAAdaAWA//xAAYEAEAAwEAAAAAAAAAAAAAAAABAAIRIf/aAAgBAQABBQKsVw4f/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAFhABAQEAAAAAAAAAAAAAAAAAAAER/9oACAEBAAY/AmRI/8QAGRABAAMBAQAAAAAAAAAAAAAAAQARITFB/9oACAEBAAE/IV3xeRSwjvG2tan/2gAMAwEAAgADAAAAEPAP/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPxA//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPxA//8QAGxABAAICAwAAAAAAAAAAAAAAAQAhETFBUfD/2gAIAQEAAT8QffHAWBGILt79cVxLQGXvE//Z'); background-size: cover; display: block;" Err codemadness.org 70 i 7324 ></span> Err codemadness.org 70 i 7325 <img Err codemadness.org 70 i 7326 class="gatsby-resp-image-image" Err codemadness.org 70 i 7327 alt="comic" Err codemadness.org 70 i 7328 title="comic" Err codemadness.org 70 i 7329 src="/static/082a73a40fc58149b9098649c62e2b45/b4294/ch.jpg" Err codemadness.org 70 i 7330 srcset="/static/082a73a40fc58149b9098649c62e2b45/d2f63/ch.jpg 163w, Err codemadness.org 70 i 7331 /static/082a73a40fc58149b9098649c62e2b45/c989d/ch.jpg 325w, Err codemadness.org 70 i 7332 /static/082a73a40fc58149b9098649c62e2b45/b4294/ch.jpg 600w" Err codemadness.org 70 i 7333 sizes="(max-width: 600px) 100vw, 600px" Err codemadness.org 70 i 7334 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 7335 loading="lazy" Err codemadness.org 70 i 7336 /> Err codemadness.org 70 i 7337 </a> Err codemadness.org 70 i 7338 </span></p><![CDATA[edCrunch in Moscow]]>https://www.charlieharrington.com/edcrunch-in-moscowhttps://www.charlieharrington.com/edcrunch-in-moscowSat, 18 Oct 2014 00:00:00 GMT<iframe width="560" height="315" src="https://www.youtube.com/embed/T952UorytGs?rel=0" frameborder="0" allowfullscreen></iframe><![CDATA[Over Water, Under You]]>https://www.charlieharrington.com/terminal-man-over-water-under-youhttps://www.charlieharrington.com/terminal-man-over-water-under-youMon, 04 Aug 2014 00:00:00 GMT<iframe width="100%" height="300" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/161700259&amp;color=%2300cc11&amp;auto_play=false&amp;hide_related=false&amp;show_comments=true&amp;show_user=true&amp;show_reposts=false&amp;visual=true"></iframe><![CDATA[ELTJam Sesh in London]]>https://www.charlieharrington.com/eltjam-sesh-in-londonhttps://www.charlieharrington.com/eltjam-sesh-in-londonMon, 28 Apr 2014 00:00:00 GMT<iframe src="https://player.vimeo.com/video/93132331?title=0&byline=0&portrait=0" width="640" height="360" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe> Err codemadness.org 70 i 7339 <p>My five minute pitch to the masters of the ELT universe.</p><![CDATA[SEPM Conference in Copenhagen]]>https://www.charlieharrington.com/sepm-conference-in-copenhagenhttps://www.charlieharrington.com/sepm-conference-in-copenhagenThu, 21 Nov 2013 00:00:00 GMT<iframe width="560" height="315" src="https://www.youtube.com/embed/87sBLMbBoFM?rel=0" frameborder="0" allowfullscreen></iframe> Err codemadness.org 70 i 7340 <p>"It's so awesome that we are in a planetarium, first of all." - Charlie Harrington</p><![CDATA[Cape Seafood Logo]]>https://www.charlieharrington.com/cape-seafood-logohttps://www.charlieharrington.com/cape-seafood-logoMon, 21 Jan 2013 00:00:00 GMT<p>My friend Luke asked me to design a new logo for his new company. You may know his other company: <a href="https://www.lukeslobster.com/">Luke's Lobster</a>.</p> Err codemadness.org 70 i 7341 <p>Here's what my other friend <a href="http://www.katiekosma.com/">Katie Kosma</a> and I came up with:</p> Err codemadness.org 70 i 7342 <p><span Err codemadness.org 70 i 7343 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 7344 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 364px; " Err codemadness.org 70 i 7345 > Err codemadness.org 70 i 7346 <a Err codemadness.org 70 i 7347 class="gatsby-resp-image-link" Err codemadness.org 70 i 7348 href="/static/1564ddff2da0feb019088d38eb6d2ae9/e45a9/capeseafood.png" Err codemadness.org 70 i 7349 style="display: block" Err codemadness.org 70 i 7350 target="_blank" Err codemadness.org 70 i 7351 rel="noopener" Err codemadness.org 70 i 7352 > Err codemadness.org 70 i 7353 <span Err codemadness.org 70 i 7354 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 7355 style="padding-bottom: 54.601226993865026%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAACQ0lEQVQoz22TzU9TQRTFu3Jj4sqFJv4DJv4Frl25cGdiTBCjEXfqws+dCxcixqWi0Y2xskGDJsaQCpEUBKwtlIamFAKhLa39oO17b957/bI/7ry2tjEuztyTuTPn3Jm547NtGw2lFLZAdXkP1gD31nTz1n/W6JzPHhAwBYbVSVjKpiYR18bpGXZjzbFpuR1eF94W7nZzPj3oDXoRroKmiyWiDVuRNRTzOUW5a2JoMYmZqiJW7AinKopwXlEwOjpehRXZkJZFX9MWdyMVzn1MEMnscyFkcTlkkthXxEuKYeHixL2oycmAwfOkxdVfJmcXDGKSb4qBT6sWTMWZBYsjE2l8YxFOvIryNFriesQSAUXLUTxYM/FNVaQaMV01OPWtin/b5PyiwUjY8O7Rq1APRRE8HbQ47E9x6FmI4+NREr/LDK+6XIrYzBVchqTaayuKx5suo0mH6awD1BkK21yMOMTLDg0x/nvk2aziZrjKscksR1+vk88XmQpv82Jhiy8rO+zky6xvpfH/2OC9YGkjzedQkunYLmOBdWKpAg3X6T+K3LYYyis3mox9TxLfzfNwcpEbb2YYnVrmyniAO++CPPn0k/v+ILcFt97O8ejDIiMvA0wE49Cq6wr7LVORo7frLtHNDLlShdXtHEuJNLNrO4S39jyu72o+nmJzr8jyRsYznpF8rlTF1Y+iBnqs03993hTxP40abUGrLpCo5/VcveZ4sVFzaTdrIuZ0+rC32f6neXs/QPekafW56kZrIJpW/6ccAFxIGDki540tAAAAAElFTkSuQmCC'); background-size: cover; display: block;" Err codemadness.org 70 i 7356 ></span> Err codemadness.org 70 i 7357 <img Err codemadness.org 70 i 7358 class="gatsby-resp-image-image" Err codemadness.org 70 i 7359 alt="logo" Err codemadness.org 70 i 7360 title="logo" Err codemadness.org 70 i 7361 src="/static/1564ddff2da0feb019088d38eb6d2ae9/e45a9/capeseafood.png" Err codemadness.org 70 i 7362 srcset="/static/1564ddff2da0feb019088d38eb6d2ae9/222b7/capeseafood.png 163w, Err codemadness.org 70 i 7363 /static/1564ddff2da0feb019088d38eb6d2ae9/ff46a/capeseafood.png 325w, Err codemadness.org 70 i 7364 /static/1564ddff2da0feb019088d38eb6d2ae9/e45a9/capeseafood.png 364w" Err codemadness.org 70 i 7365 sizes="(max-width: 364px) 100vw, 364px" Err codemadness.org 70 i 7366 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 7367 loading="lazy" Err codemadness.org 70 i 7368 /> Err codemadness.org 70 i 7369 </a> Err codemadness.org 70 i 7370 </span></p> Err codemadness.org 70 i 7371 <p>Check out <a href="http://www.capeseafoodllc.com/">Cape Seafood</a> for more seafood-y goodness.</p><![CDATA[Four Track]]>https://www.charlieharrington.com/four-trackhttps://www.charlieharrington.com/four-trackThu, 18 Dec 2003 00:00:00 GMT<iframe width="100%" height="300" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/341989983&amp;color=%2300cc11&amp;auto_play=false&amp;hide_related=false&amp;show_comments=true&amp;show_user=true&amp;show_reposts=false&amp;visual=true"></iframe> Err codemadness.org 70 i 7372 <p>This is the first song I wrote and recorded on my Fostex four-track.</p><![CDATA[About]]>https://www.charlieharrington.com/abouthttps://www.charlieharrington.com/aboutSat, 01 Jan 2000 00:00:00 GMT<p>Hello! My name is Charlie Harrington. I'm a computer programmer and writer living in San Francisco, California. I grew up in Red Bank, New Jersey, and it ain't no sin to be glad you're alive.</p> Err codemadness.org 70 i 7373 <p>I'm an engineering manager at <a href="https://www.getcruise.com">Cruise</a>, building software to deliver fully-autonomous vehicles aka self-driving cars. You can see Cruise autonomous vehicles driving around San Francisco right now! Like <em>right now</em>, look outside!</p> Err codemadness.org 70 i 7374 <p>I love <a href="/my-new-old-apple-iie-computer">old computers</a>, <a href="/library">books of all kinds</a>, <a href="/school-supplies">playing music</a>, and <a href="/rim-2-rim-2-rim">the Great Outdoors</a>. Here's a grainy photo of me playing <em>Let It Be</em> on banjo: </p> Err codemadness.org 70 i 7375 <p><span Err codemadness.org 70 i 7376 class="gatsby-resp-image-wrapper" Err codemadness.org 70 i 7377 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 400px; " Err codemadness.org 70 i 7378 > Err codemadness.org 70 i 7379 <a Err codemadness.org 70 i 7380 class="gatsby-resp-image-link" Err codemadness.org 70 i 7381 href="/static/a073f24e876ae150e393ddc9865a39ba/066f9/ch.jpg" Err codemadness.org 70 i 7382 style="display: block" Err codemadness.org 70 i 7383 target="_blank" Err codemadness.org 70 i 7384 rel="noopener" Err codemadness.org 70 i 7385 > Err codemadness.org 70 i 7386 <span Err codemadness.org 70 i 7387 class="gatsby-resp-image-background-image" Err codemadness.org 70 i 7388 style="padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAMEBf/EABcBAQEBAQAAAAAAAAAAAAAAAAABAgP/2gAMAwEAAhADEAAAAc9aSMzai1C3njpj/8QAGxAAAwEBAAMAAAAAAAAAAAAAAAECEQMSFCH/2gAIAQEAAQUCc4XzSgvKH9PUZxiWYuZ5Pf/EABYRAAMAAAAAAAAAAAAAAAAAAAERIP/aAAgBAwEBPwFiP//EABcRAAMBAAAAAAAAAAAAAAAAAAEQEkH/2gAIAQIBAT8BkrAv/8QAGxAAAgMAAwAAAAAAAAAAAAAAAAECEBEiM3H/2gAIAQEABj8CFJVgoHZno21pxr//xAAcEAEAAwEAAwEAAAAAAAAAAAABABEhMUFRYXH/2gAIAQEAAT8hQbHJrd2UwfM7DQffb5FdPx6mizmxIo2+viKJW37P/9oADAMBAAIAAwAAABDULwH/xAAYEQEBAAMAAAAAAAAAAAAAAAABABARMf/aAAgBAwEBPxAARtR1x//EABYRAQEBAAAAAAAAAAAAAAAAAAABEf/aAAgBAgEBPxDTK1RH/8QAHRABAAMAAwADAAAAAAAAAAAAAQARITFBUYGh0f/aAAgBAQABPxBxQGuX2L7WC3vOvmNnJNWvYGo5p0LcoOj8lKAp7/SIAWBNAUOEHGWBoh8j47m3Sz//2Q=='); background-size: cover; display: block;" Err codemadness.org 70 i 7389 ></span> Err codemadness.org 70 i 7390 <img Err codemadness.org 70 i 7391 class="gatsby-resp-image-image" Err codemadness.org 70 i 7392 alt="charlie" Err codemadness.org 70 i 7393 title="charlie" Err codemadness.org 70 i 7394 src="/static/a073f24e876ae150e393ddc9865a39ba/066f9/ch.jpg" Err codemadness.org 70 i 7395 srcset="/static/a073f24e876ae150e393ddc9865a39ba/d2f63/ch.jpg 163w, Err codemadness.org 70 i 7396 /static/a073f24e876ae150e393ddc9865a39ba/c989d/ch.jpg 325w, Err codemadness.org 70 i 7397 /static/a073f24e876ae150e393ddc9865a39ba/066f9/ch.jpg 400w" Err codemadness.org 70 i 7398 sizes="(max-width: 400px) 100vw, 400px" Err codemadness.org 70 i 7399 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" Err codemadness.org 70 i 7400 loading="lazy" Err codemadness.org 70 i 7401 /> Err codemadness.org 70 i 7402 </a> Err codemadness.org 70 i 7403 </span></p> Err codemadness.org 70 i 7404 <p>I'm also in the middle of <del>writing</del> <del>editing</del> re-editing a novel about robots. If you like robots and adventures and being a kid and summer reading and box fans, then this could be the book for you!</p> Err codemadness.org 70 i 7405 <h3>Elsewhere on the Internet</h3> Err codemadness.org 70 i 7406 <ul> Err codemadness.org 70 i 7407 <li><a href="https://twitter.com/whatrocks">Twitter</a></li> Err codemadness.org 70 i 7408 <li><a href="https://twitch.tv/what_rocks">Twitch</a></li> Err codemadness.org 70 i 7409 <li><a href="https://www.youtube.com/channel/UCqk3WloxX7Ya5bYSqYNA2Lg">YouTube</a></li> Err codemadness.org 70 i 7410 <li><a href="https://github.com/whatrocks">GitHub</a></li> Err codemadness.org 70 i 7411 <li><a href="https://instagram.com/whatrocks">Instagram</a></li> Err codemadness.org 70 i 7412 <li><a href="https://www.goodreads.com/whatrocks">Goodreads</a></li> Err codemadness.org 70 i 7413 <li><a href="https://www.linkedin.com/in/charlieharrington">LinkedIn</a></li> Err codemadness.org 70 i 7414 </ul> Err codemadness.org 70 i 7415 <p>Thank you for visiting my site.</p> Err codemadness.org 70 i 7416 Err codemadness.org 70 .