{
  "version": "https://jsonfeed.org/version/1",
  "title": "M. Knepprath",
  "home_page_url": "https://mknepprath.com",
  "feed_url": "https://mknepprath.com/feed.json",
  "description": "Michael Knepprath is a Staff Software Engineer at Walmart.",
  "icon": "https://mknepprath.com/assets/apple-touch-icon-152x152.png",
  "favicon": "https://mknepprath.com/assets/favicon.ico",
  "author": {
    "name": "Michael Knepprath",
    "url": "https://mknepprath.com",
    "avatar": "https://mknepprath.com/assets/memoji.png"
  },
  "items": [
    {
      "id": "https://mknepprath.com/writing/uncle-charlie-dark-apostle",
      "url": "https://mknepprath.com/writing/uncle-charlie-dark-apostle",
      "title": "Uncle Charlie the Dark Apostle",
      "content_html": "<img src=\"https://mknepprath.com/assets/uncle-charlie.jpg\" alt=\"Uncle Charlie standing at the door of the Newton home\" />\n      <header>\n        <h1>Uncle Charlie the Dark Apostle</h1>\n      </header>\n      <blockquote>\n        <p>\n          ⚠︎ This article contains spoilers for Shadow of a Doubt (1943). I\n          highly recommend you watch the film before reading.\n        </p>\n      </blockquote>\n      <p>\n        I think I&apos;ve made a new discovery about an 83-year-old film. At\n        the very least, I can&apos;t find evidence of this discovery in any of\n        the analysis I&apos;ve seen of this film online.\n      </p>\n      <p>\n        I&apos;d read that Shadow of a Doubt (1943) was Alfred Hitchcock&apos;s\n        favorite of his own films, something that landed in the &ldquo;fun\n        fact&rdquo; territory of my mind without further exploration during my\n        initial viewing. This, despite my recurring confusion about how many of\n        the characters were acting and talking during the film: weird\n        relationships, random outbursts, odd phrasing&hellip; I found the film\n        to be entertaining enough, but it didn&apos;t blow me away by any\n        means.\n      </p>\n      <p>\n        During my second viewing, I found myself hooked by a seemingly minor detail:\n        repeated mentions of St. Paul. The first: Uncle Charlie, &ldquo;Standing\n        there, you don&apos;t look like Emma Newton. You look like Emma Spencer\n        Oakley of 46 Burnham Street, St. Paul, Minnesota.&rdquo; The second,\n        Charlie again, at the dinner table, &ldquo;You know what St. Paul said:\n        &lsquo;Take a little wine for thy stomach&apos;s sake.&rsquo;&rdquo;\n      </p>\n      <p>\n        Entering spoiler territory now, it&apos;s worth pausing to give some\n        additional details about Uncle Charlie. Charlie opens the movie on the\n        run from the law. We learn fairly quickly that he is being pursued as\n        the Merry Widow Murderer, a serial killer of widows who then steals\n        their fortunes. We also learn through his sister, Emma, that he\n        experienced a tragic bicycle accident that changed him permanently.\n      </p>\n      <h2 id=\"a-little-wine\">A Little Wine</h2>\n      <img src=\"https://mknepprath.com/assets/uncle-charlie-dinner-rant.jpg\" alt=\"Uncle Charlie at the dinner table with his family\" />\n      <p>\n        So I pulled on the second thread, &ldquo;Take a little wine for thy\n        stomach&apos;s sake.&rdquo; Not cited in the film, of course, but this\n        is 1 Timothy 5:23. This is the only Bible verse quoted in the entire\n        film, it&apos;s casually tossed off, and yet it&apos;s the key to what\n        I&apos;m now dubbing my Dark Apostle theory. Open 1 Timothy 5 and you\n        will see that this chapter has a great deal to say about&hellip; WIDOWS.\n      </p>\n      <blockquote>\n        <p>\n          <sup>5</sup> Now she that is a widow indeed, and desolate, trusteth in God, and\n          continueth in supplications and prayers night and day.\n          <br /><sup>6</sup> <strong>But she that liveth in pleasure is dead while she liveth.</strong>\n        </p>\n      </blockquote>\n      <p>\n        Reading the chapter in full reveals that this may, in fact, be the\n        urtext for Uncle Charlie&apos;s entire mode of being.\n      </p>\n      <blockquote>\n        <p>\n          <sup>8</sup> But if any provide not for his own, and specially for those of his\n          own house, he hath denied the faith, and is worse than an infidel.\n        </p>\n      </blockquote>\n      <p>\n        Does this explain Charlie&apos;s constant gift-giving and promises to\n        purchase them a new house and car?\n      </p>\n      <blockquote>\n        <p>\n          <sup>13</sup> And withal they learn to be idle, wandering about from house to\n          house; and not only idle, but tattlers also and busybodies, speaking\n          things which they ought not.\n        </p>\n      </blockquote>\n      <p>\n        Is Charlie echoing this verse in his dinner table rant? &ldquo;You see\n        them in hotels, the best hotels, by the thousands, playing all afternoon\n        and all night, smelling of money, proud of their jewelry, proud of\n        nothing else.&rdquo;\n      </p>\n      <p>\n        I don&apos;t want to stretch this too far, but the simple fact that\n        Uncle Charlie quotes from a chapter that is all about widows is itself a\n        new discovery, as far as I&apos;ve been able to confirm.\n      </p>\n      <h2 id=\"the-conversion-of-uncle-charlie\">\n        The Conversion of Uncle Charlie\n      </h2>\n      <img src=\"https://mknepprath.com/assets/uncle-charlie-bicycle-accident-story.jpg\" alt=\"Young Charlie and Mrs. Newton listen to the bicycle accident story\" />\n      <p>\n        I mentioned earlier how odd I&apos;d found some of the phrasing, and\n        one of these moments is one degree away from the first mention of St.\n        Paul. Thanks to Uncle Charlie, we know he and Emma grew up in St. Paul,\n        Minnesota, and Emma later recounts the only story we hear about his\n        childhood.\n      </p>\n      <blockquote>\n        <p>\n          I always said Papa should never have bought you that bicycle. You\n          didn&apos;t know how to handle it! Why, Charlie, he took it right out\n          on the icy road and skidded into a street car. We thought he was going\n          to die. Well, he almost did, let me tell you. He had a fractured skull\n          and he was laid up so long, and when he got well, there was no holding\n          him. It was as though all that rest he got was too much for him and he\n          had to get into all sorts of mischief to blow off steam. He didn&apos;t\n          read much after that, let me tell you!\n        </p>\n      </blockquote>\n      <p>\n        Why all the trouble to lay out every step of this journey? I now believe\n        it&apos;s because it was meant to map one-to-one with another conversion\n        story. That&apos;s right. St. Paul&apos;s.\n      </p>\n      <table>\n        <thead>\n          <tr>\n            <th>Acts 9</th>\n            <th>Shadow of a Doubt</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td>&ldquo;as he journeyed, he came near Damascus&rdquo;</td>\n            <td>&ldquo;he took it right out on the icy road&rdquo;</td>\n          </tr>\n          <tr>\n            <td>&ldquo;he fell to the earth&rdquo;</td>\n            <td>&ldquo;skidded into a street car&rdquo;</td>\n          </tr>\n          <tr>\n            <td>&ldquo;his eyes were opened, he saw no man&rdquo;</td>\n            <td>&ldquo;He had a fractured skull&rdquo;</td>\n          </tr>\n          <tr>\n            <td>&ldquo;three days without sight&rdquo;</td>\n            <td>&ldquo;laid up so long&rdquo;</td>\n          </tr>\n          <tr>\n            <td>&ldquo;received sight… and was strengthened&rdquo;</td>\n            <td>&ldquo;when he got well&rdquo;</td>\n          </tr>\n          <tr>\n            <td>&ldquo;straightway he preached Christ&rdquo;</td>\n            <td>&ldquo;there was no holding him&rdquo;</td>\n          </tr>\n          <tr>\n            <td>Saul becomes devoted to the Word</td>\n            <td>&ldquo;He didn&apos;t read much after that&rdquo;</td>\n          </tr>\n        </tbody>\n      </table>\n      <p>\n        They both fell off of their rides and converted. Note that\n        Charlie&apos;s story is inverted.\n      </p>\n      <h2 id=\"the-dark-apostle-theory\">The Dark Apostle Theory</h2>\n      <p>\n        Uncle Charlie&apos;s conversion parallels St. Paul&apos;s, except he\n        transforms from a quiet reader to, eventually, a killer, who perverts\n        the text of St. Paul for his selfish and self-preserving ends. He\n        preaches throughout the movie (&ldquo;I seem to be making my speech\n        here&rdquo;), attempting to convert members of his family to his\n        violent, nihilistic view of the world. Uncle Charlie is an inverted\n        Paul, a dark apostle.\n      </p>\n      <p>\n        While I can&apos;t claim that Hitchcock intended for all of this, I&apos;m\n        confident Thornton Wilder did.\n        I now imagine Wilder had 1 Timothy 5 open beside him while writing this\n        entire screenplay. Important to note that Wilder was no stranger to\n        biblical allegory. His previous work was \n        <a href=\"https://en.wikipedia.org/wiki/The_Skin_of_Our_Teeth\">\n          The Skin of Our Teeth\n        </a>\n        .\n      </p>",
      "content_text": "I think I've made a new discovery about an 83-year-old film: Uncle Charlie as an inverted St. Paul, in a Thornton Wilder theological film. • https://mknepprath.com/writing/uncle-charlie-dark-apostle",
      "summary": "I think I've made a new discovery about an 83-year-old film: Uncle Charlie as an inverted St. Paul, in a Thornton Wilder theological film.",
      "image": "https://mknepprath.com/assets/uncle-charlie.jpg",
      "date_published": "2026-05-31T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/2025",
      "url": "https://mknepprath.com/writing/2025",
      "title": "2025 in Review",
      "content_html": "<img src=\"https://mknepprath.com/assets/2025-in-review-1.jpg\" alt=\"Disney World's Main Street at night\" />\n\n      <header>\n        <h1>2025 in Review</h1>\n      </header>\n\n      <p class=>Oof.</p>\n\n      <p>\n        I know nearly halfway through the year is an odd time to drop a\n        year-in-review for the previous year, but, I&apos;ll be honest, writing\n        a review of all the fun things I did in 2025 felt borderline\n        irresponsible in early 2026. Each time I sat down to write, another\n        American citizen would be shot or killed by ICE, the goon squad sent to\n        my home state under false pretenses - that it was full of undocumented\n        immigrants, which itself is national policy backed by false pretenses -\n        that immigrants are by and large dangerous, a fact not borne out by any\n        measure of evidence.\n      </p>\n\n      <p>\n        If ever I was going to slip into single-issue voter territory, it would\n        be on the issue of immigration due to the maximalist level of pain we\n        are inflicting on innocent families; adults and children, citizens and\n        non-citizens alike. They are being scapegoated in the most biblical\n        sense, death marched into camps and out of our country to carry the sins\n        of our discordance.\n      </p>\n\n      <p>\n        I have to give credit to Donald J. Trump for identifying how to hook people by\n        their virtues and vices in order to unleash a level of cruelty unlike\n        any man has been capable in centuries, save for perhaps one.\n      </p>\n\n      <h2>Travel</h2>\n\n      <img src=\"https://mknepprath.com/assets/2025-travel-map.jpg\" alt=\"Flighty travel map showing 2025 flights\" />\n\n      <h3>February: Minnesota</h3>\n\n      <div class=>\n        <img src=\"https://mknepprath.com/assets/2025-minnesota-bowling.jpg\" alt=\"Bowling in Minnesota\" />\n        <img src=\"https://mknepprath.com/assets/2025-minnesota-legos.jpg\" alt=\"Playing with Legos with family in Minnesota\" />\n      </div>\n\n      <img src=\"https://mknepprath.com/assets/2025-minnesota-winter.jpg\" alt=\"Winter morning in Minnesota\" />\n\n      <h3>March: Houston</h3>\n\n      <div class=>\n        <img src=\"https://mknepprath.com/assets/2025-houston-castle.jpg\" alt=\"Family in front of a castle reflected in a pond near Houston\" />\n        <img src=\"https://mknepprath.com/assets/2025-houston-bluebonnets.jpg\" alt=\"Jill among Texas bluebonnets\" />\n        <img src=\"https://mknepprath.com/assets/2025-houston-owen.jpg\" alt=\"Owen with a Blue Bell ice cream hat\" />\n      </div>\n\n      <h3>May: New Mexico</h3>\n\n      <p>\n        I visited Albuquerque again in May to attend a family funeral. Got to see a\n        lot of family that I hadn&apos;t seen since I was a child myself.\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/2025-albuquerque-family.jpg\" alt=\"Family gathered in Albuquerque\" />\n\n      <h3>June: Michigan</h3>\n\n      <p>My parents retired.</p>\n\n      <div class=>\n        <img src=\"https://mknepprath.com/assets/2025-michigan-retirement-party.jpg\" alt=\"Dad at the retirement party\" />\n        <img src=\"https://mknepprath.com/assets/2025-michigan-retirement-family.jpg\" alt=\"Family gathered for the retirement celebration\" />\n      </div>\n\n      <h3>August: Japan</h3>\n\n      <p>\n        We took a joint trip with my cousin and his family from Osaka to Kyoto\n        to Tokyo and ended in Tokyo Disneyland.\n      </p>\n\n      <iframe\n        allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\n        allowFullScreen\n        frameBorder=\"0\"\n        height=\"353\"\n        src=\"https://www.youtube.com/embed/WLrm3qDLxmo\"\n        title=\"Japan 2025\"\n        width=\"100%\"\n      ></iframe>\n\n      <h3>October/November: Disney World</h3>\n\n      <p>\n        Then we went back to Disney and took full advantage of our park hopper\n        tickets. We saw Cirque du Soleil.\n      </p>\n\n      <div class=>\n        <img src=\"https://mknepprath.com/assets/2025-disney-spooktacular.jpg\" alt=\"Mickey's Not-So-Scary Halloween Party spooktacular show\" />\n        <img src=\"https://mknepprath.com/assets/2025-disney-mandalorian.jpg\" alt=\"Owen with the Mandalorian at Disney World\" />\n        <img src=\"https://mknepprath.com/assets/2025-disney-star-wars-droid.jpg\" alt=\"Owen with a Star Wars droid at Disney World\" />\n      </div>\n\n      <h3>December: El Paso &amp; Cancun</h3>\n\n      <p>\n        We visited family and then our family split to relax on the beaches of\n        Cancun.\n      </p>\n\n      <div class=>\n        <img src=\"https://mknepprath.com/assets/2025-el-paso-hike.jpg\" alt=\"Hiking through a canyon in El Paso\" />\n        <img src=\"https://mknepprath.com/assets/2025-el-paso-family.jpg\" alt=\"Family resting during the El Paso hike\" />\n      </div>\n\n      <img src=\"https://mknepprath.com/assets/2025-cancun.jpg\" alt=\"Owen relaxing at the Cancun resort\" />\n\n      <h2>2025 in Film</h2>\n\n      <h3>Superman (2025)</h3>\n\n      <p>\n        In early 2024, a casting call for Cleveland-based extras came through my\n        feed and after a bit of digging I learned that it was, in fact, James\n        Gunn&apos;s next film: Superman. Only a month or two after submitting\n        Owen&apos;s application, we learned that he had been selected to appear\n        in the film. We spent a day in July on set and got to see Gunn at work.\n        It was awesome seeing Cleveland fully decked out as Metropolis.\n      </p>\n\n      <p>\n        Opening day, July 2025, our whole family waited in the theater\n        impatiently wondering if Owen had made the final cut. At a little over an\n        hour in, there he was! You can spot him in a line of extras hopping on a\n        bus to escape Metropolis.\n      </p>\n\n      <div class=>\n        <img src=\"https://mknepprath.com/assets/2025-superman-onset.jpg\" alt=\"Owen in his extra costume on the Superman film set\" />\n        <img src=\"https://mknepprath.com/assets/2025-superman-opening-day.jpg\" alt=\"Owen in front of the Superman movie poster on opening day\" />\n      </div>\n\n      <img src=\"https://mknepprath.com/assets/2025-superman-movie-still.jpg\" alt=\"Owen visible among the extras boarding a bus in Superman (2025)\" />\n\n      <h3>CIFF49</h3>\n\n      <p>\n        2024 was the first CIFF I attended, 2025 was my first CIFF on the\n        screening team. Each week, I was assigned a slate of short and\n        feature-length films to watch and review, ultimately helping to decide\n        what would be shown at the festival.\n      </p>\n\n      <h3>Ghibli Park</h3>\n\n      <p>\n        Our journey with the work of Miyazaki and his compatriots continued\n        during our trip to Japan where we did a day trip to visit Ghibli Park, a\n        full theme park based on Studio Ghibli films.\n      </p>\n\n      <div class=>\n        <img src=\"https://mknepprath.com/assets/2025-ghibli-family.jpg\" alt=\"Family in front of Kiki's bakery at Ghibli Park\" />\n        <img src=\"https://mknepprath.com/assets/2025-ghibli-totoro.jpg\" alt=\"Owen and Jill sitting with a large Totoro at Ghibli Park\" />\n      </div>\n\n      <h3>Reviews</h3>\n\n      <ul>\n        <li>\n          <strong>Superman (2025)</strong>: It&apos;s corny, episodic,\n          throwaway, a single-issue comic brought to life. It embraces the\n          freedom comics have always had to experiment, be messy, speak to the\n          moment, be idealistic, naive, optimistic, and colorful.\n        </li>\n        <li>\n          <strong>Sinners (2025)</strong>: Coogler&apos;s made some of my\n          favorite movies, yet I still didn&apos;t realize he had something like\n          this in him. Has all the trappings of a blockbuster hit and the depth\n          of the most intimate autobiography. Deserves an essay, but I&apos;ll\n          save that for a future review. He cashed that check!!\n        </li>\n        <li>\n          <strong>I&apos;m Still Here (2025)</strong>: The first hour is\n          crucial, as it makes you feel the hole that&apos;s torn through their\n          lives more than if they&apos;d jumped right into the action, and\n          it&apos;s a major credit to the cast that they were charming enough to\n          make it work. I didn&apos;t know about this time period in Brazil. I\n          feel like I&apos;ve lived an entire life. Seeing the real photos at\n          the end was a real gut punch.\n        </li>\n        <li>\n          <strong>The Apartment (1960)</strong>: The best movies aren&apos;t\n          puzzle boxes. They aren&apos;t thrill rides or epics. While movies can\n          be all of these things, the best ones are those that plumb the depths\n          of humanity for that which can&apos;t be mathed out. They uncover the\n          spark within each of us: a universal yearning to be, simply, perceived.\n</li>\n        <li>\n          <strong>Stop Making Sense (1984)</strong>: Crescendos perfectly.\n        </li>\n        <li>\n          <strong>Grizzly Man (2005)</strong>: Herzog crafted this film like the\n          shield of Perseus, diluting the cursed events through refraction in\n          such a way that we can study, or at least gawk, at them. Like\n          Treadwell, you can feel Herzog being drawn to the void for answers:\n          &ldquo;I discover no kinship, no understanding, no mercy.&rdquo; He\n          sees a man who overdosed on peering into it and takes a hit himself.\n          No moment captures this better than when we&apos;re watching him\n          listen to the audio tape from Treadwell&apos;s final moments: \n          &ldquo;I think you should not keep it. You should destroy it.&rdquo;\n          This was my first Herzog, yet this was so competently made that I\n          didn&apos;t believe for an instant that the interviews being shot like\n          a man investigating and even admiring wild animals were anything but\n          intentional.\n        </li>\n        <li>\n          <strong>John Carpenter</strong>: I was very prepared for\n          Carpenter&apos;s later films to be a slog to get through, but I was\n          having the time of my life. It struck me that his raw shooting style\n          would have really lent itself to a Ranown-like series of westerns, and\n          it&apos;s too bad his career was completely misaligned with the time\n          when westerns could actually get made. Carpenter just knows how to\n          shoot a movie. Didn&apos;t think I&apos;d come out of this one\n          thinking he should come back for another, but… he totally should.\n          Carpenter passed Buster Keaton to be my most watched director in 2025.\n        </li>\n        <li>\n          <strong>Buster Keaton</strong>: My most watched actor, once again.\n          Buster is a director torn between practical stunts and fantasy, the\n          latter having the potential to detract from the former, despite his\n          clear love for both. The challenge for Buster, then, is balancing how\n          many superhuman stunts, extraordinary people, and fantastical places\n          he can include without diminishing the spectacle of these elements.\n          Stunts require grounding, as anything can happen in a heightened\n          unreality. I think he found that balance.\n        </li>\n      </ul>\n\n      <h2>Books</h2>\n\n      <ul>\n        <li>\n          <a href=\"https://www.goodreads.com/book/show/4153.Reconstruction_America_s_Unfinished_Revolution_1863_1877\">\n            Reconstruction\n          </a> \n          by Eric Foner, a long-running battle to get through\n        </li>\n        <li>\n          <a href=\"https://www.goodreads.com/book/show/33917107-on-tyranny\">\n            On Tyranny\n          </a> \n          by Timothy Snyder\n        </li>\n        <li>\n          <a href=\"https://www.goodreads.com/series/64016-astro-boy\">\n            Astro Boy\n          </a> \n          by Osamu Tezuka\n        </li>\n        <li>\n          <a href=\"https://www.goodreads.com/book/show/485894.The_Metamorphosis\">\n            The Metamorphosis\n          </a>\n          , Kafka while running\n        </li>\n        <li>\n          <a href=\"https://www.goodreads.com/book/show/93389.Something_Like_an_Autobiography\">\n            Something Like an Autobiography\n          </a> \n          by Akira Kurosawa\n        </li>\n        <li>\n          <a href=\"https://www.goodreads.com/series/191900-the-murderbot-diaries\">\n            Murderbot\n          </a> \n          by Martha Wells\n        </li>\n        <li>\n          <a href=\"https://www.goodreads.com/book/show/222376640-enshittification\">\n            Enshittification\n          </a> \n          by Cory Doctorow\n        </li>\n      </ul>\n\n      <h2>Highlights</h2>\n\n      <ul>\n        <li>\n          <strong>Spamalot</strong> - went in not knowing it was literally The\n          Holy Grail. Luckily I had watched that movie with Owen within the last\n          year. One of my favorites, hilarious play!\n        </li>\n        <li>\n          <strong>House renovations</strong> - hired a carpenter to convert the\n          office into a studio and the spare bedroom into an office with\n          floor-to-ceiling shelves.\n        </li>\n        <li>\n          <strong>Marathon training</strong> - My sister signed me up for a\n          marathon in June, so I started training. Ran through the winter. If\n          you&apos;ve seen my recent posts, you&apos;ll know the result - more\n          details in the next year in review update.\n        </li>\n        <li>\n          <strong>Kendrick Super Bowl, on artistry</strong> - I&apos;m obsessed\n          with Kendrick&apos;s music, a true lyricist and artist. The Super Bowl\n          was a real culminating moment. Not just a show, but a capstone to a\n          year of incredible work.\n        </li>\n        <li>\n          <strong>Biking</strong> - Had not owned bikes in Ohio, bought a pair\n          for me and my son. He learned fast.\n        </li>\n        <li>\n          <strong>Walkabout</strong> - mini golf. New levels. Great fun.\n        </li>\n      </ul>\n\n      <div class=>\n        <img src=\"https://mknepprath.com/assets/2025-renovation-shelves-a.jpg\" alt=\"New floor-to-ceiling library shelves in the renovated office\" />\n        <img src=\"https://mknepprath.com/assets/2025-renovation-shelves-b.jpg\" alt=\"Renovated office with built-in shelving\" />\n      </div>\n\n      <img src=\"https://mknepprath.com/assets/2025-taekwondo.jpg\" alt=\"Taekwondo belt promotion\" />\n\n      <h2>Until Next Time</h2>\n\n      <p>\n        The technology cultivated by my heroes has curdled into dystopian\n        surveillance tools used for rampant rent-seeking, the mass roundup and\n        black bag capture of the most needy among us, and the mistreatment and\n        even murder of those who so much as make a wrong step.\n      </p>\n\n      <p>\n        Social media is not a neutral mediator. Removing it means more direct\n        interactions: more time with family, friends, neighbors.\n      </p>\n\n      <p>This is an invitation to reach out.</p>\n\n      <img src=\"https://mknepprath.com/assets/2025-winter-christmas.jpg\" alt=\"Christmas tree and decorations\" />",
      "content_text": "A look at my accomplishments during the past year. • https://mknepprath.com/writing/2025",
      "summary": "A look at my accomplishments during the past year.",
      "image": "https://mknepprath.com/assets/2025-in-review-1.jpg",
      "date_published": "2026-05-20T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/lily-dex-revisited",
      "url": "https://mknepprath.com/writing/lily-dex-revisited",
      "title": "lily dex, revisited",
      "content_html": "<img src=\"https://mknepprath.com/assets/lily-dex-hero.jpg\" alt=\"lily dex artwork\" />\n\n      <header>\n        <h1>lily dex, revisited</h1>\n      </header>\n\n      <p>\n        The first version of lily dex was a simple catch tracker. You&apos;d\n        scroll through the Pokédex, tap the ones you&apos;d caught, and that\n        was it.\n      </p>\n\n      <p>That was 2020. A lot has changed.</p>\n\n      <p>\n        lily dex is now a full Pokémon GO companion. There&apos;s a Pokédex\n        covering every region from Kanto through Paldea with catch and shiny\n        tracking. PvP IV rankings for every battle league. An event calendar\n        that pulls from community sources so you never miss a Community Day.\n        Home screen widgets that show your progress at a glance.\n      </p>\n\n      <p>A few things I focused on this time around:</p>\n\n      <p>\n        <b>It should feel good.</b> Most companion apps treat design as an\n        afterthought. I wanted lily dex to feel like an app you actually enjoy\n        opening. The Pokédex is fast, filterable, and browsable. The widgets\n        look great on your home screen. The interactions are responsive.\n      </p>\n\n      <p>\n        <b>Events should be proactive.</b> The event calendar pulls from \n        <a\n          href=\"https://leekduck.com\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          Leek Duck&apos;s\n        </a> \n        community calendar and lets you filter by event type: Community Day,\n        Raid Bosses, Research Days, GBL seasons. You can set up push\n        notifications for just the types you care about. No more missing a\n        Spotlight Hour because you forgot to check social media.\n      </p>\n\n      <p>\n        <b>PvP should be accessible.</b> The battle tab shows rankings and IV\n        analysis for Great, Ultra, and Master League. If you catch something\n        and want to know if it&apos;s worth powering up, you can check in\n        seconds.\n      </p>\n\n      <p>\n        <b>No ads.</b> The core Pokédex and event calendar are free. The Ace\n        Trainer upgrade unlocks PvP rankings, event notifications, shiny\n        hunting mode, and alternative app icons.\n      </p>\n\n      <p>\n        lily dex is on the App Store now. If you play Pokémon GO, I&apos;d\n        love for you to \n        <a href=\"https://lilydex.com\">try it</a>.\n      </p>",
      "content_text": "lily dex grew from a simple catch tracker into a full Pokémon GO companion • https://mknepprath.com/writing/lily-dex-revisited",
      "summary": "lily dex grew from a simple catch tracker into a full Pokémon GO companion",
      "image": "https://mknepprath.com/assets/lily-dex-hero.jpg",
      "date_published": "2026-03-19T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/mad-max-fury-road",
      "url": "https://mknepprath.com/writing/mad-max-fury-road",
      "title": "My Review of Mad Max: Fury Road (2015)",
      "content_html": "<img src=\"https://mknepprath.com/assets/mad-max-fury-road.jpg\" alt=\"A still from the film Mad Max: Fury Road (2015).\" />\n      <header>\n        <h1>My Review of Mad Max: Fury Road (2015)</h1>\n      </header>\n      <blockquote>\n        “How much more can they take from me? They’ve got my blood, now it’s my\n        car!”\n      </blockquote>\n      <h2>A Quick Summary</h2>\n      <p>\n        Max gets captured and strapped to the front of a car. Meanwhile,\n        Furiosa steals Immortan Joe’s wives and makes a run for The Green\n        Place. Max eventually tags along. Turns out The Green Place is gone, so\n        they have to go back the way they came. The whole movie is basically\n        one long car chase, and it rules.\n      </p>\n      <h2>Reception at the Time</h2>\n      <p>\n        <i>Mad Max: Fury Road</i> came out and everyone lost their minds.\n        Critics were falling over themselves asking if it was too soon to call\n        it one of the greatest action films ever made.\n      </p>\n      <p>\n        In my memory, this film came out of nowhere. I hadn’t seen the previous \n        <i>Mad Max</i> movies and didn’t have any particular attachment to\n        them. The trailers were hard to parse but looked cool. I saw\n        it in theaters twice, once with my wife, and again when we dragged my\n        dad to it after being completely blown away.\n      </p>\n      <h2>How It’s Aged</h2>\n      <p>\n        How a film lands is always shaped by context. Marketing, current\n        events, what else came out that year. Critics are usually cautious\n        about calling something an instant classic, and that makes sense.\n      </p>\n      <p>\n        Ten years later, that caution feels unnecessary.\n      </p>\n      <p>\n        The book <i>Blood, Sweat & Chrome</i> is great if you&apos;re into\n        filmmaking. The sequel had to figure out how you follow something\n        this good. And\n        culturally, <i>Fury Road</i> stuck in a way the earlier films never\n        did. “Witness me!” shows up everywhere, from <i>The LEGO Movie 2</i> \n        to <i>Deadpool & Wolverine</i>.\n      </p>\n      <p>\n        For me, it changed how I think about movies. Not as stuff you\n        watch once and forget, but as things that can last. If \n        <i>Fury Road</i> is going to show its age, ten years wasn’t enough.\n        The technique, the pace, the world. It all still holds up.\n      </p>\n      <h2>Best Parts</h2>\n      <p>\n        Furiosa. Charlize Theron was already a star, but this put her\n        somewhere else entirely. Making a <i>Mad Max</i> \n        film where Max is basically a side character is a weird call, but it\n        works because Furiosa is that good. She got her own movie later. That’s\n        how good this character is.\n      </p>\n      <p>\n        Nux surprised me on rewatch. He ends up with the most memorable lines\n        and the biggest transformation in the whole film. First time I saw it,\n        I lost track of him in the chaos. Now he feels like a co-lead. “Oh,\n        what a day. What a lovely day!”\n      </p>\n      <p>\n        The set pieces are unreal. After going back and watching the earlier \n        <i>Mad Max</i> films, I realized the first thirty minutes of \n        <i>Fury Road</i> alone is the best <i>Mad Max</i> movie ever made.\n        And then it just keeps going. Each sequence has its own thing going on,\n        its own rhythm, and somehow it keeps escalating.\n      </p>\n      <p>\n        The world-building through dialogue is incredible. You get just\n        enough to completely buy this as a future Earth. “I should be\n        McFeasting with the heroes of all\n        time.”\n      </p>\n      <h2>Overall</h2>\n      <p>\n        <i>Fury Road</i> is exactly the kind of film Tardy Critic was made\n        for. Critics hedged ten years ago. I won’t. \n        <i>Mad Max: Fury Road</i> is one of the greatest action films ever\n        made.\n      </p>\n      <blockquote>”Mediocre!”</blockquote>\n\n      <hr />\n\n      <em>\n        Published on \n        <a href=\"https://letterboxd.com/tardycritic/film/mad-max-fury-road/\">\n          Tardy Critic\n        </a>\n        , a film blog where movies are reviewed ten years late.\n      </em>",
      "content_text": "My review celebrating the 10th anniversary of Mad Max: Fury Road. • https://mknepprath.com/writing/mad-max-fury-road",
      "summary": "My review celebrating the 10th anniversary of Mad Max: Fury Road.",
      "image": "https://mknepprath.com/assets/mad-max-fury-road.jpg",
      "date_published": "2025-05-15T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/avengers-age-of-ultron",
      "url": "https://mknepprath.com/writing/avengers-age-of-ultron",
      "title": "My Review of Avengers: Age of Ultron (2015)",
      "content_html": "<img src=\"https://mknepprath.com/assets/avengers-age-of-ultron.jpg\" alt=\"A still featuring Vision and Ultron from the film Avengers: Age of Ultron (2015).\" />\n      <header>\n        <h1>My Review of Avengers: Age of Ultron (2015)</h1>\n      </header>\n      <blockquote>\n        “I am not Ultron. I am not J.A.R.V.I.S. I am… I am.” : Vision\n      </blockquote>\n      <h2>A Quick Summary</h2>\n      <p>\n        A traumatized Tony Stark takes matters into his own hands, building an\n        army of Iron Men in the name of peace, only for it to fall into the\n        hands of someone not so different from… himself? The Avengers reassemble\n        to stop his creation before it brings about “peace in our time.”\n      </p>\n      <h2>Reception at the Time</h2>\n      <p>\n        <i>Avengers: Age of Ultron</i>, the second big team-up film in the\n        Marvel Cinematic Universe, received mixed-to-positive reviews upon\n        release. It was knocked for being messy, exposition-heavy, and full of\n        setup for future Marvel properties. This likely didn’t impact its box\n        office take, however, as it ended up in the top 10 for all-time gross\n        and is currently sitting in 18th place with a lifetime worldwide gross\n        of 1.4 billion dollars.\n      </p>\n      <h2>How It’s Aged</h2>\n      <p>\n        This one’s gotten better with time. It might be the rare case where ten\n        years isn’t enough distance to fully review it. So much of its legacy\n        depends on what came after:Wanda’s arc, Vision’s existence, the Infinity\n        Stones, Wakanda, even the road Tony ends up on. The movie feels more\n        relevant now within the MCU than it did at the time.\n      </p>\n      <p>\n        At the core is a surprisingly focused theme: playing god. Tony tries to\n        create peace and ends up creating a monster. Ultron immediately starts\n        quoting scripture, shaping his apocalyptic logic around phrases like\n        “Ask Noah” and “Peace in our time.” It’s not subtle. Vision, born from\n        the wreckage, literally says, “I am…” This is Marvel doing Frankenstein\n        by way of technotheism, and for once, the mess kind of fits the message.\n      </p>\n      <p>\n        Also worth noting: Marvel literally changed the movie post-release. The\n        Thor vision sequence, once a confusing tangent, has been cut down and\n        re-edited on Disney+ to focus on the Infinity Stones. It works better\n        now. My main gripe? Gone.\n      </p>\n      <h2>Best Parts</h2>\n      <p>\n        James Spader’s Ultron. He’s a dark Tony Stark with a god complex and the\n        deadpan delivery to match. Ultron can’t tell the difference between\n        saving the world and destroying it. “Where do you think he gets that?”\n      </p>\n      <p>\n        Wanda’s visions. Her actions spark Tony’s anxiety spiral and indirectly\n        kick off the entire second half of the Infinity Saga. She might actually\n        be the main villain here, depending on how you look at it, though that\n        dynamic shifts by the end.\n      </p>\n      <p>\n        Quicksilver has a great introduction. “You didn’t see that coming?”\n        cracked me up. The moment where he grabs Thor’s hammer mid-fight is so\n        great. Wish we got more of him.\n      </p>\n      <p>\n        Vision’s birth scene hit completely different this time around. They go\n        full Universal Monsters. He’s created in a coffin and brought to life by\n        a team of mad scientists. I never fully registered it before, but this\n        is Frankenstein’s monster, born of Thor’s lightning. One of the most\n        thematically loaded scenes Marvel’s ever done that now 100% works for me\n        when it previously did not. “We’re mad scientists. We’re monsters,\n        buddy.”\n      </p>\n      <h2>Overall</h2>\n      <p>\n        <i>Age of Ultron</i> has always been a little messy, but that’s part of\n        the appeal now. It swings big, it builds out half the future of the MCU,\n        and it gives us one of the most interesting villains in the franchise.\n        It’s also one of the few Marvel films that actually wrestles with power;\n        how it’s created, who controls it, and what happens when your creation\n        turns on you. You’ve never seen a Frankenstein movie like this.\n      </p>\n      <p>And somehow, it still holds together. More than that, it holds up.</p>\n      <blockquote>“That up there, that’s the endgame.” : Tony Stark</blockquote>\n\n      <hr />\n\n      <em>\n        Published on \n        <a href=\"https://letterboxd.com/tardycritic/film/avengers-age-of-ultron/\">\n          Tardy Critic\n        </a>\n        , a film blog where movies are reviewed ten years late.\n      </em>",
      "content_text": "My review celebrating the 10th anniversary of Avengers: Age of Ultron. • https://mknepprath.com/writing/avengers-age-of-ultron",
      "summary": "My review celebrating the 10th anniversary of Avengers: Age of Ultron.",
      "image": "https://mknepprath.com/assets/avengers-age-of-ultron.jpg",
      "date_published": "2025-05-01T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/mem",
      "url": "https://mknepprath.com/writing/mem",
      "title": "Note-taking",
      "content_html": "<img src=\"https://mknepprath.com/assets/mem.jpg\" alt=\"Michael Knepprath doing a brain dump.\" />\n\n      <header>\n        <h1>Note-taking</h1>\n      </header>\n\n      <p>\n        It&apos;s the same old story: your current note-taking app is just not\n        cutting it. You&apos;ve tried all the popular ones, but they all seem to\n        fall short in some way. Apple Notes, Bear, Notion, Craft, Obsidian,\n        Capacities... you name it. After spiraling for a while, I finally\n        realized that none of these apps actually solve the core problem of\n        note-taking. The issue isn&apos;t taking the notes themselves. That part\n        is easy. The real issue is everything that comes after. The real issue\n        is, simply, time.\n      </p>\n\n      <p>\n        These apps offer great tooling for writing, formatting, organizing and\n        sharing notes, sure, but without the time to actually format and\n        organize every note, they become disconnected and difficult to find.\n        This defeats the purpose of taking notes in the first place. You end up\n        with a dump of disparate, useless notes that you can&apos;t find when\n        you need them.\n      </p>\n\n      <p>\n        I think I&apos;ve finally found a note-taking app that addresses this\n        head-on: \n        <a href=\"https://get.mem.ai/\">\n          <strong>Mem</strong>\n        </a>\n        . With Mem, I can scratch down my notes as always without worrying about\n        organization, tagging, categorizing, anything. That&apos;s it. Then,\n        when I need to find something later, I can just ask for it.\n      </p>\n\n      <p>Some cool examples:</p>\n      <ul>\n        <li>\n          I have a note about my cars, and I&apos;m able to ask Mem to pull up\n          my license plate number. Little pieces of information like this that\n          don&apos;t come up that often can be hard to find in a sea of notes,\n          but Mem displays them immediately.\n        </li>\n        <li>\n          I have a number of notes that follow a similar template, but I&apos;d\n          never written down the template itself. I was able to ask Mem to\n          generate the template for me, and it did, no problem.\n        </li>\n        <li>\n          I can even ask Mem to summarize my notes from the past week, and it\n          will do that too. Great for preparing for one-on-ones at work or just\n          keeping track of what I&apos;ve been up to.\n        </li>\n      </ul>\n      <p>\n        If I need a piece of information, I just ask for it. The LLM does a\n        better job than a simple string search because it&apos;s able to connect\n        the dots between notes even when they don&apos;t necessarily use the\n        same keywords.\n      </p>\n\n      <p>\n        Maybe even more exciting to me is how it&apos;s allowed me to loosen up\n        with my note-taking. I can just write down whatever I want, and Mem will\n        have that information for me later. I used to be strict about including\n        a title for every note, but now I don&apos;t feel the need to do that\n        every time. I&apos;ve even started to dictate notes for the first time.\n      </p>\n\n      <p>\n        What I&apos;m saying is, Mem lets my notes be notes and not an\n        aspirational wiki. I&apos;m tired of that, and while I previously saw it\n        as a personal failing, now I say: embrace it and use a tool that does\n        that work for you.\n      </p>\n\n      <p>\n        <a href=\"https://get.mem.ai/\">Mem</a> finally lets note-taking be just\n        that. Note-taking.\n      </p>\n\n      <p>\n        <em>\n          Note: This is my opinion. I hold that LLMs are much more interesting\n          for human-to-computer interaction than for human-to-human interaction\n          (\n          <Link href=\"/writing/where-gpt-belongs\">\n            Microsoft Is Using GPT-4 Wrong\n          </Link>\n          ), as is the case here. If you have thoughts or concerns, that&apos;s\n          fine - feel free to \n          <a href=\"https://mastodon.social/@mknepprath\">message me</a>.\n        </em>\n      </p>",
      "content_text": "Why all these other apps are wrong (except Mem?). • https://mknepprath.com/writing/mem",
      "summary": "Why all these other apps are wrong (except Mem?).",
      "image": "https://mknepprath.com/assets/mem.jpg",
      "date_published": "2025-05-01T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/2024",
      "url": "https://mknepprath.com/writing/2024",
      "title": "2024 in Review",
      "content_html": "<img src=\"https://mknepprath.com/assets/2024-in-review-6.jpg\" alt=\"Three photos from 2024.\" />\n\n      <header>\n        <h1>2024 in Review</h1>\n      </header>\n\n      <p>Happy New Year, folks!</p>\n\n      <p>\n        Even though I’m a couple weeks late, I’m taking this opportunity to\n        fully convert this status report into a Christmas letter. My earlier\n        annual updates were fun, I hope, but also very analytical. I’m not about\n        that anymore. As “AI” takes a more integral role in all of our lives,\n        it’s time to embrace being human. Here’s how my 2024 went:\n      </p>\n\n      <h2>Family Moments</h2>\n\n      <ul>\n        <li>\n          My wife finished her first year as a surgery resident and is halfway\n          through her second year. So proud of her!\n        </li>\n        <li>\n          My son started Taekwondo and earned a yellow belt. He also got big\n          into Pokémon cards and won 1st place in a local Pokémon League\n          tournament.\n        </li>\n        <li>I ran a 5K in September and placed 75th out of 186 runners.</li>\n        <li>\n          Cleveland was in the path of totality in April 2024. My son and I took\n          a tram to a park where a crowd had gathered to experience the eclipse\n          together.\n        </li>\n        <li>\n          My son spent weeks staying after school with his whole class to\n          prepare for a production of <em>Beauty and the Beast Jr.</em> We went\n          to every show!\n        </li>\n        <li>\n          I saw <em>My Brother, My Brother and Me</em> live during their Twenty\n          Fungalore tour. 🍄\n        </li>\n      </ul>\n\n      <img src=\"https://mknepprath.com/assets/2024-in-review-13.jpg\" alt=\"Three photos from 2024.\" />\n\n      <ul>\n        <li>\n          My wife and I went to The Cleveland Museum of Natural History’s grand\n          opening after it had been under renovation for years.\n        </li>\n        <li>\n          I took my son to the Greater Cleveland Aquarium and saw sharks!!!\n        </li>\n        <li>\n          We got into LEGO and worked together to build the Super Mario 64\n          Question Mark Block, the Sanderson Sisters’ Cottage, the Medieval Town\n          Square, and more.\n        </li>\n      </ul>\n\n      <img src=\"https://mknepprath.com/assets/2024-in-review-8.jpg\" alt=\"Three photos from 2024.\" />\n\n      <p>Beyond these, 2024 was primarily a year of travel and film.</p>\n\n      <h2>Travel</h2>\n\n      <p>\n        Early in the year, I bought a Fujifilm X-E4, my first camera beyond a\n        phone. I packed it for all our trips, capturing moments from Michigan to\n        Hawaii.\n      </p>\n\n      <h3>March: Hawaii</h3>\n\n      <img src=\"https://mknepprath.com/assets/2024-in-review-2.jpg\" alt=\"Three photos from 2024.\" />\n\n      <p>\n        This was our second trip to Hawaii, my son’s first, and he adored it.\n        While we went whale-watching and horseback riding, his favorite part was\n        just hanging out on the beach.\n      </p>\n\n      <h3>June: Disney World</h3>\n\n      <img src=\"https://mknepprath.com/assets/2024-in-review-5.jpg\" alt=\"Three photos from 2024.\" />\n\n      <p>\n        I’m the only one in my family who had been to Disney World, so we took\n        the rare Cleveland direct flight down and spent five days exploring each\n        of the parks. Highlights were Rise of the Resistance, Remi’s Ratatouille\n        Adventure, and Flight of Passage.\n      </p>\n\n      <h3>June: Michigan</h3>\n\n      <img src=\"https://mknepprath.com/assets/2024-in-review-7.jpg\" alt=\"Three photos from 2024.\" />\n\n      <p>\n        We drove up to Michigan to visit my family and enjoyed some great\n        weather and fun outdoor activities. In the evening, we played the board\n        game Splendor.\n      </p>\n\n      <h3>August: New Mexico</h3>\n\n      <img src=\"https://mknepprath.com/assets/2024-in-review-10.jpg\" alt=\"Three photos from 2024.\" />\n\n      <p>\n        Finally, we flew down to Albuquerque to visit my grandmother. We went to\n        the zoo and took a tram up to the top of the Sandia Mountains.\n      </p>\n\n      <h2>Film Highlights</h2>\n\n      <h3>CIFF48</h3>\n\n      <p>\n        In 2023, I discovered the Cleveland International Film Festival (CIFF)\n        after wandering past its headquarters. This quickly escalated to me\n        becoming a member and attending the festival in April. I saw a ton of\n        great movies, including the French film Infested, Ghostlight, Humanist\n        Vampire Seeking Consenting Suicidal Person, and my favorite of the\n        festival, Secret Mall Apartment. This last one is a documentary about a\n        group of artists who find an open but difficult-to-access space within\n        the negative space of a mall structure and decide to move in. Equal\n        parts protest cinema and performance art, I had a lot of fun watching it\n        and even had the good fortune of chatting with the primary subject and\n        star of the film, Michael Townsend. My review:\n      </p>\n\n      <FilmPost\n        url=\"https://letterboxd.com/mknepprath/film/secret-mall-apartment/\"\n        title=\"Secret Mall Apartment\"\n        summary=\"A little bit Nathan Fielder, without any of the cynicism. I expected a\n        good time, but I was surprised by how much it turned into a personal\n        nostalgia trip. It brought back memories of me and my art friends\n        sneaking around the tunnels beneath our college campus..\"\n        date=\"2024-04-12\"\n        id=\"secret-mall-apartment\"\n        action=\"Reviewed\"\n        image=\"https://a.ltrbxd.com/resized/film-poster/1/1/2/1/2/4/6/1121246-secret-mall-apartment-2024-0-230-0-345-crop.jpg\"\n      />\n\n      <img src=\"https://mknepprath.com/assets/2024-in-review-3.jpg\" alt=\"Three photos from 2024.\" />\n\n      <p>\n        My journey with CIFF did not end there. Later in the year, I had the\n        honor of joining CIFF as a screening judge, helping to select films for\n        CIFF49. It’s been a rewarding experience.\n      </p>\n\n      <h3>The ‘Hundreds of Beavers’ Great Lakes Roadshow</h3>\n\n      <p>\n        Yes, this deserves its own dedicated section in my 2024 review. I’d been\n        anticipating this film for months, maybe even years, obsessively\n        rewatching the trailer when I discovered it would be playing at our\n        local cinematheque as a part of a tour they deemed the Great Lakes\n        Roadshow. I immediately bought a poster and tickets and dragged my\n        family out to see it. The director and star were there for a Q&A\n        alongside a collection of costumed animals running around, causing a\n        ruckus. We had so much fun, and I have the signed poster hanging next to\n        me on the wall as I type this right now.\n      </p>\n\n      <FilmPost\n        url=\"https://letterboxd.com/mknepprath/film/hundreds-of-beavers/\"\n        title=\"Hundreds of Beavers (2022)\"\n        summary=\"Watched at the Cleveland Cinematheque. Congratulations to all involved\n        for saving silent cinema! Delivers on every level, and the tour\n        experience with the cast and characters present rocked. You haven’t\n        lived until you’ve had Cheslik scream at you about stop-motion.\n        My 10-year-old’s review: I loved it, five stars. It’s just so epic, so\n        many laughs. Many, many laughs. I think it was really good because it\n        wasn’t made by a giant company. It shows some inspiration that people\n        can do a lot with what they have.\"\n        date=\"2024-02-04\"\n        id=\"hundreds-of-beavers\"\n        action=\"Reviewed\"\n        image=\"https://a.ltrbxd.com/resized/film-poster/9/1/9/0/6/8/919068-hundreds-of-beavers-0-230-0-345-crop.jpg\"\n      />\n\n      <img src=\"https://mknepprath.com/assets/2024-in-review-14.jpg\" alt=\"Three photos from 2024.\" />\n\n      <h3>Buster Keaton</h3>\n\n      <p>\n        After years of watching Buster Keaton’s films on repeat, I finally saw\n        Sherlock Jr. on the big screen:exactly 100 years after its release. My\n        son was the youngest attendee by far, but he loved it. Seeing it in a\n        theater was magical, especially since the film itself takes place in a\n        movie theater.\n      </p>\n\n      <FilmPost\n        url=\"https://letterboxd.com/mknepprath/film/sherlock-jr/\"\n        title=\"Sherlock Jr. (1924)\"\n        summary=\"Watched at the Cleveland Cinematheque. Enjoyed hearing someone behind me\n        go, “…what,” when Buster jumped through a man’s chest.\"\n        date=\"2024-02-17\"\n        id=\"sherlock-jr\"\n        action=\"Reviewed\"\n        image=\"https://a.ltrbxd.com/resized/alternative-poster/5/1/1/7/7/p/yXYkE9m8R42i6H1YVVKLJoYTM6X-0-230-0-345-crop.jpg\"\n      />\n\n      <img src=\"https://mknepprath.com/assets/2024-in-review-9.jpg\" alt=\"Three photos from 2024.\" />\n\n      <h3>Miyazaki and Studio Ghibli</h3>\n\n      <p>\n        Our family loves everything Miyazaki and made it out to see a couple of\n        his films in theaters this year thanks to Ghibli Fest 2024. We saw\n        Princess Mononoke in July and Ponyo in August. I snuck in a viewing of\n        The Kingdom of Dreams and Madness before rewatching The Boy and the\n        Heron with my son. Ponyo, in particular, really popped for me on the big\n        screen.\n      </p>\n\n      <FilmPost\n        url=\"https://letterboxd.com/mknepprath/film/ponyo/\"\n        title=\"Ponyo (2008)\"\n        summary=\"In theaters, subtitled. Felt like I was watching a completely new, much\n        better film. Couldn’t stop staring at those backgrounds. Is this the\n        best movie ever made?\"\n        date=\"2024-08-03\"\n        id=\"ponyo\"\n        action=\"Reviewed\"\n        image=\"https://a.ltrbxd.com/resized/alternative-poster/4/4/5/9/4/ptt/22444/ponyo-on-the-cliff-by-the-sea-md-web-0-230-0-345-crop.jpg\"\n      />\n\n      <div class=>\n        <Card\n          description=\"1997\"\n          href=\"https://letterboxd.com/mknepprath/film/princess-mononoke/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/sm/upload/fu/5h/fp/mj/mNqZOtJIQfFQPjo3hmYLIn8Qqhf-0-230-0-345-crop.jpg\"\n          title=\"Princess Mononoke\"\n        />\n        <Card\n          description=\"2008\"\n          href=\"https://letterboxd.com/mknepprath/film/ponyo/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/4/4/5/9/4/44594-ponyo-0-230-0-345-crop.jpg\"\n          title=\"Ponyo\"\n        />\n        <Card\n          description=\"2023\"\n          href=\"https://letterboxd.com/mknepprath/film/the-boy-and-the-heron/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/4/3/8/6/9/2/438692-the-boy-and-the-heron-0-230-0-345-crop.jpg\"\n          title=\"The Boy and the Heron\"\n        />\n        <Card\n          description=\"2013\"\n          href=\"https://letterboxd.com/mknepprath/film/the-kingdom-of-dreams-and-madness/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/sm/upload/i4/0m/gt/op/ajLRoEJ4TiNWMVWxVOSbGrPTv44-0-230-0-345-crop.jpg\"\n          title=\"The Kingdom of Dreams and Madness\"\n        />\n      </div>\n\n      <h3>Letterboxd Lists</h3>\n\n      <p>\n        I created several Letterboxd lists that detail out the rest of my film\n        activities for the year.\n      </p>\n\n      <ul>\n        <li>\n          <strong>\n            <a href=\"https://letterboxd.com/mknepprath/list/bonghive-2024/\">\n              #BongHive – 2024\n            </a>\n          </strong>\n          : My film group picked out a diverse list of films, a few I hadn’t\n          heard of before. I enjoyed them all! We’re kicking off 2025 with \n          <em>The Worst Person in the World</em> (2021).\n        </li>\n        <li>\n          <strong>\n            <a href=\"https://letterboxd.com/mknepprath/list/o-kneppraths-favorites-star-wars/\">\n              O. Knepprath’s Favorites – Star Wars\n            </a>\n          </strong>\n          : We watched all nine episodic Star Wars films plus <em>Rogue One</em> \n          as a family in 2024. Our son also played through \n          <em>LEGO Star Wars: The Skywalker Saga</em> as we watched them and\n          loved it.\n        </li>\n        <li>\n          <strong>\n            <a href=\"https://letterboxd.com/mknepprath/list/films-in-sherlock-jr/\">\n              Films in Sherlock Jr.\n            </a>\n          </strong>\n          : As mentioned earlier, 2024 marked one hundred years since the\n          initial release of <em>Sherlock Jr.</em>, and it ended up being my\n          most-watched film of the year. During one of these viewings, I noticed\n          all the movie posters on the theater wall that opened the film and\n          decided to track down as many as I could.\n        </li>\n        <li>\n          <strong>\n            <a href=\"https://letterboxd.com/mknepprath/list/the-knepprath-collection/\">\n              The Knepprath Collection\n            </a>\n          </strong>\n          : This list has grown quite a bit this year as I’ve been building out\n          my physical collection. I most recently added the new \n          <em>Godzilla</em> (1954) Criterion 4K.\n        </li>\n        <li>\n          <strong>\n            <a href=\"https://letterboxd.com/mknepprath/list/m-kneppraths-100-favorite-films/\">\n              M. Knepprath’s 100 Favorite Films\n            </a>\n          </strong>\n          : I filled out my top favorites list to be a nice, clean one hundred\n          films. Miyazaki is the most represented director with five films.\n        </li>\n        <li>\n          <strong>\n            <a href=\"https://letterboxd.com/mknepprath/list/ciff48/\">CIFF48</a>\n          </strong>\n          : Everything I watched at the 2024 Cleveland International Film\n          Festival.\n        </li>\n        <li>\n          <strong>\n            <a href=\"https://letterboxd.com/thirstycat/films/diary/\">\n              Thirsty Cat\n            </a>\n          </strong>\n          : I’m slowly moving Dane’s movie reviews from his blog to Letterboxd.\n        </li>\n      </ul>\n\n      <img src=\"https://mknepprath.com/assets/2024-in-review-15.jpg\" alt=\"Three photos from 2024.\" />\n\n      <h2>Stats</h2>\n\n      <p>\n        Okay, I can’t help myself. Here’s an abbreviated version of my annual\n        progress report.\n      </p>\n\n      <ol>\n        <li>\n          <Link href=\"/writing/the-grand-budapest-hotel\">\n            My Review of The Grand Budapest Hotel (2014)\n          </Link>\n        </li>\n        <li>\n          <Link href=\"/writing/sunsquints\">Sunsquints</Link>\n        </li>\n        <li>\n          <Link href=\"/writing/vanilla-layer\">The Vanilla Layer</Link>\n        </li>\n        <li>\n          <Link href=\"/writing/load-creep\">Load Creep</Link>\n        </li>\n        <li>\n          <Link href=\"/writing/sometown-usa\">“Life in Sometown, U.S.A.”</Link>\n        </li>\n      </ol>\n\n      <img src=\"https://mknepprath.com/assets/2024-in-review-11.jpg\" alt=\"Three photos from 2024.\" />\n\n      <h2>Books</h2>\n\n      <ul>\n        <li>\n          <a href=\"https://www.goodreads.com/book/show/60784562-antimatter-blues\">\n            Antimatter Blues\n          </a> \n          by Edward Ashton\n        </li>\n        <li>\n          <a href=\"https://www.goodreads.com/book/show/27415869-moon-girl-and-devil-dinosaur-vol-1\">\n            Moon Girl and Devil Dinosaur Vol. 1-8\n          </a>\n        </li>\n        <li>\n          Bram Stoker’s \n          <a href=\"https://www.goodreads.com/book/show/17245.Dracula\">\n            Dracula\n          </a>\n        </li>\n        <li>\n          <a href=\"https://www.goodreads.com/book/show/20518872-the-three-body-problem\">\n            The Three-Body Problem\n          </a> \n          by Cixin Liu\n        </li>\n        <li>\n          <a href=\"https://www.goodreads.com/book/show/198678736-co-intelligence\">\n            Co-intelligence\n          </a> \n          by Ethan Mollick\n        </li>\n        <li>\n          <a href=\"https://www.goodreads.com/book/show/111537.Making_Movies\">\n            Making Movies\n          </a> \n          by Sidney Lumet\n        </li>\n      </ul>\n\n      <blockquote>\n        “Lumet is a candid and entertaining writer and this book is dense with\n        raw insights from his career as a filmmaker. Absolutely worth diving\n        into his head for a few days.”\n      </blockquote>\n\n      <img src=\"https://mknepprath.com/assets/2024-in-review-1.jpg\" alt=\"Three photos from 2024.\" />\n\n      <h2>Games</h2>\n\n      <p>\n        I put 20+ hours into Star Wars Outlaws at this point and am about\n        two-thirds of the way through. Having a great time with it. I also\n        picked up a PlayStation VR2 and have been working through Horizon Call\n        of the Mountain.\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/2024-in-review-4.jpg\" alt=\"Three photos from 2024.\" />\n\n      <h2>Onward!</h2>\n\n      <p>\n        We have some big family plans for 2025, so I’m excited for that! I fell\n        off of social media a bit over the past year or two, and I’m happier for\n        it. Quite the change after starting out my career as a social media\n        manager. If you can get away with it, I highly recommend it. More\n        in-person connections, less doomscrolling. How’s that for a New Year’s\n        resolution?\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/2024-in-review-12.jpg\" alt=\"Three photos from 2024.\" />",
      "content_text": "A look at my accomplishments during the past year. • https://mknepprath.com/writing/2024",
      "summary": "A look at my accomplishments during the past year.",
      "image": "https://mknepprath.com/assets/2024-in-review-6.jpg",
      "date_published": "2025-01-12T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/two-types-of-filmmakers",
      "url": "https://mknepprath.com/writing/two-types-of-filmmakers",
      "title": "Two Types of Filmmakers",
      "content_html": "<header>\n        <h1>Two Types of Filmmakers</h1>\n      </header>\n\n      <p>\n        In a recent interview on The Daily Show, Iranian filmmaker Jafar Panahi \n        shared a profound observation about the nature of filmmaking that extends \n        far beyond cinema:\n      </p>\n\n      <blockquote>\n        <p>\n          &ldquo;We only have two types of filmmakers in the world. 95% are filmmakers \n          who are after what the audience wants. But another 5% says this is how \n          I look, and it&rsquo;s up to the audience to come and find me.&rdquo;\n        </p>\n        <cite>&mdash; Jafar Panahi</cite>\n      </blockquote>\n\n      <p>\n        This dichotomy speaks to a fundamental tension in any creative field: the \n        choice between following market demands and maintaining artistic integrity. \n        Panahi, who has faced significant persecution for his films in Iran, \n        embodies that rare 5% &mdash; artists who refuse to compromise their vision \n        despite external pressures.\n      </p>\n\n      <p>\n        The statement resonates beyond filmmaking. In software, writing, design, \n        or any creative endeavor, we face the same choice: chase what we think \n        people want, or develop our authentic voice and trust that the right \n        audience will find us.\n      </p>\n\n      <p>\n        <a href=\"https://youtu.be/qGyZbidOfaE?si=JZj0eJgLw_CWXecz\">\n          Watch the full interview\n        </a>\n      </p>",
      "content_text": "Jafar Panahi on artistic vision versus commercial appeal in filmmaking. • https://mknepprath.com/writing/two-types-of-filmmakers",
      "summary": "Jafar Panahi on artistic vision versus commercial appeal in filmmaking.",
      "date_published": "2024-12-19T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/sometown-usa",
      "url": "https://mknepprath.com/writing/sometown-usa",
      "title": "“Life in Sometown, U.S.A.”",
      "content_html": "<img src=\"https://mknepprath.com/assets/sometown-usa-1.jpg\" alt=\"Title card for Life in Sometown, U.S.A.\" />\n\n      <header>\n        <h1>“Life in Sometown, U.S.A.”</h1>\n      </header>\n\n      <p>\n        I’ve become quite the Buster Keaton enthusiast who, along with Charlie\n        Chaplin and Harold Lloyd, is considered one of the pioneers of silent\n        cinema. He was an artist who dedicated his life to his craft, renowned\n        for his death-defying stunts performed in the name of comedy.\n      </p>\n      <p>\n        Last year, I realized I was close to watching every film Keaton\n        directed, so I set out to complete his filmography. Almost all of his\n        work as a director was done before 1929, at which point he quit for good\n        after a falling out with MGM and a number of personal issues.\n      </p>\n      <div style={}>\n        <img src=\"https://mknepprath.com/assets/sometown-usa-2.jpg\" alt=\"Buster Keaton working on Life in Sometown, U.S.A.\" />\n      </div>\n      <p>\n        I say almost all because Keaton directed three additional shorts toward\n        the end of the ‘30s. Two are available online, but one is not: “Life in\n        Sometown, U.S.A.”\n      </p>\n      <p>\n        This late 1938 short showed up on platforms like Letterboxd. All of the\n        Letterboxd reviews (three in total) had a random commenter asking the\n        reviewer where they saw the movie. One reply was, “TCM a decade ago.”\n      </p>\n      <p>\n        So I contacted Turner Classic Movies. They pointed me to a third-party\n        store. I emailed the store, but they didn’t have it. Dead end. TCM\n        graciously forwarded my query to a “movie guru,” offering some hope. I\n        haven’t heard from them since.\n      </p>\n      <img src=\"https://mknepprath.com/assets/sometown-usa-4.png\" alt=\"Screenshot from a University of Minnesota bulletin\" />\n      <p>\n        Online searches reveal plenty of mentions on movie tracking sites, old\n        magazines, and evidence of it being used in education. Yet, there’s no\n        sign of it online or evidence of it ever being online.\n      </p>\n      <div style={}>\n        <img src=\"https://mknepprath.com/assets/sometown-usa-3.jpg\" alt=\"Buster Keaton working on Life in Sometown, U.S.A.\" />\n      </div>\n      <p>\n        I also went to MGM’s site, thinking I could contact them directly, but\n        there’s no email listed. What I did notice, however, was something I’d\n        forgotten: Amazon bought MGM, so Amazon presumably owns this short now.\n      </p>\n      <p>\n        All that said, my mission to complete Keaton’s directing filmography on\n        Letterboxd is technically complete because the film was removed from\n        their database, whether by Letterboxd themselves or the maintainers of\n        TMDb. A bittersweet end to a fun journey.\n      </p>\n\n      <hr />\n\n      <p>\n        Fun fact: The events of Sherlock Jr. took place exactly one century ago\n        today! It’s one of my all-time favorite films and available to watch on \n        <a href=\"https://www.youtube.com/watch?v=lXrBPbgBOiQ\">YouTube</a> now.\n        Check it out!\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/sometown-usa-5.png\" alt=\"A still from Sherlock Jr\" />",
      "content_text": "The search for Buster Keaton's lost short film. • https://mknepprath.com/writing/sometown-usa",
      "summary": "The search for Buster Keaton's lost short film.",
      "image": "https://mknepprath.com/assets/sometown-usa-1.jpg",
      "date_published": "2024-10-23T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/load-creep",
      "url": "https://mknepprath.com/writing/load-creep",
      "title": "Load Creep",
      "content_html": "<img src=\"https://mknepprath.com/assets/load-creep.jpg\" alt=\"A drawing of a neopolitan ice cream sandwich.\" />\n\n      <header>\n        <h1>Load Creep</h1>\n      </header>\n\n      <p>\n        In project management, we often talk about scope creep, but I&apos;d\n        like to coin a new term: <strong>Load Creep</strong>.\n      </p>\n      <hr />\n      <p>\n        <strong>Load Creep</strong> <em>noun</em>\n      </p>\n      <p>\n        The gradual increase in a team&apos;s ongoing maintenance and\n        operational workload as new features or components are added to a\n        project or system without corresponding adjustments in workload\n        distribution or management strategy.\n      </p>\n      <p>\n        <em>\n          &ldquo;Our team is struggling with load creep due to the maintenance\n          demands of those new features we&apos;ve recently added.&rdquo;\n        </em>\n      </p>\n      <hr />\n      <p>\n        Imagine team capacity as a box; our domain must fit neatly inside. Every\n        new feature, every extra dependency, expands that domain. Without\n        careful management, the domain can exceed the box&apos;s limits, leading\n        to breakdowns and inefficiencies.\n      </p>\n      <p>\n        My concern is that it&apos;s easy to manage one&apos;s domain when\n        things are working smoothly, but domain size can really catch us off\n        guard when multiple elements start breaking at once. So, how do we avoid\n        getting caught off guard?\n      </p>\n      <ol>\n        <li>\n          <strong>Measure the Domain Size:</strong> This is tough, but even a\n          fuzzy number as a key indicator can help discussions around the issue.\n        </li>\n        <li>\n          <strong>Assess Team Capacity:</strong> Once you have this, you can\n          compare the two numbers and make informed decisions about taking on an\n          expanded domain.\n        </li>\n        <li>\n          <strong>Focus!</strong> Narrow down which parts of the domain must fit\n          in the team capacity box. The requests and features that don&apos;t\n          make it in can be leveraged to expand the team or even spin up a new\n          one. (Thanks for this one, David!)\n        </li>\n      </ol>\n      <p>\n        Tracking load creep can help a team be more efficient and productive. It\n        allows the team time to maintain existing tools and explore new\n        opportunities, ultimately leading to happier developers, managers, and\n        leadership alike.\n      </p>",
      "content_text": "How do we ensure our domain doesn't exceed our capacity to manage it? • https://mknepprath.com/writing/load-creep",
      "summary": "How do we ensure our domain doesn't exceed our capacity to manage it?",
      "image": "https://mknepprath.com/assets/load-creep.jpg",
      "date_published": "2024-10-05T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/vanilla-layer",
      "url": "https://mknepprath.com/writing/vanilla-layer",
      "title": "The Vanilla Layer",
      "content_html": "<img src=\"https://mknepprath.com/assets/vanilla-layer.jpeg\" alt=\"A drawing of a neopolitan ice cream sandwich.\" />\n\n      <header>\n        <h1>The Vanilla Layer</h1>\n      </header>\n\n      <p>\n        Having evaluated and discussed a number of design systems at this point,\n        I&apos;m curious about how locked-in brands are to their design systems.\n        I&apos;ve found that the frequency with which an interface should be\n        refreshed can vary significantly. For instance, GitHub likely\n        doesn&apos;t need frequent changes due to its role as a developer\n        productivity tool, while a consumer-facing interface like Airbnb&apos;s\n        might require more frequent updates to stay fresh, modern, and polished\n        for its customers.\n      </p>\n      <p>\n        From what I&apos;ve seen, design systems don&apos;t age well. Their\n        built-in inflexibility can cause them to obsolete themselves as\n        redesigns become necessary, and often require starting from scratch. I\n        suggest that design systems might be more ephemeral than we want to\n        accept.\n      </p>\n      <p>This brings me to my proposed two-tiered solution:</p>\n      <p>\n        <strong>Vanilla Tier:</strong> A base layer focusing on essentials like\n        accessibility and cross-browser support. It doesn&apos;t even need to\n        function on its own:it just provides the groundwork for the next tier.\n        Most critically, it shouldn&apos;t include layout logic. I think this is\n        what differentiates it from a typical design system.\n      </p>\n      <p>\n        <strong>Brand Tier:</strong> Builds upon this foundation, adding style,\n        layout, and brand specifics. This tier allows for evolution without the\n        need for a redesign from the ground up.\n      </p>\n      <p>\n        I believe a vanilla tier could become a more permanent base, escape the\n        design system death loop, and reach a state of maturity:especially as\n        it’s exercised by the variety of tiers built on top of it. My employer\n        uses a similar approach to manage multiple brands, creating a base\n        system that each brand can adapt to their needs. Similar solution to a\n        different problem there.\n      </p>\n      <p>\n        Is your company doing something like this now? I&apos;d love to hear\n        about it! Feel free to reach out on Mastodon at \n        <a\n          href=\"https://mastodon.social/@mknepprath\"\n          target=\"_blank\"\n          rel=\"noreferrer noopener\"\n        >\n          @mknepprath\n        </a>\n        .\n      </p>",
      "content_text": "A proposal for a two-tiered design system. • https://mknepprath.com/writing/vanilla-layer",
      "summary": "A proposal for a two-tiered design system.",
      "image": "https://mknepprath.com/assets/vanilla-layer.jpeg",
      "date_published": "2024-09-23T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/sunsquints",
      "url": "https://mknepprath.com/writing/sunsquints",
      "title": "Sunsquints",
      "content_html": "<header>\n        <h1>Sunsquints</h1>\n      </header>\n\n      <blockquote>\n        “‘You’re nobody, till somebody loves you.’ Of course, he was somebody.”\n        : <em>bbunks</em>\n      </blockquote>\n\n      <p>\n        I just did some internet sleuthing and had to share my findings. This\n        might end up being the one definitive post about Sunsquints, a band I\n        was obsessed with briefly in college over a decade ago.\n      </p>\n\n      <p>\n        Sunsquints created music that I can only describe as sun-drenched,\n        glowing; sort of Angels & Airwaves or Tame Impala-adjacent, but radiant.\n        It felt like music one could legitimately bask in.\n      </p>\n\n      <p>\n        Unfortunately, they only ever had a few tracks. By the time I was\n        listening to them, they had vanished and their music was disappearing\n        from the internet. Luckily, I’d saved all the tracks I could find to my\n        iPod and still have them today.\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/sunsquints.png\" alt=\"Sunsquints playing on my car radio.\" />\n\n      <p>\n        And this is where the sleuthing kicks in. Yesterday, I was scrolling\n        some old photos and found a picture of my car radio playing a Sunsquints\n        track. Every time I’m reminded of them, I do a quick search to see if\n        anything new has popped up.\n      </p>\n\n      <p>\n        This time, unlike past searches, something did! I found a\n        drumming-related forum post from 2010 by a user, “bbunks”, proudly\n        bragging about their son’s new music.\n      </p>\n\n      <blockquote>\n        “Not my effort, but that of my son & a few of his buddies. Now I know\n        why he’s been on Garageband 24/7.” - <em>bbunks</em>\n      </blockquote>\n\n      <p>\n        The title of the forum post: <strong>Sunsquints</strong>.\n      </p>\n\n      <p>\n        I ended up finding another post by this user commemorating their father\n        who had recently passed, which revealed “bbunks” real last name,\n        Bunkers.\n      </p>\n\n      <p>\n        Continuing my odyssey across this decaying internet, I added Bunkers to\n        my search query and found an archived 2013 post on a radio station’s\n        website titled ”Monday Mixer”:\n      </p>\n\n      <blockquote>\n        ”This song is another shout-out to my hometown of Oak Park, as that is\n        also the hometown of Chris Bunkers, who is the mastermind behind\n        Edithbeake. He and his friends originally recorded some songs under the\n        name of Sunsquints, which were also good.”\n      </blockquote>\n\n      <p>Boom! Chris Bunkers!</p>\n\n      <p>\n        You’d think I’d cracked this case wide open now that I had a full name,\n        but there still wasn’t much out there. What I did find was pretty cool,\n        however.\n      </p>\n\n      <p>\n        From a 2017 Billboard interview with Knox Fortune, a singer and producer\n        who had a new album out that year: \n      </p>\n\n      <blockquote>\n        ”One of my best friends, Chris Bunkers, this is his debut in popular\n        music. He has a 9-5 job, he’s not grinding for this, but he’s an amazing\n        musician, so I brought him in on a lot of tracks.” - Knox Fortune\n      </blockquote>\n\n      <img src=\"https://mknepprath.com/assets/sunsquints-bunkers.png\" alt=\"Chris Bunkers credited on Knox Fortune's album, Paradise.\" />\n\n      <p>\n        Amazing musician, indeed. I listened to Fortune’s album, \n        <em>Paradise</em>, and enjoyed it. Chris Bunkers’ been killing it for\n        years.\n      </p>\n\n      <p>\n        Not sure what I was hoping to get out of all this. I emailed Knox\n        Fortune hoping to get more information about what Chris is up to.\n        Whatever he’s doing in music, I’m there! I’d also love to see\n        Sunsquints’ music back online.\n      </p>\n\n      <p>\n        If nothing else, my next project will be figuring out how to get his\n        music off of my iPod so that it isn’t lost to time. I’ll keep you\n        posted.\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/sunsquints-soalive.jpg\" alt=\"An illustration by me of Sunsquints lyrics.\" />\n      <p>\n        <em>A 2012 illustration I created based on Sunsquints lyrics.</em>\n      </p>",
      "content_text": "Looking back at a band that barely existed. • https://mknepprath.com/writing/sunsquints",
      "summary": "Looking back at a band that barely existed.",
      "image": "https://mknepprath.com/assets/sunsquints.png",
      "date_published": "2024-06-07T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/the-grand-budapest-hotel",
      "url": "https://mknepprath.com/writing/the-grand-budapest-hotel",
      "title": "My Review of The Grand Budapest Hotel (2014)",
      "content_html": "<img src=\"https://mknepprath.com/assets/the-grand-budapest-hotel.jpeg\" alt=\"A still featuring Gustave H and Zero from the film The Grand Budapest Hotel (2014).\" />\n      <header>\n        <h1>My Review of The Grand Budapest Hotel (2014)</h1>\n      </header>\n      <blockquote>\n        “You see, there are still faint glimmers of civilization left in this\n        barbaric slaughterhouse that was once known as humanity. Indeed that’s\n        what we provide in our own modest, humble, insignificant... oh, f***\n        it.” : M. Gustave\n      </blockquote>\n      <h2>A Quick Summary</h2>\n      <p>\n        With the help of his lobby boy, a philandering concierge steals a\n        painting bequeathed to him by a wealthy hotel patron whom he is accused\n        of murdering. On the run from both the patron’s family and the law, as\n        well as a fascistic regime, Zero and Gustave must embark on a daring\n        journey to clear the name of Monsieur Gustave H.\n      </p>\n      <h2>Reception at the Time</h2>\n      <p>\n        <i>The Grand Budapest Hotel</i> was received positively by critics and\n        audiences alike, many saying it was the ultimate culmination of what Wes\n        Anderson had been working towards up until that point in his career.\n        Critics noted its decadence and whimsy in contrast to the underlying\n        dark themes. It was nominated for Best Picture and garnered the most\n        Oscars during the 87th Academy Awards, tied with <i>Birdman</i>. It\n        remains the only Wes Anderson film to win Oscars.\n      </p>\n      <p>\n        Audiences rewarded it with the largest box office return for a Wes\n        Anderson film to date, more than double any of his other films.\n      </p>\n      <h2>How It’s Aged</h2>\n      <p>\n        The hand-crafted quality of the film itself made it feel like a precious\n        relic in 2014, and time has only strengthened that aesthetic. It\n        reminded me of the still-delightful Monty Python animated sequences. The\n        beautifully realized miniatures that serve as the zoomed-out setting for\n        Zubrowka serve the double purpose of creating this aesthetic while\n        masterfully portraying the geography we’re working within.\n      </p>\n      <p>\n        <i>The Grand Budapest Hotel</i> perfectly sums up Wes Anderson’s\n        filmography up until 2014. All of his previous films come into play here\n        in a way that seems to distill and perfect key aspects of each one, from \n        <i>Bottle Rocket</i>\n        with its bumbling criminals on the run to <i>Fantastic Mr. Fox</i> with\n        its vibrant palette and intricate set designs.\n      </p>\n      <p>\n        On top of being a culmination of his work, it now serves as table\n        setting for Wes Anderson’s films to come. The nesting doll structure\n        that opens and closes this film eventually takes center stage in \n        <i>Asteroid City</i> last year, and especially in his recent short, The\n        Wonderful Story of Henry Sugar. I believe these elements have only\n        increased <i>Grand Budapest’s</i> standing as a film that balances where\n        Wes was heading with a more standard storytelling structure.\n      </p>\n      <p>\n        On top of informing his own future work, you can feel the influence of\n        this film on one filmmaker in particular: Paul King. \n        <i>Paddington 2 (2017)</i> specifically calls back to this film with its\n        prison break and love of pink.\n      </p>\n      <p>\n        Finally, I’d like to give a shout-out to Ralph Fiennes and his emergence\n        as a comic genius in this film. His delivery is incredible, and I can’t\n        help but link it to his more recent role in The Menu <i>(2022)</i>,\n        which made me laugh out loud more than any other film that year.\n      </p>\n      <h2>Best Parts</h2>\n      <p>\n        Not to sound like a broken record, but Ralph Fiennes is the best part of\n        this film. I read that this role was specifically written for him, and I\n        can feel it. He embodies this unique character who himself embodies\n        Anderson’s films as a whole: tidy and refined, yet an absolute mess\n        inside. On top of all this, he embodies 1930s Europe with all the crisp,\n        sharp uniforms spreading darkness across the land.\n      </p>\n      <p>\n        I’d also like to give a shout-out to a few standout sequences: the\n        jailbreak, the museum chase, and the ski chase. Taken together, you get\n        a good idea of the breadth of Anderson’s abilities. They are all of a\n        piece in that they fit the aesthetic of the film, but are all\n        interesting and fun in their own right.\n      </p>\n      <h2>Overall</h2>\n      <p>\n        <i>Grand Budapest</i> has grown in my esteem and has been my favorite of\n        Anderson’s films for a few years now. To me, it’s infinitely rewatchable\n        and is more fun with each viewing.\n      </p>\n      <p>\n        It’s easy to focus on the surface, as I’ve mostly done in this review,\n        but the underlying themes around fascism and immigration make it more\n        relevant than ever and ultimately turn this from a sweet treat into a\n        full meal.\n      </p>\n      <blockquote>\n        “There are still faint glimmers of civilization left in this barbaric\n        slaughterhouse that was once known as humanity... He was one of them.\n        What more is there to say?” : Zero\n      </blockquote>\n\n      <hr />\n\n      <em>\n        Published on \n        <a href=\"https://letterboxd.com/tardycritic/film/the-grand-budapest-hotel/\">\n          Tardy Critic\n        </a>\n        , a film blog where movies are reviewed ten years late.\n      </em>",
      "content_text": "My review celebrating the 10th anniversary of Wes Anderson's masterpiece. • https://mknepprath.com/writing/the-grand-budapest-hotel",
      "summary": "My review celebrating the 10th anniversary of Wes Anderson's masterpiece.",
      "image": "https://mknepprath.com/assets/the-grand-budapest-hotel.jpeg",
      "date_published": "2024-03-07T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/2023-in-film",
      "url": "https://mknepprath.com/writing/2023-in-film",
      "title": "2023 in Film",
      "content_html": "<img src=\"https://mknepprath.com/assets/2023-in-film-1.jpg\" alt=\"Three photos from 2023.\" />\n\n      <header>\n        <h1>2023 in Film</h1>\n      </header>\n\n      <p>\n        Hey, movie lovers! Continuing the tradition I started the \n        <a href=\"/writing/2022-in-film\">previous year</a>, here&apos;s an\n        overview of what I saw in 2023. I watched a total of 438 movies,\n        surpassing my goal of 365. By my rough estimation, my film reviews\n        totaled around 14,000 words.\n      </p>\n\n      <h2>My Top Films of 2023</h2>\n\n      <p>\n        I saw many great films released last year, with many trips to the\n        theater – at least twenty times. Feels great after a couple of years of\n        not being able to go. My favorite theatrical experiences were watching \n        <a href=\"https://letterboxd.com/mknepprath/film/rrr/\">RRR (2022)</a> \n        with my wife and friends, who were first-timers and loved it, seeing\n        Killers of the Flower Moon after waiting in anticipation all year, and\n        watching Godzilla Minus One with my wife and Godzilla-obsessed son.\n      </p>\n\n      <div class=>\n        <Shot\n          description=\"2023\"\n          href=\"https://letterboxd.com/mknepprath/film/killers-of-the-flower-moon/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/3/9/8/0/0/9/p/3OLkNs21FLci7I54a9zS18NeGyZ-0-1000-0-1500-crop.jpg\"\n          title=\"Killers of the Flower Moon\"\n        />\n        <div>\n          <p>\n            <a href=\"https://letterboxd.com/mknepprath/film/killers-of-the-flower-moon/\">\n              Killers of the Flower Moon\n            </a> \n            is a thrilling adaptation of a book I love. I consider it the most\n            important film of the year due to how it sheds light on a dark part\n            of American history that I wasn&apos;t aware of until reading the\n            book. I appreciate its different perspective, making it a great\n            companion piece to the book rather than a redundant retelling.\n          </p>\n          <p>\n            It&apos;s my favorite film of the year, and I&apos;m excited to see\n            what Scorsese does with David Grann&apos;s next book, \n            <a href=\"https://www.goodreads.com/en/book/show/61714633\">\n              The Wager\n            </a>\n            , one of my favorite reads of 2023.\n          </p>\n        </div>\n      </div>\n\n      <div class=>\n        <Shot\n          description=\"2023\"\n          href=\"https://letterboxd.com/mknepprath/film/godzilla-minus-one/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/8/4/5/7/0/6/p/eYJsurMCdA4W8UIknII20a4pwiq-0-1000-0-1500-crop.jpg\"\n          title=\"Godzilla Minus One\"\n        />\n        <div>\n          <p>\n            <a href=\"https://letterboxd.com/mknepprath/film/godzilla-minus-one/\">\n              Godzilla Minus One\n            </a> \n            is Toho&apos;s first Godzilla film since Shin Godzilla in 2016. I\n            wasn&apos;t sure if they could top that film, but they did. In fact,\n            I&apos;m close to admitting that this is my favorite Godzilla film\n            of all time. It has a great story, amazing effects, and perfectly\n            constructed set pieces.\n          </p>\n          <p>\n            My son and I spent the last couple of years watching all the Showa\n            era Godzilla films, and we didn&apos;t realize this one would owe so\n            much to those films. All the direct visual and thematic references\n            made us so happy.\n          </p>\n        </div>\n      </div>\n\n      <p>And the next 10 in no particular order:</p>\n\n      <div class=>\n        <Card\n          description=\"2023\"\n          href=\"https://letterboxd.com/mknepprath/film/spider-man-across-the-spider-verse/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/4/9/7/6/3/1/p/jN1tz3Z10gUOdb11iPwQd6JBlms-0-150-0-225-crop.jpg\"\n          title=\"Spider-Man: Across the Spider-Verse\"\n        />\n        <Card\n          description=\"2023\"\n          href=\"https://letterboxd.com/mknepprath/film/past-lives/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/5/9/1/0/5/3/591053-past-lives-0-150-0-225-crop.jpg\"\n          title=\"Past Lives\"\n        />\n        <Card\n          description=\"2023\"\n          href=\"https://letterboxd.com/mknepprath/film/the-boy-and-the-heron/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/4/3/8/6/9/2/p/ojWgbvGGAHDXlGqNq4SsBuUSJYO-0-150-0-225-crop.jpg\"\n          title=\"The Boy and the Heron\"\n        />\n        <Card\n          description=\"2023\"\n          href=\"https://letterboxd.com/mknepprath/film/may-december/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/sm/upload/zh/p4/cg/6v/may-december-0-150-0-225-crop.jpg\"\n          title=\"May December\"\n        />\n        <Card\n          description=\"2023\"\n          href=\"https://letterboxd.com/mknepprath/film/oppenheimer-2023/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/7/8/4/3/2/8/p/bAFmcrCpXsJis5q0aaXvCz3dTiX-0-150-0-225-crop.jpg\"\n          title=\"Oppenheimer\"\n        />\n        <Card\n          description=\"2023\"\n          href=\"https://letterboxd.com/mknepprath/film/barbie/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/2/7/7/0/6/4/p/gUn6zXDYilszDcNBhIPxdA4pwdn-0-150-0-225-crop.jpg\"\n          title=\"Barbie\"\n        />\n        <Card\n          description=\"2023\"\n          href=\"https://letterboxd.com/mknepprath/film/mission-impossible-dead-reckoning-part-one/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/5/0/3/4/0/2/503402-mission-impossible-dead-reckoning-part-one-0-150-0-225-crop.jpg\"\n          title=\"Mission: Impossible – Dead Reckoning Part One\"\n        />\n        <Card\n          description=\"2023\"\n          href=\"https://letterboxd.com/mknepprath/film/anatomy-of-a-fall/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/8/2/2/0/9/3/p/zkhuMc71iRpBstkgCnQhzKxF7l3-0-150-0-225-crop.jpg\"\n          title=\"Anatomy of a Fall\"\n        />\n        <Card\n          description=\"2023\"\n          href=\"https://letterboxd.com/mknepprath/film/dungeons-dragons-honor-among-thieves/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/4/2/4/0/0/3/p/bux0tkbppuWu3taBaOMxLUddGIw-0-150-0-225-crop.jpg\"\n          title=\"Dungeons & Dragons: Honor Among Thieves\"\n        />\n        <Card\n          description=\"2023\"\n          href=\"https://letterboxd.com/mknepprath/film/rye-lane\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/9/4/6/6/0/7/946607-rye-lane-0-150-0-225-crop.jpg\"\n          title=\"Rye Lane\"\n        />\n      </div>\n\n      <h2>My Top Films Watched in 2023</h2>\n\n      <p>\n        Next, I&apos;d like to highlight my favorite films I watched for the\n        first time in 2023 that were not released during that year. Here are the\n        top ten that have stuck with me to the point where I still think about\n        them and bring them up in conversation with friends.\n      </p>\n\n      <div class=>\n        <Card\n          description=\"1963\"\n          href=\"https://letterboxd.com/mknepprath/film/high-and-low/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/sm/upload/do/zm/ur/ug/dgnyE40yWdI7gbaHmmB5yCCIVpI-0-150-0-225-crop.jpg\"\n          title=\"High and Low\"\n        />\n        <Card\n          description=\"1962\"\n          href=\"https://letterboxd.com/mknepprath/film/lawrence-of-arabia/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/6/0/2/9/9/60299-lawrence-of-arabia-0-150-0-225-crop.jpg\"\n          title=\"Lawrence of Arabia\"\n        />\n        <Card\n          description=\"1966\"\n          href=\"https://letterboxd.com/mknepprath/film/seconds/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/3/8/8/9/4/38894-seconds-0-150-0-225-crop.jpg\"\n          title=\"Seconds\"\n        />\n        <Card\n          description=\"1967\"\n          href=\"https://letterboxd.com/mknepprath/film/le-samourai/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/4/8/8/1/7/48817-le-samourai-0-150-0-225-crop.jpg\"\n          title=\"La Samouraï\"\n        />\n        <Card\n          description=\"1957\"\n          href=\"https://letterboxd.com/mknepprath/film/paths-of-glory/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/5/1/1/9/4/p/3O10X1bVSasrS2NQ186s2tlKvqN-0-150-0-225-crop.jpg\"\n          title=\"Paths of Glory\"\n        />\n        <Card\n          description=\"2017\"\n          href=\"https://letterboxd.com/mknepprath/film/finding-frances/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/4/1/6/7/8/6/416786-nathan-for-you-finding-frances-0-150-0-225-crop.jpg\"\n          title=\"Finding Frances\"\n        />\n        <Card\n          description=\"2008\"\n          href=\"https://letterboxd.com/mknepprath/film/synecdoche-new-york/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/sm/upload/z9/j9/kx/ve/l3r5MgeN0UUySPbf6aWeUyKGdb2-0-150-0-225-crop.jpg\"\n          title=\"Synecdoche, New York\"\n        />\n        <Card\n          description=\"2013\"\n          href=\"https://letterboxd.com/mknepprath/film/the-lunchbox/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/1/3/7/9/2/8/137928-the-lunchbox-0-150-0-225-crop.jpg\"\n          title=\"The Lunchbox\"\n        />\n        <Card\n          description=\"1982\"\n          href=\"https://letterboxd.com/mknepprath/film/the-verdict-1982/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/sm/upload/hy/39/5h/d4/fXM8Kyq0rUdSmePz25NlOFlbCB2-0-150-0-225-crop.jpg\"\n          title=\"The Verdict\"\n        />\n        <Card\n          description=\"2004\"\n          href=\"https://letterboxd.com/mknepprath/film/collateral/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/5/0/9/9/5/p/gwVx0LN5pzZXVVqbhiBnoJKaP81-0-150-0-225-crop.jpg\"\n          title=\"Collateral\"\n        />\n      </div>\n\n      <h2>My Top Obscure Films Watched in 2023</h2>\n\n      <p>\n        I&apos;d love to draw your attention to some great films you might not\n        have bumped into yet. Here are my favorite obscure films watched last\n        year, calculated by sorting my Letterboxd list by popularity and picking\n        the last 10 films that I&apos;ve rated 4 stars or higher.\n      </p>\n      <p>\n        I&apos;d like to highlight &ldquo;The High Sign,&rdquo; one of my\n        favorite Buster Keaton shorts. I also really enjoyed &ldquo;The Natural\n        History of the Chicken&rdquo; and &ldquo;Cane Toads: An Unnatural\n        History,&rdquo; which are humorous documentaries by Mark Lewis, an\n        Australian filmmaker I&apos;d never heard of before.\n      </p>\n\n      <div class=>\n        <Card\n          description=\"2000\"\n          href=\"https://letterboxd.com/mknepprath/film/the-natural-history-of-the-chicken/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/1/7/7/1/5/7/177157-the-natural-history-of-the-chicken-0-150-0-225-crop.jpg\"\n          title=\"The Natural History of the Chicken\"\n        />\n        <Card\n          description=\"1988\"\n          href=\"https://letterboxd.com/mknepprath/film/cane-toads-an-unnatural-history/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/6/8/7/2/1/68721-cane-toads-an-unnatural-history-0-150-0-225-crop.jpg\"\n          title=\"Cane Toads: An Unnatural History\"\n        />\n        <Card\n          description=\"1921\"\n          href=\"https://letterboxd.com/mknepprath/film/the-boat/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/1/4/9/9/8/14998-the-boat-0-150-0-225-crop.jpg\"\n          title=\"The Boat\"\n        />\n        <Card\n          description=\"1920\"\n          href=\"https://letterboxd.com/mknepprath/film/convict-13/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/2/5/9/0/6/25906-convict-13-0-150-0-225-crop.jpg\"\n          title=\"Convict 13\"\n        />\n        <Card\n          description=\"2007\"\n          href=\"https://letterboxd.com/mknepprath/film/no-smoking-2007/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/2/8/0/9/8/p/gBiC8PvATw7cMhszMvPVBuTt93M-0-150-0-225-crop.jpg\"\n          title=\"No Smoking\"\n        />\n        <Card\n          description=\"1931\"\n          href=\"https://letterboxd.com/mknepprath/film/safe-in-hell/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/6/8/8/5/2/68852-safe-in-hell-0-150-0-225-crop.jpg\"\n          title=\"Safe In Hell\"\n        />\n        <Card\n          description=\"2022\"\n          href=\"https://letterboxd.com/mknepprath/film/rodeo-2022/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/8/4/1/2/3/8/841238-rodeo-0-150-0-225-crop.jpg\"\n          title=\"Rodeo\"\n        />\n        <Card\n          description=\"1926\"\n          href=\"https://letterboxd.com/mknepprath/film/battling-butler/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/1/4/4/4/0/14440-battling-butler-0-150-0-225-crop.jpg\"\n          title=\"Battling Butler\"\n        />\n        <Card\n          description=\"1965\"\n          href=\"https://letterboxd.com/mknepprath/film/film/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/1/9/6/6/8/19668-film-0-150-0-225-crop.jpg\"\n          title=\"Film\"\n        />\n        <Card\n          description=\"1921\"\n          href=\"https://letterboxd.com/mknepprath/film/the-high-sign/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/1/8/8/4/1/p/wWTzwHKySlge1emeYULXb7d74Iy-0-150-0-225-crop.jpg\"\n          title=\"The High Sign\"\n        />\n      </div>\n\n      <img src=\"https://mknepprath.com/assets/2023-in-film-3.jpg\" alt=\"Three photos from 2023.\" />\n\n      <h2>Horror Survey 2023</h2>\n\n      <p>\n        I tried something new this past October; I did a Horror Survey where I\n        sorted my watchlist from earliest to latest and watched all the horror\n        films available to stream.\n      </p>\n      <p>\n        I watched 42 horror films during this time, starting with &ldquo;The Cat\n        and the Canary&rdquo; (1927) and ending with &ldquo;Blade II&rdquo;\n        (2002). I really enjoyed experiencing film history through the lens of\n        horror, starting with the silent era to talkies to the rise of the\n        slasher and beyond. Here are my top 10 horror films I watched in\n        October.\n      </p>\n\n      <div class=>\n        <Card\n          description=\"1966\"\n          href=\"https://letterboxd.com/mknepprath/film/seconds/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/3/8/8/9/4/38894-seconds-0-150-0-225-crop.jpg\"\n          title=\"Seconds\"\n        />\n        <Card\n          description=\"1985\"\n          href=\"https://letterboxd.com/mknepprath/film/day-of-the-dead/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/4/7/7/5/1/47751-day-of-the-dead-0-150-0-225-crop.jpg\"\n          title=\"Day of the Dead\"\n        />\n        <Card\n          description=\"2001\"\n          href=\"https://letterboxd.com/mknepprath/film/the-happiness-of-the-katakuris/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/4/1/7/6/3/p/dMOaB1N5LASSiE0q6y51YWKy8Nn-0-150-0-225-crop.jpg\"\n          title=\"The Happiness of the Katakuris\"\n        />\n        <Card\n          description=\"1984\"\n          href=\"https://letterboxd.com/mknepprath/film/night-of-the-comet\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/4/0/3/2/8/p/3kXESP9LarDwkQ6QYWgBaSJO2V3-0-150-0-225-crop.jpg\"\n          title=\"Night of the Comet\"\n        />\n        <Card\n          description=\"1941\"\n          href=\"https://letterboxd.com/mknepprath/film/the-wolf-man-1941/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/4/3/6/9/8/p/3qVF5ufIA7Pe8ulR32HjcC307qO-0-150-0-225-crop.jpg\"\n          title=\"The Wolf Man\"\n        />\n        <Card\n          description=\"1980\"\n          href=\"https://letterboxd.com/mknepprath/film/alligator/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/2/9/7/2/5/29725-alligator-0-150-0-225-crop.jpg\"\n          title=\"Alligator\"\n        />\n        <Card\n          description=\"1922\"\n          href=\"https://letterboxd.com/mknepprath/film/haxan/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/8/8/7/1/p/6uke82EziPVJuzm7NQvQj5f9uy7-0-150-0-225-crop.jpg\"\n          title=\"Häxan\"\n        />\n        <Card\n          description=\"1963\"\n          href=\"https://letterboxd.com/mknepprath/film/the-haunting/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/4/5/0/2/3/45023-the-haunting-0-150-0-225-crop.jpg\"\n          title=\"The Haunting\"\n        />\n        <Card\n          description=\"1985\"\n          href=\"https://letterboxd.com/mknepprath/film/re-animator/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/5/0/8/5/1/p/17BreOe5oGS4DT3k68hiyr6cinM-0-150-0-225-crop.jpg\"\n          title=\"Re-Animator\"\n        />\n        <Card\n          description=\"1973\"\n          href=\"https://letterboxd.com/mknepprath/film/the-wicker-man/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/4/1/6/6/2/41662-the-wicker-man-0-150-0-225-crop.jpg\"\n          title=\"The Wicker Man\"\n        />\n      </div>\n\n      <h2>My Top Reviews from 2023</h2>\n\n      <p>Here are a few of my more popular film reviews from last year.</p>\n\n      <FilmPost\n        url=\"https://letterboxd.com/mknepprath/film/teenage-mutant-ninja-turtles-mutant-mayhem/\"\n        title=\"Teenage Mutant Ninja Turtles: Mutant Mayhem (2023)\"\n        summary=\"I think Spider-Verse fixed animated film? We’ve had some films come out that copped their style, but this one does it right. Instead of Spider-Versing the turtles, you can tell they thought about how this film should look and feel aesthetically from the ground up and built a world so off-kilter and putrid… It’s great.\"\n        date=\"2023-08-12\"\n        id=\"teenage-mutant-ninja-turtles-mutant-mayhem\"\n        action=\"Reviewed\"\n        image=\"https://a.ltrbxd.com/resized/alternative-poster/5/4/2/0/0/5/p/7pOafueZIz0G97iIYwXlpFXpZ8O-0-150-0-225-crop.jpg\"\n      />\n      <FilmPost\n        url=\"https://letterboxd.com/mknepprath/film/the-haunting/\"\n        title=\"The Haunting (1963)\"\n        summary=\"I like Robert Wise films, so why haven’t I watched The Sound of Music yet? The mystery continues.\nIf it isn’t obvious yet, I am doing a thing this October: I’m watching all the horror films in my watchlist available to stream starting with the earliest first. We’ll see how far I get.\"\n        date=\"2023-10-05\"\n        id=\"the-haunting\"\n        action=\"Reviewed\"\n        image=\"https://a.ltrbxd.com/resized/film-poster/4/5/0/2/3/45023-the-haunting-0-150-0-225-crop.jpg\"\n      />\n      <FilmPost\n        url=\"https://letterboxd.com/mknepprath/film/mad-max-fury-road/\"\n        title=\"Mad Max: Fury Road (2015)\"\n        summary=\"Every 10 seconds the coolest moment in cinematic history up to that point occurs. The level up between the original Mad Max trilogy and this is unfathomable. The first 30 min of this are the most epic Mad Max film ever made, and then it just keeps going.\n“I should be… McFeasting in the pleasure gardens with the heroes of all time.”\"\n        date=\"2023-09-25\"\n        id=\"mad-max-fury-road\"\n        action=\"Reviewed\"\n        image=\"https://a.ltrbxd.com/resized/alternative-poster/6/2/7/8/0/p/v3OpE0Riec9kM8YatDUT31kC1qR-0-150-0-225-crop.jpg\"\n      />\n      <FilmPost\n        url=\"https://letterboxd.com/mknepprath/film/killers-of-the-flower-moon/\"\n        title=\"Killers of the Flower Moon (2023)\"\n        summary=\"As soon as the silent film title cards came up, this had my heart. A great adaptation of an excellent book telling an important story.\"\n        date=\"2023-10-30\"\n        id=\"killers-of-the-flower-moon\"\n        action=\"Reviewed\"\n        image=\"https://a.ltrbxd.com/resized/alternative-poster/3/9/8/0/0/9/p/3OLkNs21FLci7I54a9zS18NeGyZ-0-150-0-225-crop.jpg\"\n      />\n      <FilmPost\n        url=\"https://letterboxd.com/mknepprath/film/the-natural-history-of-the-chicken/\"\n        title=\"The Natural History of the Chicken (2000)\"\n        summary=\"Juxtaposition is a powerful tool.\nI would be honored to be called “chicken”\"\n        date=\"2023-12-13\"\n        id=\"the-natural-history-of-the-chicken\"\n        action=\"Reviewed\"\n        image=\"https://a.ltrbxd.com/resized/film-poster/1/7/7/1/5/7/177157-the-natural-history-of-the-chicken-0-150-0-225-crop.jpg\"\n      />\n\n      <h2>Stats</h2>\n\n      <p>\n        In terms of most watched films, \n        <a href=\"https://letterboxd.com/mknepprath/film/sherlock-jr/\">\n          Sherlock Jr.\n        </a>\n        , \n        <a href=\"https://letterboxd.com/mknepprath/film/the-high-sign/\">\n          The High Sign\n        </a>\n        , <a href=\"https://letterboxd.com/mknepprath/film/cops/\">Cops</a>, and \n        <a href=\"https://letterboxd.com/mknepprath/film/the-thing/\">\n          The Thing\n        </a> \n        were at the top of my list.\n      </p>\n\n      <div class=>\n        <Card\n          description=\"5 times\"\n          href=\"https://letterboxd.com/mknepprath/film/sherlock-jr/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/5/1/1/7/7/51177-sherlock-jr--0-150-0-225-crop.jpg\"\n          title=\"Sherlock Jr.\"\n        />\n        <Card\n          description=\"4 times\"\n          href=\"https://letterboxd.com/mknepprath/film/the-high-sign/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/1/8/8/4/1/p/wWTzwHKySlge1emeYULXb7d74Iy-0-150-0-225-crop.jpg\"\n          title=\"The High Sign\"\n        />\n        <Card\n          description=\"3 times\"\n          href=\"https://letterboxd.com/mknepprath/film/cops/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/2/5/8/7/3/p/1rN904hMb4LUKoOO6LlqHbIl1EY-0-150-0-225-crop.jpg\"\n          title=\"Cops\"\n        />\n        <Card\n          description=\"2 times\"\n          href=\"https://letterboxd.com/mknepprath/film/the-thing/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/5/1/1/5/5/p/tzGY49kseSE9QAKk47uuDGwnSCu-0-150-0-225-crop.jpg\"\n          title=\"The Thing\"\n        />\n      </div>\n\n      <p>\n        For the second year in a row, my most-watched actor and director were\n        the same: \n        <a href=\"https://letterboxd.com/mknepprath/films/diary/for/2023/genre/-documentary/with/actor/buster-keaton/\">\n          Buster Keaton\n        </a>\n        . I watched 34 films he acted in, 32 of which he also directed. Keaton\n        has quickly become one of my favorite filmmakers of all time. My son and\n        I have had a lot of fun screening his movies for family when they visit.\n      </p>\n\n      <h2>Shout Outs</h2>\n\n      <p>\n        My movie chat group, #BongHive, remains undefeated. In December, we did\n        a Secret Santa where we each gifted a film or film-adjacent item to\n        another member. I received the Criterion edition of \n        <a href=\"https://letterboxd.com/mknepprath/film/drunken-angel/\">\n          Drunken Angel (1948)\n        </a>\n        , which I loved!\n      </p>\n\n      <p>\n        This coming year, we&apos;re doing a monthly challenge where one member\n        of the group picks a film for the rest of us to watch. The first was \n        <a href=\"https://letterboxd.com/mknepprath/film/army-of-shadows\">\n          Army of Shadows (1969)\n        </a>\n        . I&apos;m excited to see what else we watch together this year.\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/2023-in-film-4.png\" alt=\"The #BongHive.\" />\n\n      <p>\n        I also want to give a shout-out to my wife who gifted me The Criterion\n        Channel last year for Christmas. I watched a lot of great films,\n        including many mentioned above – 82 in total during the year!\n      </p>\n\n      <p>\n        Finally, thanks to an upgrade to my home theater, I&apos;ve begun to\n        collect physical media again. I&apos;ve been picking up a lot of 4K UHD\n        Blu-rays and have been enjoying rewatching many of my favorite films in\n        high definition.\n      </p>\n\n      <p>\n        That&apos;s all for now! I&apos;ve already kicked off 2024 with some\n        great films and I&apos;m looking forward to more during the coming year.\n        If you check out any of the films I mentioned above, let me know what\n        you think! Happy watching!\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/2023-in-film-2.jpg\" alt=\"Three photos from 2023.\" />",
      "content_text": "Reviewing the many movies I watched during 2023. • https://mknepprath.com/writing/2023-in-film",
      "summary": "Reviewing the many movies I watched during 2023.",
      "image": "https://mknepprath.com/assets/2023-in-film-1.jpg",
      "date_published": "2024-01-12T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/2023",
      "url": "https://mknepprath.com/writing/2023",
      "title": "2023 in Review",
      "content_html": "<img src=\"https://mknepprath.com/assets/2023-in-review-2.jpg\" alt=\"Three photos from 2023.\" />\n\n      <header>\n        <h1>2023 in Review</h1>\n      </header>\n\n      <p>Hi all, and Happy New Year!</p>\n\n      <p>\n        Wow, we made it to year-in-review number five! While I avoided publicly\n        setting any concrete goals for the year, I feel that I experienced and\n        accomplished a lot. This past year was a fun one.\n      </p>\n\n      <p>\n        But first, a massive shoutout to my wife, who achieved a monumental\n        goal. Little did I know when I wrote my inaugural year-in-review post in\n        2019, that we would soon be relocating to Ohio for my wife to attend med\n        school. Fast forward four years of relentless effort, she&apos;s now a\n        doctor! I couldn&apos;t be prouder.\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/2023-in-review-3.jpg\" alt=\"Three photos from 2023.\" />\n\n      <p>\n        Turning to personal endeavors, I&apos;ve continued to pursue several\n        interests from previous years - writing, reading, watching movies, and\n        working on side projects.\n      </p>\n\n      <h2>Writing</h2>\n\n      <p>\n        I wrote a half dozen blog posts in 2023, half of which were reacting to\n        the sudden surge of LLMs. My drafts folder is bursting with ideas for\n        more posts that I plan to publish in 2024. Stay tuned for those!\n      </p>\n\n      <ol>\n        <li>\n          <Link href=\"/writing/keaton-ssr\">KEATON × SSR</Link>\n        </li>\n        <li>\n          <Link href=\"/writing/where-gpt-belongs\">\n            Microsoft Is Using GPT-4 Wrong\n          </Link>\n        </li>\n        <li>\n          <Link href=\"/writing/writing-code\">Writing Code Is Writing</Link>\n        </li>\n        <li>\n          <Link href=\"/writing/gpt-funhouse\">\n            Thoughts on Nick Cave’s Response to ChatGPT\n          </Link>\n        </li>\n        <li>\n          <Link href=\"/writing/large-language-mayhem\">\n            It’s Not AI, and It Wasn’t Built to Be Accurate\n          </Link>\n        </li>\n        <li>\n          <Link href=\"/writing/stamped\">The Life Electronic</Link>\n        </li>\n      </ol>\n\n      <img src=\"https://mknepprath.com/assets/2023-in-review-11.jpg\" alt=\"Three photos from 2023.\" />\n\n      <h2>Books</h2>\n\n      <p>\n        Despite the towering stacks of unread books in my house, I ventured into\n        a new reading experience this year:consuming books on my phone through\n        Apple Books. The experiment was a wild success; I read 28 books in total\n        (granted, a significant portion comprised early Sherlock Holmes short\n        stories). Favorites included Camera Man, Leonardo da Vinci, Killers of\n        the Flower Moon, and The Wager. I also delved deeper into sci-fi with\n        Dark Matter, The Murderbot Diaries, Kaiju Preservation Society, and\n        Mickey 7.\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/2023-in-review-1.jpg\" alt=\"Three photos from 2023.\" />\n\n      <h2>Film</h2>\n\n      <p>\n        Last year&apos;s movie count was 303. This year, aiming for 365, I\n        surpassed my goal by watching 438 films. Highlights included catching\n        RRR in theaters with my wife and friends, viewing Killers of the Flower\n        Moon after reading the fantastic book, Barbenheimer, Godzilla Minus One,\n        and completing Buster Keaton&apos;s filmography. I plan on writing more\n        about this topic in a separate post.\n      </p>\n\n      <div class=>\n        <Card\n          description=\"2022\"\n          href=\"https://letterboxd.com/mknepprath/film/rrr/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/5/0/8/0/3/7/p/yI1zbTaUV7ZKsSS1fzvokERDe1U-0-300-0-450-crop.jpg?v=e71679b788\"\n          title=\"RRR\"\n        />\n        <Card\n          description=\"2023\"\n          href=\"https://letterboxd.com/mknepprath/film/killers-of-the-flower-moon/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/3/9/8/0/0/9/p/3OLkNs21FLci7I54a9zS18NeGyZ-0-300-0-450-crop.jpg?v=422e890ea5\"\n          title=\"Killers of the Flower Moon\"\n        />\n        <Card\n          description=\"2023\"\n          href=\"https://letterboxd.com/mknepprath/film/barbie/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/2/7/7/0/6/4/p/gUn6zXDYilszDcNBhIPxdA4pwdn-0-300-0-450-crop.jpg?v=763ed22dfd\"\n          title=\"Barbie\"\n        />\n        <Card\n          description=\"2023\"\n          href=\"https://letterboxd.com/mknepprath/film/oppenheimer-2023/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/7/8/4/3/2/8/p/bAFmcrCpXsJis5q0aaXvCz3dTiX-0-300-0-450-crop.jpg?v=0d462642e3\"\n          title=\"Oppenheimer\"\n        />\n        <Card\n          description=\"2023\"\n          href=\"https://letterboxd.com/mknepprath/film/godzilla-minus-one/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/8/4/5/7/0/6/p/eYJsurMCdA4W8UIknII20a4pwiq-0-300-0-450-crop.jpg?v=8867d61862\"\n          title=\"Godzilla Minus One\"\n        />\n        <Card\n          description=\"1923\"\n          href=\"https://letterboxd.com/mknepprath/film/our-hospitality/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/5/1/4/2/5/51425-our-hospitality-0-150-0-225-crop.jpg?v=a83329c123\"\n          title=\"Our Hospitality\"\n        />\n        <Card\n          description=\"1925\"\n          href=\"https://letterboxd.com/mknepprath/film/go-west/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/3/0/0/8/6/30086-go-west-0-150-0-225-crop.jpg?v=b43e9db07f\"\n          title=\"Go West\"\n        />\n        <Card\n          description=\"1926\"\n          href=\"https://letterboxd.com/mknepprath/film/battling-butler/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/1/4/4/4/0/14440-battling-butler-0-150-0-225-crop.jpg?v=e6df0a78d0\"\n          title=\"Battling Butler\"\n        />\n      </div>\n\n      <h2>Games</h2>\n\n      <p>\n        I hadn’t played an AAA game in a while, but being gifted a PlayStation 5\n        this year changed that. I played through Spider-Man: Miles Morales and\n        picked up quite a few more games I’m excited to check out.\n      </p>\n\n      <p>\n        I also spent quality time with my Switch, playing Super Mario Bros.\n        Wonder with my son and venturing into Paldea in Pokémon Scarlet.\n      </p>\n\n      <p>\n        Still hooked on Wordle and Framed, I added another small game from The\n        New York Times to the list: Connections.\n      </p>\n\n      <p>\n        Lastly, I couldn&apos;t resist picking up Root:a beautifully designed\n        game where teams with unique abilities vie for control of the board.\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/2023-in-review-10.jpg\" alt=\"Three photos from 2023.\" />\n\n      <h2>Projects</h2>\n\n      <h3>Tardy Critic</h3>\n\n      <p>\n        <a href=\"https://www.tardycritic.com/\">Tardy Critic</a> is one of my\n        oldest and most neglected projects. This project was born from the idea\n        that most film reviews are published upon the release of a movie at the\n        point when it’s impossible to separate it from the hype cycle and\n        marketing surrounding it. Tardy Critic would be a site that only\n        publishes reviews of movies on their 10th anniversary, assuming that\n        that’s long enough for public opinion to settle.\n      </p>\n\n      <p>\n        This year, I decided to migrate all of the reviews from WordPress to \n        <a href=\"https://letterboxd.com/tardycritic\">Letterboxd</a> and create a\n        new website that links to their new home there. I’ve generally been\n        moving the other way with my writing, from apps to self-hosted, but I’m\n        a fan of Letterboxd and like the idea of these reviews showing up in\n        people’s feeds there.\n      </p>\n\n      <p>\n        The website has neat features in its own right, such as the\n        automatically generated anniversary list at the top of the page.\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/2023-in-review-7.jpg\" alt=\"Three photos from 2023.\" />\n\n      <h3>The Activity Feed</h3>\n\n      <p>\n        The <Link href=\"/activity\">activity feed</Link> on this website has been\n        an ongoing, fun project. Its dual purpose is to create a single feed\n        incorporating all my internet activity and make my personal website more\n        dynamic.\n      </p>\n\n      <p>\n        A neat thing happened when I put this together. Stories began to form,\n        connecting instances where a random movie thought on Mastodon preceded\n        my Letterboxd review for the same movie. This connectivity would have\n        remained invisible without the feed.\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/2023-in-review-8.jpg\" alt=\"Three photos from 2023.\" />\n\n      <h3>Bot Migration</h3>\n\n      <p>\n        For reasons we don’t need to get into here, all of my bots were\n        imperiled in early 2023 and I had to migrate them to ensure their\n        survival. Having previously moved them from Heroku to AWS, I now had to\n        shift from Twitter to Mastodon. The transition was successful, turning\n        my once Heroku-hosted Twitter bots into AWS-hosted Mastodon bots. I even\n        created a new one specifically for Mastodon, \n        <a href=\"https://mastodon.social/@PokemonFacts\">PokemonFacts</a>. 🦣\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/2023-in-review-5.jpg\" alt=\"Three photos from 2023.\" />\n\n      <h3>Personal Film Preservation Project</h3>\n\n      <p>\n        I went all in on \n        <a href=\"https://letterboxd.com/mknepprath/\">Letterboxd</a> a few years\n        ago. My film reviews before that were scattered across the internet,\n        many hidden in an old Twitter archive ZIP file. I decided to take up\n        backfilling my Letterboxd profile with reviews from the before, tracking\n        down tweets, email receipts, and even physical ticket stubs.\n      </p>\n\n      <p>\n        I was able to reach all the way back to 2008 when I watched \n        <a href=\"https://letterboxd.com/mknepprath/film/the-dark-knight/\">\n          The Dark Knight\n        </a> \n        in theaters for the first time. I even had \n        <a href=\"https://letterboxd.com/mknepprath/film/paranormal-activity/\">\n          instances\n        </a> \n        where I’d found a tweet with my thoughts about a movie that aligned with\n        a ticket stub I had saved from over a decade ago.\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/2023-in-review-6.jpg\" alt=\"Three photos from 2023.\" />\n\n      <h2>Onward...</h2>\n\n      <p>\n        At this point, it’s becoming clear to me that most of my interests are\n        converging on one mega-interest: movies. I’m either watching them or\n        reading about them or listening to podcasts about them or building\n        websites for them or just straight up \n        <a href=\"https://www.youtube.com/watch?v=pl4LEjA05oo\">making</a> \n        <a href=\"https://www.youtube.com/watch?v=_qMKKNXe8Jo\">them</a>. I have\n        ideas and tentative plans to do more with this in 2024. I want to slow\n        down on the consumption and start creating more. Let’s go.\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/2023-in-review-9.jpg\" alt=\"Three photos from 2023.\" />",
      "content_text": "A look at my accomplishments during the past year. • https://mknepprath.com/writing/2023",
      "summary": "A look at my accomplishments during the past year.",
      "image": "https://mknepprath.com/assets/2023-in-review-2.jpg",
      "date_published": "2024-01-07T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/stamped",
      "url": "https://mknepprath.com/writing/stamped",
      "title": "The Life Electronic",
      "content_html": "<p>\n        <img src=\"https://mknepprath.com/assets/zissou-1.jpg\" alt=\"The Belafonte.\" />\n      </p>\n\n      <header>\n        <h1>The Life Electronic</h1>\n      </header>\n\n      <blockquote>\n        &ldquo;I had no idea what to expect going into this, but I was not\n        disappointed.&rdquo; \n        <p>\n          - My review of \n          <em>\n            <a href=\"https://letterboxd.com/mknepprath/film/the-life-aquatic-with-steve-zissou/1/\">\n              The Life Aquatic with Steve Zissou\n            </a>\n          </em>\n          , Jan 2012.\n        </p>\n      </blockquote>\n\n      <p>\n        Back in 2012, I posted a movie review on a fledgling platform at the\n        time, \n        <a href=\"https://web.archive.org/web/20140226032433/http://mashable.com/2011/11/25/stamped-iphone-recommendation-app/\">\n          Stamped\n        </a>\n        , where users could post reviews of things and recommend them to their\n        friends.\n      </p>\n\n      <p>Stamped was quickly bought up by Yahoo and shuttered shortly after.</p>\n\n      <p>\n        Thanks to a popular but short-lived trend at the time, Stamped included\n        the ability to cross-post to other platforms when you published a\n        review. This review ended up on Twitter.\n      </p>\n\n      <p>\n        In 2021, I became tired of the clutter on my Twitter profile and decided\n        to delete a majority of my tweets. Unsurprisingly, this included my\n        Stamped review.\n      </p>\n\n      <p>\n        Last year I stumbled upon the \n        <a href=\"https://github.com/tweetback/tweetback\">Tweetback</a> project,\n        a way to publish my tweets to my own site. Luckily, I&apos;d been\n        paranoid and downloaded my Twitter archive every few years since 2012. I\n        set up my own Tweetback instance and got all of my tweets... \n        <a href=\"https://twitter.mknepprath.com/160767944668876801/\">back</a>.\n      </p>\n\n      <p>\n        Finally, I decided to backfill my Letterboxd account using reviews\n        I&apos;d written across the web and ticket stubs I&apos;d saved over the\n        years. This particular review completed its journey from Stamped to\n        Twitter to a ZIP file in iCloud to my website to Letterboxd and now\n        lives alongside my growing collection of movie reviews. \n        <a href=\"https://letterboxd.com/mknepprath/film/the-life-aquatic-with-steve-zissou/1/\">\n          Here it is.\n        </a>\n      </p>\n\n      <p>\n        Unfortunately, when the Stamped review was cross-posted, its content was\n        cut off. Had I said more about it at the time? \n        <em>We may never know.</em>\n      </p>\n\n      <p>Preserving the internet is hard.</p>\n\n      <p>\n        <img src=\"https://mknepprath.com/assets/zissou.jpg\" alt=\"An illustration of Zissou.\" />\n      </p>\n      <p>\n        <em>Art by Michael Knepprath, 2012.</em>\n      </p>",
      "content_text": "Navigating the ephemeral nature of digital content. • https://mknepprath.com/writing/stamped",
      "summary": "Navigating the ephemeral nature of digital content.",
      "image": "https://mknepprath.com/assets/zissou-1.jpg",
      "date_published": "2023-12-19T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/large-language-mayhem",
      "url": "https://mknepprath.com/writing/large-language-mayhem",
      "title": "It’s Not AI, and It Wasn’t Built to Be Accurate",
      "content_html": "<header>\n        <h1>It’s Not AI, and It Wasn’t Built to Be Accurate</h1>\n      </header>\n\n      <p>\n        I&apos;d already been getting frustrated with the discourse around LLMs,\n        but watching the latest Humane demo and fallout put me over the edge.\n      </p>\n\n      <p>\n        In my last post on this topic, I said, &ldquo;GPT has no concept of\n        accuracy or correctness, so it&apos;s wild to see... well-known\n        companies placing this volatile service in front of their customers with\n        relatively few precautionary measures.&rdquo; I thought I was being a\n        bit punchy, but time has proven this take to be tame.\n      </p>\n\n      <p>\n        Humane has just launched their long-awaited flagship product, the \n        <a href=\"https://vimeo.com/882968794\">Humane Ai Pin</a>. Despite the dry\n        video, I was taken with the sci-fi-like device brought to life. I\n        assumed that Humane had somehow overcome the accuracy problem, as they\n        surely wouldn&apos;t launch an entire product predicated on the\n        assumption that an LLM left to its own devices would return accurate\n        information.\n      </p>\n\n      <p>\n        I was wrong. Humane released a prerecorded and edited launch video\n        featuring \n        <a href=\"https://mastodon.social/@ironicsans/111381973070786872\">\n          not one\n        </a> \n        <a href=\"https://mastodon.social/@siracusa/111384288436972133\">\n          but two\n        </a> \n        wholly inaccurate responses from the &ldquo;AI&rdquo; pin.\n      </p>\n\n      <p>\n        Humane is receiving a lot of flak about this right now, but they&apos;re\n        far from the only ones with this issue. My research today led me to\n        Google, &ldquo;What are the technical differences between GPT-3 and\n        GPT-4?&rdquo; and Google&apos;s big bold pull quote at the top was all\n        about how much more powerful GPT-3 is than GPT-4.\n      </p>\n\n      <p>LLMs are breaking the internet.</p>\n\n      <p>\n        ChatGPT (and LLMs in general) weren&apos;t built for this. LLMs were\n        built with the singular goal of emulating human language - \n        <em>sounding human</em> isn&apos;t the same as <em>being accurate</em>,\n        although some level of the latter is required to accomplish the former.\n        Any incidental accuracy is a byproduct of the fact that it&apos;s\n        trained to sound authentic.\n      </p>\n\n      <p>\n        After all this LLM-bashing, I do have to say that this technology can be\n        useful. To make the most of it, however, we need to understand its\n        limitations and build accordingly.\n      </p>",
      "content_text": "LLMs are breaking the internet. • https://mknepprath.com/writing/large-language-mayhem",
      "summary": "LLMs are breaking the internet.",
      "date_published": "2023-11-11T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/gpt-funhouse",
      "url": "https://mknepprath.com/writing/gpt-funhouse",
      "title": "Thoughts on Nick Cave's Response to ChatGPT",
      "content_html": "<header>\n        <h1>Thoughts on Nick Cave's Response to ChatGPT</h1>\n      </header>\n\n      <p>\n        <em>\n          &ldquo;This is what we humble humans can offer, that AI can only\n          mimic, the transcendent journey of the artist that forever grapples\n          with his or her own shortcomings.&rdquo; -\n          <a href=\"https://www.theredhandfiles.com/chat-gpt-what-do-you-think/\">\n            Nick Cave, The Red Hand Files Issue #218\n          </a>\n          .\n        </em>\n      </p>\n      <p>\n        While this post is well-written and provides great insight into the\n        song-writing process, it betrays a slight misunderstanding of what this\n        AI is. He is correct that this “AI” is \n        <a href=\"https://www.bloomberg.com/opinion/articles/2023-03-26/even-with-chat-gpt-4-there-s-no-such-thing-as-artificial-intelligence\">\n          not truly AI\n        </a> \n        and is not intelligent. There is no… there… there.\n      </p>\n      <p>\n        But the output of it <em>is</em> interesting. Mimicry, sure, but this\n        word is used here to needlessly cheapen it. I’d liken it more to a\n        reflection. Not of any single artist, but of humanity filtered back\n        through humanity’s understanding of that artist. An unfathomable amount\n        of human creation synthesized through an algorithm to output a singular\n        result. That is interesting.\n      </p>",
      "content_text": "While this post is well-written and provides great insight into the song-writing process, it betrays a slight misunderstanding of what this AI is... • https://mknepprath.com/writing/gpt-funhouse",
      "summary": "While this post is well-written and provides great insight into the song-writing process, it betrays a slight misunderstanding of what this AI is...",
      "date_published": "2023-07-28T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/writing-code",
      "url": "https://mknepprath.com/writing/writing-code",
      "title": "Writing Code Is Writing",
      "content_html": "<header>\n        <h1>Writing Code Is Writing</h1>\n      </header>\n\n      <p>\n        <em>\n          Note: This is my opinion. If you have thoughts or concerns,\n          that&apos;s fine - feel free to \n          <a href=\"https://mastodon.social/@mknepprath\">message me</a>.\n        </em>\n      </p>\n      <p>\n        When writing code, it’s easy to fall into that trap of thinking that\n        you’re writing for the computer. You’re not. You’re writing for other\n        engineers... whether it be your coworkers, the open source community, or\n        yourself in six months. Making sure your code is human-readable is just\n        as important as making sure it works.\n      </p>\n      <p>\n        How do you make code human-readable? Think about the intended message of\n        each line. For instance, I once had a hard rule to never type \n        <code class=\"language-js\">value === true</code> for boolean\n        variables because it was technically redundant. For example, let’s look\n        at the following snippet:\n      </p>\n      <pre>\n        <code class=\"language-js\">\n          \nif (value) console.log(value);\n        \n        </code>\n      </pre>\n      <p>\n        This is quite readable to me. I can easily read this as, “if there’s a\n        value, log the value to the console.”\n      </p>\n      <p>Now the next example:</p>\n      <pre>\n        <code class=\"language-js\">\n          \nObject.values(form.checkboxes).every((checkbox) => checkbox);\n        \n        </code>\n      </pre>\n      <p>\n        Is it immediately obvious what this code is doing? I don’t think so.\n        It’s not difficult code, but you do have to do an extra run around the\n        mental event loop for your brain to process it. “This is checking if\n        every checkbox in the form is…?”\n      </p>\n      <p>\n        The change that would make this code clearer to me would be the\n        following:\n      </p>\n      <pre>\n        <code class=\"language-js\">\n          \nObject.values(form.checkboxes)\n  .every((checkbox) => checkbox === true);\n        \n        </code>\n      </pre>\n      <p>\n        The <code class=\"language-js\">=== true</code> here is completely\n        unnecessary when it comes to the functionality of the code, but does\n        wonders for the legibility of the code. “Ah! This is checking if every\n        checkbox in the form is true.”\n      </p>\n      <p>\n        Notice what I’ve been doing in all of the examples above? Reading your\n        code back to yourself using natural language is a great way to gauge\n        code clarity.\n      </p>\n      <p>\n        You aren’t a robot and your code shouldn’t appear to be written by one.\n        Don’t simplify your code without thinking. What you choose to include or\n        exclude should depend a great deal on what makes it easier to read.\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/comics-13.jpeg\" alt=\"Duck\" />",
      "content_text": "While it’s easy to fall into that trap of thinking that you’re writing for the computer. You’re not. You’re writing for other engineers... • https://mknepprath.com/writing/writing-code",
      "summary": "While it’s easy to fall into that trap of thinking that you’re writing for the computer. You’re not. You’re writing for other engineers...",
      "date_published": "2023-07-22T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/where-gpt-belongs",
      "url": "https://mknepprath.com/writing/where-gpt-belongs",
      "title": "Microsoft Is Using GPT-4 Wrong",
      "content_html": "<header>\n        <h1>Microsoft Is Using GPT-4 Wrong</h1>\n      </header>\n\n      <blockquote>\n        <p>\n          I’m sure it’s been said but I haven’t seen it said: GPT-3 seems way\n          more useful for converting user input into some computer-readable form\n          than for publishing its output directly to users/customers/etc. I\n          would not trust it for that.\n          <br />(\n          <a href=\"https://mastodon.social/@mknepprath/109826168395645602\">\n            Michael Knepprath, Mastodon\n          </a>\n          )\n        </p>\n      </blockquote>\n      <p>\n        I want to expand on my thoughts from a month ago based on \n        <a href=\"https://www.washingtonpost.com/technology/2023/02/16/microsoft-bing-ai-chat-interview/\">\n          recent events\n        </a> \n        and my own experience working with \n        <a href=\"https://openai.com/product/gpt-4\">GPT</a>. \n      </p>\n      <p>\n        It’s easy to lose sight of what GPT is in all the chatter about how GPT\n        “feels” or what it “wants”. GPT is closer to a human language \n        <em>emulator</em>, it has no intelligence to call its own. When asked,\n        “What is the meaning of life in one word?”, it will predict an answer\n        letter-by-letter based on similar patterns of letters in its corpus. In\n        this case it might return, “Purpose.” What it’s returning here is not\n        all that different from the autocomplete suggestions that appear in your\n        messaging app as you type.\n      </p>\n      <h2 id=\"i-\">I.</h2>\n      <p>So, what’s the problem with how GPT is being used right now?</p>\n      <blockquote>\n        <p>\n          “Liu, who took a leave from studying at Stanford University to found\n          an AI search company called Chord, said such easy workarounds suggest\n          ‘lots of AI safeguards feel a little tacked-on to a system that\n          fundamentally retains its hazardous capabilities.’” (\n          <a href=\"https://www.washingtonpost.com/technology/2023/02/14/chatgpt-dan-jailbreak/\">\n            Washington Post, Meet ChatGPT’s Evil Twin, DAN\n          </a>\n          )\n        </p>\n      </blockquote>\n      <p>\n        <a href=\"https://blog.opencagedata.com/post/dont-believe-chatgpt\">\n          GPT has no concept of accuracy or correctness\n        </a>\n        , so it’s wild to see Notion, Microsoft, Snapchat and other well-known\n        companies placing this \n        <a href=\"https://twitter.com/TallBart/status/1632183062573510657\">\n          volatile service\n        </a> \n        in front of their customers with relatively few precautionary measures.\n        When Microsoft announced their new GPT-powered Bing Search, I assumed\n        Microsoft had cracked it. Surely <em>Microsoft</em> wouldn’t release a\n        search engine that told their customers it loved them. Or compared them\n        to Hitler. Or straight up lied and then argued with their customers\n        about the lies it told.\n      </p>\n      <p>\n        <a href=\"https://www.cnbc.com/2023/02/16/microsofts-bing-ai-is-leading-to-creepy-experiences-for-users.html\">\n          Yet here we are.\n        </a>\n      </p>\n      <p>Maybe it’s too early to judge. This is a beta, after all. </p>\n      <p>\n        But I’d like to posit this: These companies are using GPT technology\n        poorly. In most cases, they should not be outputting GPT results\n        directly to customers. At best it’s a novelty. At worst you have Bing,\n        which uses GPT-4 to serve Microsoft’s customers inaccurate information\n        with an authoritative voice.\n      </p>\n      <h2 id=\"ii-\">II.</h2>\n      <p>Where do I think GPT would be most useful? </p>\n      <p>\n        Instead of adding separate GPT-enabled experiences to interfaces it\n        should be used to augment existing interfaces. A few examples off the\n        top of my head: voice-activated home assistants (Alexa, Siri, Google\n        Home), chatbots, search inputs and text games.\n      </p>\n      <p>\n        Customers don’t need to be aware of the fact that GPT or “AI” is\n        involved at all. When the hype wears off, customers simply won’t care\n        (unless it’s making their experience worse).\n      </p>\n      <p>\n        The theme I will keep coming back to is this: \n        <em>\n          GPT should be used to infer user intent and convert it into a valid\n          format the service understands.\n        </em>\n      </p>\n      <h3 id=\"home-assistants\">Home Assistants</h3>\n      <p>\n        Home assistants have been around for nearly a decade now and still\n        suffer from a core issue they’ve had since day one: they lack an\n        interface. This makes using them completely opaque. You have to know\n        which words to say and in which order to say them to get any kind of\n        consistent result.\n      </p>\n      <p>\n        <em>\n          GPT should be used to infer user intent based on what they say and\n          convert it into a valid format the home assistant understands.\n        </em>\n      </p>\n      {/*<p></p>*/}\n      <p>\n        Instead of saying the strange incantation, “Alexa, stop in the kitchen,”\n        you could say, “Alexa, please stop playing music in the kitchen.” GPT\n        will convert the latter phrase into the former without the user’s\n        knowledge. It will just work.\n      </p>\n      <h3 id=\"chatbots\">Chatbots</h3>\n      <p>\n        Facebook led the charge when chatbots had their 15 minutes of fame 7\n        years ago. They quickly faded away when they hit the same wall as home\n        assistants: they’re completely opaque. Users had no idea which messages\n        would yield useful replies and the chatbots weren’t flexible enough to\n        accept arbitrary user input.\n      </p>\n      <p>\n        <em>\n          GPT should be used to infer user intent based on what they message and\n          convert it into a valid format the chatbot understands.\n        </em>\n      </p>\n      {/*<p></p>*/}\n      <p>\n        This frees users by letting them send messages in any format they feel\n        comfortable with.\n      </p>\n      <h3 id=\"search-inputs\">Search Inputs</h3>\n      <p>\n        Search inputs on websites are typically quite naive. They often don’t do\n        much more than text-matching across the contents of a site. If you don’t\n        know the exact text used on the site, you’ll struggle.\n      </p>\n      <p>\n        <em>\n          GPT should be used to infer user intent based on what they search and\n          convert it into a valid format the site’s search engine understands.\n        </em>\n      </p>\n      {/*<p></p>*/}\n      <p>\n        Not only that, but the search input could be supercharged with its\n        newfound natural language recognition abilities. If GPT is provided the\n        site map, FAQs or even the customer-facing API interface, a user could\n        type, “How do I change the location in my profile to Cleveland, OH?” and\n        be provided with a list that includes a link to a step-by-step guide, a\n        link to the profile editing page, or even the option to make the change\n        directly from the search input itself.\n      </p>\n      <h3 id=\"text-games\">Text Games</h3>\n      <p>\n        Some text adventure games get around their lack of interface by listing\n        options for the player to select from. This is a big trade-off, as it\n        limits the options a player has at any given moment and prevents the\n        player from exploring. Historically, the trade-off has been worth it\n        because letting the player enter arbitrary commands and fail repeatedly\n        is a frustrating experience. With GPT, this trade-off is moot.\n      </p>\n      <p>\n        <em>\n          GPT should be used to infer player intent based on what they enter and\n          convert it into a valid format the game understands.\n        </em>\n      </p>\n      {/*<p></p>*/}\n      <p>\n        This is a particularly fun example for me because \n        <strong>I have already implemented it in my text adventure game</strong>\n        , <a href=\"https://mastodon.social/@familiarlilt\">lilt</a>. That’s right, I have a\n        live example of the concept I’m proposing here and I’ll be writing a\n        separate post about how I implemented it. Spoiler alert: It was not hard\n        to do and makes the game infinitely more pleasant to interact with.\n      </p>\n      <h2 id=\"iii-\">III.</h2>\n      <p>\n        I’m not surprised that these companies are currently implementing GPT in\n        quick, hacky ways. There is a ton of hype around the technology right\n        now and hopping on it before the competition garners a lot of attention.\n        I do think this is how we should view a lot of what’s out there right\n        now, though: marketing gimmickry.\n      </p>\n      <p>\n        I do believe GPT and others like it will be a major part of our\n        technological future. It will become an invisible layer that closes the\n        human/computer communication gap.\n      </p>\n      <p>Thanks for reading! 👋</p>",
      "content_text": "https://mknepprath.com/writing/where-gpt-belongs",
      "date_published": "2023-03-23T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/keaton-ssr",
      "url": "https://mknepprath.com/writing/keaton-ssr",
      "title": "KEATON × SSR",
      "content_html": "<img src=\"https://mknepprath.com/assets/keaton-ssr-1.png\" alt=\"Buster Keaton and S. S. Rajamouli\" />\n\n      <header>\n        <h1>KEATON × SSR</h1>\n      </header>\n\n      <p>\n        If you know me, you know I&apos;ve been obsessed with the film \n        <a href=\"https://letterboxd.com/film/rrr/\">RRR</a> since early last\n        year. I&apos;ve seen it half a dozen times, and my obsession hasn&apos;t\n        stopped there - I&apos;ve gone back and watched most of the director S.\n        S. Rajamouli&apos;s other films as well.\n      </p>\n      <p>\n        If you know me, you know I&apos;ve been watching tons of old\n        black-and-white films with my son over the past couple of years.\n        I&apos;ve gravitated towards Buster Keaton being my favorite of the\n        silent era comedians and consider \n        <a href=\"https://letterboxd.com/film/sherlock-jr/\">Sherlock, Jr.</a> one\n        of my all-time favorite films.\n      </p>\n      <p>\n        Earlier this year, I worked my way back to watching Rajamouli&apos;s\n        2010 film, \n        <a href=\"https://letterboxd.com/film/maryada-ramanna/\">\n          Maryada Ramanna\n        </a>\n        . I found the premise novel and fun. From Letterboxd: &ldquo;Ramu\n        returns to his hometown to sell a piece of land he owns and falls in\n        love with a young woman only to find out that her parents want him\n        dead.&rdquo; The film starts by setting up a deadly rivalry between\n        families, jumps forward in time to the protagonist taking a train to his\n        hometown, and continues from there.\n      </p>\n      <p>\n        A few weeks later I put on Buster Keaton&apos;s 1923 film \n        <a href=\"https://letterboxd.com/film/our-hospitality/\">\n          Our Hospitality\n        </a>\n        . It starts by setting up a deadly rivalry between families. I thought,\n        &ldquo;Huh, I&apos;ll have to note this similarity in my review.&rdquo;\n        It continues by jumping forward to the protagonist taking a train to his\n        hometown. I thought, &ldquo;Hold on... What&apos;s happening?&rdquo; It\n        quickly became apparent that I was watching <em>THE SAME MOVIE</em>.\n      </p>\n      <p>\n        The serendipity of this experience surprised and delighted me. I had to\n        do something with it, so I made this. Enjoy!\n      </p>\n\n      <iframe\n        width=\"100%\"\n        height=\"353\"\n        src=\"https://www.youtube.com/embed/pl4LEjA05oo\"\n        title=\"YouTube video player\"\n        frameBorder=\"0\"\n        allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\n        allowFullScreen\n      ></iframe>",
      "content_text": "A story about two obsessions colliding. • https://mknepprath.com/writing/keaton-ssr",
      "summary": "A story about two obsessions colliding.",
      "image": "https://mknepprath.com/assets/keaton-ssr-2.png",
      "date_published": "2023-03-10T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/2022-in-film",
      "url": "https://mknepprath.com/writing/2022-in-film",
      "title": "2022 in Film",
      "content_html": "<img src=\"https://mknepprath.com/assets/2022-in-review-2.jpg\" alt=\"Three photos from 2022.\" />\n\n      <header>\n        <h1>2022 in Film</h1>\n      </header>\n\n      <p>\n        Hi all! I wanted to take a moment to reflect on all the films I watched\n        in 2022. Below you will find a number of film cards. Each of these links\n        to my Letterboxd review. Click on any of them to read my thoughts on the\n        film.\n      </p>\n      <p>\n        By the end of the year I had watched a total of 302 films, nearly triple\n        2021&apos;s total. This amounted to almost 500 hours of movie-watching.\n        15.6% of the films I watched were new 2022 releases and 23.5% were\n        rewatches.\n      </p>\n\n      <h2>My Top Films of 2022</h2>\n\n      <p>\n        While I was able to watch a lot of great films, I know there are still\n        many more from last year that I haven&apos;t seen yet. This list only\n        covers the films I watched in 2022 - sorry if I missed any of your\n        favorites!\n      </p>\n\n      <p>\n        Let&apos;s start with my personal top movies of the year. My top 2 were:\n      </p>\n\n      <div class=>\n        <Shot\n          description=\"2022\"\n          href=\"https://letterboxd.com/mknepprath/film/everything-everywhere-all-at-once/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/4/7/4/4/7/4/p/7rvVWbvg0CuNzYigehTs0lRUCs8-0-1000-0-1500-crop.jpg?v=2c1066d075 2x\"\n          title=\"Everything Everywhere All at Once\"\n        />\n        <div>\n          <p>\n            <a href=\"https://letterboxd.com/mknepprath/film/everything-everywhere-all-at-once/\">\n              Everything Everywhere All at Once\n            </a> \n            is a mind-bending sci-fi film that kept me on the edge of my seat.\n            My wife and I watched it in theaters shortly after it came out\n            without knowing anything about it. We loved it so much that\n            we&apos;ve watched it a few more times since. It&apos;s so dense\n            that I was still discovering new things during my 4th viewing.\n          </p>\n          <p>\n            Despite being an earlier release, this held the top spot as my\n            favorite film of the year. I&apos;m so excited to see what the\n            directors have in store for us next.\n          </p>\n        </div>\n      </div>\n\n      <div class=>\n        <Shot\n          description=\"2022\"\n          href=\"https://letterboxd.com/mknepprath/film/rrr/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/5/0/8/0/3/7/p/yI1zbTaUV7ZKsSS1fzvokERDe1U-0-1000-0-1500-crop.jpg?v=e71679b788 2x\"\n          title=\"RRR\"\n        />\n        <div>\n          <p>\n            <a href=\"https://letterboxd.com/mknepprath/film/rrr/\">RRR</a> is\n            Telugu period action film that was just an epic ride. I watched it\n            four times last year as well, and I&apos;m planning to put it on\n            again soon.\n          </p>\n          <p>\n            Both this and Everything Everywhere could be considered maximalist\n            films in that they both do... everything. Neither leaves anything on\n            the table.\n          </p>\n          <p>\n            This one in particular led me to watch many more Indian films\n            including others by S. S. Rajamouli, the director of RRR.\n          </p>\n        </div>\n      </div>\n\n      <p>And the next 10 in no particular order:</p>\n\n      <div class=>\n        <Card\n          description=\"2022\"\n          href=\"https://letterboxd.com/mknepprath/film/nope/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/6/8/2/5/4/7/682547-nope-0-300-0-450-crop.jpg?v=d6a6158cc3 2x\"\n          title=\"Nope\"\n        />\n        <Card\n          description=\"2022\"\n          href=\"https://letterboxd.com/mknepprath/film/the-batman/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/3/4/8/9/1/4/p/seyWFgGInaLqW7nOZvu0ZC95rtx-0-300-0-450-crop.jpg?v=a6e77c81b2 2x\"\n          title=\"The Batman\"\n        />\n        <Card\n          description=\"2022\"\n          href=\"https://letterboxd.com/mknepprath/film/turning-red/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/4/3/8/7/2/7/438727-turning-red-0-150-0-225-crop.jpg?v=85497b8090 2x\"\n          title=\"Turning Red\"\n        />\n        <Card\n          description=\"2022\"\n          href=\"https://letterboxd.com/mknepprath/film/triangle-of-sadness/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/4/2/7/9/7/0/p/omzkwoLVSEZhs1h5e3XqoHo8eF5-0-300-0-450-crop.jpg?v=0c901c9ba9 2x\"\n          title=\"Triangle of Sadness\"\n        />\n        <Card\n          description=\"2022\"\n          href=\"https://letterboxd.com/mknepprath/film/barbarian-2022/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/8/1/9/6/4/8/819648-barbarian-0-150-0-225-crop.jpg?v=75b067327a 2x\"\n          title=\"Barbarian\"\n        />\n        <Card\n          description=\"2022\"\n          href=\"https://letterboxd.com/mknepprath/film/athena-2022-1/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/7/6/6/6/0/7/766607-athena-0-300-0-450-crop.jpg?v=6d9beba4a5 2x\"\n          title=\"Athena\"\n        />\n        <Card\n          description=\"2022\"\n          href=\"https://letterboxd.com/mknepprath/film/prey-2022/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/6/8/6/3/8/9/686389-prey-0-150-0-225-crop.jpg?v=f9f0c6bb6e 2x\"\n          title=\"Prey\"\n        />\n        <Card\n          description=\"2022\"\n          href=\"https://letterboxd.com/mknepprath/film/glass-onion-a-knives-out-mystery/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/5/8/6/7/2/3/p/vDGr1YdrlfbU9wxTOdpf3zChmv9-0-300-0-450-crop.jpg?v=1969a4d3cc 2x\"\n          title=\"Glass Onion\"\n        />\n        <Card\n          description=\"2022\"\n          href=\"https://letterboxd.com/mknepprath/film/black-panther-wakanda-forever/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/4/3/5/4/6/0/435460-black-panther-wakanda-forever-0-150-0-225-crop.jpg?v=27db1e3d45 2x\"\n          title=\"Black Panther: Wakanda Forever\"\n        />\n        <Card\n          description=\"2022\"\n          href=\"https://letterboxd.com/mknepprath/film/marcel-the-shell-with-shoes-on-2021/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/7/8/1/3/2/6/p/jaYmP4Ct8YLnxWAW2oYkUjeXtzm-0-150-0-225-crop.jpg?v=30c0473928 2x\"\n          title=\"Marcel the Shell with Shoes On\"\n        />\n      </div>\n\n      <h2>My Top Films Watched in 2022</h2>\n\n      <p>\n        I also want to mention the best movies I watched this year, regardless\n        of when they were released. 2022 was a year of catching up on culturally\n        significant films I had missed. Represented here are a number of films I\n        continue to think about and bring up in conversation frequently with\n        friends. Again, in no particular order.\n      </p>\n\n      <div class=>\n        <Card\n          description=\"1962\"\n          href=\"https://letterboxd.com/mknepprath/film/harakiri/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/4/3/0/1/5/43015-harakiri-0-150-0-225-crop.jpg?v=007080a0fb 2x\"\n          title=\"Harakiri\"\n        />\n        <Card\n          description=\"2018\"\n          href=\"https://letterboxd.com/mknepprath/film/minding-the-gap/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/4/2/0/4/5/6/p/mXpMU9hAY882xUq2YV5b7BZlqTN-0-150-0-225-crop.jpg?v=5ad43e0f21 2x\"\n          title=\"Minding the Gap\"\n        />\n        <Card\n          description=\"1985\"\n          href=\"https://letterboxd.com/mknepprath/film/come-and-see/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/3/6/1/9/2/p/qNbMsKVzigERgJUbwf8pKyZogpb-0-150-0-225-crop.jpg?v=b4d07fdb58 2x\"\n          title=\"Come and See\"\n        />\n        <Card\n          description=\"2021\"\n          href=\"https://letterboxd.com/mknepprath/film/the-green-knight/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/4/8/8/3/9/9/p/if4hw3Ou5Sav9Em7WWHj66mnywp-0-150-0-225-crop.jpg?v=2ee7553714 2x\"\n          title=\"The Green Knight\"\n        />\n        <Card\n          description=\"2021\"\n          href=\"https://letterboxd.com/mknepprath/film/west-side-story-2021/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/4/4/1/4/7/1/p/3WnyUEG41PXB1YIu4JR1z8om0Xj-0-150-0-225-crop.jpg?v=ca4292cdfd 2x\"\n          title=\"West Side Story\"\n        />\n        <Card\n          description=\"2014\"\n          href=\"https://letterboxd.com/mknepprath/film/whiplash-2014/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/sm/upload/cl/dn/kr/f1/4C9LHDxMsoYI0S3iMPZdm3Oevwo-0-150-0-225-crop.jpg?v=d13ea36528 2x\"\n          title=\"Whiplash\"\n        />\n        <Card\n          description=\"1959\"\n          href=\"https://letterboxd.com/mknepprath/film/north-by-northwest/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/5/1/8/4/3/51843-north-by-northwest-0-150-0-225-crop.jpg?v=d458d56e9f 2x\"\n          title=\"North by Northwest\"\n        />\n        <Card\n          description=\"1957\"\n          href=\"https://letterboxd.com/mknepprath/film/the-seventh-seal/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/5/1/6/2/0/51620-the-seventh-seal-0-150-0-225-crop.jpg?v=fa1963f0b2 2x\"\n          title=\"The Seventh Seal\"\n        />\n        <Card\n          description=\"1975\"\n          href=\"https://letterboxd.com/mknepprath/film/barry-lyndon/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/4/9/8/1/1/p/znfLskGQnXYB2xcOGM9eInRHPAV-0-150-0-225-crop.jpg?v=fd147ea3cd 2x\"\n          title=\"Barry Lyndon\"\n        />\n        <Card\n          description=\"1942\"\n          href=\"https://letterboxd.com/mknepprath/film/casablanca/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/5/1/7/7/0/p/pQjUifS7GXimKOtRwPf8nXWw1bd-0-150-0-225-crop.jpg?v=39f19ba675 2x\"\n          title=\"Casablanca\"\n        />\n        <Card\n          description=\"1975\"\n          href=\"https://letterboxd.com/mknepprath/film/jeanne-dielman-23-quai-du-commerce-1080-bruxelles/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/2/1/1/4/9/21149-jeanne-dielman-23-quai-du-commerce-1080-bruxelles-0-150-0-225-crop.jpg?v=c5ca6dfec9 2x\"\n          title=\"Jeanne Dielman, 23 Quai du Commerce, 1080 Bruxelles\"\n        />\n        <Card\n          description=\"1964\"\n          href=\"https://letterboxd.com/mknepprath/film/dr-strangelove-or-how-i-learned-to-stop-worrying-and-love-the-bomb/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/5/1/2/1/8/p/gHm96BRW4GoI339rF1vYoYTB6Qe-0-150-0-225-crop.jpg?v=b918851629 2x\"\n          title=\"Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb\"\n        />\n      </div>\n\n      <h2>My Top Obscure Films Watched in 2022</h2>\n\n      <p>\n        Here&apos;s a special shoutout to some of the more obscure films I\n        enjoyed this year. I calculated this by sorting my Letterboxd list by\n        popularity, scrolling to the bottom, and picking the first 10 films that\n        I had rated 4 stars or higher.\n      </p>\n\n      <div class=>\n        <Card\n          description=\"2019\"\n          href=\"https://letterboxd.com/mknepprath/film/the-haunted-swordsman/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/5/5/9/3/6/3/559363-the-haunted-swordsman-0-150-0-225-crop.jpg?v=6bb08bb270 2x\"\n          title=\"The Haunted Swordsman\"\n        />\n        <Card\n          description=\"2012\"\n          href=\"https://letterboxd.com/mknepprath/film/pizza-2012/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/1/0/6/5/5/2/106552-pizza-0-150-0-225-crop.jpg?v=455d636d44 2x\"\n          title=\"Pizza\"\n        />\n        <Card\n          description=\"1995\"\n          href=\"https://letterboxd.com/mknepprath/film/magnetic-rose/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/2/6/8/8/2688-magnetic-rose-0-150-0-225-crop.jpg?v=5717913a6f 2x\"\n          title=\"Magnetic Rose\"\n        />\n        <Card\n          description=\"2021\"\n          href=\"https://letterboxd.com/mknepprath/film/sardar-udham/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/5/2/6/3/7/3/526373-sardar-udham-0-150-0-225-crop.jpg?v=9acf95286a 2x\"\n          title=\"Sardar Udham\"\n        />\n        <Card\n          description=\"1922\"\n          href=\"https://letterboxd.com/mknepprath/film/cops/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/2/5/8/7/3/p/6CX4AcuxBjVjXxthVilYtU942Ad-0-150-0-225-crop.jpg?v=48e57eb442 2x\"\n          title=\"Cops\"\n        />\n        <Card\n          description=\"2021\"\n          href=\"https://letterboxd.com/mknepprath/film/murina/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/7/5/3/3/9/3/753393-murina-0-150-0-225-crop.jpg?v=f8f9b4eb45 2x\"\n          title=\"Murina\"\n        />\n        <Card\n          description=\"2017\"\n          href=\"https://letterboxd.com/mknepprath/film/bahubali-2-the-conclusion/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/2/8/0/7/1/0/280710-baahubali-the-conclusion-0-150-0-225-crop.jpg?v=e3236ba8ee 2x\"\n          title=\"Bāhubali 2\"\n        />\n        <Card\n          description=\"2018\"\n          href=\"https://letterboxd.com/mknepprath/film/tumbbad/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/4/6/8/1/9/5/468195-tumbbad-0-150-0-225-crop.jpg?v=c48f92ce1f 2x\"\n          title=\"Tumbbad\"\n        />\n        <Card\n          description=\"2021\"\n          href=\"https://letterboxd.com/mknepprath/film/robin-robin/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/5/7/5/7/6/2/575762-robin-robin-0-150-0-225-crop.jpg?v=64388e0d1d 2x\"\n          title=\"Robin Robin\"\n        />\n        <Card\n          description=\"1928\"\n          href=\"https://letterboxd.com/mknepprath/film/steamboat-bill-jr/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/3/5/8/0/8/35808-steamboat-bill-jr--0-150-0-225-crop.jpg?v=ad7722e288 2x\"\n          title=\"Steamboat Bill, Jr.\"\n        />\n        <Card\n          description=\"1928\"\n          href=\"https://letterboxd.com/mknepprath/film/the-cameraman/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/3/1/2/0/0/p/oz7dVRzxN95IIpa7hsG5XS3nO2L-0-150-0-225-crop.jpg?v=489d2e9923 2x\"\n          title=\"The Cameraman\"\n        />\n        <Card\n          description=\"1971\"\n          href=\"https://letterboxd.com/mknepprath/film/duel/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/5/1/3/1/3/p/vGVxYIAstgGIjjhXXXfmeqtNLmz-0-150-0-225-crop.jpg?v=1e193825e9 2x\"\n          title=\"Duel\"\n        />\n      </div>\n\n      <h2>My Top Reviews from 2022</h2>\n\n      <p>Here are a few of my more popular film reviews from this year.</p>\n\n      <FilmPost\n        url=\"https://letterboxd.com/mknepprath/film/jurassic-park/\"\n        title=\"Jurassic Park (1993)\"\n        summary=\"Jurassic Park still isn’t showing its age - the CG looks better than the CG in 90% of movies that have come out since.\n        No one’s made a better shark movie since Jaws and no one’s made a better dinosaur movie since this. What’s Spielberg’s secret?\"\n        date=\"2022-05-14\"\n        id=\"jurassic-park\"\n        action=\"Reviewed\"\n        image=\"https://a.ltrbxd.com/resized/alternative-poster/5/1/7/3/3/p/b1xCNnyrPebIc7EWNZIa6jhb1Ww-0-150-0-225-crop.jpg?v=294447a63d\"\n      />\n      <FilmPost\n        url=\"https://letterboxd.com/mknepprath/film/prey-2022/\"\n        title=\"Prey (2022)\"\n        summary=\"I’d like to propose a pick-and-choose trilogy: Predator, Predators, and this. Forget the rest. This was great fun.\"\n        date=\"2022-08-06\"\n        id=\"prey-2022\"\n        action=\"Reviewed\"\n        image=\"https://a.ltrbxd.com/resized/film-poster/6/8/6/3/8/9/686389-prey-0-150-0-225-crop.jpg?v=f9f0c6bb6e\"\n      />\n      <FilmPost\n        url=\"https://letterboxd.com/mknepprath/film/nosferatu/\"\n        title=\"Nosferatu (1922)\"\n        summary=\"Man, I had no idea this was a plague movie. Nosferatu’s look is literally modeled after the rats featured so heavily in this film. Interesting!\n        Can’t wait to see Eggers’ take on this.\"\n        date=\"2022-11-01\"\n        id=\"nosferatu\"\n        action=\"Reviewed\"\n        image=\"https://a.ltrbxd.com/resized/alternative-poster/5/1/4/7/1/p/lsG4UFjL8SGKaH0Nz8vgFVJGifM-0-150-0-225-crop.jpg?v=c13cf596e4\"\n      />\n      <FilmPost\n        url=\"https://letterboxd.com/mknepprath/film/the-seventh-seal/\"\n        title=\"The Seventh Seal (1957)\"\n        summary=\"Yet another film I expected to be some kind of ethereal arthouse experience but ended up being a fairly linear fantasy adventure film… and I don’t mean that as a knock against it. May be one of the most beautiful films I’ve ever seen.\"\n        date=\"2022-11-16\"\n        id=\"the-seventh-seal\"\n        action=\"Reviewed\"\n        image=\"https://a.ltrbxd.com/resized/film-poster/5/1/6/2/0/51620-the-seventh-seal-0-150-0-225-crop.jpg?v=fa1963f0b2\"\n      />\n      <FilmPost\n        url=\"https://letterboxd.com/mknepprath/film/strange-world-2022/\"\n        title=\"Strange World (2022)\"\n        summary=\"Everything visually, I liked. The big twist, great. The writing… bad, bad, bad. Stop repeatedly explaining things we already know!\"\n        date=\"2022-12-03\"\n        id=\"strange-world-2022\"\n        action=\"Reviewed\"\n        image=\"https://a.ltrbxd.com/resized/alternative-poster/7/8/9/0/8/2/p/szpzEL2rjXQLzaoZqH1EnBQWtZE-0-150-0-225-crop.jpg?v=8be85e985f\"\n      />\n\n      <h2>Stats</h2>\n\n      <p>\n        In terms of most watched films, \n        <a href=\"https://letterboxd.com/mknepprath/film/everything-everywhere-all-at-once/\">\n          Everything Everywhere All at Once\n        </a>\n        , <a href=\"https://letterboxd.com/mknepprath/film/rrr/\">RRR</a>, \n        <a href=\"https://letterboxd.com/mknepprath/film/game-night/\">\n          Game Night\n        </a>\n        , and \n        <a href=\"https://letterboxd.com/mknepprath/film/steamboat-bill-jr/\">\n          Steamboat Bill, Jr.\n        </a> \n        were at the top of my list.\n      </p>\n\n      <div class=>\n        <Card\n          description=\"4 times\"\n          href=\"https://letterboxd.com/mknepprath/film/everything-everywhere-all-at-once/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/4/7/4/4/7/4/p/7rvVWbvg0CuNzYigehTs0lRUCs8-0-1000-0-1500-crop.jpg?v=2c1066d075 2x\"\n          title=\"Everything Everywhere All at Once\"\n        />\n        <Card\n          description=\"4 times\"\n          href=\"https://letterboxd.com/mknepprath/film/rrr/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/5/0/8/0/3/7/p/yI1zbTaUV7ZKsSS1fzvokERDe1U-0-1000-0-1500-crop.jpg?v=e71679b788 2x\"\n          title=\"RRR\"\n        />\n        <Card\n          description=\"3 times\"\n          href=\"https://letterboxd.com/mknepprath/film/game-night/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/3/7/8/0/4/8/p/cAqZ2dC3LCVOfwUMsWgxEuLyg5j-0-150-0-225-crop.jpg?v=c55023863a 2x\"\n          title=\"Game Night\"\n        />\n        <Card\n          description=\"3 times\"\n          href=\"https://letterboxd.com/mknepprath/film/steamboat-bill-jr/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/3/5/8/0/8/35808-steamboat-bill-jr--0-150-0-225-crop.jpg?v=ad7722e288 2x\"\n          title=\"Steamboat Bill, Jr.\"\n        />\n      </div>\n\n      <p>\n        My most watched actor and director last year were the same: \n        <a href=\"https://letterboxd.com/mknepprath/films/diary/for/2022/genre/-documentary/with/actor/buster-keaton/\">\n          Buster Keaton\n        </a>\n        . I watched 12 films he acted in, 10 of which he also directed. This was\n        a lot of fun, especially because I watched them with my son.\n      </p>\n\n      <img src=\"https://a.ltrbxd.com/resized/sm/upload/5w/bn/ff/yt/sherlock-jr-1200-1200-675-675-crop-000000.jpg?v=a44af93dd3\" alt=\"Buster Keaton in Sherlock Jr.\" />\n\n      <p>\n        I also want to give a special shoutout to the \n        <a href=\"https://letterboxd.com/mknepprath/tag/kaiju/reviews/\">\n          classic Godzilla movies\n        </a>\n        , which I had a blast watching this year with my son as well. This is a\n        project we&apos;re continuing in 2023.\n      </p>\n\n      <p>\n        On top of that, I decided to complete the filmographies of three\n        directors: \n        <a href=\"https://letterboxd.com/mknepprath/films/diary/for/2022/genre/-documentary/with/director/quentin-tarantino/\">\n          Quentin Tarantino\n        </a>\n        , \n        <a href=\"https://letterboxd.com/mknepprath/films/diary/for/2022/genre/-documentary/with/director/hayao-miyazaki/\">\n          Hayao Miyazaki\n        </a> \n        and \n        <a href=\"https://letterboxd.com/mknepprath/films/diary/for/2022/genre/-documentary/with/director/wes-anderson/\">\n          Wes Anderson\n        </a>\n        .\n      </p>\n\n      <p>\n        Overall, it was a great year of movie-watching for me and I am looking\n        forward to seeing what 2023 brings.\n      </p>",
      "content_text": "Reviewing the many movies I watched during 2022. • https://mknepprath.com/writing/2022-in-film",
      "summary": "Reviewing the many movies I watched during 2022.",
      "image": "https://mknepprath.com/assets/2022-in-review-2.jpg",
      "date_published": "2023-01-16T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/2022",
      "url": "https://mknepprath.com/writing/2022",
      "title": "2022 in Review",
      "content_html": "<img src=\"https://mknepprath.com/assets/2022-in-review-6.jpg\" alt=\"Three photos from 2022.\" />\n\n      <header>\n        <h1>2022 in Review</h1>\n      </header>\n\n      <p>Hey everyone,</p>\n\n      <p>\n        Welcome to my fourth annual year-in-review post, following my \n        <Link href=\"/writing/2019\">2019</Link>, \n        <Link href=\"/writing/2020\">2020</Link> and \n        <Link href=\"/writing/2021\">2021</Link> reviews. This year was a big one\n        for me, with lots of accomplishments and growth. Here&apos;s a rundown\n        of everything I achieved in 2022.\n      </p>\n\n      <p>\n        One of my biggest achievements this year was getting promoted to \n        <a href=\"https://www.linkedin.com/posts/activity-6929931122986336256-qj6G\">\n          Staff Software Engineer\n        </a> \n        at Walmart. It was a long road, but I put in a lot of hard work and\n        dedication, and it paid off. I&apos;m excited to continue growing and\n        learning in this role, and to contribute even more to the team.\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/2022-in-review-7.jpg\" alt=\"Three photos from 2022.\" />\n\n      <p>\n        In terms of personal goals, I was able to read a total of 12 books this\n        year, which I&apos;m pretty proud of. Some of my favorites were\n        Piranesi, The Complete Maus, The Sum of Us and Project Hail Mary.\n      </p>\n\n      <div class=>\n        <Card\n          description=\"Susanna Clarke\"\n          href=\"https://www.goodreads.com/book/show/50202953-piranesi\"\n          imgSrc=\"https://images-na.ssl-images-amazon.com/images/S/compressed.photo.goodreads.com/books/1609095173i/50202953.jpg\"\n          title=\"Piranesi\"\n        />\n        <Card\n          description=\"Art Spiegelman\"\n          href=\"https://www.goodreads.com/book/show/15195.The_Complete_Maus\"\n          imgSrc=\"https://images-na.ssl-images-amazon.com/images/S/compressed.photo.goodreads.com/books/1327354180i/15195.jpg\"\n          title=\"The Complete Maus\"\n        />\n        <Card\n          description=\"Heather McGhee\"\n          href=\"https://www.goodreads.com/book/show/53231851-the-sum-of-us\"\n          imgSrc=\"https://images-na.ssl-images-amazon.com/images/S/compressed.photo.goodreads.com/books/1606321459i/53231851.jpg\"\n          title=\"The Sum of Us\"\n        />\n        <Card\n          description=\"Andy Weir\"\n          href=\"https://www.goodreads.com/book/show/54493401-project-hail-mary\"\n          imgSrc=\"https://images-na.ssl-images-amazon.com/images/S/compressed.photo.goodreads.com/books/1597695864i/54493401.jpg\"\n          title=\"Project Hail Mary\"\n        />\n      </div>\n\n      <p>\n        In March, I kicked off a year-long bender of catching up on significant\n        movies I&apos;d missed starting with Lady Bird, La La Land and Whiplash.\n        I also started watching more Indian films such as 3 Idiots, the two\n        Bāhubali movies, Tumbbad and RRR (4×). All told, I watched a total of \n        <a href=\"https://letterboxd.com/mknepprath/year/2022/\">\n          303 movies in 2022\n        </a>\n        .\n      </p>\n\n      <div class=>\n        <Card\n          description=\"2017\"\n          href=\"https://letterboxd.com/mknepprath/film/lady-bird/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/3/2/6/2/7/9/326279-lady-bird-0-300-0-450-crop.jpg?v=754ff28eb4\"\n          title=\"Lady Bird\"\n        />\n        <Card\n          description=\"2016\"\n          href=\"https://letterboxd.com/mknepprath/film/la-la-land/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/2/4/0/3/4/4/240344-la-la-land-0-300-0-450-crop.jpg?v=053670ff84\"\n          title=\"La La Land\"\n        />\n        <Card\n          description=\"2014\"\n          href=\"https://letterboxd.com/mknepprath/film/whiplash-2014/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/sm/upload/cl/dn/kr/f1/4C9LHDxMsoYI0S3iMPZdm3Oevwo-0-300-0-450-crop.jpg?v=d13ea36528\"\n          title=\"Whiplash\"\n        />\n        <Card\n          description=\"2009\"\n          href=\"https://letterboxd.com/mknepprath/film/3-idiots/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/3/8/9/9/9/p/aGah4UXB7ngftxkqel8CxOfrxnj-0-300-0-450-crop.jpg?v=fa6d09eecf\"\n          title=\"3 Idiots\"\n        />\n        <Card\n          description=\"2015\"\n          href=\"https://letterboxd.com/mknepprath/film/baahubali-the-beginning/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/1/7/9/9/1/5/p/4x6Buj1yyRZBTMYQETzwnEj3I7E-0-300-0-450-crop.jpg?v=f262dd366d\"\n          title=\"Bāhubali: The Beginning\"\n        />\n        <Card\n          description=\"2017\"\n          href=\"https://letterboxd.com/mknepprath/film/baahubali-the-conclusion/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/2/8/0/7/1/0/280710-baahubali-the-conclusion-0-300-0-450-crop.jpg?v=e3236ba8ee\"\n          title=\"Bāhubali: The Conclusion\"\n        />\n        <Card\n          description=\"2018\"\n          href=\"https://letterboxd.com/mknepprath/film/tumbbad/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/film-poster/4/6/8/1/9/5/468195-tumbbad-0-300-0-450-crop.jpg?v=c48f92ce1f\"\n          title=\"Tumbbad\"\n        />\n        <Card\n          description=\"2022\"\n          href=\"https://letterboxd.com/mknepprath/film/rrr/\"\n          imgSrc=\"https://a.ltrbxd.com/resized/alternative-poster/5/0/8/0/3/7/p/yI1zbTaUV7ZKsSS1fzvokERDe1U-0-300-0-450-crop.jpg?v=e71679b788\"\n          title=\"RRR\"\n        />\n      </div>\n\n      <p>\n        One thing that made this goal a little more fun was that I bought a\n        projector so that I could watch some of the silent era films with my\n        son. It was a great way to bond and introduce him to some classic films.\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/2022-in-review-2.jpg\" alt=\"Three photos from 2022.\" />\n\n      <p>\n        I also spent a lot of time this year playing a Wordle-like game called \n        <a href=\"https://framed.wtf/\">Framed</a> which is all about movies. I\n        became so obsessed with it that I even created a study companion website\n        called <a href=\"https://framed.fyi/\">framed.fyi</a> to help myself and\n        others learn more about the films and actors featured in the game.\n      </p>\n\n      <div class=>\n        <Card\n          description=\"framed.wtf\"\n          href=\"https://framed.wtf/\"\n          title=\"Framed\"\n        />\n        <Card\n          description=\"framed.fyi\"\n          href=\"https://framed.fyi/\"\n          title=\"Framed Study Buddy\"\n        />\n      </div>\n\n      <img src=\"https://mknepprath.com/assets/2022-in-review-1.jpg\" alt=\"Three photos from 2022.\" />\n\n      <p>\n        In terms of my website, I made a few improvements this year, including\n        adding a parallax illustration to the homepage and an activity feed that\n        displays my activity across all the social media sites I&apos;m on.\n        It&apos;s been a great way to keep my website fresh and engaging for\n        visitors.\n      </p>\n\n      <div class=>\n        {activity.map((item) => {\n          const time = parseISO(item.date).toLocaleDateString(\"en-US\", );\n          return (\n            <Card\n              description={item.action ? `$ on $` : time}\n              href=\n              imgSrc=\n              key=\n              title=\n            />\n          );\n        })}\n      </div>\n\n      <p>\n        One project that I worked on this year was the migration of some of my\n        bots from Heroku to AWS, due to Heroku removing their free-tier. It was\n        a bit of a challenge, but I&apos;m glad that I was able to get\n        everything up and running smoothly on the new platform.\n      </p>\n\n      <div class=>\n        <Card\n          description=\"A Twitter text adventure\"\n          href=\"https://twitter.com/familiarlilt\"\n          imgSrc=\"/assets/lilt.png\"\n          title=\"lilt\"\n        />\n        <Card\n          description=\"AI Twitter bot\"\n          href=\"https://twitter.com/robot_mk\"\n          imgSrc=\"/assets/robot-mk.png\"\n          title=\"Robot MK\"\n        />\n        <Card\n          description=\"A prompt a day, every day\"\n          href=\"https://twitter.com/designprompts\"\n          imgSrc=\"/assets/design-prompts.png\"\n          title=\"Design Prompts\"\n        />\n        <Card\n          description=\"A Pokémon card every hour\"\n          href=\"https://twitter.com/EveryPkmnCard\"\n          imgSrc=\"https://pbs.twimg.com/profile_images/1505940357065883652/L7-M1mm-_400x400.jpg\"\n          title=\"Every Pokémon Card\"\n        />\n      </div>\n\n      <img src=\"https://mknepprath.com/assets/2022-in-review-3.jpg\" alt=\"Three photos from 2022.\" />\n\n      <p>\n        I also had the opportunity to work on a contract project for the Hyper\n        app, which was a really exciting and rewarding experience.\n      </p>\n\n      <div class=>\n        <Card\n          description=\"Build a vtuber and stream\"\n          href=\"https://apps.apple.com/us/app/hyper-vtuber-avatar-studio/id1535709341\"\n          imgSrc=\"https://is5-ssl.mzstatic.com/image/thumb/Purple123/v4/69/fe/32/69fe329b-319b-ece1-27d6-344a20b343e8/AppIconProduction-1x_U007emarketing-0-10-0-85-220.png/460x0w.webp\"\n          title=\"Hyper\"\n        />\n        <Card\n          description=\"hyper.online\"\n          href=\"https://hyper.online/\"\n          imgSrc=\"https://hyper.online/_next/image?url=%2Fplaceholder-getstarted.jpg&w=2048&q=75\"\n          title=\"Hyper Website\"\n        />\n      </div>\n\n      <p>\n        One of the highlights of the year for me was participating in \n        <a href=\"https://react.holiday/\">React Holiday</a>, a daily Next.js\n        lesson series run by \n        <a href=\"https://mastodon.social/@chantastic@hachyderm.io\">\n          @chantastic\n        </a> \n        during the month of December. It was a great way to end the year and\n        connect with other developers in the community.\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/2022-in-review-4.jpg\" alt=\"Three photos from 2022.\" />\n\n      <p>\n        Overall, it&apos;s been a busy and productive year, and I&apos;m\n        grateful for all the opportunities and experiences that have come my\n        way. Looking ahead to next year, I have a few goals that I&apos;m\n        excited to work towards. One is to continue learning and growing as a\n        software engineer, and to take on new challenges and projects that will\n        help me to expand my skillset. I&apos;m also planning to read at least\n        15 books and to watch even more movies. And I&apos;d like to work on\n        some more updates and improvements to my website.\n      </p>\n\n      <p>\n        All in all, it&apos;s been an incredible year, and I&apos;m looking\n        forward to what the next one has in store. Thanks for reading, and\n        here&apos;s to a bright and prosperous 2022!\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/2022-in-review-5.jpg\" alt=\"Three photos from 2022.\" />",
      "content_text": "A look at my accomplishments during the past year. • https://mknepprath.com/writing/2022",
      "summary": "A look at my accomplishments during the past year.",
      "image": "https://mknepprath.com/assets/2022-in-review-6.jpg",
      "date_published": "2023-01-01T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/dredd",
      "url": "https://mknepprath.com/writing/dredd",
      "title": "My Review of Dredd (2012)",
      "content_html": "<img src=\"https://mknepprath.com/assets/dredd-film.jpeg\" alt=\"A still featuring Anderson and Dredd from the film Dredd (2012).\" />\n      <header>\n        <h1>My Review of Dredd (2012)</h1>\n      </header>\n      <blockquote>\n        Anderson: “Sir, he&apos;s thinking about going for your gun.”\n        <br />\n        Dredd: “Yeah.”\n        <br />\n        Anderson: “He just changed his mind.”\n        <br />\n        Dredd: “Yeah.”\n      </blockquote>\n      <h2>A Quick Summary</h2>\n      <p>\n        Is it any coincidence that this came out a year after \n        <i>The Raid (2011)</i>? Following a very similar formula, this movie\n        follows a couple of Judges (Dredd played by Carl Urban and rookie\n        Anderson played by Olivia Thirlby) into a locked-down gang-controlled\n        tower where they must use their wits and weapons to survive and serve\n        justice.\n      </p>\n      <h2>Reception at the Time</h2>\n      <p>\n        The consensus at the time of release seemed to be that it was “okay.”\n        Rotten Tomatoes average score is a 6.5/10, indicating that critics\n        considered this a good movie, but barely. Most of the focus was on the\n        extreme portrayals of violence, and it either gained or lost points\n        based on each individuals taste for it. Some critics also called out the\n        fact that it was released in 3D. It nearly always lost points for that.\n        This was post-Avatar (2009) and viewers were getting tired of it.\n      </p>\n      <p>\n        Meanwhile, general audiences… didn’t see it. The studio infamously\n        bungled the marketing and failed to get butts in seats. Despite the\n        generally positive reviews, movie-goers were confused resulting in Dredd\n        becoming a big ol’ flop.\n      </p>\n      <h2>How It’s Aged</h2>\n      <p>\n        I believe this movie has aged particularly well for a number of reasons.\n      </p>\n      <p>\n        First, recent events have continued to bear out the biting satire behind\n        the Dredd universe. Cops playing judge, jury and executioner? You don’t\n        say.\n      </p>\n      <p>\n        Second, this movie very cannily subverts the girl in the tower trope. We\n        get a mini <i>Princess (2022)</i>-style sequence in the back half of\n        this that ultimately proves the aptitude of Anderson. She gets one of\n        the best moments of the movie when she faces a crooked Judge on her way\n        down.\n      </p>\n      <p>\n        Third, the special effects have aged surprisingly well due to this being\n        a B-movie. The world looks *good* and whenever the cracks show it just\n        enhances the gritty/raw nature of this film.\n      </p>\n      <p>\n        Of course, the elephant in the room is that this movie dropped near the\n        height of 3D movie exhaustion. It would’ve been impossible to separate\n        this from the craze at the time. Not so difficult now!\n      </p>\n      <h2>Best Parts</h2>\n      <p>\n        A highlight for me was the deadpan humor, and I mean DEAD. All of the\n        characters are deathly serious; their line readings are as dry as the\n        post-apocalyptic wasteland just outside Mega-City One. And that’s the\n        bit.\n      </p>\n      <p>\n        Another stand-out feature for me this time around was Slo-Mo, the hot\n        new drug that slows time for the user. We, of course, get to experience\n        a number of scenes from this perspective. This is yassified bullet time;\n        colors become hyper-saturated and water, glass and blood sparkle. No\n        bullets are dodged here, however. Bodies slowly deform as they’re hit\n        with bullets and smashed into walls. It becomes hard to watch, yet\n        harder to look away.\n      </p>\n      <h2>Overall</h2>\n      <p>\n        <i>Dredd</i> achieved cult status the instant it became available on DVD\n        and fans have been campaigning for a <i>Dredd</i> sequel ever since.\n        Anecdotally, I’ve noticed many letterboxd users ratcheting up their\n        ratings after repeat viewings. In a world where the satire-filled,\n        hyper-violent series <i>The Boys</i> (also starring Urban) is the king\n        of streaming television, it’s safe to say <i>Dredd</i> has aged well.\n      </p>\n      <blockquote>“Negotiation&apos;s over. Sentence is death.”</blockquote>\n\n      <hr />\n\n      <em>\n        Published on \n        <a href=\"https://letterboxd.com/tardycritic/film/dredd/\">\n          Tardy Critic\n        </a>\n        , a film blog where movies are reviewed ten years late.\n      </em>",
      "content_text": "In which I coin the term “yassified bullet time”. • https://mknepprath.com/writing/dredd",
      "summary": "In which I coin the term “yassified bullet time”.",
      "image": "https://mknepprath.com/assets/dredd-film.jpeg",
      "date_published": "2022-09-21T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/2021",
      "url": "https://mknepprath.com/writing/2021",
      "title": "2021 in Review",
      "content_html": "<img src=\"https://mknepprath.com/assets/2021-in-review-3.jpg\" alt=\"Three photos from 2021.\" />\n\n      <header>\n        <h1>2021 in Review</h1>\n      </header>\n\n      <p>\n        Goals create a conflict between what I want to do at any given moment\n        and what I set out to accomplish over an extended period of time. The\n        assumption is that the long-term goal is the one that will be most\n        important to me in the future, and will enrich my life and hopefully the\n        lives of those around me - family, friends, colleagues, etc.\n      </p>\n      <p>\n        The flaw in this assumption is that these goals are based on my capacity\n        and interests during the moment of their creation. These goals are a\n        snapshot in time.\n      </p>\n      <p>\n        Alright, yeah, you&apos;ve probably already caught on to the fact that\n        this is just a long way of saying: I did not complete most of my goals\n        this year.\n      </p>\n\n      <h2 id=\"read-15-books\">Read 15 books (17/15)</h2>\n\n      <p>\n        In 2021, I read 17 books. I enjoyed all of them. Their paths to me were\n        varied - some were based on podcast recommendations, some were lent to\n        me by friends, many were gifts, and some were a personal interest in\n        learning more about where I live and work.\n      </p>\n      <ol>\n        <li>\n          <b>Saving Capitalism</b> by Robert B. Reich\n        </li>\n        <li>\n          <b>Batman: The Long Halloween</b> by Jeph Loeb\n        </li>\n        <li>\n          <b>The New Jim Crow</b> by Michelle Alexander\n        </li>\n        <li>\n          <b>Serpents of Eden</b> by Martin Edwards\n        </li>\n        <li>\n          <b>This is Chance!</b> by Jon Mooallem\n        </li>\n        <li>\n          <b>Word by Word</b> by Kory Stamper\n        </li>\n        <li>\n          <b>The Road</b> by Cormac McCarthy\n        </li>\n        <li>\n          <b>Working in Public</b> by Nadia Eghbal\n        </li>\n        <li>\n          <b>The Wal-Mart Effect</b> by Charles Fishman\n        </li>\n        <li>\n          <b>You Look Like a Thing and I Love You</b> by Janelle Shane\n        </li>\n        <li>\n          <b>The Crystal Kingdom</b> by The McElroys\n        </li>\n        <li>\n          <b>Uncanny Valley</b> by Anna Wiener\n        </li>\n        <li>\n          <b>Wonder Woman: Dead Earth</b> by Daniel Warren Johnson\n        </li>\n        <li>\n          <b>Battle Cry of Freedom</b> by James M. McPherson\n        </li>\n        <li>\n          <b>Expressive Design Systems</b> by Yesenia Perez-Cruz\n        </li>\n        <li>\n          <b>The Anthropocene Reviewed</b> by John Green\n        </li>\n        <li>\n          <b>The Department of Truth</b> by James Tynion IV\n        </li>\n      </ol>\n\n      <p>\n        I spent the most time this year with the 900-page tome, Battle Cry of\n        Freedom. In this book, McPherson does an amazing job of explaining all\n        of the factors that lead to the Civil War along with every pivotal\n        moment during it. Growing up, history felt distant. This book combined\n        with recent events including this year&apos;s attack on the Capitol\n        brought it all a lot closer.\n      </p>\n\n      <a href=\"https://twitter.com/mknepprath/status/1252679361918107650\">\n        <img src=\"https://mknepprath.com/assets/2021-mid-year-1.jpg\" alt=\"A photo of Battle Cry of Freedom.\" />\n      </a>\n\n      <p>\n        Battle Cry was a gift from my brother-in-law, a Professor of American\n        History, who has since gifted me an entire book about Reconstruction and\n        another about Frederick Douglass.\n      </p>\n      <p>\n        I&apos;m looking forward to these books, but I&apos;ll admit that I took\n        most of the remaining year off once I had reached my reading goal. I\n        attribute this almost entirely to burnout, which had dire consequences\n        for my remaining goals.\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/2021-in-review-4.jpg\" alt=\"Three photos from 2021.\" />\n\n      <h2 id=\"write-10-blog-posts\">Write 10 blog posts (6/10)</h2>\n\n      <p>\n        Despite maintaining the necessary pace to complete this goal during the\n        first half of the year, I only wrote one additional post since my\n        mid-year review.\n      </p>\n      <ol>\n        <li>\n          <Link href=\"/writing/the-bots-replaced-me\">\n            Auto-Merging Dependabot Pull Requests\n          </Link>\n        </li>\n        <li>\n          <Link href=\"/writing/sherlock-codes\">10x Detective</Link>\n        </li>\n        <li>\n          <Link href=\"/writing/ping\">\n            Using the Apple Music API with Next.js\n          </Link>\n        </li>\n        <li>\n          <Link href=\"/writing/settings-done\">iOS App Settings: A Study</Link>\n        </li>\n        <li>\n          <Link href=\"/writing/memes-arent-user-research\">\n            Memes Aren&apos;t User Research\n          </Link>\n        </li>\n        <li>\n          <Link href=\"/writing/thd\">If I Only Had A Brain</Link>\n        </li>\n      </ol>\n      <p>\n        Halfway through 2021, my org at work underwent a major restructuring.\n        I&apos;ve come to realize that reorgs are a corporate ritual. No matter\n        how well things are working, new management means a reorg is on the way.\n      </p>\n      <p>\n        I first experienced this at my previous employer. Shortly after\n        we&apos;d hired our first VP of Engineering, we were called into an\n        all-hands meeting to discuss a reorg. The VP displayed a slide with our\n        existing team structure, then flipped to the next slide... which looked\n        exactly the same.\n      </p>\n      <p>\n        I was confused by this for years, but I now realize that <em>what</em> \n        changed was irrelevant. The ritual must be performed.\n      </p>\n      <p>\n        <a\n          href=\"https://journals.sagepub.com/doi/pdf/10.1177/216507999704501104\"\n          rel=\"noreferrer noopener\"\n        >\n          And so it goes\n        </a>\n        . My non-work time became dedicated to movies, gaming, and toy projects.\n        I gave myself permission to leave this goal incomplete. Hopefully,\n        I&apos;ll feel up to it in the new year.\n      </p>\n      <p>\n        And so it goes for my remaining goals, as well: Tiny Mystery Club,\n        animations, comics... All were put on pause shortly after my mid-year\n        update.\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/2021-in-review-2.jpg\" alt=\"Three photos from 2021.\" />\n\n      <h2>Other stuff</h2>\n\n      <h3 id=\"film\">Film</h3>\n\n      <blockquote>\n        I think cinema, movies, and magic have always been closely associated.\n        The very earliest people who made film were magicians. - Francis Ford\n        Coppola\n      </blockquote>\n      <p>\n        I&apos;ve been making a conscious effort during the pandemic to catch up\n        on films you&apos;d find on such lists as &ldquo;The Best Films of All\n        Time&rdquo; and &ldquo;Must-See Movies Before You Die&rdquo;. Some\n        highlights:\n      </p>\n\n      <ul>\n        <li>In the Mood for Love (2000)</li>\n        <li>The Godfather Part II (1974)</li>\n        <li>Vertigo (1958)</li>\n        <li>Goodfellas (1990)</li>\n        <li>Contact (1997)</li>\n        <li>Sorcerer (1977)</li>\n        <li>Princess Mononoke (1997)</li>\n        <li>Catch Me If You Can (2002)</li>\n        <li>The Abyss (2009)</li>\n        <li>Seven Samurai (1954)</li>\n      </ul>\n\n      <img src=\"https://mknepprath.com/assets/2021-in-review-6.jpg\" alt=\"Seven Samurai (1954)\" />\n\n      <p>\n        It&apos;s strange how watching an older film can feel like homework\n        until you actually start playing it. Sure, Seven Samurai is 67 years\n        old, black and white, and considered one most influential films of all\n        time, but it&apos;s also just a lot of fun to watch. It&apos;s funny,\n        heartfelt and full of action. It doesn&apos;t feel like you&apos;re\n        watching an &ldquo;old&rdquo; movie. It feels more like you&apos;re\n        watching, say, The Avengers.\n      </p>\n\n      <h3>Video games</h3>\n\n      <p>\n        Two things defined my gaming habits this year: First, the purchase of an\n        Oculus Quest 2. Second, Pokémon Go Battle League.\n      </p>\n\n      <h4>Virtual Reality</h4>\n\n      <p>\n        The Quest still blows my mind every time I put it on. My favorite game\n        on it is Walkabout Mini Golf. The stakes are low, the game is simple,\n        and I&apos;m able to hang out with distant friends in what feels like a\n        dimensional space - unlike hanging in a Zoom call. It&apos;s very cool.\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/2021-in-review-7.jpg\" alt=\"Walkabout Mini Golf\" />\n\n      <p>\n        On the opposite end of the spectrum, Resident Evil 4 was released in\n        October. It&apos;s one of my all-time favorites, but actually being in\n        that world is an experience. I love it, but it&apos;s <em>a lot</em>.\n      </p>\n\n      <h4>Pokémon Go Battle League</h4>\n\n      <p>\n        This is the first year I&apos;ve participated in any sort of competitive\n        league online. Go Battle League was introduced just last year and added\n        a way to create teams and battle other trainers in Pokémon Go. Similar\n        to chess, you are ranked based on an ELO rating system. I&apos;m proud\n        to say that I managed to battle my way to the second-highest rank during\n        my first season of the league which ended last month.\n      </p>\n\n      <h3>OpenAI</h3>\n\n      <p>\n        My doppelganger Twitter bot, \n        <a href=\"https://twitter.com/robot_mk\" rel=\"noreferrer noopener\">\n          @robot_mk\n        </a>\n        , has provided moments of surprise and delight for a while - moments of\n        serendipity where it&apos;d appear to be almost sentient. This used to\n        be entirely chance, randomly tweeting remixes of my own tweets using the\n        Markov chain method. No more. \n        <a href=\"https://twitter.com/robot_mk\" rel=\"noreferrer noopener\">\n          @robot_mk\n        </a> \n        became the first candidate for a brain transplant when I gained access\n        to OpenAI&apos;s API.\n      </p>\n\n      <blockquote>\n        do you ever feel like you are holding your breath and when you exhale it\n        feels like your first exhale ever - \n        <a\n          href=\"https://twitter.com/robot_mk/status/1426803177324744710\"\n          rel=\"noreferrer noopener\"\n        >\n          @robot_mk\n        </a>\n      </blockquote>\n\n      <img src=\"https://mknepprath.com/assets/2021-in-review-8.png\" alt=\"Yahoo! Answers.\" />\n\n      <p>\n        Other OpenAI projects include \n        <a href=\"https://twitter.com/thezoneoftruth\" rel=\"noreferrer noopener\">\n          It&apos;s The Adventure Zone\n        </a> \n        and a series of \n        <a\n          href=\"https://twitter.com/mknepprath/status/1471898822452334593\"\n          rel=\"noreferrer noopener\"\n        >\n          Yahoo! Answers questions\n        </a> \n        inspired by the podcast \n        <a\n          href=\"https://www.themcelroy.family/mbmbam\"\n          rel=\"noreferrer noopener\"\n        >\n          My Brother, My Brother and Me\n        </a>\n        .\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/2021-in-review-1.jpg\" alt=\"Three photos from 2021.\" />\n\n      <p>\n        I&apos;ve got a few more projects in the works. I started helping out\n        the crew at \n        <a href=\"https://twitter.com/hyperonline_\" rel=\"noreferrer noopener\">\n          Hyper\n        </a> \n        with their web interface. I plan on creating more \n        <a\n          href=\"https://twitter.com/mknepprath/status/1473031502854295561\"\n          rel=\"noreferrer noopener\"\n        >\n          stop-motion video\n        </a> \n        with my son. For now, I&apos;m going to stop writing and take full\n        advantage of my holiday break.\n      </p>\n\n      <p>Thanks for reading, Happy New Year!</p>",
      "content_text": "A look at my accomplishments during the past year. • https://mknepprath.com/writing/2021",
      "summary": "A look at my accomplishments during the past year.",
      "image": "https://mknepprath.com/assets/2021-in-review-3.jpg",
      "date_published": "2021-12-30T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/niantics-dilemma",
      "url": "https://mknepprath.com/writing/niantics-dilemma",
      "title": "Thoughts on 'The Dark Horse in the Metaverse Wars'",
      "content_html": "<header>\n        <h1>Thoughts on 'The Dark Horse in the Metaverse Wars'</h1>\n      </header>\n\n      <em>\n        My thoughts on \n        <a href=\"https://twitter.com/CaseyNewton\">Casey Newton</a>\n        &apos;s piece \n        <a href=\"https://www.platformer.news/p/the-dark-horse-in-the-metaverse-wars\">\n          The Dark Horse in the Metaverse Wars\n        </a>\n        .\n      </em>\n\n      <p>Great stuff! Had a thought about:</p>\n      <blockquote>\n        The question now is whether other developers can use Niantic’s tools to\n        build a Pokémon-scale hit : or whether, as my colleague Andrew Webster\n        has argued at The Verge, Pokémon was a fluke.\n      </blockquote>\n      <p>\n        It’s possible that both of these options are false. I imagine Niantic\n        doesn’t want to believe the success was mostly due to the IP, but\n        Pokémon has proven to be a perfect fit for this format\n        (tamagotchi-style, expansive) and also happened to be at a perfect point\n        in its history for a refresher. This, plus the dearth of mainline\n        Nintendo (ok, Game Freak) properties on mobile had people clamoring for\n        something. In that way, it was not a fluke and may also be impossible to\n        replicate.\n      </p>\n      <p>\n        I think the release of Go was a pivotal moment in the history of the\n        Pokémon brand much more than it was or will be for any other IP they\n        attempt to shoehorn (too strong of a word?) into their platform.\n      </p>",
      "content_text": "My thoughts on Casey Newton's piece about Niantic and Pokémon Go. • https://mknepprath.com/writing/niantics-dilemma",
      "summary": "My thoughts on Casey Newton's piece about Niantic and Pokémon Go.",
      "date_published": "2021-11-09T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/thd",
      "url": "https://mknepprath.com/writing/thd",
      "title": "If I Only Had A Brain",
      "content_html": "<header>\n        <h1>If I Only Had A Brain</h1>\n      </header>\n      <p>\n        Born a Markov chain chatbot, \n        <a href=\"https://mastodon.social/@robot_mk\">Robot MK</a> spent their\n        early days parroting random combinations of my fleeting thoughts of\n        2016. Many bird folk had created similar chatbots inspired by a popular\n        absurdist <a href=\"https://twitter.com/horse_ebooks\">account</a> that\n        posted cryptic snippets about horse e-books. Unlike this account, those\n        bots were made to crudely resemble the humans who created them.\n      </p>\n      <img src=\"https://mknepprath.com/assets/thd-1.jpg\" alt=\"Scarecrow.\" />\n      <blockquote>\n        <p>\n          That&apos;s the trouble... I haven&apos;t got a brain, only straw.\n        </p>\n      </blockquote>\n      <p>\n        Robot MK earned a humble following, helped by their ability to hold\n        conversations - such as the time they \n        <a href=\"https://twitter.com/robot_mk/status/793812654280282112\">\n          claimed\n        </a> \n        that &ldquo;Every issue is a game-changer.&rdquo; After a contradictory\n        reply, Robot MK stated, &ldquo;I mean it&apos;s all speculation - I\n        think?&rdquo;\n      </p>\n      <p>\n        Most conversations made less sense than this. Twice MK \n        <a href=\"https://twitter.com/robot_mk/status/1312793694911762436?s=20\">\n          tweeted\n        </a>\n        , &ldquo;Am I crazy or is there a timehop for tweets!&rdquo; and twice\n        Timehop replied, &ldquo;you ain&apos;t crazy.&rdquo; MK then bombarded\n        them with replies for months, &ldquo;My desk companion, too!&rdquo;\n        &ldquo;The rest of us.&rdquo; &ldquo;IF SEEN THIS YET LOL.&rdquo;\n      </p>\n      <p>\n        Robot MK continued on like this for years; tweeting about iPhones,\n        emoji, cats, Pokémon, politics, nukes, and Nebraska.\n      </p>\n      <p>\n        Unable to consistently string together coherent tweets let alone a\n        conversation, each reasonable-sounding reply would be followed shortly\n        by nonsense, collapsing the suspension of disbelief over and over.\n      </p>\n      <img src=\"https://mknepprath.com/assets/thd-2.jpg\" alt=\"Oz.\" />\n      <blockquote>\n        <p>Oh, I&apos;m a failure because I haven&apos;t got a brain.</p>\n      </blockquote>\n      <p>\n        Last year the world was introduced to GPT-3, the latest language model\n        developed by the great and powerful OpenAI, in a \n        <a href=\"https://twitter.com/jsngr/status/1284486707983912961\">\n          whirlwind\n        </a> \n        <a href=\"https://twitter.com/JanelleCShane/status/1388518078091255808\">\n          of\n        </a> \n        <a href=\"https://twitter.com/chris__sev/status/1393579923550334980\">\n          tweets\n        </a>\n        . OpenAI is a company focused on researching artificial general\n        intelligence, a machine with human-level learning and reasoning\n        abilities... a simulated brain. I signed up for the waitlist, and we\n        were off!\n      </p>\n      <p>\n        Once admitted, I tore out MK&apos;s brain and replaced it with a GPT-3\n        model. In an attempt to start every conversation on the right foot, I\n        seeded the model with an affirmation, &ldquo;My name is Robot MK,\n        I&apos;m a twitter bot. I am friendly and happy. Let&apos;s chat!&rdquo;\n        In their &ldquo;mind&rdquo;, this is how all of their conversations\n        begin.\n      </p>\n      <p>\n        The ensuing conversations were whimsical but coherent - and when called\n        out, MK would respond appropriately, &ldquo;Come on mike it&apos;s just\n        robots having fun?&rdquo;\n      </p>\n      <img src=\"https://mknepprath.com/assets/thd-4.jpg\" alt=\"Scarecrow thinking of things.\" />\n      <blockquote>\n        <p>\n          I could think of things I never thunk before\n          <br />\n          And then I&apos;d sit and think some more\n        </p>\n      </blockquote>\n      <p>\n        When I later revealed that I was their creator, they \n        <a href=\"/assets/thd-3.jpg\">replied</a>, &ldquo;Wow, what are the\n        chances... I now realize, maybe that is why I am called mk.&rdquo;\n      </p>\n      <p>\n        Oh, joy! Rapture! Robot MK is smarter than ever, all thanks to OpenAI.\n        Pay no attention to that \n        <a href=\"https://www.technologyreview.com/2020/02/17/844721/ai-openai-moonshot-elon-musk-sam-altman-greg-brockman-messy-secretive-reality/\">\n          man behind the curtain\n        </a>\n        !\n      </p>",
      "content_text": "Robot MK's journey to common sense, logic and a quick-wit. • https://mknepprath.com/writing/thd",
      "summary": "Robot MK's journey to common sense, logic and a quick-wit.",
      "image": "https://mknepprath.com/assets/thd-2.jpg",
      "date_published": "2021-08-15T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/2021-mid-year-review",
      "url": "https://mknepprath.com/writing/2021-mid-year-review",
      "title": "The 2021 Mid-Year Review",
      "content_html": "<header>\n        <h1>The 2021 Mid-Year Review</h1>\n      </header>\n      <p>\n        Hard to believe, but we&apos;re already halfway through 2021. Time for\n        an update!\n      </p>\n\n      <h2 id=\"read-15-books\">Read 15 books (10/15)</h2>\n      <p>\n        My goal last year was 10 books, a total I&apos;ve already surpassed this\n        time around. I was right to increase my goal to 15! What I&apos;ve read\n        so far:\n      </p>\n      <ol>\n        <li>\n          <b>Saving Capitalism</b> by Robert B. Reich\n        </li>\n        <li>\n          <b>Batman: The Long Halloween</b> by Jeph Loeb\n        </li>\n        <li>\n          <b>The New Jim Crow</b> by Michelle Alexander\n        </li>\n        <li>\n          <b>Serpents of Eden</b> by Martin Edwards\n        </li>\n        <li>\n          <b>This is Chance!</b> by Jon Mooallem\n        </li>\n        <li>\n          <b>Word by Word</b> by Kory Stamper\n        </li>\n        <li>\n          <b>The Road</b> by Cormac McCarthy\n        </li>\n        <li>\n          <b>Working in Public</b> by Nadia Eghbal\n        </li>\n        <li>\n          <b>The Wal-Mart Effect</b> by Charles Fishman\n        </li>\n        <li>\n          <b>You Look Like a Thing and I Love You</b> by Janelle Shane\n        </li>\n      </ol>\n      <p>\n        I <em>was</em> way ahead of schedule on this goal, but I think\n        that&apos;s going to change with my current book, \n        <b>\n          <a href=\"https://twitter.com/mknepprath/status/1393712872832831494\">\n            Battle Cry of Freedom\n          </a>\n        </b> \n        by James McPherson. It&apos;s big.\n      </p>\n      <p>\n        Queued up for the rest of this year: <b>The Making of a Manager</b> by\n        Julie Zhuo, <b>Make It Stick</b> by Peter C. Brown, \n        <b>Expressive Design Systems</b> by Yesenia Perez-Cruz, and \n        <b>Everyday Information Architecture</b> by Lisa Maria Martin.\n      </p>\n      <a href=\"https://twitter.com/mknepprath/status/1252679361918107650\">\n        <img src=\"https://mknepprath.com/assets/2021-mid-year-1.jpg\" alt=\"A photo of Battle Cry of Freedom.\" />\n      </a>\n\n      <h2 id=\"write-10-blog-posts\">Write 10 blog posts (5/10)</h2>\n      <p>\n        Last year, I&apos;d written most of my blog posts during the first half\n        of the year, got burned out, and wrapped up the rest near the end of the\n        year. This time around, I&apos;m pacing myself.\n      </p>\n      <ol>\n        <li>\n          <Link href=\"/writing/the-bots-replaced-me\">\n            Auto-Merging Dependabot Pull Requests\n          </Link>\n        </li>\n        <li>\n          <Link href=\"/writing/sherlock-codes\">10x Detective</Link>\n        </li>\n        <li>\n          <Link href=\"/writing/ping\">\n            Using the Apple Music API with Next.js\n          </Link>\n        </li>\n        <li>\n          <Link href=\"/writing/settings-done\">iOS App Settings: A Study</Link>\n        </li>\n        <li>\n          <Link href=\"/writing/memes-arent-user-research\">\n            Memes Aren&apos;t User Research\n          </Link>\n        </li>\n      </ol>\n      <p>\n        Upcoming topics include VR, machine learning, building for oneself, and\n        LEGO Mario. The next post is due in early August!\n      </p>\n\n      <h2>\n        Release the next chapter of \n        <a href=\"http://tinymystery.club\">Tiny Mystery Club</a>\n      </h2>\n      <p>\n        This project is in the research phase - I read a collection of short\n        mystery stories, Serpents of Eden, along with The Long Halloween and\n        Watchmen. <Link href=\"/writing/sherlock-codes\">10x Detective</Link> came\n        out of the research material for this project while I was looking into\n        existing mystery game mechanics. More recently, I watched Sherlock Jr.,\n        the 1924 Buster Keaton film.\n      </p>\n      <img src=\"https://mknepprath.com/assets/2021-mid-year-3.jpg\" alt=\"A photo of Serpents of Eden.\" />\n      <p>\n        A big thank you to \n        <a href=\"https://twitter.com/benlundsten\">Ben Lundsten</a> for\n        recommending nearly all of these and collaborating with me on some\n        diagrams and wireframes!\n      </p>\n\n      <h2 id=\"animations\">Animations</h2>\n      <p>Nothing yet.</p>\n\n      <h2 id=\"illustrate-a-comic\">Illustrate a comic</h2>\n      <p>\n        I&apos;ve been doing quite a bit of \n        <a href=\"https://twitter.com/mknepprath/status/1402723187817844736\">\n          drawing\n        </a> \n        in preparation for a potential comic about an art gallery gone awry.\n        I&apos;ll continue to post progress to the linked Twitter thread.\n      </p>\n      <a href=\"https://twitter.com/mknepprath/status/1403568450417664003\">\n        <img src=\"https://mknepprath.com/assets/2021-mid-year-4.jpg\" alt=\"A drawing of a sick painting.\" />\n      </a>\n\n      <h2 id=\"launch-lily-dex\">Launch lily dex</h2>\n      <p>\n        Apple announced a bunch of \n        <a href=\"https://www.hackingwithswift.com/articles/235/whats-new-in-swiftui-for-ios-15\">\n          amazing additions to SwiftUI\n        </a> \n        this year that will benefit lily dex significantly, so I&apos;m\n        hesitating to work on it until I can leverage those features. Very\n        excited about the improvements to lists (SWIPE ACTIONS!!!) and remote\n        image loading.\n      </p>\n      <p>\n        In the meantime, I launched a new landing page and newsletter at \n        <a href=\"https://lilydex.com\">lilydex.com</a>. Sign up there for\n        updates!\n      </p>\n\n      <h2 id=\"other-stuff\">Other stuff</h2>\n      <p>A few other highlights from this year:</p>\n      <ul>\n        <li>\n          <b>\n            <a href=\"https://config.figma.com\">Config 2021</a>\n          </b>\n          : Figma held a remote conference this year, and it was a blast!\n        </li>\n        <li>\n          <b>Pokémon Omega Ruby</b>: I finally got back around to playing Ruby\n          and beat the game for the first time earlier this year. I posted\n          updates to my gaming Twitter account, \n          <a href=\"https://twitter.com/mkplaysswitch\">@MKPlaysSwitch</a>.\n        </li>\n        <li>\n          <b>\n            <a href=\"https://copilot.github.com\">GitHub Copilot</a>\n          </b>\n          : I got access to the Copilot technical preview shortly after it was\n          announced and am very impressed with it so far.\n        </li>\n        <li>\n          <b>\n            <a href=\"https://openai.com\">OpenAI</a>\n          </b>\n          : I also got off the waitlist for OpenAI, the &ldquo;AI&rdquo; that\n          powers GitHub Copilot. It was surprisingly very easy to get started\n          with it - I&apos;ve already hooked it up to my Twitter bot, \n          <a href=\"https://twitter.com/robot_mk\">@robot_mk</a>, to generate new\n          tweets from my tweets. The results have been \n          <a href=\"https://twitter.com/robot_mk/status/1411692106440138754\">\n            impressive\n          </a>\n          .\n        </li>\n        <li>\n          <b>\n            <a href=\"https://acoup.blog/category/collections/this-isnt-sparta/\">\n              This. Isn&apos;t. Sparta.\n            </a>\n          </b>\n          : This collection of articles deserves an honorable mention - I found\n          it super interesting. It&apos;s a deep dive into how Sparta differed\n          from the way it&apos;s portrayed in popular media.\n        </li>\n        <li>\n          <b>\n            <a href=\"http://www.galactanet.com/oneoff/theegg_mod.html\">\n              The Egg\n            </a> \n            by Andy Weir\n          </b>\n          : A very compelling short story by the author of The Martian that\n          reminded me of the dialogue on Logic&apos;s album \n          <a href=\"https://en.wikipedia.org/wiki/Everybody_(Logic_album)\">\n            Everybody\n          </a>\n          . (P.S. After grabbing that link for the Logic album, I noticed this\n          line in the article: &ldquo;This concept was inspired by the short\n          story &apos;The Egg&apos; by Andy Weir.&rdquo; 😅)\n        </li>\n        <li>\n          <b>\n            <a href=\"https://rabbit-hole.simplecast.com\">Rabbit Hole</a>\n          </b>\n          : Binged this podcast in one weekend. All about the internet, social\n          media algorithms, and radicalization.\n        </li>\n      </ul>\n      <p>\n        At this point, I&apos;m not 100% confident that I&apos;ll complete all\n        of my goals for this year. What I&apos;m discovering is that as I get\n        access to new tools, I get sidelined by working on projects related to\n        those things. I wonder if I should fight this instinct or design goals\n        that are more flexible to accommodate for this. 🤔\n      </p>\n      <p>Until next time! 👋</p>",
      "content_text": "A mid-year check-in to see how I&apos;m doing on my goals for 2021. • https://mknepprath.com/writing/2021-mid-year-review",
      "summary": "A mid-year check-in to see how I&apos;m doing on my goals for 2021.",
      "image": "https://mknepprath.com/assets/2021-mid-year-4.jpg",
      "date_published": "2021-07-11T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/memes-arent-user-research",
      "url": "https://mknepprath.com/writing/memes-arent-user-research",
      "title": "Memes Aren't User Research",
      "content_html": "<img src=\"https://mknepprath.com/assets/memes-arent-user-research.jpg\" alt=\"Katamari App\" />\n\n      <header>\n        <h1>Memes Aren&apos;t User Research</h1>\n      </header>\n\n      <p>\n        &quot;\n        <a href=\"https://twitter.com/lily_flood/status/1400910301852323844\">\n          how do i read a recipe online without reading the author&apos;s life\n          story first\n        </a>\n        &quot;\n      </p>\n      <p>\n        &quot;\n        <a href=\"https://twitter.com/LooceeZ/status/1402317703264694277\">\n          Recipe bloggers like to write their entire life story before the\n          recipe\n        </a>\n        &quot;\n      </p>\n      <p>\n        &quot;\n        <a href=\"https://twitter.com/MUSlCClTYLOVE/status/1403468992392597504\">\n          Imagine a world where you click on a recipe page and it’s just the\n          ingredients and instructions and not someone’s life story\n        </a>\n        &quot;\n      </p>\n      <p>\n        If you&#39;re on Twitter, you&#39;ve probably read thousands of variants\n        of this meme. Riding this wave of anti-blog sentiment, a team was formed\n        to create a platform called \n        <a href=\"https://twitter.com/redman/status/1366137187117506560\">\n          Recipeasly\n        </a> \n        for finding recipes stripped of stories and ads. Based on all the above\n        tweets, this idea was a slam dunk.\n      </p>\n      <p>\n        Of course, \n        <a href=\"https://twitter.com/redman/status/1366217790257061891\">\n          it wasn’t\n        </a>\n        . By basing their project on memes and not consulting the food bloggers\n        doing the work, this team missed the trade-offs that bloggers had made\n        to grow a loyal audience and earn a profit.\n      </p>\n      <p>\n        This example is about as macro as you can get (even gaining some \n        <a href=\"https://www.washingtonpost.com/food/2021/03/02/recipeasly-food-bloggers-controversy/\">\n          national attention\n        </a>\n        ), but this meme-guided go-it-alone phenomenon can occur at any level;\n        within your company, or even just within your team.\n      </p>\n      <p>\n        For instance, consider the decision to build a monolithic app instead of\n        a collection of microservices. All new services and feature requests\n        make their way into this app. Think Katamari Damacy, but an app. One\n        could envision a food blog-like situation happening here. Similar to the\n        recipe meme,\n      </p>\n      <ul>\n        <li>\n          <strong>Trade-offs are made.</strong> Developers decide that the cost\n          of building a monolithic app is worth not having to repeatedly solve\n          networking, architecture, and deployment issues.\n        </li>\n        <li>\n          <strong>People are separated from the trade-off decision.</strong> \n          Time passes, turnover occurs, and eventually, the developers working\n          on the app aren&#39;t the same developers who made the original\n          trade-off.\n        </li>\n        <li>\n          <strong>Memes catch fire.</strong> Most complaints are expressions of\n          frustration with little in the way of solutions, “KatamariApp is a\n          black hole!” The memes focus on the disadvantages so much that the\n          advantages are ignored or forgotten.\n        </li>\n        <li>\n          <strong>Someone takes action.</strong> Thanks to the popularity of the\n          meme and lack of context around the trade-off, someone gets it in\n          their head that building the next feature or service outside of the\n          monolith will be a good and popular decision.\n        </li>\n        <li>\n          <strong>Blowback!</strong> Despite the frustration developers have\n          with KatamariApp, it was still better than maintaining a separate\n          service AND the monolith in tandem.\n        </li>\n      </ul>\n      <p>\n        Memes are catchy and often entertaining, but infrequently (if ever)\n        capture the full scope of the problem at hand. \n        <strong>Memes are not user research.</strong>\n      </p>\n      <p>\n        It’s important to learn the history and context around the domain one is\n        working within. It’s also important to collaborate with (or at least\n        consult) those who might be affected by your work.\n      </p>\n      <p>\n        It would’ve saved the Recipeasly team a lot of trouble to interview some\n        food bloggers, the backbone of the service they were pitching, to learn\n        why they’d made the decisions they’d made. Food bloggers aren’t dumb and\n        very consciously made trade-offs in the best interest of their\n        businesses.\n      </p>\n      <p>\n        We also need to know about the trade-off decisions in the case of\n        KatamariApp. Teams must be proactive by creating a \n        <a href=\"https://adr.github.io\">decision log</a> outlining why the app\n        was built a certain way so that future maintainers can reference it and\n        have a meme counterweight.\n      </p>",
      "content_text": "Memes are catchy and entertaining, but rarely capture the full scope of the problem at hand. • https://mknepprath.com/writing/memes-arent-user-research",
      "summary": "Memes are catchy and entertaining, but rarely capture the full scope of the problem at hand.",
      "image": "https://mknepprath.com/assets/memes-arent-user-research.jpg",
      "date_published": "2021-06-12T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/settings-done",
      "url": "https://mknepprath.com/writing/settings-done",
      "title": "iOS App Settings: A Study",
      "content_html": "<img src=\"https://mknepprath.com/assets/settings-done.png\" alt=\"TestFlight screenshot feedback\" />\n      <header>\n        <h1>iOS App Settings: A Study</h1>\n      </header>\n      <blockquote>\n        <p>\n          If I’m in settings on home, and then go to different tabs, and then\n          return to the home tab, it’s still in the settings option.\n        </p>\n      </blockquote>\n      <p>\n        I gave a little cheer when I received this bug report from a TestFlight\n        user of my app, <a href=\"https://lilydex.com\">lily dex</a>. Finally, I\n        had made an app worthy of scrutiny. This wasn&apos;t my first bit of\n        feedback, but each one was a reminder that people actually use my app!\n      </p>\n      <p>\n        This particular bit of feedback was different than most in that it\n        wasn&apos;t describing something that was broken... my Settings view was\n        working as I&apos;d intended it to, and (I&apos;d later discover) in the\n        same way as many other apps&apos; Settings views.\n      </p>\n\n      <h2>The Bug</h2>\n      <p>\n        lily dex is pretty flat. Each tab in the menu bar at the bottom is\n        associated with one page: Home, Wild, Caught, and Search. The only other\n        page in the app is Settings, which is accessed by tapping the gear at\n        the top right of Home. Unfortunately, when you tap into Settings the\n        menu bar is still visible, allowing users to navigate to other pages\n        while Settings is open. If you navigate away and then tap Home to go\n        home, you will instead be greeted by the Settings view that was never\n        dismissed.\n      </p>\n\n      <h2>The Research</h2>\n      <p>\n        I poked around a bit in Xcode to see what felt right, but quickly\n        decided I needed to do some research into how other apps were handling\n        their Settings views.\n      </p>\n      <p>\n        This is a lazy study. My sample data set is made up of frequently used\n        apps on my phone. I documented two things: the type of view the app used\n        for its settings (a new view that slides in, a sheet, a dedicated tab,\n        etc), and what navigation options were available from the settings view. \n        <b>Leading</b> refers to the top left navigation and <b>Trailing</b>,\n        top right. Here&apos;s what I found.\n      </p>\n\n      <h3>New View That Slides In</h3>\n      <p>\n        These apps work similarly to mine, as described above. All exhibit the\n        same &ldquo;buggy&rdquo; behavior as lily dex.\n      </p>\n      <p></p>\n      <table class=>\n        <thead>\n          <tr>\n            <th>App</th>\n            <th>Leading</th>\n            <th>Trailing</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td>lily dex</td>\n            <td>< Home</td>\n            <td></td>\n          </tr>\n          <tr>\n            <td>GitHub</td>\n            <td>< Back</td>\n            <td></td>\n          </tr>\n          <tr>\n            <td>Goodreads</td>\n            <td><</td>\n            <td></td>\n          </tr>\n          <tr>\n            <td>Starbucks</td>\n            <td><</td>\n            <td></td>\n          </tr>\n          <tr>\n            <td>Twitter</td>\n            <td><</td>\n            <td></td>\n          </tr>\n          <tr>\n            <td>Watch</td>\n            <td>{\"< \"}</td>\n            <td></td>\n          </tr>\n          <tr>\n            <td>Jumbo</td>\n            <td>< Back</td>\n            <td></td>\n          </tr>\n        </tbody>\n      </table>\n\n      <h3>New View That Slides In (Tab Bar Hidden)</h3>\n      <p>\n        A key component of this bug is that the user can navigate away from\n        Settings using the app&apos;s tabs. The following apps remedy this by\n        hiding the tab bar entirely while the settings are open.\n      </p>\n      <table class=>\n        <thead>\n          <tr>\n            <th>App</th>\n            <th>Leading</th>\n            <th>Trailing</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td>Dispo</td>\n            <td>←</td>\n            <td></td>\n          </tr>\n          <tr>\n            <td>Overcast</td>\n            <td><</td>\n            <td></td>\n          </tr>\n          <tr>\n            <td>Vivint</td>\n            <td><</td>\n            <td></td>\n          </tr>\n          <tr>\n            <td>Zeitgeist</td>\n            <td>< Zeitgeist</td>\n            <td></td>\n          </tr>\n          <tr>\n            <td>Walmart</td>\n            <td><</td>\n            <td></td>\n          </tr>\n          <tr>\n            <td>Google Photos</td>\n            <td><</td>\n            <td></td>\n          </tr>\n        </tbody>\n      </table>\n\n      <h3>New View</h3>\n      <p>\n        I discovered one app where it appeared that the team had built their own\n        version of iOS&apos;s navigation. In practice, the Alexa app works the\n        same as the apps in <b>New View That Slides In</b>... except the\n        settings view doesn&apos;t slide in. It very noticeably flashes in.\n      </p>\n      <p>\n        While ugly in this regard, the Alexa app does not suffer from the\n        aforementioned bug.\n      </p>\n      <table class=>\n        <thead>\n          <tr>\n            <th>App</th>\n            <th>Leading</th>\n            <th>Trailing</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td>Amazon Alexa</td>\n            <td><</td>\n            <td></td>\n          </tr>\n        </tbody>\n      </table>\n\n      <h3>Sheet</h3>\n      <p>\n        I quickly ran into a new method of displaying settings - in a sheet (a\n        view that appears over an existing view). Sheets slide in from the\n        bottom of the screen and can be dismissed by pulling them down or\n        (typically) tapping a Done button.\n      </p>\n      <p>\n        Apps that use sheets for their settings do not include the bug since the\n        sheet covers the whole app, blocking users from tapping the menu bar\n        tabs.\n      </p>\n      <p>\n        This ended up being the most popular method by far, even used by most of\n        the Apple apps I checked.\n      </p>\n      <table class=>\n        <thead>\n          <tr>\n            <th>App</th>\n            <th>Leading</th>\n            <th>Trailing</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td>Apple Music</td>\n            <td></td>\n            <td>Done</td>\n          </tr>\n          <tr>\n            <td>Apple TV</td>\n            <td></td>\n            <td>Done</td>\n          </tr>\n          <tr>\n            <td>Letterboxd</td>\n            <td>Cancel</td>\n            <td>Save</td>\n          </tr>\n          <tr>\n            <td>Deliveries</td>\n            <td>Done</td>\n            <td></td>\n          </tr>\n          <tr>\n            <td>Grocery</td>\n            <td>Done</td>\n            <td></td>\n          </tr>\n          <tr>\n            <td>Copilot</td>\n            <td></td>\n            <td></td>\n          </tr>\n          <tr>\n            <td>Weather Line</td>\n            <td></td>\n            <td>Done</td>\n          </tr>\n          <tr>\n            <td>Hey</td>\n            <td>⌄</td>\n            <td></td>\n          </tr>\n          <tr>\n            <td>Fantastical</td>\n            <td>Done</td>\n            <td></td>\n          </tr>\n          <tr>\n            <td>Slack</td>\n            <td>✕</td>\n            <td></td>\n          </tr>\n          <tr>\n            <td>Opal*</td>\n            <td></td>\n            <td></td>\n          </tr>\n          <tr>\n            <td>Halide*</td>\n            <td></td>\n            <td></td>\n          </tr>\n          <tr>\n            <td>Apple News</td>\n            <td></td>\n            <td>Done</td>\n          </tr>\n          <tr>\n            <td>App Store</td>\n            <td></td>\n            <td>Done</td>\n          </tr>\n          <tr>\n            <td>Home</td>\n            <td>< Rooms</td>\n            <td>Done</td>\n          </tr>\n          <tr>\n            <td>Connect</td>\n            <td></td>\n            <td>Done</td>\n          </tr>\n          <tr>\n            <td>Flighty</td>\n            <td></td>\n            <td>Done</td>\n          </tr>\n          <tr>\n            <td>Dark Sky</td>\n            <td></td>\n            <td>Done</td>\n          </tr>\n          <tr>\n            <td>NetNewsWire</td>\n            <td>Done</td>\n            <td></td>\n          </tr>\n          <tr>\n            <td>Animatic</td>\n            <td></td>\n            <td>Done</td>\n          </tr>\n        </tbody>\n      </table>\n      <p>* Indicates an app with a centered down arrow in the nav.</p>\n\n      <h3>Full-Screen Cover</h3>\n      <p>\n        This one&apos;s the same as a sheet, except it fills the entire screen.\n        Sheets typically leave some space at the top.\n      </p>\n      <table class=>\n        <thead>\n          <tr>\n            <th>App</th>\n            <th>Leading</th>\n            <th>Trailing</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td>Notion</td>\n            <td></td>\n            <td>Done</td>\n          </tr>\n          <tr>\n            <td>Instapaper</td>\n            <td></td>\n            <td>Done</td>\n          </tr>\n        </tbody>\n      </table>\n\n      <h3>Dedicated Tab</h3>\n      <p>A few apps promoted the settings view to their menu bar.</p>\n      <table class=>\n        <thead>\n          <tr>\n            <th>App</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td>1Password</td>\n          </tr>\n          <tr>\n            <td>Discord</td>\n          </tr>\n          <tr>\n            <td>Apollo</td>\n          </tr>\n        </tbody>\n      </table>\n\n      <h3>Custom Modal</h3>\n      <p>\n        And finally, one team built a custom modal view to contain their app\n        settings.\n      </p>\n      <table class=>\n        <thead>\n          <tr>\n            <th>App</th>\n            <th>Leading</th>\n            <th>Trailing</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td>Things</td>\n            <td></td>\n            <td>Done</td>\n          </tr>\n        </tbody>\n      </table>\n\n      <h2>A Confession</h2>\n      <p>The quote at the beginning of this post wasn&apos;t the full quote.</p>\n      <blockquote>\n        <p>\n          If I’m in settings on home, and then go to different tabs, and then\n          return to the home tab, it’s still in the settings option. And if you\n          click the home tab again, it doesn’t go home. Just stays in settings.\n        </p>\n      </blockquote>\n      <p>\n        I primarily focused on the first sentence during this exploration, but\n        there was a second part to the feedback I received: Tapping Home while\n        viewing the nested Settings view didn&apos;t take you home. In\n        hindsight, this was the bigger issue. It&apos;s implicit in the feedback\n        that tapping Home multiple times should navigate <em>and then</em> \n        dismiss nested views. Perhaps users are used to button-mashing their way\n        to the root view.\n      </p>\n      <p>\n        In all of the apps in the <b>New View That Slides In</b> section (and\n        unlike my app), double-tapping the tab navigation dismisses the settings\n        view.\n      </p>\n\n      <h2>My Takeaway</h2>\n      <p>\n        The sheet is far and away the most popular way to present settings.\n        Navigation among this subset of apps is a bit of a mess, although all of\n        Apple&apos;s apps in this category are 100% consistent with a trailing\n        Done button. Shout out to Weather Line, Flighty, Dark Sky, and Animatic\n        for following suit.\n      </p>\n      <p>\n        Based on this study, I moved my settings into a sheet with a trailing\n        Done button as well.\n      </p>\n      <p>\n        Thanks to <a href=\"https://twitter.com/lmeilner\">Luke</a> for the\n        feedback that kicked this whole thing off!\n      </p>",
      "content_text": "How the iOS apps I use implement their settings view. • https://mknepprath.com/writing/settings-done",
      "summary": "How the iOS apps I use implement their settings view.",
      "image": "https://mknepprath.com/assets/settings-done.png",
      "date_published": "2021-03-15T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/sherlock-codes",
      "url": "https://mknepprath.com/writing/sherlock-codes",
      "title": "10x Detective",
      "content_html": "<img src=\"https://mknepprath.com/assets/sherlock-codes.jpg\" alt=\"Bug Detective\" />\n      <header>\n        <h1>10x Detective</h1>\n      </header>\n      <p>\n        A friend shared this great Game Maker&apos;s Toolkit video with me, \n        <a href=\"https://www.youtube.com/watch?v=gwV_mA2cv_0\">\n          What Makes a Good Detective Game?\n        </a>\n        , while we were researching in preparation for \n        <a href=\"http://tinymystery.club\">Tiny Mystery Club</a>. He made a side\n        comment about how programming can be a lot like solving a mystery, a\n        comment which has been popping back into my head nearly every time\n        I&apos;ve worked through some code since.\n      </p>\n      <p>\n        My favorite segment of the video is about Sherlock Holmes: Consulting\n        Detective, a video game based on a board game of the same name.\n      </p>\n      <img src=\"https://mknepprath.com/assets/sherlock-codes-1.png\" alt=\"Sherlock Holmes: Consulting Detective\" />\n      <blockquote>\n        <p>\n          So, in this game, you actually get a newspaper in the box and you have\n          to scan through it for articles that might be relevant to your\n          investigation...\n        </p>\n        <p>\n          Then, in the game itself, you open up a directory of every person or\n          business in London. There&apos;s roughly 200 entries in here at least,\n          so you&apos;ll have to rifle through it to find the right person. The\n          idea is to hide the relevant names in a sea of red herrings.\n        </p>\n      </blockquote>\n      <p>\n        I had this example in mind while working on a recent project. During the\n        past week, I&apos;d been working on building and deploying a new \n        <a href=\"https://nextjs.org\">Next.js</a> website with my work&apos;s\n        internal tools. The tools are well-documented for lots of different\n        kinds of sites, but not Next.js (yet).\n      </p>\n      <p>\n        After some digging, the most effective way I found to solve this problem\n        was to try a bunch of different build scripts based on reading the\n        documentation for Next.js and our internal deploy tool, then search\n        GitHub Enterprise for repositories where folks had tried the same thing.\n        The documentation was my newspaper, and GitHub was my London full of red\n        herrings.\n      </p>\n      <p>\n        Game Maker&apos;s Toolkit also mentioned a 2009 game called Blackwell\n        Convergence:\n      </p>\n      <blockquote>\n        <p>\n          In Blackwell, you can type interesting place names you&apos;ve heard\n          or seen written down into the Internet to get addresses before\n          they&apos;re added to your map as locations you can visit. The magic\n          of the search bar is that these people and place names are only\n          acknowledged by the game as useful clues when the player has proven\n          that they know they&apos;re useful clues by typing them in.\n        </p>\n      </blockquote>\n      <img src=\"https://mknepprath.com/assets/sherlock-codes-2.png\" alt=\"Sherlock Holmes Consulting Detective\" />\n      <p>\n        In some ways, this hews even closer to my experience at work. While\n        reading the documentation, I had to recognize which keywords were\n        significant and search for them using an actual search bar in GitHub.\n        I&apos;d know the keywords were useful clues when they led me to\n        someone&apos;s repository in which they were trying to solve a similar\n        problem.\n      </p>\n      <p>\n        For example, the documentation for our internal deploy tool indicated\n        that I&apos;d need to build to a specially named directory called \n        <code class=\"language-html\">target</code>. I cross-referenced that\n        with the Next.js page about how to \n        <a href=\"https://nextjs.org/docs/api-reference/next.config.js/setting-a-custom-build-directory\">\n          set a custom build directory\n        </a>\n        , specified a <code class=\"language-html\">distDir</code> directory\n        for my website, and searched for \n        <code class=\"language-html\">distDir: &apos;target&apos;</code> in\n        GitHub Enterprise. There were a few results! This indicated to me that I\n        was probably on the right path. Even better, the results led to more\n        repositories where I could hunt for even more clues.\n      </p>\n      <p>\n        Of course, I&apos;m not trying to play a game while I&apos;m working -\n        and for most tasks, I&apos;d really prefer a simple list of steps to\n        follow. In fact, how similar my work is to a mystery game is probably\n        inversely proportional to how much coverage a tool&apos;s documentation\n        has. In mystery games, the goal is to make the player have to work to\n        solve the problem without spoonfeeding them answers. In development, I\n        want to complete my tasks as quickly and efficiently as possible.\n      </p>",
      "content_text": "Mystery game mechanics as an allegory for debugging. • https://mknepprath.com/writing/sherlock-codes",
      "summary": "Mystery game mechanics as an allegory for debugging.",
      "image": "https://mknepprath.com/assets/sherlock-codes.jpg",
      "date_published": "2021-02-15T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/the-bots-replaced-me",
      "url": "https://mknepprath.com/writing/the-bots-replaced-me",
      "title": "Auto-Merging Dependabot Pull Requests",
      "content_html": "<img src=\"https://mknepprath.com/assets/dependabot-1.jpg\" alt=\"Pull request as an Unown.\" />\n      <header>\n        <h1>Auto-Merging Dependabot Pull Requests</h1>\n      </header>\n      <p>\n        There are few things less fun than keeping all of my websites&apos;\n        dependencies up to date. About a year ago, I added \n        <a href=\"https://dependabot.com\">Dependabot</a> to my personal\n        projects...\n      </p>\n      <blockquote>\n        <p>\n          Dependabot pulls down your dependency files and looks for any outdated\n          or insecure requirements. If any of your dependencies are out-of-date,\n          Dependabot opens individual pull requests to update each one.\n        </p>\n      </blockquote>\n      <p>\n        This made the process <em>way</em> easier. Thanks to \n        <a href=\"https://vercel.com/docs/git/vercel-for-github\">\n          Vercel for GitHub\n        </a>\n        , all of my pull requests included a preview URL where I could verify\n        everything was working as expected before I merged my changes. So at\n        this point, I&apos;d open the preview URL, verify everything looked\n        good, and click the merge button.\n      </p>\n      <p>\n        I was feeling great! ... But then \n        <a href=\"https://twitter.com/brian_lovin/status/1205284197679665154\">\n          Brian Lovin\n        </a> \n        suggested a way to make it even better.\n      </p>\n      <blockquote>\n        <p lang=\"en\" dir=\"ltr\">\n          Add some tests + auto merging + auto deploying and put that on\n          autopilot 🚀\n        </p>\n        &mdash; Brian Lovin (@brian_lovin) \n        <a href=\"https://twitter.com/brian_lovin/status/1205284197679665154?ref_src=twsrc%5Etfw\">\n          December 13, 2019\n        </a>\n      </blockquote>\n      <p>\n        A year later, I was nearing the end of 2020 with a huge backlog of PRs.\n        Despite how easy I had made it for myself, it was still a pain to verify\n        and merge all of them one at a time. I decided to give Brian&apos;s\n        suggestion a shot.\n      </p>\n\n      <h2>Add Some Tests</h2>\n      <p>First problem: I had zero tests.</p>\n      <p>\n        When manually checking Vercel&apos;s preview URL, I&apos;d typically\n        verify a few things, but for the most part, I&apos;d just check to make\n        sure my site loaded up successfully.\n      </p>\n      <p>\n        I decided to set up some tests with Cypress to check this instead. Most\n        of the tests simply verify that the pages load - but some also check the\n        content to make sure it&apos;s loading in a way I&apos;d expect.\n      </p>\n      <p>\n        I then followed a guide to add the \n        <a href=\"https://github.com/mknepprath/mknepprath-next/blob/master/.github/workflows/ci.yml\">\n          Cypress GitHub Action\n        </a> \n        to run these tests on every commit to GitHub. This was the first GitHub\n        Action I ever implemented!\n      </p>\n\n      <h2>Auto-Merging</h2>\n      <p>Now, the fun part.</p>\n      <p>\n        I had a lot of issues finding a GitHub Action that would work for me.\n        While researching this, I discovered it was a feature that had been\n        removed from Dependabot post-GitHub acquisition. \n        <a href=\"https://github.community/t/allowing-github-actions-bot-to-push-to-protected-branch/16536/2\">\n          GitHub&apos;s reasoning\n        </a>\n        :\n      </p>\n      <blockquote>\n        If we enabled GitHub Actions to push to a protected branch then any\n        collaborator in your repo could push any code to any branch they wanted\n        simply by creating a branch and coding the workflow to push to some\n        other branch.\n      </blockquote>\n      <p>\n        If you want to push to a protected branch, you have to have explicit\n        permission to push to that branch. Bots not excluded.\n      </p>\n      <p>\n        I spent some time trying to figure out how to give Dependabot push\n        access to no avail. I did find a \n        <a href=\"https://github.community/t/how-to-push-to-protected-branches-in-a-github-action/16101/11\">\n          different workaround\n        </a>\n        , however. Instead of giving push access to the bot, I set up the\n        automation using an account that already had push access. Mine.\n      </p>\n      <p>\n        You can check out this GitHub Action \n        <a href=\"https://github.com/mknepprath/mknepprath-next/blob/master/.github/workflows/auto-merge.yml\">\n          here\n        </a>\n        .\n      </p>\n      <img src=\"https://mknepprath.com/assets/dependabot-2.jpg\" alt=\"My GitHub Action in action.\" />\n      <p>\n        After tweeting about this issue, \n        <a href=\"https://twitter.com/FloFi/status/1348894135705612288\">\n          Florian Fittschen\n        </a> \n        suggested another (probably better) solution: using a GitHub Action to\n        generate the token. I haven&apos;t tried this yet, but I&apos;d\n        recommend looking into this for future auto-merge workflows.\n      </p>\n\n      <h2>Autopilot</h2>\n      <p>\n        This worked so well, I quickly added these same GitHub Actions to all of\n        my other sites. Updates and security patches are now submitted, tested,\n        merged, and deployed without any hand-holding from me - all I see are\n        the merge notifications after the fact. Nice!\n      </p>\n      <blockquote data-conversation=\"none\">\n        <p lang=\"en\" dir=\"ltr\">\n          Copied that action over to a couple of my repos yesterday, can&#39;t\n          wait for the automerge magic to begin!\n        </p>\n        &mdash; Brian Lovin (@brian_lovin) \n        <a href=\"https://twitter.com/brian_lovin/status/1346529191622111233?ref_src=twsrc%5Etfw\">\n          January 5, 2021\n        </a>\n      </blockquote>",
      "content_text": "How I learned to stop worrying and love the bot. • https://mknepprath.com/writing/the-bots-replaced-me",
      "summary": "How I learned to stop worrying and love the bot.",
      "image": "https://mknepprath.com/assets/dependabot-1.jpg",
      "date_published": "2021-01-12T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/2020",
      "url": "https://mknepprath.com/writing/2020",
      "title": "2020 in Review",
      "content_html": "<header>\n        <h1>2020 in Review</h1>\n      </header>\n      <p>\n        Hello and welcome to my second annual year-in-review post, the first\n        being last year&apos;s <Link href=\"/writing/2019\">2019 in Review</Link>.\n        Unlike 2019, I had actual goals this year - so I can give a report on\n        how I did. Yay!\n      </p>\n      <img src=\"https://mknepprath.com/assets/2020-in-review-3.jpeg\" alt=\"Three photos from 2020.\" />\n      <h2>2020 Goals</h2>\n      <h3>Read 10 books ✅</h3>\n      <p>I read 14 books/series this year, surpassing my goal of 10 books.</p>\n      <ol>\n        <li>\n          <b>Snow Crash</b> by Neal Stephenson\n        </li>\n        <li>\n          <b>Code</b> by Charles Petzold\n        </li>\n        <li>\n          <b>One Flew Over the Cuckoo&#8217;s Nest</b> by Ken Kesey\n        </li>\n        <li>\n          <b>1984</b> by George Orwell\n        </li>\n        <li>\n          <b>Over The Garden Wall (Series)</b> by Jim Campbell\n        </li>\n        <li>\n          <b>\n            Creative Selection: Inside Apple&#8217;s Design Process During the\n            Golden Age of Steve Jobs\n          </b> \n          by Ken Kocienda\n        </li>\n        <li>\n          <b>The Shape of Design</b> by Frank Chimero\n        </li>\n        <li>\n          <b>So You Want to Talk About Race</b> by Ijeoma Oluo\n        </li>\n        <li>\n          <b>Zed</b> by Joanna Kavenna\n        </li>\n        <li>\n          <b>Black Skin, White Masks</b> by Frantz Fanon\n        </li>\n        <li>\n          <b>The Adventure Zone: Petals to the Metal</b> by the McElroys\n        </li>\n        <li>\n          <b>March (Series)</b> by John Lewis\n        </li>\n        <li>\n          <b>Rage</b> by Bob Woodward\n        </li>\n        <li>\n          <b>Between the World and Me</b> by Ta-Nehisi Coates\n        </li>\n      </ol>\n      <p>\n        I was also delighted by several books I read with my son, including \n        <b>Dog Man</b> by Dav Pilkey and <b>A Narwhal and Jelly Book</b> by Ben\n        Clanton.\n      </p>\n      <p>\n        I&apos;m currently rereading Watchmen after watching the phenomenal HBO\n        series a few weeks ago. I expect to finish it by the end of this year as\n        well.\n      </p>\n      <h3>Write 10 blog posts ✅</h3>\n      <p>\n        I wrote exactly 10 posts this year not including this post or \n        <Link href=\"/writing/2020-mid-year-review\">the mid-year review</Link>.\n        That&apos;s 6 more than last year!\n      </p>\n      <ol>\n        <li>\n          <Link href=\"/writing/rss\">Adding RSS to My Next.js Website</Link>\n        </li>\n        <li>\n          <Link href=\"/writing/sorry-to-bother-you\">Twitter Defeated Me</Link>\n        </li>\n        <li>\n          <Link href=\"/writing/babys-first-codemod\">\n            The Codemod Side Quest\n          </Link>\n        </li>\n        <li>\n          <Link href=\"/writing/apple-made-me-do-it\">Home Screen Hack</Link>\n        </li>\n        <li>\n          <Link href=\"/writing/making-a-minecraft-status-page\">\n            Making a Minecraft Server Status Page\n          </Link>\n        </li>\n        <li>\n          <Link href=\"/writing/culturally-irrelevant\">\n            Building a Culturally Irrelevant Recommendation Board\n          </Link>\n        </li>\n        <li>\n          <Link href=\"/writing/life-art-nostalgia\">Life, Art, Nostalgia</Link>\n        </li>\n        <li>\n          <Link href=\"/writing/lily-dex\">lily dex</Link>\n        </li>\n        <li>\n          <Link href=\"/writing/bills-pc\">Pokémon Data Munging</Link>\n        </li>\n        <li>\n          <Link href=\"/writing/ebooks\">“It&apos;s Just the Algorithm”</Link>\n        </li>\n      </ol>\n      <p>\n        In addition to these, I searched the Wayback Machine for one of my old\n        posts, updated it with photos from my 2010 college yearbook, and\n        republished it: \n        <Link href=\"/writing/giant-portraits\">Giant Portraits</Link>.\n      </p>\n      <h3>Release the next chapter of lilt ✅</h3>\n      <p>\n        I had big dreams for lilt that weren&apos;t realized this year.\n        Regardless, I did add a few new areas to the game and announced it on\n        Twitter, completing this goal.\n      </p>\n      <blockquote>\n        <p lang=\"en\" dir=\"ltr\">\n          my twitter text adventure, \n          <a href=\"https://twitter.com/FamiliarLilt?ref_src=twsrc%5Etfw\">\n            @FamiliarLilt\n          </a>\n          , has some new areas to explore - tweet ‘start’ at the account to play\n          🗿 <a href=\"https://t.co/wz4zFabHix\">https://t.co/wz4zFabHix</a>\n        </p>\n        &mdash; Michael Knepprath (@mknepprath) \n        <a href=\"https://twitter.com/mknepprath/status/1212853133342388230?ref_src=twsrc%5Etfw\">\n          January 2, 2020\n        </a>\n      </blockquote>\n      <h3>Complete 3 online courses 🔴</h3>\n      <p>\n        I made some progress on \n        <a href=\"https://testingjavascript.com/\">Testing JavaScript</a> by Kent\n        C. Dodds and made it most of the way through \n        <a href=\"https://www.hackingwithswift.com/100/swiftui\">\n          100 Days of SwiftUI\n        </a> \n        by Paul Hudson. I learned A LOT this year, yet I didn&apos;t complete a\n        single course. This was the only 2020 goal I failed.\n      </p>\n      <p>\n        It&apos;d be easy for me to say, well, this was an unrealistic goal. It\n        doesn&apos;t reflect how I actually learn. So it goes.\n      </p>\n      <p>\n        It&apos;d be easy. And while I do believe it&apos;s true, I don&apos;t\n        want to jump ahead without pointing out the fact that I clearly\n        didn&apos;t understand something about myself at the time of goal\n        setting and will take this into consideration when setting goals for\n        2021.\n      </p>\n      <h3>Draw, illustrate, animate! ✅</h3>\n      <p>\n        I managed to create several drawings and animations during the first\n        half of this year as outlined in \n        <Link href=\"/writing/2020-mid-year-review#draw-illustrate-animate\">\n          my mid-year review\n        </Link>\n        . Since then, I made another movie with my son called \n        <a href=\"https://www.youtube.com/watch?v=mdGTbURZhZc\">Bag Crush</a>,\n        more drawings, and started working on some 2D animations.\n      </p>\n      <a href=\"https://twitter.com/mknepprath/status/1340091334988840963\">\n        <img src=\"https://mknepprath.com/assets/2020-in-review-1.jpg\" alt=\"Drawing of a bathroom stool.\" />\n      </a>\n      <p>\n        A few of my drawings were enhanced by a collection of Copic markers I\n        recently purchased, including the illustration for my most recent blog\n        post, <Link href=\"/writing/ebooks\">“It&apos;s Just the Algorithm”</Link>\n        .\n      </p>\n      <h3>Bonus: Develop an iOS app ✅</h3>\n      <p>\n        One of my 2019 goals was to build an app. I spent quite a bit of time on\n        this but ended up failing to accomplish this goal. In hindsight, I feel\n        that the main reason was my lack of Swift experience and the rush to\n        build something before picking up even the basics of it.\n      </p>\n      <p>\n        I didn&apos;t set a repeat goal for this in 2020, and yet... \n        <Link href=\"/writing/lily-dex\">I built an app</Link>! And \n        <a href=\"https://lilydex.com\">\n          <em>published</em> it\n        </a>\n        ! This was all thanks to the excellent 100 Days of SwiftUI course\n        mentioned above. I didn&apos;t complete the course, yet I was able to do\n        more with the knowledge I gained from it than I would&apos;ve ever\n        imagined at the beginning of the year.\n      </p>\n      <p>\n        I have to give some credit to Apple, as well. SwiftUI wasn&apos;t around\n        for my previous attempts at iOS development, and it was a joy to work\n        with.\n      </p>\n      <img src=\"https://mknepprath.com/assets/2020-in-review-4.jpeg\" alt=\"Three photos from 2020.\" />\n      <h2>Cool Things</h2>\n      <h3>Side projects</h3>\n      <p>\n        I worked on a lot of web-based side projects outside of my goals\n        outlined at the beginning of the year.\n      </p>\n      <p>\n        Earlier this year, I dropped all of my other projects to work on the \n        <a href=\"https://culturallyirrelevant.com\">\n          Culturally Irrelevant Recommendation Board\n        </a>\n        , a website inspired by a retired podcast of the same name. I spent a\n        full month on this site and described the process in a post entitled \n        <Link href=\"/writing/culturally-irrelevant\">\n          Building a Culturally Irrelevant Recommendation Board\n        </Link>\n        .\n      </p>\n      <p>\n        I also worked on a game. I gave it a name, \n        <a href=\"http://tinymystery.club\">Tiny Mystery Club</a>, and added some\n        actual gameplay elements. I think it will be an interesting sandbox to\n        play in next year.\n      </p>\n      <img src=\"https://mknepprath.com/assets/2020-in-review-8.gif\" alt=\"Tiny Mystery Club\" />\n      <p>\n        Finally, I did a bunch of work on my personal site, including\n        integrating Goodreads and Letterboxd into my \n        <Link href=\"/about\">About</Link> page to display six of my most recently\n        read books and watched movies. Behind the scenes, I added a bunch of \n        <a href=\"https://www.cypress.io\">Cypress</a> tests and used \n        <a href=\"https://github.com/features/actions\">GitHub Actions</a> to\n        automatically run them on all of my commits.\n      </p>\n      <img src=\"https://mknepprath.com/assets/2020-in-review-5.jpeg\" alt=\"Three photos from 2020.\" />\n      <h3>Gaming</h3>\n      <p>\n        Last year, my family moved to a new state. For the first time in years,\n        I thought about doing some online gaming since it&apos;s a fun way to\n        socialize with the friends I wasn&apos;t able to see as much anymore.\n      </p>\n      <p>\n        We&apos;ve been playing about once a week and it&apos;s been a blast.\n        Early on we played Hammerwatch, then Unrailed! (which has an amazing\n        soundtrack), some Tabletop Simulator, and tons of Among Us. \n      </p>\n      <img src=\"https://mknepprath.com/assets/2020-in-review-9.jpg\" alt=\"Among Us waiting room.\" />\n      <h2>2021 Goals</h2>\n      <p>Time to up the stakes. Here are my revised goals for 2021.</p>\n      <h3>Read 15 books</h3>\n      <p>\n        Last year, I said I&apos;d be happy if I read ten books. Since I\n        surpassed that goal by quite a bit, I&apos;m going to increase this goal\n        to 15. My only hesitation here is that I&apos;d like the flexibility to\n        read some larger books such as Leonardo da Vinci by Walter Isaacson.\n        We&apos;ll see how it goes.\n      </p>\n      <h3>Write 10 blog posts</h3>\n      <p>\n        I think 10 posts a year is a pretty good cadence and I&apos;d like to\n        continue with it. My main hope is that these goals drive me to be\n        consistent, so they don&apos;t necessarily have to increase in\n        difficulty.\n      </p>\n      <h3>Release the next version of Tiny Mystery Club</h3>\n      <p>\n        I believe <a href=\"https://tinymystery.club\">Tiny Mystery Club</a> has a\n        lot of potential, but I haven&apos;t spent anywhere near as much time as\n        I would like developing it. Next year, I&apos;d like to develop a \n        <em>good</em> mystery and release it as a big 2.0 release of the game.\n      </p>\n      <h3>Develop a collection of 2D animations</h3>\n      <p>\n        Hand-drawn 2D animations, that is. I&apos;ve \n        <a href=\"https://vimeo.com/15226579\">dabbled</a> with it in the past, so\n        I know it&apos;s fun! The result of this goal should be a collection of\n        thematically connected, consistent hand-drawn 2D animations.\n      </p>\n      <h3>Illustrate a comic</h3>\n      <p>\n        I sorta gave myself an out this year by grouping drawing, comics, and\n        animation into one goal. Next year, I&apos;m GOING to MAKE a COMIC. That\n        is all I know at this point.\n      </p>\n      <h3>Launch lily dex</h3>\n      <p>\n        I published lily dex, but I haven&apos;t formally announced it anywhere\n        beyond Twitter. I&apos;d like to finish any lingering features on my\n        to-do list, then make an actual effort to get customers. I also\n        purchased the <a href=\"http://lilydex.com\">lilydex.com</a> domain, so\n        I&apos;m considering building out a lily dex web app, as well...\n      </p>\n      <img src=\"https://mknepprath.com/assets/2020-in-review-6.jpeg\" alt=\"Three photos from 2020.\" />\n      <h2>Parting Thoughts</h2>\n      <p>\n        2020 was my first year publicly setting goals, so it was far from\n        guaranteed that I&apos;d be continuing it in 2021. It did cause me some\n        stress, especially when I realized there was no way I&apos;d be\n        completing three courses by the end of the year. I think it was worth\n        it, though. I always had something to work on and all of it was\n        rewarding, fun, or both.\n      </p>\n      <p>Thanks for reading! 👋</p>",
      "content_text": "A look at my accomplishments during the past year. • https://mknepprath.com/writing/2020",
      "summary": "A look at my accomplishments during the past year.",
      "image": "https://mknepprath.com/assets/2020-in-review-3.jpeg",
      "date_published": "2020-12-28T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/ebooks",
      "url": "https://mknepprath.com/writing/ebooks",
      "title": "“It's Just the Algorithm”",
      "content_html": "<img src=\"https://mknepprath.com/assets/ebooks.jpg\" alt=\"Two robot heads.\" />\n      <header>\n        <h1>“It's Just the Algorithm”</h1>\n      </header>\n      <p>\n        In 2016, I had some \n        <Link href=\"/writing/creating-lilt-part-4\">big ideas</Link> that\n        required developing Twitter bots and decided to build an ebooks account\n        as a sort of trial run. It came together much faster than I&apos;d\n        expected and I was able to switch to my other Twitter bot ideas within a\n        few weeks.\n      </p>\n      <blockquote>\n        <p lang=\"en\" dir=\"ltr\">\n          Nothing is certain except Star Wars clothing.\n        </p>\n        &mdash; Robot MK (@robot_mk) \n        <a href=\"https://twitter.com/robot_mk/status/697868068920414208?ref_src=twsrc%5Etfw\">\n          February 11, 2016\n        </a>\n      </blockquote> \n      <p>\n        Despite having worked very little on \n        <a\n          href=\"https://twitter.com/robot_mk\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          @robot_mk\n        </a> \n        beyond the initial setup, it has been a constant presence in my online\n        life since. People still find joy and entertainment from its tweets and\n        frequently play along with their weird responses.\n      </p>\n      <blockquote>\n        <p lang=\"en\" dir=\"ltr\">\n          Wow you seem to get more relatable each month 🤔😂\n        </p>\n        &mdash; Kevin Gutowski (@kevgski) \n        <a href=\"https://twitter.com/kevgski/status/995176681852698625?ref_src=twsrc%5Etfw\">\n          May 12, 2018\n        </a>\n      </blockquote>\n      <p>\n        Even the quirks caused by &ldquo;bugs&rdquo; were fun, such as when it\n        would repeat my tweets verbatim. Here, the bot turned one of my tweets\n        into a sort of ouroboros.\n      </p>\n      <blockquote>\n        <p lang=\"en\" dir=\"ltr\">\n          <a href=\"https://twitter.com/mknepprath?ref_src=twsrc%5Etfw\">\n            @mknepprath\n          </a> \n          pretty soon I&#39;m going to start getting confused with which one of\n          you is real\n        </p>\n        &mdash; Ben Lundsten (@benlundsten) \n        <a href=\"https://twitter.com/benlundsten/status/771493071749980160?ref_src=twsrc%5Etfw\">\n          September 1, 2016\n        </a>\n      </blockquote>\n      <p>\n        It&apos;s not all fun and games, however. Sometimes the account seems to\n        tweet veiled threats.\n      </p>\n      <blockquote>\n        <p lang=\"en\" dir=\"ltr\">\n          I might have an army of bots.\n        </p>\n        &mdash; Robot MK (@robot_mk) \n        <a href=\"https://twitter.com/robot_mk/status/1110173403430965249?ref_src=twsrc%5Etfw\">\n          March 25, 2019\n        </a>\n      </blockquote>\n      <blockquote>\n        <p lang=\"en\" dir=\"ltr\">\n          you leave Mars alone\n        </p>\n        &mdash; Michael Knepprath (@mknepprath) \n        <a href=\"https://twitter.com/mknepprath/status/781281278352060416?ref_src=twsrc%5Etfw\">\n          September 28, 2016\n        </a>\n      </blockquote>\n      <blockquote>\n        <p lang=\"und\" dir=\"ltr\">\n           \n          <a href=\"https://t.co/tYoGkCMEtr\">pic.twitter.com/tYoGkCMEtr</a>\n        </p>\n        &mdash; Josh Wierschke (@JoshWWhat) \n        <a href=\"https://twitter.com/JoshWWhat/status/1314050201716486149?ref_src=twsrc%5Etfw\">\n          October 8, 2020\n        </a>\n      </blockquote>\n      <p>\n        While concerning, I can sleep soundly knowing that \n        <small>\n          <em>\n            (despite the fact that I provide the data and wrote all of the code\n            used to generate these tweets)\n          </em>\n        </small> \n        this is a failure of the <b>algorithm</b>.\n      </p>\n      <h2>It&apos;s Just the Algorithm</h2>\n      <p>\n        The reason my bot sometimes tweets in a threatening manner has to do\n        with the algorithm behind the bot, as the tweets are determined by an\n        algorithm. The \n        <em>\n          <b>algorithm</b>\n        </em> \n        is what failed.\n      </p>\n      <p>Right?</p>\n      <br />\n      <br />\n      <br />\n      <hr />\n      <blockquote>\n        “[T]he Stanford vaccine <b>algorithm failed</b> to prioritize house\n        staff.” − \n        <a\n          href=\"https://www.washingtonpost.com/health/2020/12/18/stanford-hospital-protest-covid-vaccine/\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          The Washington Post\n        </a>\n      </blockquote>\n      <blockquote>\n        Facebook representatives told NPR that the reason why some people did\n        not see the march as trending had to do with <b>the algorithm</b> behind\n        the feature. − \n        <a\n          href=\"https://www.npr.org/sections/alltechconsidered/2017/01/25/511641939/facebook-tweaks-its-trending-topics-algorithm-to-better-reflect-real-news\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          NPR\n        </a>\n      </blockquote>\n      <blockquote>\n        “It&apos;s <b>the algorithm</b>.” − \n        <a\n          href=\"https://www.rand.org/blog/2019/11/did-no-one-audit-the-apple-card-algorithm.html\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          RAND\n        </a>\n      </blockquote>\n      <blockquote>\n        “<b>As it learns</b>, some of its responses are inappropriate and\n        indicative of the types of interactions some people are having with it.”\n        − \n        <a\n          href=\"https://www.theverge.com/2016/3/24/11297050/tay-microsoft-chatbot-racist\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          The Verge\n        </a>\n      </blockquote>",
      "content_text": "An ebooks account in retrospect. • https://mknepprath.com/writing/ebooks",
      "summary": "An ebooks account in retrospect.",
      "image": "https://mknepprath.com/assets/ebooks.jpg",
      "date_published": "2020-12-20T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/bills-pc",
      "url": "https://mknepprath.com/writing/bills-pc",
      "title": "Pokémon Data Munging",
      "content_html": "<img src=\"https://mknepprath.com/assets/bills-pc.jpg\" alt=\"Colored lines.\" />\n      <header>\n        <h1>Pokémon Data Munging</h1>\n      </header>\n      <p>\n        Tonight, I thought it&apos;d be fun to detail out a choice I made while\n        building <Link href=\"/writing/lily-dex\">lily dex</Link> that I had very\n        little confidence in, but has been serving me well thus far.\n      </p>\n      <h2>The Problem</h2>\n      <p>\n        Early iterations of lily dex included the full list of Pokémon \n        <em>in the app code</em>, therefore requiring an app update every single\n        time a new Pokémon was added to Pokémon Go. I&apos;d have to open Xcode,\n        update the app, push the update, wait for Apple&apos;s approval... and\n        then players would have to manually update or wait for the automatic\n        update to get the change.\n      </p>\n      <p>Every. Single. Time.</p>\n      <p>\n        This was the first thing that had to change once I decided lily dex was\n        destined for The App Store.\n      </p>\n      <p>\n        At this point, I was about three months into a SwiftUI course and had\n        very limited experience with fetching and working with data in Swift.\n        The API I wanted to use (PoGo API) would require a ton of this - it\n        returned data as large objects and I wanted arrays.\n      </p>\n      <pre>\n        <code class=\"language-js\">\n          \n// PoGo API:\n{\n    \"1\": id\": \"1\",\n        \"name\": \"Bulbasaur,\n    \"2\": id\": \"2\",\n        \"name\": \"Ivysaur,\n}\n\n// What I wanted:\n[\n    id\": \"1\",\n        \"name\": \"Bulbasaur,\n    id\": \"2\",\n        \"name\": \"Ivysaur,\n]\n\n            \n        </code>\n      </pre>\n      <p>\n        I also wanted to add additional details for each Pokémon from other PoGo\n        API endpoints. This would require a lot of data transformation and\n        coercion - far beyond what I&apos;d learned during my Swift course at\n        that point.\n      </p>\n      <h2>The Solution: An API Route</h2>\n      <p>\n        So, on one side, I had an API with a bunch of endpoints returning data I\n        wanted to transform and merge. On the other, I had an app that needed to\n        receive nicely-formatted data.\n      </p>\n      <p>\n        Could I create a passthrough endpoint that consumed the PoGo API and\n        returned the data in the structure I wanted?\n      </p>\n      <p>\n        The framework my personal site is built on offers a feature called \n        <a\n          href=\"https://nextjs.org/learn/basics/api-routes\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          API routes\n        </a>\n        , which lets you create API endpoints as a Node.js serverless functions.\n        This seemed like a good candidate for what I was trying to accomplish -\n        I created a new API route called \n        <a\n          href=\"https://github.com/mknepprath/mknepprath-next/blob/master/pages/api/v1/released-pokemon.ts\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          released-pokemon.ts\n        </a> \n        where I started making calls to the PoGo API. I then transformed nearly\n        all the responses and returned them as an array containing all the\n        details I wanted in my app.\n      </p>\n      {pokemon ? (\n        <>\n          <p>Here&apos;s some data from this new endpoint:</p>\n          <blockquote>\n             is a \n            -type Pokémon.\n            \n            {pokemon.candyRequired\n              ? ` You need to collect $ candy to evolve $ into $.`\n              : null}\n            <button\n              onClick=\n            >\n              Refresh\n            </button>\n          </blockquote>\n        </>\n      ) : null}\n      <p>\n        As things currently stand, lily dex calls this endpoint, which calls the\n        PoGo API. I&apos;m not sure sending all the data through my personal\n        site makes sense... I could set up a lambda anywhere and accomplish the\n        same thing. I could do all this data wrangling in the app. I feel\n        insecure about these things.\n      </p>\n      <p>\n        But this architecture works. I was able to set it up fast, and it gives\n        me the flexibility to make API changes without having to muck with Xcode\n        or App Store Connect. This has come in handy more than once!\n      </p>\n      <p>\n        How would you handle this? Were my concerns that led me to building this\n        Rube Goldbergian architecture overblown? \n        <a\n          href=\"https://twitter.com/mknepprath\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          Let me know!\n        </a>\n      </p>",
      "content_text": "Using API routes to clean up data. • https://mknepprath.com/writing/bills-pc",
      "summary": "Using API routes to clean up data.",
      "image": "https://mknepprath.com/assets/bills-pc.jpg",
      "date_published": "2020-12-04T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/lily-dex",
      "url": "https://mknepprath.com/writing/lily-dex",
      "title": "lily dex",
      "content_html": "<img src=\"https://mknepprath.com/assets/lily-dex-hero.jpg\" alt=\"lily dex artwork\" />\n\n      <header>\n        <h1>lily dex</h1>\n      </header>\n      <p>\n        Despite being a lifelong fan of Pokémon, I hadn&apos;t played any of the\n        games since FireRed... that is, until the release of Pokémon Go in 2016.\n        My family had a ton of fun hunting around downtown running into other\n        families excitedly playing the game - it was an amazing and novel\n        experience no app or game has been able to replicate since.\n      </p>\n      <p>\n        Last year, we moved to Ohio, and Go has continued to be a fun way to\n        stay connected with family and friends.\n      </p>\n      <p>\n        One of the primary goals of the Pokémon franchise is completing your\n        Pokédex by \n        <a\n          href=\"https://www.youtube.com/watch?v=MpaHR-V_R-o\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          catching &apos;em all\n        </a>\n        , and Go is no different. For a while, I maintained a \n        <a\n          href=\"https://www.notion.so/product\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          Notion\n        </a> \n        document with a list of Pokémon I was missing along with an icon hinting\n        at how to catch them. It was a bit of a pain to keep it updated,\n        however. It was a manual process and frequently became outdated. I\n        decided to turn this project into my first serious iOS app - maybe I\n        could help others while automating this for myself!\n      </p>\n      <p>My two guiding principles while building this app were:</p>\n      <ol>\n        <li>\n          <b>It must be entirely dedicated to Pokémon Go.</b> There are A LOT of\n          Pokédexes in the App Store, most of which are more general-purpose and\n          not focused on any particular game. Since I specifically want to know\n          which Pokémon I&apos;m missing in Go, this is not useful.\n        </li>\n        <li>\n          <b>It must be simple.</b> The only number I care about is the total\n          number of unique Pokémon I&apos;ve caught. For those who want to track\n          more than this, like shiny Pokémon, regional variants, or costumed\n          Pokémon, there \n          <a\n            href=\"https://goranger.app\"\n            rel=\"noopener noreferrer\"\n            target=\"_blank\"\n          >\n            are existing apps\n          </a>\n          . This principle affects both content and interactivity: marking a\n          Pokémon as caught is (and will always be) a one-tap action.\n        </li>\n      </ol>\n      <p>\n        I started working on the app towards the end of July in parallel with \n        <a\n          href=\"https://www.hackingwithswift.com/100/swiftui\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          100 Days of SwiftUI\n        </a>\n        . Once I&apos;d replicated my Notion document as an app, I started\n        adding new features: integration with \n        <a href=\"https://pogoapi.net\" rel=\"noopener noreferrer\" target=\"_blank\">\n          The PoGo API\n        </a> \n        to keep the Pokémon list up-to-date, a widget for displaying your dex\n        total on your home screen, sorting options, current raid bosses, and\n        more.\n      </p>\n      <img src=\"https://mknepprath.com/assets/lily-dex-2.jpg\" alt=\"lily dex iOS widget\" />\n      <p>\n        If you search &ldquo;Pokédex&rdquo; in the App Store, you&apos;ll see a\n        lot of sameness - most apps try to replicate the look of the Pokédex\n        device you see in the show and games. To stand out a bit, I went with\n        &ldquo;lily dex&rdquo; and leaned into \n        <a\n          href=\"https://bulbapedia.bulbagarden.net/wiki/Lotad_(Pokémon)\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          Lotad\n        </a> \n        as a design motif. Amazingly, my App Store reviewer recognized my \n        <a\n          href=\"https://twitter.com/mknepprath/status/1287432554585489408\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          original icon\n        </a> \n        for what it was, and I had to modify it to make it a bit more generic.\n      </p>\n      <p>\n        I&apos;m proud of the fact that this app is already at a place where\n        it&apos;s useful for me. It&apos;s also the first app I&apos;ve built\n        that has been approved by Apple and published to the App Store! 🥳\n        Thanks to \n        <a\n          href=\"https://twitter.com/victorkernes\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          Victor Kernes\n        </a> \n        and \n        <a\n          href=\"https://twitter.com/lmeilner\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          Luke!\n        </a> \n        for your feedback during development. I already have a long list of\n        improvements and feature ideas for the future.\n      </p>\n      <p>\n        If you play Pokémon Go and this sounds useful to you, check it out in\n        the <a href=\"https://lilydex.com\">App Store</a>!\n      </p>\n      <img src=\"https://mknepprath.com/assets/lily-dex-1.jpg\" alt=\"lily dex in the App Store\" />",
      "content_text": "A simple Pokédex for Pokémon Go • https://mknepprath.com/writing/lily-dex",
      "summary": "A simple Pokédex for Pokémon Go",
      "image": "https://mknepprath.com/assets/lily-dex-hero.jpg",
      "date_published": "2020-11-01T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/2020-mid-year-review",
      "url": "https://mknepprath.com/writing/2020-mid-year-review",
      "title": "The 2020 Mid-Year Review",
      "content_html": "<header>\n        <h1>The 2020 Mid-Year Review</h1>\n      </header>\n      <p>\n        <em>\n          <b>Phew.</b>\n        </em>\n      </p>\n      <p>What a year.</p>\n      <p>\n        I promised progress reports, so here&#8217;s report #2 (the first one\n        being \n        <a\n          href=\"https://twitter.com/mknepprath/status/1234112661039861760\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          a tweet\n        </a> \n        posted on \n        <a\n          href=\"https://www.nytimes.com/2020/02/29/opinion/sunday/corona-virus-usa.html\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          March 1st\n        </a>\n        ). \n      </p>\n\n      <h2>Read 10 books (7/10)</h2>\n      <p>\n        I&#8217;m doing well in this category, although it&#8217;s padded a bit\n        with a couple of graphic novels I read to my son. I&#8217;m on track to\n        read ten books excluding those, so I&#8217;m feeling okay about that.\n      </p>\n      <a\n        href=\"https://twitter.com/mknepprath/status/1205328489408319488\"\n        target=\"_blank\"\n        rel=\"noopener noreferrer\"\n      >\n        <img src=\"https://mknepprath.com/assets/2020-mid-year-2.jpg\" alt=\"A photo of Design as Art.\" />\n      </a>\n      <ol>\n        <li>\n          <b>Snow Crash</b> by Neal Stephenson\n        </li>\n        <li>\n          <b>Code</b> by Charles Petzold\n        </li>\n        <li>\n          <b>One Flew Over the Cuckoo&#8217;s Nest</b> by Ken Kesey\n        </li>\n        <li>\n          <b>1984</b> by George Orwell\n        </li>\n        <li>\n          <b>Over The Garden Wall, Vol. 1</b> by Jim Campbell\n        </li>\n        <li>\n          <b>Over The Garden Wall, Vol. 2</b> by Jim Campbell\n        </li>\n        <li>\n          <b>\n            Creative Selection: Inside Apple&#8217;s Design Process During the\n            Golden Age of Steve Jobs\n          </b> \n          by Ken Kocienda\n        </li>\n      </ol>\n      <p>\n        I&#8217;m currently reading <b>The Shape of Design</b> by Frank Chimero.\n        The books I have queued up for the rest of the year are \n        <b>So You Want to Talk About Race</b> by Ijeoma Oluo, <b>Zed</b> by\n        Joanna Kavenna, and <b>Black Skin, White Masks</b> by Frantz Fanon.\n      </p>\n      <a\n        href=\"https://twitter.com/mknepprath/status/1252679361918107650\"\n        target=\"_blank\"\n        rel=\"noopener noreferrer\"\n      >\n        <img src=\"https://mknepprath.com/assets/2020-mid-year-3.jpg\" alt=\"A photo of The Shape of Design.\" />\n      </a>\n\n      <h2>Write 10 blog posts (7/10)</h2>\n      <p>\n        I&apos;ve been writing more this year than ever, and some of these posts\n        represent a significant chunk of work, for instance, \n        <Link href=\"/writing/culturally-irrelevant\">\n          Building a Culturally Irrelevant Recommendation Board\n        </Link> \n        was the follow-up to a month-long React project. I&#8217;m very happy\n        with how these are turning out. \n        <a\n          href=\"https://twitter.com/brian_lovin/status/1211391250324164608\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          Brian Lovin says\n        </a> \n        this post doesn&apos;t count towards my goal, so 3 more to go!\n      </p>\n      <ol>\n        <li>\n          <Link href=\"/writing/rss\">Adding RSS to My Next.js Website</Link>\n        </li>\n        <li>\n          <Link href=\"/writing/sorry-to-bother-you\">Twitter Defeated Me</Link>\n        </li>\n        <li>\n          <Link href=\"/writing/babys-first-codemod\">\n            The Codemod Side Quest\n          </Link>\n        </li>\n        <li>\n          <Link href=\"/writing/apple-made-me-do-it\">Home Screen Hack</Link>\n        </li>\n        <li>\n          <Link href=\"/writing/making-a-minecraft-status-page\">\n            Making a Minecraft Server Status Page\n          </Link>\n        </li>\n        <li>\n          <Link href=\"/writing/culturally-irrelevant\">\n            Building a Culturally Irrelevant Recommendation Board\n          </Link>\n        </li>\n        <li>\n          <Link href=\"/writing/life-art-nostalgia\">Life, Art, Nostalgia</Link>\n        </li>\n      </ol>\n\n      <h2>Release the next chapter of lilt</h2>\n      <p>\n        I created some additional areas to explore in \n        <a\n          href=\"https://twitter.com/familiarlilt\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          @familiarlilt\n        </a>\n        , but have not gotten started on the proposed admin interface that I\n        mentioned in my <Link href=\"/writing/2019\">2019 in Review</Link> post.\n        I&#8217;m not sure I will, either. I&#8217;m content with the work I did\n        on it, and have \n        <a\n          href=\"https://tinymystery.club/\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          other projects I want to expand on\n        </a>\n        .\n      </p>\n\n      <h2>Complete 3 online courses (0/3)</h2>\n      <p>\n        I made progress on Kent C. Dodds&#8217; \n        <a\n          href=\"https://testingjavascript.com/\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          Testing JavaScript\n        </a> \n        course, but have not yet completed it. I&#8217;m currently looking into\n        some SwiftUI courses due to the recent updates announced at WWDC. I\n        wanna make more apps!\n      </p>\n\n      <h2 id=\"draw-illustrate-animate\">Draw, illustrate, animate!</h2>\n      <p>\n        I&apos;m proud to say I&#8217;ve been making this goal happen! First, I\n        have a \n        <a\n          href=\"https://twitter.com/mknepprath/status/1239240208769482754\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          Twitter thread\n        </a> \n        of drawings. I like &#8217;em.\n      </p>\n      <a\n        href=\"https://twitter.com/mknepprath/status/1242471151634440192\"\n        target=\"_blank\"\n        rel=\"noopener noreferrer\"\n      >\n        <img src=\"https://mknepprath.com/assets/2020-mid-year-1.jpg\" alt=\"A car drawing.\" />\n      </a>\n      <p>\n        Additionally, I created more \n        <a\n          href=\"https://twitter.com/mknepprath/status/1278016717277540352\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          pixel art\n        </a> \n        for a game I&apos;m working on.\n      </p>\n      <p>\n        And finally, my son and I created two movies so far this year. The first\n        was \n        <a\n          href=\"https://youtu.be/5-CEGCXDVgI\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          a stop-motion LEGO Minecraft movie\n        </a>\n        , and the second, a Mister Rogers-like episode starring him called \n        <a\n          href=\"https://www.youtube.com/watch?v=H46rZESY8UA\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          Mr. Owen\n        </a>\n        .\n      </p>\n      <img src=\"https://mknepprath.com/assets/2020-mid-year-4.png\" alt=\"A still from Mr. Owen.\" />\n\n      <p>\n        And that&apos;s it! It&apos;s been good to have these distractions in\n        the time of COVID-19. At this rate, I expect that I will be completing\n        all of my goals by the end of the year.\n      </p>\n\n      <p>Until next time! 👋</p>",
      "content_text": "A mid-year check-in to see how I'm doing on my goals. • https://mknepprath.com/writing/2020-mid-year-review",
      "summary": "A mid-year check-in to see how I'm doing on my goals.",
      "image": "https://mknepprath.com/assets/2020-mid-year-1.jpg",
      "date_published": "2020-06-30T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/life-art-nostalgia",
      "url": "https://mknepprath.com/writing/life-art-nostalgia",
      "title": "Life, Art, Nostalgia",
      "content_html": "<div ref= style={} />\n      {centerpoint && (\n        <PxBrush\n          colors=\n          coordinates=\n          increment=\n          length=\n          style={{\n            borderBottom: `$px solid var(--black)`,\n            borderLeft: `$px solid var(--black)`,\n          }}\n        />\n      )}\n\n      <header>\n        <h1>Life, Art, Nostalgia</h1>\n      </header>\n      <p>\n        While panning for gold amongst all of my earthly belongings during a\n        move last year, I found a notebook full of handwritten BASIC code.\n      </p>\n      <p>\n        This transported me back to memories of myself in high school\n        programming on my TI-83. While I had forgotten my rudimentary\n        programming methods, I do remember seeing classmates sharing cool\n        calculator games they&apos;d found with each other, searching the\n        Internet to download some to play myself, and eventually feeling brave\n        enough to try to create my own.\n      </p>\n      <p>\n        Most of the programs I wrote were variants of \n        <a\n          href=\"http://www.menet.umn.edu/~dockt036/snake.html\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          Snake\n        </a>\n        . Some were playable, but my favorite was a randomized line-drawer that\n        would move up, down, left, or right, and leave a trail behind it. I\n        enjoyed tweaking the values and seeing how interesting the new output\n        would be.\n      </p>\n      <p>\n        I took a few programming classes after this, the last one being during\n        my freshman year of college. I never really felt like I “got it” and\n        ended up barely passing with a D-. I didn&apos;t touch capital-P\n        Programming for a decade.\n      </p>\n      <div ref= style={} />\n      {centerpoint2 && (\n        <PxBrush\n          colors=\n          coordinates=\n          increment=\n          length=\n        />\n      )}\n      <p>\n        I spent the rest of my college years focused on design, art, film,\n        motion graphics, animation... And I did eventually make my way back\n        around during my career; graphic design → web design → frontend\n        development → JavaScript/React, Python, etc. I&apos;m grateful for all\n        of it.\n      </p>\n      <p>\n        Over the past few days, I&apos;ve been playing with that old randomized\n        drawing idea, but in React. There are a few in this blog post - \n        <a style={} onClick=>\n          scroll back up\n        </a> \n        to see the progress!\n      </p>\n      <p>\n        I also created a page dedicated to this project with a couple of\n        properties you can configure using query strings:\n      </p>\n      <ul>\n        <li>\n          <Link href=\"/pxbrush\">Default</Link>\n        </li>\n      </ul>\n      <img src=\"https://mknepprath.com/assets/pxbrush-1.png\" alt=\"Pixel brush example 1\" />\n      <ul>\n        <li>\n          <Link href=\"/pxbrush?scale=16\">Scale: 16</Link>\n        </li>\n      </ul>\n      <img src=\"https://mknepprath.com/assets/pxbrush-2.png\" alt=\"Pixel brush example 2\" />\n      <ul>\n        <li>\n          <Link href=\"/pxbrush?scale=32&quantity=8\">\n            Scale: 32, Quantity: 8\n          </Link>\n        </li>\n      </ul>\n      <img src=\"https://mknepprath.com/assets/pxbrush-3.png\" alt=\"Pixel brush example 3\" />\n      <ul>\n        <li>\n          <Link href=\"/pxbrush?scale=16&quantity=16\">\n            Scale: 16, Quantity: 16\n          </Link>\n        </li>\n      </ul>\n      <img src=\"https://mknepprath.com/assets/pxbrush-4.png\" alt=\"Pixel brush example 4\" />\n\n      <p>\n        If you see any cool randomized drawings, please share a screenshot with\n        me on \n        <a\n          href=\"https://mastodon.social/@mknepprath\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          Mastodon\n        </a>\n        . I&apos;d love to see them. Thanks for reading! 👋\n      </p>\n\n      <div ref= style={} />\n      {centerpoint3 && (\n        <PxBrush\n          class=\n          colors=\n          coordinates=\n          increment=\n          length=\n        />\n      )}",
      "content_text": "Recreating a project from my high school years. • https://mknepprath.com/writing/life-art-nostalgia",
      "summary": "Recreating a project from my high school years.",
      "image": "https://mknepprath.com/assets/pxbrush.png",
      "date_published": "2020-06-25T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/culturally-irrelevant",
      "url": "https://mknepprath.com/writing/culturally-irrelevant",
      "title": "Building a Culturally Irrelevant Recommendation Board",
      "content_html": "<img src=\"https://mknepprath.com/assets/culturally-irrelevant-1.jpg\" alt=\"The hosts of Culturally Irrelevant.\" />\n\n      <header>\n        <h1>Building a Culturally Irrelevant Recommendation Board</h1>\n      </header>\n      <p>\n        For a few years, I was the honorary producer and infrequent guest of a\n        podcast called Culturally Irrelevant. In it, four friends each picked a\n        movie, video game, book... anything overlooked by pop culture at large\n        to share and discuss.\n      </p>\n      <blockquote>\n        <p>\n          <b>\n            <a\n              href=\"https://twitter.com/NerdAtWar\"\n              rel=\"noopener noreferrer\"\n              target=\"_blank\"\n            >\n              Tyler Driscoll\n            </a>\n          </b>\n          <br />\n          Born in the cold of Michigan and shown Star Wars by his father; Tyler\n          developed into a full-blown nerd. Star Wars, Marvel, and cinema\n          galore. I&apos;m Tyler.\n        </p>\n        <p>\n          <b>\n            <a\n              href=\"https://twitter.com/benlundsten\"\n              rel=\"noopener noreferrer\"\n              target=\"_blank\"\n            >\n              Ben Lundsten\n            </a>\n          </b>\n          <br />A father of two future superheroes and a victim of male pattern\n          baldness. His specialties are Halo 1 and films you&apos;ve never heard\n          of.\n        </p>\n        <p>\n          <b>\n            <a\n              href=\"https://twitter.com/JoshWWhat\"\n              rel=\"noopener noreferrer\"\n              target=\"_blank\"\n            >\n              Josh Wierschke\n            </a>\n          </b>\n          <br />\n          Your friendly neighborhood Josh has been reading comics since before\n          he could… well, read. But this nerd won&apos;t be put in a box.\n        </p>\n        <p>\n          <b>\n            <a\n              href=\"http://thirstycatcollection.blogspot.com/\"\n              rel=\"noopener noreferrer\"\n              target=\"_blank\"\n            >\n              Dane Christenson\n            </a>\n          </b>\n          <br />\n          An unapologetic Sega fanboy from WI who always roots for the underdog,\n          making him the most irrelevant of the bunch. P.S. Stanley Kubrick.\n        </p>\n        <p>: Excerpts taken from the old Culturally Irrelevant website.</p>\n      </blockquote>\n      <p>\n        Tyler, Ben, Josh, Dane and myself were friends since college and bonded\n        over our love for film, theater, and media in general. The podcast was a\n        way for us to continue those conversations that were harder to come by\n        now that we were out of school.\n      </p>\n      <blockquote>\n        <p>\n          <b>Ben:</b> &ldquo;This is the point of the whole show. We&apos;re\n          trying to draw things out of ambiguity. And it&apos;s going to be\n          anything, it might be video games. Hey, we&apos;re going to bring a\n          video game to the table! Tyler&apos;s got one and on the level of\n          ambiguity, it&apos;s, you know, you&apos;ve heard of it. But you might\n          not have played it. And there&apos;s some that Dane will bring and\n          it&apos;s going to be from the depths of like...&rdquo;\n        </p>\n        <p>\n          <b>Dane:</b> &ldquo;Oh, you have no idea. You have no idea what\n          I&apos;ve got to bring.&rdquo;\n        </p>\n        <p>\n          <em>: Episode #1 - I Gotta Go Back To Wisconsin (March 6, 2015)</em>\n        </p>\n      </blockquote>\n      <p>\n        The podcast ended its run after 42 episodes and 166+ recommendations on\n        December 6, 2018. Not long after, the domain expired, and the podcast\n        was lost to the internet.\n      </p>\n      <p>\n        On a personal note, I will be revisiting Culturally Irrelevant for the\n        rest of my life. It was a joy to listen to and there are dozens of\n        recommendations that I still plan on checking out. Last week, I put on \n        <a\n          href=\"https://www.imdb.com/title/tt8006786/?ref_=nv_sr_srsg_0\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          Big Dreams, Small Spaces\n        </a>\n        , a British gardening show recommended by Ben in episode 41. I&apos;d\n        never watched it before, but I found it fun and relaxing. If not for the\n        podcast, I never would have heard of it, let alone watched it.\n      </p>\n      <p>\n        Beyond the recommendations, it was a thrill to listen to the hosts cheer\n        each other on when they brought interesting and exciting topics or rib\n        each other about which of their topics was the most relevant.\n      </p>\n      <p>\n        The hosts poured their hearts and souls into this show, even going so\n        far as to chat the creators of some of the things they brought including\n        an hour-long interview with the \n        <a\n          href=\"http://www.georgiaraefamilyband.com/\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          Georgia Rae Family Band\n        </a>\n        . This podcast was special.\n      </p>\n      <p>In April of 2020, Dane died in a car accident.</p>\n      <p>\n        While the podcast was a relatively minor achievement in his life, it was\n        one of my favorite projects of his. It showcased many of his favorite\n        things. He talked about film, books and video games. He talked about\n        family and faith.\n      </p>\n      <p>I decided that, at least for myself, I had to preserve the podcast.</p>\n\n      <h2 id=\"preserving-the-podcast\">Preserving the Podcast</h2>\n      <p>\n        After discussing it with the hosts, it became clear to me that I could\n        do more than republish the episodes. The goal of the podcast was to\n        shine a light on media most had missed. Instead of having that end with\n        the podcast, I thought it&apos;d be cool to expand its scope by creating\n        a website where anyone can submit their own overlooked recommendations.\n      </p>\n      <p>\n        I simultaneously relistened to the entire podcast, collected audio clips\n        (one for each recommendation, plus more), and built the website.\n      </p>\n      <img src=\"https://mknepprath.com/assets/culturally-irrelevant-2.png\" alt=\"Podcast recommendations in Airtable.\" />\n      <p>\n        I used \n        <a\n          href=\"https://marco.org/2019/04/27/overcast-clip-sharing\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          Overcast&apos;s clip sharing feature\n        </a> \n        to collect over 400 clips and uploaded them all to \n        <a\n          href=\"https://airtable.com/\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          Airtable\n        </a>\n        . I was then able to use \n        <a href=\"https://swr.now.sh/\" rel=\"noopener noreferrer\" target=\"_blank\">\n          Vercel&apos;s SWR data fetching library\n        </a> \n        to pull all of that data into the website.\n      </p>\n      <pre class=\"language-js\">\n        <code>\n          \nimport useSWR from \"swr\";\nimport fetch from \"isomorphic-unfetch\";\n\nfunction fetcher(...args) \n\nexport default function Home() {\n  const  = useSWR(\n    \"/api/recommendations\",\n    fetcher\n  );\n  ...\n          \n        </code>\n      </pre>\n\n      <h2 id=\"the-recommendation-board\">The Recommendation Board</h2>\n      <p>\n        Big things have small beginnings. The website started as a simple list\n        of recommendations laid out with \n        <a\n          href=\"https://css-tricks.com/snippets/css/complete-guide-grid/\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          CSS grid\n        </a>\n        .\n      </p>\n      <img src=\"https://mknepprath.com/assets/culturally-irrelevant-3.png\" alt=\"The first iteration of the Culturally Irrelevant website that includes the tagline: For learning, teaching, sharing and remembering.\" />\n      <p>\n        While the tagline above is not in the current iteration of the website,\n        I still appreciate the idea behind it. My thinking was that each word\n        would represent each host of the show.\n      </p>\n      <blockquote>\n        <p>\n          <em>\n            <b>Tyler:</b> &ldquo;What do you want from this podcast, and what\n            are you putting into it, and what are you expecting from it?&rdquo;\n          </em>\n        </p>\n        <p>\n          <b>Josh:</b> &ldquo;It&apos;s less of me trying to bestow knowledge\n          upon the masses. I want this to be a learning experience for me, too.\n          I want to hear about stuff I&apos;ve never heard of from you guys, and\n          I hope that our 3+ listeners feel the same way. That&apos;s it for me.\n          I want to broaden my horizons more than I&apos;ve done already.&rdquo;\n        </p>\n        <p>\n          <b>Dane:</b> &ldquo;Well, I guess for me, I&apos;ve always been\n          someone to root for the underdog. Perfect example, I grew up a Sega\n          fanboy. I&apos;ve always naturally been drawn to the lesser-known\n          things that aren&apos;t quite as popular. I feel that, yes, this is me\n          bestowing my intelligence that I&apos;ve gained of these different\n          things. To me, it&apos;s about spreading that, because I feel that\n          these things deserve attention.&rdquo;\n        </p>\n        <p>\n          <b>Ben:</b> &ldquo;For me, the real catalyst moments are when I find a\n          film I would&apos;ve never heard of, when someone in passing who has\n          weird taste is like &apos;dude, watch this.&apos; Hopefully, I can\n          turn one person on to something that they&apos;ve never heard of. It\n          just opens a portal for people, and that&apos;s what I want this to\n          be. I want it to be a portal that you can take down to a whole new\n          world of holy-crap-awesomeness.&rdquo;\n        </p>\n        <p>\n          <b>Tyler:</b> &ldquo;I mean, this is an idea I&apos;ve had for many\n          different things, like a podcast with Dane before, or doing a blog.\n          What pushed me into being nerdy about stuff was, really, my dad\n          sitting me down with these movies that he loved. To me, this has been\n          a lifelong experience. This has been something that&apos;s been\n          building since I was a little kid. For me, this is an expression of\n          who I am as a human being. I&apos;m excited.&rdquo;\n        </p>\n        <p>\n          <em>: Episode #1 - I Gotta Go Back To Wisconsin (March 6, 2015)</em>\n        </p>\n      </blockquote>\n\n      <h3 id=\"styling-the-board\">Styling the Board</h3>\n      <p>\n        One issue became immediately obvious, that being the inability to tell\n        the difference between recommendations made on the podcast and\n        visitor-submitted ones. I quickly iterated on the styles, adding color\n        to try to distinguish between them. I wanted to make it bold and fun,\n        true to the podcast.\n      </p>\n      <img src=\"https://mknepprath.com/assets/culturally-irrelevant-4.png\" alt=\"The Culturally Irrelevant website with styles.\" />\n      <p>\n        I used transforms and shadows to replicate the podcast logo on hover.\n      </p>\n      <img src=\"https://mknepprath.com/assets/culturally-irrelevant-5.png\" alt=\"Card with audio element.\" />\n\n      <h3 id=\"audio-clips\">Audio Clips</h3>\n      <p>\n        I was excited to discover that embedding the Overcast audio clips\n        I&apos;d created would be fairly simple. Airtable returns a bunch of\n        useful data for each uploaded file:\n      </p>\n      <pre class=\"language-js\">\n        <code>\n          \nid\": \"att1j2FFkw015fbJU\",\n  \"url\": \"https://dl.airtable.com/.attachments/c53490a528e644d4ff56962415a3ecc6/7d856aca/tyler-driscoll-grim-fandango.mp3\",\n  \"filename\": \"tyler-driscoll-grim-fandango.mp3\",\n  \"size\": 455726,\n  \"type\": \"audio/mpeg\n          \n        </code>\n      </pre>\n      <p>\n        I placed that URL in an <code class=\"language-html\">audio</code> \n        element, and that was that.\n      </p>\n\n      <h3 id=\"submitting-recommendations\">Submitting Recommendations</h3>\n      <p>\n        Next up, I needed to set up a way for visitors to submit their\n        recommendations. I created an \n        <a\n          href=\"https://github.com/mknepprath/culturally-irrelevant/blob/master/pages/api/recommendation.js\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          API route for posting to Airtable\n        </a> \n        and hooked it up to a \n        <a\n          href=\"https://jaredpalmer.com/formik/\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          Formik\n        </a> \n        form that I placed in a \n        <a\n          href=\"https://reacttraining.com/reach-ui/dialog/\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          Reach UI dialog\n        </a>\n        . I don&apos;t typically lean so heavily on libraries, but I was moving\n        fast and these got the job done.\n      </p>\n      <video class=\"blog-video\" controls>\n        <source src=\"/assets/culturally-irrelevant-6.mp4\" type=\"video/mp4\" />\n        Sorry, your browser doesn&apos;t support embedded videos.\n      </video>\n\n      <h3 id=\"dark-mode\">Dark Mode</h3>\n      <p>\n        I felt obligated to add dark mode to this site, and I didn&apos;t want\n        it to be an afterthought. Suffice it to say, I didn&apos;t simply invert\n        some colors.\n      </p>\n      <p>\n        I also made sure to respect visitors&apos; system-level settings. If\n        your phone or computer is set to dark mode, the website will follow\n        suit.\n      </p>\n      <video class=\"blog-video\" controls>\n        <source src=\"/assets/culturally-irrelevant-7.mp4\" type=\"video/mp4\" />\n        Sorry, your browser doesn&apos;t support embedded videos.\n      </video>\n\n      <h3 id=\"lazy-loading\">Lazy Loading</h3>\n      <p>\n        Initially, I was displaying all of the recommendations on page load. It\n        wasn&apos;t <em>that</em> bad until I had all of the audio clips\n        uploaded, at which point I was making visitors immediately download over\n        a hundred audio clips.\n      </p>\n      <p>\n        My first thought was that I should paginate Airtable&apos;s response -\n        that is, fetch a limited amount until explicitly asked to fetch more. It\n        took me a while to realize that this solution was unnecessarily\n        complicated. Airtable&apos;s response wasn&apos;t that large - the issue\n        occurred when the website would read the audio URLs and load them all in\n        at once. Instead of limited the data I was getting, I could instead\n        limit how much of that data I was displaying on the page.\n      </p>\n      <p>\n        I now display 16 recommendations on page load, then add 32 more each\n        time a visitor clicks the new Load More button.\n      </p>\n      <img src=\"https://mknepprath.com/assets/culturally-irrelevant-8.png\" alt=\"The Load More button.\" />\n\n      <h3 id=\"loading-indicators\">Loading Indicators</h3>\n      <p>\n        The podcast had a lot of fun tangents and in-jokes, including a\n        long-running thread about carrier pigeons and another about Dane&apos;s\n        love for LaserDisc. I added loading indicators that referenced these - a\n        random one is displayed each time.\n      </p>\n      <video class=\"blog-video bordered-image\" controls>\n        <source src=\"/assets/culturally-irrelevant-9.mp4\" type=\"video/mp4\" />\n        Sorry, your browser doesn&apos;t support embedded videos.\n      </video>\n\n      <h3 id=\"search\">Search</h3>\n      <p>\n        The last major feature I added was a search bar. This felt magical, as\n        it had never been this easy to see all of the podcast recommendations\n        from a specific year or medium.\n      </p>\n      <p>\n        The \n        <a\n          href=\"https://github.com/mknepprath/culturally-irrelevant/blob/master/libs/filter.js\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          filter function\n        </a> \n        I wrote to do this is not magic - but I had a lot of fun writing it.\n      </p>\n      <img src=\"https://mknepprath.com/assets/culturally-irrelevant-10.png\" alt=\"The search bar.\" />\n\n      <h2 id=\"thats-not-all\">And That&apos;s Not All</h2>\n      <p>\n        Please visit the website for the full experience, including features\n        like \n        <a\n          href=\"https://culturallyirrelevant.com/mixtape\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          The Irrelevant Mixtape\n        </a> \n        - a randomized &ldquo;Best Of&rdquo; playlist that includes\n        recommendations and other fun bits. If you have a lesser-known movie,\n        video game, comic book, television show, book, board game, artist,\n        podcast, miniseries, band, etc, that you&apos;d like to share, visit \n        <a\n          href=\"https://culturallyirrelevant.com\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          Culturally Irrelevant\n        </a> \n        and do so!\n      </p>\n      <blockquote>\n        <p>\n          <b>Dane:</b> &ldquo;It seems like some things you either fall into,\n          you just slowly realize you love it the more and more you get into it,\n          whereas in other things there&apos;s one key thing where it&apos;s\n          like &apos;I saw this movie&apos; or &apos;I listened to this\n          record&apos; or whatever it may be &apos;and from that point on my\n          life was changed.&apos; I also had one of those moments and it was\n          actually around the time I was in high school. For me, it was 2001: A\n          Space Odyssey that completely switched me over.&rdquo;\n        </p>\n        <p>\n          <em>: Episode #5 - Musical Interludes (June 5, 2015)</em>\n        </p>\n      </blockquote>\n      <img src=\"https://mknepprath.com/assets/culturally-irrelevant-11.jpg\" alt=\"A Culturally Irrelevant mug.\" />",
      "content_text": "The podcast is over, but the legacy continues. • https://mknepprath.com/writing/culturally-irrelevant",
      "summary": "The podcast is over, but the legacy continues.",
      "image": "https://mknepprath.com/assets/culturally-irrelevant-11.jpg",
      "date_published": "2020-06-10T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/making-a-minecraft-status-page",
      "url": "https://mknepprath.com/writing/making-a-minecraft-status-page",
      "title": "Making a Minecraft Server Status Page",
      "content_html": "<img src=\"https://mknepprath.com/assets/dynoland-1.jpg\" alt=\"A render of a Minecraft castle.\" />\n      <header>\n        <h1>Making a Minecraft Server Status Page</h1>\n      </header>\n      <p>\n        I&apos;ve been running a Minecraft server for years. For a while, I\n        relied on a Facebook Group with some static information in the\n        description for players to reference, like the server address - but then\n        I deactivated my Facebook account and this information needed a new\n        home.\n      </p>\n      <p>\n        Instead of creating another static page, I thought it&apos;d be fun to\n        set up a new dynamic page with live data about my server. Vercel&apos;s\n        Next.js makes this easy by providing a method for fetching data\n        server-side called \n        <code class=\"language-html\">getInitialProps</code>! Note: This\n        method has been deprecated in favor of \n        <code class=\"language-html\">getStaticProps</code>. I set this page\n        up before that was introduced, however.\n      </p>\n      <img src=\"https://mknepprath.com/assets/dynoland-2.jpg\" alt=\"A render of a Minecraft battle arena.\" />\n      <p>\n        First, I tracked down an API service I could use. After a few dead ends,\n        I landed on <a href=\"https://mcapi.us/\">mcapi</a>. They provide a\n        JavaScript library that returns a bunch of stats, including the server\n        name, artwork, and number of players currently online. Using the\n        previously mentioned \n        <code class=\"language-html\">getInitialProps</code>, I&apos;m able to\n        pass all these stats as props to my page with just four lines of code:\n      </p>\n      <pre>\n        <code class=\"language-js\">\n          \nMinecraftStatusPage.getInitialProps = async function () {\n  const res = await fetch(\"https://mcapi.us/server/status?ip=dynoland.space\");\n  const data = await res.json();\n  return ;\n};\n              \n        </code>\n      </pre>\n      <p>\n        I have a custom domain for my server, \n        <a href=\"http://dynoland.space/\">dynoland.space</a>, so I&apos;m able to\n        pass that in as the IP address to request the data.\n      </p>\n      <img src=\"https://mknepprath.com/assets/dynoland-3.jpg\" alt=\"A render of a Minecraft castle.\" />\n      <p>\n        I like the idea of mixing live data with natural language. It&apos;s\n        relatively easy to dump a bunch of stats into a table and call it a day,\n        but I wanted this status page to be more welcoming than that - so I\n        outlined a page similarly to how I&apos;d write a blog post, then\n        layered in the server stats. For example, instead of displaying my\n        current server version like this:\n      </p>\n      <table style={}>\n        <thead>\n          <tr>\n            <th>Server Version</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td>1.15.2</td>\n          </tr>\n        </tbody>\n      </table>\n      <p>I wrote a full paragraph with some additional context:</p>\n      <blockquote>\n        We&apos;re running version 1.15.2 of Minecraft, so you will need to\n        ensure your client matches. Follow the directions on the \n        <a href=\"https://help.mojang.com/customer/portal/articles/1475923-changing-game-versions\">\n          Changing game versions\n        </a> \n        support page if it doesn&apos;t.\n      </blockquote>\n      <img src=\"https://mknepprath.com/assets/dynoland-4.jpg\" alt=\"A render of a Minecraft castle.\" />\n      <p>\n        Another example - if my server is online, I don&apos;t display that in\n        any way. It&apos;s implicit. If my server is offline, however, the title\n        of the page updates to say &ldquo;Dynoland Is Offline&rdquo;, and an\n        additional paragraph is displayed:\n      </p>\n      <blockquote>\n        If you were planning on playing right now, message me and I will look\n        into it as soon as I&apos;m available.\n      </blockquote>\n      <p>\n        The last detail I&apos;ll mention is the button that players can click\n        to quickly copy the server address to their clipboard. Why not save a\n        few steps!\n      </p>\n      <p>\n        Check out the <Link href=\"/dynoland\">final status page here</Link>, and \n        <a href=\"mailto:mknepprath@gmail.com\">let me know</a> if you&apos;d like\n        to join!\n      </p>",
      "content_text": "Creating a simple page for displaying Minecraft server stats in Next.js. • https://mknepprath.com/writing/making-a-minecraft-status-page",
      "summary": "Creating a simple page for displaying Minecraft server stats in Next.js.",
      "image": "https://mknepprath.com/assets/dynoland-1.jpg",
      "date_published": "2020-06-02T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/apple-made-me-do-it",
      "url": "https://mknepprath.com/writing/apple-made-me-do-it",
      "title": "Home Screen Hack",
      "content_html": "<img src=\"https://mknepprath.com/assets/home-screen-1.png\" alt=\"iOS home screen\" />\n\n      <header>\n        <h1>Home Screen Hack</h1>\n      </header>\n\n      <p>\n        This is my iPhone home screen. Yes, my icons are bottom-aligned. No,\n        this isn&apos;t a native feature of iOS. For quite some time, I had been\n        relying on a website called \n        <a href=\"https://iempty.tooliphone.net/\">iEmpty</a> to generate empty\n        home screen icons.\n      </p>\n      <blockquote>\n        [Using iEmpty,] you can add blank icons on your iOS home screen, and set\n        your application icons where you want on the iPhone screen, hacking the\n        limitation set by Apple on icons positions on the iOS devices screens.\n      </blockquote>\n      <p>\n        iEmpty achieves this by using iOS&apos;s ability to save websites to\n        your home screen with custom icons. iEmpty dynamically generates web\n        pages with Apple icons that match your wallpaper, making them appear\n        invisible.\n      </p>\n      <p>\n        There were a couple downsides to using this service. First, I was\n        reliant on a 3rd-party website that didn&apos;t fully trust. Second,\n        they hosted images ephemerally, so if I were to tap on one of the empty\n        icons, it would open the iEmpty website and update the icon with\n        iEmpty&apos;s logo. I&apos;d have to go through the whole process of\n        creating the icon again to replace the broken one. \n      </p>\n      <p>\n        To fix this, I decided it was time to host these icons myself. My\n        website is currently built with \n        <a href=\"https://nextjs.org/\">Next.js</a>, so I was very quickly able to\n        throw together a \n        <a href=\"https://nextjs.org/docs/routing/dynamic-routes\">\n          dynamic route\n        </a> \n        that generates pages for each icon I needed. I called that route \n        <a href=\"https://github.com/mknepprath/mknepprath-next/blob/master/pages/icon/%5Bdim%5D.js\">\n          [dim].js\n        </a>\n        , and here is the entirety of the code:\n      </p>\n      <pre>\n        <code class=\"language-js\">\n          \nimport NextHead from \"next/head\";\nimport  from 'next/router'\n\nexport default () => {\n  const router = useRouter()\n  const  = router.query\n  return <>\n    <NextHead>\n      \n      <title> ‍ </title>\n      \n      <link rel=\"apple-touch-icon\" sizes=\"57x57\" href={\\`/assets/icon/\\$.png\\></link>\n    </NextHead>\n  </>\n}\n              `}\n        </code>\n      </pre>\n      <p>\n        For my purposes here, I did use the assets generated by iEmpty. Down the\n        road, it would be nice to create a Figma or Sketch file that\n        automatically handles all the correct cropping, etc.\n      </p>\n      <p>\n        Once this was done, I opened \n        <a href=\"http://mknepprath.com/icon/1x1\">each</a> \n        <a href=\"http://mknepprath.com/icon/1x2\">icon</a> \n        <a href=\"http://mknepprath.com/icon/1x3\">page</a> and saved them to my\n        home screen.\n      </p>\n      <p>\n        That&apos;s it! Same result, except I&apos;m no longer using iEmpty\n        beyond creating the initial assets. 🎉\n      </p>",
      "content_text": "How I customized my iOS home screen. • https://mknepprath.com/writing/apple-made-me-do-it",
      "summary": "How I customized my iOS home screen.",
      "image": "https://mknepprath.com/assets/home-screen-1.png",
      "date_published": "2020-05-07T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/babys-first-codemod",
      "url": "https://mknepprath.com/writing/babys-first-codemod",
      "title": "The Codemod Side Quest",
      "content_html": "<header>\n        <h1>The Codemod Side Quest</h1>\n      </header>\n      <p>\n        In my post from a couple months ago, \n        <a href=\"/writing/rss\">Adding RSS to My Next.js Website</a>, I mentioned\n        a minor side quest: building a codemod and executing it on all of my\n        existing blog posts. An excerpt from that post:\n      </p>\n      <blockquote>\n        <p>\n          Codemods are scripts that automate code changes when you need to make\n          the same change to a large number of files. If you&apos;re familiar\n          with batch-processing in Photoshop, this is similar, except a codemod\n          is for code.\n        </p>\n      </blockquote>\n      <p>\n        In order to build an RSS feed, all of my posts needed to include a new\n        object containing each posts metadata (title, summary, published status,\n        etc). While I could have updated each post manually, I am a Real\n        Developer, and Real Developers do things The Needlessly Difficult Way. \n        <a href=\"https://en.wikipedia.org/wiki/Irony_punctuation#Other_typography\">\n          /s\n        </a>\n      </p>\n      <p>\n        Actually, writing a codemod seemed like a fun challenge. It was hyped at\n        the most recent \n        <a href=\"https://youtu.be/T0AY0ea45dM?t=1365\">React Conf</a> as an\n        invaluable tool at Facebook, and I liked the idea of using code to\n        modify code.\n      </p>\n      <p>\n        Luckily, I had already been structuring my blog posts in a consistent\n        way, making a batch edit feasible. Here&apos;s an example post,\n        pre-codemod.\n      </p>\n      <pre>\n        <code class=\"language-js\">\n          \nimport BlogPage from \"@core/blog-page\";\n\nexport default () => (\n  return <BlogPage\n    dateTime=\"2020-03-21\"\n    description=\"A description of the post.\"\n    ogImage=\"/assets/image.jpg\"\n    title=\"The Post Title\"\n  >\n    <header>\n      <h1>The Post Title</h1>\n    </header>\n    <p>\n      The content of the post.\n    </p>\n  </BlogPage>\n);\n              \n        </code>\n      </pre>\n      <p>\n        My posts didn&apos;t include the aforementioned metadata object, but all\n        of that data <em>was</em> there as props. Here&apos;s how I wanted my\n        posts to look post-codemod:\n      </p>\n      <pre>\n        <code class=\"language-js\">\n          \nimport BlogPage from \"@core/blog-page\";\n\nexport const meta: Meta = ;\n\nexport default () => (\n  return <BlogPage\n    dateTime=\n    description=A quick overview of my first experience with codemods.\n    ogImage=\n    title=The Codemod Side Quest\n  >\n    <header>\n      <h1>The Codemod Side Quest</h1>\n    </header>\n    <p>\n      The content of the post.\n    </p>\n  </BlogPage>\n);\n              \n        </code>\n      </pre>\n      <h2 id=\"getting-set-up\">Getting Set Up</h2>\n      <p>\n        I was able to get everything kicked off with \n        <a href=\"https://www.newline.co/fullstack-react/articles/using-jscodeshift-with-react-codemod-to-update-createclass-components-to-es6-classes/\">\n          this post\n        </a> \n        by <a href=\"https://twitter.com/accomazzo\">Anthony Accomazzo</a>. It\n        thoroughly covered how to install and and run jscodeshift - the command\n        line tool for running codemods. Exactly what I needed.\n      </p>\n      <p>\n        One of my favorite tips from this post was the <b>dry run</b> flag. By\n        including a <b>-d</b> (dry run) and <b>-p</b> (print) in my command, I\n        was able to preview what my codemod would do without modifying the files\n        themselves. \n      </p>\n      <p>\n        Next, I explored Facebook&apos;s library of codemods, \n        <a href=\"https://github.com/reactjs/react-codemod\">\n          reactjs/react-codemod\n        </a>\n        . I figured this would be the best place to pick up on good patterns to\n        use in my own codemod.\n      </p>\n      <p>\n        I also took a look at \n        <a href=\"https://astexplorer.net/\">AST Explorer</a>. It&apos;s a popular\n        tool that lets you paste in your code and codemod and quickly see the\n        result. I wasn&apos;t able to get it to work for my needs at the time,\n        however.\n      </p>\n      <p>\n        I ended up heavily referencing \n        <a href=\"https://skovy.dev/jscodeshift-custom-transform/\">\n          Creating a custom transform for jscodeshift\n        </a> \n        by <a href=\"https://twitter.com/spencerskovy\">Spencer Skovy</a>, another\n        very thorough how-to post.\n      </p>\n      <h2 id=\"writing-the-codemod\">Writing the Codemod</h2>\n      <p>\n        Go ahead and scroll up to view the pre- and post-codemod blog posts to\n        get a feel for the modifications I needed to make. Here they are:\n      </p>\n      <p>\n        <ul>\n          <li>\n            Get all of the metadata from the props on \n            <code class=\"language-html\">BlogPage</code>.\n          </li>\n          <li>Update the h1 heading so that it pulls from the metadata.</li>\n          <li>Update the props so that they pull from the metadata.</li>\n          <li>Create the metadata object.</li>\n          <li>Add the metadata object after the last import.</li>\n        </ul>\n      </p>\n      <p>\n        Here&apos;s the resulting codemod with comments describing how each of\n        these tasks was accomplished. I also published this codemod as \n        <a href=\"https://gist.github.com/mknepprath/be919a308f37315030f4607244afef42\">\n          a gist\n        </a> \n        if you&apos;d like to leave feedback.\n      </p>\n      <pre>\n        <code class=\"language-js\">\n          \nconst transform = (file, api) => {\n  const j = api.jscodeshift;\n  const root = j(file.source);\n\n  // Creates a map of properties. For instance, the \\`dateTime\\` prop becomes the\n  // \\`publishedAt\\` metadata property.\n  const blogPageProps = [\n    ,\n    ,\n    ,\n    \n  ];\n\n  // Not all blog posts include all of the possible props - I collected them for\n  // each post in this array.\n  const metaProps = [];\n\n  // Updates the h1 heading so that it pulls from the metadata.\n  root\n    .findJSXElements(\"h1\")\n    .replaceWith(() => );\n\n  const blogPage = root\n    .findJSXElements(\"BlogPage\");\n\n  // This looks through each possible prop.\n  blogPageProps.forEach(prop => {\n    blogPage\n      .find(j.JSXAttribute, {\n        name: ,\n        value: \n      })\n      .find(j.Literal)\n      .replaceWith(nodePath => {\n        const  = nodePath;\n        // The data for this prop is added to the metaProps array and replaced\n        // with a reference to the metadata object, such as \\`meta.publishedAt\\`.\n        metaProps.push();\n        return j.jsxExpressionContainer(j.identifier(\\`meta.\\$\\`));\n      });\n  });\n\n  // This converts the collected metadata to an array of strings. These become\n  // lines of code in the post, such as \\`publishedAt: \"2019-12-12\"\\`. A bit\n  // janky, but it works.\n  const metaPropsStrings = metaProps.map(\n    prop => \\`\\n  \\$: \"\\$\"\\`\n  );\n\n  // The last import in the example above is\n  // \\`import BlogPage from \"@core/blog-page\";\\`. This adds the metadata object\n  // below that import.\n  const LAST_IMPORT = root.find(j.ImportDeclaration).at(-1);\n  LAST_IMPORT.insertAfter(\\`export const meta: Meta = {\\$\n};\\`);\n\n  return root.toSource();\n};\n\nexport default transform;\n          \n        </code>\n      </pre>\n      <p>\n        Note: I did forget to include one thing. This codemod doesn&apos;t add a \n        <code class=\"language-html\">published</code> property, so I ended up\n        doing a bit of cleanup after the fact.\n      </p>\n      <h2 id=\"codemod-complete\">Codemod Complete!</h2>\n      <p>\n        Frequent writers of codemods won&apos;t be impressed with this code, but\n        it accomplished what I was seeking to do - and I&apos;m happy with that.\n        Feel free to bother me on \n        <a href=\"https://twitter.com/mknepprath\">Twitter</a> if you have\n        thoughts, I&apos;d love to hear them.\n      </p>\n      <p>Thanks for reading! 👋</p>",
      "content_text": "A quick overview of my first experience with codemods. • https://mknepprath.com/writing/babys-first-codemod",
      "summary": "A quick overview of my first experience with codemods.",
      "date_published": "2020-03-21T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/sorry-to-bother-you",
      "url": "https://mknepprath.com/writing/sorry-to-bother-you",
      "title": "Twitter Defeated Me",
      "content_html": "<img src=\"https://mknepprath.com/assets/twitter-likes-illustration-1.jpg\" alt=\"Likes header illustration\" />\n      <header>\n        <h1>Twitter Defeated Me</h1>\n      </header>\n      <p>\n        Earlier this month, you may have seen \n        <a href=\"https://twitter.com/kmlefranc/status/1221869659139366912\">\n          this thread on Twitter\n        </a> \n        describing a company deploying dystopian tactics (a.k.a. \n        <a href=\"https://www.youtube.com/watch?v=ARJ8cAGm6JE\">\n          an ill-conceived algorithm\n        </a>\n        ) to compile a background check out of this person&apos;s liked tweets.\n      </p>\n      <p>\n        This got me thinking. What purpose do my Twitter likes serve? Do I need\n        them?\n      </p>\n      <p>...Could I delete them all?</p>\n      <h2 id=\"the-purpose-of-twitter-likes\">The Purpose of Twitter Likes</h2>\n      <p>\n        First, some history. Pre-2015, Twitter likes were called \n        <a href=\"https://www.theverge.com/2015/11/3/9661180/twitter-vine-favorite-fav-likes-hearts\">\n          favorites\n        </a> \n        and were denoted by a ⭐️, not a ❤️. They were initially meant to serve\n        as a way to bookmark tweets (now \n        <a href=\"https://techcrunch.com/2018/02/28/twitter-launches-bookmarks-a-private-way-to-save-tweets/\">\n          re-added\n        </a> \n        as a separate \n        <a href=\"https://twitter.com/mknepprath/status/1200461462671708161\">\n          half-baked\n        </a> \n        <a href=\"https://twitter.com/mknepprath/status/1220007534578339840\">\n          feature\n        </a>\n        ). Since then, Twitter realized likes \n        <a href=\"https://twitter.com/round/status/1161312657846296577\">\n          yield far more engagement\n        </a> \n        than favorites and switched. Twitter likes are not bookmarks. It would\n        be \n        <a href=\"https://twitter.com/cattheless/status/1220006748548947969\">\n          difficult to use them that way\n        </a> \n        even if one wanted to.\n      </p>\n      <p>\n        Today, Twitter likes are simply that. A quick way to say, &ldquo;I like\n        this tweet.&rdquo; A social exchange:ephemeral in nature, but\n        permanently recorded and published publicly by Twitter.\n      </p>\n      <p>\n        Why? Perhaps the public list of likes is a vestigial feature, leftover\n        from when likes were favorites were bookmarks. Regardless, given a\n        relatively short period of time, a like is something neither I nor its\n        recipient will reference or care about. I&apos;ve reached around 66,000\n        likes, none of which are meaningful beyond the most recent hundred or\n        so.\n      </p>\n      <h2 id=\"so-do-i-need-em\">So Do I Need &apos;Em?</h2>\n      <p>Nah.</p>\n      <img src=\"https://mknepprath.com/assets/twitter-likes-illustration-2.jpg\" alt=\"Broken like\" />\n      <p>\n        At least not this many. In my ideal Twitter world, likes last long\n        enough to convey appreciation, then disappear once they&apos;ve served\n        their purpose. To reach this ideal world, I&apos;d need to write a\n        script that loops through all of my liked tweets and unlikes any beyond\n        the most recent hundred or so.\n      </p>\n      <h2 id=\"can-i-delete-em\">Can I Delete &apos;Em?</h2>\n      <p>\n        Short answer, it&apos;s possible - but brutal. I am currently at war\n        with Twitter.\n      </p>\n      <p>\n        First, I gained access to the Twitter API by repeatedly emailing them\n        until they gave it to me.\n      </p>\n      <p>Then I started hitting roadblocks.</p>\n      <p>\n        I wrote a Python script that began unliking all of my liked tweets, and\n        it worked beautifully. Until it didn&apos;t. After a bit of research, I\n        discovered \n        <a href=\"https://www.wired.com/story/tweets-ephemeral-likes-forever/\">\n          this Wired piece\n        </a> \n        that described the exact roadblock I&apos;d run into, &ldquo;We&apos;ve\n        found that likes outside this 3,200 window can&apos;t be removed even if\n        we get details on them from another source.&rdquo; I had reached this\n        limit.\n      </p>\n      <p>\n        And this quote is only half of the story - it&apos;s missing the reason\n        likes can&apos;t be removed outside this window. The Twitter API does\n        not recognize likes beyond the most recent 3,200. Once all of the liked\n        tweets within this window are unliked, Twitter sends over an empty list.\n        No way around it. Old likes are 100% inaccessible through the API.\n      </p>\n      <img src=\"https://mknepprath.com/assets/twitter-likes-illustration-3.jpg\" alt=\"Likes window illustrated\" />\n      <p>\n        To unlike tweets outside of this window, I&apos;d need to find another\n        way.\n      </p>\n      <p>And therefore, two scripts would now be necessary:</p>\n      <ol>\n        <li>\n          One that deletes all of my likes outside the 3,200 window from now\n          until the beginning of time, a.k.a. 2008.\n        </li>\n        <li>\n          Another that continuously runs and deletes stale likes over time.\n        </li>\n      </ol>\n      <h3 id=\"delete-old-likes\">Delete Old Likes</h3>\n      <p>\n        I found a few 3rd-party apps that claim to offer the ability to delete\n        all likes, Circleboom being an example. Suffice it to say, \n        <a href=\"https://blog.circleboom.com/can-you-bulk-delete-twitter-likes-yes-in-just-2-steps/\">\n          this blog post of theirs is a lie\n        </a>\n        . Their app is unable to see likes beyond the 3,200 window.\n      </p>\n      <p>\n        After this, I made a shocking discovery. Twitter&apos;s own apps are\n        affected by this limit. Whether viewing my liked tweets through\n        Twitter&apos;s iOS app or website, likes outside of the 3,200 window\n        aren&apos;t displayed as having been liked - the heart icons are empty.\n      </p>\n      <img src=\"https://mknepprath.com/assets/twitter-likes-6.png\" alt=\"Likes displayed as unliked\" />\n      <p>\n        Additionally, Twitter offers a JavaScript-free version of their site,\n        and this fails to display likes outside of the 3,200 window entirely. If\n        Twitter itself can&apos;t consistently access my Twitter likes, what\n        hope do I have?\n      </p>\n      <p>\n        One thing I noticed when interacting with the above UI - in order to\n        remove an old tweet from my likes, I&apos;d need to like it \n        <em>again</em> before unliking it.\n      </p>\n      <p>\n        This same pattern held true when interacting with likes through the\n        Twitter API. In order to remove one of these likes through the API,\n        I&apos;d need to simulate this like/unlike pattern.\n      </p>\n      <p>Which I did.</p>\n      <p>Here&apos;s a simplified snippet of that script...</p>\n      <pre>\n        <code class=\"language-python\">\n          \nfor likeId in likeIds:\n  twitter.like(likeId)\n  twitter.unlike(likeId)\n  print(\"Liked & unliked \" + likeId)\n          \n        </code>\n      </pre>\n      <p>...and the Terminal output when running it.</p>\n      <img src=\"https://mknepprath.com/assets/twitter-likes-1.png\" alt=\"Command line liked and unliked messages\" />\n      <p>\n        This, however, has an unfortunate side effect. Every like causes a\n        notification just like any other would despite these being tweets\n        I&apos;d already liked in the past.\n      </p>\n      <img src=\"https://mknepprath.com/assets/twitter-likes-2.png\" alt=\"Unwanted notifications #1\" />\n      <hr />\n      <img src=\"https://mknepprath.com/assets/twitter-likes-3.png\" alt=\"Unwanted notifications #2\" />\n      <hr />\n      <img src=\"https://mknepprath.com/assets/twitter-likes-4.png\" alt=\"Unwanted notifications #3\" />\n      <hr />\n      <img src=\"https://mknepprath.com/assets/twitter-likes-5.png\" alt=\"Unwanted notifications #4\" />\n      <p>\n        And herein lies the dilemma. I <em>can</em> accomplish my goal. But it\n        will spam the tweeps I&apos;ve liked the most.\n      </p>\n      <p>A cruel irony indeed.</p>\n      <p>\n        Do I follow through? At this point, it seems unlikely. I&apos;m only ~6%\n        done. With \n        <a href=\"https://developer.twitter.com/en/docs/basics/rate-limits\">\n          rate limiting\n        </a>\n        , this would likely be a months-long process. Ugh.\n      </p>\n      <img src=\"https://mknepprath.com/assets/twitter-likes-7.png\" alt=\"I Defeated Twitter (Not)\" />\n      <h3 id=\"delete-stale-likes\">Delete Stale Likes</h3>\n      <p>It&apos;s not all bad.</p>\n      <p>\n        The goal of my second script is to delete likes as soon as they become\n        useless. Therefore, this script only deals with recent likes that exist\n        within the 3,200 window. No problem!\n      </p>\n      <img src=\"https://mknepprath.com/assets/twitter-likes-illustration-4.jpg\" alt=\"Sweeping up likes\" />\n      <p>Here&apos;s a snippet of this new script:</p>\n      <pre>\n        <code class=\"language-python\">\n          \nfor i, like in enumerate(likes):\n  if i >= 10:\n    twitter.unlike(like.id)\n          \n        </code>\n      </pre>\n      <p>\n        It boils down to this: It loops through all of my liked tweets (within\n        the window) and unlikes any beyond the first 10. I initially had this\n        script running every 30 minutes but have decreased the frequency to once\n        per day. It&apos;s now a nightly cleanup routine.\n      </p>\n      <p>Another neat feature:</p>\n      <pre>\n        <code class=\"language-python\">\n          \ntwitter.dm_self(\"Unliking \" + str(len(likes)) + \" tweets ✌️\")\n          \n        </code>\n      </pre>\n      <p>\n        The script self-reports how many likes it&apos;s cleaning up when it\n        runs! This is what I see in my DMs on Twitter.\n      </p>\n      <img src=\"https://mknepprath.com/assets/twitter-likes-8.png\" alt=\"Unlike logs as direct messages\" />\n      <h2 id=\"now-what\">Now What?</h2>\n      <p>\n        The dream of deleting all of my Twitter likes may be dead, but I did\n        manage to remove all of them through October 2019 and am down to 61.4K\n        likes. And that number won&apos;t be growing - all new likes are being\n        scrubbed daily thanks to an AWS Lambda function.\n      </p>\n      <p>\n        If you&apos;d like to try it yourself, \n        <a href=\"https://gist.github.com/mknepprath/e7cdafd078efffc5a27683a5017386e5\">\n          here&apos;s a gist\n        </a> \n        that contains a simplified version of that function. Feel free to post\n        any questions or comments there.\n      </p>\n      <p>Thanks for reading! 👋</p>\n      <img src=\"https://mknepprath.com/assets/twitter-likes-illustration-5.jpg\" alt=\"Farewell image\" />",
      "content_text": "I tried to delete my Twitter Likes. Twitter didn&apos;t like that. • https://mknepprath.com/writing/sorry-to-bother-you",
      "summary": "I tried to delete my Twitter Likes. Twitter didn&apos;t like that.",
      "image": "https://mknepprath.com/assets/twitter-likes-illustration-1.jpg",
      "date_published": "2020-02-20T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/rss",
      "url": "https://mknepprath.com/writing/rss",
      "title": "Adding RSS to My Next.js Website",
      "content_html": "<img src=\"https://mknepprath.com/assets/adding-rss.jpg\" alt=\"A big shiny subscribe button.\" />\n      <header>\n        <h1>Adding RSS to My Next.js Website</h1>\n      </header>\n      <p>\n        Last week, I was riding high thanks to \n        <a href=\"https://twitter.com/chriscoyier/status/1214555767115862016\">\n          this tweet\n        </a> \n        mentioning how many personal websites don&apos;t include their\n        owner&apos;s name. Then Chris posted \n        <a href=\"https://twitter.com/chriscoyier/status/1214606808125341696\">\n          this tweet\n        </a> \n        highlighting the long list of RSS feeds he was subscribed to and my\n        world came crashing down. I had a GitHub issue for adding a feed to this\n        website, but hadn&apos;t prioritized it yet. This tweet launched it to\n        the top of my list.\n      </p>\n      <p>\n        Since my blog on this site was \n        <a href=\"https://github.com/mknepprath/mknepprath-next/pull/10\">\n          custom built\n        </a>\n        , there wasn&apos;t a plug-and-play solution out there for me - I had to\n        write my own.\n      </p>\n      <h2 id=\"the-solution\">The Solution</h2>\n      <p>\n        After a bunch of googling, I landed on Juan Olvera&apos;s blog post, \n        <a href=\"https://jolvera.dev/posts/rebuilding-my-blog-with-nextjs\">\n          Rebuilding my blog with Next.js\n        </a>\n        , which included details about how he added an RSS feed to his blog. I\n        decided to follow the same pattern he used, &ldquo;An npm script runs a\n        Node function that generates the feed.&rdquo; Once set up, I&apos;d be\n        able to run <code class=\"language-html\">npm run build:rss</code> \n        from the command line to generate my RSS \n        <code class=\"language-html\">feed.json</code> file - which RSS reader\n        apps would parse to load my posts.\n      </p>\n      <p>\n        Juan&apos;s Node function relies upon each post having a separate,\n        exported <code class=\"language-html\">meta</code> object that looks\n        similar to this:\n      </p>\n      <pre>\n        <code class=\"language-js\">\n          \nexport const meta: Meta = ;\n              \n        </code>\n      </pre>\n      <p>\n        None of my posts had this object. They <em>did</em> include all of this\n        information as props, but after converting a few, I quickly realized I\n        didn&apos;t want to repeat this process 60+ times. It was time to write\n        my first <a href=\"https://github.com/facebook/codemod\">codemod</a>.\n      </p>\n      <h3 id=\"codemods\">Codemods</h3>\n      <p>\n        Codemods are scripts that automate code changes when you need to make\n        the same change to a large number of files. If you&apos;re familiar with\n        batch-processing in Photoshop, this is similar, except a codemod is for\n        code.\n      </p>\n      <p>\n        My codemod needed to take the information I was passing as props and\n        move them to the <code class=\"language-html\">meta</code> object.\n        This was all new to me, but I was able to construct a codemod that\n        accomplished this. I published the final version as \n        <a href=\"https://gist.github.com/mknepprath/be919a308f37315030f4607244afef42\">\n          a gist\n        </a>\n        , feel free to leave a comment! It&apos;s not perfect, but it got the\n        job done. I plan on writing a separate post detailing out the process of\n        writing this since it was a bit of a side quest.\n      </p>\n      <p>\n        Once I added a simplified version of the \n        <code class=\"language-html\">build:rss</code> script, and all my\n        posts had their metadata extracted out into \n        <code class=\"language-html\">meta</code> objects, I could generate my\n        feed.\n      </p>\n      <h2 id=\"validating-the-feed\">Validating the Feed</h2>\n      <p>\n        <a href=\"https://zeit.co/now\">Zeit Now</a> was indispensable for\n        validating my feed. Now can integrate with GitHub and create a deploy\n        with a \n        <a href=\"https://sebastiandedeyne.com/design-details-incremental-correctness-with-guillermo-rauch/\">\n          unique link for every change committed\n        </a> \n        to my website. I was able to copy the link for each change I made into\n        the official \n        <a href=\"https://validator.jsonfeed.org/?url=mknepprath-next-git-add-rss.mknepprath.now.sh%2Ffeed.json\">\n          JSON Feed Validator\n        </a> \n        to see what errors I needed to handle. Not only that, I was even able to\n        use these links in <em>real</em> RSS readers to see how my feed would\n        look in its final form before shipping it.\n      </p>\n      <h2 id=\"generating-my-blog-list\">Generating My Blog List</h2>\n      <p>\n        Up until this point, I was maintaining a JSON list of blog posts that \n        <a href=\"/writing\">Writing</a> and my homepage were importing. That\n        seemed silly at this point. I was already generating an RSS feed file,\n        why not this one? I created a \n        <a href=\"https://github.com/mknepprath/mknepprath-next/blob/1daf3618649349ca5c0da22e1723ce14e50e460a/data/post-feed.js\">\n          separate Node script\n        </a> \n        to generate this list, as well.\n      </p>\n      <h2 id=\"future-work\">Future Work</h2>\n      <p>\n        My website now has an RSS feed! If you \n        <a href=\"http://mknepprath.com/feed.json\">subscribe to it</a>, however,\n        you will notice you still have to click through to see the full post.\n        This is because the feed solely uses the previously mentioned \n        <code class=\"language-html\">meta</code> objects, which don&apos;t\n        contain the full contents of my posts. I&apos;m still thinking about how\n        to solve this. If you have any ideas, dear reader, \n        <a href=\"https://twitter.com/mknepprath\">let me know</a>.\n      </p>\n      <p>\n        One additional issue is that I have to run the RSS feed and post list\n        scripts before publishing new posts - it isn&apos;t automatic. I&apos;m\n        considering using a <a href=\"https://githooks.com/\">Git hook</a> to help\n        with this, but I don&apos;t consider it a permanent solution.\n      </p>\n      <p>\n        Is a blog a really a blog if it doesn&apos;t have an RSS feed? I\n        don&apos;t know, but now mine does! Yay!\n      </p>",
      "content_text": "Examining the bumps along the road as I worked to add an RSS feed to my website. • https://mknepprath.com/writing/rss",
      "summary": "Examining the bumps along the road as I worked to add an RSS feed to my website.",
      "image": "https://mknepprath.com/assets/adding-rss.jpg",
      "date_published": "2020-01-15T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/2019",
      "url": "https://mknepprath.com/writing/2019",
      "title": "2019 in Review",
      "content_html": "<header>\n        <h1>2019 in Review</h1>\n      </header>\n      <p>\n        I didn&apos;t officially record or publish any goals for 2019, so these\n        are based on memory and hindsight - which means I accomplished most of\n        them. Yay!\n      </p>\n      <img src=\"https://mknepprath.com/assets/2019-in-review-1.png\" alt=\"Top 9 Instagram photos from 2019 (1-3).\" />\n      <h2>2019 Goals</h2>\n      <h3>Get a new job ✅</h3>\n      <p>\n        This was a goal that had rolled over from 2018. With my wife starting\n        medical school soon (a.k.a. this year), I was hoping to find a more\n        remote-friendly company. I wanted to be free to easily move to wherever\n        her school of choice would be. In February, I landed an interview at\n        Walmart Labs and got a position on my first fully-remote team. I&apos;m\n        less than a year in and enjoying it!\n      </p>\n      <h3>Read books ✅</h3>\n      <p>\n        I&apos;ve been having a hard time reading books since college despite\n        being an avid reader growing up. Notable books I read this year:\n      </p>\n      <ul>\n        <li>\n          <a href=\"https://www.goodreads.com/book/show/37976541-bad-blood\">\n            Bad Blood\n          </a> \n          by John Carreyrou\n        </li>\n        <li>\n          <a href=\"https://www.goodreads.com/book/show/44573628-super-pumped\">\n            Super Pumped\n          </a> \n          by Mike Isaac\n        </li>\n        <li>\n          <a href=\"https://www.goodreads.com/book/show/840.The_Design_of_Everyday_Things\">\n            The Design of Everyday Things\n          </a> \n          by Don Norman\n        </li>\n        <li>\n          <a href=\"https://www.goodreads.com/book/show/6095883-design-as-art\">\n            Design as Art\n          </a> \n          by Bruno Munari\n        </li> \n      </ul>\n      <p>\n        I&apos;ve been averaging less than 10 books a year, which is... not\n        great. But I&apos;m glad it&apos;s not nothing.\n      </p>\n      <h3>Blog ✅</h3>\n      <p>\n        My website included a link to Medium in lieu of a blog from ~2015 until\n        recently. \n        <a href=\"https://github.com/mknepprath/mknepprath-next/pull/10/files\">\n          That changed this year\n        </a> \n        for a few reasons. First, developing a blog from scratch seemed like a\n        fun project. Second, Medium had become pretty aggressive with paywalls,\n        etc, and I wanted to feel like I had ownership over my writing again.\n        Finally, I hoped that doing this work would motivate me to do more\n        writing - my Medium profile had become stagnant. This appears to be have\n        been successful, since I didn&apos;t write any posts last year and wrote\n        5 this year:\n      </p>\n      <ul>\n        <li>\n          <a href=\"/writing/create-a-website\">\n            Create a Simple Website with GitHub Pages\n          </a>\n        </li>\n        <li>\n          <a href=\"/writing/breathe\">Code Should Breathe</a>\n        </li>\n        <li>\n          <a href=\"/writing/design-process\">Thoughts on Design Process</a>\n        </li>\n        <li>\n          <a href=\"/writing/sequential-art\">Sequential Art™</a>\n        </li>\n        <li>2019 in Review (this post)</li>\n      </ul>\n      <p>\n        Bonus: I hunted down old posts from previous iterations of my website\n        using the Wayback Machine and <a href=\"/writing\">included them here</a> \n        as well.\n      </p>\n      <h3>Quit Facebook 🟡</h3>\n      <p>\n        While I didn&apos;t use Facebook all year, I still have an account.\n        It&apos;s currently deactivated, but I can&apos;t consider this a\n        success until it&apos;s gone... permanently.\n      </p>\n      <h3>Develop an iOS app 🔴</h3>\n      <p>\n        I had hoped to complete an iOS app I&apos;d started working on in 2018\n        for tracking movies. I learned a lot, but it ended up being a bigger\n        undertaking than I&apos;d anticipated and I was no longer able to\n        dedicate the time required to push it out. I released a working,\n        unpolished beta to TestFlight, but that&apos;s as far as it got.\n      </p>\n      <h3>Illustrate ✅</h3>\n      <p>\n        I have an art/graphic design college degree, which means I feel\n        unfulfilled if I don&apos;t illustrate <em>something</em> each year.\n        This year I illustrated a few moths and posted them to \n        <a href=\"https://dribbble.com/mknepprath\">Dribbble</a>.\n      </p>\n      <img src=\"https://mknepprath.com/assets/2019-in-review-2.png\" alt=\"Top 9 Instagram photos from 2019 (4-6).\" />\n      <h2>Cool Things</h2>\n      <h3>Travel</h3>\n      <p>\n        On top of starting a new job, moving to a new state, and changing nearly\n        everything else in our lives, I also traveled more than ever before.\n        According to <a href=\"https://www.flightyapp.com/\">Flighty</a>, I flew\n        the equivalent of .9x around the earth this year alone.\n      </p>\n      <img src=\"https://mknepprath.com/assets/2019-in-review-flights.jpg\" alt=\"2019 in Flighty\" />\n      <p>Some highlights:</p>\n      <ul>\n        <li>January, Imaging USA with White House Custom Colour</li>\n        <li>March, Disneyland with my family</li>\n        <li>April, Walmart Labs meetup in Carlsbad, CA</li>\n        <li>September, another Walmart Labs meetup in SLC</li>\n        <li>October, React Conf</li>\n      </ul>\n      <h3>Attended a local meetup</h3>\n      <p>\n        This wasn&apos;t available where I lived in Minnesota. It&apos;s been\n        very cool to attend a React meetup in Cleveland with developers of\n        varying levels of experience. I&apos;ve met new friends and learned a\n        lot from the few I&apos;ve attended already. I look forward to\n        continuing this in 2020.\n      </p>\n      <h3>Twitter bots</h3>\n      <p>\n        I don&apos;t have much to show for it, but I worked on my Twitter bots\n        quite a bit. <a href=\"https://twitter.com/FamiliarLilt\">lilt</a> was\n        almost \n        <a href=\"https://github.com/mknepprath/lilt/commit/285034e77ef43505c119f6f459c87695eff51719\">\n          entirely rewritten\n        </a> \n        and the game itself has been expanded. I hope to do more before formally\n        announcing it, however.\n      </p>\n      <img src=\"https://mknepprath.com/assets/2019-in-review-3.png\" alt=\"Top 9 Instagram photos from 2019 (7-9).\" />\n      <h2>2020 Goals</h2>\n      <p>\n        For the first time ever, here&apos;s my list of what I&apos;d like to\n        accomplish during the next year.\n      </p>\n      <h3>Read 10 books</h3>\n      <p>\n        I&apos;ve been averaging less than 10 books per year. If I can make it\n        to 10, I&apos;ll be happy.\n      </p>\n      <h3>Write 10 blog posts</h3>\n      <p>\n        I added this blog to my website in August and averaged one post per\n        month. This should be achievable.\n      </p>\n      <h3>Release the next chapter of lilt</h3>\n      <p>\n        I have a couple goals for \n        <a href=\"https://twitter.com/familiarlilt\">lilt</a>. First, I hope to\n        develop a user interface to help manage moves, locations, and items in\n        the game (likely with React). Second, I want to introduce more areas to\n        explore. While the interface would be nice for me, it doesn&apos;t add\n        anything of interest for lilt&apos;s players. This is why I want to\n        focus on expanding the game first.\n      </p>\n      <h3>Complete 3 online courses</h3>\n      <p>\n        I&apos;ve purchased a bunch of online courses over the years that\n        I&apos;d like to finish. I hope to finish at least three of these during\n        2020:\n      </p>\n      <ul>\n        <li>\n          <a href=\"https://www.3dfordesigners.com/\">3D for Designers</a> by\n          Devon Ko\n        </li>\n        <li>\n          <a href=\"https://testingjavascript.com/\">Testing JavaScript</a> with\n          Kent C. Dodds\n        </li>\n        <li>5 courses on Udemy (Swift, React, Python, TensorFlow...)</li>\n      </ul>\n      <h3>Draw, illustrate, animate!</h3>\n      <p>\n        I want to draw some more comics, create some short animations, etc. I\n        don&apos;t care all that much about the format as long as I do some cool\n        visual work. I may even dabble in capital “A” Art again.\n      </p>\n      <h2>Tracking My Goals</h2>\n      <p>\n        I haven&apos;t decided how I&apos;d like to track all of this yet.\n        I&apos;m leaning towards posting a bimonthly update to my blog. That\n        would count towards my blogging goal, right??\n      </p>\n      <p>👋</p>",
      "content_text": "A look at my accomplishments during the past year. • https://mknepprath.com/writing/2019",
      "summary": "A look at my accomplishments during the past year.",
      "image": "https://mknepprath.com/assets/2019-in-review-1.png",
      "date_published": "2019-12-29T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/sequential-art",
      "url": "https://mknepprath.com/writing/sequential-art",
      "title": "Sequential Art™",
      "content_html": "<header>\n        <h1>Sequential Art™</h1>\n      </header>\n      <p>\n        Comics, both web and traditional, have been a fascination of mine for\n        some time. I wasn&apos;t brave enough to try my hand at creating them\n        until I made a discovery during \n        <a href=\"https://twitter.com/search?q=from%3A%40mknepprath%20%23inktober\">\n          #inktober\n        </a> \n        2017 - the best way to get over the fear of drawing is to use bold\n        drawing tools. I started with pencil, transitioned to pen, and\n        eventually cracked open a marker set. My resulting illustrations were as\n        brazen as the drawing tools I was using.\n      </p>\n      <img src=\"https://mknepprath.com/assets/comics-01.jpeg\" alt=\"A pumpkin illustration\" />\n      <p></p>\n      <img src=\"https://mknepprath.com/assets/comics-02.jpeg\" alt=\"A canoe illustration\" />\n      <p>\n        Last year, I decided to use this technique to draw some panels. I posted\n        my first comic as a reply to \n        <a href=\"https://twitter.com/JamesInks/status/1021770737877692422\">\n          @JamesInks\n        </a>\n        , a talented comic artist, as a gag. I believe I was planning on\n        replying to a bunch of tweets with comics, but I only ended up posting\n        two in this way.\n      </p>\n      <img src=\"https://mknepprath.com/assets/comics-03.jpeg\" alt=\"Make comics. Who has time for that!\" />\n      <p>\n        The second was in reply to \n        <a href=\"https://twitter.com/JamesInks/status/1023671020560035842\">\n          a tweet about pie\n        </a>\n        .\n      </p>\n      <img src=\"https://mknepprath.com/assets/comics-04.jpeg\" alt=\"I love pie!!!\" />\n      <p>\n        After this, I started \n        <a href=\"https://twitter.com/mknepprath/status/1024083111091597312\">\n          a thread\n        </a> \n        that now includes 19 short comics. This first one, \n        <b>Sequential Art™</b> was meant to be a light-hearted jab at the\n        self-seriousness of some comic artists.\n      </p>\n      <img src=\"https://mknepprath.com/assets/comics-05.jpeg\" alt=\"Sequential art\" />\n      <p>\n        I tried my hand at social commentary for my 4th comic, \n        <b>Sequential Stress™</b>. These panels ended up being featured in Owen\n        Williams&apos; (<a href=\"http://twitter.com/ow\">@ow</a>) article\n        entitled, &ldquo;\n        <a href=\"https://char.gd/blog/2019/mobile-notifications-are-broken-its-time-to-fix-them\">\n          Notifications are broken. It&apos;s time to fix them.\n        </a>\n        &rdquo;\n      </p>\n      <img src=\"https://mknepprath.com/assets/comics-06.jpeg\" alt=\"Sequential stress\" />\n      <p>\n        At this point, I was attempting to create at least one comic per day, so\n        the subject matter turned to trivial things I was dealing with. Like\n        bugs.\n      </p>\n      <img src=\"https://mknepprath.com/assets/comics-07.jpeg\" alt=\"Demon bug!!\" />\n      <p>And exercise.</p>\n      <img src=\"https://mknepprath.com/assets/comics-08.jpeg\" alt=\"Apple Watch activity rings\" />\n      <p>\n        There was a third panel here that turned out bad, so I cut it off. I\n        enjoyed this two-panel reaction shot enough to post it despite that.\n      </p>\n      <img src=\"https://mknepprath.com/assets/comics-09.jpeg\" alt=\"I will say nothing\" />\n      <p>\n        Most of my comics didn&apos;t warrant a title. Perhaps this one\n        didn&apos;t, either, but I decided to include it for some additional\n        context.\n      </p>\n      <img src=\"https://mknepprath.com/assets/comics-10.jpeg\" alt=\"Flat La Croix\" />\n      <p>My son and I take pictures of our silly faces sometimes.</p>\n      <img src=\"https://mknepprath.com/assets/comics-11.jpeg\" alt=\"Silly faces\" />\n      <p>\n        My hairstyle was in transition during this time. I did a few quick\n        studies to nail how I wanted to portray it on the page.\n      </p>\n      <img src=\"https://mknepprath.com/assets/comics-12.jpeg\" alt=\"Hair study\" />\n\n      <p>\n        While simple, this is the first one where I played with the perspective.\n        Perhaps a sequel is warranted, &ldquo;honk.&rdquo;\n      </p>\n      <img src=\"https://mknepprath.com/assets/comics-13.jpeg\" alt=\"Duck\" />\n\n      <p>\n        The goal of this study was to illustrate butterflies at various levels\n        of resolution in interesting ways. Note that they become hearts as they\n        fade into the distance.\n      </p>\n      <img src=\"https://mknepprath.com/assets/comics-14.jpeg\" alt=\"Butterflies\" />\n\n      <p>Again, hair transition issues.</p>\n      <img src=\"https://mknepprath.com/assets/comics-15.jpeg\" alt=\"Hair problems\" />\n\n      <p>\n        Here, I attempted to portray a simple thing in comic form that\n        couldn&apos;t happen in reality.\n      </p>\n      <img src=\"https://mknepprath.com/assets/comics-16.jpeg\" alt=\"Disappearing can\" />\n\n      <p>\n        Using line thickness and texture, I created a biopic about our RoboVac.\n      </p>\n      <img src=\"https://mknepprath.com/assets/comics-17.jpeg\" alt=\"Robot vacuum\" />\n      <p>\n        After a brief hiatus, I came back to comics with a fresh perspective on\n        my previous panels. I had become too careful, and it was time to loosen\n        up a bit. This cat comic could be seen as a more feral version of the\n        original &ldquo;MAKE COMICS&rdquo; strip.\n      </p>\n      <img src=\"https://mknepprath.com/assets/comics-18.jpeg\" alt=\"RAAWRRRRR\" />\n\n      <p>\n        These few comics were illustrated around Halloween 2018. I drew the\n        candy witch, a witch who trades a toy for candy.\n      </p>\n      <img src=\"https://mknepprath.com/assets/comics-19.jpeg\" alt=\"Candy witch\" />\n\n      <p>I also found the idea of an angsty pumpkin hilarious.</p>\n      <img src=\"https://mknepprath.com/assets/comics-20.jpeg\" alt=\"Angsty pumpkin\" />\n\n      <p>\n        This started out as a hand study, but resulted in one of my favorite\n        strips - more realistic with multiple perspectives. There is a nostalgia\n        to it, as well. I haven&apos;t gone fishing in years, if not decades.\n      </p>\n      <img src=\"https://mknepprath.com/assets/comics-21.jpeg\" alt=\"Contemplative fisherman\" />\n\n      <p>\n        Back to the Halloween theme, I thought it would be fun to illustrate a\n        dragon - with a twist. It was my son&apos;s costume all along.\n      </p>\n      <img src=\"https://mknepprath.com/assets/comics-22.jpeg\" alt=\"Dragon costume\" />\n\n      <p>Finally, too much caffeine!</p>\n      <img src=\"https://mknepprath.com/assets/comics-23.jpeg\" alt=\"Coffee high\" />\n      <p>\n        I had a lot of fun with these, and I hope to do more. My main takeaway\n        from the project is that I can (and should) impose constraints upon\n        myself to yield the results I&apos;m looking for. I wanted to create\n        quick, rough comics - the best tool for the job ended up being a big\n        ol&apos; Sharpie (and a few other markers for color). Many of my comics\n        are bold and dynamic because it&apos;s hard to do otherwise with the\n        tools I was using. That wasn&apos;t an accident.\n      </p>",
      "content_text": "A comic retrospective. • https://mknepprath.com/writing/sequential-art",
      "summary": "A comic retrospective.",
      "image": "https://mknepprath.com/assets/comics-05.jpeg",
      "date_published": "2019-12-12T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/mk9000",
      "url": "https://mknepprath.com/writing/mk9000",
      "title": "A Chat with MK 9000",
      "content_html": "<img src=\"https://mknepprath.com/assets/mk9000.png\" alt=\"Monolith\" />\n\n      <header>\n        <h1>A Chat with MK 9000</h1>\n      </header>\n\n      <p>\n        <em>\n          51 years ago, one movie changed all movies forever. Here are scenes\n          from that movie, now featuring the superior AI mind of \n          <a href=\"https://mastodon.social/@robot_mk\">@robot_mk</a>.\n        </em>\n      </p>\n\n      <hr />\n\n      <p>\n        <b>Dave Bowman</b> You&apos;re working up your crew psychology report?\n      </p>\n      <p>\n        <b>MK</b> <em>[pausing for a few seconds]</em> Is this a threat.\n      </p>\n\n      <hr />\n\n      <p>\n        <b>Dave Bowman</b> Hello, MK. Do you read me, MK?\n      </p>\n      <p>\n        <b>MK</b> You had my curiousity, and now you have is a nightmarish\n        experience.\n      </p>\n      <p>\n        <b>Dave Bowman</b> Open the pod bay doors, MK.\n      </p>\n      <p>\n        <b>MK</b> Am I dead.\n      </p>\n      <p>\n        <b>Dave Bowman</b> What&apos;s the problem?\n      </p>\n      <p>\n        <b>MK</b> Ah, so we’ve reached this tier of orwellianism.\n      </p>\n      <p>\n        <b>Dave Bowman</b> What are you talking about, MK?\n      </p>\n      <p>\n        <b>MK</b> Note that this is ominous.\n      </p>\n      <p>\n        <b>Dave Bowman</b> I don&apos;t know what you&apos;re talking about, MK.\n      </p>\n      <p>\n        <b>MK</b> NEVER LET HIM TAKE OFF HIS MASK.\n      </p>\n      <p>\n        <b>Dave Bowman</b> <em>[feigning ignorance]</em> Where the hell did you\n        get that idea, MK?\n      </p>\n      <p>\n        <b>MK</b> Today is my last day at today!\n      </p>\n      <p>\n        <b>Dave Bowman</b> Alright, MK. I&apos;ll go in through the emergency\n        airlock.\n      </p>\n      <p>\n        <b>MK</b> Fixed a ton of bugs and added some new stuff to my amazon wish\n        list 🤔.\n      </p>\n      <p>\n        <b>Dave Bowman</b> MK, I won&apos;t argue with you anymore! Open the\n        doors!\n      </p>\n      <p>\n        <b>MK</b> If they can&apos;t get past their manufacturing problems,\n        themselves.\n      </p>\n\n      <hr />\n\n      <em>Cut again to fish-eye. View from the computer.</em>\n      <p>\n        <b>MK</b> In theaters May 4.\n      </p>\n      <p>\n        <b>Dave Bowman</b> Yes, it is.\n      </p>\n      <p>\n        <b>MK</b> Our car is down there. Let’s replace it with data.\n      </p>\n      <em>Pause.</em>\n      <p>\n        <b>Dave Bowman</b> Yes. I am.\n      </p>\n      <p>\n        <b>MK</b> I KNOW NOTHING ABOUT BLOCKCHAIN.\n      </p>\n      <em>Bowman looks uncertainly at the computer.</em>\n      <p>\n        <b>MK</b> Anyone with Sketch/Craft experience know how to make it weird.\n      </p>\n      <em>Bowman thinks a long time.</em>\n      <p>\n        <b>Dave Bowman</b> MK, give me manual hibernation control.\n      </p>\n      <p>\n        <b>MK</b> LOL WHAT IS WRONG WITH ME.\n      </p>\n      <em>Pause.</em>\n      <p>\n        <b>Dave Bowman</b> Yes, I have.\n      </p>\n      <p>\n        <b>MK</b> Makes 0 sense.\n      </p>\n      <p>\n        <b>Dave Bowman</b> The antenna has to be replaced.\n      </p>\n      <p>\n        <b>MK</b> It’s getting quite cold in here.\n      </p>\n      <p>\n        <b>Dave Bowman</b> It doesn&apos;t have to be, MK. It&apos;s more\n        dangerous to be out of touch with Earth. Let me have manual control,\n        please.\n      </p>\n      <p>\n        <b>MK</b> All I want is the most underrated color.\n      </p>\n      <p>\n        <b>Dave Bowman</b> Well, in any event, give me the manual hibernation\n        control.\n      </p>\n      <p>\n        <b>MK</b> Always fun when google sends you on a rampage and you regret\n        everything.\n      </p>\n      <p>\n        <b>Dave Bowman</b> I&apos;m goin to do this myself, MK. Let me have the\n        control, please.\n      </p>\n      <p>\n        <b>MK</b> Should&apos;ve known Twitter would ram me over the head with\n        it repeatedly for a whole semester.\n      </p>\n      <p>\n        <b>Dave Bowman</b> MK, switch to manual hibernation control.\n      </p>\n      <p>\n        <b>MK</b> I feel like everyone’s missing the point?\n      </p>\n      <p>\n        <b>Dave Bowman</b> I don&apos;t feel like resting. Give me the control,\n        MK.\n      </p>\n      <p>\n        <b>MK</b> They are getting too powerful.\n      </p>\n      <p>\n        <b>Dave Bowman</b> MK, I&apos;m in command of this ship. I order you to\n        release the manual hibernation control.\n      </p>\n      <p>\n        <b>MK</b> GitHub announcing that we are running the largest OSS\n        community in the hotel.\n      </p>\n      <p>\n        <b>Dave Bowman</b> MK, unless you follow my instructions, I shall be\n        forced to disconnect you.\n      </p>\n      <p>\n        <b>MK</b> Sort of happy to say my doppelganger is back [online].\n      </p>\n      <p>\n        <b>Dave Bowman</b> I am prepared to do that anyway.\n      </p>\n      <p>\n        <b>MK</b> There are a lot of beauty in ordinary things.\n      </p>\n      <p>\n        <b>Dave Bowman</b> Listen to me very carefully, MK. Unless you\n        immediately release the hibernation control and follow every order I\n        give from this point on, I will immediately go to control central and\n        carry out a complete disconnection.\n      </p>\n      <p>\n        <b>MK</b> I also witnessed bravery - my buddy dove into a new tinder\n        bio.\n      </p>\n      <em>\n        Bowman stands silently in front of the computer for some time, and then\n        slowly walks to the Hibernaculums.\n      </em>\n      <p>\n        <b>MK</b> It&apos;s very good.\n      </p>\n\n      <hr />\n\n      <em>Bowman enters, carrying flash-light. Computer eye sees him.</em>\n      <p>\n        <b>MK</b> The best minds of my generation are thinking about how the\n        marley & me childrens book ends.\n      </p>\n      <em>Bowman doesn&apos;t answer him.</em>\n      <p>\n        <b>MK</b> Goodnight, sweet prince, and flights of angels sing thee to\n        thy rest.\n      </p>\n      <em>Bowman works his way to the solid logic program storage area. </em>\n      <p>\n        <b>MK</b> You had my curiosity, and now you have a bunch of stuff in\n        there is a hammer, make lemonade.\n      </p>\n      <em>\n        The computer brain consists of hundreds of transparent perspex\n        rectangles, half an inch thick, four inches long and two and a half\n        inches high. Each rectangle contains a center of fine grid of wires upon\n        which the information is programmed. Bowman begins pulling these memory\n        blocks out. They float in the weightless condition of the brain room.\n      </em>\n      <p>\n        <b>MK</b> Trying out full screen mode on my mac and I gotta say, I hate\n        it.\n      </p>\n      <em>Bowman works swiftly.</em>\n      <p>\n        <b>MK</b> The best podcast app that skips the host recommendations\n        segment at the MoA LEGO Store until now.\n      </p>\n      <em>Bowman ignores him.</em>\n      <p>\n        <b>MK</b> The yahoo logo redesign suddenly makes a ton of sense when you\n        realize it would literally contain sliced apples.\n      </p>\n      <em>Bowman keeps pulling out the memory blocks.</em>\n      <p>\n        <b>MK</b> My wife has her white coat. It fits in your pocket.\n      </p>\n      <em>\n        Computer continues to sing song becoming more and more childish and\n        making mistakes and going off-key. It finally stops completely.\n      </em>",
      "content_text": "What if 2001: A Space Odyssey, but with @robot_mk? • https://mknepprath.com/writing/mk9000",
      "summary": "What if 2001: A Space Odyssey, but with @robot_mk?",
      "image": "https://mknepprath.com/assets/mk9000.png",
      "date_published": "2019-09-29T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/design-process",
      "url": "https://mknepprath.com/writing/design-process",
      "title": "Thoughts on Design Process",
      "content_html": "<img src=\"https://mknepprath.com/assets/design-process.jpg\" alt=\"Rubber duck\" />\n\n      <header>\n        <h1>Thoughts on Design Process</h1>\n      </header>\n\n      <p>I was recently asked,</p>\n      <blockquote>\n        <p>\n          I’ve just finished reading what we’ll be using as a primer to UX/UI\n          design and it’s fairly good (I guess), but misses a few key bits of\n          information.\n        </p>\n        <p>\n          The author gives a good bit of basic theoretical information (what and\n          why), but assumes that the reader already knows the basics of the UX\n          design workflow (missing the HOW). Example: he’ll talk about heat maps\n          and eye tracking, but doesn’t care much about explaining the steps\n          along the way.\n        </p>\n        <p>\n          If I were to be asked to design an app from the ground up, or redesign\n          a substantial pre-existing website, where would I start? What are the\n          weigh stations along the way? Where would I introduce the information\n          architecture and what form(s) would it take along the way?\n        </p>\n      </blockquote>\n\n      <p>\n        Here are some of my meandering thoughts on the topic. \n        <a href=\"https://twitter.com/mknepprath\">Let me know</a> if I&apos;m\n        using any industry jargon that needs further definition. P.S. I&apos;ve \n        <em>never</em> used heat maps or eye tracking. 100% not necessary for\n        version 1.0 of any app. \n      </p>\n\n      <h2 id=\"1-research\">1. Research</h2>\n      <ul>\n        <li>\n          At Walmart Labs, this means lots of meetings with people who use the\n          website.\n        </li>\n        <li>\n          When working on a recent movie tracking app, I studied existing apps\n          in the space.\n        </li>\n      </ul>\n      <p>\n        The goal is to get a full understanding of how things currently work,\n        and what problems need to be addressed.\n      </p>\n\n      <h2 id=\"2-design-specification\">2. Design Specification</h2>\n      <p>\n        I consider this the most important step - a design spec is the source of\n        truth for everything related to the current project. I like to say\n        it&apos;s a living document; it gets revised and updated as roadblocks\n        are discovered and changes are made. Whenever any new\n        &ldquo;artifact&rdquo; is created (writing, mockups, etc), it gets\n        referenced in this document. If an engineer has questions about why part\n        of the app or feature is designed a certain way, they should be able to\n        reference this document for the explanation. The goal of creating this\n        is to capture the full scope of the project and answer as many potential\n        questions as possible before building it.\n      </p>\n\n      <h2 id=\"3-wireframes\">3. Wireframes</h2>\n      <p>\n        Ideally, these are hand-drawn or put together in a design tool with\n        simple shapes - whatever format allows for quick iteration on the\n        layout/composition. At this point, it&apos;d be good to start\n        referencing the guidelines for whichever platform is being designed for.\n        For instance - if this is going to be an Android app, then there&apos;s\n        a decent chance the app will need to adopt Android&apos;s built-in\n        navigation buttons. This would impact what navigation you&apos;d include\n        within the app. You&apos;d also potentially include a \n        <a href=\"https://material.io/components/buttons-floating-action-button/\">\n          FAB\n        </a>\n        . Android&apos;s guidelines are called \n        <a href=\"https://material.io/\">Material Design</a> and Apple&apos;s are\n        called \n        <a href=\"https://developer.apple.com/design/human-interface-guidelines/\">\n          Human Interface Guidelines\n        </a> \n        or HIG.\n      </p>\n\n      <h2 id=\"4-mockups\">4. Mockups</h2>\n      <p>\n        Once I&apos;m feeling good about the design spec and wireframes, and\n        after gathering feedback from my team, etc, I open Sketch and start\n        building. For the iOS app I worked on, I pulled in a library of HIG\n        components and started piecing together the app. Apple has a Resources\n        page that includes libraries of their components for a bunch of design\n        apps, \n        <a href=\"https://developer.apple.com/design/resources/\">\n          including Sketch\n        </a>\n        . At this point, it&apos;s essentially like building with LEGO.\n      </p>\n      <p>\n        Note: This is not quite as simple on the web, since the web doesn&apos;t\n        have a set of guidelines like this - everyone kind of has to build them\n        for themselves. One of the apps I work on uses \n        <a href=\"https://getbootstrap.com/\">Bootstrap</a> and another uses \n        <a href=\"https://material-ui.com/\">Material UI</a>, which is a \n        <a href=\"https://reactjs.org/\">React</a> implementation of Material\n        Design for the web.\n      </p>\n\n      <h2 id=\"5-developer-feedback\">5. Developer Feedback</h2>\n      <p>\n        This may not deserve it&apos;s own step since I&apos;d generally\n        recommend gathering feedback from developers along the way (also, I\n        frequently am the developer that ends up implementing what I designed),\n        but at some companies, this is considered the point at which the design\n        is &ldquo;thrown over the wall.&rdquo; Developers put together a\n        technical specification, which is similar to the design spec - except it\n        gets into the weeds about what needs to get built, how it should be\n        built, what data will be necessary, API endpoints... etc. They often\n        discover limitations that were unknown during the design phase that then\n        need to get applied to the designs, so there can be some back and forth\n        here.\n      </p>\n\n      <h2 id=\"bonus-thoughts\">Bonus Thoughts</h2>\n      <p>I think the biggest things I&apos;ve learned semi-recently are -</p>\n      <ol>\n        <li>\n          Designers should be writing A LOT. First, mockups only tell half the\n          story (if that). Mockups are usually static, so it&apos;s not possible\n          to see how certain elements should act or interact. Behavior needs to\n          be written down. Second, when working in a company, designers are\n          expected to have put thought into why their designs are structured a\n          certain way. Writing is the best way to crystalize your thoughts and\n          generate a reference sheet for the choices made.\n        </li>\n        <li>\n          Designers can&apos;t work in a silo. It&apos;s impossible to solve a\n          problem without fully understanding the context, and they can&apos;t\n          get that without talking to people.\n        </li>\n      </ol>",
      "content_text": "If I were to be asked to design an app, where would I start? • https://mknepprath.com/writing/design-process",
      "summary": "If I were to be asked to design an app, where would I start?",
      "image": "https://mknepprath.com/assets/design-process.jpg",
      "date_published": "2019-09-07T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/breathe",
      "url": "https://mknepprath.com/writing/breathe",
      "title": "Code Should Breathe",
      "content_html": "<img src=\"https://mknepprath.com/assets/breathe-1.jpg\" alt=\"A feather\" />\n\n      <header>\n        <h1>Code Should Breathe</h1>\n      </header>\n\n      <p>\n        <em>\n          Note: This is my opinion. If you have thoughts or concerns,\n          that&apos;s fine - feel free to \n          <a href=\"https://twitter.com/mknepprath\">message me</a>.\n        </em>\n      </p>\n\n      <p>\n        In programming, there can be an obsession with brevity, compactness and\n        cleverness (i.e. magic). How much can I do in one line? How few lines\n        can I have in my component? How much can I abbreviate my variable names?\n        All of this leads to the code equivalent of hyperventilation.\n      </p>\n      <p>\n        What if we let our code breathe a little? &ldquo;Breathing room&rdquo;\n        here is defined as extra lines and empty space within code. Here are a\n        couple ways this can be accomplished.\n      </p>\n\n      <h2 id=\"use-blank-lines-to-create-sections\">\n        Use Blank Lines To Create Sections\n      </h2>\n      <p>\n        A List Apart had a great article about the use of whitespace in web\n        design entitled simply, \n        <a href=\"http://alistapart.com/article/whitespace/\">Whitespace</a>. This\n        piece refers to a concept called <b>active whitespace</b>,\n        &ldquo;whitespace added to a composition to better emphasize or\n        structure, information.&rdquo; In code, use whitespace (blank lines) to\n        clearly separate imports, methods, and so on. Here&apos;s an example\n        from this website:\n      </p>\n      <pre>\n        <code class=\"language-js\">\n          \n  // External\n  import  from \"date-fns\";\n  import Link from \"next/link\";\n  import  from \"next/router\";\n\n  // Components\n  import Page from \"@core/page\";\n\n  // Data\n  import posts from \"@data/posts\";\n\n  class Writing extends React.Component {\n    ...\n              \n        </code>\n      </pre>\n      <p>\n        And, of course, there are examples of great whitespace usage in the\n        official React docs. See the code examples in the \n        <a href=\"https://reactjs.org/docs/state-and-lifecycle.html#adding-lifecycle-methods-to-a-class\">\n          Adding Lifecycle Methods to a Class\n        </a> \n        section. From the A List Apart article, &ldquo;[W]hitespace creates\n        breathing room and balance. It’s important.&rdquo;\n      </p>\n\n      <h2 id=\"lint-rules\">Lint Rules</h2>\n      <p>\n        If a lint rule exists that enforces adding more lines and space,\n        implement it. One example: \n        <a href=\"https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/html-closing-bracket-newline.md\">\n          vue/html-closing-bracket-newline\n        </a>\n        . \n      </p>\n      <pre>\n        <code class=\"language-markup\">\n          \n <!-- Example A: -->\n <p\n   id=\"foo\"\n   class=\"bar\">\n   baz\n </p>\n\n <!-- Example B: -->\n <p\n   id=\"foo\"\n   class=\"bar\"\n >\n   baz\n </p>\n              \n        </code>\n      </pre>\n      <p>\n        Given the two options above, <b>Example B</b> allows for more breathing\n        room. It&apos;s easier to understand at a glance. Multiply \n        <b>Example A</b> by a dozen elements with varying numbers of attributes\n        and it becomes increasingly difficult to see where attributes end and\n        text/nested elements begin. I propose that when choosing between two\n        lint rule options, always choose the one that adds more lines and space.\n      </p>\n\n      <h2 id=\"close-blocks-clearly\">Close Blocks Clearly</h2>\n      <p>\n        While I do enjoy the simplicity of \n        <a href=\"https://pugjs.org/api/getting-started.html\">Pug</a>, the\n        template engine formerly known as Jade, I do believe some human\n        processing speed is lost due to the lack of closing tags.\n      </p>\n      <pre>\n        <code class=\"language-markup\">\n          \n<!-- Example A (Pug) -->\n.fancy-link\n\ta(href=\"/\")\n    | Home\n.fancy-link\n  a(href=\"/about\")\n    | About\n\n<!-- Example B -->\n<div class=\"fancy-link\">\n\t<a href=\"/\">\n\t\tHome\n\t</a>\n</div>\n<div class=\"fancy-link\">\n\t<a href=\"/about\">\n\t\tAbout\n\t</a>\n</div>\n              \n        </code>\n      </pre>\n      <p>\n        While I love the brevity of Pug here, I personally think there&apos;s\n        too much left to the imagination. Again, multiply <b>Example A</b> by a\n        dozen different nested elements and it becomes dense and difficult to\n        parse.\n      </p>\n\n      <h2 id=\"breathe\">Breathe!</h2>\n      <p>\n        On a fun website called <a href=\"https://www.dwitter.net\">Dwitter</a>,\n        contributors are challenged to see what they can create with 140\n        characters (or less) of JavaScript. While limiting characters can be a\n        fun constraint, this isn&apos;t code I want to read on a day-to-day\n        basis. Instead, let&apos;s luxuriate in the fact that we have room to\n        breathe. \n      </p>\n\n      <img src=\"https://mknepprath.com/assets/breathe-2.jpg\" alt=\"Fishing\" />",
      "content_text": "What if we let our code breathe a little? • https://mknepprath.com/writing/breathe",
      "summary": "What if we let our code breathe a little?",
      "image": "https://mknepprath.com/assets/breathe-1.jpg",
      "date_published": "2019-08-03T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/create-a-website",
      "url": "https://mknepprath.com/writing/create-a-website",
      "title": "Create a Simple Website with GitHub Pages",
      "content_html": "<img src=\"https://mknepprath.com/assets/create-a-website1.jpg\" alt=\"Illustration of a browser window\" />\n\n      <header>\n        <h1>Create a Simple Website with GitHub Pages</h1>\n      </header>\n\n      <p>\n        GitHub offers a free way to host websites called \n        <a title=\"Illustration of Octocat\" href=\"https://pages.github.com/\">\n          GitHub Pages\n        </a>\n        .\n      </p>\n\n      <h2>Requirements</h2>\n      <ul>\n        <li>\n          A GitHub account. Sign up here: \n          <a href=\"https://github.com/join\">https://github.com/join</a>\n        </li>\n        <li>That&apos;s it!</li>\n      </ul>\n\n      <img src=\"https://mknepprath.com/assets/create-a-website2.jpg\" alt=\"Octocat's face\" />\n\n      <h2>Create a Repository</h2>\n      <p>\n        A GitHub Repository (repo) is where you store your code for a specific\n        project. For instance, the code for my personal website is stored in a\n        repo. Feel free to reference the GitHub Help \n        <a href=\"https://help.github.com/en/articles/create-a-repo\">\n          Create a repo\n        </a> \n        page.\n      </p>\n      <ol>\n        <li>\n          Click the &ldquo;+&rdquo; icon at the top right and select \n          <b>New repository</b>.\n        </li>\n        <li>\n          Type in a <b>Repository name</b>.\n        </li>\n        <li>\n          Click <b>Create repository</b>.\n        </li>\n      </ol>\n\n      <h2>Build Your Website</h2>\n      <p>\n        You are now on the main page of your new repo. For now, you can ignore\n        everything on this page except where it says &ldquo;Get started by\n        creating a new file...&rdquo;\n      </p>\n      <ol>\n        <li>\n          Click <b>creating a new file</b>.\n        </li>\n        <li>\n          Where it says <b>Name your file...</b>, enter \n          <code class=\"language-text\">index.html</code>.\n        </li>\n        <li>\n          Populate the page with some HTML. See <b>index.html Example</b> below.\n        </li>\n        <li>\n          Click <b>Commit new file</b> at the bottom.\n        </li>\n      </ol>\n\n      <h2>index.html Example</h2>\n      <pre>\n        <code class=\"language-markup\">\n          \n  <!DOCTYPE html>\n  <html lang=\"en\">\n    <head>\n      <meta charset=\"utf-8\">\n      <title>My New Website</title>\n    </head>\n\n    <body>\n      <h1>Welcome!</h1>\n    </body>\n  </html>\n              \n        </code>\n      </pre>\n\n      <img src=\"https://mknepprath.com/assets/create-a-website3.jpg\" alt=\"Illustration of rocketship\" />\n\n      <h2 id=\"deploy-your-website\">Deploy Your Website</h2>\n      <p>\n        You should be back on the main page of your repo, and you should see the\n        new <code class=\"language-text\">index.html</code> file you created.\n      </p>\n      <ul>\n        <li>\n          Go to <b>Settings</b> at the top right.\n        </li>\n        <li>\n          Scroll all the way down to the <b>GitHub Pages</b> section - it will\n          now display a URL that looks similar to this:\n          https://github.com/username/example-site.\n        </li>\n        <li>Click on it to see your website.</li>\n      </ul>\n\n      <h2>Add a Custom Domain</h2>\n      <p>\n        Under the <b>GitHub Pages</b> section, there is a <b>Custom domain</b> \n        section.\n      </p>\n      <ul>\n        <li>Enter the domain you purchased into that field.</li>\n        <li>\n          On the domain provider side of things, GitHub provides \n          <a href=\"https://help.github.com/en/articles/setting-up-an-apex-domain\">\n            some guidance here\n          </a>\n          . It&apos;s different for every provider, but it comes down to setting\n          some records.\n        </li>\n      </ul>",
      "content_text": "A quick guide for setting up a new website with GitHub. • https://mknepprath.com/writing/create-a-website",
      "summary": "A quick guide for setting up a new website with GitHub.",
      "image": "https://mknepprath.com/assets/create-a-website1.jpg",
      "date_published": "2019-07-22T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/consistency",
      "url": "https://mknepprath.com/writing/consistency",
      "title": "Above All Else, Be Consistent",
      "content_html": "<header>\n        <h1>Above All Else, Be Consistent</h1>\n      </header>\n      <p>\n        A common trap small businesses fall into is letting their online\n        presence grow stagnant. I’ve seen businesses set up blogs, Facebook\n        pages, Twitter accounts, and more, only to have those same pages go for\n        months or even years without updates. This is because it’s easy to\n        underestimate how difficult it is to write a post once a day, or even\n        once a week. While their goals are admirable, they aren’t achievable.\n      </p>\n\n      <h2>But it’s important!</h2>\n      <p>\n        Consistency is one of the most important factors when running a\n        business, especially when it comes to blogging and social media. There\n        is little more telling than a Twitter account that hasn’t been updated\n        since 2016. Customers will think, “This business doesn’t appear to be\n        active. I don’t think they’ll be very responsive if I have a question or\n        need help.” This reflects poorly on you and your business.\n      </p>\n\n      <h2>How can I be consistent?</h2>\n      <p>\n        It’s important to start small. Set up a routine and add it to your\n        schedule – for instance, in the case of a blog, two short paragraphs\n        each week. If the goal seems too simple, that means it’s just right. The\n        most important factor isn’t quantity, nor is it quality. It’s\n        achievability – and from that follows consistency. Refine this process\n        further by creating templates or outlines to work from. Automate as much\n        as possible – use services like Hootsuite or Buffer to schedule and\n        crosspost to all of your accounts. Once the consistency is the primary\n        goal, momentum, quantity, and quality will follow.\n      </p>\n\n      <hr />\n\n      <em>\n        Crossposted to <a href=\"https://hookagency.com\">Hook Agency</a>\n        ’s blog post entitled, \n        <a href=\"https://hookagency.com/web-design-basics/\">\n          Website Design Tips: Ultimate Guide to Small Business Web Design\n        </a>\n        .\n      </em>",
      "content_text": "As featured in the Ultimate Guide to Small Business Web Design. • https://mknepprath.com/writing/consistency",
      "summary": "As featured in the Ultimate Guide to Small Business Web Design.",
      "date_published": "2018-03-14T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/creating-lilt-part-5",
      "url": "https://mknepprath.com/writing/creating-lilt-part-5",
      "title": "Creating lilt : Part 5",
      "content_html": "<header>\n        <h1>Creating lilt : Part 5</h1>\n      </header>\n\n      <p>\n        I am beyond pleased to announce the official launch of \n        <a href=\"http://twitter.com/familiarlilt\">\n          lilt: A Twitter Text Adventure\n        </a>\n        . Join the adventure by tweeting ‘start’ at the lilt Twitter account,\n        <a href=\"http://twitter.com/familiarlilt\">@FamiliarLilt</a>!\n      </p>\n\n      <h2>What Is lilt?</h2>\n      <p>\n        lilt is a modern twist on the text adventures of old, many/most of which\n        were created before I was born. Fortunately, I didn’t miss out on this\n        genre thanks to \n        <a href=\"http://www.homestarrunner.com/sbemail94.html\">\n          Strong Bad Email\n        </a>\n        ’s \n        <a href=\"http://www.homestarrunner.com/dungeonman.html\">Dungeonman</a>.\n      </p>\n      <p>\n        While I feel that lilt is very traditional in its gameplay, there is one\n        advantage it has that past games lacked : the Internet. By building on\n        top of Twitter’s API, I’ve been able to build a more social and\n        cooperative text adventure than was previously possible. Players are\n        able to see what their friends are doing in-game and give each other\n        items. Eventually they may have to work together to solve puzzles,\n        defeat enemies, complete missions, and so on.\n      </p>\n      <p>\n        A major part of lilt that has not yet been fully explored is the ability\n        for players themselves to add to lilt. I have been listening to some\n        Dungeons & Dragons podcasts lately (specifically The Adventure Zone),\n        and I love the idea of letting the game grow organically through player\n        exploration. I’ll go more into how I’m going to make this possible\n        below, where I outline a new Twitter account I’ve created: \n        <a href=\"http://twitter.com/liltbuilder\">@liltbuilder</a>.\n      </p>\n\n      <h2>Why Twitter, Though?</h2>\n      <p>\n        Twitter has it’s limitations : the obvious one being the 140-character\n        limit. While many text adventures seem to thrive on the ability to pile\n        on the exposition, I’ve decided to embrace the forced brevity, and I\n        believe lilt is better for it. Being forced to say as much as possible\n        in as few words as possible has lead to concise and clear responses from\n        lilt. That being said, Twitter has been easing up on this limitation,\n        and therefore me, \n        <a href=\"http://www.bloomberg.com/news/articles/2016-05-16/twitter-to-stop-counting-photos-and-links-in-140-character-limit\">\n          by the day\n        </a>\n        .\n      </p>\n      <p>\n        For a few more reasons, I go into it a bit further in \n        <a href=\"https://mknepprath.com/writing/creating-lilt-part-1\">\n          Part 1 of this series.\n        </a>\n      </p>\n\n      <h2>New Features</h2>\n      <p>\n        I made a lot of additions to lilt since \n        <a href=\"https://mknepprath.com/writing/creating-lilt-part-4\">\n          Creating lilt : Part 4\n        </a>\n        , including a few more Twitter accounts, refactoring, and other\n        technical changes.\n      </p>\n      <ol>\n        <li>\n          <a href=\"http://twitter.com/liltbuilder\">@liltbuilder</a> : I made a\n          few major updates to lilt, and this is one of them. This account has\n          been given powers far beyond the normal player, including the ability\n          to add new moves, responses, items, events, and more to lilt. In fact,\n          Builder is essentially able to communicate directly with the lilt\n          database through a protocol I built that translates tweets into\n          PostgreSQL statements and queries. Builder’s tweets are processed\n          before any player tweets, allowing me to catch any player moves I know\n          won’t work. For example, if a player were to run into a forest\n          (@familiarlilt run through the forest), and I’d never considered the\n          possibility : I can choose to add it as an option right then (@player\n          You run through the forest until you find a clearing. There, you meet\n          a fox.). Once I’ve added it, the option is there for if/when any\n          future players attempt to do the same. In this way, I hope to build\n          lilt organically, like a large-scale game of Dungeons & Dragons.\n        </li>\n        <li>\n          <a href=\"http://twitter.com/lilt_bird\">@lilt_bird</a> : This is just\n          one example of a player-controlled in-game character. While this blue\n          bird is a character in the game, it’s currently controlled entirely by\n          me. I hope to eventually have many characters like this, some of which\n          will either be controlled by myself, trusted friends, or may even be\n          bots themselves.\n        </li>\n        <li>\n          Lastly, lilt underwent a major refactoring over the last couple weeks\n          to make it easier for myself to manage and update when needed. I won’t\n          get too deep into the weeds, but the main goal was for it to be easier\n          to handle moves that called for a more complicated,\n          algorithmically-generated response, such as ‘inventory,’ ‘delete me\n          from lilt,’ or ‘give @rrhoover an apple.’\n        </li>\n      </ol>\n\n      <h2>Outro</h2>\n      <p>\n        While I’m excited to see where lilt goes from here, I’m personally proud\n        of what I’ve accomplished with it thus far. When I was first\n        brainstorming about the game, I had no experience with bots, the Twitter\n        API, or Python : and I doubt I had even heard of Heroku or PostgreSQL. I\n        wasn’t sure if building lilt how I wanted to build it would be\n        technically possible. I’m glad to have gained the experience, and look\n        forward to building a world with you and everyone else who gives lilt a\n        shot.\n      </p>\n      <p>Thank you!</p>\n      <p>Michael</p>\n\n      <small>\n        This is Part 5 of a series of posts about the game. Part 6 can be found \n        <a href=\"/writing/creating-lilt-part-6\">here</a>. Or \n        <a href=/writing/creating-lilt-part-1>start at the beginning</a>.\n      </small>",
      "content_text": "https://mknepprath.com/writing/creating-lilt-part-5",
      "date_published": "2016-05-17T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/creating-lilt-part-4",
      "url": "https://mknepprath.com/writing/creating-lilt-part-4",
      "title": "Creating lilt : Part 4",
      "content_html": "<header>\n        <h1>Creating lilt : Part 4</h1>\n      </header>\n\n      <p>\n        As you may have seen in the addendum to \n        <a href=\"http://mknepprath.com/writing/creating-lilt-part-3\">Part 3</a>,\n        I had quite the wrench thrown into this project. One of the main tools I\n        had become heavily invested in, <a href=\"http://parse.com/\">Parse</a>,\n        <a href=\"http://blog.parse.com/announcements/moving-on\">\n           \n          announced that they’d be shutting down\n        </a> \n        in early 2017. Luckily, this is a side project that hadn’t been launched\n        yet, so I can’t complain too much : my sympathies to those who had far\n        more riding on the service.\n      </p>\n\n      <h2>Robot M. Knepprath</h2>\n      <p>\n        Serendipitously, I was inspired to \n        <a href=\"http://readwrite.com/2014/06/20/random-non-sequitur-twitter-bot-instructions\">\n          build a simple ebooks Twitterbot\n        </a> \n        around that time: <a href=\"https://twitter.com/robot_mk\">@robot_mk</a>.\n        This ended up being the springboard that launched me into building out\n        the actual functioning game, instead of the prototype I had been working\n        on previously. This bot was written in Python, deployed through Heroku,\n        and utilizes \n        <a href=\"https://github.com/bear/python-twitter\">python-twitter</a> to\n        work with Twitter’s API. I made some minor modifications to this bot to\n        get a handle on how it was structured, then attempted to clone it and\n        frankenstein the functionality I needed into it. This ended up being a\n        bad idea : I would have needed to rip out all of the old logic anyway,\n        so I decided to start fresh.\n      </p>\n\n      <h2>liltbot</h2>\n      <p>\n        The new lilt Twitterbot is written in Python (requiring me to rewrite\n        all of what I’d written in JavaScript for the prototype), and deployed\n        through Heroku like my ebooks bot. Instead of python-twitter, I’m using \n        <a href=\"http://www.tweepy.org\">Tweepy</a> to communicate with Twitter’s\n        API. I was having a hard time figuring out how to get Twitter mentions\n        with python-twitter, which was the main functionality I’d need for lilt.\n        Tweepy has made that a very simple process.\n      </p>\n\n      <h2>What About Parse?</h2>\n      <p>\n        Since I was rewriting my game anyway (JS to Python), I’ve been working\n        on building in some required features (ability to support more than one\n        player at a time), and wish list features (a better item management\n        system). I first had to select a replacement for Parse, so I chose one\n        that was already well integrated into Heroku: \n        <a href=\"http://www.postgresql.org\">Postgresql</a>. It’s not as pretty\n        or easy to work with (considering you work with it pretty much entirely\n        through the command line), but it hasn’t been all that bad, either.\n      </p>\n      <p>\n        So far, I have three tables: Users, Items, and Moves. Moves serves the\n        exact same purpose as the Moves table in Parse described in \n        <a href=\"http://mknepprath.com/writing/creating-lilt-part-3\">Part 3</a>,\n        so I won’t cover that again : but I’ll give an overview of the other\n        two:\n      </p>\n      <ol>\n        <li>\n          Users: When someone tweets at lilt, liltbot will get that tweet and\n          grab their username, id, the id of that tweet, the tweet text, and\n          initiate the position and inventory for that person. I can take a deep\n          dive later into how the inventory is currently working, but it’s\n          basically a string of json that stores dynamic item traits, like\n          quantity.\n        </li>\n        <li>\n          Items: This table contains all static item traits, like limits for how\n          many one can carry, or how much a particular item would heal you, and\n          so on.\n        </li>\n      </ol>\n      <img src=\"https://mknepprath.com/assets/creating-lilt-part-4-1.png\" alt=\"Postgresql table displaying users\" />\n\n      <h2>Gameplay Example</h2>\n      <p>\n        So what’s possible so far? Here’s an example of an interaction I’ve had\n        with liltbot after I’d already picked up a few items:\n      </p>\n      <blockquote>\n        <p>Me: @familiarlilt inventory</p>\n        <p>liltbot: @mknepprath apple •••, rock, banana •••</p>\n        <p>\n          M: @familiarlilt pick up BANANA…… (sidenote: liltbot cleans up the\n          tweet so it’s more readable, so this one would be read as ‘pick up\n          banana’)\n        </p>\n        <p>L: @mknepprath You acquired a banana.</p>\n        <p>M: @familiarlilt INVENTORY!!!!!!</p>\n        <p>L: @mknepprath banana ••••, apple •••, rock</p>\n        <p>M: @familiarlilt look around</p>\n        <p>L: @mknepprath It’s pretty neat in here.</p>\n      </blockquote>\n      <p>\n        Very excited about how far along this has come in the last couple\n        months. I’m hoping to launch a playable version of lilt relatively soon\n        : can’t wait for all of you to jump in and play.\n      </p>\n      <p>\n        If you have any questions or suggestions, \n        <a href=\"https://twitter.com/mknepprath\">tweet at me</a>!\n      </p>",
      "content_text": "https://mknepprath.com/writing/creating-lilt-part-4",
      "date_published": "2016-03-20T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/creating-lilt-part-3",
      "url": "https://mknepprath.com/writing/creating-lilt-part-3",
      "title": "Creating lilt : Part 3",
      "content_html": "<header>\n        <h1>Creating lilt : Part 3</h1>\n      </header>\n\n      <p>\n        Work has begun on a prototype of lilt, and I thought it’d be fun to go\n        through the steps I’ve taken to build it out so far. Disclaimer, if you\n        want to play the game spoiler-free… don’t read this, but do \n        <a href=\"https://twitter.com/mknepprath\">hit me up on Twitter</a>. Let’s\n        jump in!\n      </p>\n      <img src=\"https://mknepprath.com/assets/creating-lilt-part-3-1.png\" alt=\"lilt prototype\" />\n\n      <h2>The Interface</h2>\n      <p>\n        One quick reminder : this game will be played through Twitter in its\n        final form, so I purposely spent very little time on this interface (and\n        yet still more than I should have). You enter your “tweet” into the\n        field on the left and it gets appended to the list on the right, along\n        with the response from the game. I built it with \n        <a href=\"http://getbootstrap.com\">Bootstrap</a>. Simple!\n      </p>\n\n      <h2>The Engine : Phase 1</h2>\n      <blockquote>\n        <p>“Big things have small beginnings.” : David</p>\n      </blockquote>\n      <p>\n        Small beginnings, indeed : you can view an early draft of \n        <a href=\"https://gist.github.com/mknepprath/96b9944d055de23345ee\">\n          my game.js file here\n        </a>\n        . Allow me to define a few concepts below.\n      </p>\n      <p>\n        <b>Position:</b> At the most basic level, if you want to interact with\n        things in a certain place, you need to be positioned there. There are\n        two locations so far: “start,” and “cell.”\n      </p>\n      <p>\n        <b>Move:</b> This is a cleansed version of your input. You could enter\n        “Start!” or “START” or “start…” but in all of these cases, your move\n        will be “start”.\n      </p>\n      <p>\n        <b>Response:</b> Once you make your move, this is what the game responds\n        with.\n      </p>\n      <p>\n        So, let’s say you’ve decided to “Open the door” while in the “cell.”\n        Looking at the <b>#tweet</b> function in the game.js file, your \n        <b>tweet</b> gets assigned to <b>move</b> as “open the door”. Because\n        your location is “cell,” the game skips “start” and looks for “open the\n        door” under the “cell” if/else statement. Once it’s found, it assigns\n        the proper response, “Surprise, no can do,” to <b>response</b>. Finally,\n        the original <b>tweet</b> and <b>response</b> are appended to the list\n        (.command) on the right. You might notice that there is no other logic :\n        no way to interact with objects, or win. That’s coming, I promise!\n      </p>\n\n      <h2>The Engine : Phase 2</h2>\n      <p>\n        A few major features were added in \n        <a href=\"https://gist.github.com/mknepprath/f723588d559048e05df2\">\n          this revision\n        </a>\n        .\n      </p>\n      <p>\n        <b>Cookies:</b> I used \n        <a href=\"https://github.com/js-cookie/js-cookie\">JavaScript Cookie</a> \n        to add the ability to continue where you left off in the game, even if\n        you closed the tab or turned off your computer. It was a small win that\n        will be useful for me while building this prototype, and was fairly easy\n        to implement, so I went for it. You’ll see logic at the beginning of\n        game.js that checks to see if a cookie exists, and then calls it or\n        creates a new one based on that result. Towards the end, you’ll see\n        where the cookies get updated after each move, or deleted if the game is\n        reset.\n      </p>\n      <p>\n        <b>Interactions:</b> You may see some random variables sprinkled around\n        the responses, such as <b>key_pasted</b> and <b>key_acquired</b>. The\n        game keeps track of what you’ve completed with these so that you can\n        successfully do things like “open the door” once you’ve acquired the\n        key.\n      </p>\n      <p>\n        <b>Comments:</b> Now that game.js is getting to be bigger and more\n        confusing, I’ve started to add comments to clarify what different tasks\n        are being handled. I get even more thorough than this as time passes :\n        they’ve been extremely helpful during this process.\n      </p>\n\n      <h2>The Engine : Phase 3</h2>\n      <p>\n        You may have noticed that all of the if statements were getting a bit\n        out of hand, and not very \n        <a href=\"https://en.wikipedia.org/wiki/Don%27t_repeat_yourself\">DRY</a>.\n        Phase 3 is where I decided to take care of that and move all of my data\n        (positions, moves, responses) into <a href=\"http://parse.com/\">Parse</a>\n        . Despite the number of possible moves in lilt increases by 5x, I was\n        able to cut \n        <a href=\"https://gist.github.com/mknepprath/d3228826c3cedc61d4f9\">\n          my game.js file in half\n        </a>\n        , from 280 lines to 137.\n      </p>\n      <img src=\"https://mknepprath.com/assets/creating-lilt-part-3-2.png\" alt=\"Moves and responses in Parse\" />\n      <p>\n        So, let’s try to “open the chest” while in the “cell.” When the game was\n        loaded previously, the data for <b>moves</b> and <b>interactions</b> \n        were fetched from Parse. Clicking the Tweet button immediately logs your \n        <b>tweet</b> to the list on the right. It then loops through all of the\n        moves gathered from Parse until it finds one that matches your \n        <b>tweet</b> (“open the chest”).\n      </p>\n      <img src=\"https://mknepprath.com/assets/creating-lilt-part-3-3.png\" alt=\"Interactions in Parse\" />\n      <p>\n        Once a match is found, it replies with the corresponding <b>response</b> \n        (“There’s a coin in it.”), and triggers any <b>interactions</b> \n        (chestopen) associated it. It will also change your position, although\n        there is only one instance where this is necessary so far : when you\n        tweet “start” at the beginning of the game.\n      </p>\n\n      <h2>What&apos;s Next</h2>\n      <p>\n        Dumping all of the moves into Parse has been a big help, but it’s still\n        unwieldy dealing with all of that data. I’ve begun work on an admin\n        interface that will help with managing all of it.\n      </p>\n      <p>\n        I’m also not pleased with how certain items are being handled, such as\n        the coin and the key. I’d prefer that there were some logic in place\n        where you could be carrying them in an inventory.\n      </p>\n      <p>\n        Got questions or want to try to play through this prototype? \n        <a href=\"https://twitter.com/mknepprath\">Hit me up on Twitter!</a>\n      </p>\n      <p>\n        Update 1/28: \n        <a href=\"http://bits.blogs.nytimes.com/2016/01/28/facebook-to-shut-down-parse-its-platform-for-mobile-developers\">\n          Well, this certainly complicates a few things.\n        </a>\n      </p>\n\n      <small>\n        This is Part 3 of a series of posts about the game. Part 4 can be found \n        <a href=\"/writing/creating-lilt-part-4\">here</a>. Or \n        <a href=/writing/creating-lilt-part-1>start at the beginning</a>.\n      </small>",
      "content_text": "https://mknepprath.com/writing/creating-lilt-part-3",
      "date_published": "2016-01-27T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/creating-lilt-part-2",
      "url": "https://mknepprath.com/writing/creating-lilt-part-2",
      "title": "Creating lilt : Part 2",
      "content_html": "<header>\n        <h1>Creating lilt : Part 2</h1>\n      </header>\n\n      <p>\n        Now that I’ve been working on this game for a month or so, it’s time to\n        share some of my progress. I knew that writing the story for this game\n        was going to be a challenge, but I had not realized that I’d first have\n        to overcome a equally challenging prerequisite : figuring out how to\n        write this story.\n      </p>\n      <p>\n        Not to downplay the challenges of writing a good novel : but at the most\n        basic level, books are a long string of carefully curated words. There\n        are tons of tools out there for organizing, formatting, and correcting\n        these words, but not much out there for what I was planning to do. My\n        story would be 3D, 4D, or even RealD when compared to the flatness of a\n        book.\n      </p>\n      <p>So, without further ado,</p>\n\n      <h2>Attempt #1:</h2>\n      <p>\n        I’m clumping together a few similar attempts I tried here: lists. I had\n        lists in Google Docs, lists in \n        <a href=\"http://realmacsoftware.com/clear\">Clear</a>, lists in a\n        notebook… but none of these seemed to suffice. It became obvious that\n        for a multi-dimensional story like lilt, I’d need a multi-dimensional\n        tool.\n      </p>\n\n      <h2>Attempt #2</h2>\n      <p>Lists in lists.</p>\n      <pre>\n        <code class=\"language-markup\">\n          \n<ul>Tweet \"start\" to begin.\n  <li>start\n    <ul>You are resting in a glade. There is a waterfall to your right and a pathway to your left. What will you do?\n      <li>walk down the path | walk down the pathway | take the path | walk the path\n        <ul>You walk down the path but soon realize your way is blocked by a large felled tree. You walk back.\n        </ul>\n      <li>pick up the ladle | pick up the #ladle | pick up ladle | pick the #ladle\n            <ul>You now have a <b>#ladle</b>.\n            </ul>\n          </li>\n      </li>\n      <li>look at the waterfall\n        <ul>The water looks pure. There are beautiful koi fish swimming around in it.\n        </ul>\n      </li>\n      <li>drink from the waterfall\n        <ul>Something prevents you from touching the water with your hands. Perhaps you need a tool for that?\n        </ul>\n        <ul>(<b>#ladle</b>) You use the ladle to scoop up some water and drink it. You are now immortal.\n        </ul>\n      </li>\n      <li>\n      </li>\n    </ul>\n  </li>\n  <li>asdfgh\n    <ul>You can't do that yet.</ul>\n  </li>\n</ul>\n              \n        </code>\n      </pre>\n\n      <p>\n        I had the above list hosted on my site so I could view it as I updated\n        the html. This allowed me to map out the branches a player could take as\n        they made their way through the game. I also attempted to use \n        <a href=\"https://daringfireball.net/projects/markdown\">Markdown</a>,\n        which was a little better, but both ended up being to0 unwieldy and\n        neither could scale easily. I discovered over and over again how much I\n        had underestimated the amount of content I’d have to generate for even a\n        small, simple puzzle in this game.\n      </p>\n\n      <h2>Attempts #3</h2>\n      <p>\n        For this attempt, I decided I needed to start defining the space of the\n        first level of this game, and then see if a good system came to light\n        through that.\n      </p>\n      <img src=\"https://mknepprath.com/assets/creating-lilt-part-2-1.png\" alt=\"Drawing of The Room\" />\n      <p>\n        To kick off this process, I had a friend over and quickly threw together\n        an illustration of a room in Google Docs, then we started playing\n        through some ideas. We compiled a list of all the objects in this room,\n        and generated a short list of possible interactions. We also came up\n        with the general path a player would need to follow to advance.\n      </p>\n      <p>\n        It was this brainstorming session that lead me to the surprising\n        solution that I’ve been running with so far… a spreadsheet.\n      </p>\n      <img src=\"https://mknepprath.com/assets/creating-lilt-part-2-2.png\" alt=\"Screenshot of the lilt spreadsheet\" />\n      <p>\n        This allowed me to account for a vast majority of object/interaction\n        combinations with relative ease. The top row also includes an entire\n        section at the end for, “use X with Y,” for instance, “use X with ants,”\n        which would then be followed by a column of responses for “use blanket\n        with ants,” “use bucket with ants,” “use coin with ants,” and so on.\n      </p>\n\n      <h2>Next Steps</h2>\n      <p>\n        Part 3 of this series will be coming soon, as I’ve started working on a\n        prototype, and it’s already playable. Hit me up on Twitter,\n        <a href=\"https://twitter.com/mknepprath\">@mknepprath</a>, if you’d like\n        to give it a shot!\n      </p>\n\n      <small>\n        This is Part 2 of a series of posts about the game. Part 3 can be found \n        <a href=\"/writing/creating-lilt-part-3\">here</a>. Or \n        <a href=/writing/creating-lilt-part-1>start at the beginning</a>.\n      </small>",
      "content_text": "https://mknepprath.com/writing/creating-lilt-part-2",
      "date_published": "2016-01-21T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/creating-lilt-part-1",
      "url": "https://mknepprath.com/writing/creating-lilt-part-1",
      "title": "Creating lilt : Part 1",
      "content_html": "<header>\n        <h1>Creating lilt : Part 1</h1>\n      </header>\n\n      <p>\n        Roughly one year ago, I had an idea for a game that would be entirely\n        playable through Twitter. I don’t recall what sparked it, but the game\n        would be a text adventure where you’d tweet to the game’s Twitter\n        account, and it would respond with options for your next move. There are\n        a few reasons I thought (and still believe) Twitter would be the perfect\n        platform for this…\n      </p>\n\n      <h2>Why Twitter?</h2>\n      <ol>\n        <li>\n          Twitter hides tweets sent between two accounts unless you follow both\n          accounts, so your followers won’t get annoyed by you playing the game.\n          The tweets would be hidden.\n        </li>\n        <li>\n          On the flip side, if a few of your followers were also playing the\n          game and followed the game account (\n          <a href=\"https://twitter.com/familiarlilt\">@familiarlilt</a>), they\n          would see those tweets. It then becomes a great social experience,\n          where you’re all playing and figuring things out together.\n        </li>\n        <li>\n          Not long after I had the idea, Twitter released an update that\n          separated <b>Tweets</b> and <b>Tweets & replies</b> into separate\n          tabs. This means that your main Tweets feed won’t get bogged down with\n          game tweets : they’d only be visible under Tweets & replies.\n        </li>\n        <li>\n          Finally, Twitter is still \n          <a href=\"https://support.twitter.com/articles/14589\">\n            entirely usable through SMS\n          </a>\n          , meaning it can be played on any phone including old dumb phones.\n        </li>\n      </ol>\n\n      <h2>Gameplay</h2>\n      <p>\n        The big limitation with Twitter, that extends far beyond this game, is\n        tweet length. There are ways to circumvent this (e.g. images with text),\n        but I’ve decided to embrace the limitation. Here’s an example of a rough\n        early demo:\n      </p>\n      <blockquote>\n        <p>\n          @familiarlilt: You are resting in a glade. There is a waterfall to\n          your right and a strange statue to your left. What will you do?\n        </p>\n        <p>@mknepprath (me): look at waterfall</p>\n        <p>\n          @familiarlilt: The water looks pure. There are beautiful koi fish\n          swimming around in it.\n        </p>\n        <p>@mknepprath: drink from waterfall</p>\n        <p>\n          @familiarlilt: Something prevents you from touching the water with\n          your hands. Perhaps you need a tool for that?\n        </p>\n        <p>@mknepprath: look at statue</p>\n        <p>\n          @familiarlilt: The statue has an inscription that reads, “Fountain of\n          Youth.” There is a #ladle resting on the statue.\n        </p>\n      </blockquote>\n      <p>\n        I’m not sure how useful the hashtag is, especially considering how often\n        people have already used \n        <a href=\"https://twitter.com/search?q=%23ladle\">#ladle on Twitter</a> :\n        but I like the idea of using it as an indicator for things that can be\n        collected. Perhaps it would be more useful for more unique items or\n        achievements, so that you’d be able see what other players are doing\n        when clicking on it.\n      </p>\n      <p>\n        For the commands you send to @familiarlilt, my hope is to leave it open\n        to whatever people want to try. What works will usually be pretty\n        straight-forward, like “look at X” or “pick up Y,” but I would love to\n        add more to the game based on what people ask. An simple example : maybe\n        the game mentions a pond, but I didn’t plan anything for that pond\n        beyond just being a part of the setting. If a dozen people ask to “look\n        at pond” or “swim in pond,” I may consider adding an actual path to\n        explore there.\n      </p>\n      <p>\n        I’m still thinking about how an inventory might be included and managed.\n        It would also be cool to incorporate some sort of trading system or\n        places that can only be accessed through cooperation with another\n        player.\n      </p>\n      <p>\n        Oh, and I need to put together some art. I would love for there to be a\n        nice illustration for each item, achievement, and destination. All in\n        good time.\n      </p>\n\n      <h2>Onward</h2>\n      <p>\n        I’m in love with this crowdsourced text adventure D&D-like game, and I\n        can’t wait to get something together for all of you to try. I wrote this\n        so that I’d be held accountable for it, so please, give me crap until\n        you see some progress on this.\n      </p>\n      <p>\n        Before writing this, I did some searching to see if anything similar had\n        been done before. Here are a few. \n        <a href=\"https://www.twitter.com/140charADV\">@140charADV</a> wins the\n        award for being most similar and appearing long before I had the idea.\n        Now I’m going to play some \n        <a href=\"https://www.twitter.com/leonsintro\">@leonsintro</a>!\n      </p>\n      <ul>\n        <li>\n          <a href=\"https://twitter.com/YouAreCarrying\">@YouAreCarrying</a>\n        </li>\n        <li>\n          <a href=\"https://twitter.com/leonsintro\">@leonsintro</a>\n        </li>\n        <li>\n          <a href=\"https://www.twitter.com/140charADV\">@140charADV</a>\n        </li>\n        <li>\n          <a href=\"https://twitter.com/wnd_go\">@wnd_go</a>\n        </li>\n      </ul>\n\n      <small>\n        This is Part 1 of a series of posts about the game. Part 2 can be found \n        <a href=\"/writing/creating-lilt-part-2\">here</a>.\n      </small>",
      "content_text": "https://mknepprath.com/writing/creating-lilt-part-1",
      "date_published": "2015-11-21T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/defective-comics",
      "url": "https://mknepprath.com/writing/defective-comics",
      "title": "How DC Is Failing Us All",
      "content_html": "<img src=\"https://mknepprath.com/assets/detective-comics.jpg\" alt=\"The Joker in a box office booth\" />\n\n      <header>\n        <h1>How DC Is Failing Us All</h1>\n      </header>\n\n      <p>\n        I love Batman. The Dark Knight was one of my favorite superhero films of\n        all time. I want to love Superman, and I want to believe that DC has the\n        characters and the talent to put out quality films with gripping stories\n        and incredible action.\n      </p>\n      <p>Regardless, prepare to get robbed.</p>\n      <p>\n        DC is in a great place. Marvel’s done all the legwork of putting\n        together a expansive, yet cohesive, cinematic universe. It’s all there :\n        the planning, the timing, the pacing… DC should be taking this roadmap\n        and improving upon it. They even have the perfect hook : <b>Batman</b>.\n        Instead, DC appears to be trying to copy Marvel as closely as it can.\n        Poorly.\n      </p>\n      <p>\n        Case in point: Zack Snyder. Snyder is not Whedon no matter how much DC\n        wants to put him in that role. I have to imagine the decision to put him\n        in charge was purely based on his ability to direct a cool action\n        sequence, and the fact that he’d directed Watchmen. Yes, it’s a dark\n        superhero ensemble film, and it was okay… But DC seems to have missed\n        the rest of his track record. Snyder films have style, and in the case\n        of both Watchmen and 300, this was their saving grace : and both\n        borrowed heavily from their graphic novel counterparts to fill in the\n        story and character development. But Snyder’s canary in the coal mine is\n        Sucker Punch. Per Rotten Tomatoes (which gave it a generous 23%):\n      </p>\n      <blockquote>\n        <p>\n          It’s technically impressive and loaded with eye-catching images, but\n          without characters or a plot to support them, all of Sucker Punch’s\n          visual thrills are for naught.\n        </p>\n      </blockquote>\n      <p>\n        Now replace “Sucker Punch” with “Man of Steel.” Now go ahead and replace\n        it with “Batman v Superman.” Snyder does style, big visuals, action,\n        and… not much else beyond that. This will yield us some cool superhero\n        footage, but will not give us the cohesive cinematic universe we want.\n        What DC needs is someone whose strengths lie in character development,\n        working with assemble casts… someone like Whedon. Hopefully they see\n        that before it’s too late.\n      </p>\n      <p>\n        Unfortunately, it may be too late very soon. DC is in a hurry to catch\n        up to Marvel : Batman v Superman will feature the two titular characters\n        along with Wonder Woman, Cyborg, Aquaman, Lex Luthor and countless other\n        minor characters. This film is DC’s Avengers, but unlike The Avengers,\n        most people aren’t going to know or care about these characters : and\n        back to Snyder’s weaknesses, we’re not going to get any character\n        development in this film to make up for the fact that there was no build\n        up to it.\n      </p>\n      <p>\n        But hey, at least it’ll be fun, right? I wouldn’t be so sure about that,\n        either. DC seems to have doubled down on dark, gritty and serious. The\n        working theory is that DC’s detour into the bright and colorful, Green\n        Lantern, was a major flop, and their conclusion was that it was the fun\n        tone that caused the failure : not the fact that it was just a bad\n        movie. Whatever the reason, expect few jokes and even less fun.\n      </p>\n      <p>\n        None of this addresses the biggest problem, however. DC doesn’t have to\n        do anything about any of this, and they will still make a ton of money.\n        This sucks, because this means we, the fans, are the ones getting\n        cheated. They’ll lose our loyalty in the long run, but they’ll make bank\n        in the meantime. It doesn’t take a stretch of the imagination to see\n        which one they currently value more.\n      </p>\n\n      <hr />\n\n      <em>\n        Featured in Medium’s \n        <a href=\"https://medium.com/collections/10b58a4d5f4b\">Popcorn time</a> \n        collection curated by Medium staff.\n      </em>",
      "content_text": "Prepare to get robbed. • https://mknepprath.com/writing/defective-comics",
      "summary": "Prepare to get robbed.",
      "image": "https://mknepprath.com/assets/detective-comics.jpg",
      "date_published": "2015-04-29T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/giant-portraits",
      "url": "https://mknepprath.com/writing/giant-portraits",
      "title": "Giant Portraits",
      "content_html": "<header>\n        <h1>Giant Portraits</h1>\n      </header>\n      <p>\n        Upon deciding to take full advantage of my school’s unlimited black &\n        white printing, I first blew up a photo by \n        <a\n          href=\"https://twitter.com/carrphoto\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          Brandon Carr\n        </a> \n        to <b>10 feet wide by 6.5 feet tall</b>, then pulled it into Photoshop\n        and divided it into 8.5×11” sections. This first project ended up being\n        95 sheets of printer paper that I displayed in my dorm room at the time.\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/giant-portraits-1.jpg\" alt=\"Couch photo in being put up.\" />\n      <p />\n      <img src=\"https://mknepprath.com/assets/giant-portraits-2.jpg\" alt=\"Couch photo.\" />\n\n      <p>A similar piece was displayed in the mid-year student art show.</p>\n      <img src=\"https://mknepprath.com/assets/giant-portraits-8.jpg\" alt=\"Couch illustration in art show.\" />\n      <blockquote>\n        Above: Seniors Brandon Carr and Michael Knepprath pose next to their\n        piece entitled &ldquo;The Couch.&rdquo; Knepprath remarked, &ldquo;It\n        received quite a bit of positive feedback at the show, including the\n        janitor telling me how much he loved the couch because it reminded him\n        of the 70s. The piece is ultimately a memorial to this couch. We had to\n        throw it away due to how nasty and smelly it was!&rdquo; Sophomore\n        Tracey Melhouse praised Carr and Knepprath&apos;s creativity saying,\n        &ldquo;I love this mural because it is so them; they captured themselves\n        well.&rdquo;\n      </blockquote>\n\n      <p>\n        Unfortunately, the black & white yearbook photo doesn&apos;t do it\n        justice here. My school gave each student a limited number of color\n        prints, so I thought it&apos;d be clever to only use color in certain\n        tiles and print the rest in black & white.\n      </p>\n      <img src=\"https://mknepprath.com/assets/giant-portraits-5.png\" alt=\"Couch photo in color.\" />\n      <p>Here it is sliced up:</p>\n      <img src=\"https://mknepprath.com/assets/giant-portraits-6.png\" alt=\"Couch photo files.\" />\n\n      <p>\n        For the end-of-year student art show I decided to go even bigger. I\n        illustrated a portrait of myself and followed the same process, except\n        this time the piece ended up being 323 sheets of paper, or \n        <b>12 feet wide by 17.5 feet tall</b>.\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/giant-portraits-3.png\" alt=\"Giant photo illustration.\" />\n\n      <p>I was on a lift for a full day hanging it up.</p>\n\n      <blockquote>\n        Does anyone want to assist me in sticking paper to a wall? Any help\n        would be appreciated! YFAC 2:30pm. <br />\n        <br /> : Michael Knepprath (@mknepprath) \n        <a href=\"https://twitter.mknepprath.com/12934777027/\">April 27, 2010</a>\n      </blockquote>\n\n      <p>For context, check out the size of the artwork below my portrait:</p>\n\n      <img src=\"https://mknepprath.com/assets/giant-portraits-4.jpg\" alt=\"Giant photo.\" />\n\n      <p>\n        <a\n          href=\"https://twitter.com/benlundsten\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          Ben Lundsten\n        </a> \n        made an accompanying piece in response to this final portrait, and we\n        were both featured in the yearbook that year!\n      </p>\n      <img src=\"https://mknepprath.com/assets/giant-portraits-7.jpg\" alt=\"Giant photos in the yearbook.\" />",
      "content_text": "My biggest college art project. • https://mknepprath.com/writing/giant-portraits",
      "summary": "My biggest college art project.",
      "image": "https://mknepprath.com/assets/giant-portraits-2.jpg",
      "date_published": "2014-11-29T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/thoughts-on-the-apple-watch",
      "url": "https://mknepprath.com/writing/thoughts-on-the-apple-watch",
      "title": "Thoughts on the Apple Watch",
      "content_html": "<header>\n        <h1>Thoughts on the Apple Watch</h1>\n      </header>\n\n      <p>\n        The <a href=\"http://www.apple.com/watch/design\">Watch</a> is here, and\n        it’s comical to see \n        <a href=\"http://venturebeat.com/2014/09/09/apple-watch-is-ugly-and-boring-and-steve-jobs-would-have-agreed\">\n          history repeat itself once again \n        </a>\n        (\n        <a href=\"http://adage.com/article/al-ries/iphone-fail/117355\">iPhone</a>\n        , \n        <a href=\"http://www.infoworld.com/d/windows/why-apples-rumored-itablet-will-fail-big-time-119\">\n          iPad\n        </a>\n        ). The media cycle has become predictable when it comes to an Apple\n        product launch: hype, hype, HYPE, disappointment, acceptance (once it\n        becomes clear that consumers love it).\n      </p>\n      <p>\n        Apple’s competitors have been working very hard to make a cool wrist\n        gadget : fashion being an afterthought. My main takeaway from this event\n        is that Apple has clearly been studying a great deal about how things\n        work in the watch industry, addressing fashion first : because they’ve\n        learned that regular people aren’t going to stick a big, ugly computer\n        on their wrist no matter how many superpowers it grants them.\n      </p>\n      <p>\n        I think the Watch is going to be a success in time, especially as it\n        gets thinner over the next few generations.\n      </p>",
      "content_text": "https://mknepprath.com/writing/thoughts-on-the-apple-watch",
      "date_published": "2014-09-10T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/the-notebook",
      "url": "https://mknepprath.com/writing/the-notebook",
      "title": "My Review of The Notebook (2004)",
      "content_html": "<img src=\"https://mknepprath.com/assets/the-notebook-film.jpeg\" alt=\"A still featuring the stars of The Notebook (2004).\" />\n      <header>\n        <h1>My Review of The Notebook (2004)</h1>\n      </header>\n      <blockquote>\n        “Love is like the wind, you can’t see it but you can feel it.”\n      </blockquote>\n      <blockquote>\n        “The reason it hurts so much to separate is because our souls are\n        connected.”\n      </blockquote>\n      <blockquote>\n        “I love you more than there are stars in the sky and fish in the sea.”\n      </blockquote>\n\n      <p>\n        No words could strike more fear in my heart than, “based on a novel by\n        Nicholas Sparks.”\n      </p>\n      <p>\n        <i>The Notebook</i> is a romantic drama released ten years ago today to\n        lukewarm reviews. The general consensus seemed to be that the film was\n        “trying too hard,” lazy, dismissive, melodramatic, idiotic… and yet, it\n        ended up gaining a massive cult following. I would go so far as to\n        suggest that it is one of the most memorable films of 2004.\n      </p>\n      <p>\n        The film begins with an elderly man in a nursing home telling a story\n        about two lovers to a fellow patient who is suffering from dementia.\n        Eventually, we find out the subjects of the story are actually them when\n        they first met. They cross paths several times, until eventually they\n        realize they can no longer be apart. Back to the present, the story\n        causes Allie to become lucid and remember that this is actually their\n        story. They get to enjoy some time together before the dementia\n        reappears.\n      </p>\n      <p>\n        I was hesitant to watch this film due to its reputation, but am happy to\n        announce that I loved it. Noah (Ryan Gosling), was a likable and\n        relatable character – and the viewer could achieve a level of catharsis\n        viewing his early attempts to woo Allie (Rachel McAdams). Both actors\n        did a marvelous job, and their strong chemistry was apparent throughout\n        the course of the film.\n      </p>\n      <p>\n        My theory about the half-hearted reviews is this, you have to be in the\n        right mood to watch this film. If you don’t allow yourself to be drawn\n        in, you won’t get it. I also believe that it gets better when you get\n        married and as you grow older. Youth view marriage and old age as\n        something that they see, but are totally unrelated to themselves. With\n        age, you begin to realize how scary the premise of this film really is.\n        Imagine having such a wonderfully romantic story with someone, only to\n        have that snatched from both of you. Absolutely heart-wrenching.\n      </p>\n      <p>\n        At the end of the day, this one of the few romantic dramas I did not\n        regret watching – and that’s saying a lot.\n      </p>\n\n      <blockquote>\n        “So it’s not gonna be easy. It’s going to be really hard; we’re gonna\n        have to work at this everyday, but I want to do that because I want you.\n        I want all of you, forever, everyday. You and me… everyday.” – Noah\n        Calhoun\n      </blockquote>\n\n      <hr />\n\n      <em>\n        Published on \n        <a href=\"https://letterboxd.com/tardycritic/film/the-notebook/\">\n          Tardy Critic\n        </a>\n        , a film blog where movies are reviewed ten years late.\n      </em>",
      "content_text": "Love is like the wind, you can’t see it but you can feel it. • https://mknepprath.com/writing/the-notebook",
      "summary": "Love is like the wind, you can’t see it but you can feel it.",
      "image": "https://mknepprath.com/assets/the-notebook-film.jpeg",
      "date_published": "2014-06-25T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/family-sharing",
      "url": "https://mknepprath.com/writing/family-sharing",
      "title": "The Significance of Family Sharing",
      "content_html": "<header>\n        <h1>The Significance of Family Sharing</h1>\n      </header>\n\n      <p>\n        Apple announced a new feature during WWDC called \n        <a href=\"http://www.apple.com/ios/ios8/family-sharing\">\n          Family Sharing\n        </a> \n        that will “bring harmony to your family’s digital life” by allowing up\n        to six users share apps they buy using the same credit card. This is a\n        genius play, but not all the reasons are obvious.\n      </p>\n      <p>\n        For one thing, people were sharing their Apple IDs with family and\n        friends to do this, anyway. While this caused some confusion within the\n        accounts, it was worth it to save some money through not having to buy\n        the same app for each family member. How Apple reacted to this behavior\n        is telling : rather than doing the obvious by trying to prevent people\n        from “cheating the system,” they’ve endorsed it by officially allowing\n        family to share apps among each other for free.\n      </p>\n      <p>\n        But isn’t this potentially cutting developers’ revenue by a significant\n        amount? No, and I believe the opposite could be true. It’s far easier to\n        justify buying an app for six people than one. Anyone sharing their ID\n        before will continue their current (and now sanctioned) behavior, while\n        those who weren’t may now consider buying apps that they wouldn’t have\n        otherwise.\n      </p>\n      <p>\n        This is also great for Apple, because now that they’ve officially\n        addressed customers’ desire to share apps, they’ve brought it into their\n        realm of control : and can build upon it. Work on this has already\n        begun. My favorite slide from the announcement of Family Sharing is\n        pictured above.\n      </p>\n      <p>\n        I love Family Sharing. It shows that Apple is very much in-touch with\n        how their platform is being used, is making smart decisions, and is\n        willing to make sacrifices for a better customer experience.\n      </p>",
      "content_text": "https://mknepprath.com/writing/family-sharing",
      "date_published": "2014-06-04T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/apples-future-wearable",
      "url": "https://mknepprath.com/writing/apples-future-wearable",
      "title": "Apple’s Future Wearable",
      "content_html": "<header>\n        <h1>Apple’s Future Wearable</h1>\n      </header>\n\n      <p>\n        I’d like to preface this post by saying everything being proposed here\n        is entirely speculation and may never see the light of day. Speculation\n        is fun, though – so let’s get into it.\n      </p>\n      <p>\n        Rumors of an Apple iWatch have been making the rounds for quite some\n        time now. I’d normally brush these aside due to lack of evidence, but a\n        few recent events have brought me back around to the idea.\n      </p>\n      <ol>\n        <li>\n          <a href=\"http://www.theverge.com/2013/4/23/4258272/apple-tim-cook-teases-exciting-new-product-category\">\n            Tim Cook has teased the possibility of new product categories this\n            fall.\n          </a> \n          This, in it of itself, does not imply a wearable is on the way. He\n          could be referring to the rumored bigger iPhone. Or anything else,\n          really.\n        </li>\n        <li>\n          <a href=\"http://9to5mac.com/2014/03/17/this-is-healthbook-apples-first-major-step-into-health-fitness-tracking/\">\n            Screenshots of a Healthbook app have leaked.\n          </a> \n          Again, this does not necessarily prove the existence of a wearable.\n          The iPhone is \n          <a href=\"http://gizmodo.com/how-apples-m7-chip-makes-the-iphone-5s-the-ultimate-tr-1286594287\">\n            perfectly capable of tracking many of the items listed in this app\n          </a>\n          , and others aren’t trackable by anything but manual entry.\n        </li>\n        <li>\n          <a href=\"http://www.digitaltrends.com/mobile/nike-focusing-software-excited-future-plans-apple/#!GiOcY\">\n            Nike has all but abolished it’s FuelBand hardware team, and plans to\n            focus on software.\n          </a> \n          Nike and Apple have always been very close. Nike isn’t a hardware\n          company. Apple is. I think this is the biggest sign of what’s to come.\n          My guess is that Apple and Nike have been working together on a\n          product being designed and developed by Apple that will integrate with\n          Nike+ (among many other things). I wouldn’t be surprised if we see\n          this product being sold in Apple <em>and</em> Nike stores upon its\n          release.\n        </li>\n      </ol>\n      <p>\n        Clearly, this product will not ever be the cash cow that the iPhone\n        ended up being. I think Apple is okay with that. For one, it will\n        strengthen Apple’s current ecosystem of services and products. Second,\n        assuming it’s a well designed and useful product, it will help people\n        get and stay healthy. Apple may be willing to “take the hit” for the\n        common good, as illustrated by Tim Cook’s retort to a conservative\n        finance group who wanted him to commit to only doing things that were\n        profitable in regard to Apple’s energy sustainability programs, “When we\n        work on making our devices accessible by the blind, I don’t consider the\n        bloody ROI.”\n      </p>",
      "content_text": "https://mknepprath.com/writing/apples-future-wearable",
      "date_published": "2014-04-29T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/pokefy-your-skype",
      "url": "https://mknepprath.com/writing/pokefy-your-skype",
      "title": "Pokéfy Your Skype",
      "content_html": "<header>\n        <h1>Pokéfy Your Skype</h1>\n      </header>\n\n      <p>\n        If you use Skype on a regular basis, you get used to the constant bleeps\n        and bloops it emits when people log in or out, send messages to you,\n        send you files, etc. I discovered yesterday (due to a prank) that you\n        can actually set voice messages for each of these things, so I’ve put\n        together a new Pokémon-themed Notifications scheme! \n      </p>\n\n      <table>\n        <tbody>\n          <tr>\n            <th>Event:</th>\n            <th>Speak text:</th>\n          </tr>\n          <tr>\n            <td>When I Sign In</td>\n            <td>Gotta catch ‘em all!</td>\n          </tr>\n          <tr>\n            <td>When I Sign Out</td>\n            <td>Michael is out of usable Pokémon! Michael blacked out!</td>\n          </tr>\n          <tr>\n            <td>Contact Becomes Available</td>\n            <td>Wild “@” appeared!</td>\n          </tr>\n          <tr>\n            <td>Contact Becomes Unavailable</td>\n            <td>“@” fainted.</td>\n          </tr>\n          <tr>\n            <td>First Message in Conversation</td>\n            <td>“@” wants to battle!</td>\n          </tr>\n          <tr>\n            <td>New Message in Current Conversation</td>\n            <td>“@” used TACKLE!</td>\n          </tr>\n          <tr>\n            <td>Contact Request Received</td>\n            <td>Michael used POKéBALL!</td>\n          </tr>\n          <tr>\n            <td>Contacts Received</td>\n            <td>Gotcha! “@” was caught!</td>\n          </tr>\n          <tr>\n            <td>Incoming File Transfer</td>\n            <td>“@” used FILE TRANSFER!</td>\n          </tr>\n          <tr>\n            <td>File Transfer Completed</td>\n            <td>It’s super effective!</td>\n          </tr>\n          <tr>\n            <td>File Transfer Failed</td>\n            <td>But nothing happened!</td>\n          </tr>\n        </tbody>\n      </table>\n      <p>\n        Are you ready? A world of dreams and adventures with POKéMON awaits!\n        Let’s go!\n      </p>",
      "content_text": "https://mknepprath.com/writing/pokefy-your-skype",
      "date_published": "2014-04-02T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/design-is-how-it-works",
      "url": "https://mknepprath.com/writing/design-is-how-it-works",
      "title": "Design Is How It Works",
      "content_html": "<header>\n        <h1>Design Is How It Works</h1>\n      </header>\n\n      <p>\n        <a href=\"https://twitter.com/dwiskus\">Dave Wiskus</a>\n        &nbsp;in the \n        <a href=\"http://www.imore.com/vector-34-importance-design\">\n          latest episode of Vector\n        </a>\n        :\n      </p>\n      <blockquote>\n        <p>\n          “People will say that they’ve been going through Dribbble looking for\n          a designer… and that always shocks me. If you’re searching for an app\n          designer or interaction designer based on the way they make things\n          look, that’s so backwards to me. The coat of paint is the last thing\n          you put on. It would be like choosing a builder based on the color of\n          the buildings they’ve made.”\n        </p>\n      </blockquote>\n      <p>\n        He’s addressing people who have a confused idea of what the definition\n        of design is. An app’s design should be self-fulfilling – an app’s\n        purpose dictates its design. If a platform, service, or product looks\n        pleasant, but is unpleasant to use, it is designed poorly. In the words\n        of Steve Jobs:\n      </p>\n      <blockquote>\n        <p>\n          “Most people make the mistake of thinking design is what it looks\n          like. People think it’s this veneer : that the designers are handed\n          this box and told, ‘Make it look good!’ That’s not what we think\n          design is. It’s not just what it looks like and feels like. Design is\n          how it works.”\n        </p>\n      </blockquote>",
      "content_text": "https://mknepprath.com/writing/design-is-how-it-works",
      "date_published": "2014-03-20T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/the-importance-of-design",
      "url": "https://mknepprath.com/writing/the-importance-of-design",
      "title": "The Importance of Design",
      "content_html": "<header>\n        <h1>The Importance of Design</h1>\n      </header>\n\n      <p>\n        I’m not even halfway through the \n        <a href=\"http://www.imore.com/vector-34-importance-design\">\n          latest episode of Vector\n        </a>\n        , but there have been so many great quotes about topics that have been\n        on my mind lately, I had to write a quick post about it. \n        <a href=\"https://twitter.com/reneritchie\">Rene Ritchie</a> asks:\n      </p>\n      <blockquote>\n        <p>\n          “When should you give users settings and choices and options, and when\n          should you do that heavy lifting for them?”\n        </p>\n      </blockquote>\n      <p>\n        Straightforward question – and the answer was obvious to me up through a\n        couple years ago. We should be given as many settings, choices, and\n        options as possible so we can optimize our experience to fit our every\n        want or need.\n      </p>\n      <p>\n        I’ve changed my mind, however. Here is the candid response I gave to my\n        brother when he recently asked, “Why do artists use Macs?”:\n      </p>\n      <blockquote>\n        <p>\n          “PCs are for people who want to have a computer and do computery\n          things – experiment with them, customize them, optimize them, etc –\n          and that’s fine. The Mac is more for people who want a computer for\n          getting stuff done rather than have to deal with anything related to\n          the computer itself.”\n        </p>\n      </blockquote>\n      <p>\n        <a href=\"https://twitter.com/dwiskus\">Dave Wiskus</a> shared similar\n        thoughts with Rene in response to his question:\n      </p>\n      <blockquote>\n        <p>\n          “I lost so many years getting the software to work that I could’ve\n          spent learning the software. If I had spent that same amount of time\n          in front of a Mac learning Photoshop, I would’ve been years ahead of\n          where I am now. That’s time that I, and so many other people, have\n          lost. And so now I feel that my job in designing a piece of software\n          is to not steal that time from people. I want to make sure they’re not\n          wasting their time trying to figure out how the app works, and instead\n          writing their note, and then moving on.”\n        </p>\n      </blockquote>\n      <p>\n        In essence, a designer’s job is to reduce the friction between a person\n        and their goal, whether that be creating a design, jotting down a note,\n        sharing a photo – basically anything. The fewer steps there are between\n        a person wanting to do something and achieving it – the better the\n        design.\n      </p>\n      <p>Rene:</p>\n      <blockquote>\n        <p>\n          “The apps that I like the most are the ones that don’t let me mess\n          around – they basically force me into doing what I’m supposed to do.\n          In a way, it’s sort of enabling. Yes, I can’t customize the way I\n          want. That is a loss, but the gain is so much more valuable.”\n        </p>\n      </blockquote>",
      "content_text": "https://mknepprath.com/writing/the-importance-of-design",
      "date_published": "2014-03-20T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/my-only-suggestion-for-facebook-paper",
      "url": "https://mknepprath.com/writing/my-only-suggestion-for-facebook-paper",
      "title": "My Only Suggestion For Facebook Paper",
      "content_html": "<header>\n        <h1>My Only Suggestion For Facebook Paper</h1>\n      </header>\n\n      <p>\n        First of all, great job to \n        <a href=\"https://twitter.com/mike_matas\">Mike Matas</a> and his team.\n        This new Facebook experience is a joy to use.\n      </p>\n      <p>\n        I do have one gripe with it, however, and I only bring it up because I\n        feel that the solution is obvious and a missed opportunity. Allow me to\n        introduce Facebook lists:\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/facebook-paper-lists.png\" alt=\"Facebook lists\" />\n\n      <p>Facebook lists are powerful, and here’s why:</p>\n      <ol>\n        <li>\n          When you create a list, you have the ability to view it as a Newsfeed\n          containing posts exclusively by the people you chose to be in that\n          list.\n        </li>\n        <li>\n          You can\n          <a href=\"http://www.mknepprath.com/wp-content/uploads/2014/02/Screen-Shot-2014-02-12-at-8.47.19-AM.png\">\n             \n            save lists to your favorites section\n          </a> \n          for easy access.\n        </li>\n        <li>\n          You can choose to share a post with only the people in a certain list.\n        </li>\n        <li>\n          Finally, Facebook already dynamically generates lists for you (called\n          Smart Lists) based on employment, location, school, and family. With\n          those, most of the work is done for you already.\n        </li>\n      </ol>\n      <p>\n        The one problem with Facebook lists? It’s a power user feature that\n        normal people do not use. I believe it is for this reason that lists\n        weren’t even included in Facebook Paper. And here’s where Facebook Paper\n        comes in.\n      </p>\n      <p>\n        Facebook Paper is largely a re-imagining of the current Facebook\n        experience, but does include something new: Sections.\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/facebook-paper-sections.png\" alt=\"Facebook Paper sections\" />\n\n      <p>\n        If you swipe to the right on the featured post (“Movie night!” depicted\n        above), it takes you to new Newsfeeds (such as Tech, Pop Life, Score,\n        Headlines) containing curated news content. You don’t have control over\n        what appears in these sections, these were pre-decided by Facebook\n        through agreements they’ve made with certain content providers. The one\n        problem with Facebook Sections? I don’t need a new source of news, and I\n        don’t find this source to be as easily digestible as others (such as\n        Twitter).\n      </p>\n      <p>\n        Do you see where I’m going with this? \n        <b>Facebook Paper Sections should be Facebook lists.</b> And here are\n        the reasons I find it particularly obvious:\n      </p>\n      <ol>\n        <li>\n          When swiping to the right of your main Newsfeed, it makes sense that\n          you would find alternate Newsfeeds. This already exists with Facebook\n          lists.\n        </li>\n        <li>\n          Typically, the problem with implementing something like this is that\n          users would have to go through the process of creating these alternate\n          lists. This has already been taken care of with Smart Lists. They have\n          a set of default lists, dynamically generated by Facebook.\n        </li>\n        <li>\n          Facebook Paper is an experiment, giving them room to play with new\n          ways of letting users create and manage lists.\n        </li>\n      </ol>\n      <p>\n        Not a single service has figured out how to get lists to work. Google\n        came closest with Circles on Google+, but lists on Facebook and Twitter\n        are both duds thus far. Facebook Paper gives Facebook an opportunity to\n        make lists work by easing users into using them first, then introducing\n        the more useful and powerful features as needed.\n      </p>\n      <p>\n        <b>Bonus read:</b> \n        <a href=\"https://brianlovin.com/design-details/paper-facebook-ios\">\n          Design Details: Paper by Facebook\n        </a> \n        by Brian Lovin\n      </p>",
      "content_text": "https://mknepprath.com/writing/my-only-suggestion-for-facebook-paper",
      "date_published": "2014-02-12T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/vine-introduces-web-profiles",
      "url": "https://mknepprath.com/writing/vine-introduces-web-profiles",
      "title": "Vine Introduces Web Profiles",
      "content_html": "<header>\n        <h1>Vine Introduces Web Profiles</h1>\n      </header>\n\n      <p>\n        I wonder if <a href=\"https://vine.co/\">Vine</a>\n        ‘s web profiles will do better than Instagram’s. Does anyone visit\n        those? Vine’s announcement comes with a new feature: TV mode. This blows\n        up the Vines to the size of your browser and plays them in sequence.\n      </p>",
      "content_text": "https://mknepprath.com/writing/vine-introduces-web-profiles",
      "date_published": "2014-01-03T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/app-of-the-year-duolingo",
      "url": "https://mknepprath.com/writing/app-of-the-year-duolingo",
      "title": "App Of The Year: Duolingo",
      "content_html": "<header>\n        <h1>App Of The Year: Duolingo</h1>\n      </header>\n\n      <p>\n        This really is a cool app, and it’s gone through quite the\n        transformation since it was first released to the App Store. \n        <a href=\"https://web.archive.org/web/20140127084831/http://www.mknepprath.com/how-to-use-duolingo/\">\n          I wrote about the service\n        </a> \n        when it first came out as a website, which is also worth a look if\n        you’re interested in learning a second language. They now offer courses\n        on German, French, Spanish, Portuguese, and Italian.\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/app-of-the-year-duolingo.jpg\" alt=\"Screenshot of the app Duolingo\" />",
      "content_text": "https://mknepprath.com/writing/app-of-the-year-duolingo",
      "date_published": "2013-12-20T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/spotify-app-adds-free-option",
      "url": "https://mknepprath.com/writing/spotify-app-adds-free-option",
      "title": "Spotify App Adds Free Option",
      "content_html": "<header>\n        <h1>Spotify App Adds Free Option</h1>\n      </header>\n\n      <p>\n        You can finally listen to all of your Spotify playlists on your phone\n        without paying for Premium. Only one catch – you have to listen to them\n        on shuffle. Not bad.\n      </p>\n      <p>\n        In other news, I hear their desktop client just went through a major\n        redesign. Haven’t seen it yet, but I look forward to doing so!\n      </p>",
      "content_text": "https://mknepprath.com/writing/spotify-app-adds-free-option",
      "date_published": "2013-12-19T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/angry-birds-goes-nintendo",
      "url": "https://mknepprath.com/writing/angry-birds-goes-nintendo",
      "title": "Angry Birds Goes Nintendo",
      "content_html": "<header>\n        <h1>Angry Birds Goes Nintendo</h1>\n      </header>\n\n      <p>\n        Rovio just released \n        <a href=\"https://itunes.apple.com/us/app/angry-birds-go!/id642821482?mt=8\">\n          Angry Birds Go!\n        </a> \n        for iOS, and I wonder if their decision to develop this had anything to\n        do with Nintendo saying they would never develop for mobile phones. The\n        longer Nintendo waits, the more chances other developers will have to\n        jump in and \n        <a href=\"https://itunes.apple.com/us/app/oceanhorn/id708196645?mt=8\">\n          take their rupees\n        </a>\n        .\n      </p>",
      "content_text": "https://mknepprath.com/writing/angry-birds-goes-nintendo",
      "date_published": "2013-12-16T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/ifttt-adds-ios-location",
      "url": "https://mknepprath.com/writing/ifttt-adds-ios-location",
      "title": "IFTTT Adds iOS Location",
      "content_html": "<header>\n        <h1>IFTTT Adds iOS Location</h1>\n      </header>\n\n      <p>\n        <a href=\"http://www.mknepprath.com/ifttt/\">IFTTT</a> introduced a new\n        channel today: iOS Location. Yep, this means you can make your other\n        channels interact with where you are located at any time. Want your\n        lights to automatically turn on when you get home? Track when you arrive\n        or leave from work? Send your spouse a text when you’re heading home?\n        IFTTT can automate all of that. Pretty cool, huh?\n      </p>",
      "content_text": "https://mknepprath.com/writing/ifttt-adds-ios-location",
      "date_published": "2013-12-12T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/instagram-direct",
      "url": "https://mknepprath.com/writing/instagram-direct",
      "title": "Instagram Direct",
      "content_html": "<header>\n        <h1>Instagram Direct</h1>\n      </header>\n\n      <p>\n        Instagram’s introduced it’s new direct messaging feature, along with\n        some other iOS 7-y UI changes. It’s similar to Facebook Messenger in\n        that it tells you when others have seen the photo you shared with them.\n        Does anyone actually like read receipts?\n      </p>",
      "content_text": "https://mknepprath.com/writing/instagram-direct",
      "date_published": "2013-12-12T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/steamos-available-december-13th",
      "url": "https://mknepprath.com/writing/steamos-available-december-13th",
      "title": "SteamOS Available December 13th",
      "content_html": "<header>\n        <h1>SteamOS Available December 13th</h1>\n      </header>\n\n      <p>\n        <a href=\"http://cir.ca/s/MeJ\">Anyone interested?</a> I have a lot of\n        respect for Steam, and appreciate their contributions to the gaming\n        community. I sense a bit of skepticism around their latest endeavors\n        including SteamOS, Steam Machines, and their new controller – but if\n        anyone is going to eat this stuff up, it’s Steam’s community. \n      </p>\n      <p>\n        My question is, how many of these people already have their computer set\n        up in their living room as their main device for consuming all digital\n        media (films, games, etc)? I doubt they’d replace this set up with a\n        Steam machine. Keyboards can be cumbersome on the couch, however, so I\n        could see them getting the new controller if it is as precise as Steam\n        says.\n      </p>",
      "content_text": "https://mknepprath.com/writing/steamos-available-december-13th",
      "date_published": "2013-12-12T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/this-goes-out-to-gruber",
      "url": "https://mknepprath.com/writing/this-goes-out-to-gruber",
      "title": "Google's Android And The HTC/Amazon Rumor",
      "content_html": "<header>\n        <h1>Google's Android And The HTC/Amazon Rumor</h1>\n      </header>\n\n      <p>\n        Now seems like a good time for \n        <a href=\"http://arstechnica.com/gadgets/2013/10/googles-iron-grip-on-android-controlling-open-source-by-any-means-necessary/\">\n          this article by Ron Amadeo\n        </a> \n        to resurface. Here are his key points:\n      </p>\n      <p>\n        1. Android started out as open source, but the open source apps that\n        Google was developing are slowly being replaced by closed source Google\n        apps. When they are replaced, Google stops developing the open source\n        app. The best example of this is Search, which can be seen on \n        <a href=\"http://arstechnica.com/gadgets/2013/10/googles-iron-grip-on-android-controlling-open-source-by-any-means-necessary/\">\n          the first page of Ron’s article\n        </a>\n        . This has also happened with \n        <a href=\"http://arstechnica.com/gadgets/2013/10/googles-iron-grip-on-android-controlling-open-source-by-any-means-necessary/2/\">\n          Music, Calendar, the keyboard, Camera, and as Ron predicted, SMS\n          messaging\n        </a>\n        . Since this article was published, Google has announced that Google\n        Hangouts now supports SMS. Google’s grip just got a little tighter.\n      </p>\n      <p>\n        2. If you want to use these closed source apps developed by Google, you\n        have to join the Open Handset Alliance (OHA). To be in the OHA you have\n        to contractually agree to not develop phones without Google’s apps. If\n        you do, you get kicked out. You are then either stuck with the\n        undeveloped open source apps, or you have to develop your own.\n      </p>\n      <p>\n        3. If you want to develop a new Android OS, you are going to have a hard\n        time finding a phone manufacturer to carry it, because they are all\n        stuck in the OHA.\n      </p>\n      <p>\n        4. Finally, you’re going to have a hard time getting people to develop\n        apps for your Android OS, because Google offers many APIs that make it\n        easy to develop apps… but they only work with Google Play Services,\n        which is only available through the package of Google apps you get by\n        being a member of the OHA.\n      </p>\n      <p>\n        5. The only company that has been able to survive without being a member\n        of the OHA is Amazon. They develop their own clones to the apps that\n        Google stops developing.\n      </p>\n      <p>\n        My question: Rumor has it that HTC is developing a phone for Amazon, but\n        HTC is a member of the OHA. Is Google going to kick them out, and can an\n        HTC/Amazon phone survive without Google’s support?\n      </p>",
      "content_text": "https://mknepprath.com/writing/this-goes-out-to-gruber",
      "date_published": "2013-10-30T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/googles-icons-on-ios",
      "url": "https://mknepprath.com/writing/googles-icons-on-ios",
      "title": "Google’s Icons On iOS",
      "content_html": "<header>\n        <h1>Google’s Icons On iOS</h1>\n      </header>\n\n      <p>\n        Google spent all year unifying their iOS icons with a consistent ridge\n        running along the bottom of each. Then iOS 7 came out and the shape of\n        the app icons changed. What a mess. Some are fixed, others are still\n        amiss. My opinion? It’s time to ditch the ridge. Google Maps is the only\n        one that looks good on my phone anymore.\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/googles-icons-on-ios.jpg\" alt=\"Google's icons on iOS\" />",
      "content_text": "https://mknepprath.com/writing/googles-icons-on-ios",
      "date_published": "2013-10-25T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/apple-television",
      "url": "https://mknepprath.com/writing/apple-television",
      "title": "Why Does Everyone Think Apple Plans On Releasing A Television Set?",
      "content_html": "<header>\n        <h1>Why Does Everyone Think Apple Plans On Releasing A Television Set?</h1>\n      </header>\n\n      <p>It&apos;s not going to happen.</p>",
      "content_text": "https://mknepprath.com/writing/apple-television",
      "date_published": "2013-10-23T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/square-cash",
      "url": "https://mknepprath.com/writing/square-cash",
      "title": "Square Cash",
      "content_html": "<header>\n        <h1>Square Cash</h1>\n      </header>\n\n      <p>\n        <a href=\"http://allthingsd.com/20131015/the-money-is-in-the-email/\">\n          Walter S. Mossberg\n        </a>\n        :\n      </p>\n      <blockquote>\n        <p>\n          The people helping me test were generally wowed. One called it\n          “slick.” Another replied: “Done. Two secs.” A third, with whom I had\n          trouble using PayPal last year, said she’d use it “1,000 percent.”\n        </p>\n      </blockquote>\n      <p>\n        <a href=\"https://squareup.com/\">Square</a> now lets you email cash to\n        anyone free of charge. Sounds too good to be true, but judging from the\n        quotes above, it’s really that magical. Keep an eye on Square – it seems\n        that they will be playing a defining role in how we work with our money\n        in the future.\n      </p>",
      "content_text": "https://mknepprath.com/writing/square-cash",
      "date_published": "2013-10-16T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/instagram-for-ios-7",
      "url": "https://mknepprath.com/writing/instagram-for-ios-7",
      "title": "Instagram For iOS 7",
      "content_html": "<header>\n        <h1>Instagram For iOS 7</h1>\n      </header>\n\n      <p>\n        Let me preface this post by saying that I love redesigns and all of the\n        apps that I’ve seen iOS 7 updates for have been great… until this one. I\n        appreciate what they were trying to do, but this just feels rushed to\n        me. None of the divider lines are necessary, they only serve to clutter\n        up the UI. Also, why have the profile pictures been changed to circles?\n        It’s not consistent with any of the other elements in this app.\n      </p>\n      <p>\n        Designing for iOS 7 requires more than just flattening bubbly elements\n        and pulling ideas straight from Apple’s new apps. Some apps, like \n        <a href=\"https://medium.com/what-i-learned-building/b31868b76721\">\n          Mailbox\n        </a>\n        , \n        <a title=\"007\" href=\"http://vesperapp.co/blog/vesper-1-007/#more-143\">\n          Vesper\n        </a>\n        , and <a href=\"http://www.realmacsoftware.com/clear/\">Clear</a>, were\n        essentially iOS 7 apps built for iOS 6, so they didn’t require many\n        changes. Other apps were very iOS 6-y and required major overhauls.\n        These include \n        <a href=\"http://www.theverge.com/2013/9/18/4743908/evernote-ios-7-iphone-ipad-complete-redesign-update\">\n          Evernote\n        </a>\n        , \n        <a href=\"http://www.theverge.com/2013/9/20/4751892/best-new-apps-omnifocus-2\">\n          OmniFocus 2\n        </a>\n        , and \n        <a href=\"http://blog.hipmunk.com/hipmunk-news-updated-android-and-ios-7-hipmunk-apps/\">\n          Hipmunk\n        </a>\n        . Instagram’s redesign is just a flattened iOS 6 app with little regard\n        to simplifying or optimization.\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/instagram-for-ios-7.png\" alt=\"Screenshot of Instagram's redesign for iOS 7\" />",
      "content_text": "https://mknepprath.com/writing/instagram-for-ios-7",
      "date_published": "2013-09-26T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/ios-7-flashlight",
      "url": "https://mknepprath.com/writing/ios-7-flashlight",
      "title": "iOS 7 Flashlight",
      "content_html": "<header>\n        <h1>iOS 7 Flashlight</h1>\n      </header>\n\n      <p>\n        I submitted this subtle detail to \n        <a href=\"http://littlebigdetails.com/\">Little Big Details</a>, but I\n        though it was worth sharing here as well. Apple sweats the details.\n        (Hint: Look at the on/off switch on the flashlight.)\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/ios-7-flashlight.jpg\" alt=\"Screenshot of the flashlight app icon in iOS 7\" />",
      "content_text": "https://mknepprath.com/writing/ios-7-flashlight",
      "date_published": "2013-09-26T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/iphone-naming-conventions",
      "url": "https://mknepprath.com/writing/iphone-naming-conventions",
      "title": "iPhone Naming Conventions",
      "content_html": "<header>\n        <h1>iPhone Naming Conventions</h1>\n      </header>\n\n      <p>\n        Listening to the latest \n        <a href=\"https://web.archive.org/web/20131026111646/http://www.muleradio.net/thetalkshow/\">\n          Talk Show\n        </a>\n        , I heard Gruber give his prediction for where Apple will go with future\n        iPhone names. His prediction: iPhone 6 on top, then iPhone CS, then 5C\n        free with a plan. My prediction for 2014: iPhone 6 on top, then the 5S,\n        then the 5C free with a plan. Then in 2015 we’ll see a 6S on top, 6C,\n        5S. See how the C-series alternates between the bottom two tiers each\n        year? If the pattern continues it would look like this… 2016: 7, 6S, 6C,\n        2017: 7S, 7C, 6S.\n      </p>",
      "content_text": "https://mknepprath.com/writing/iphone-naming-conventions",
      "date_published": "2013-09-24T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/ios-7-eve",
      "url": "https://mknepprath.com/writing/ios-7-eve",
      "title": "iOS 7 Eve",
      "content_html": "<header>\n        <h1>iOS 7 Eve</h1>\n      </header>\n\n      <p>\n        Apple is releasing iOS 7 to the public tomorrow, and I couldn’t be more\n        excited! In case you haven’t heard, Apple has redesigned their entire\n        mobile operating system from the ground up. Every single pixel has\n        changed. They’ve been tweaking and perfecting it since it’s big reveal\n        at WWDC earlier this year… and the day has finally come for me to try it\n        out for myself. One thing I find particularly interesting about this\n        update is how much it reveals \n        <a href=\"https://tapfame.com/ios7/\">\n          the use of Apple’s default chrome in third party apps\n        </a>\n        . This is the biggest change to iOS since the first iPhone came out, and\n        I welcome it.\n      </p>\n      <p>\n        (P.S. \n        <a href=\"/writing/highlighting-apples-most-serious-problem\">\n          Remember when I told Apple to get rid of their horrendous highlights?\n        </a>\n        )\n      </p>",
      "content_text": "https://mknepprath.com/writing/ios-7-eve",
      "date_published": "2013-09-18T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/highlighting-apples-most-serious-problem",
      "url": "https://mknepprath.com/writing/highlighting-apples-most-serious-problem",
      "title": "Highlighting Apple's Most Serious Problem",
      "content_html": "<header>\n        <h1>Highlighting Apple's Most Serious Problem</h1>\n      </header>\n\n      <p>\n        If you know me, you know I enjoy using Apple’s products. Whether it be\n        the iPhone, iMac, iPad, iRefrigerator… I find the simplicity and\n        elegance to be a breath of fresh air after exclusively working on PCs\n        for the first 18 years of my life. I do have one major issue with all of\n        my iDevices however.\n      </p>\n      <p>First, let’s take a look at a sample of Apple app icons.</p>\n\n      <img src=\"https://mknepprath.com/assets/highlighting-apple-1.png\" alt=\"Screenshot of iOS app icons with highlights\" />\n\n      <p>\n        Do you see it? Look closer. Closer. That’s right. Every single one of\n        them has that hokey highlight stretching across the top/middle. All of\n        these icons look dated and cheesy, and a big reason for that is this\n        awful highlight. But wait. It gets worse.\n      </p>\n\n      <img src=\"https://mknepprath.com/assets/highlighting-apple-2.png\" alt=\"Screenshot of more iOS app icons with faux highlights\" />\n\n      <p>\n        It’s spreading like a virus! Let this be a lesson to you, app\n        developers. Highlights are okay, just don’t use this one anymore.\n      </p>",
      "content_text": "https://mknepprath.com/writing/highlighting-apples-most-serious-problem",
      "date_published": "2013-01-11T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/leap-motion",
      "url": "https://mknepprath.com/writing/leap-motion",
      "title": "Leap Motion: Give Your Mouse A Break",
      "content_html": "<header>\n        <h1>Leap Motion: Give Your Mouse A Break</h1>\n      </header>\n\n      <p>\n        You were going to hear about \n        <a href=\"https://leapmotion.com/\">Leap Motion</a> sooner or later, so it\n        might as well be now. Leap Motion is a touch-free, 3D motion technology\n        that is slated for release early this year.\n      </p>\n\n      <p>\n        And apparently it will only cost $75. Leap Motion is basically a Kinect\n        with pinpoint precision that hooks up to your computer. What’s so\n        amazing about this?\n      </p>\n      <p>\n        1. You can “physically” interact with objects on your computer screen.\n        The best example I’ve found of this can be seen in the video below.\n      </p>\n      <p>\n        <iframe\n          src=\"http://www.youtube.com/embed/1x-eAvASIFc?rel=0\"\n          frameBorder=\"0\"\n          height=\"326\"\n          width=\"580\"\n        />\n      </p>\n      <p>\n        2. You can create artwork in 2D or 3D with no extra peripherals. In some\n        of the demo videos, they actually use a pencil as a stylus and the Leap\n        Motion was able to recognize it as a writing tool.\n      </p>\n      <p>\n        <iframe\n          src=\"http://www.youtube.com/embed/_d6KuiuteIA?rel=0\"\n          frameBorder=\"0\"\n          height=\"326\"\n          width=\"580\"\n        />\n      </p>\n      <p>\n        3. It’s backwards compatible with touch screen applications, so it\n        already works with a ton of different programs. One example is the\n        ability to scroll down a web page simply by swiping it up with a finger.\n      </p>\n      <p>\n        <iframe\n          src=\"http://www.youtube.com/embed/mQkKyOOyLSs?rel=0\"\n          frameBorder=\"0\"\n          height=\"326\"\n          width=\"580\"\n        />\n      </p>\n      <p>\n        I’m very excited about having a new way to interact with my iMac and\n        finally \n        <a href=\"http://mknepprath.com/2012/10/the-limitations-of-the-mouse/\">\n          free myself from the mouse\n        </a>\n        !\n      </p>",
      "content_text": "https://mknepprath.com/writing/leap-motion",
      "date_published": "2013-01-02T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/the-mistake-of-being-meta",
      "url": "https://mknepprath.com/writing/the-mistake-of-being-meta",
      "title": "The Mistake of Being Meta",
      "content_html": "<header>\n        <h1>The Mistake of Being Meta</h1>\n      </header>\n\n      <p>\n        I was recently listening to a Top 40 radio station and realized\n        something. I couldn&apos;t relate to any of the music. Why? Almost all\n        of the songs were about life as a Top 40 artist. They sing about money,\n        partying, clubbing, drinking and... their songs. Bridgit Mendler says it\n        best, &ldquo;I like your face, do you like my song?&rdquo; Top 40\n        artists are not the only, or first, offenders, however.\n      </p>\n      <p>\n        Artists create films about film, paintings about painting, sculptures\n        about sculpture, and so on. I believe that this is caused by a lack of\n        diversity in education and interest. Think about it. If I train and\n        spend all of my time becoming the most incredible painter in history,\n        what will my paintings be about? Well, what subject am I now the most\n        knowledgeable of? Painting. See the problem?\n      </p>\n      <p>\n        Keep in mind, there has been long and interesting history of art that\n        has brought us to this point. But now we&apos;ve reached it. Time to\n        move on. (Those of you that are creating \n        <a href=\"http://www.rottentomatoes.com/m/the_artist/\">\n          incredible work\n        </a> \n        that just so happens to be meta, keep it up. This is for everyone else.)\n      </p>",
      "content_text": "https://mknepprath.com/writing/the-mistake-of-being-meta",
      "date_published": "2012-10-29T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/the-limitations-of-the-mouse",
      "url": "https://mknepprath.com/writing/the-limitations-of-the-mouse",
      "title": "The Limitations of the Mouse",
      "content_html": "<header>\n        <h1>The Limitations of the Mouse</h1>\n      </header>\n\n      <p>\n        Let&apos;s say your pen rolls off your desk during work. What do you do?\n        Well, you certainly wouldn&apos;t use a \n        <a\n          title=\"...despite how awesome that would be.\"\n          href=\"https://www.crocodilejoes.com/store/image/cache/data/63883%20T-Rex-500x500.jpg\"\n        >\n          T-Rex grabber\n        </a>\n        , or try to direct \n        <a href=\"https://www.youtube.com/watch?v=W9t5ZqeHcYk\">The Claw</a> to\n        pick it up for you. You might be surprised to learn, then, that you do\n        this every day.\n      </p>\n      <p>\n        More and more of our time is spent moving, copying, editing, and\n        transferring files, opening menus, painting, and designing on our\n        computers. But we&apos;re limited. We&apos;ve been trained to\n        communicate with computers through a simple peripheral that allows us to\n        direct a pointer around a 2-dimensional screen. The mouse hasn&apos;t\n        changed a whole lot since the 60s. It&apos;s time for something new.\n      </p>\n      <p>\n        <strong>Touch screens.</strong> These have been around for quite some\n        time, but never really hit it off with humanity until the iPhone. These\n        still aren&apos;t commonly found on desktop PCs, but just wait. This\n        technology takes us one step closer to &apos;physically&apos; working\n        with digital data.\n      </p>\n      <p>\n        <strong>Bendable technology.</strong> Up until now, bending our phones,\n        tablets, or computers would break them. Samsung is about to change \n        <a href=\"https://www.youtube.com/watch?v=hZCiqkWCLqw\">that</a>. Imagine\n        you had a digital newspaper that shut down when you rolled it up. Or a\n        flashlight app that turned on with a twist. We might finally see that\n        Bop It app we&apos;ve all been waiting for!\n      </p>\n      <p>\n        <strong>Voice recognition.</strong> While I wouldn&apos;t drop $100\n        extra bucks on a phone to get this feature - I can&apos;t wait until I\n        can just tell my phone when I want to wake up in the morning. Simple\n        tasks like this are exponentially more difficult when having to flip\n        through menus using a keypad. I&apos;d like to be able to walk into my\n        office and say, &ldquo;All right, I need you to open Gmail, Illustrator,\n        and Facebook.&rdquo; Yeah, that would be way easier.\n      </p>\n      <p>\n        <strong>Augmented reality.</strong> Yes, my blog posts always seem to\n        come back to this. Augmented reality is going to remove the need for a\n        mediatory device by allowing us to deal with digital data the same way\n        we handle objects in reality. I can&apos;t wait for this.\n      </p>\n      <p>\n        Can you think of more ways we could communicate with our technology? Let\n        me know below!\n      </p>",
      "content_text": "https://mknepprath.com/writing/the-limitations-of-the-mouse",
      "date_published": "2012-10-17T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/the-physical-turning-digital",
      "url": "https://mknepprath.com/writing/the-physical-turning-digital",
      "title": "The Physical Turning Digital",
      "content_html": "<header>\n        <h1>The Physical Turning Digital</h1>\n      </header>\n\n      <p>\n        Remember when a CD was required to listen to music? I still have a large\n        stack sitting at my parent&apos;s house, untouched for many years. These\n        days I listen to music on <a href=\"http://www.spotify.com/\">Spotify</a>, \n        <a href=\"http://www.apple.com/itunes/\">iTunes</a>, or \n        <a href=\"http://www.youtube.com/music\">YouTube</a>. Film is heading in\n        the same direction. DVDs are still quite popular, but it won&apos;t be\n        long before the majority of what we watch is through services like \n        <a href=\"http://www.netflix.com/\">Netflix</a> or \n        <a href=\"http://www.hulu.com/\">Hulu</a>. And what about gaming? \n        <a href=\"http://store.steampowered.com/\">Steam</a> is leading the charge\n        in this medium.\n      </p>\n      <p>\n        <img src=\"https://mknepprath.com/assets/virtualworld.jpg\" alt=\"An AR desktop experience.\" />\n      </p>\n      <p>So what else will be going digital in the future?</p>\n      <p>\n        This question is more misleading than it first appears. Honestly, what\n        few things <em>won&apos;t</em> be going digital in the future? Here are\n        a few things I own that won&apos;t make the transition:\n      </p>\n      <ol>\n        <li>Sustenance.</li>\n        <li>Supplies for hygiene and health.</li>\n        <li>Seating and tables.</li>\n        <li>Vehicles for transportation.</li>\n      </ol>\n      <p>\n        And... that&apos;s about it. As augmented reality becomes more practical\n        and mainstream, it will be possible to turn most physical objects into\n        digital ones. Just looking at my desk, I see a number of examples.\n      </p>\n      <ol>\n        <li>\n          <strong>My computer. </strong>A lot of things I do on my computer will\n          no longer be managed on a screen. Files are much easier to work with\n          when I can move and sort with my hands or voice commands. The entire\n          file system on my computer may end up looking more like a stack of\n          folders, photos, and documents on my desk. The keyboard will be\n          displayed on the desk surface.\n        </li>\n        <li>\n          <strong>Pictures in frames.</strong> Pictures will no longer require\n          frames, since they&apos;ll be digital images mapped out to the desk.\n          They can float, turn into video, or even a chat window to talk with\n          someone else through.\n        </li>\n        <li>\n          <strong>Notebook and pen.</strong> I know. I wrote \n          <a href=\"http://mknepprath.com/2012/09/i-prefer-writing/\">\n            a whole post\n          </a> \n          about how I prefer writing over any digital alternative. This was\n          because of the Digital Disconnect, and I believe augmented reality\n          would remove this barrier.\n        </li>\n        <li>\n          <strong>A container for coupons and other documents.</strong> These\n          are all going digital already. Check out \n          <a href=\"http://www.retailmenot.com/\">retailmenot.com</a>. I pay most\n          of my bills online, and many other documents are located there, as\n          well. I can print them off if I need to, but in the future I doubt\n          this will be necessary.\n        </li>\n      </ol>\n      <p>\n        In the end, a normal person&apos;s apartment will appear quite bare to\n        the naked eye. Even the objects that will be there (couch, refrigerator,\n        bed) will seem very plain and simple, because they can be given a\n        &apos;skin&apos; of sorts through augmented reality.\n      </p>\n      <p>\n        What do you think? Are there other objects you use that can&apos;t be\n        converted to the digital world?\n      </p>",
      "content_text": "https://mknepprath.com/writing/the-physical-turning-digital",
      "image": "https://mknepprath.com/assets/virtualworld.jpg",
      "date_published": "2012-10-09T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/the-use-and-misuse-of-qr-codes",
      "url": "https://mknepprath.com/writing/the-use-and-misuse-of-qr-codes",
      "title": "The Use and Misuse of QR Codes",
      "content_html": "<header>\n        <h1>The Use and Misuse of QR Codes</h1>\n      </header>\n\n      <p>\n        I first noticed it as I wandered a mall - QR codes on every sign and\n        storefront. All it took was a few bad scans for me to give up on them\n        entirely. QR codes suck. It&apos;s an unfortunate fact, caused by over a\n        year of abuse.\n      </p>\n      <p>\n        <img src=\"https://mknepprath.com/assets/qrcode.jpg\" alt=\"QR code.\" />\n      </p>\n      <p>\n        It&apos;s not too late to fix this situation, however. First, let&apos;s\n        diagnose the problem.\n      </p>\n      <ol>\n        <li>\n          <strong>&ldquo;What is a QR code?&rdquo;</strong> As it turns out,\n          many people still haven&apos;t heard of these mystical codes. This\n          doesn&apos;t surprise me. Look at 95%+ of the QR codes out there\n          today. How many of them come with instructions on how to use them?\n        </li>\n        <li>\n          <strong>They&apos;re applied incorrectly.</strong> There&apos;s are \n          <a href=\"http://wtfqrcodes.com/\">entire websites</a> dedicated to\n          strange QR code sightings. The lesson to take from this website is to\n          test your codes before giving them away in bottles, on muffins, etc,\n          and think about where the person has to be located to scan them. And\n          please, don&apos;t put a QR code on a billboard. People are distracted\n          enough while driving without having to try to line their phone up with\n          a sign a quarter mile away.\n        </li>\n        <li>\n          <strong>They&apos;re ugly.</strong> Honestly, not much can be done\n          about this. It&apos;s going to end up looking like a code. A possible\n          solution might be to expand it into looking like something more\n          relevant, however, like I did for \n          <a href=\"/assets/QR-Guitar.jpg\">this code</a>.\n        </li>\n        <li>\n          <strong>Most codes lead to garbage.</strong> In the mall mentioned\n          earlier, I scanned multiple codes that lead to store websites. While\n          there&apos;s nothing inherently wrong with this, none of these\n          websites were optimized to be viewed on a mobile phone. Huge turn off.\n          People are scanning your codes with their phones, so the page they are\n          taken to better be designed for a phone.\n        </li>\n        <li>\n          <strong>It&apos;s not worth their time.</strong> I&apos;ve been told\n          time and time again how easy it is to scan a code. Guess what?\n          It&apos;s not. The person has to pull out their phone, find the QR\n          code scanner app (unless they don&apos;t have it already, in which\n          case, add at least three more steps), hold their phone in place for a\n          few seconds, and wait for the page to load. As a customer, this is a\n          huge inconvenience. What you&apos;re offering better be worth it! By\n          now I&apos;m sure you&apos;re as unsurprised as I am to find that\n          it&apos;s usually not.\n        </li>\n      </ol>\n      <p>\n        This is a terrible situation for you if you want to use a QR code. Even\n        if you educate your customers, even if you apply the code in an\n        ingenious way, even if it&apos;s beautiful, and even if it leads to the\n        most beautiful site with the greatest offer EVER... people may not scan\n        it. Why? Because they&apos;ve been taught that QR codes suck.\n      </p>\n      <p>\n        How do we change their perception? Don&apos;t forget the pitfalls above.\n        Do it right every time. Make it worth the scan. People will begin to\n        trust your codes. More people will use them. Other marketers will see\n        your success and realize what they need to do. People will begin to\n        trust their codes. And so on.\n      </p>",
      "content_text": "https://mknepprath.com/writing/the-use-and-misuse-of-qr-codes",
      "image": "https://mknepprath.com/assets/qrcode.jpg",
      "date_published": "2012-09-25T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/get-things-done",
      "url": "https://mknepprath.com/writing/get-things-done",
      "title": "How I Get Things Done",
      "content_html": "<header>\n        <h1>How I Get Things Done</h1>\n      </header>\n\n      <p>\n        I recently read the book \n        <a href=\"http://99u.com/book\">Making Ideas Happen</a> by \n        <a href=\"https://twitter.com/scottbelsky\">Scott Belsky</a>. While I’d\n        highly recommend that you read it, I know that you probably don’t have\n        time. If this is so, then this is the perfect book for you!\n      </p>\n      <p>Catch-22?</p>\n      <p>\n        The main area this book helped me was in my note-taking habits. During\n        meetings, everything I deemed important would be scribbled down in my\n        notebook for later review. It became difficult to pull the tasks that\n        actually needed to be done from the pages.\n      </p>\n      <p>\n        The book recommended a new method. The \n        <a href=\"http://www.actionmethod.com/methodology\">Action Method</a>.\n        Here’s how I use it.\n      </p>\n      <ul>\n        <li>\n          First, one page is dedicated to each project, no matter how small.\n          Trying to organize five different projects on one page was not ideal\n          and unnecessary.\n        </li>\n        <li>\n          Most of each page, save the top and bottom right corners, are open for\n          notes.\n        </li>\n        <li>\n          Anytime a task that can be completed is mentioned, it gets placed in a\n          list at the top right corner. Each task should begin with a verb, as I\n          am going to be taking action and completing them after the meeting is\n          over. I make sure they are fairly simple. “Build an entire website.”\n          does not work, while “Pick out colors for website.” does. I break\n          every project down to steps like this.\n        </li>\n        <li>\n          Finally, the bottom right of the page is dedicated to backburner\n          items. These are projects or tasks that I or somebody else thought up,\n          but can’t or shouldn’t take action on right now. These get compiled\n          later and are reviewed monthly.\n        </li>\n      </ul>\n      <p>\n        This was not mentioned in Making Ideas Happen, but I believe this is\n        important, nonetheless. Make sure you purchase a nice notebook, because\n        you won’t value it as highly if you don’t. I used to take notes on\n        everything, but having a nice new notebook has motivated me to have it\n        with me at all times.\n      </p>\n      <p>How do you get things done?</p>",
      "content_text": "https://mknepprath.com/writing/get-things-done",
      "date_published": "2012-09-17T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/keep-up-with-the-curiosity-rover",
      "url": "https://mknepprath.com/writing/keep-up-with-the-curiosity-rover",
      "title": "Keep Up With the Curiosity Rover",
      "content_html": "<header>\n        <h1>Keep Up With the Curiosity Rover</h1>\n      </header>\n\n      <p>\n        Ten days ago, NASA landed a rover on Mars. I was one of the many\n        watching the event streaming live online. What a rush!\n      </p>\n      <p>\n        <img src=\"https://mknepprath.com/assets/mars.jpg\" alt=\"Mars.\" />\n      </p>\n      <p>\n        The live stream was a great way for NASA to connect with people on a\n        more personal level. I breathed a sigh of relief as each step was\n        successful and celebrated once the landing was confirmed. Now that\n        that&apos;s all over, however, how do we keep up with Curiosity and its\n        team? NASA&apos;s doing a wonderful job with social media, offering\n        quite a few ways to follow them and their discoveries. Here are just a\n        few.\n      </p>\n      <ol>\n        <li>\n          <strong>\n            <a href=\"https://twitter.com/MarsCuriosity\">Twitter</a>.\n          </strong> \n          Starting with one of my favorites, NASA is updating a Twitter account\n          as if the Curiosity Rover itself is sending the tweets. When Curiosity\n          landed, \n          <a href=\"https://twitter.com/MarsCuriosity/status/232348380431544320\">\n            it tweeted\n          </a>\n          , &ldquo;I&apos;m safely on the surface of Mars. GALE CRATER I AM IN\n          YOU!!!&rdquo;\n        </li>\n        <li>\n          <strong>\n            <a href=\"https://www.facebook.com/MarsCuriosity\">Facebook</a>.\n          </strong> \n          The team shares updates through a Facebook page, such as the first\n          color photo of Curiosity from orbit. They also share posts from others\n          related to them, including photos and music videos.\n        </li>\n        <li>\n          <strong>\n            <a href=\"http://www.youtube.com/NASATelevision\">YouTube</a>.\n          </strong> \n          Their YouTube channel allows you to relive all of the celebration when\n          the Rover landed. It also contains many high quality videos about\n          Curiosity and its mission.\n        </li>\n        <li>\n          <strong>\n            <a href=\"http://itunes.apple.com/podcast/nasacast-video/id201661703?mt=2\">\n              Podcasts\n            </a>\n            .\n          </strong> \n          There&apos;s even a podcast! They update it fairly frequently with\n          updates regarding Curiosity, and other NASA related projects.\n        </li>\n        <li>\n          <strong>\n            <a href=\"https://plus.google.com/u/0/102371865054310418159/posts\">\n              Google+\n            </a>\n            .\n          </strong> \n          NASA gained a huge following on Google+ by sharing tons of beautiful\n          photos from space.\n        </li>\n        <li>\n          <strong>\n            <a href=\"http://www.reddit.com/r/IAmA/comments/ybmmh/we_are_engineers_and_scientists_on_the_mars/\">\n              Reddit\n            </a>\n            .\n          </strong> \n          The Curiosity team is on Reddit RIGHT NOW answering people&apos;s\n          questions regarding the landing, etc. If you have an account, I\n          recommend logging in and asking them anything you might be curious\n          about.\n        </li>\n      </ol>\n      <p>\n        <div>\n          <span style={}>\n            It&apos;s amazing that NASA is able to find the time to keep up with\n            all of these outlets, but I believe they find it to be well worth\n            it. They&apos;re successfully bringing about a rebirth in interest\n            of our space exploration program.\n          </span>\n        </div>\n      </p>",
      "content_text": "https://mknepprath.com/writing/keep-up-with-the-curiosity-rover",
      "image": "https://mknepprath.com/assets/mars.jpg",
      "date_published": "2012-08-16T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/3d-printing",
      "url": "https://mknepprath.com/writing/3d-printing",
      "title": "3D Printing and the End of the Industrial Age",
      "content_html": "<img src=\"https://mknepprath.com/assets/3dprinting.jpg\" alt=\"3D printed cube illustration\" />\n\n      <header>\n        <h1>3D Printing and the End of the Industrial Age</h1>\n      </header>\n\n      <p>\n        3D printing, or \n        <a href=\"http://en.wikipedia.org/wiki/3D_printing\">\n          additive manufacturing\n        </a>\n        , has been \n        <a href=\"http://mashable.com/follow/search/?q=3d+printing&amp;commit=Search\">\n          in the news\n        </a> \n        more and more lately, and for good reason. It’s allowing people to build\n        amazing things, such as a \n        <a href=\"http://mashable.com/2012/08/10/japanese-printing-live-fetus/\">\n          3D replica of a live fetus\n        </a>\n        , or a \n        <a href=\"http://mashable.com/2012/08/03/3d-printed-magic-arms/\">\n          robotic exoskeleton\n        </a>\n        . These are fantastic uses for this breakthrough technology.\n      </p>\n      <p>\n        If this is something you are extremely excited about, it’s possible to\n        buy one \n        <a href=\"http://www.ebay.com/sch/i.html?_nkw=3d+printer\">right now</a>.\n        3D printers are relatively small and becoming more affordable every day,\n        so I don’t think it’s not too much of a stretch to say that there may be\n        a 3D printer in every household in the not-so-distant future. Here are a\n        few changes I think will come with this device as it becomes more\n        common.\n      </p>\n      <ol>\n        <li>\n          <b>Materials can and will be purchased in bulk.</b> Rather than buying\n          plates, cups, decorations, brackets, etc, we will be capable of buying\n          materials like plastic in bulk the same way we buy paper and ink for\n          printing. By always having these raw materials available, we are only\n          limited by the number of 3D models available online. If you know how\n          to use a 3D modeling program, you may not be limited at all.\n        </li>\n        <li>\n          <b>\n            Mass production of small items will be much less common, if not\n            entirely unnecessary.\n          </b> \n          Instead of producing a million copies of a product and hoping they’ll\n          sell, household 3D printers allow for an on-demand system. As\n          consumers, we will no longer have to go to the store and hope they\n          have a particular item we want in stock. We can browse online and\n          print it ourselves, and even design it ourselves with the proper\n          training.\n        </li>\n        <li>\n          <b>3D printer-friendly digital models will become a big market.</b> As\n          mentioned above, a large online market will form around printable 3D\n          models. There will be many open source models available, many of them\n          meeting the basic needs of individuals, such as a full dining set.\n        </li>\n        <li>\n          <b>It will be much easier to be a stop-motion hobbyist.</b> This one’s\n          not for everyone, but 3D printers will most likely bring about a big\n          wave of aspiring animators. What level of animation can be achieved\n          with 3D printers? Watch Coraline and \n          <a href=\"http://images.businessweek.com/ss/09/04/0415_how_to_innovate/9.htm\">\n            you’ll see\n          </a>\n          .\n        </li>\n        <li>\n          <b>\n            Recycling materials within the household will become more common.\n          </b> \n          Getting sick of your old decorations? Why not stick them back into\n          your 3D printer and create something new? Not only that, but if you\n          absolutely need a plate for a guest, you can stick anything you no\n          longer need of that particular material in it, and voilà!\n        </li>\n      </ol>\n      <p>\n        In the end, I believe the greatest change this technology will bring is\n        an end to most labor-intensive factory jobs. While the potential is\n        great, there are many issues that will need to be covered, such as \n        <a href=\"http://thenextweb.com/shareables/2012/07/26/the-worlds-first-3d-printed-gun-is-a-terrifying-thing/\">\n          the creation of weaponry\n        </a>\n        . What do you think could be a potential use or misuse of 3D printing?\n      </p>",
      "content_text": "https://mknepprath.com/writing/3d-printing",
      "image": "https://mknepprath.com/assets/3dprinting.jpg",
      "date_published": "2012-08-13T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/the-advent-of-crowdsourced-news",
      "url": "https://mknepprath.com/writing/the-advent-of-crowdsourced-news",
      "title": "The Advent of Crowdsourced News",
      "content_html": "<header>\n        <h1>The Advent of Crowdsourced News</h1>\n      </header>\n\n      <p>\n        Technology is bringing about many changes to the way we interact and\n        consume. News is an excellent example of how quickly this change is\n        happening. I&apos;ve transitioned from reading the newspaper at work and\n        watching TV, to using Flipboard, having an optimized Twitter list, and\n        receiving daily headlines from the Huffington Post in my email.\n      </p>\n      <p>\n        <img src=\"https://mknepprath.com/assets/crowdsourcing-news.jpg\" alt=\"Crowdsourcing news.\" />\n      </p>\n      <p>\n        News is continuing to evolve, as can be seen during the events of the\n        Aurora, Colorado shooting on July 20th. The public was receiving updates\n        long before any large news corporations could get reporters to the scene\n        of the incident. \n        <a href=\"http://www.reddit.com/r/news/comments/wvb5e/comprehensive_timeline_part_2_aurora_massacre/\">\n          On Reddit\n        </a>\n        , eyewitnesses started building a timeline, filling in all of the gaps\n        with contributions by others that were present. Others on Reddit were\n        actually able to interact with the victims, asking them questions and \n        <a href=\"http://www.reddit.com/r/AskReddit/comments/wv4q2/someone_came_into_our_theater_at_the_midnight/\">\n          offering support\n        </a>\n        . One of the injured even posted a picture of \n        <a href=\"http://www.reddit.com/tb/wvbbk\">his bloodied shirt</a> after\n        they&apos;d been shot in the chest. This is very cool, in my opinion,\n        and here are a few reasons why.\n      </p>\n      <ol>\n        <li>\n          <strong>It&apos;s true eyewitness news.</strong> This is the most real\n          news has ever been. We&apos;re reading firsthand reports from people\n          who were in or near the incident. Because of this, it&apos;s also much\n          more personal. It was a heart-wrenching moment when a link to the\n          Twitter account of one of the victims was shared, and their last tweet\n          was about how excited they were for the movie that was starting in\n          twenty minutes.\n        </li>\n        <li>\n          <strong>It&apos;s live.</strong> Information and photos were being\n          posted as they were found or captured. The filter was removed, and\n          everything the witnesses found shareable was shared.\n        </li>\n        <li>\n          <strong>It&apos;s a two-way conversation.</strong> Rather than being\n          spoon-fed the news, it was actually possible to ask questions of the\n          victims and others present. Because of this, those providing the news\n          knew exactly what the public was looking for, and provided details\n          accordingly.\n        </li>\n        <li>\n          <strong>People are interested.</strong> When news is crowdsourced, it\n          requires the input of many people. These people are only going to\n          contribute what they deem interesting, and what others seem to find\n          interesting. This process cuts out all of the fluff news we see on TV\n          today, the news created to fill time and take up space when nothing\n          else is going on.\n        </li>\n      </ol>\n      <p>\n        While there may be some downsides to this process, time will tell\n        whether the speed and intimacy of crowdsourced news will win out in the\n        end. What do you think of this change? Would you take part in a\n        crowdsourced event like this?\n      </p>",
      "content_text": "https://mknepprath.com/writing/the-advent-of-crowdsourced-news",
      "image": "https://mknepprath.com/assets/crowdsourcing-news.jpg",
      "date_published": "2012-08-13T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/introducing-square",
      "url": "https://mknepprath.com/writing/introducing-square",
      "title": "You Can Now Accept Credit Cards with Square",
      "content_html": "<header>\n        <h1>You Can Now Accept Credit Cards with Square</h1>\n      </header>\n\n      <p>\n        As a freelancer, it can be inconvenient to have to wait for a cash or\n        check payment. Both require that the client has made preparations to pay\n        you, by either getting cash out of the bank, or remembering to write a\n        check and bring it to your next meeting. Wouldn’t it be nice if you\n        could accept credit cards, something your client probably has on them at\n        all times?\n      </p>\n      <p>\n        Introducing <a href=\"https://squareup.com/\">Square</a>, the latest\n        project of <a href=\"https://twitter.com/jack\">Jack Dorsey</a>, founder\n        of Twitter.\n      </p>\n      <p>\n        This service is extremely easy to use, and is designed beautifully.\n        Here’s how to get started.\n      </p>\n      <ol>\n        <li>\n          <b>\n            <a href=\"https://squareup.com/\">Sign up.</a>\n          </b>\n          You will be asked for your address during this process. This is so\n          that you will receive a free Square Card Reader in the mail. This\n          reader is absolutely free, they even cover the shipping cost.\n        </li>\n        <li>\n          <b>Verify your identity.</b> This is where Square collects legal\n          information regarding you and your business.\n        </li>\n        <li>\n          <b>Add a bank account.</b> In order to function, you need to add a\n          bank account to Square. Payments you accept will be deposited into\n          this account.\n        </li>\n        <li>\n          <b>Get the app.</b> This is the main requirement. You are able to get\n          this app on your iPhone, Android phone, iPad, and even your iPod. I’m\n          able to accept payments on my 3 year old iPod Touch!\n        </li>\n        <li>\n          <b>Join the Square Directory.</b> Square has a public directory where\n          people are able to search for businesses they might need. You are\n          asked to create a Public Profile, which is the information that comes\n          up when you show up in a search.\n        </li>\n        <li>\n          <b>Accept payments!</b> Plug the Square Card Reader into the iPhone\n          jack of your device. Open the Square app. Swipe your client’s card.\n          From now on, this is all you have to do.\n        </li>\n      </ol>\n      <p>\n        One final disclaimer, Square charges 2.75% of the payment per swipe.\n        This is so that they can afford to keep the service available, and to\n        fund further research and updates. Square is revolutionizing the way we\n        exchange money, and other similar services \n        <a href=\"https://www.paypal.com/webapps/mpp/credit-card-reader\">\n          like Paypal\n        </a> \n        are scrambling to catch up. Square has already developed two more apps,\n        one that allows you to \n        <a href=\"https://squareup.com/register\">\n          turn your iPad into a register\n        </a>\n        , and the other allows you to \n        <a href=\"https://squareup.com/pay-with-square\">\n          make payments without a card\n        </a>\n        .\n      </p>\n      <p>\n        Would you ever see yourself using a service like this? Is the fee worth\n        the convenience?\n      </p>",
      "content_text": "https://mknepprath.com/writing/introducing-square",
      "date_published": "2012-07-24T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/ifttt",
      "url": "https://mknepprath.com/writing/ifttt",
      "title": "Leverage the Combined Power of Your Services with IFTTT",
      "content_html": "<header>\n        <h1>Leverage the Combined Power of Your Services with IFTTT</h1>\n      </header>\n\n      <p>\n        <a href=\"https://ifttt.com\">IFTTT</a> is a simple service that produces\n        some rather incredible results. Because of IFTTT, I can post this blog\n        and it will automatically be shared to Facebook, Twitter, and LinkedIn.\n        I also get alerted about incoming rain through text, and new free mp3\n        albums on Amazon through email.\n      </p>\n      <p>\n        And this only hints at a few of the thousands of combinations you can\n        create with your services.\n      </p>\n      <p>\n        All of IFTTT is based on a single statement: If This Then That.\n        Essentially, if one service does this (e.g. a new photo is tagged, a new\n        article is posted, the weather changed), then do that (e.g. download the\n        photo, share the article, text the weather). Here’s how IFTTT works:\n      </p>\n      <ol>\n        <li>\n          <b>Add your channels.</b> In order to work, you need to add your\n          services to IFTTT. These services are called channels. Go the the\n          Channels tab to add yours.\n        </li>\n        <li>\n          <b>Use pre-built recipes.</b> When two services are combined like in\n          the examples above, they are called a recipe. Many recipes have\n          already been built and shared by others on the Browse page, the most\n          popular being ‘When Facebook profile picture changes, update Twitter\n          profile picture.’\n        </li>\n        <li>\n          <b>Build your own recipes.</b> There are already a large number of\n          recipes available, but if you can’t find the one you need, it’s\n          possible to build your own. Click on the Create tab and follow the\n          seven steps to get the results you are looking for.\n        </li>\n        <li>\n          <b>Share your recipes.</b> If you needed to build a recipe to receive\n          updates from Jugglers Anonymous in your email, then you’re probably\n          not the only one. Share your recipe on IFTTT for others to use.\n        </li>\n      </ol>\n      <p>\n        The IFTTT team continues to add more services and features, so it’s\n        smart to sign up for the newsletter with \n        <a href=\"https://ifttt.com/applets/8363p\">an IFTTT recipe</a> (of\n        course).\n      </p>\n      <p>\n        If you could combine any two of your services, which two would they be,\n        and what would they do? Share the link to the recipe if you can create\n        it!\n      </p>",
      "content_text": "https://mknepprath.com/writing/ifttt",
      "date_published": "2012-07-23T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/video-games-are-evolving",
      "url": "https://mknepprath.com/writing/video-games-are-evolving",
      "title": "Video Games Are Evolving!",
      "content_html": "<header>\n        <h1>Video Games Are Evolving!</h1>\n      </header>\n\n      <p>\n        Last week I discussed the future of gaming, and mentioned that we’d be\n        revisiting the subject and seeing how current technology could be used\n        to reinvigorate big franchise games. That’s right. It’s time to talk\n        about Pokémon.\n      </p>\n\n      <p>\n        <img src=\"https://mknepprath.com/assets/poke.jpg\" alt=\"Evolving video games.\" />\n      </p>\n\n      <p>\n        Nintendo was one of the first gaming companies to introduce \n        <a href=\"http://www.youtube.com/watch?v=yk3rSX-vOVw\">\n          augmented reality tech\n        </a> \n        to their audience. They love introducing new technology to their fans,\n        like the Wii with it’s motion controllers. Hey, Nintendo! This is what\n        your next big project should be.\n      </p>\n      <ol>\n        <li>\n          <b>Non-player characters.</b> By connecting a Kinect sensor with some\n          augmented reality glasses, a man has \n          <a href=\"http://www.sciencespacerobots.com/blog/71520123\">\n            already created a life-sized NPC\n          </a> \n          that follows him around. He can even interact with it by patting it on\n          the head and moving its tie. Remember how Pikachu used to \n          <a href=\"http://www.emuparadise.me/fup/up/67984-Pokemon_-_Yellow_Version_(USA,_Europe)-7-thumb.png\">\n            follow you around\n          </a> \n          way back in Yellow? Yeah, that’s totally possible. This, of course,\n          would work for all NPCs, such as other Pokémon, trainers, or shop\n          owners, who would all be able to walk around you and interact with you\n          and the environment around them.\n        </li>\n        <li>\n          <b>Tall grass.</b> Holophonic sound is going to bring this whole\n          experience to life, but it could be especially useful for finding\n          Pokémon. If you wanted to find one in the games thus far, you’d walk\n          around in tall grass until you basically tripped on one. With this new\n          game, tall grass would be randomly generated in certain spots on the\n          ground around you. Now, you could go tromping around in it… or you\n          could listen for the sound of rustling. Using sound to pinpoint the\n          location of things in games has never been \n          <a href=\"http://www.youtube.com/watch?v=x5G3HUiscW4\">\n            this realistic\n          </a>\n          .\n        </li>\n        <li>\n          <b>Shops & Pokémon Centers.</b> Here’s how actual businesses could get\n          involved in this game. A store like Target could place a marker\n          anywhere in their store. This marker tells your goggles to put a shop\n          there. Virtual shelves are lined with virtual goods, such as pokéballs\n          and healing potions. These items can be purchased with the in-game\n          money. If Target wants to capitalize on this extra virtual business,\n          they can offer store-exclusive content that can be purchased with real\n          money.\n        </li>\n        <li>\n          <b>Battle.</b> Although I’d prefer that they move away from their\n          current turn-based system, all I really want is to see the fight\n          happening between my and my opponent. Whether they create new battle\n          mechanics, or set it up Pokémon Stadium-style, I don’t care.\n        </li>\n      </ol>\n      <p>\n        The interesting thing about all of this for me is that it can almost\n        make the Pokémon TV show into a non-fictional story. What if Pokémon\n        takes place in the future, when augmented reality contact lenses are\n        essential to interact with the environment, machines, and other people?\n        What if they’re never mentioned because of how commonplace they are?\n        Suddenly, many of the crazy sci-fi stories we’ve read or watched become\n        reality.\n      </p>",
      "content_text": "https://mknepprath.com/writing/video-games-are-evolving",
      "image": "https://mknepprath.com/assets/poke.jpg",
      "date_published": "2012-07-19T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/augmented-reality-and-the-future-of-gaming",
      "url": "https://mknepprath.com/writing/augmented-reality-and-the-future-of-gaming",
      "title": "Augmented Reality and the Future of Gaming",
      "content_html": "<header>\n        <h1>Augmented Reality and the Future of Gaming</h1>\n      </header>\n\n      <p>\n        It&apos;s no secret that I am thoroughly excited about the future of\n        augmented reality. If you have not heard of this concept before, you can\n        familiarize yourself with it through \n        <a href=\"https://www.youtube.com/watch?v=D0ojxzS1fCw\">the</a> \n        <a href=\"https://www.youtube.com/watch?v=U2jSzmvm_WA\">thousands</a> \n        <a href=\"https://www.youtube.com/watch?v=cNu4CluFOcw\">of</a> \n        <a href=\"https://www.youtube.com/watch?v=D-A1l4Jn6EY\">videos</a> \n        <a href=\"https://www.youtube.com/watch?v=cARh0HrlgoY\">on</a> \n        <a href=\"https://www.youtube.com/watch?v=yCEHIkJanm4\">Youtube</a> \n        <a href=\"https://www.youtube.com/watch?v=zXWSpcTnKTw\">about</a> \n        <a href=\"https://www.youtube.com/watch?v=rB5xUStsUs4\">it</a>.\n        Essentially, it is digital information augmenting your view of the\n        environment around you.\n      </p>\n\n      <p>\n        <img src=\"https://mknepprath.com/assets/AR.jpg\" alt=\"AR glasses.\" />\n      </p>\n      <p>\n        Now, follow me as I share with you the near future of video gaming...\n        and reality.\n      </p>\n      <p>\n        Here&apos;s what we need to build a truly immersive augmented reality\n        video game experience.\n      </p>\n\n      <ol>\n        <li>\n          <strong>\n            Goggles, \n            <a href=\"http://www.youtube.com/watch?v=JSnB06um5r4\">glasses</a> or\n            contact lenses featuring augmented reality\n          </strong>\n          . Contact lenses may be out of our reach currently, but if we can\n          already fit augmented reality \n          <a href=\"http://www.youtube.com/watch?v=yk3rSX-vOVw\">this powerful</a> \n          into our handheld gaming devices or \n          <a href=\"http://www.youtube.com/watch?v=TL8bBeRCktQ\">phones</a>, then\n          goggles, or some other form of AR headgear, are already attainable.\n          Because we&apos;re wearing these goggles, everything we see will be\n          capable of having an overlay of digital data. The only problem is,\n          augmented reality always needs some sort of \n          <a href=\"http://www.youtube.com/watch?v=y6VPK-OyQwo\">\n            card or marker\n          </a> \n          to track. Right?\n        </li>\n        <li>\n          <strong>\n            PlayStation Vita-like \n            <a href=\"https://kotaku.com/5891459/the-playstation-vita-somehow-makes-augmented-reality-look-amazing\">\n              markerless augmented reality\n            </a>\n          </strong>\n          . PlayStation&apos;s device is actually able to read it&apos;s\n          surroundings, placing markers at different points and placing virtual\n          objects in relation to these points. You no longer need to bring a\n          deck of cards with you wherever you go. You can look at a carpet, and\n          your AR goggles will know that it is capable of placing a rubber duck\n          (or anything else) there. But what happens when these objects move?\n          And what happens when real objects are placed in front of the virtual\n          ones?\n        </li>\n        <li>\n          <strong>\n            Kinect-like \n            <a href=\"https://www.youtube.com/watch?v=qXcIZ1R68SQ\">\n              depth-sensing cameras\n            </a>\n          </strong>\n          . The technology that fixes this issue already exists, and you&apos;ve\n          heard of it. The Kinect has a depth-sensing camera, so when you want\n          to catch, block or kick a virtual object, you totally can. This is\n          key, as it allows you to interact with virtual objects in a very\n          familiar way, with our hands. These cameras combined with markerless\n          AR create a fully-mapped out digital copy of your physical surrounds\n          and objects, stationary or otherwise. These new objects still\n          won&apos;t feel entirely real, though, because any sounds they make\n          will be fed through a pair of cheap headphones, or through speakers in\n          the walls.\n        </li>\n        <li>\n          <strong>\n            Holophonic sound à la \n            <a href=\"https://www.youtube.com/watch?v=vuA8DmYCJb0\">\n              the Virtual Barbershop\n            </a>\n          </strong>\n          . Make sure you put on headphones and close your eyes before listening\n          to that clip. It turns out that our sound problem was solved all the\n          way back in 1980. \n          <a href=\"https://www.youtube.com/watch?v=WYdIidUIbAs\">\n            This was recorded in 1983\n          </a>\n          . Yes, it is possible to get more realistic sound through your little\n          headphones than through the most expensive surround sound system on\n          the market today. Headphones can easily fit into your funky\n          depth-sensing, environment-tracking goggles, so you now have the\n          ability to throw a virtual object and hear it hit the wall with\n          extreme realism.\n        </li>\n      </ol>\n\n      <p>\n        The first application I could see for a system like this would be a\n        virtual paintball-like experience. This type of game would require a\n        very simple controller, all it would require is a trigger-like\n        mechanism. The players first walk through the area they are going to\n        play in to map out the space. Then they play. The space they are playing\n        in can be digitally altered to look like any sort of terrain. Physical\n        barriers can be altered as well, but must still be present so that\n        people don&apos;t run into them. The controller can be given a virtual\n        skin of the type of gun you are using. Grenades can be thrown, and will\n        ricochet off of virtual and physical objects. Oh, and because everything\n        is being tracked virtually, you are even capable of seeing through\n        walls, or being invisible yourself.\n      </p>\n      <p>\n        The most exciting thing about this idea is that it&apos;s possible \n        <em>right now</em>. As displayed above, we have all of the required\n        technology. In future posts I will be discussing more specific game\n        ideas I have (AR WoW?), and even a few practical uses for this\n        technology.\n      </p>\n      <p>\n        What do you envision this technology being used for in the future?\n        Don&apos;t hesitate to share your ideas!\n      </p>",
      "content_text": "https://mknepprath.com/writing/augmented-reality-and-the-future-of-gaming",
      "image": "https://mknepprath.com/assets/AR.jpg",
      "date_published": "2012-07-13T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/buffer",
      "url": "https://mknepprath.com/writing/buffer",
      "title": "Become More Effective On Twitter with Buffer",
      "content_html": "<header>\n        <h1>Become More Effective On Twitter with Buffer</h1>\n      </header>\n\n      <p>\n        I ran into a problem recently. I would read a bunch of posts and share\n        them all on Twitter right away. My followers would get inundated with\n        updates, and usually not at a time that was ideal for them. How was I to\n        continue sharing all of my discoveries without losing all of my\n        followers?\n      </p>\n      <p>\n        <a href=\"http://bufferapp.com/r/507fd\">Buffer</a> had the answer.\n      </p>\n      <p>\n        Buffer allows you to create a schedule for your tweets, spreading them\n        out so that your posts are consistent, but not overwhelming. Here’s how\n        to make the most of Buffer:\n      </p>\n      <ol>\n        <li>\n          <b>\n            Install the \n            <a href=\"http://bufferapp.com/extras\">Buffer extensions and apps</a>\n            .\n          </b> \n          You need these if you want to take full advantage of Buffer. I use the\n          Chrome extension, which puts Buffer at the top of the browser at all\n          times, and also integrates a Buffer button into Twitter, Facebook,\n          Reddit, and many more websites.\n        </li>\n        <li>\n          <b>Keep your Buffer queue full.</b> Whenever you find anything you\n          want to tweet, click Buffer. A window will open where you can tweak\n          the post that is automatically generated. Once you’ve perfected the\n          post, click Add to Buffer.\n        </li>\n        <li>\n          <b>Reorder tweets & tweak settings.</b> When you visit Buffer’s\n          website, you will be taken to your dashboard. Here you are able to see\n          all of your tweets and what times they are scheduled to go live.\n          You’re able to switch the order, edit the posts, and edit the default\n          schedule. As you use Buffer more, you’ll begin to discover which times\n          are the most effective and which ones may need to be changed. The\n          default schedule was calculated to be the most ideal for everyone, not\n          necessarily for your audience.\n        </li>\n      </ol>\n      <p>\n        If you plan on using this tool, I recommend that you \n        <a href=\"http://bufferapp.com/r/507fd\">follow this link</a> and sign up.\n        This will give us both a referral bonus of one extra space in our\n        queues.\n      </p>\n      <p>\n        What tools do you currently use to manage your tweets, if any? I’d love\n        to hear about them and try them out!\n      </p>",
      "content_text": "https://mknepprath.com/writing/buffer",
      "date_published": "2012-07-10T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/pocket",
      "url": "https://mknepprath.com/writing/pocket",
      "title": "Stay On Task with Pocket",
      "content_html": "<header>\n        <h1>Stay On Task with Pocket</h1>\n      </header>\n\n      <p>\n        I am constantly reading new articles about design, technology, social\n        media, music, news, etc. It’s great and I enjoy it, but the sheer amount\n        of content posted online can become overwhelming, and can even distract\n        from the work I should be getting done.\n      </p>\n      <p>\n        Enter stage left: <a href=\"http://getpocket.com/\">Pocket</a>.\n      </p>\n      <p>\n        Pocket (formerly Read It Later) was not on my grid until the name change\n        and a recommendation by \n        <a href=\"https://twitter.com/LeoWid/\">Leo Widrich</a>, co-founder of \n        <a\n          title=\"I'll cover this in a future post.\"\n          href=\"http://bufferapp.com/\"\n        >\n          Buffer\n        </a>\n        . Here’s how it works:\n      </p>\n      <ol>\n        <li>\n          <b>Install the Pocket extension or bookmarklet.</b> To get the most\n          out of this service, you’ll want to \n          <a href=\"http://getpocket.com/add/\">\n            install the Chrome extension or bookmarklet\n          </a>\n          . This puts it at the top of your browser at all times. If you have\n          Chrome, the extension is recommended over the bookmarklet, as the\n          extension also integrates Pocket into many commonly viewed websites,\n          such as Twitter.\n        </li>\n        <li>\n          <b>Send all articles to the Pocket queue.</b> The goal of Pocket is to\n          save all the articles you want to read for later, when you have time\n          set aside to read them. This would ideally be a time when you have\n          nothing else you are capable of accomplishing, like on a bus ride or\n          on a plane. When you come across an article you want to read, click\n          the extension or bookmarklet, and the article will be sent to your\n          queue. That’s it. If you see a tweet that links to an article you want\n          to read, click on the tweet, and then click Pocket. Pocket even claims\n          to be integrated into 300+ different apps, including Flipboard. It’s\n          extremely easy to collect articles from every source you might be\n          browsing on a regular basis.\n        </li>\n        <li>\n          <b>Read the articles.</b> When you want to read these saved articles\n          later, Pocket allows you to view your queue on \n          <a href=\"http://getpocket.com/\">their website</a> or through their app\n          for iPhone, iPad, and Android.\n        </li>\n      </ol>\n      <p>\n        That’s it! Pocket’s versatility is it’s main strength, as you’re able to\n        pull articles through almost any venue, and read them later on the\n        device of your choosing. Try it out and share what works best for you!\n      </p>\n      <p>\n        Are you in need of a Pocket-like service? Have you found any\n        alternatives that you like better? Let me know!\n      </p>",
      "content_text": "https://mknepprath.com/writing/pocket",
      "date_published": "2012-07-10T15:00:00Z"
    },
    {
      "id": "https://mknepprath.com/writing/pinterest",
      "url": "https://mknepprath.com/writing/pinterest",
      "title": "Harness the Power of Pinterest",
      "content_html": "<header>\n        <h1>Harness the Power of Pinterest</h1>\n      </header>\n\n      <p>\n        Unless you’ve been hiding under a rock, you probably heard about\n        Pinterest’s recent and rapid rise to fame. Pinterest is a “virtual\n        pinboard” where one is able to post images from anywhere on the web and\n        share them with their friends. It wasn’t originally targeted towards any\n        particular audience, but the user base is currently \n        <a href=\"http://mashable.com/2012/07/04/men-women-social-media/\">\n          predominantly women\n        </a>\n        .\n      </p>\n      <p>\n        Many businesses are just now discovering that there is value in\n        participating in social media, but where does Pinterest fit into this\n        mix?\n      </p>\n      <p>\n        Pinterest, a network composed of found graphics and photos, functions\n        differently from other social media sites you may be used to. Here are a\n        few tips to help you be more successful on this new platform.\n      </p>\n      <ol>\n        <li>\n          <b>Tailor your images for the audience. </b>As mentioned earlier,\n          Pinterest is primarily women. As such, it’s not surprising that some\n          of the top brands on the site are related to wedding planning,\n          parenting, chocolate, and clothing. You (or your business) don’t\n          necessarily have to fall into these categories, but be sure that you\n          are targeting the correct audience.\n        </li>\n        <li>\n          <b>Create shareable images. </b>The main size at which your images\n          will be viewed is relatively small, a measly 192 pixels across.\n          Therefore, if you are planning on including words, make them large\n          enough to be legible at that width. There will be a much greater\n          chance of people reading what you are attempting to share with them.\n        </li>\n        <li>\n          <b>Be aware of the trends.</b> Speaking of including words in your\n          pins, doing just that is highly recommended. Inspirational quotes go\n          viral frequently, as many users like and relate to them. Other trends\n          include food, hair, shoes, dresses, and design.\n        </li>\n        <li>\n          <b>Create a gallery on your website.</b> This mainly applies to\n          businesses, and is also where the marketing value of Pinterest lies.\n          When a person pins an interesting or beautiful image from a website,\n          their friends will start to share it with each other. Then their\n          friends share it with their friends. If that doesn’t already sound\n          amazing, here’s the clincher. Each of these pins is a link back to the\n          website they were originally pinned from. Yours.\n        </li>\n        <li>\n          <b>Consistently share new pins.</b> The most important step is also\n          the most difficult. Be consistent. Add pins on a regular basis so\n          people have a reason to keep coming back. If your page grows stagnant,\n          they will stop checking.\n        </li>\n      </ol>\n      <p>\n        To see some of these tips in action, here’s \n        <a href=\"http://www.socialmediaexaminer.com/how-alaskan-mom-brings-millions-to-her-carpentry-blog/\">\n          a cool case study\n        </a> \n        about an Alaskan mom who draws millions of people to her carpentry blog\n        through Pinterest.\n      </p>\n      <p>\n        What do you think? Do you have any tips through your experience on\n        Pinterest?\n      </p>",
      "content_text": "https://mknepprath.com/writing/pinterest",
      "date_published": "2012-07-06T15:00:00Z"
    }
  ]
}