<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Get Info</title>
    <description>Blog of independent video game developer and digital media artist Matt Sephton. Featuring vintage Macintosh, game development, digital artwork, Japanese esoterica, video game reviews, hacks and tips, and much more.</description>
    <link>https://blog.gingerbeardman.com/</link>
    <atom:link href="https://blog.gingerbeardman.com/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Sun, 12 Apr 2026 12:08:38 +0000</pubDate>
    <lastBuildDate>Sun, 12 Apr 2026 12:08:38 +0000</lastBuildDate>
    <generator>Jekyll v4.4.1</generator>

    
      
        <item>
          <title>TV’s TV (1987) &amp; TV Games Encyclopedia (1988)</title>
          <description>&lt;p&gt;&lt;a href=&quot;https://ja.wikipedia.org/wiki/TV%27s_TV&quot;&gt;TV’s TV&lt;/a&gt; was a four-hour late-night television program broadcast in Japan on Fuji TV from 01:55 to 05:55 on Saturday, March 14, 1987. It was a televisual predecessor to a book that I also discuss below, and an early sign of the experimental programming that Fuji TV would formalise later that year with its &lt;a href=&quot;https://en.wikipedia.org/wiki/Fuji_Television&quot;&gt;&lt;em&gt;JOCX-TV2&lt;/em&gt;&lt;/a&gt; late-night brand—a slot explicitly created to give young creators room to experiment.&lt;/p&gt;

&lt;p&gt;The program comprised 100 TV spots, presented as a wall of TVs, showcasing a range of video games from around the world. For many Japanese viewers, it was their first encounter with the &lt;em&gt;Amiga&lt;/em&gt;, &lt;em&gt;Apple II&lt;/em&gt;, and &lt;em&gt;Atari&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The creative credits read like a who’s who of future Japanese media innovators. &lt;a href=&quot;https://en.wikipedia.org/wiki/Toshio_Iwai&quot;&gt;Toshio Iwai&lt;/a&gt; (&lt;em&gt;Otocky&lt;/em&gt;, &lt;em&gt;SimTunes&lt;/em&gt;, &lt;em&gt;Electroplankton&lt;/em&gt;, &lt;em&gt;Tenori-on&lt;/em&gt;) created the CG using an &lt;em&gt;Amiga&lt;/em&gt;. &lt;a href=&quot;https://en.wikipedia.org/wiki/Masaya_Matsuura&quot;&gt;Masaya Matsuura&lt;/a&gt; (&lt;em&gt;The Seven Colors: Legend of PSY·S City&lt;/em&gt;, &lt;em&gt;PaRappa the Rapper&lt;/em&gt;, &lt;em&gt;Vib-Ribbon&lt;/em&gt;) composed the music. The show’s production was overseen by &lt;a href=&quot;https://en.wikipedia.org/wiki/Tsunekazu_Ishihara&quot;&gt;Tsunekazu Ishihara&lt;/a&gt;—now president of &lt;em&gt;The Pokémon Company&lt;/em&gt;—who would go on to direct the book that followed.&lt;/p&gt;

&lt;p&gt;TV’s TV ushered in a new way of looking at television, not only because it introduced Western computers and games to a Japanese audience, but because it did so in a format that was itself playful and game-like.&lt;/p&gt;

&lt;p&gt;There’s a &lt;a href=&quot;https://www.youtube.com/watch?v=_7zMKqrYvOA&quot;&gt;full table of contents in the description of the video below&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But don’t watch the 4 hours yet! Read on.&lt;/p&gt;

&lt;!-- video of TV&apos;S TV, 4 hours --&gt;
&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;_7zMKqrYvOA&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;テレビゲーム電視遊戯大全--tv-games-encyclopedia-1988&quot;&gt;テレビゲーム―電視遊戯大全 / TV Games Encyclopedia (1988)&lt;/h2&gt;

&lt;p&gt;The following year, the team behind TV’s TV channelled that same energy into print. The result might be described as a book, but it’s much more than that. テレビゲーム―電視遊戯大全 (&lt;em&gt;TV GAMES: Denshi Yūgi Taizen&lt;/em&gt;; &lt;em&gt;TV Games Encyclopedia&lt;/em&gt;), published in May 1988 by UPU, ISBN4-946432-31-0, was a seminal encyclopedia of video game history—and perhaps the single most ambitious book about games ever produced.&lt;/p&gt;

&lt;p&gt;It arrived right in the middle of &lt;a href=&quot;https://en.wikipedia.org/wiki/Japanese_asset_price_bubble&quot;&gt;Japan’s bubble economy&lt;/a&gt;. Between roughly 1986 and 1991, a combination of rock-bottom interest rates and rampant speculation sent asset prices into the stratosphere. &lt;a href=&quot;https://archive.is/ecDHb&quot;&gt;Money was everywhere&lt;/a&gt; and it was looking for things to be spent on.&lt;/p&gt;

&lt;p&gt;This was the era when Japanese corporations bought Rockefeller Center and Columbia Pictures. When golf club memberships traded for the price of houses. When the land beneath the Imperial Palace in Tokyo was theoretically worth more than the entire state of California. Consumer spending went through the roof: credit card circulation tripled, luxury imports quadrupled, and the art market went berserk—Japanese buyers paid record sums at auction for Renoirs and Van Goghs just because they could.&lt;/p&gt;

&lt;p&gt;The cultural side-effects were extraordinary. &lt;a href=&quot;https://archive.is/https://www.nytimes.com/2018/04/06/business/japan-1980s-bubble-era.html&quot;&gt;Bubble-era&lt;/a&gt; money funded some of the most ambitious, beautiful, and outright weird creative projects Japan has ever produced. &lt;a href=&quot;https://text-bin.blogspot.com/2017/04/architecture-of-japanese-bubble.html&quot;&gt;Architecture&lt;/a&gt;, &lt;a href=&quot;https://nostos.jp/archives/114901&quot;&gt;graphic design&lt;/a&gt;, &lt;a href=&quot;https://mouldmap.tumblr.com/post/152559790016/magazines-of-the-japanese-bubble-economy&quot;&gt;magazines&lt;/a&gt;, &lt;a href=&quot;https://petrolblog.com/articles/bubble-cars-brief-history-nissan-pike-factory&quot;&gt;vehicles&lt;/a&gt;, &lt;a href=&quot;https://www.japanhouselondon.uk/read-and-watch/city-pop-japans-bubble-era-soundtrack-thats-more-popular-than-ever/&quot;&gt;music&lt;/a&gt;, &lt;a href=&quot;https://www.yumeiorigin.com/articles-en/a-glimpse-into-japans-bubble-economy-wealth-and-illusion&quot;&gt;fashion&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=YIi_MGNW6Q0&quot;&gt;animation&lt;/a&gt;—everything was touched by the sense that budgets were infinite and ambition should match. It’s no coincidence that this period overlaps with the golden age of Japanese game development, or that Fuji TV was handing late-night airtime to young experimentalists, or that someone thought a four-hour TV program about Western computer games was a good idea.&lt;/p&gt;

&lt;p&gt;The TV Games Encyclopedia is very much a product of this moment. Its lavish physical production—the frosted plastic slipcase, the variety of paper stocks, the multiple print techniques and finishes—reflects the kind of excess that was not only possible but expected. A book about video games had no business being this beautifully made. And yet here it was, priced at ¥3,500, with the ambition and budget of an art object. When the bubble burst in 1991—ushering in what became known as the Lost Decades—this kind of thing simply stopped being made.&lt;/p&gt;

&lt;h3 id=&quot;the-object&quot;&gt;The object&lt;/h3&gt;

&lt;p&gt;The book is extravagantly packaged in a frosted plastic slipcase and printed on a variety of paper stocks. It contains a host of different print techniques, finishes, and folds—and, most obviously, it is ring-bound with the majority of pages split into three horizontal sections. Unusually for a Japanese book from this period, it reads from left to right in the Western manner.&lt;/p&gt;

&lt;p&gt;This makes reading the book an experience like nothing else. Pages are linked with cross-references, giving it a game-like, exploratory feeling. At various points, atmospheric photographs of games taken off cathode ray tube screens are spread across three separate panels, but the panels are distributed almost randomly throughout the book—making it a sort of puzzle to be able to view the whole image.&lt;/p&gt;

&lt;p&gt;Imagine a hyperactive version of a choose-your-own-adventure book, or a paper-based website before the age of the internet.&lt;/p&gt;

&lt;p&gt;The book was designed by Hitoshi Suzuki (鈴木一誌), one of Japan’s most influential book designers—a protégé of Kohei Sugiura (杉浦 康平) known for radical editorial layouts. Phototypesetting was by Masaaki Inoue (井上聖昭), with design assistance from Takao Kabaya (蒲谷孝夫).&lt;/p&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;b&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;c&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;d&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;e&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;f&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;g&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;h&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;i&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;j&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;j&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;f&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;g&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;f&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;h&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;g&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;i&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;h&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;j&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;i&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tv-games/IMG_1324.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tv-games/IMG_1324.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tv-games/IMG_1326.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tv-games/IMG_1326.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tv-games/IMG_1327.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tv-games/IMG_1327.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tv-games/IMG_1328.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tv-games/IMG_1328.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tv-games/IMG_1329.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tv-games/IMG_1329.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tv-games/IMG_1330.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tv-games/IMG_1330.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tv-games/IMG_1331.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tv-games/IMG_1331.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tv-games/IMG_1333.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tv-games/IMG_1333.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tv-games/IMG_1334.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tv-games/IMG_1334.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tv-games/IMG_1325.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tv-games/IMG_1325.jpg&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;f&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;g&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;h&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;i&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;j&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 72%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__staticimage,
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}

.carousel__activator:nth-of-type(3):checked ~ .carousel__track {
  -webkit-transform: translateX(-200%);
          transform: translateX(-200%);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__slide:nth-of-type(3) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__controls:nth-of-type(3) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(3) {
  opacity: 1;
}

.carousel__activator:nth-of-type(4):checked ~ .carousel__track {
  -webkit-transform: translateX(-300%);
          transform: translateX(-300%);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__slide:nth-of-type(4) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__controls:nth-of-type(4) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(4) {
  opacity: 1;
}

.carousel__activator:nth-of-type(5):checked ~ .carousel__track {
  -webkit-transform: translateX(-400%);
          transform: translateX(-400%);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__slide:nth-of-type(5) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__controls:nth-of-type(5) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(5) {
  opacity: 1;
}

.carousel__activator:nth-of-type(6):checked ~ .carousel__track {
  -webkit-transform: translateX(-500%);
          transform: translateX(-500%);
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__slide:nth-of-type(6) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__controls:nth-of-type(6) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(6) {
  opacity: 1;
}

.carousel__activator:nth-of-type(7):checked ~ .carousel__track {
  -webkit-transform: translateX(-600%);
          transform: translateX(-600%);
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__slide:nth-of-type(7) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__controls:nth-of-type(7) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(7) {
  opacity: 1;
}

.carousel__activator:nth-of-type(8):checked ~ .carousel__track {
  -webkit-transform: translateX(-700%);
          transform: translateX(-700%);
}
.carousel__activator:nth-of-type(8):checked ~ .carousel__slide:nth-of-type(8) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(8):checked ~ .carousel__controls:nth-of-type(8) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(8):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(8) {
  opacity: 1;
}

.carousel__activator:nth-of-type(9):checked ~ .carousel__track {
  -webkit-transform: translateX(-800%);
          transform: translateX(-800%);
}
.carousel__activator:nth-of-type(9):checked ~ .carousel__slide:nth-of-type(9) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(9):checked ~ .carousel__controls:nth-of-type(9) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(9):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(9) {
  opacity: 1;
}

.carousel__activator:nth-of-type(10):checked ~ .carousel__track {
  -webkit-transform: translateX(-900%);
          transform: translateX(-900%);
}
.carousel__activator:nth-of-type(10):checked ~ .carousel__slide:nth-of-type(10) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(10):checked ~ .carousel__controls:nth-of-type(10) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(10):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(10) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(3) {
  -webkit-transform: translateX(200%) translateZ(0);
          transform: translateX(200%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(4) {
  -webkit-transform: translateX(300%) translateZ(0);
          transform: translateX(300%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(5) {
  -webkit-transform: translateX(400%) translateZ(0);
          transform: translateX(400%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(6) {
  -webkit-transform: translateX(500%) translateZ(0);
          transform: translateX(500%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(7) {
  -webkit-transform: translateX(600%) translateZ(0);
          transform: translateX(600%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(8) {
  -webkit-transform: translateX(700%) translateZ(0);
          transform: translateX(700%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(9) {
  -webkit-transform: translateX(800%) translateZ(0);
          transform: translateX(800%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(10) {
  -webkit-transform: translateX(900%) translateZ(0);
          transform: translateX(900%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(3),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(3) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(4),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(4) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(5),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(5) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(6),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(6) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(7),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(7) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(8),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(8) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(9),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(9) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(10),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(10) {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;.carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },10000);
  
&lt;/script&gt;

&lt;h3 id=&quot;the-name&quot;&gt;The name&lt;/h3&gt;

&lt;p&gt;The title is doubled: first in modern katakana (テレビゲーム, &lt;em&gt;terebi gēmu&lt;/em&gt;) and then in classical kanji (電視遊戯大全, &lt;em&gt;denshi yūgi taizen&lt;/em&gt;—literally “electronic play grand compendium”). The former is how Japanese people actually say “video game”; the latter is an archaic, almost scholarly construction. The juxtaposition is deliberately playful.&lt;/p&gt;

&lt;h3 id=&quot;the-structure&quot;&gt;The structure&lt;/h3&gt;

&lt;p&gt;The main body of the book is divided into four parts:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;KEY&lt;/th&gt;
      &lt;th&gt;Section&lt;/th&gt;
      &lt;th&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;td&gt;History&lt;/td&gt;
      &lt;td&gt;The history of video games, from Willy Higinbotham’s tennis game&lt;br /&gt;through Space Invaders, the Atari VCS, Apple II, and the Famicom&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
      &lt;td&gt;Creators&lt;/td&gt;
      &lt;td&gt;Companies and key developers&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;＊&lt;/td&gt;
      &lt;td&gt;200 Games&lt;/td&gt;
      &lt;td&gt;Two hundred selected titles across all platforms&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;＋&lt;/td&gt;
      &lt;td&gt;Interviews &amp;amp; Columns&lt;/td&gt;
      &lt;td&gt;In-depth conversations with creators and essays on game culture&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Because every page is physically split into three sections—and each section carries jump signs pointing to related content elsewhere—you don’t read the book linearly. You follow threads. Top section might be history, middle section a company profile, bottom section a game entry, and the cross-references send you bouncing between all three. It is, in the most literal sense, a hypertext document published five years before Mosaic.&lt;/p&gt;

&lt;h3 id=&quot;the-content&quot;&gt;The content&lt;/h3&gt;

&lt;p&gt;All contemporary platforms of 1988 are covered, and crucially the focus is worldwide rather than Japan-only, making it a comprehensive who’s who from the golden age of video games. The book documents over 200 games, profiles dozens of companies and creators, and contains what may be the richest set of developer interviews assembled in a single volume up to that point.&lt;/p&gt;

&lt;h3 id=&quot;the-people-behind-it&quot;&gt;The people behind it&lt;/h3&gt;

&lt;p&gt;The book was planned and directed by Tsunekazu Ishihara (石原恒和), now president of &lt;em&gt;The Pokémon Company&lt;/em&gt;, and produced by the company SEDIC—the same outfit that developed the musical-platform game &lt;a href=&quot;https://en.wikipedia.org/wiki/Otocky&quot;&gt;&lt;em&gt;Otocky&lt;/em&gt;&lt;/a&gt; (1987), designed by Toshio Iwai. The creative thread connecting TV’s TV, &lt;em&gt;Otocky&lt;/em&gt;, and this book is SEDIC and Ishihara’s circle: a group of people at the intersection of games, art, and media who understood video games not as disposable entertainment but as a cultural form worth documenting seriously. The team were also featured in the &lt;a href=&quot;/2024/06/18/tetris-heavenly-scrolls/&quot;&gt;&lt;em&gt;Tetris: Heavenly Scrolls&lt;/em&gt;&lt;/a&gt; book in 1989.&lt;/p&gt;

&lt;p&gt;Among the book’s contributors was Satoshi Tajiri (田尻智), who later created &lt;em&gt;Pokémon&lt;/em&gt; and is currently president of Game Freak. Tajiri had already established himself through his &lt;em&gt;Game Freak&lt;/em&gt; fanzine as one of Japan’s most dedicated game critics, and his presence here—alongside Ishihara—prefigures the partnership that would eventually produce the world’s largest media franchise.&lt;/p&gt;

&lt;p&gt;This is also the book that &lt;a href=&quot;https://web.archive.org/web/20170619183013/https://news.denfaminicogamer.jp/english/170612&quot;&gt;Tetsuya Mizuguchi cites as the genesis of his career in video games&lt;/a&gt;. Mizuguchi would go on to create &lt;em&gt;Sega Rally Championship&lt;/em&gt;, &lt;em&gt;Rez&lt;/em&gt;, &lt;em&gt;Lumines&lt;/em&gt;, and &lt;em&gt;Tetris Effect&lt;/em&gt;—a body of work deeply concerned with synesthesia, music, and the sensory experience of play. It’s not hard to see how a book this alive to the artistic possibilities of games might have lit that fuse.&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;a-note-on-names&quot;&gt;A note on names&lt;/h3&gt;

&lt;p&gt;The book contains several misspellings of Western names, and at least one name that has since changed. For the record:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Dan Bynten in the book → Danielle Bunten Berry (credited as Dan Bunten at the time; designer of M.U.L.E. and Seven Cities of Gold, she transitioned in 1992)&lt;/li&gt;
  &lt;li&gt;Tossio Iwai in the book → Toshio Iwai (岩井俊雄; his own name is romanised inconsistently)&lt;/li&gt;
  &lt;li&gt;Mark F. Flint — this is the pseudonym of the head of System Sacom, a Japanese game developer responsible for titles including Dome, Soft de Hard na Monogatari, and Xenon 2: Megablast (Japanese release). His real name remains unclear. The book contains what appears to be his only substantial interview—and possibly the only interview with him under any name!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The people list and interview list below use corrected/modern names.&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;people-featured&quot;&gt;People featured&lt;/h3&gt;

&lt;p&gt;Douglas Noel Adams · Don Bluth · Bill Budge · Danielle Bunten Berry · Nolan Bushnell · Douglas G. Carlston · Steve Cartwright · David Crane · Chris Crawford · Masanobu Endō · Mark F. Flint · David Fox · Richard Garriott · Nasir Gebelli · Hibiki Godai · Dan Gorlin · Satoshi Honda · Yūji Horii · Haruomi Hosono · Rob Hubbard · Toshio Iwai · Tōru Iwatani · Eugene P. Jarvis · Garry Kitchen · Yoshio Kiya · Timothy Leary · Ed Logg · Alan R. Miller · Shigeru Miyamoto · Kazuo Morita · Paul Murray · Kōichi Nakamura · Tomohiro Nishikado · Kazunori Sawano · Tom Snyder · Kōichi Sugiyama · Takanari Suzuki · Tony Suzuki · Toshiyuki Takahashi · Bill Williams · Roberta and Ken Williams&lt;/p&gt;

&lt;h3 id=&quot;companies-featured&quot;&gt;Companies featured&lt;/h3&gt;

&lt;p&gt;Accolade · Activision · Artdink · ASCII · Atari · Atari Games · Avalon Hill · Bandai · Beagle Bros · Bothtec · BPS · Brøderbund · Chat Noir · Electronic Arts · Enix · Enzan-Hoshigumi · Epyx · Firebird Software · Free Fall Associates · Game Arts · Game Studio · Hudson · Infocom · Irem · Koei · Konami · Kogado Studio · The Learning Company · LucasFilm Games · Mindscape · MIT · Namco · Nihon Falcom · Nintendo · Optimum Resource · Origin Systems · Sega Enterprises · Sierra On-Line · Silicon Beach · Sir-Tech Software · Sirius Software · Square · Strategic Simulations · Sublogic · Synapse Software · T&amp;amp;E Soft · Taito · Thinking Rabbit · Tokyo-Shoseki · Williams&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;interviews&quot;&gt;Interviews&lt;/h3&gt;

&lt;p&gt;The interview section is the book’s crown jewel. It contains what are believed to be the only interviews ever conducted with several of its subjects—most notably Mark Flint (the enigmatic head of System Sacom). With rare input from people like Fukio “MTJ” Mitsuji (creator of Bubble Bobble, who died in 2008). For a number of the Western developers, these are the earliest known long-form interviews, predating the retro gaming preservation movement by over a decade.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Accolade (Peter Doctorow)&lt;/li&gt;
  &lt;li&gt;Activision (Jeffrey Mulligan, Richard Larberg)&lt;/li&gt;
  &lt;li&gt;Activision &amp;amp; Sound (&lt;a href=&quot;https://twitter.com/hallyvorc/status/979305131014438912&quot;&gt;Russell Lieblich&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Atari (Nolan Bushnell)&lt;/li&gt;
  &lt;li&gt;Atari Games (Ed Logg)&lt;/li&gt;
  &lt;li&gt;Atari Games Japan (Hideyuki Nakajima)&lt;/li&gt;
  &lt;li&gt;Atari, Activision, Accolade (Alan Miller)&lt;/li&gt;
  &lt;li&gt;Brøderbund (Douglas Carlston)&lt;/li&gt;
  &lt;li&gt;Activision (Steve Cartwright)&lt;/li&gt;
  &lt;li&gt;Bubble Bobble (Fukio “MTJ” Mitsuji)&lt;/li&gt;
  &lt;li&gt;Electronic Arts (Trip Hawkins)&lt;/li&gt;
  &lt;li&gt;Free Fall Associates (John Freeman, Anne Westfall)&lt;/li&gt;
  &lt;li&gt;Irem (Mitsuri Kawai, Masato Ishizaki, Atsushi Yamazaki)&lt;/li&gt;
  &lt;li&gt;LucasFilm Games (David Fox)&lt;/li&gt;
  &lt;li&gt;Mind Mirror (Timothy Leary)&lt;/li&gt;
  &lt;li&gt;Namco (Masanobu Endō)&lt;/li&gt;
  &lt;li&gt;Nintendo (&lt;a href=&quot;https://shmuplations.com/miyamoto1989/&quot;&gt;Shigeru Miyamoto&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Nintendo Concepts &amp;amp; Future Developments (Hiroshi Imanishi)&lt;/li&gt;
  &lt;li&gt;Door Door, Dragon Quest (Kōichi Nakamura)&lt;/li&gt;
  &lt;li&gt;“Dragon Quest” (Yūji Horii)&lt;/li&gt;
  &lt;li&gt;Galaxian (Kazunori Sawano)&lt;/li&gt;
  &lt;li&gt;Pac-Man (Tōru Iwatani)&lt;/li&gt;
  &lt;li&gt;Space Invaders (Tomohiro Nishikado)&lt;/li&gt;
  &lt;li&gt;Strategic Simulations (Joel Billings, Randy Broweleit)&lt;/li&gt;
  &lt;li&gt;Wizardry (Sir-Tech)&lt;/li&gt;
  &lt;li&gt;Q&amp;amp;A (Bill Williams)&lt;/li&gt;
  &lt;li&gt;“Copywriting” (Shigesato Itoi)&lt;/li&gt;
  &lt;li&gt;“Future Video Games” (Toshio Iwai)&lt;/li&gt;
  &lt;li&gt;“Video Games are Borderline” (Rika Kayama)&lt;/li&gt;
  &lt;li&gt;Taito &amp;amp; PSG (Tadashi Kimijima)&lt;/li&gt;
  &lt;li&gt;“Kind-Hearted Hackers” (Yūichi Konno)&lt;/li&gt;
  &lt;li&gt;“Discovering Otaku, 1987” (Hiroshi Masuyama)&lt;/li&gt;
  &lt;li&gt;“My Soliloquy” (Takao Momozono)&lt;/li&gt;
  &lt;li&gt;“Invader Now” (Fumihiro Nonomura)&lt;/li&gt;
  &lt;li&gt;TRON Real Time Operating System (Ken Sakamura)&lt;/li&gt;
  &lt;li&gt;“Future of Games” (Izuo Sakane)&lt;/li&gt;
  &lt;li&gt;“Games &amp;amp; Science Fiction” (Takao Shiga)&lt;/li&gt;
  &lt;li&gt;Music &amp;amp; Games (Kōichi Sugiyama)&lt;/li&gt;
  &lt;li&gt;“Luxury in Video Games” (Satoshi Tajiri)&lt;/li&gt;
  &lt;li&gt;“Computer Culture” (Mitsuhiro Takemura)&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;authors&quot;&gt;Authors&lt;/h3&gt;

&lt;div class=&quot;table-wrapper&quot;&gt;
  &lt;table&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th&gt;Init&lt;/th&gt;
        &lt;th&gt;Name&lt;/th&gt;
        &lt;th&gt;Romanisation&lt;/th&gt;
        &lt;th&gt;Notes&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;AM&lt;/td&gt;
        &lt;td&gt;&lt;span title=&quot;みうら・あきひこ&quot;&gt;三浦明彦&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;Akihiko Miura&lt;/td&gt;
        &lt;td&gt;SEDIC, Otocky. Game designer, Star Craft (&lt;a href=&quot;https://www.mobygames.com/person/99884/akihiko-miura/&quot;&gt;MobyGames&lt;/a&gt;)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;EM&lt;/td&gt;
        &lt;td&gt;&lt;span title=&quot;まつむら・えいじ&quot;&gt;松村英治&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;Eiji Matsumura&lt;/td&gt;
        &lt;td&gt;Writer, Amiga consultant (&lt;a href=&quot;https://www.mobygames.com/person/78932/eiji-matsuura/&quot;&gt;MobyGames&lt;/a&gt;)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;FF&lt;/td&gt;
        &lt;td&gt;&lt;span title=&quot;ふじえ・ふようこ&quot;&gt;原田ユニ子&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;Fujie Fuyouko&lt;/td&gt;
        &lt;td&gt;Real name Yuniko Harada. Translator&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;HK&lt;/td&gt;
        &lt;td&gt;&lt;span title=&quot;きいお・ひろたか&quot;&gt;紀伊尾宏隆&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;Hirotaka Kiio&lt;/td&gt;
        &lt;td&gt;Freelance writer (&lt;a href=&quot;https://www.mobygames.com/person/483409/hirotaka-kiio/&quot;&gt;MobyGames&lt;/a&gt;)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;HM&lt;/td&gt;
        &lt;td&gt;&lt;span title=&quot;ますやま・ひろし&quot;&gt;桝山 寛&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;Hiroshi Masuyama&lt;/td&gt;
        &lt;td&gt;SEDIC, Otocky. Techno/director (&lt;a href=&quot;https://www.mobygames.com/person/524137/hiroshi-masuyama/&quot;&gt;MobyGames&lt;/a&gt;)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;HQ&lt;/td&gt;
        &lt;td&gt;&lt;span title=&quot;こいずみ・すみれ&quot;&gt;小泉すみれ&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;Sumire Koizumi&lt;/td&gt;
        &lt;td&gt;Editor&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;KH&lt;/td&gt;
        &lt;td&gt;&lt;span title=&quot;ひらばやし・かずのり&quot;&gt;平林一則&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;Kazunori Hirabayashi&lt;/td&gt;
        &lt;td&gt;Freelance, Yotsuya Bannō Kikaku&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;KI&lt;/td&gt;
        &lt;td&gt;&lt;span title=&quot;いとう・けい&quot;&gt;伊藤 桂&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;Kei Itō&lt;/td&gt;
        &lt;td&gt;AV planner, editor of CAFE Magazine&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;KK&lt;/td&gt;
        &lt;td&gt;&lt;span title=&quot;くらしげ・こうすけ&quot;&gt;倉繁宏輔&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;Kōsuke Kurashige&lt;/td&gt;
        &lt;td&gt;SEDIC, CG engineer&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MT&lt;/td&gt;
        &lt;td&gt;&lt;span title=&quot;たきもと・まさし&quot;&gt;瀧本雅志&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;Masashi Takimoto&lt;/td&gt;
        &lt;td&gt;I&amp;amp;S, SEDIC. Now Professor, &lt;a href=&quot;https://www.grad.osaka-geidai.ac.jp/academics/arts/takimoto-masashi&quot;&gt;Osaka University of Arts&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;ST&lt;/td&gt;
        &lt;td&gt;&lt;span title=&quot;たじり・さとし&quot;&gt;田尻 智&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;Satoshi Tajiri&lt;/td&gt;
        &lt;td&gt;Writer, Game Freak fanzine. Creator of &lt;em&gt;Pokémon&lt;/em&gt; (&lt;a href=&quot;https://www.mobygames.com/person/128020/satoshi-tajiri/&quot;&gt;MobyGames&lt;/a&gt;)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;TI&lt;/td&gt;
        &lt;td&gt;&lt;span title=&quot;いしはら・つねかず&quot;&gt;石原恒和&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;Tsunekazu Ishihara&lt;/td&gt;
        &lt;td&gt;SEDIC, I&amp;amp;S. Now President, &lt;em&gt;The Pokémon Company&lt;/em&gt; (&lt;a href=&quot;https://www.mobygames.com/person/149103/tsunekazu-ishihara/&quot;&gt;MobyGames&lt;/a&gt;)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;TT&lt;/td&gt;
        &lt;td&gt;&lt;span title=&quot;たなか・としあき&quot;&gt;田中利昭&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;Toshiaki Tanaka&lt;/td&gt;
        &lt;td&gt;PC game reviewer for Bug News, Comptiq (&lt;a href=&quot;https://www.mobygames.com/person/1327944/toshiaki-tanaka/&quot;&gt;MobyGames&lt;/a&gt;)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;YI&lt;/td&gt;
        &lt;td&gt;&lt;span title=&quot;いしい・やすふみ&quot;&gt;石井康文&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;Yasufumi Ishii&lt;/td&gt;
        &lt;td&gt;Student, Gamer&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;YK&lt;/td&gt;
        &lt;td&gt;&lt;span title=&quot;こんの・ゆういち&quot;&gt;今野裕一&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;Yūichi Konno&lt;/td&gt;
        &lt;td&gt;Editor, Peyotl Kōbō (夜想, 銀星倶楽部, WAVE)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;YM&lt;/td&gt;
        &lt;td&gt;&lt;span title=&quot;もりかわ・ゆきひと&quot;&gt;森川 倖&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;Yukihito Morikawa&lt;/td&gt;
        &lt;td&gt;Manga artist, Yotsuya Bannō Kikaku&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;YT&lt;/td&gt;
        &lt;td&gt;&lt;span title=&quot;たむら・やすふみ&quot;&gt;田村安史&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;Yasufumi Tamura&lt;/td&gt;
        &lt;td&gt;System designer, technical writer&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;YY&lt;/td&gt;
        &lt;td&gt;&lt;span title=&quot;やました・ゆみこ&quot;&gt;山下由美子&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;Yumiko Yamashita&lt;/td&gt;
        &lt;td&gt;Freelance writer&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;

&lt;/div&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;its-been-scanned&quot;&gt;It’s been scanned&lt;/h2&gt;

&lt;p&gt;There’s a scan on Internet Archive, though this won’t give you the full hypertext experience!&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/tv-games/tv-games/mode/2up&quot;&gt;Full scan of the book on Internet Archive&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;contemporary-references&quot;&gt;Contemporary references&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/game-machine-magazine-19880701p/mode/1up&quot;&gt;Game Machine magazine, 1 July 1988&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/OhX_1988-07/page/n20/mode/2up&quot;&gt;Oh!X magazine, July 1988&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/OhMZOhx19861989/Oh%21X_1989-01/page/n31/mode/2up&quot;&gt;Oh!X magazine, January 1989&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;further-readingviewing&quot;&gt;Further reading/viewing&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://web.archive.org/web/20170619183013/https://news.denfaminicogamer.jp/english/170612&quot;&gt;Tetsuya Mizuguchi on how this book shaped his career&lt;/a&gt; (DenFamiNicoGamer, 2017)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.hardcoregaming101.net/japandvd/japandvd.htm&quot;&gt;The Untold History of Japanese Game Developers&lt;/a&gt; — a related documentary project&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://shmuplations.com/earlyarcade/&quot;&gt;Shmuplations: Early Arcade Developer Interviews&lt;/a&gt; — featuring translations from this book&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Tp9MRVGgIZ0&quot;&gt;Japan’s Bubble Era and Lost Decades&lt;/a&gt; (YouTube)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=6HUrl1JwmJs&quot;&gt;Documentary: Japan’s Bubble Economy&lt;/a&gt; (YouTube)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.is/https://www.nytimes.com/2018/04/06/business/japan-1980s-bubble-era.html&quot;&gt;Japan’s Bubble Era in the 1980s&lt;/a&gt; (New York Times, 2018)&lt;/li&gt;
  &lt;li&gt;Defining the Heisei Era (The Japan Times, 2018–2019):
&lt;a href=&quot;https://archive.is/https://features.japantimes.co.jp/heisei-moments-part-1-excess/&quot;&gt;1. Excess&lt;/a&gt; ·
&lt;a href=&quot;https://archive.is/https://features.japantimes.co.jp/heisei-moments-part-2-hangover/&quot;&gt;2. Hangover&lt;/a&gt; ·
&lt;a href=&quot;https://archive.is/https://features.japantimes.co.jp/heisei-moments-part-3-introspection/&quot;&gt;3. Introspection&lt;/a&gt; ·
&lt;a href=&quot;https://archive.is/https://features.japantimes.co.jp/heisei-moments-part-4-pride/&quot;&gt;4. Pride&lt;/a&gt; ·
&lt;a href=&quot;https://archive.is/https://features.japantimes.co.jp/heisei-moments-part-5-innovation/&quot;&gt;5. Innovation&lt;/a&gt; ·
&lt;a href=&quot;https://archive.is/https://features.japantimes.co.jp/heisei-moments-part-6-imagination/&quot;&gt;6. Imagination&lt;/a&gt; ·
&lt;a href=&quot;https://archive.is/https://features.japantimes.co.jp/heisei-moments-part-7-obsession/&quot;&gt;7. Obsession&lt;/a&gt; ·
&lt;a href=&quot;https://archive.is/https://features.japantimes.co.jp/heisei-moments-part-8-communication/&quot;&gt;8. Communication&lt;/a&gt; ·
&lt;a href=&quot;https://archive.is/https://features.japantimes.co.jp/heisei-moments-part-9-family/&quot;&gt;9. Family&lt;/a&gt; ·
&lt;a href=&quot;https://archive.is/https://features.japantimes.co.jp/heisei-moments-part-10-solidarity/&quot;&gt;10. Solidarity&lt;/a&gt; ·
&lt;a href=&quot;https://archive.is/https://features.japantimes.co.jp/heisei-moments-part-11-insecurity/&quot;&gt;11. Insecurity&lt;/a&gt; ·
&lt;a href=&quot;https://archive.is/https://features.japantimes.co.jp/heisei-moments-part-12-peace/&quot;&gt;12. Peace&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://twitter.com/search?q=テレビゲーム―電視遊戯大全&amp;amp;src=typed_query&amp;amp;f=live&quot;&gt;Search mentions of the book on Twitter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.hanmoto.com/bd/isbn/9784750515113&quot;&gt;Our History of Internet, by Barbora &amp;amp; Sayawaka&lt;/a&gt; (2017), page 33&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;buying-the-book-today&quot;&gt;Buying the book today&lt;/h2&gt;

&lt;p&gt;The current price for the book is high, and varies quite a lot. It’s gone up since I bought my first copy in 2022. Whilst it’s almost unknown in the West &lt;a href=&quot;https://twitter.com/search?q=%E3%83%86%E3%83%AC%E3%83%93%E3%82%B2%E3%83%BC%E3%83%A0%20%E9%9B%BB%E8%A6%96%E9%81%8A%E6%88%AF%E5%A4%A7%E5%85%A8&amp;amp;src=typed_query&amp;amp;f=live&quot;&gt;the book continues to be fondly remembered and much sought after in Japan&lt;/a&gt;. Today you’re looking at somewhere between £200–600 GBP, or equivalent, depending on the condition. Some have cracked outer case, some are missing the correction insert, some have gone mouldy with age. But, up to now they have come up for sale often.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://auctions.yahoo.co.jp/search/search?auccat=0&amp;amp;tab_ex=commerce&amp;amp;ei=utf-8&amp;amp;aq=-1&amp;amp;oq=&amp;amp;sc_i=&amp;amp;fr=&amp;amp;p=テレビゲーム+電視遊戯大全&quot;&gt;Yahoo! Japan Auctions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://jp.mercari.com/search?keyword=テレビゲーム%20電視遊戯大全&amp;amp;status=on_sale&quot;&gt;Mercari Japan&lt;/a&gt; classifieds&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.amazon.co.jp/テレビゲーム-電視遊戯大全-ミュージアム-プロジェクト/dp/4946432310&quot;&gt;Amazon Japan&lt;/a&gt; books&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.kosho.or.jp/products/list.php?transactionid=41fa80ed8c62bfb2924c5ea152828894160dc87c&amp;amp;mode=search&amp;amp;search_only_has_stock=1&amp;amp;search_word=テレビゲーム+電視遊戯大全&quot;&gt;Kosho&lt;/a&gt; book store search&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.fromjapan.co.jp/japan/en/item/search/テレビゲーム+電視遊戯大全/Al_11_Yh_RaRmMr_N_N_0A00ja0000_N/&quot;&gt;From Japan&lt;/a&gt; (offers reshipping worldwide)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://world.hoyoyo.com/goods~search.html?keyword=テレビゲーム―電視遊戯大全&amp;amp;keys=テレビゲーム―電視遊戯大全&amp;amp;lang=ja&amp;amp;sites_id=0&amp;amp;category_id=&amp;amp;fykeyid=650167&quot;&gt;HOYOYO&lt;/a&gt; (offers reshipping worldwide)&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;postscript&quot;&gt;Postscript&lt;/h2&gt;

&lt;p&gt;I’ve been working on this blog post on and (mostly) off &lt;a href=&quot;https://twitter.com/gingerbeardman/status/1584302486789111809&quot;&gt;since 2022&lt;/a&gt;. I’ll try to improve it over time!&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 01 Mar 2026 23:34:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2026/03/01/tvs-tv-1987-and-tv-games-encyclopedia-1988/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2026/03/01/tvs-tv-1987-and-tv-games-encyclopedia-1988/</guid>
        </item>
      
    
      
        <item>
          <title>Fresh Files Extension for Nova editor</title>
          <description>&lt;p&gt;I spotted &lt;a href=&quot;https://github.com/FreHu/vscode-fresh-file-explorer&quot;&gt;Fresh File Explorer&lt;/a&gt;, a VS Code extension, &lt;a href=&quot;https://github.com/FreHu/vscode-fresh-file-explorer&quot;&gt;on Hacker News&lt;/a&gt; and loved the idea—a file sidebar that only shows recently modified files.&lt;/p&gt;

&lt;p&gt;The default file sidebar in an editor shows &lt;em&gt;everything&lt;/em&gt;, which in a large project is mostly noise. I thought it would be fun to have something like this for &lt;a href=&quot;https://nova.app&quot;&gt;Nova&lt;/a&gt;, so I reimplemented the concept from scratch using only the OG repo readme as a reference. No code is shared, it’s a completely new extension built against Nova’s API. That means I can’t do as much as the VS Code extension, such as colour coding the files like a heatmap, but it’s still quite useful as it is.&lt;/p&gt;

&lt;p&gt;The result is a sort of hybrid filesystem/git/bookmarks sidebar which I’m finding quite pleasant to use.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/fresh-files-extension-for-nova.png&quot; alt=&quot;PNG&quot; title=&quot;Fresh Files showing pinned files and recent changes&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;how-it-works&quot;&gt;How it works&lt;/h2&gt;

&lt;p&gt;In Git repositories, Fresh Files uses &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git status&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git log&lt;/code&gt; to figure out what’s changed. In non-Git workspaces it falls back to filesystem modification times, so it works in any folder. It shares some functionality with the built-in Git Sidebar but I’ve been careful to not duplicate too much.&lt;/p&gt;

&lt;p&gt;There are two modes:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Pending Changes&lt;/strong&gt; — shows uncommitted files (or files modified in the last day if there’s no Git)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Historical&lt;/strong&gt; — shows files modified within a configurable time window, from 1 hour to 360 days&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can toggle the time window from the sidebar header, the command palette, or project settings.&lt;/p&gt;

&lt;h2 id=&quot;features&quot;&gt;Features&lt;/h2&gt;

&lt;p&gt;The sidebar supports both a flat file list and a directory tree view, with sorting by recency or name. Files show relative timestamps like “2h ago” or “3d ago” so you can see at a glance what’s freshest.&lt;/p&gt;

&lt;p&gt;Other things worth mentioning:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Pinned files&lt;/strong&gt; — pin files to keep them visible regardless of time window&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;File history&lt;/strong&gt; — right-click any file to see its commit history with diffs&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Diff Search (Pickaxe)&lt;/strong&gt; — find commits where a string was added or removed, file-scoped from the sidebar or repo-wide from the command palette&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Line History&lt;/strong&gt; — view git history for the current line or selection&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Exhume&lt;/strong&gt; — view deleted file contents with syntax highlighting&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Resurrect&lt;/strong&gt; — restore deleted files to their original location&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Show All Files&lt;/strong&gt; — temporarily show all tracked files, overriding the time window&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Search Fresh Files&lt;/strong&gt; — full-text search across fresh files from the command palette&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;New File&lt;/strong&gt; — create a new file from the sidebar context menu&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Move to Trash&lt;/strong&gt; — delete files from the sidebar context menu&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Quick Open&lt;/strong&gt; — fuzzy-open from just the fresh files via the command palette&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Deleted file indicators&lt;/strong&gt; — deleted files show up with a distinct icon&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Auto-refresh&lt;/strong&gt; — the sidebar updates after saves, git commits, checkouts, and merges&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;context-menu&quot;&gt;Context menu&lt;/h2&gt;

&lt;p&gt;Right-click gives you New File, Show in Finder, Copy Path, Copy Relative Path, Move to Trash, Pin/Unpin, Show File History, Diff Search, and Exhume/Resurrect for deleted files.&lt;/p&gt;

&lt;h2 id=&quot;get-it-now&quot;&gt;Get it now&lt;/h2&gt;

&lt;p&gt;You can install it at: &lt;a href=&quot;https://extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.FreshFiles/&quot;&gt;extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.FreshFiles/&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 24 Feb 2026 13:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2026/02/24/fresh-files-extension-for-nova-editor/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2026/02/24/fresh-files-extension-for-nova-editor/</guid>
        </item>
      
    
      
        <item>
          <title>The Majesty of Mount Fuji</title>
          <description>&lt;p&gt;If you’ve ever wondered about the sheer size and majesty of Mount Fuji, I took this photo of the Tokyo metropolis from the window of JL43 bound for London Heathrow yesterday. It was quite a sight!&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/the-majesty-of-mount-fuji.jpg&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;I’ve just spent a week in Japan for &lt;a href=&quot;https://www.tokyodesignforum.com&quot;&gt;Tokyo Design Forum&lt;/a&gt;, and to give my eldest a memorable first trip outside of Europe. Our time away delivered on both counts: we returned home hugely inspired and in awe of what we saw there. I’d last visited Japan in 2004, which was pre-iPhone and I needed a combination of paper map, guide book, and friends to find my way around. This time, we just searched Google maps and tapped Start to find our way from A to B with minimal stress.&lt;/p&gt;

&lt;p&gt;The city had changed a lot, not just architecturally and technologically, but also culturally. And of course in terms of there being far less video game arcades and retro games being much more difficult to find. We had more luck outside of Tokyo city centre, but it was still relatively slim pickings compared to the suitcase full of WonderSwan, Katamari, and other game stuff I brought back in 2004.&lt;/p&gt;

&lt;p&gt;In the short week I managed to fit in the 2-day conference, presented my latest game &lt;a href=&quot;https://blog.gingerbeardman.com/2026/02/12/serenity-demo/&quot;&gt;Serenity&lt;/a&gt; at &lt;a href=&quot;https://www.tokyoindies.com/en/&quot;&gt;Tokyo Indies&lt;/a&gt;, made new friends, and we managed to fit in trips to &lt;a href=&quot;https://en.puroland.jp/language/&quot;&gt;Sanrio Puroland&lt;/a&gt;, &lt;a href=&quot;https://cspace.co.jp/en/home_english/&quot;&gt;café capyba&lt;/a&gt;, &lt;a href=&quot;https://www.teamlab.art/e/planets/&quot;&gt;teamLAB×Planets&lt;/a&gt; (which could easily pass as &lt;a href=&quot;https://en.wikipedia.org/wiki/Electroplankton&quot;&gt;Electroplankton&lt;/a&gt;: The Exhibition), a Kawase-style day trip to Kamakura to see &lt;a href=&quot;https://en.wikipedia.org/wiki/Kōtoku-in&quot;&gt;Kōtoku-in and the Daibutsu&lt;/a&gt;, a pilgrimage to &lt;a href=&quot;https://www.picopicocafe.com/index_en.html&quot;&gt;picopico café&lt;/a&gt; home of &lt;a href=&quot;https://www.lexaloffle.com/pico-8.php&quot;&gt;Lexaloffle Games and PICO-8&lt;/a&gt; (especially meaningful to me as I’m the longest active user! &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bbs?uuid=6&lt;/code&gt;), toy hunting at &lt;a href=&quot;https://en.wikipedia.org/wiki/Nakano_Broadway&quot;&gt;Nakano Broadway&lt;/a&gt;, UFO stationery and stickers at &lt;a href=&quot;https://info.hands.net/en/&quot;&gt;Hands&lt;/a&gt; and &lt;a href=&quot;https://www.loft.co.jp/en/&quot;&gt;Loft&lt;/a&gt;, the most impressive shopping experience of my entire life buying &lt;a href=&quot;https://www.shinkogeisha.com&quot;&gt;3D-printed homeware&lt;/a&gt; at &lt;a href=&quot;https://cp.mistore.jp/global/en/shinjuku.html&quot;&gt;Isetan&lt;/a&gt; Shinjuku, and naturally buying far too many capsule toys. A successful trip as any otaku would surely agree!&lt;/p&gt;

&lt;h2 id=&quot;rfa&quot;&gt;RFA&lt;/h2&gt;

&lt;p&gt;So I’ve decided that this year I’m going to take advantage of the generous UK-Japan visa agreement and live in Japan for a while. Please get in touch if you think you might be able to assist in some way. ありがとうございます！&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div id=&quot;carousel0&quot; class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0b&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0c&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0d&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0e&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0f&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0g&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0h&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0i&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0j&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0k&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0l&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0m&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0n&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0c&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0d&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0c&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0e&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0d&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0f&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0e&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0g&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0f&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0h&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0g&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0i&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0h&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0j&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0i&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0k&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0j&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0l&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0k&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0m&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0l&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0n&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0m&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0n&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_0332.jpeg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_0332.jpeg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_0951.jpeg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_0951.jpeg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_0965.jpeg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_0965.jpeg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_0972.jpeg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_0972.jpeg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_0987.jpeg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_0987.jpeg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_1051.jpeg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_1051.jpeg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_1074.jpeg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_1074.jpeg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_1093.jpeg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_1093.jpeg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_1120.jpeg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_1120.jpeg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_1123.jpeg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_1123.jpeg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_1131.jpeg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_1131.jpeg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_1139.jpeg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_1139.jpeg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_1201.jpeg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_1201.jpeg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_1207.jpeg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_1207.jpeg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_1219.jpeg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tokyo/IMG_1219.jpeg&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0b&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0c&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0d&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0e&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0f&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0g&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0h&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0i&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0j&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0k&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0l&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0m&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0n&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 133%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}

.carousel__activator:nth-of-type(3):checked ~ .carousel__track {
  -webkit-transform: translateX(-200%);
          transform: translateX(-200%);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__slide:nth-of-type(3) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__controls:nth-of-type(3) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(3) {
  opacity: 1;
}

.carousel__activator:nth-of-type(4):checked ~ .carousel__track {
  -webkit-transform: translateX(-300%);
          transform: translateX(-300%);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__slide:nth-of-type(4) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__controls:nth-of-type(4) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(4) {
  opacity: 1;
}

.carousel__activator:nth-of-type(5):checked ~ .carousel__track {
  -webkit-transform: translateX(-400%);
          transform: translateX(-400%);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__slide:nth-of-type(5) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__controls:nth-of-type(5) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(5) {
  opacity: 1;
}

.carousel__activator:nth-of-type(6):checked ~ .carousel__track {
  -webkit-transform: translateX(-500%);
          transform: translateX(-500%);
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__slide:nth-of-type(6) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__controls:nth-of-type(6) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(6) {
  opacity: 1;
}

.carousel__activator:nth-of-type(7):checked ~ .carousel__track {
  -webkit-transform: translateX(-600%);
          transform: translateX(-600%);
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__slide:nth-of-type(7) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__controls:nth-of-type(7) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(7) {
  opacity: 1;
}

.carousel__activator:nth-of-type(8):checked ~ .carousel__track {
  -webkit-transform: translateX(-700%);
          transform: translateX(-700%);
}
.carousel__activator:nth-of-type(8):checked ~ .carousel__slide:nth-of-type(8) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(8):checked ~ .carousel__controls:nth-of-type(8) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(8):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(8) {
  opacity: 1;
}

.carousel__activator:nth-of-type(9):checked ~ .carousel__track {
  -webkit-transform: translateX(-800%);
          transform: translateX(-800%);
}
.carousel__activator:nth-of-type(9):checked ~ .carousel__slide:nth-of-type(9) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(9):checked ~ .carousel__controls:nth-of-type(9) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(9):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(9) {
  opacity: 1;
}

.carousel__activator:nth-of-type(10):checked ~ .carousel__track {
  -webkit-transform: translateX(-900%);
          transform: translateX(-900%);
}
.carousel__activator:nth-of-type(10):checked ~ .carousel__slide:nth-of-type(10) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(10):checked ~ .carousel__controls:nth-of-type(10) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(10):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(10) {
  opacity: 1;
}

.carousel__activator:nth-of-type(11):checked ~ .carousel__track {
  -webkit-transform: translateX(-1000%);
          transform: translateX(-1000%);
}
.carousel__activator:nth-of-type(11):checked ~ .carousel__slide:nth-of-type(11) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(11):checked ~ .carousel__controls:nth-of-type(11) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(11):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(11) {
  opacity: 1;
}

.carousel__activator:nth-of-type(12):checked ~ .carousel__track {
  -webkit-transform: translateX(-1100%);
          transform: translateX(-1100%);
}
.carousel__activator:nth-of-type(12):checked ~ .carousel__slide:nth-of-type(12) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(12):checked ~ .carousel__controls:nth-of-type(12) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(12):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(12) {
  opacity: 1;
}

.carousel__activator:nth-of-type(13):checked ~ .carousel__track {
  -webkit-transform: translateX(-1200%);
          transform: translateX(-1200%);
}
.carousel__activator:nth-of-type(13):checked ~ .carousel__slide:nth-of-type(13) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(13):checked ~ .carousel__controls:nth-of-type(13) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(13):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(13) {
  opacity: 1;
}

.carousel__activator:nth-of-type(14):checked ~ .carousel__track {
  -webkit-transform: translateX(-1300%);
          transform: translateX(-1300%);
}
.carousel__activator:nth-of-type(14):checked ~ .carousel__slide:nth-of-type(14) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(14):checked ~ .carousel__controls:nth-of-type(14) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(14):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(14) {
  opacity: 1;
}

.carousel__activator:nth-of-type(15):checked ~ .carousel__track {
  -webkit-transform: translateX(-1400%);
          transform: translateX(-1400%);
}
.carousel__activator:nth-of-type(15):checked ~ .carousel__slide:nth-of-type(15) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(15):checked ~ .carousel__controls:nth-of-type(15) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(15):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(15) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(3) {
  -webkit-transform: translateX(200%) translateZ(0);
          transform: translateX(200%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(4) {
  -webkit-transform: translateX(300%) translateZ(0);
          transform: translateX(300%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(5) {
  -webkit-transform: translateX(400%) translateZ(0);
          transform: translateX(400%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(6) {
  -webkit-transform: translateX(500%) translateZ(0);
          transform: translateX(500%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(7) {
  -webkit-transform: translateX(600%) translateZ(0);
          transform: translateX(600%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(8) {
  -webkit-transform: translateX(700%) translateZ(0);
          transform: translateX(700%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(9) {
  -webkit-transform: translateX(800%) translateZ(0);
          transform: translateX(800%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(10) {
  -webkit-transform: translateX(900%) translateZ(0);
          transform: translateX(900%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(11) {
  -webkit-transform: translateX(1000%) translateZ(0);
          transform: translateX(1000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(12) {
  -webkit-transform: translateX(1100%) translateZ(0);
          transform: translateX(1100%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(13) {
  -webkit-transform: translateX(1200%) translateZ(0);
          transform: translateX(1200%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(14) {
  -webkit-transform: translateX(1300%) translateZ(0);
          transform: translateX(1300%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(15) {
  -webkit-transform: translateX(1400%) translateZ(0);
          transform: translateX(1400%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(3),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(3 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(4),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(4 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(5),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(5 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(6),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(6 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(7),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(7 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(8),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(8 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(9),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(9 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(10),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(10 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(11),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(11 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(12),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(12 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(13),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(13 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(14),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(14 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(15),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(15 {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;#carousel0 .carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 22 Feb 2026 14:25:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2026/02/22/the-majesty-of-mount-fuji/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2026/02/22/the-majesty-of-mount-fuji/</guid>
        </item>
      
    
      
        <item>
          <title>Serenity: zen gliding to the sound of procedurally generated music</title>
          <description>&lt;p&gt;Today I’m releasing a demo of my new game: Serenity.&lt;/p&gt;

&lt;p&gt;It’s available for both Mac and Windows, and the final game will also support Linux.&lt;/p&gt;

&lt;p&gt;Download: &lt;a href=&quot;https://store.steampowered.com/app/4309910/Serenity_Demo/?beta=1&quot;&gt;store.steampowered.com/app/4309910/Serenity_Demo/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/serenity-gameplay.png&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;the-universe-provides&quot;&gt;The Universe Provides&lt;/h2&gt;

&lt;p&gt;The story of this game is a strange one, so perhaps worth telling. I was about to add online play to a different game project and wanted a smaller game to test &lt;a href=&quot;https://joinplayroom.com&quot;&gt;PlayroomKit&lt;/a&gt;, the solution I had chosen. As Thanksgiving 2025 approached I wondered what personal project I could do over the break that might be a quick way to prove the online concept. I’d been working in 3D using Three.js for a while, so my mind wandered to all of my favourite 3D game experiences. I wondered how difficult it would be to create something along the lines of an old favourite of mine: Tranquility.&lt;/p&gt;

&lt;p&gt;Later that day I was emailing the musicians I was working with, &lt;a href=&quot;https://linktr.ee/novasphere2000&quot;&gt;Nova Sphere&lt;/a&gt;, and when I returned to my inbox—filtered with the search term “sphere”—there was an email I had been waiting on for something like 20 years: it was from Bill Romanowski, the creator of Tranquility. This was a sign that the Universe really does provide, so I set to work.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;the-demo&quot;&gt;The Demo&lt;/h2&gt;

&lt;p&gt;From that point on I put all my spare time into the game and by Boxing Day I had finished what I would consider the MVP, vertical slice, or whatever you want to call it. That’s essentially what this demo is. You can &lt;a href=&quot;https://bsky.app/profile/gingerbeardman.com/post/3maw3yoo5q22d&quot;&gt;read a sort of director’s commentary of the game development and my philosophy&lt;/a&gt; in a thread on Bluesky. I signed up to Steam, paid my fee, and submitted to Steam Next Fest: February 2026 Edition. I thought it would be fun to release the demo ahead of that event because I’m travelling to Japan for the Tokyo Design Forum between now and then.&lt;/p&gt;

&lt;p&gt;This demo is a snapshot from early January and the game has been refined and improved in countless ways since. So, please go easy on the demo and look forward to the final version. Visually, it’s obviously inspired by Tranquility but given that I was creating it with little more than a memory of how that game felt to play back in the day, it contains a lot more. Depending on your point of view, it might strike you as a &lt;em&gt;3D&lt;/em&gt; Electroplankton, Jumping Flash! crossed with Zarch, Tiny Wings in space, Proteus without the trees, or Journey set in the Matrix. My list of influences is wide and varied—not just for the game but also for the procedurally generated levels and music. And of course there is a lot of what I like to think only I can bring to the table. I hope you enjoy it.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;the-inspirations&quot;&gt;The Inspirations&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/939/continuum/&quot;&gt;Alpha Waves&lt;/a&gt; (1990)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/20757/electroplankton/&quot;&gt;Electroplankton&lt;/a&gt; (2005)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/39287/flower/&quot;&gt;Flower&lt;/a&gt; (2009)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/55167/journey/&quot;&gt;Journey&lt;/a&gt; (2012)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/5050/jumping-flash/&quot;&gt;Jumping Flash!&lt;/a&gt; (1995)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/109325/panekit/&quot;&gt;Panekit&lt;/a&gt; (1999)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/59643/proteus/&quot;&gt;Proteus&lt;/a&gt; (2013)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/93633/tiny-wings/&quot;&gt;Tiny Wings&lt;/a&gt; (2011)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/48430/tranquility/&quot;&gt;Tranquility&lt;/a&gt; (1992)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/19494/virus/&quot;&gt;Zarch&lt;/a&gt; (1987)&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;the-future&quot;&gt;The Future&lt;/h2&gt;

&lt;p&gt;I’m still working hard on the final game, which will release later in 2026. I’m currently courting publishers, so if you like what you see please get in touch. I’d love to get this onto consoles.&lt;/p&gt;

&lt;p&gt;I’ll be sure to write more about the game as it gets closer to the finish line, but the current development version has better onboarding, improved music, even higher performance (the demo is 60fps, but the final version is more adaptive). There’s a lot to talk about, but if you’re hungry for more, &lt;a href=&quot;https://bsky.app/profile/gingerbeardman.com/post/3maw3yoo5q22d&quot;&gt;check out my director’s commentary thread&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In the short term I’ll be showing Serenity at &lt;a href=&quot;https://www.tokyoindies.com/en/&quot;&gt;Tokyo Indies&lt;/a&gt; on 18th February. I’d love to see you there.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;the-trailer&quot;&gt;The Trailer&lt;/h2&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 71/51;&quot; videoid=&quot;6kuETNxSWVM&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 12 Feb 2026 17:53:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2026/02/12/serenity-demo/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2026/02/12/serenity-demo/</guid>
        </item>
      
    
      
        <item>
          <title>Controlling local web servers using xbar</title>
          <description>&lt;blockquote&gt;
  &lt;p&gt;Note: an enhanced and native macOS version is headed to the Mac App Store! &lt;a href=&quot;https://twitter.com/gingerbeardman/status/2011578649087263204&quot;&gt;It’s already finished&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sometimes I want to run local web servers for projects I’m working on. Usually more than one at a time, or at least over a short space of time.&lt;/p&gt;

&lt;p&gt;So I thought it would be cool to have a controller for those local servers in my menu bar. Sounded like the perfect job for a little scripting and &lt;a href=&quot;https://github.com/matryer/xbar&quot;&gt;xbar&lt;/a&gt;, which is a great way to prove a menubar app idea quickly.&lt;/p&gt;

&lt;h2 id=&quot;how-it-works&quot;&gt;How it works&lt;/h2&gt;

&lt;p&gt;The plugin allows you to:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;toggle servers on and off&lt;/li&gt;
  &lt;li&gt;open in browser&lt;/li&gt;
  &lt;li&gt;view ports&lt;/li&gt;
  &lt;li&gt;view paths&lt;/li&gt;
  &lt;li&gt;view log sizes&lt;/li&gt;
  &lt;li&gt;clear logs&lt;/li&gt;
  &lt;li&gt;edit config&lt;/li&gt;
  &lt;li&gt;and more!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/xbar-localhost-dark.png&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;example-config&quot;&gt;Example config&lt;/h2&gt;

&lt;p&gt;In the config file we set the starting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SERVER_PORT&lt;/code&gt;, followed by one or more &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SERVER_DIR&lt;/code&gt; for as many projects as you might want servers. We can temporarily comment out those server lines to prevent projects from appearing in the menu.&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# .xbar_httpd_config&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;SERVER_PORT&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;8000
&lt;span class=&quot;c&quot;&gt;#SERVER_DIR=~/Projects/starchasers/&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;SERVER_DIR&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;~/Projects/serenity/
&lt;span class=&quot;nv&quot;&gt;SERVER_DIR&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;~/Projects/point-cloud/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;source-code&quot;&gt;Source code&lt;/h2&gt;

&lt;p&gt;Python source code is available in the following gist:&lt;/p&gt;

&lt;noscript&gt;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/a81df96cd0b4c7a397b04711cafeb287&quot;&gt;View the source code as a Gist&lt;/a&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;script src=&quot;https://gist.github.com/gingerbeardman/a81df96cd0b4c7a397b04711cafeb287.js&quot;&gt;&lt;/script&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 12 Jan 2026 20:57:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2026/01/12/xbar-local-web-server-controller/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2026/01/12/xbar-local-web-server-controller/</guid>
        </item>
      
    
      
        <item>
          <title>WebGL CRT Shader</title>
          <description>&lt;p&gt;I’m releasing my WebGL CRT Shader as open source.&lt;/p&gt;

&lt;p&gt;It creates a CRT/vintage TV effect so could be used in games, emulators, apps, demos, visuals, etc. It’s not a simulator just something that gives the same general old school vibe.&lt;/p&gt;

&lt;p&gt;As a WebGL shader, it runs on the device’s hardware GPU in the browser and renders to a &amp;lt;canvas&amp;gt; (or offscreen canvas). I currently use it with Three.js, and the demo below uses just a 2D canvas.&lt;/p&gt;

&lt;p&gt;It’s optimised to run well on low power devices as far back as iPhone XS, though I’m certain it can be optimised even further. &lt;a href=&quot;https://github.com/gingerbeardman/webgl-crt-shader/pulls&quot;&gt;PRs welcome&lt;/a&gt;! The easiest personal optimisation you might make would be removing processing of unused parameters.&lt;/p&gt;

&lt;p&gt;Is it scientifically correct? &lt;em&gt;Hell no.&lt;/em&gt; Does it look good? &lt;em&gt;Yes.&lt;/em&gt; Does it give you the feels? &lt;em&gt;Absolutely.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gingerbeardman/webgl-crt-shader/&quot;&gt;github.com/gingerbeardman/webgl-crt-shader/&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;history&quot;&gt;History&lt;/h2&gt;

&lt;p&gt;It began as a &lt;a href=&quot;https://bsky.app/profile/gingerbeardman.com/post/3lk2arnt4rc2o&quot;&gt;shader for Love2D&lt;/a&gt; at the beginning of 2025 (&lt;a href=&quot;https://gist.github.com/gingerbeardman/7392ee84fdb2e405d7437b5b12e4c12d&quot;&gt;here’s a gist of that one&lt;/a&gt;) and by the end of 2025 I had ported it to GLSL for a personal work-in-progress web game.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;live-demo&quot;&gt;Live Demo&lt;/h2&gt;

&lt;p&gt;Reach for the sliders!&lt;/p&gt;

&lt;p&gt;(You can scroll the demo horizontally on mobile)&lt;/p&gt;

&lt;div class=&quot;table-wrapper&quot;&gt;

  &lt;iframe src=&quot;https://gingerbeardman.github.io/webgl-crt-shader/&quot; width=&quot;740&quot; height=&quot;740&quot;&gt;
![screenshot](https://cdn.gingerbeardman.com/images/posts/glsl-web-crt-shader.png)
&lt;/iframe&gt;

&lt;/div&gt;

&lt;p&gt;^ Screenshot is Pico-8 classic &lt;a href=&quot;https://www.lexaloffle.com/bbs/?tid=3547&quot;&gt;Worm Nom Nom&lt;/a&gt; by Tic Tac Toad (kometbomb + iLKke) 🌸🍏🎩🐛💩&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 04 Jan 2026 17:44:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2026/01/04/webgl-crt-shader/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2026/01/04/webgl-crt-shader/</guid>
        </item>
      
    
      
        <item>
          <title>My most popular posts of 2025</title>
          <description>&lt;p&gt;2025, eh? &lt;em&gt;What a blast.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This year saw an incredible burst of creativity and exploration. I started the year &lt;a href=&quot;/2025/01/05/dream-ride-for-sega-dreamcast-and-emulators/&quot;&gt;shipping a multi-player arcade racing game for Sega Dreamcast&lt;/a&gt;, coded in bed &lt;a href=&quot;/2025/02/20/making-games-on-iphone-ipad-using-lua-and-love2d/&quot;&gt;making games on iOS using Love2D&lt;/a&gt;, made a little game that &lt;a href=&quot;/2025/05/09/atari-jeff-minter-game-results-jam-llamasoft-and-st-format/&quot;&gt;won at a PC gamejam&lt;/a&gt; thanks to &lt;em&gt;Atari&lt;/em&gt; &amp;amp; &lt;em&gt;Jeff Minter&lt;/em&gt;, and created everything from &lt;a href=&quot;/2025/08/21/wormhole-for-perplexity-comet/&quot;&gt;browser games&lt;/a&gt; to &lt;a href=&quot;/tag/djmix/&quot;&gt;number one DJ mixes&lt;/a&gt;. One big milestone was &lt;a href=&quot;/2025/03/28/macintosh-magazine-media-1-million-files/&quot;&gt;my &lt;em&gt;Macintosh Magazine Media&lt;/em&gt; project surpassed 1 million files&lt;/a&gt; (that’s over 30 million uncompressed files). &lt;em&gt;Nerd alert!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The year also brought significant challenges—navigating &lt;a href=&quot;/2025/04/15/when-playdate-stopped-being-fun/&quot;&gt;community harassment led me to step back from the Playdate scene&lt;/a&gt; after nearly six years of creative work there. I decided to bang a drum about that and &lt;a href=&quot;/2025/08/02/donating-my-playdate-earnings-to-the-cybersmile-foundation/&quot;&gt;I now donate all of my Playdate earnings to charity&lt;/a&gt;. This year also opened new doors: I landed my dream job to build a game studio and my dream game. Pretty cool.&lt;/p&gt;

&lt;p&gt;Through it all, I kept creating, kept learning, and kept sharing. Still trying to launch &lt;a href=&quot;/2025/08/28/dottie-native-macos-pixel-art-editor-wip/&quot;&gt;some apps&lt;/a&gt; and games that have been finished for months or years, and that I use myself every day. Maybe in 2026.&lt;/p&gt;

&lt;h2 id=&quot;how-many-posts&quot;&gt;How many posts?&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/search/?q=2025&quot;&gt;43 posts&lt;/a&gt; (up from 32 in 2024)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;most-popular-posts&quot;&gt;Most popular posts&lt;/h2&gt;
&lt;p&gt;According to Google Analytics, my 5 most popular posts in 2025 were (most popular first):&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2025/10/11/how-to-tame-a-user-interface-using-a-spreadsheet/&quot;&gt;How to tame a user interface using a spreadsheet&lt;/a&gt; (11 Oct) &lt;!-- 13K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2025/01/16/slugs-on-a-cube-interactive-animation/&quot;&gt;Slugs on a Cube: interactive animation&lt;/a&gt; (16 Jan) &lt;!-- 4.3K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2025/04/15/when-playdate-stopped-being-fun/&quot;&gt;When Playdate Stopped Being Fun&lt;/a&gt; (15 Apr) &lt;!-- 3.5K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2025/05/31/intelligent-agent-technology-open-sesame-1993/&quot;&gt;Intelligent Agent Technology: Open Sesame! (1993)&lt;/a&gt; (31 May) &lt;!-- 1.5K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2025/08/21/wormhole-for-perplexity-comet/&quot;&gt;Wormhole for Perplexity Comet&lt;/a&gt; (21 Aug) &lt;!-- 1.4K --&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;best-of-the-rest&quot;&gt;Best of the rest&lt;/h2&gt;
&lt;p&gt;My personal favourites from the year (most recent first):&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2025/12/01/music-recommendations-2025/&quot;&gt;Music recommendations (2025)&lt;/a&gt; (12 Dec) &lt;!-- ? --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2025/08/02/donating-my-playdate-earnings-to-the-cybersmile-foundation/&quot;&gt;Donating my Playdate earnings to The Cybersmile Foundation&lt;/a&gt; (02 Aug) &lt;!-- 339 --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2025/04/11/amazfit-activity-tracker-and-watch-face-asset-generation/&quot;&gt;Amazfit activity tracker and watch face asset generation&lt;/a&gt; (11 Apr)  &lt;!-- 1.3K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2025/03/30/station-travel-through-the-four-seasons-1994/&quot;&gt;Station: Travel Through the Four Seasons (1994)&lt;/a&gt; (30 Mar) &lt;!-- 1K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2025/01/05/dream-ride-for-sega-dreamcast-and-emulators/&quot;&gt;DREAM RIDE for Sega Dreamcast (and emulators)&lt;/a&gt; (05 Jan) &lt;!-- 294 --&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;still-going-strong&quot;&gt;Still going strong&lt;/h2&gt;
&lt;p&gt;The following posts keep on truckin’ (most popular first):&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/17/turning-an-ipad-pro-into-the-ultimate-classic-macintosh/&quot;&gt;Turning an iPad Pro into the Ultimate Classic Macintosh&lt;/a&gt; (17 Apr 2021) &lt;!-- 4.8K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/08/17/going-back-to-the-old-pre-x-twitter-ios-app/&quot;&gt;Going back to the old (pre-X) Twitter iOS app&lt;/a&gt; (17 Aug 2023) &lt;!-- 3.5K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/03/21/automatically-pairing-a-wii-remote-on-macos/&quot;&gt;Pairing a Wii remote on macOS&lt;/a&gt; (21 Mar 2023) &lt;!-- 2.6K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/05/06/pixel-perfect-retro-gaming-in-480p/&quot;&gt;Pixel-Perfect retro gaming on LCD 480p EDTVs&lt;/a&gt; (06 May 2021) &lt;!-- 1.8K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/11/21/yoyozo-how-i-made-a-playdate-game-in-39kb/&quot;&gt;YOYOZO (or, how I made a Playdate game in 39KB)&lt;/a&gt; (21 Nov 2023) &lt;!-- 1.8K --&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;blog-changelog&quot;&gt;Blog changelog&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;Improved replacement of “nouns” which are automatically-emphasised words (6 Mar, 11 May)&lt;/li&gt;
  &lt;li&gt;Improved sitemap and feed XML (14 Apr)&lt;/li&gt;
  &lt;li&gt;Added support for comments links to Bluesky and Mastodon (23 Apr)&lt;/li&gt;
  &lt;li&gt;Added &lt;a href=&quot;/wishlist&quot;&gt; wishlist&lt;/a&gt; of hard-to-find stuff (8 Aug)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;previous-years&quot;&gt;Previous years&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2024/12/31/my-most-popular-posts-of-the-year/&quot;&gt;My most popular posts of 2024&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/12/27/my-most-popular-posts-of-the-year/&quot;&gt;My most popular posts of 2023&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2022/12/31/my-most-popular-posts-of-the-year/&quot;&gt;My most popular posts of 2022&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/12/31/my-most-popular-posts-of-the-year/&quot;&gt;My most popular posts of 2021&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 31 Dec 2025 22:12:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/12/31/my-most-popular-posts-of-the-year/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/12/31/my-most-popular-posts-of-the-year/</guid>
        </item>
      
    
      
        <item>
          <title>Remove Comments Extension for Nova editor</title>
          <description>&lt;p&gt;I’ve released a new extension for the Nova editor.&lt;/p&gt;

&lt;p&gt;It’s called &lt;em&gt;Remove Comments&lt;/em&gt; and it …removes comments from the current line, or selected lines, in your code. That’s it!&lt;/p&gt;

&lt;p&gt;Oh, I’ve tried to support as many comment/syntax formats as I can think of. Sadly it’s not possible to get the current comment formatting from the Nova API, so I had to roll my own logic and heuristics.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.remove-comments/&quot;&gt;extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.remove-comments/&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;examples&quot;&gt;Examples&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;JavaScript (C-style comments):&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// This comment will be removed&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// This trailing comment will be removed&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;/* This block comment will be removed */&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;After running Remove Comments:&lt;/p&gt;
&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Python (hash-style comments):&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;# This comment will be removed
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;value&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;42&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;# This trailing comment will be removed
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;After running Remove Comments:&lt;/p&gt;
&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;n&quot;&gt;value&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;42&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;HTML:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- This comment will be removed --&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&amp;gt;&lt;/span&gt;Content&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;&amp;lt;!-- This trailing comment will be removed --&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;After running Remove Comments:&lt;/p&gt;
&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&amp;gt;&lt;/span&gt;Content&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 08 Dec 2025 15:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/12/08/remove-comments-extension-for-nova-editor/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/12/08/remove-comments-extension-for-nova-editor/</guid>
        </item>
      
    
      
        <item>
          <title>Music recommendations (2025)</title>
          <description>&lt;p&gt;As we complete another lap around the sun, I take stock of what has happened this year and filter my favourite music from the thousands of tracks I’ve listened to throughout 2025. Let’s go!&lt;/p&gt;

&lt;h2 id=&quot;suspended-in-a-beam-of-sunlight&quot;&gt;Suspended in a beam of sunlight&lt;/h2&gt;

&lt;p&gt;After my &lt;a href=&quot;/2024/12/31/music-recommendations-2024/&quot;&gt;2024 year end DJ mix&lt;/a&gt; (which I listen to a lot and am really proud of!) I produced &lt;a href=&quot;/tag/djmix&quot;&gt;a handful of other mixes throughout the year&lt;/a&gt;. I use the fantastic &lt;a href=&quot;https://dj.studio&quot;&gt;DJ.Studio&lt;/a&gt; app and a few other tools.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;2025: over 4,000 tracks from over 600 releases, with a total listening time of over 30,000 minutes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;!-- Over 700 artists, 60% of which were new to me. --&gt;

&lt;p&gt;This mix saw me start out with &lt;a href=&quot;https://music.apple.com/gb/playlist/picks-2025/pl.u-WMGxat5epGr&quot;&gt;82 tracks totalling more than 5 hours of music&lt;/a&gt;, which over the course of a few days were whittled down to the final running order. I wanted to use samples to add some vibes, similar to &lt;a href=&quot;/2025/05/21/if-only-you-could-see-what-ive-seen-with-your-eyes/&quot;&gt;my “Blade Runner” dnb mix&lt;/a&gt;. After a bit of back and forth I settled on Carl Sagan talking wistfully about the cosmos and our place within it, taken from &lt;a href=&quot;https://www.youtube.com/watch?v=GO5FwsblpT8&quot;&gt;“Pale Blue Dot”&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Cosmos:_A_Personal_Voyage&quot;&gt;“Cosmos”&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To get the vocal samples I saved the audio from YouTube, split it into stems to isolate the vocals, then cut and arranged them in DJ Studio taking care to either quantise, or not, to get a specific pacing of delivery. I ended up going with quite philosophical snippets. The most difficult aspect was the need to tweak the EQ of samples from different sources so they sounded like the same person.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.mixcloud.com/gingerbeardman/2025/&quot;&gt;Listen on MixCloud&lt;/a&gt;.&lt;/p&gt;

&lt;iframe width=&quot;100%&quot; height=&quot;120&quot; src=&quot;https://player-widget.mixcloud.com/widget/iframe/?hide_cover=1&amp;amp;feed=%2Fgingerbeardman%2F2025%2F&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;24 tracks with a duration of 1h12m22s.&lt;/p&gt;

&lt;div class=&quot;table-wrapper&quot;&gt;
  &lt;table&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th&gt;Timestamp&lt;/th&gt;
        &lt;th&gt;Artist&lt;/th&gt;
        &lt;th&gt;Song (Video)&lt;/th&gt;
        &lt;th&gt;Year&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;00:00:00&lt;/td&gt;
        &lt;td&gt;MPC GIRL USAGI&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=CD6X8BzQgaI&quot;&gt;Essence&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:01:23&lt;/td&gt;
        &lt;td&gt;MPC GIRL USAGI&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=s5m6X0sCag0&quot;&gt;Music For Tonight&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:05:51&lt;/td&gt;
        &lt;td&gt;Uilou&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=46mFJskNxw8&quot;&gt;Perfect Tokyo&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:07:45&lt;/td&gt;
        &lt;td&gt;Pacific Coliseum &amp;amp; Teen Daze&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Oszu76qErnM&quot;&gt;Club Memory&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:09:50&lt;/td&gt;
        &lt;td&gt;Alex Metric &amp;amp; Damian Taylor&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=AKTUn6g_aTo&quot;&gt;Right Here Forever&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2019&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:12:27&lt;/td&gt;
        &lt;td&gt;Sezer Uysal &amp;amp; Spennu&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=a00fjb8QzN4&quot;&gt;Je te veux&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2012&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:14:25&lt;/td&gt;
        &lt;td&gt;Chris Coco &amp;amp; StoneBridge&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=A8XWxWdQbhE&quot;&gt;The Beach (2025 Mix)&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:15:24&lt;/td&gt;
        &lt;td&gt;QPLO feat. YOCO&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=nqOGxFxzO5U&quot;&gt;Beautiful Dreamer&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2024&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:18:22&lt;/td&gt;
        &lt;td&gt;Noche feat. NIA NADURATA&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=4zJmrIv-j54&quot;&gt;Feel something&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:20:11&lt;/td&gt;
        &lt;td&gt;bane &amp;amp; A.G.O&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=g7j7nvaB-8c&quot;&gt;Contrast&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:23:02&lt;/td&gt;
        &lt;td&gt;Muscle of the Soul&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=jK3zC69aauY&quot;&gt;I Never Tell You My Hurt&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:26:03&lt;/td&gt;
        &lt;td&gt;Tensnake&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=zADEntQZ7r4&quot;&gt;Free&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:29:01&lt;/td&gt;
        &lt;td&gt;Sofia Kourtesis&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ibxczAukwRM&quot;&gt;Nitzan and Aminaa&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:30:50&lt;/td&gt;
        &lt;td&gt;Yuki Kawamura&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=kGGOzs7zr6w&quot;&gt;R.I.P. Sunset (KAITO MIX)&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2024&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:36:41&lt;/td&gt;
        &lt;td&gt;iri&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=yp2VPXNcJvY&quot;&gt;otozure&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:40:09&lt;/td&gt;
        &lt;td&gt;Antony Szmierek&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=NCfcl1E0cPA&quot;&gt;Big Light&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:43:35&lt;/td&gt;
        &lt;td&gt;Snowk&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=q_Bk00ttkA0&quot;&gt;Mist&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:45:31&lt;/td&gt;
        &lt;td&gt;Hina Ota&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=o7MrUgpopwk&quot;&gt;Inner Trip&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:48:38&lt;/td&gt;
        &lt;td&gt;Soichi Terada&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=TJpJ7t2LEjM&quot;&gt;Low Tension (Alternative Version)&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2015&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:52:25&lt;/td&gt;
        &lt;td&gt;Danou P&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=AZo16Va109c&quot;&gt;Kaguya&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2024&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;01:00:20&lt;/td&gt;
        &lt;td&gt;B FROM E&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=9uZkR7UR6WY&quot;&gt;Diamonds&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;01:01:49&lt;/td&gt;
        &lt;td&gt;Uilou&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=PAVLY0qe1kc&quot;&gt;Found You&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;01:04:02&lt;/td&gt;
        &lt;td&gt;Idiot Pop, hajimepop &amp;amp; Novaurelia&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=fmykQTdPENw&quot;&gt;Toumei&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;01:06:27&lt;/td&gt;
        &lt;td&gt;Lorenzo Senni&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=0UH2tqHTi_M&quot;&gt;THINK BIG&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2020&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br /&gt;
&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/2025-dj-studio.png&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;playlists&quot;&gt;Playlists&lt;/h2&gt;

&lt;div class=&quot;table-wrapper&quot;&gt;
  &lt;table&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th&gt;Platform&lt;/th&gt;
        &lt;th&gt;Link&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;Apple Music&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://music.apple.com/gb/playlist/best-of-2025/pl.u-gymPDc4bE7D&quot;&gt;Listen&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Spotify&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://open.spotify.com/playlist/1nXjqETOrhwm3igdqhAX0T&quot;&gt;Listen&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;YouTube&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLfF-zlMNYMd9IWzFDdf6WyBq1EAwdXhos&quot;&gt;Watch&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Download&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://mega.nz/folder/UkokGISS#zZHaUOzcD1KmNY_yNbzwXQ&quot;&gt;Grab&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;

&lt;/div&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;catch-the-vibe&quot;&gt;Catch the Vibe&lt;/h2&gt;

&lt;p&gt;If you want to listen to a couple of tracks that gives the vibe of this mix try these:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Music For Tonight”&lt;/strong&gt; by MPC GIRL USAGI (2025)&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;s5m6X0sCag0&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;p&gt;&lt;strong&gt;“Diamonds”&lt;/strong&gt; by B FROM E (2025)&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;9uZkR7UR6WY&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;p&gt;…and my song of the year:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“otozure”&lt;/strong&gt; by iri (2025)&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;yp2VPXNcJvY&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;bonus-music-of-the-year&quot;&gt;Bonus: music of the year&lt;/h2&gt;

&lt;div class=&quot;table-wrapper&quot;&gt;
  &lt;table&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th&gt;Type&lt;/th&gt;
        &lt;th&gt;Artist&lt;/th&gt;
        &lt;th&gt;Title&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;Single&lt;/td&gt;
        &lt;td&gt;iri&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://song.link/https://music.apple.com/gb/album/seek-ep/1810649068&quot;&gt;otozure&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Single&lt;/td&gt;
        &lt;td&gt;bane &amp;amp; Grooveman Spot&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://song.link/https://music.apple.com/gb/album/contrast-ep/1799907903&quot;&gt;Pluto&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Single&lt;/td&gt;
        &lt;td&gt;Egoism&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://song.link/https://music.apple.com/gb/album/and-go-nowhere/1794434702&quot;&gt;Getting Older&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Single&lt;/td&gt;
        &lt;td&gt;Etherwood feat. Grace Barton&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://song.link/https://music.apple.com/gb/album/where-the-river-meets-the-sea-feat-grace-barton-single/1834103686&quot;&gt;Where The River Meets The Sea&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Single&lt;/td&gt;
        &lt;td&gt;Tokyo Prose feat. Jolliffe &amp;amp; Ruby Wood&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://song.link/https://music.apple.com/gb/album/embrace-single/1824700666&quot;&gt;Embrace&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Album&lt;/td&gt;
        &lt;td&gt;Winston Surfshirt&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://song.link/https://music.apple.com/gb/album/winston/1815171198&quot;&gt;Winston&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Album&lt;/td&gt;
        &lt;td&gt;Egoism&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://song.link/https://music.apple.com/gb/album/and-go-nowhere/1794434702&quot;&gt;And Go Nowhere&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Album&lt;/td&gt;
        &lt;td&gt;Twin Shadow&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://song.link/https://music.apple.com/gb/album/georgie/1783029153&quot;&gt;Georgie&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Album&lt;/td&gt;
        &lt;td&gt;Antony Szmierek&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://song.link/https://music.apple.com/gb/album/service-station-at-the-end-of-the-universe/1767590949&quot;&gt;Service Station At The End Of The Universe&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Album&lt;/td&gt;
        &lt;td&gt;MPC GIRL USAGI&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://song.link/https://music.apple.com/gb/album/balance/1844547763&quot;&gt;Balance&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Album&lt;/td&gt;
        &lt;td&gt;Your Smith&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://song.link/https://music.apple.com/gb/album/the-rub/1815952643&quot;&gt;The Rub&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Album&lt;/td&gt;
        &lt;td&gt;Yuki Kawamura&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://song.link/https://music.apple.com/gb/album/love-forever/1825060989&quot;&gt;Love Forever&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Album&lt;/td&gt;
        &lt;td&gt;Osamu Fukuzawa &amp;amp; Kazuki Isogai&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://song.link/https://music.apple.com/gb/album/inner-orchid/1828301887&quot;&gt;Inner Orchid&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Album&lt;/td&gt;
        &lt;td&gt;Small Circle of Friends&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://song.link/https://music.apple.com/gb/album/slow/1825352962&quot;&gt;Slow&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Album&lt;/td&gt;
        &lt;td&gt;Doja Cat&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://song.link/https://music.apple.com/gb/album/vie/1834042903&quot;&gt;Vie&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;

&lt;/div&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 01 Dec 2025 23:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/12/01/music-recommendations-2025/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/12/01/music-recommendations-2025/</guid>
        </item>
      
    
      
        <item>
          <title>Post-Playdate: One Year Later</title>
          <description>&lt;p&gt;It’s been a year since October 2024, when I released &lt;a href=&quot;/2024/10/08/bender-2-bend-harder-for-playdate/&quot;&gt;my last game on the Playdate Catalog&lt;/a&gt;. Over the course of that month, I became increasingly concerned about an undercurrent of threatening and antisocial behaviour from one particular developer in the community—my frequent reports of which went unanswered. Eventually—exactly a year ago today—that tension surfaced as a campaign of targeted harassment. I was assured something would be done about it, but sadly, nothing ever was.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/2025/04/15/when-playdate-stopped-being-fun/&quot;&gt;So I left the Playdate community&lt;/a&gt;. Over the following months, I faced various forms of harassment: doxxing, unsavoury DMs, spam campaigns targeting my email, cell phone, and social media accounts, unfounded accusations—the list goes on. I can tell you, &lt;em&gt;this is not my idea of a fun time.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You might think that after a year this would be old news. Sadly, it’s not. I’ve long since moved on with my life and kept creating—for platforms as exotic as the &lt;a href=&quot;/2025/01/05/dream-ride-for-sega-dreamcast-and-emulators/&quot;&gt;Sega Dreamcast&lt;/a&gt; and as familiar as &lt;a href=&quot;/2025/08/21/wormhole-for-perplexity-comet/&quot;&gt;the web&lt;/a&gt;. I’m proud of what I’ve achieved, and of the choices that allow me to keep doing what I do best, regardless of the people who try to put barriers in my way.&lt;/p&gt;

&lt;p&gt;While I continued creating &lt;a href=&quot;/2025/05/09/atari-jeff-minter-game-results-jam-llamasoft-and-st-format/&quot;&gt;award-winning games&lt;/a&gt;, the chance to build the game of my dreams came along—made easier by being an employee at a company that would handle funding, marketing, and the practicalities, freeing me to focus on doing my best work. It was a decision I didn’t take lightly, both because of potential ethical concerns and the fear of further harassment. I sought advice from close friends and had thoughtful discussions with several of them. One friend in particular told me they hadn’t heard of the company, so we didn’t discuss it further. That was back in May.&lt;/p&gt;

&lt;p&gt;I announced my first work with the company in July—again, this friend said nothing. Then, in mid-October, &lt;a href=&quot;https://www.linkedin.com/posts/mattsephton_super-happy-to-share-that-ive-joined-perplexity-activity-7384626318224617472-ZQJ-&quot;&gt;I announced my new permanent position&lt;/a&gt;, and that same friend suddenly went off the deep end. I asked what had changed since May, when they hadn’t heard of the company, and why nothing was said in July, when I first went public with my new work—yet now, in October, they were suddenly so angry. Their reply:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“One of my friends saw your post and sent it to me saying ‘oh no,’ which is how I found out. And then another friend (who you also know) also said ‘oh nooooooo.’”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So, essentially, this friend had been incited into anger by others—the same social dynamic that fuelled the harassment a year ago. And the worst part? Those two mutual friends are key figures in the Playdate scene—the very people who once promised to address the harassment are now perpetuating it, a year on. I need to find a stronger word than &lt;em&gt;disappointing&lt;/em&gt;, but that will have to do for now.&lt;/p&gt;

&lt;p&gt;At this point, I’m letting things run their course and will continue to do what I do best: make games. I’m looking forward to you being able to play the next one.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Plus ça change—the more things change, the more they stay the same.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Have fun,&lt;br /&gt;
matt&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 29 Oct 2025 12:12:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/10/29/post-playdate-one-year-later/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/10/29/post-playdate-one-year-later/</guid>
        </item>
      
    
      
        <item>
          <title>Mameyudoufu (DJ mix)</title>
          <description>&lt;p&gt;A little DJ mix of music and collabs by one of my favourite Japanese electronic musicians.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.mixcloud.com/gingerbeardman/mameyudoufu-mix/&quot;&gt;Listen on MixCloud&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;iframe width=&quot;100%&quot; height=&quot;120&quot; src=&quot;https://player-widget.mixcloud.com/widget/iframe/?hide_cover=1&amp;amp;feed=%2Fgingerbeardman%2Fmameyudoufu-mix%2F&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;

&lt;div class=&quot;table-wrapper&quot;&gt;
  &lt;table&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th&gt;Timestamp&lt;/th&gt;
        &lt;th&gt;Artist&lt;/th&gt;
        &lt;th&gt;Song (Link)&lt;/th&gt;
        &lt;th&gt;Release&lt;/th&gt;
        &lt;th&gt;Year&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;00:00&lt;/td&gt;
        &lt;td&gt;Mameyudoufu&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=uri55qjjzc4&quot;&gt;Starting Up&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Boot Loader&lt;/td&gt;
        &lt;td&gt;2021&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;01:23&lt;/td&gt;
        &lt;td&gt;Mameyudoufu &amp;amp; 藍月なくる&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=thJ1y6q7TvU&quot;&gt;One Step Closer &lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;single&lt;/td&gt;
        &lt;td&gt;2022&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;04:34&lt;/td&gt;
        &lt;td&gt;Mameyudoufu&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Ykv3UPNiBU8&quot;&gt;Safe Space&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;single&lt;/td&gt;
        &lt;td&gt;2024&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;07:53&lt;/td&gt;
        &lt;td&gt;Mameyudoufu&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=g1kJ-ZvgUb8&quot;&gt;Approximation&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Stream Friendly 01&lt;/td&gt;
        &lt;td&gt;2022&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;12:25&lt;/td&gt;
        &lt;td&gt;Mameyudoufu feat. Exobolt&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=LpSs3PLw-78&quot;&gt;Everyday Things&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;single&lt;/td&gt;
        &lt;td&gt;2023&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;16:26&lt;/td&gt;
        &lt;td&gt;Mameyudoufu feat. Such&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=vnH8cLE_TfY&quot;&gt;Reminisce&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Encore&lt;/td&gt;
        &lt;td&gt;2020&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;19:05&lt;/td&gt;
        &lt;td&gt;Mameyudoufu feat. yoei.&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=KGoj-jDgw7k&quot;&gt;Hello and Goodbye&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Spd Gar 04&lt;/td&gt;
        &lt;td&gt;2020&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;21:23&lt;/td&gt;
        &lt;td&gt;Mameyudoufu&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=so_MKT2hEY0&quot;&gt;Retrospectives&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Stream Friendly 03&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;24:17&lt;/td&gt;
        &lt;td&gt;Mameyudoufu&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=-Jtibf32hTg&quot;&gt;Literally 1998&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Stream Friendly 03&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;27:35&lt;/td&gt;
        &lt;td&gt;Mameyudoufu&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=5leDpfJLzLU&quot;&gt;Second Brain&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Stream Friendly 03&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;30:42&lt;/td&gt;
        &lt;td&gt;Mameyudoufu&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=FN5xeQ5Gmws&quot;&gt;Eyes on the Stars&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Epoqc 2021&lt;/td&gt;
        &lt;td&gt;2018&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;

&lt;/div&gt;

&lt;p&gt;11 tracks with a duration of 35m16s. &lt;a href=&quot;/2025/08/08/de-de-disco/&quot;&gt;As ever&lt;/a&gt;, this was produced using the DJ.Studio app.&lt;/p&gt;

&lt;p&gt;Let me know what you think of the tunes!&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://mega.nz/folder/UkokGISS#zZHaUOzcD1KmNY_yNbzwXQ&quot;&gt;Download&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;safe-space-by-mameyudoufu-2024&quot;&gt;“Safe Space” by Mameyudoufu (2024)&lt;/h2&gt;

&lt;p&gt;If you want to listen to one track that gives the vibe of this mix it’s this one:&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;Ykv3UPNiBU8&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 22 Oct 2025 10:14:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/10/22/mameyudoufu-dj-mix/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/10/22/mameyudoufu-dj-mix/</guid>
        </item>
      
    
      
        <item>
          <title>How to tame a user interface using a spreadsheet</title>
          <description>&lt;p&gt;Many years ago, while working at Apple and running a lab at WWDC, I met a guy who was using a piece of &lt;a href=&quot;https://en.wikipedia.org/wiki/IAd_Producer&quot;&gt;Apple software designed for creating interactive ads&lt;/a&gt; to design a Car Play user interface for a popular US car manufacturer. I was impressed by his ability to think outside the box and told him so. I mentioned to him how human interface designers at Apple &lt;a href=&quot;https://www.youtube.com/watch?v=DGn7BcFGigc&amp;amp;t=474s&quot;&gt;were using Keynote to rapidly prototype user interfaces and animations&lt;/a&gt;. The discussion then took a strange turn onto spreadsheets.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;spreadsheets&quot;&gt;Spreadsheets?&lt;/h2&gt;

&lt;p&gt;In my opinion, spreadsheets are one of the greatest user interface design tools ever created. I believe that the most effective tool for a job is one that gets out of the way as much as possible. Even better if it’s a tool that you already have access to, or at the very least, can use at no cost.&lt;/p&gt;

&lt;p&gt;Before you have time to load up Figma, Sketch, Photoshop, or any other design software, I’ll have already typed in my content placeholders in a spreadsheet and be most of my way towards a solution. I’ll be merging and moving cells at lightning speed—rationalising layouts, determining the optimal use of space, and creating order out of chaos.&lt;/p&gt;

&lt;p&gt;The purpose of using a tool that may seem ill-suited to the task at hand—designing user interfaces—is to liberate yourself from the clutter or baggage of content and style. This allows you to focus solely on layout, positioning, and hierarchy. You don’t have to worry about type sizes, or get bogged down with software choices. You can quickly adjust the size or structure of the screen by adding/removing rows/columns. With a spreadsheet, it’s just the keyboard between you and the perfect layout.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;lets-take-your-brain-to-another-dimension&quot;&gt;Let’s take your brain to another dimension&lt;/h2&gt;

&lt;p&gt;One frequent criticism of spreadsheets is that they are “only 2D” or that a grid isn’t versatile enough to solve your problem. But if you pay close attention, you’ll realise that spreadsheets can occupy as many dimensions as you require by using multiple sheets. Like the stack of ledger paper that was used before spreadsheets were invented. An episode of The Computer Chronicles called “The Spreadsheet Wars” aired in 1988 and has a great &lt;a href=&quot;https://youtu.be/eAiZBUYNUBA?si=TMiXXLj1gtFwZQkp&amp;amp;t=1154&quot;&gt;demo of spreadsheet software Lotus 1-2-3 doing 3D spreadsheet manipulation&lt;/a&gt; in ways that are still impressive several decades later.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/GridSystemsInGraphicDesignJosefMullerBrockmann&quot;&gt;Grid systems are well known across many fields of design&lt;/a&gt; for being a huge assist when solving layouts and rationalising problems. The grid enforces structure invisibly during the design process. A spreadsheet is a highly configurable grid system that is ready to be put to work on your problem!&lt;/p&gt;

&lt;p&gt;You might also consider the use of plain paper, graph paper, and a bitmap editor. Which might be best suited for sketching out a quick icon idea? It’s easy to understand that graph paper is more suitable than plain paper for drawing images made up of pixels, and in many situations it may be quicker and more suitable than a bitmap editor. &lt;a href=&quot;https://www.moma.org/collection/works/188382?artist_id=38483&amp;amp;page=1&amp;amp;sov_referrer=artist&quot;&gt;Susan Kare famously used a book of grid/graph paper to draw many early Macintosh icons&lt;/a&gt; because icon creation software had yet to be invented.&lt;/p&gt;

&lt;h2 id=&quot;theres-an-app-for-that&quot;&gt;There’s an app for that&lt;/h2&gt;

&lt;p&gt;I use Apple Numbers to do most of my spreadsheet work, because it’s the one that I have easiest access to most of the time—it’s installed on both my Mac and iPhone. You might want to use Google Sheets, Microsoft Excel, or even a simpler table tool like &lt;a href=&quot;https://smoothcsv.com&quot;&gt;SmoothCSV&lt;/a&gt;. There is no wrong choice.&lt;/p&gt;

&lt;p&gt;Here are some examples of layouts I’ve solved using a spreadsheet.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;yoyozo&quot;&gt;YOYOZO&lt;/h2&gt;

&lt;p&gt;Perhaps my most famous example is the stats screen of &lt;a href=&quot;/2023/11/21/yoyozo-how-i-made-a-playdate-game-in-39kb/&quot;&gt;my hit game &lt;em&gt;YOYOZO&lt;/em&gt;&lt;/a&gt;. With this one I already had a TTF font file that I’d created for the manual, so I went the extra mile and planned a pixel perfect layout in the right colours and everything. A fun fact you might not know: &lt;em&gt;YOYOZO&lt;/em&gt; was featured in Ars Technica’s “Best Games of 2023” list, alongside Mario and Zelda. This spreadsheet thing is great!&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/spreadsheet-ui-yoyozo.png&quot; alt=&quot;IMG&quot; title=&quot;Pixel perfect precision using the exact font&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;enhanced-sfxr&quot;&gt;Enhanced sfxr&lt;/h2&gt;

&lt;p&gt;This year I’ve made two enhanced versions of sfxr—&lt;a href=&quot;https://gingerbeardman.itch.io/enhanced-sfxr-for-love2d&quot;&gt;one for Love2D&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/search?q=from%3Agingerbeardman%20sfxr&amp;amp;src=typed_query&amp;amp;f=live&quot;&gt;one for macOS&lt;/a&gt;—and I can’t remember which one this was done for. I usually get rid of the header rows and columns but in this instance they acted as sidebar and title bar. Regardless, whilst it might not look like much this sort of pre-planning and organisation saved a ton of time when I was working on the app. It involved no code and was done in a minute or two!&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/spreadsheet-ui-sfxr.png&quot; alt=&quot;IMG&quot; title=&quot;Organising the large components that make up the window&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;spindle&quot;&gt;Spindle&lt;/h2&gt;

&lt;p&gt;Another of my “coming soon” apps is &lt;a href=&quot;https://twitter.com/search?q=from:gingerbeardman%20spindle&amp;amp;src=typed_query&amp;amp;f=live&quot;&gt;an optical media dumper whose USP is its ability to dump from multiple drives at the same time&lt;/a&gt;. I wanted a UI that would stay mostly the same across both the setup and dumping states, and also that was easily repeatable when additional drives duplicate the app UI. The benefit of working with a grid here is that it was 1:1 transferrable to SwiftUI grid system!&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/spreadsheet-ui-spindle.png&quot; alt=&quot;IMG&quot; title=&quot;Two states of the same interface showing what changes and what remains the same&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;driving-game&quot;&gt;Driving Game&lt;/h2&gt;

&lt;p&gt;This final one is an example of a racing game. Something that you might already be more familiar with and so be able to figure out how you can apply the technique to your own work. Something like Mario Kart, F-Zero, Colin McRae Rally, or WipEout. Let’s go!&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/spreadsheet-ui-racer.png&quot; alt=&quot;IMG&quot; title=&quot;A fairly standard driving/racing game head up display&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 11 Oct 2025 00:03:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/10/11/how-to-tame-a-user-interface-using-a-spreadsheet/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/10/11/how-to-tame-a-user-interface-using-a-spreadsheet/</guid>
        </item>
      
    
      
        <item>
          <title>Three.js Completions Extension for Nova editor</title>
          <description>&lt;p&gt;I’ve released an extension to add &lt;a href=&quot;https://threejs.org&quot;&gt;Three.js&lt;/a&gt; completions support to the Nova editor.&lt;/p&gt;

&lt;p&gt;The coolest thing about this extension is that most of the code is automatically generated straight from the Three.js TypeScript files. This means there’s the potential for less errors in the data, and I can easily update the extension whenever a new release of Three.js comes out just by running a single command. Why work &lt;em&gt;harder&lt;/em&gt; when you can work &lt;em&gt;cleverer&lt;/em&gt;?&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.ThreeJS/&quot;&gt;extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.ThreeJS/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You might be quick to deduce that—yes—I’m making a 3D game. 😘&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 04 Oct 2025 15:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/10/04/three-js-completions-extension-for-nova-editor/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/10/04/three-js-completions-extension-for-nova-editor/</guid>
        </item>
      
    
      
        <item>
          <title>Updates to Extensions for Nova editor</title>
          <description>&lt;p&gt;In late 2024, I spent some time improving my tools by &lt;a href=&quot;/2024/10/17/extensions-for-nova-editor/&quot;&gt;building a set of extensions for Nova editor&lt;/a&gt; to streamline some time-consuming tasks I encounter during blogging and game development.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/nova-extensions.png&quot; alt=&quot;IMG&quot; title=&quot;My current list of extensions for Nova editor&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;This week, I released major updates to many of them with enhancements and new features:&lt;/p&gt;

&lt;h2 id=&quot;bookmarks&quot;&gt;Bookmarks&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.Bookmarks/&quot;&gt;Version 2.0.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Adds sorting, the ability to bookmark folders, marking of missing items, and other improvements.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;markdown-file-linker&quot;&gt;Markdown File Linker&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.MarkdownFileLinker/&quot;&gt;Version 2.0.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Results in the choice palette are now sorted by default using dates found in filenames.&lt;/li&gt;
  &lt;li&gt;Along with other filtering improvements.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;unwrap-paragraph&quot;&gt;Unwrap Paragraph&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.unwraptext/&quot;&gt;Version 2.0.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;You can now unwrap the text surrounding cursor, which removes some friction.&lt;/li&gt;
  &lt;li&gt;In selected text multiple paragraphs will be unwrapped individually.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;word-counter&quot;&gt;Word Counter&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.wordcounter/&quot;&gt;Version 2.0.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Watched words can be managed through the sidebar, added from selected text, or via typing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;yaml-tag-picker&quot;&gt;YAML Tag Picker&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.YAMLTagPicker/&quot;&gt;Version 2.0.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;You can quickly insert or update the creation/modified ISO date in your front matter.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;Plus!&lt;/em&gt; I also released a brand new extension:&lt;/p&gt;

&lt;h2 id=&quot;csv-to-md-table&quot;&gt;CSV to MD table&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.csv2md/&quot;&gt;Version 1.0.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Convert tabular data between CSV/TSV and Markdown formats.&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 30 Aug 2025 15:03:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/08/30/updates-to-my-extensions-for-nova-editor/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/08/30/updates-to-my-extensions-for-nova-editor/</guid>
        </item>
      
    
      
        <item>
          <title>Dottie: a native macOS pixel art editor (WIP)</title>
          <description>&lt;p&gt;For the past several months I’ve been working on a pixel art app for macOS, with the goal of making it as much of a first class citizen and great Mac-like experience as possible. To that end it is fully native and built using Swift and SwiftUI, with a tiny bit of AppKit.&lt;/p&gt;

&lt;p&gt;As with all the macOS apps I build, they start with a personal need. This one was to replace the aging and unsupported &lt;a href=&quot;/2023/05/10/piskel-for-playdate/&quot;&gt;Piskel electron/web app&lt;/a&gt;. I like it and I loathe it, so I wondered if I could do better. My friend &lt;a href=&quot;https://jbmorley.co.uk/about/&quot;&gt;Jason Morley&lt;/a&gt; was the additional momentum I needed to actually get moving and try some things out—so thanks Jason!&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/dottie-mushroom-by-maya.png&quot; alt=&quot;IMG&quot; title=&quot;A mushroom drawn by Maya&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;a-little-bit-of-history-repeating&quot;&gt;A little bit of history repeating&lt;/h2&gt;

&lt;p&gt;I’ve been into pixel art since &lt;a href=&quot;/about&quot;&gt;Deluxe Paint ST&lt;/a&gt; (yes, on Atari ST not Commodore Amiga!), and of course on the classic Macintosh. I also collect &lt;a href=&quot;/2023/10/21/list-of-vintage-japanese-pixel-dot-art-software/&quot;&gt;information about the multitude of Japanese “dot art” pixel art apps&lt;/a&gt;, which are quite different to the apps that I grew up with. All this to say that I already had a list of features I missed, pined for, or otherwise thought should make a return. &lt;a href=&quot;/2024/07/14/shibuya-pixel-art-contest-2024/#bonus&quot;&gt;Naturally&lt;/a&gt;, dithering should be a tent pole feature affecting all tools.&lt;/p&gt;

&lt;p&gt;A dither smudge like the one shown below was last seen by me in 1992’s Multi Paint System (PC-98).&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 320/243;&quot; videoid=&quot;XKyDG7aF3xU&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;look-mano-dependencies&quot;&gt;Look, Ma—no dependencies!&lt;/h2&gt;

&lt;p&gt;And as an additional constraint—&lt;a href=&quot;/2023/11/21/yoyozo-how-i-made-a-playdate-game-in-39kb/&quot;&gt;which you may know I love to set for myself&lt;/a&gt;—I decided that I would use no packages or external dependencies, just system frameworks. Yes, that means I had to write my own colour picker (but, that’s my idea of a good time!) and some things took longer than just adding a package, but I can say that there is precious little wasted code inside this app. In fact, at the time of writing a single-architecture build of the app that has been readied for distribution still fits on a &lt;a href=&quot;/2025/05/19/media-darling-t-shirt-design/&quot;&gt;3.5” 2HD floppy disk&lt;/a&gt;!&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;pre-mortem&quot;&gt;Pre-mortem&lt;/h2&gt;

&lt;p&gt;A full post-mortem will come after release.&lt;/p&gt;

&lt;p&gt;The trickiest parts of development so far:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;drawing pixelated circles of any width and height (all the classic graphics programming text books require the circle to have odd dimensions so that the coordinate of the centre pixel is an integer)&lt;/li&gt;
  &lt;li&gt;figuring out the intricacies of the document-based application model&lt;/li&gt;
  &lt;li&gt;trying to get the “New Document” button to appear on the file selector that appears at app launch (in fact this one still evades me for reasons I can’t figure out, &lt;a href=&quot;/support&quot;&gt;get in touch if you can help&lt;/a&gt;!)&lt;/li&gt;
  &lt;li&gt;automating help book compilation (&lt;a href=&quot;https://marioaguzman.wordpress.com/2020/09/12/auth/&quot;&gt;thanks Mario&lt;/a&gt;!)&lt;/li&gt;
  &lt;li&gt;performance bottlenecks with some aspects of SwiftUI (thanks &lt;a href=&quot;https://developer.apple.com/wwdc25/labs/overview/&quot;&gt;WWDC Lab&lt;/a&gt;!)&lt;/li&gt;
  &lt;li&gt;surprise performance gains from using AppKit for better gestures&lt;/li&gt;
  &lt;li&gt;selections and marching ants&lt;/li&gt;
  &lt;li&gt;dealing with some bad early decisions (tech debt)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most fun aspects so far:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;designing and iterating on the UI&lt;/li&gt;
  &lt;li&gt;coming up with a name and brand&lt;/li&gt;
  &lt;li&gt;implementing palette management and trying new ideas&lt;/li&gt;
  &lt;li&gt;implementing a custom colour picker, twice&lt;/li&gt;
  &lt;li&gt;drawing the various tool and app icons&lt;/li&gt;
  &lt;li&gt;getting to a point where it feels done and every new feature is icing on the cake&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One interesting thing about the app:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;there is no settings window&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;launching-late-2025&quot;&gt;Launching late-2025&lt;/h2&gt;

&lt;p&gt;I hope to launch the app this autumn, but until then: if you’re a pixel artist feel free to &lt;a href=&quot;/support&quot;&gt;get in touch&lt;/a&gt; with your email address and I’ll send you a TestFlight invite!&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 28 Aug 2025 10:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/08/28/dottie-native-macos-pixel-art-editor-wip/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/08/28/dottie-native-macos-pixel-art-editor-wip/</guid>
        </item>
      
    
      
        <item>
          <title>Wormhole for Perplexity Comet</title>
          <description>&lt;p&gt;Surprise! My latest game, Wormhole, is included in the &lt;a href=&quot;https://www.perplexity.ai/comet&quot;&gt;Comet web browser&lt;/a&gt; from &lt;a href=&quot;https://www.perplexity.ai&quot;&gt;Perplexity&lt;/a&gt;. It started as an idea to replace the &lt;a href=&quot;https://en.wikipedia.org/wiki/Dinosaur_Game&quot;&gt;Chrome Dino game&lt;/a&gt; and grew into something a bit more sophisticated and fun, and a lot more on brand.&lt;/p&gt;

&lt;p&gt;Big love to &lt;a href=&quot;https://x.com/henrymodis&quot;&gt;Henry Modisett&lt;/a&gt; and the great team over at Perplexity.&lt;/p&gt;

&lt;p&gt;And to &lt;a href=&quot;https://x.com/soleio&quot;&gt;Soleio&lt;/a&gt; for the hookup—thanks sensei! 🙌&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 2560/1896;&quot; videoid=&quot;IbDfo3bKvjo&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;p&gt;The development of this game was very typical for me and my process: rapid prototyping, careful scoping, and focus on the central mechanic. Let’s dive in!&lt;/p&gt;

&lt;h2 id=&quot;prototype-1&quot;&gt;Prototype 1&lt;/h2&gt;

&lt;p&gt;This took the brief very literally and replaced Chrome Dino in size and scope. It fitted in the same area of the page and had a similar one button interaction. So, it was a simple game where you controlled the speed of a comet and had to avoid incoming space debris for as long as possible by using a dash mechanic. You could chain dashes and therefore control your acceleration and deceleration whilst balancing risk and reward. It was fun, but the team had bigger ideas. &lt;a href=&quot;https://youtu.be/qk7J0CLwX80&quot;&gt;Video of first prototype&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;prototype-2&quot;&gt;Prototype 2&lt;/h2&gt;

&lt;p&gt;Multiple members of the team independently proposed the idea of space golf/billiards, or snooker as I called it which raised a few eyebrows, by which time I had already prototyped it. The initial version proved to be fun, so it was full steam ahead.&lt;/p&gt;

&lt;p&gt;I set out to refine the game feel and figure out game progress. I’d been reading about procedural generation in Elite (thanks &lt;a href=&quot;https://elite.bbcelite.com&quot;&gt;Mark Moxon&lt;/a&gt;) and Mario Kart World (thanks Nintendo) and created something similar for my game. A whole universe of galaxies and planets to conquer! It worked well, but the traversal between galaxies and the overall structure didn’t add anything to the game. Zooming through the universe looked super cool! &lt;a href=&quot;https://youtu.be/CQR4NPkDQ18&quot;&gt;Video of second prototype&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;prototype-3&quot;&gt;Prototype 3&lt;/h2&gt;

&lt;p&gt;So, I started the galaxy generation again from scratch. At this point I had the feeling of existential dread that all developers are probably familiar with. I wanted to trash it all and start again, but instead I went out for dinner and talked it over with a close friend and fellow developer (thanks &lt;a href=&quot;https://bsky.app/profile/daveroberts.dev&quot;&gt;Dave&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Eventually I calmed down and settled on a never-ending belt of galaxies. The transitions became much shorter and sweeter, and the game feel was better than ever. At this point I think I was still coding in &lt;a href=&quot;https://love2d.org&quot;&gt;love2d&lt;/a&gt;. Things were locked down, so I ported the game to JavaScript using the &lt;a href=&quot;https://github.com/KilledByAPixel/LittleJS&quot;&gt;LittleJS&lt;/a&gt; framework. According to my notes the prototype was about 300 lines of code before I began the hard work of rounding it out into a game. &lt;a href=&quot;https://youtu.be/H_5MYCft1-I&quot;&gt;Video of third prototype&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;procedurally-generated&quot;&gt;Procedurally generated&lt;/h2&gt;

&lt;p&gt;Without giving too much away, the galaxies are procedurally generated with a handful of galaxy types and several other parameters and properties dictating the layout, rotating in a multi-layer but deterministic sequence. It was really fun to think through and implement.&lt;/p&gt;

&lt;p&gt;Planets can either attract and repel, gravity varies, slingshots are possible, trick shots are possible, hole-in-one is possible. Wormholes can help or hinder.&lt;/p&gt;

&lt;p&gt;The deterministic nature of the game means that everybody plays the same series of galaxies but at their own pace. And you can watch a replay of your shot if you get a suitably amazing black-hole-in-one, with a quick press of the R key (thanks &lt;a href=&quot;https://readonlymemory.com/the-making-of-sensible-soccer/&quot;&gt;Sensible Soccer&lt;/a&gt;). The game is theoretically never-ending, and the difficulty comes with carefully balanced stepped progression and cyclical repeating of the various game properties (thanks &lt;a href=&quot;https://en.wikipedia.org/wiki/Music_for_18_Musicians&quot;&gt;Steve Reich&lt;/a&gt;).&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;never-quite-made-it&quot;&gt;Never quite made it&lt;/h2&gt;

&lt;p&gt;If you’ve followed any of my developments you’ll know I’m quite happy to throw code away as quick as I can create it. I attach myself to the idea and execution rather than the code itself.&lt;/p&gt;

&lt;p&gt;So it’s fun to mention some things that never made it. As well as the realistic universe, there were some additional obstacle types that fell by the wayside, and the ability to export a video recording of your replay for sharing.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;finishing-touches&quot;&gt;Finishing touches&lt;/h2&gt;

&lt;p&gt;During prototyping I use geometric shapes: circles, rectangles, lines, and so on. The team at Perplexity then worked up visual designs (thanks &lt;a href=&quot;https://x.com/_erinmcknight&quot;&gt;Erin&lt;/a&gt;) and I implemented them as a combination of bitmaps, SVG for noise texture, CSS for round rects, and there are still arcs, circles, lines, and various fill types punching well above their weight. LittleJS (thanks &lt;a href=&quot;https://x.com/KilledByAPixel&quot;&gt;Frank&lt;/a&gt;) is a fantastic and very well optimised framework that I encourage all game devs to check out.&lt;/p&gt;

&lt;p&gt;Sound was initially synthesised using &lt;a href=&quot;https://github.com/KilledByAPixel/ZzFX&quot;&gt;ZzFX&lt;/a&gt; (thanks again &lt;a href=&quot;https://x.com/KilledByAPixel&quot;&gt;Frank&lt;/a&gt;), given LittleJS has built-in support, but they were eventually replaced with digital audio and music (thanks &lt;a href=&quot;https://x.com/nesodude&quot;&gt;neso&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;The Comet launch page was designed by &lt;a href=&quot;https://x.com/eschadiol&quot;&gt;Escha Diol&lt;/a&gt;, product designer on Comet, who has been very supportive during this project. She’s a pleasure to work alongside.&lt;/p&gt;

&lt;p&gt;There are lots of details and a high level of polish in the game that are easily overlooked but are essential to the final feel: particles, parallax, keyboard control, replay, and more.&lt;/p&gt;

&lt;p&gt;Have fun with it!&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 21 Aug 2025 16:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/08/21/wormhole-for-perplexity-comet/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/08/21/wormhole-for-perplexity-comet/</guid>
        </item>
      
    
      
        <item>
          <title>DÉ DÉ DISCO (DJ mix)</title>
          <description>&lt;p&gt;My favourite DÉ DÉ MOUSE tracks seamlessly mixed together with great pleasure! Also featuring hitomitoi, AZK, TANUKI, DENONBU, Aki Shirokane, Yuka Nagase, Shin-ski, Kakeru, and more.&lt;/p&gt;

&lt;p&gt;High-energy feel-good vibes to fill even the rainiest day with rays of sunshine. ✌️&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.mixcloud.com/gingerbeardman/de-de-mouse-disco/&quot;&gt;Listen on MixCloud&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;iframe width=&quot;100%&quot; height=&quot;120&quot; src=&quot;https://player-widget.mixcloud.com/widget/iframe/?hide_cover=1&amp;amp;feed=%2Fgingerbeardman%2Fde-de-mouse-disco%2F&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;

&lt;div class=&quot;table-wrapper&quot;&gt;
  &lt;table&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th&gt;Time&lt;/th&gt;
        &lt;th&gt;Artist&lt;/th&gt;
        &lt;th&gt;Release&lt;/th&gt;
        &lt;th&gt;Song&lt;/th&gt;
        &lt;th&gt;Year&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;00:00&lt;/td&gt;
        &lt;td&gt;w/ Milk Talk&lt;/td&gt;
        &lt;td&gt;single&lt;/td&gt;
        &lt;td&gt;Beautiful Criminal&lt;/td&gt;
        &lt;td&gt;2024&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;04:11&lt;/td&gt;
        &lt;td&gt;w/ Yumenokessho ROSE&lt;/td&gt;
        &lt;td&gt;single&lt;/td&gt;
        &lt;td&gt;Darling of Shooting Star&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;07:04&lt;/td&gt;
        &lt;td&gt;solo&lt;/td&gt;
        &lt;td&gt;Just Brokenhearted EP&lt;/td&gt;
        &lt;td&gt;I Want You&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;10:44&lt;/td&gt;
        &lt;td&gt;solo&lt;/td&gt;
        &lt;td&gt;Just Brokenhearted EP&lt;/td&gt;
        &lt;td&gt;When We Love&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;13:53&lt;/td&gt;
        &lt;td&gt;w/ TANUKI &amp;amp; hitomitoi&lt;/td&gt;
        &lt;td&gt;single&lt;/td&gt;
        &lt;td&gt;The Night of Neon Light (Extended Mix)&lt;/td&gt;
        &lt;td&gt;2021&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;19:06&lt;/td&gt;
        &lt;td&gt;solo&lt;/td&gt;
        &lt;td&gt;single&lt;/td&gt;
        &lt;td&gt;Thanks Tracks&lt;/td&gt;
        &lt;td&gt;2017&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;21:33&lt;/td&gt;
        &lt;td&gt;w/ DENONBU &amp;amp; Aki Shirokane&lt;/td&gt;
        &lt;td&gt;single&lt;/td&gt;
        &lt;td&gt;Sweet Illusion (Instrumental)&lt;/td&gt;
        &lt;td&gt;2022&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;24:56&lt;/td&gt;
        &lt;td&gt;solo&lt;/td&gt;
        &lt;td&gt;Milkyway Drive&lt;/td&gt;
        &lt;td&gt;Sun End Girl&lt;/td&gt;
        &lt;td&gt;2015&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;29:25&lt;/td&gt;
        &lt;td&gt;solo&lt;/td&gt;
        &lt;td&gt;Via Alpha Centauri&lt;/td&gt;
        &lt;td&gt;Star Gazer&lt;/td&gt;
        &lt;td&gt;2017&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;32:40&lt;/td&gt;
        &lt;td&gt;solo&lt;/td&gt;
        &lt;td&gt;Via Alpha Centauri&lt;/td&gt;
        &lt;td&gt;Rigil&lt;/td&gt;
        &lt;td&gt;2017&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;35:04&lt;/td&gt;
        &lt;td&gt;w/ hitomitoi&lt;/td&gt;
        &lt;td&gt;single&lt;/td&gt;
        &lt;td&gt;Skyscraper Starlight&lt;/td&gt;
        &lt;td&gt;2024&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;38:50&lt;/td&gt;
        &lt;td&gt;solo&lt;/td&gt;
        &lt;td&gt;To Milkyway Planet&lt;/td&gt;
        &lt;td&gt;Nobody’s Place&lt;/td&gt;
        &lt;td&gt;2013&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;42:30&lt;/td&gt;
        &lt;td&gt;solo&lt;/td&gt;
        &lt;td&gt;Sunset Girls&lt;/td&gt;
        &lt;td&gt;Light Night Dance (Shinichi Osawa Remix)&lt;/td&gt;
        &lt;td&gt;2008&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;47:23&lt;/td&gt;
        &lt;td&gt;w/ Yuka Nagase&lt;/td&gt;
        &lt;td&gt;single&lt;/td&gt;
        &lt;td&gt;Lovely Shy Girl&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;50:25&lt;/td&gt;
        &lt;td&gt;w/ hitomitoi&lt;/td&gt;
        &lt;td&gt;single&lt;/td&gt;
        &lt;td&gt;Love Groovin’&lt;/td&gt;
        &lt;td&gt;2023&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;53:07&lt;/td&gt;
        &lt;td&gt;solo&lt;/td&gt;
        &lt;td&gt;single&lt;/td&gt;
        &lt;td&gt;Love Destination (Edit 002)&lt;/td&gt;
        &lt;td&gt;2020&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;56:33&lt;/td&gt;
        &lt;td&gt;solo&lt;/td&gt;
        &lt;td&gt;Just Brokenhearted EP&lt;/td&gt;
        &lt;td&gt;Dream About You&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;59:25&lt;/td&gt;
        &lt;td&gt;solo&lt;/td&gt;
        &lt;td&gt;Just Brokenhearted EP&lt;/td&gt;
        &lt;td&gt;Fallin’ in&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;62:23&lt;/td&gt;
        &lt;td&gt;w/ AZK&lt;/td&gt;
        &lt;td&gt;single&lt;/td&gt;
        &lt;td&gt;Disco Revenge&lt;/td&gt;
        &lt;td&gt;2022&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;65:56&lt;/td&gt;
        &lt;td&gt;solo&lt;/td&gt;
        &lt;td&gt;Be Yourself&lt;/td&gt;
        &lt;td&gt;Lonely If&lt;/td&gt;
        &lt;td&gt;2020&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;69:57&lt;/td&gt;
        &lt;td&gt;w/ Pa’s Lam System&lt;/td&gt;
        &lt;td&gt;single&lt;/td&gt;
        &lt;td&gt;Carry On&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;73:38&lt;/td&gt;
        &lt;td&gt;w/ SHIN-SKI (Tiny Griffi)&lt;/td&gt;
        &lt;td&gt;Night Flowering EP&lt;/td&gt;
        &lt;td&gt;Goodnight Tommorow&lt;/td&gt;
        &lt;td&gt;2024&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;

&lt;/div&gt;

&lt;p&gt;The download version is 22 tracks with a duration of 1h16m46s. As always, this was produced using the DJ.Studio app. The mixcloud version has an extra track near the end that I decided to take out.&lt;/p&gt;

&lt;p&gt;Let me know what you think of the tunes!&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://mega.nz/folder/UkokGISS#zZHaUOzcD1KmNY_yNbzwXQ&quot;&gt;Download&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;sun-end-girl-2015&quot;&gt;Sun End Girl (2015)&lt;/h2&gt;

&lt;p&gt;If you want to listen to one track that gives the vibe of this mix it’s this one:&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;Zdz8WfzoYSo&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 08 Aug 2025 14:59:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/08/08/de-de-disco/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/08/08/de-de-disco/</guid>
        </item>
      
    
      
        <item>
          <title>iOS Low Data Mode reveals true app update sizes</title>
          <description>&lt;p&gt;An interesting side-effect of iOS Low Data Mode is that it shows you the exact size of an app update for your device, often a tiny fraction of the listed app size. This is because (delta) updates contain only the files that have changed. Even a first-time install is smaller due to app slicing/thinning containing only what is needed for that device.&lt;/p&gt;

&lt;p&gt;The larger size is the universal app size containing assets for all devices. It’s simpler and less confusing for everybody to see the same size.&lt;/p&gt;

&lt;p&gt;There are more screenshots at the comment links.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/low-data-mode.png&quot; alt=&quot;IMG&quot; title=&quot;eBay 6.220.0 update size for an iPhone XS running iOS 17&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 06 Aug 2025 19:43:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/08/06/ios-low-data-mode-reveals-true-app-update-sizes/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/08/06/ios-low-data-mode-reveals-true-app-update-sizes/</guid>
        </item>
      
    
      
        <item>
          <title>Donating my Playdate earnings to The Cybersmile Foundation</title>
          <description>&lt;p&gt;I’ve decided to donate all of my &lt;a href=&quot;https://play.date&quot;&gt;Playdate&lt;/a&gt; earnings (my personal take-home, after &lt;a href=&quot;https://panic.com&quot;&gt;Panic&lt;/a&gt; and &lt;a href=&quot;https://stripe.com&quot;&gt;payment processor&lt;/a&gt; fees) to &lt;a href=&quot;https://www.cybersmile.org&quot;&gt;The Cybersmile Foundation&lt;/a&gt;, starting July 2025.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Cybersmile is a multi-award-winning nonprofit dedicated to digital wellbeing and combating all forms of cyberbullying and online abuse. It’s registered as a charity in the UK and as a 501(c)3 nonprofit organization in the US.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Having experienced online abuse myself—&lt;a href=&quot;/2025/04/15/when-playdate-stopped-being-fun/&quot;&gt;and received so little support that it ultimately drove me away from Playdate as a platform&lt;/a&gt;—this feels like the most constructive and meaningful way to turn that experience into something positive. I’d love to donate the full amount these games generate, but I can only give what actually reaches me.&lt;/p&gt;

&lt;p&gt;Be excellent to each other.&lt;/p&gt;

&lt;p&gt;Peace and love,&lt;br /&gt;
matt&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/cybersmile.png&quot; alt=&quot;IMG&quot; title=&quot;Receipt for donation to The Cybersmile Foundation&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 02 Aug 2025 11:18:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/08/02/donating-my-playdate-earnings-to-the-cybersmile-foundation/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/08/02/donating-my-playdate-earnings-to-the-cybersmile-foundation/</guid>
        </item>
      
    
      
        <item>
          <title>Ambientalmente (DJ mix)</title>
          <description>&lt;p&gt;My latest mix comprises Japanese ambient music.&lt;/p&gt;

&lt;p&gt;Some related non-Japanese tracks also in there, just for kicks. 🔰&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.mixcloud.com/gingerbeardman/ambientalmente/&quot;&gt;Listen on MixCloud&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;iframe width=&quot;100%&quot; height=&quot;120&quot; src=&quot;https://player-widget.mixcloud.com/widget/iframe/?hide_cover=1&amp;amp;feed=%2Fgingerbeardman%2Fambientalmente%2F&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;

&lt;div class=&quot;table-wrapper&quot;&gt;
  &lt;table&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th&gt;Timestamp&lt;/th&gt;
        &lt;th&gt;Artist&lt;/th&gt;
        &lt;th&gt;Song&lt;/th&gt;
        &lt;th&gt;Year&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;000:00&lt;/td&gt;
        &lt;td&gt;Susumu Yokota&lt;/td&gt;
        &lt;td&gt;Blue Sky and Yellow Sunflower&lt;/td&gt;
        &lt;td&gt;2004&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;003:34&lt;/td&gt;
        &lt;td&gt;Masakatsu Takagi&lt;/td&gt;
        &lt;td&gt;Marginalia #5&lt;/td&gt;
        &lt;td&gt;2018&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;012:08&lt;/td&gt;
        &lt;td&gt;Hiroshi Yoshimura&lt;/td&gt;
        &lt;td&gt;Green&lt;/td&gt;
        &lt;td&gt;1986&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;016:56&lt;/td&gt;
        &lt;td&gt;Satoshi &amp;amp; Makoto&lt;/td&gt;
        &lt;td&gt;That’s All&lt;/td&gt;
        &lt;td&gt;2017&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;019:46&lt;/td&gt;
        &lt;td&gt;William Orbit&lt;/td&gt;
        &lt;td&gt;Pure Shores (Backing Track)&lt;/td&gt;
        &lt;td&gt;1999&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;023:17&lt;/td&gt;
        &lt;td&gt;Masakatsu Takagi&lt;/td&gt;
        &lt;td&gt;Marginalia #144&lt;/td&gt;
        &lt;td&gt;2023&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;028:09&lt;/td&gt;
        &lt;td&gt;Yumiko Takahashi&lt;/td&gt;
        &lt;td&gt;Natsuno Yakusoku&lt;/td&gt;
        &lt;td&gt;1991&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;028:19&lt;/td&gt;
        &lt;td&gt;Seal&lt;/td&gt;
        &lt;td&gt;Violet (Premix)&lt;/td&gt;
        &lt;td&gt;1991&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;035:51&lt;/td&gt;
        &lt;td&gt;Satoshi &amp;amp; Makoto&lt;/td&gt;
        &lt;td&gt;Crepuscule Leger&lt;/td&gt;
        &lt;td&gt;2017&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;042:03&lt;/td&gt;
        &lt;td&gt;Hiroshi Yoshimura&lt;/td&gt;
        &lt;td&gt;Something Blue&lt;/td&gt;
        &lt;td&gt;1986&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;046:56&lt;/td&gt;
        &lt;td&gt;Pierre Barouh&lt;/td&gt;
        &lt;td&gt;L’autre rive&lt;/td&gt;
        &lt;td&gt;1982&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;051:08&lt;/td&gt;
        &lt;td&gt;Spooky&lt;/td&gt;
        &lt;td&gt;Orange Coloured Liquid&lt;/td&gt;
        &lt;td&gt;1993&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;055:55&lt;/td&gt;
        &lt;td&gt;Takashi Kokubo&lt;/td&gt;
        &lt;td&gt;White Ambient II&lt;/td&gt;
        &lt;td&gt;1990&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;060:11&lt;/td&gt;
        &lt;td&gt;Sawako&lt;/td&gt;
        &lt;td&gt;Tsubomi Saku&lt;/td&gt;
        &lt;td&gt;2008&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;060:51&lt;/td&gt;
        &lt;td&gt;Susumu Yokota&lt;/td&gt;
        &lt;td&gt;The Future of Ecstasy&lt;/td&gt;
        &lt;td&gt;2019&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;063:55&lt;/td&gt;
        &lt;td&gt;Mitsuhiro&lt;/td&gt;
        &lt;td&gt;Infinity&lt;/td&gt;
        &lt;td&gt;1995&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;064:32&lt;/td&gt;
        &lt;td&gt;Shinsuke Honda&lt;/td&gt;
        &lt;td&gt;Moonlight Night&lt;/td&gt;
        &lt;td&gt;1991&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;068:41&lt;/td&gt;
        &lt;td&gt;Takashi Kokubo&lt;/td&gt;
        &lt;td&gt;The Story of Calm Forest&lt;/td&gt;
        &lt;td&gt;1993&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;076:20&lt;/td&gt;
        &lt;td&gt;Takashi Kokubo&lt;/td&gt;
        &lt;td&gt;Catalyzer&lt;/td&gt;
        &lt;td&gt;1990&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;082:14&lt;/td&gt;
        &lt;td&gt;Mitsuhiro&lt;/td&gt;
        &lt;td&gt;Illusion&lt;/td&gt;
        &lt;td&gt;1995&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;084:51&lt;/td&gt;
        &lt;td&gt;Sawako&lt;/td&gt;
        &lt;td&gt;April ~ From Sea Shell (with Radiosonde)&lt;/td&gt;
        &lt;td&gt;2008&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;087:14&lt;/td&gt;
        &lt;td&gt;I Am Robot and Proud&lt;/td&gt;
        &lt;td&gt;When I Get My Ears&lt;/td&gt;
        &lt;td&gt;2006&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;087:58&lt;/td&gt;
        &lt;td&gt;Satoshi &amp;amp; Makoto&lt;/td&gt;
        &lt;td&gt;Closer&lt;/td&gt;
        &lt;td&gt;2020&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;092:05&lt;/td&gt;
        &lt;td&gt;Susumu Yokota&lt;/td&gt;
        &lt;td&gt;Saku&lt;/td&gt;
        &lt;td&gt;1999&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;096:19&lt;/td&gt;
        &lt;td&gt;Strange Cargo&lt;/td&gt;
        &lt;td&gt;Water Babies&lt;/td&gt;
        &lt;td&gt;1993&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;099:10&lt;/td&gt;
        &lt;td&gt;TOMC&lt;/td&gt;
        &lt;td&gt;Extraverted Feeling (Kudan)&lt;/td&gt;
        &lt;td&gt;2022&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;103:20&lt;/td&gt;
        &lt;td&gt;Hiroshi Yoshimura&lt;/td&gt;
        &lt;td&gt;Over The Clover&lt;/td&gt;
        &lt;td&gt;1987&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;109:21&lt;/td&gt;
        &lt;td&gt;Hiroshi Yoshimura&lt;/td&gt;
        &lt;td&gt;Clouds&lt;/td&gt;
        &lt;td&gt;1982&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;114:40&lt;/td&gt;
        &lt;td&gt;Masakatsu Takagi&lt;/td&gt;
        &lt;td&gt;Marginalia #148&lt;/td&gt;
        &lt;td&gt;2024&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;119:28&lt;/td&gt;
        &lt;td&gt;Shinsuke Honda&lt;/td&gt;
        &lt;td&gt;Summer Clouds&lt;/td&gt;
        &lt;td&gt;1991&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;124:08&lt;/td&gt;
        &lt;td&gt;Junichi Kamiyama&lt;/td&gt;
        &lt;td&gt;Aquarius&lt;/td&gt;
        &lt;td&gt;1993&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;126:35&lt;/td&gt;
        &lt;td&gt;Haruomi Hosono&lt;/td&gt;
        &lt;td&gt;Talking&lt;/td&gt;
        &lt;td&gt;1984&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;129:06&lt;/td&gt;
        &lt;td&gt;Masakatsu Takagi&lt;/td&gt;
        &lt;td&gt;River Returns (Overture)&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;130:24&lt;/td&gt;
        &lt;td&gt;Shinsuke Honda&lt;/td&gt;
        &lt;td&gt;Dreamland&lt;/td&gt;
        &lt;td&gt;1991&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;134:25&lt;/td&gt;
        &lt;td&gt;Satoshi &amp;amp; Makoto&lt;/td&gt;
        &lt;td&gt;Reconstruction&lt;/td&gt;
        &lt;td&gt;2020&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;137:28&lt;/td&gt;
        &lt;td&gt;Haruomi Hosono&lt;/td&gt;
        &lt;td&gt;Honeymoon&lt;/td&gt;
        &lt;td&gt;1975&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;138:26&lt;/td&gt;
        &lt;td&gt;Hiroshi Yoshimura&lt;/td&gt;
        &lt;td&gt;Feel&lt;/td&gt;
        &lt;td&gt;1986&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;142:29&lt;/td&gt;
        &lt;td&gt;Yasuaki Shimizu&lt;/td&gt;
        &lt;td&gt;Seiko 2&lt;/td&gt;
        &lt;td&gt;1987&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;143:05&lt;/td&gt;
        &lt;td&gt;Max Richter&lt;/td&gt;
        &lt;td&gt;On the Nature of Daylight&lt;/td&gt;
        &lt;td&gt;2004&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;

&lt;/div&gt;

&lt;p&gt;39 tracks with a duration of 2h29m18s. As always, this was produced using the DJ.Studio app.&lt;/p&gt;

&lt;p&gt;Let me know what you think of the tunes!&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://mega.nz/folder/UkokGISS#zZHaUOzcD1KmNY_yNbzwXQ&quot;&gt;Download&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;catch-the-vibe&quot;&gt;Catch the Vibe&lt;/h2&gt;

&lt;p&gt;If you want to listen to a couple of tracks that gives the vibe of this mix try these:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Blue Sky and Yellow Sunflower”&lt;/strong&gt; by Susumu Yokota (2004)&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;HF5Eqvr7Qgk&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;p&gt;&lt;strong&gt;“Summer Clouds”&lt;/strong&gt; by Shinsuke Honda (1991)&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;mW6Of-qEugo&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 19 Jul 2025 21:09:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/07/19/japanese-ambient-dj-mix/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/07/19/japanese-ambient-dj-mix/</guid>
        </item>
      
    
      
        <item>
          <title>Moai (DJ mix)</title>
          <description>&lt;p&gt;An hour of songs with “Moai” somewhere in the title …for no reason other than it sounded like a fun challenge. And because Moai are cool. Why? Why not? ✨🗿✨&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.mixcloud.com/gingerbeardman/moai/&quot;&gt;Listen on MixCloud&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;iframe width=&quot;100%&quot; height=&quot;120&quot; src=&quot;https://player-widget.mixcloud.com/widget/iframe/?hide_cover=1&amp;amp;feed=%2Fgingerbeardman%2Fmoai%2F&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;

&lt;div class=&quot;table-wrapper&quot;&gt;
  &lt;table&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th&gt;Timestamp&lt;/th&gt;
        &lt;th&gt;Artist&lt;/th&gt;
        &lt;th&gt;Song (Link)&lt;/th&gt;
        &lt;th&gt;Year&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;00:00&lt;/td&gt;
        &lt;td&gt;Maria Usbeck&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=T6-iqQ7KAoU&quot;&gt;Moai y yo&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2016&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;03:03&lt;/td&gt;
        &lt;td&gt;Saphileaum&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=dVv0K-dEhoo&quot;&gt;Moai&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2025&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;07:27&lt;/td&gt;
        &lt;td&gt;Seotaiji&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=uYfWxnu5NCw&quot;&gt;Moai&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2008&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;10:40&lt;/td&gt;
        &lt;td&gt;Fila Brazillia&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=AczD9YVyaPw&quot;&gt;The Moai&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;1997&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;13:54&lt;/td&gt;
        &lt;td&gt;Bala&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pWIl9gToL74&quot;&gt;Moai&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2007&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;19:56&lt;/td&gt;
        &lt;td&gt;Jestofunk&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=t6vYUZ-8lZY&quot;&gt;Moai Message&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;1995&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;26:41&lt;/td&gt;
        &lt;td&gt;Yosuke Onuma&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=S-UY1LycRK4&quot;&gt;Moai’s Tihai&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2016&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;34:27&lt;/td&gt;
        &lt;td&gt;Atiø&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://soundcloud.com/ati_o/moai&quot;&gt;moai&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2022&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;35:50&lt;/td&gt;
        &lt;td&gt;Tora Gargallo&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=AAAnp2A3UbU&quot;&gt;Smoking Moai&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2020&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;38:11&lt;/td&gt;
        &lt;td&gt;Glåsbird&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://whitelabrecs.bandcamp.com/track/moai&quot;&gt;Moai&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2023&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;40:45&lt;/td&gt;
        &lt;td&gt;Monica Ramos&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=WBUDLisG23s&quot;&gt;Moai&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;1997&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;44:22&lt;/td&gt;
        &lt;td&gt;Urban Zakapa&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=CuFtHgjdCII&quot;&gt;Moai&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2017&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;48:33&lt;/td&gt;
        &lt;td&gt;Giorgio Poi&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=7COqF5F1KJg&quot;&gt;Moai&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2021&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;51:45&lt;/td&gt;
        &lt;td&gt;La Bergerie&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://specific.bandcamp.com/track/moa&quot;&gt;Moaï&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2018&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;

&lt;/div&gt;

&lt;p&gt;14 tracks with a duration of 55m44s. &lt;a href=&quot;/2025/05/21/if-only-you-could-see-what-ive-seen-with-your-eyes/&quot;&gt;As previously&lt;/a&gt;, this was produced using the DJ.Studio app.&lt;/p&gt;

&lt;p&gt;Let me know what you think of the tunes!&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://mega.nz/folder/UkokGISS#zZHaUOzcD1KmNY_yNbzwXQ&quot;&gt;Download&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;moai-by-giorgio-poi-2021&quot;&gt;“Moai” by Giorgio Poi (2021)&lt;/h2&gt;

&lt;p&gt;If you want to listen to one track that gives the vibe of this mix it’s this one:&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;7COqF5F1KJg&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 10 Jul 2025 20:43:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/07/10/moai-dj-mix/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/07/10/moai-dj-mix/</guid>
        </item>
      
    
      
        <item>
          <title>Automatic build number incrementing in Xcode</title>
          <description>&lt;p&gt;There are many ways to do automatic build version number incrementing in Xcode. I don’t know of any really easy universal way of doing it, so this is simply my preferred way of doing it. I just added it to a new project so thought I’d document if only for my own future reference!&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1-create-a-xcconfig&quot;&gt;1. Create a .xcconfig&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Add a file &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BuildNumber.xcconfig&lt;/code&gt; to your project&lt;/li&gt;
  &lt;li&gt;Add a &lt;em&gt;Pre-Action Script&lt;/em&gt; to your &lt;em&gt;Scheme&lt;/em&gt;:
    &lt;ul&gt;
      &lt;li&gt;In Xcode, edit your scheme (&lt;em&gt;Product &amp;gt; Scheme &amp;gt; Edit Scheme&lt;/em&gt;).&lt;/li&gt;
      &lt;li&gt;For both “Run” and “Archive” actions, add a &lt;em&gt;Pre-action&lt;/em&gt; with a script like the one below&lt;/li&gt;
      &lt;li&gt;Here I’m using a sort of reverse notation timestamp format, &lt;em&gt;you can use whatever works for you&lt;/em&gt;&lt;/li&gt;
      &lt;li&gt;Make sure to set “Provide build settings from” to your project&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;#!/bin/sh&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;BUILD_NUMBER&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;date&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;+%y%m%d.%H%M&apos;&lt;/span&gt;&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;

&lt;span class=&quot;nv&quot;&gt;PROJECT_NAME&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;basename&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$PROJECT_FILE_PATH&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; .xcodeproj&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;CURRENT_PROJECT_VERSION = &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$BUILD_NUMBER&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;PROJECT_DIR&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;PROJECT_NAME&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/BuildNumber.xcconfig&quot;&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Updated build number to: &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$BUILD_NUMBER&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/xcode-automatic-build-number-01.png&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;2-reference-the-xcconfig-in-your-project&quot;&gt;2. Reference the .xcconfig in your project&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;In your project set the base configuration file to your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BuildNumber.xcconfig&lt;/code&gt;
    &lt;ul&gt;
      &lt;li&gt;In the main editor, you’ll see two sections: &lt;em&gt;PROJECT&lt;/em&gt; and &lt;em&gt;TARGETS&lt;/em&gt;&lt;/li&gt;
      &lt;li&gt;Click the name of your project and make sure &lt;em&gt;Info&lt;/em&gt; tab is selected&lt;/li&gt;
      &lt;li&gt;You can set the base configuration at the project level (as here) or for each target individually&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/xcode-automatic-build-number-02.png&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;3-set-the-version-to-use-the-config-variable&quot;&gt;3. Set the version to use the config variable&lt;/h2&gt;

&lt;p&gt;In the target build settings, set: Current Project Version to: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$(CURRENT_PROJECT_VERSION)&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;It will show the version number in place&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/xcode-automatic-build-number-03.png&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;4-confirm-by-displaying-the-value-in-your-app&quot;&gt;4. Confirm by displaying the value in your app&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CFBundleVersion&lt;/code&gt; for the build version number&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/xcode-automatic-build-number-04.png&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 28 Jun 2025 16:01:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/06/28/automatic-build-number-incrementing-in-xcode/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/06/28/automatic-build-number-incrementing-in-xcode/</guid>
        </item>
      
    
      
        <item>
          <title>Intelligent Agent Technology: Open Sesame! (1993)</title>
          <description>&lt;p&gt;After years of unsuccessful attempts to find the name of a long-forgotten app through Google, I tried pasting my query into Gemini:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“Back in my teens I saw a software demo for a Mac/Windows app that tracked what you were doing and offered to complete repetitive tasks for you. Like renaming all files in a folder it would interrupt after a few and offer to do the rest. Maybe late 80s or early 90s.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Gemini instantly responded with the app by name and with references. (out of all the services I tried, ChatGPT was the only other one to identify the app correctly.)&lt;/p&gt;

&lt;p&gt;Open Sesame! was “the world’s first intelligent software assistant for the Macintosh. It observes how you work, learns your repetitive patterns, and then offers to do them for you. Automatically.”&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/open-sesame.jpg&quot; alt=&quot;IMG&quot; title=&quot;Open Sesame! software reduces computer-use complexity&amp;lt;br&amp;gt;by relieving users of many routine tasks.&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;one-thousand-and-one-nights&quot;&gt;One Thousand and One Nights&lt;/h2&gt;

&lt;p&gt;I remember seeing a demo of Open Sesame! in the early/mid-1990s. Although the demo failed—the Macintosh was supposed to prompt the user to continue renaming a series of files in sequence—the concept left a lasting impression on me.&lt;/p&gt;

&lt;p&gt;Over the years I’ve tried to find the event I saw the app at, the app itself, or any other information. I asked other classic Macintosh enthusiasts. Time after time I failed to find the answer.&lt;/p&gt;

&lt;p&gt;So I find it delightfully circular that in 2025 I am using the “ai” benefits of machine learning to find out the name of an app built around machine learning in 1993.&lt;/p&gt;

&lt;hr /&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/open-sesame-ad-1993.jpg&quot; alt=&quot;IMG&quot; title=&quot;Advertisement in MacWorld (December 1993)&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;download&quot;&gt;Download&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/open-sesame-11&quot;&gt;Open Sesame! 1.1 at Macintosh Garden&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;further-reading&quot;&gt;Further Reading&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/MacWorld_9308_August_1993/page/n26/mode/2up?q=%22open+sesame%22&quot;&gt;MacWorld: MacBulletin&lt;/a&gt; (August 1993)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/MacWorld_9309_September_1993/page/n37/mode/2up?q=%22open+sesame%22&quot;&gt;MacWorld: News&lt;/a&gt; (September 1993)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/MacWorld_9312_December_1993/mode/2up?q=%22open+sesame%22&quot;&gt;MacWorld: advertisement&lt;/a&gt; (December 1993)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/MacWorld_9405_May_1994/page/n85/mode/2up?q=%22open+sesame%22&quot;&gt;MacWorld: review of version 1.02&lt;/a&gt; (May 1994)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/MacWorld_9406_June_1994/mode/2up?q=%22open+sesame%22&quot;&gt;MacWorld: advertisement&lt;/a&gt; (June 1994)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/MacWorld_9412_December_1994/mode/2up?q=%22open+sesame%22&quot;&gt;MacWorld: price of version 1.1&lt;/a&gt; (December 1994)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/MacWorld_9508_August_1995/page/n203/mode/2up?q=%22open+sesame%22&quot;&gt;MacWorld: get Open Sesame! free when buying a keyboard&lt;/a&gt; (August 1995)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://spinoff.nasa.gov/spinoff1996/56.html&quot;&gt;NASA Spinoff: Intelligent Agent Technology&lt;/a&gt; (&lt;a href=&quot;https://archive.org/details/1991_20210720_202107/1996/page/n96/mode/1up&quot;&gt;scan&lt;/a&gt;) (1996)&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 31 May 2025 15:33:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/05/31/intelligent-agent-technology-open-sesame-1993/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/05/31/intelligent-agent-technology-open-sesame-1993/</guid>
        </item>
      
    
      
        <item>
          <title>If only you could see what I’ve seen with your eyes (DJ mix)</title>
          <description>&lt;p&gt;Here’s a 30 minute vocal drum’n’bass DJ Mix, all but one tracks are from Jan to May 2025. Plus a few little surprise samples for you, the listener. Photo of Sean Young as Rachael in Blade Runner (1982).&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.mixcloud.com/gingerbeardman/dnb-2025/&quot;&gt;Listen on MixCloud&lt;/a&gt; or via the alternatives below.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/dnb-2025.jpg&quot; alt=&quot;JPG&quot; title=&quot;I love you. I trust you.&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;iframe width=&quot;100%&quot; height=&quot;120&quot; src=&quot;https://player-widget.mixcloud.com/widget/iframe/?hide_cover=1&amp;amp;feed=%2Fgingerbeardman%2Fdnb-2025%2F&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;

&lt;div class=&quot;table-wrapper&quot;&gt;
  &lt;table&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th&gt;Timestamp&lt;/th&gt;
        &lt;th&gt;Artist&lt;/th&gt;
        &lt;th&gt;Song (Video)&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;00:00&lt;/td&gt;
        &lt;td&gt;Mameyudoufu&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=-Jtibf32hTg&quot;&gt;Literally 1998&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;03:45&lt;/td&gt;
        &lt;td&gt;Fred V &amp;amp; Nu-La&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=nWvikXlLXCE&quot;&gt;Sparks&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;06:50&lt;/td&gt;
        &lt;td&gt;Mallrat&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ue7eRnYcleo&quot;&gt;Hideaway&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;09:35&lt;/td&gt;
        &lt;td&gt;London Elektricity, BCee &amp;amp; Ruth Royall&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Lko-5zzo6Gg&quot;&gt;Diamonds in the Rain&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;12:10&lt;/td&gt;
        &lt;td&gt;London Elektricity&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=mCzq077fr7g&quot;&gt;Life Is But A Dream&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;17:13&lt;/td&gt;
        &lt;td&gt;London Elektricity, Anile &amp;amp; Zara Kershaw&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=rWN9bzhRz-Y&quot;&gt;Unfrozen&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;21:45&lt;/td&gt;
        &lt;td&gt;Vio.let, Lauren-Paige &amp;amp; Keeno&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=NYChqwZgLGc&quot;&gt;Worlds Apart&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;25:14&lt;/td&gt;
        &lt;td&gt;London Elektricity &amp;amp; Emer Dineen&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=7Xqtb6pqSGk&quot;&gt;Build A Better World&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;

&lt;/div&gt;

&lt;p&gt;8 tracks with a duration of 29m35s. Much like &lt;a href=&quot;/2024/12/31/music-recommendations-2024/&quot;&gt;my last mix&lt;/a&gt;, this was produced using the DJ.Studio app.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;playlists&quot;&gt;Playlists&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://music.apple.com/gb/playlist/dnb-2025/pl.u-25vlyToGzxJ&quot;&gt;Apple Music&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://open.spotify.com/playlist/4O6arqpdWqqzrOgFCL45CV?si=6b30968e91924064&quot;&gt;Spotify&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLfF-zlMNYMd9oKLTTDq9iTDLrldpWsh6w&quot;&gt;YouTube&lt;/a&gt; (playlist)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://youtu.be/WsmotKF3KLY&quot;&gt;YouTube&lt;/a&gt; (video)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://mega.nz/folder/UkokGISS#zZHaUOzcD1KmNY_yNbzwXQ&quot;&gt;Download&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 21 May 2025 14:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/05/21/if-only-you-could-see-what-ive-seen-with-your-eyes/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/05/21/if-only-you-could-see-what-ive-seen-with-your-eyes/</guid>
        </item>
      
    
      
        <item>
          <title>Media Darling: T-shirt design</title>
          <description>&lt;p&gt;I was looking through &lt;a href=&quot;https://archive.org/details/comptiq-vol.-41-april-1988/&quot;&gt;Comptiq, Vol. 41, April 1988&lt;/a&gt; and spotted &lt;a href=&quot;https://archive.org/details/comptiq-vol.-41-april-1988/Comptiq%20-%20Vol.%2041%20April%201988/page/n207/mode/2up&quot;&gt;an illustration showing the relative size of 2” floppy disks&lt;/a&gt;—used in some word processors at the time—compared to more common floppy disk sizes at the time: 8”, 5”, and 3.5”.&lt;/p&gt;

&lt;p&gt;Which got me thinking about the ever decreasing size of storage and how it might make for a nice illustration on a T-shirt. So I created technical drawings of the following media in decreasing size:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;5.25” floppy disk&lt;/li&gt;
  &lt;li&gt;3.5” floppy disk&lt;/li&gt;
  &lt;li&gt;MiniDisc&lt;/li&gt;
  &lt;li&gt;CompactFlash&lt;/li&gt;
  &lt;li&gt;SecureDigital&lt;/li&gt;
  &lt;li&gt;MicroSD&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/media-darling.png&quot; alt=&quot;IMG&quot; title=&quot; &quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;t-shirt&quot;&gt;T-shirt&lt;/h2&gt;

&lt;p&gt;Various sizes and colours.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gingerbeardman.creator-spring.com/listing/media-darling&quot;&gt;gingerbeardman.creator-spring.com/listing/media-darling&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/media-darling-tee.jpg&quot; alt=&quot;IMG&quot; title=&quot;MEDIA DARLING T-shirt&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;stickers-to-scale&quot;&gt;Stickers (To Scale)&lt;/h2&gt;

&lt;p&gt;Roughly to scale, on clear vinyl.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gingerbeardman.creator-spring.com/listing/media-darling-decal-floppy&quot;&gt;gingerbeardman.creator-spring.com/listing/media-darling-decal-floppy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/media-darling-floppy.png&quot; alt=&quot;IMG&quot; title=&quot;3.5&amp;#x22; floppy disk&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gingerbeardman.creator-spring.com/listing/media-darling-decal-minidisc&quot;&gt;gingerbeardman.creator-spring.com/listing/media-darling-decal-minidisc&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/media-darling-minidisc.png&quot; alt=&quot;IMG&quot; title=&quot;MiniDisc&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;sticker-not-to-scale&quot;&gt;Sticker (Not To Scale)&lt;/h2&gt;

&lt;p&gt;Not to scale, on clear vinyl&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gingerbeardman.creator-spring.com/listing/media-darling-decal-colour&quot;&gt;gingerbeardman.creator-spring.com/listing/media-darling-decal-colour&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/media-darling-colour.png&quot; alt=&quot;IMG&quot; title=&quot; &quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;alt-store&quot;&gt;Alt Store&lt;/h2&gt;

&lt;p&gt;Some buyers may choose to buy from my alternate web store which ships from the UK.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tshirtstudio.com/marketplace/gingerbeardman&quot;&gt;www.tshirtstudio.com/marketplace/gingerbeardman&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This store has more limited colour choices, though you can edit that during checkout. YMMV.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 19 May 2025 15:54:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/05/19/media-darling-t-shirt-design/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/05/19/media-darling-t-shirt-design/</guid>
        </item>
      
    
      
        <item>
          <title>Monokai Pro Vibrant theme for Nova editor</title>
          <description>&lt;p&gt;I neglected to blog about this in October 2024, so here it is now.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gingerbeardman/Monokai-Pro-Vibrant.novaextension/releases/&quot;&gt;Monokai Pro Vibrant&lt;/a&gt; is my fork of the &lt;a href=&quot;https://github.com/keisto/Monokai-Pro.novaextension&quot;&gt;unofficial Monokai Pro theme&lt;/a&gt; for &lt;a href=&quot;https://nova.app&quot;&gt;Nova&lt;/a&gt; editor, by Tony Keiser.&lt;/p&gt;

&lt;p&gt;My fork has a few quality of life changes:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Theme Vibrancy is enabled, making focused and unfocused windows more distinguishable&lt;/li&gt;
  &lt;li&gt;Colour tweaks improve contrast when highlighting found instances of search terms&lt;/li&gt;
  &lt;li&gt;Comments are now &lt;em&gt;italicised&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I use the Spectrum variation of the theme with the &lt;a href=&quot;https://github.com/IBM/plex/releases/tag/%40ibm%2Fplex-mono%401.1.0&quot;&gt;IBM Plex Mono&lt;/a&gt; font to great effect.&lt;/p&gt;

&lt;p&gt;Since late-2025 I’m now using font &lt;a href=&quot;https://mass-driver.com/trial-fonts&quot;&gt;MD IO Trial&lt;/a&gt; (free for personal use).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/nova-monokai-pro-vibrant.png&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;monokai-pro&quot;&gt;Monokai Pro&lt;/h2&gt;

&lt;p&gt;The original &lt;a href=&quot;https://monokai.pro&quot;&gt;Monokai Pro&lt;/a&gt; theme by Wimer Hazenberg is not free, so I would encourage you to buy a licence even if you’re using an unofficial port or modification of the theme. It’s only right to support software developers. You can get a licence to use Monokai Pro from the original creator: &lt;a href=&quot;https://monokai.pro&quot;&gt;monokai.pro&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;download&quot;&gt;Download&lt;/h2&gt;

&lt;p&gt;I filed a &lt;a href=&quot;https://github.com/keisto/Monokai-Pro.novaextension/pull/9&quot;&gt;PR for these changes&lt;/a&gt;, but it has not yet been accepted. I’m not comfortable distributing this on the official extension gallery at this time. So grab it from GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gingerbeardman/Monokai-Pro-Vibrant.novaextension/releases/&quot;&gt;github.com/gingerbeardman/Monokai-Pro-Vibrant.novaextension/releases/&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 14 May 2025 19:50:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/05/14/monokai-pro-vibrant-theme-for-nova-editor/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/05/14/monokai-pro-vibrant-theme-for-nova-editor/</guid>
        </item>
      
    
      
        <item>
          <title>Abandoned project: Band-kun/Beatnik for Playdate</title>
          <description>&lt;p&gt;Back in November 2020 I was exploring the &lt;a href=&quot;https://en.wikipedia.org/wiki/PC-98&quot;&gt;PC-98&lt;/a&gt; back catalog, and stumbled across a strange game called &lt;a href=&quot;https://www.mobygames.com/game/155798/band-kun/&quot;&gt;Band-kun&lt;/a&gt;. Strange in that it’s a 1-bit black and white game on a platform that was capable of colour, and also because it’s a hybrid adventure/management/music/rhythm game. &lt;a href=&quot;/2020/12/16/band-kun-musician-simulator-1990-koei/&quot;&gt;I was smitten&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div id=&quot;carousel0&quot; class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0b&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0c&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0d&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0e&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0f&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0g&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0g&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0c&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0d&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0c&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0e&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0d&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0f&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0e&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0g&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0f&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/band-kun-01.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/band-kun-01.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/band-kun-02.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/band-kun-02.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/band-kun-03.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/band-kun-03.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/band-kun-04.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/band-kun-04.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/band-kun-05.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/band-kun-05.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/band-kun-06.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/band-kun-06.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/band-kun-07.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/band-kun-07.png&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0b&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0c&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0d&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0e&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0f&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0g&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 62.5%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}

.carousel__activator:nth-of-type(3):checked ~ .carousel__track {
  -webkit-transform: translateX(-200%);
          transform: translateX(-200%);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__slide:nth-of-type(3) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__controls:nth-of-type(3) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(3) {
  opacity: 1;
}

.carousel__activator:nth-of-type(4):checked ~ .carousel__track {
  -webkit-transform: translateX(-300%);
          transform: translateX(-300%);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__slide:nth-of-type(4) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__controls:nth-of-type(4) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(4) {
  opacity: 1;
}

.carousel__activator:nth-of-type(5):checked ~ .carousel__track {
  -webkit-transform: translateX(-400%);
          transform: translateX(-400%);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__slide:nth-of-type(5) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__controls:nth-of-type(5) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(5) {
  opacity: 1;
}

.carousel__activator:nth-of-type(6):checked ~ .carousel__track {
  -webkit-transform: translateX(-500%);
          transform: translateX(-500%);
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__slide:nth-of-type(6) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__controls:nth-of-type(6) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(6) {
  opacity: 1;
}

.carousel__activator:nth-of-type(7):checked ~ .carousel__track {
  -webkit-transform: translateX(-600%);
          transform: translateX(-600%);
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__slide:nth-of-type(7) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__controls:nth-of-type(7) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(7) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(3) {
  -webkit-transform: translateX(200%) translateZ(0);
          transform: translateX(200%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(4) {
  -webkit-transform: translateX(300%) translateZ(0);
          transform: translateX(300%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(5) {
  -webkit-transform: translateX(400%) translateZ(0);
          transform: translateX(400%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(6) {
  -webkit-transform: translateX(500%) translateZ(0);
          transform: translateX(500%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(7) {
  -webkit-transform: translateX(600%) translateZ(0);
          transform: translateX(600%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(3),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(3 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(4),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(4 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(5),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(5 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(6),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(6 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(7),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(7 {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;#carousel0 .carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;the-idea&quot;&gt;The Idea&lt;/h2&gt;

&lt;p&gt;I was already developing for the &lt;a href=&quot;https://play.date/&quot;&gt;Playdate&lt;/a&gt;, a modern 1-bit platform, and it struck me as the perfect opportunity to create a remaster of the game. So, I set my sights on securing the licence. The original title was developed by Koei—Japan’s equivalent to Electronic Arts—a giant now known as Koei Tecmo, whose owners are worth hundreds of billions. The game itself is credited to one of those owners: Yoichi Erikawa, who used the pen name Ko Shibusawa. I had a feeling this wasn’t going to be easy.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/band-kun-playdate.gif#playdate&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I published a thread about the game and my prototype &lt;a href=&quot;https://twitter.com/gingerbeardman/status/1339232766861451278&quot;&gt;on Twitter&lt;/a&gt;, introducing the game to the West, which remains my most popular post and thread of all-time (~20 years, for me) at over 450K impressions. I also mirrored the thread as a &lt;a href=&quot;/2020/12/16/band-kun-musician-simulator-1990-koei/&quot;&gt;blog post&lt;/a&gt; which is no doubt an easier read.&lt;/p&gt;

&lt;p&gt;The idea for the remaster was to not remake the original game at all, but rather to take the vibe and bring it into the modern era. So there were no plans to use the original music, or perhaps even the &lt;a href=&quot;/2021/01/03/extracting-images-from-band-kun/&quot;&gt;original graphics&lt;/a&gt;. I would leverage modern device capabilities and input methods to create a totally new experience a million miles away from the limited original game from 1990.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;challenge-accepted&quot;&gt;Challenge Accepted&lt;/h2&gt;

&lt;p&gt;A couple of days later, 18th December 2020, &lt;a href=&quot;https://cabel.com&quot;&gt;Cabel Sasser&lt;/a&gt; of &lt;a href=&quot;https://panic.com&quot;&gt;Panic&lt;/a&gt; reached out:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“Hey Matt, I love a good challenge—do you want me to actually try to make contact with someone at Koei? Regarding Band-Kun? (Philosophically, the idea of reviving a long-forgotten PC Koei title is just enormously interesting to me ahhahah)”.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;By 25th December 2020—thanks Santa!—Panic’s guy in Japan, Noby, had a breakthrough finding contact details and sent an email to Koei. Their reply came quickly on 27th December 2020 when a lovely person in Koei’s IP management department replied:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;they knew of the Playdate and were waiting patiently to pre-order&lt;/li&gt;
  &lt;li&gt;they had the licence for the Band-kun game (music to my ears!)&lt;/li&gt;
  &lt;li&gt;there was an outstanding question about the music rights&lt;/li&gt;
  &lt;li&gt;and some remaining business questions for Panic to answer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project then became in need of a budget to be set: for both the licence and for me to build it. Even with this discussion happening in late December 2020, it was suggested that the game could feature in Season 2. And that, unfortunately, was the last I heard of it. Sad, and surprising, but true.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Not one to give up so easily I submitted the game twice, kind of, in pitches to Panic.&lt;/p&gt;

&lt;h2 id=&quot;open-pitch-band-kun&quot;&gt;Open Pitch: Band-kun&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;June 2022&lt;/li&gt;
  &lt;li&gt;to reignite the licence discussion&lt;/li&gt;
  &lt;li&gt;a reimagining of the original game for a modern device&lt;/li&gt;
  &lt;li&gt;as a team effort with musician and tools programmers; to hit a deadline&lt;/li&gt;
  &lt;li&gt;suggested budget was included&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cdn.gingerbeardman.com/files/playdate-pitch-2022-band-kun.pdf&quot;&gt;pitch pdf&lt;/a&gt; (191 KB)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://cdn.gingerbeardman.com/files/playdate-pitch-2022-band-kun.pdf&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/abandoned-playdate-band-kun.png&quot; alt=&quot;IMG&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;On 1st May 2024 I sent a message to Panic stating that I was still interested in making the game and to check the status of the project, but never received a reply.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;season-2-pitch-beatnik&quot;&gt;Season 2 Pitch: Beatnik&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;July 2024&lt;/li&gt;
  &lt;li&gt;an all-new game&lt;/li&gt;
  &lt;li&gt;let’s forget about the IP&lt;/li&gt;
  &lt;li&gt;completely revised and redesigned&lt;/li&gt;
  &lt;li&gt;as a solo endeavour; I was confident I could complete the new scope myself&lt;/li&gt;
  &lt;li&gt;no budget was required&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cdn.gingerbeardman.com/files/playdate-pitch-2024-beatnik.pdf&quot;&gt;pitch pdf&lt;/a&gt; (185 KB)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://cdn.gingerbeardman.com/files/playdate-pitch-2024-beatnik.pdf&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/abandoned-playdate-beatnik.png&quot; alt=&quot;IMG&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;gono-go&quot;&gt;Go/no-go&lt;/h2&gt;

&lt;p&gt;Neither of the pitches were successful. There was no further discussion of the licence from 2020.&lt;/p&gt;

&lt;p&gt;Regardless, I decided that I would continue working on the game and release it myself. This was the big project I was working on pretty much exclusively from May 2024 to &lt;a href=&quot;/2025/04/15/when-playdate-stopped-being-fun/&quot;&gt;October 2024&lt;/a&gt;. You can see elements of it in my &lt;a href=&quot;/2025/03/11/old-codes-new-releases-for-playdate/&quot;&gt;New World&lt;/a&gt; and &lt;a href=&quot;https://gingerbeardman.itch.io/new-world&quot;&gt;Band-o-matic&lt;/a&gt; tech demos.&lt;/p&gt;

&lt;p&gt;In August 2024, I took a two-week break from working on Beatnik to develop &lt;a href=&quot;/2024/10/08/bender-2-bend-harder-for-playdate/&quot;&gt;Bender 2: Bend Harder&lt;/a&gt;, an expanded version of a game I originally made in 2012. As part of that project, I integrated some of the tooling and library code I had built for Beatnik to test and validate a few of the technologies and concepts. &lt;a href=&quot;/2025/04/15/when-playdate-stopped-being-fun/&quot;&gt;And that was the end of that&lt;/a&gt;.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 11 May 2025 16:58:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/05/11/abandoned-project-bandkun-beatnik-for-playdate/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/05/11/abandoned-project-bandkun-beatnik-for-playdate/</guid>
        </item>
      
    
      
        <item>
          <title>Abandoned project: multi-site shopping app</title>
          <description>&lt;p&gt;I order weird old stuff from Japan a few times a year: old magazines, CD-ROMs, digital watches, strategy guides, video games, playing cards, books, artwork and any other old tat that takes my fancy. The way this is usually done is by ordering through a proxy service that receives the goods on your behalf and combines and ships them to you at your convenience.&lt;/p&gt;

&lt;p&gt;There are many such proxy services, each with their own website, fee structure, shipping costs, and other pros and cons. I grew tired of tabs from these various sites cluttering up my browser, so I decided to build a bespoke app to manage them. I couldn’t find anything close, other than an app for Russians to more easily shop on AliExpress. So, in September 2024, I built the app I envisioned as a rapid prototype and called it &lt;em&gt;Otaku!&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;otaku&lt;/strong&gt; (n.) in Japan, a young person who is obsessed with computers or particular aspects of popular culture to the detriment of their social skills 🤓&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;otaku&quot;&gt;Otaku!&lt;/h2&gt;

&lt;p&gt;The app itself is a customisable set of tabs—one per site—each containing a WebKit view, along with a detailed settings interface that includes an editable list of search terms. So, you could easily do common searches and there was no need to repeatedly type searches terms into each site as they would be automatically be entered when you switch to the tab. Add to that Custom CSS to hide parts of the sites, Google Translate to view some sites in your native language rather than Japanese, currency converter, and several other useful related tools rounded out a comprehensive app.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;postmortem&quot;&gt;Postmortem&lt;/h2&gt;

&lt;p&gt;It worked well, and I used it heavily for the duration of its development. it also gained a number of passionate users on TestFlight. My only criticism is that the specific design of the app and the unreliability of my naive WebKit implementation meant that whilst the existing friction was removed by facilitating easier multi-site management, new friction was introduced elsewhere in the user experience, and at the end of the day you’re still interacting with a bunch of websites of varying quality.&lt;/p&gt;

&lt;p&gt;A better solution might be somewhere in between, perhaps using a more modern popover interface paradigm to switch between tabs rather than the back and forth of the navigation controller. Then there are options to capture the results via API and present them in a unified way, but this opens up more questions and friction at the point you want to buy something. In short, it’s a difficult problem!&lt;/p&gt;

&lt;p&gt;SwiftUI is fun to work with, despite it throwing its hands up at several points and me having to revert to my last commit to get it back on track. I don’t really enjoy building iOS and macOS apps at this point in time, so Xcode became a bit of a chore and took a lot of the fun out of the project.&lt;/p&gt;

&lt;p&gt;After pushing several updates up to the &lt;a href=&quot;/2025/04/15/when-playdate-stopped-being-fun/&quot;&gt;middle of October&lt;/a&gt;, I then let that final build expire and have never wanted to push any update or new version.&lt;/p&gt;

&lt;p&gt;Thanks to all the users of this app for your valuable testing and feedback.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;video-demonstration&quot;&gt;Video Demonstration&lt;/h2&gt;

&lt;p&gt;Below is a video of sample app usage. I select a search term (Hanafuda) and then use it on the different tabs along bottom of the screen. I then switch to a different search term (花札) and use that across the same set of tabs. Notice that at no point did anything need to be typed.&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 1124/2436;&quot; videoid=&quot;2p0aM3QJ_rc&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 10 May 2025 17:35:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/05/10/abandoned-project-multi-site-shopping-app/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/05/10/abandoned-project-multi-site-shopping-app/</guid>
        </item>
      
    
      
        <item>
          <title>Atari/Jeff Minter game jam results, Llamasoft, and ST Format</title>
          <description>&lt;p&gt;So, my game &lt;a href=&quot;https://gingerbeardman.itch.io/herd-nerd&quot;&gt;HERD NERD&lt;/a&gt; is a winner in the “&lt;em&gt;I, REBEL&lt;/em&gt;” game jam, hosted by Atari and Jeff Minter.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;We are delighted to let you know after hours of play and deliberation - Jeff Minter himself chose your game as THIRD PLACE WINNER&lt;/p&gt;

  &lt;p&gt;Your game stood out in all the right ways: creative, clever, weird and totally nailing the theme. The team (and the judges!) were blown away by your take on the theme and your execution.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;✨ &lt;em&gt;What an honour!&lt;/em&gt; ✨&lt;/p&gt;

&lt;p&gt;All three winners receive the same prize, but honestly I am more excited to hear why Jeff, Giles, and Jason liked my game. So many nice words to spur me on!&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;the-results&quot;&gt;The Results&lt;/h2&gt;

&lt;p&gt;You can hear more about the game jam and the winning games on the latest Atari podcast episode on YouTube or your favourite podcast listening point. You’ll also learn a bit about the famous &lt;a href=&quot;https://en.wikipedia.org/wiki/Superlambanana&quot;&gt;Superlambanana&lt;/a&gt; sculpture and the infamous &lt;a href=&quot;https://en.wikipedia.org/wiki/Sven_B%C3%B8mw%C3%B8llen&quot;&gt;Sven Bømwøllen&lt;/a&gt; video game. You have been warned!&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;GeHie-2Jvlw&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;iframe allow=&quot;autoplay *; encrypted-media *; fullscreen *; clipboard-write&quot; frameborder=&quot;0&quot; height=&quot;175&quot; style=&quot;width:100%;max-width:660px;overflow:hidden;border-radius:10px;&quot; sandbox=&quot;allow-forms allow-popups allow-same-origin allow-scripts allow-storage-access-by-user-activation allow-top-navigation-by-user-activation&quot; src=&quot;https://embed.podcasts.apple.com/gb/podcast/episode-54-our-favorite-i-rebel-game-jam-games-w-llamasoft/id1585430874?i=1000706983440&quot;&gt;&lt;/iframe&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;herd-nerd&quot;&gt;HERD NERD&lt;/h2&gt;

&lt;p&gt;You can download and play &lt;a href=&quot;https://gingerbeardman.itch.io/herd-nerd&quot;&gt;HERD NERD&lt;/a&gt; for free/&lt;a href=&quot;https://en.wikipedia.org/wiki/PWYC&quot;&gt;PWYC&lt;/a&gt; on Mac and PC. So check it out! Have fun.&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;KfWiaGyMB24&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;back-in-the-day&quot;&gt;Back in the day&lt;/h2&gt;

&lt;p&gt;It’s July 1991 and I’ve just walked back from Lewis Meeson’s newsagent to my family home clutching &lt;a href=&quot;https://archive.org/details/atari-st-format-issue-024/page/1/mode/2up&quot;&gt;the latest monthly ST FORMAT&lt;/a&gt;, issue 24. I’d browsed the magazine in-store to make sure it was worth £2.95 of my hard-earned pocket money, and was eager to try out the software included on the 3.5” floppy disk. This was pre-internet and that was the easiest way of getting hold of a selection of new software. The same thing applied to Amiga, &lt;a href=&quot;/2025/03/28/macintosh-magazine-media-1-million-files/&quot;&gt;Macintosh&lt;/a&gt;, PC, and more.&lt;/p&gt;

&lt;p&gt;Today I dug out &lt;em&gt;my actual magazine&lt;/em&gt; from storage and my nostalgia dial went all the way &lt;a href=&quot;https://en.wikipedia.org/wiki/Up_to_eleven&quot;&gt;up to 11&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/atari-st-format-issue-024/page/1/mode/2up&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/st-format-24-cover.jpg&quot; alt=&quot;IMG&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Llamatron&quot;&gt;Llamatron&lt;/a&gt; was my first encounter with Jeff Minter and his weird and wonderful type of game. I played it a lot, mostly in 2-player with the droid or other members of my family. Enemies like sentient cans of cola or screaming Mandelbrot patterns are scorched into my memory forever more.&lt;/p&gt;

&lt;p&gt;But it wasn’t just Llamatron that was so great in this issue, I also remember using the &lt;a href=&quot;https://www.atariuptodate.de/en/11414/revenge-document-display-system&quot;&gt;Revenge&lt;/a&gt; document displayer (with no internet we used to read a lot of text files that were included on the disks, like the Llamatron manual and readme about it being distributed in a new-fangled way known as &lt;a href=&quot;https://en.wikipedia.org/wiki/Shareware&quot;&gt;Shareware&lt;/a&gt;). And also &lt;a href=&quot;https://www.atariuptodate.de/en/1562/little-green-selector&quot;&gt;Little Green Selector&lt;/a&gt; which replaced the standard file selector with one that had fully-featured file manager functionality, though eventually I migrated to the even more amazing &lt;a href=&quot;https://www.atariuptodate.de/en/1564/universal-item-selector&quot;&gt;Universal Item Selector III&lt;/a&gt; which was &lt;a href=&quot;http://aicq.gokmase.com/file_sel/index.htm&quot;&gt;one of many such replacements&lt;/a&gt;. It really was a different era.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/atari-st-format-issue-024/page/38/mode/2up&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/st-format-24-disk-spread.jpg&quot; alt=&quot;IMG&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Elsewhere in the magazine is a list of Jeff’s favourite games of all time (as of mid-1991). I love that he put his own game at number 1. And then to also include 2 more of his games. What a rock star! Click the image to zoom. Below you’ll find a full list of games with links to read more.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/atari-st-format-issue-024/page/74/mode/2up&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/st-format-24-yak-faves.jpg&quot; alt=&quot;IMG&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;a-yaks-favourite-games-of-all-time-1991&quot;&gt;A yak’s favourite games (of all time), 1991&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/3604/llamatron-2112/&quot;&gt;Llamatron&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/1237/starglider-ii/&quot;&gt;Starglider 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/683/lemmings/&quot;&gt;Lemmings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/10977/damocles-mercenary-ii/&quot;&gt;Damocles: Mercenary II&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/1993/powermonger/&quot;&gt;PowerMonger&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/134/captain-blood/&quot;&gt;Captain Blood&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/147905/defender-ii/&quot;&gt;Defender 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/19494/virus/&quot;&gt;Virus&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/3481/gauntlet-ii/&quot;&gt;Gauntlet 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/5628/escape-from-the-planet-of-the-robot-monsters/&quot;&gt;Escape from the Planet of the Robot Monsters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/181422/super-grid-runner/&quot;&gt;Super Grid Runner&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/1087/arkanoid/&quot;&gt;Arkanoid&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/1426/the-game-of-harmony/&quot;&gt;E-Motion&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/1324/elite/&quot;&gt;Elite&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/782/stunt-track-racer/&quot;&gt;Stunt Car Racer&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/834/dungeon-master/&quot;&gt;Dungeon Master&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/14951/plutos/&quot;&gt;Plutos&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/2468/time-bandit/&quot;&gt;Time Bandit&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/14094/flight-simulator-ii/&quot;&gt;Flight Simulator 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.modula.org.uk/atari-st-disks-index/?atari_disk_search=mandy&quot;&gt;Trendy Handy Randy Hendy Bendy Mandy&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 09 May 2025 17:03:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/05/09/atari-jeff-minter-game-results-jam-llamasoft-and-st-format/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/05/09/atari-jeff-minter-game-results-jam-llamasoft-and-st-format/</guid>
        </item>
      
    
      
        <item>
          <title>Abandoned project: Soccer for Playdate</title>
          <description>&lt;p&gt;On September 30th, 2023, I was sitting in the cinema &lt;a href=&quot;https://twitter.com/gingerbeardman/status/1708437276756214147&quot;&gt;waiting for an anniversary screening&lt;/a&gt; of Talking Heads &lt;em&gt;“&lt;a href=&quot;https://en.wikipedia.org/wiki/Stop_Making_Sense&quot;&gt;Stop Making Sense&lt;/a&gt;”&lt;/em&gt; to begin when I got a message from &lt;a href=&quot;https://panic.com&quot;&gt;Panic&lt;/a&gt;. They asked if I was familiar with Sensible Soccer. Naturally, I was—I’ve played it since its release in 1992, as man and boy. Back in 2000, I’d even made my own arcade-style take on it called Simple Soccer, and in 2002 I designed an &lt;a href=&quot;/2002/05/23/sensible-soccer-t-shirt/&quot;&gt;official Sensible Soccer T-shirt&lt;/a&gt; that was sold on the high street. Panic had no idea about any of this, but luck works in funny ways sometimes.&lt;/p&gt;

&lt;p&gt;Panic’s idea was to make a soccer game for &lt;a href=&quot;https://play.date&quot;&gt;Playdate&lt;/a&gt;, tied in as a promotional companion to the soccer-infused first-person slice-of-life game &lt;a href=&quot;https://en.wikipedia.org/wiki/Despelote&quot;&gt;Despelote&lt;/a&gt; (out today—1st May, 2025). Very cool.&lt;/p&gt;

&lt;p&gt;I was super keen, as you’d imagine, and quickly got to work on a &lt;a href=&quot;https://gingerbeardman.itch.io/prototypes-for-playdate&quot;&gt;prototype&lt;/a&gt; (download at the link). It let you move around the pitch, zoom in and out, and switch between different pitch surfaces. I sent it off and asked for a budget and scope. With the expectation set that the project was going forwards and while waiting for a reply, I kept going: I got the ball moving (using the same sort of ball movement trick I first solved 25 years ago and more recently reused for &lt;a href=&quot;/2023/06/26/ball-und-panzer-golf-making-a-playdate-game-in-a-week/&quot;&gt;Fore! Track&lt;/a&gt;), and had two AI-controlled teams running around the pitch, tracking the ball using the classic Sensible Soccer &lt;a href=&quot;https://readonlymemory.com/the-making-of-sensible-soccer/&quot;&gt;grid system&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But I never heard back about the budget. So I stopped—just before adding goal-scoring. It would’ve been so cool.&lt;/p&gt;

&lt;p&gt;Lesson learned. I now always ask for a contract upfront and of course don’t do spec work. If a client wants me to build something, they need to commit—and at the very least, meet me on the halfway line.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/soccer-playdate.gif#playdate&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 01 May 2025 14:34:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/05/01/abandoned-project-soccer-for-playdate/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/05/01/abandoned-project-soccer-for-playdate/</guid>
        </item>
      
    
      
        <item>
          <title>Abandoned project: firework builder puzzle game</title>
          <description>&lt;p&gt;I plan to occasionally list abandoned projects that I’ve decided not to take any further.&lt;/p&gt;

&lt;p&gt;This one is a prototype for a “firework builder” puzzle game. I was calling it Hanabi, the Japanese word for firework, but I’m not sure I would have stuck with that for the final name.&lt;/p&gt;

&lt;p&gt;It’s a visual programming-based puzzle video game along the lines of &lt;a href=&quot;https://en.wikipedia.org/wiki/Human_Resource_Machine&quot;&gt;Human Resource Machine&lt;/a&gt; and influenced by block-based visual programming language &lt;a href=&quot;https://en.wikipedia.org/wiki/Scratch_(programming_language)&quot;&gt;Scratch&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I submitted it to the Draknek New Voices Puzzle Grant 2024, but was not selected. At the time of submission the core game logic had been proven, with a dozen or so block types supported, and I was learning how to program shaders as I had a very specific way I wanted to present the final firework animation. You can see the paper texture that I was generating using a shader in the video below. I had a dozen or so puzzles designed, including a heart shape which takes some thinking and combining of logic blocks to achieve!&lt;/p&gt;

&lt;p&gt;Whilst the prototype was an iOS app—mostly to benefit from rapid prototyping using SwiftUI and to get touch control and easy list management for free—the final game could have been on any platform. The challenge would be user interface, followed by puzzles and visual design.&lt;/p&gt;

&lt;p&gt;I gave up on the idea for a number of reasons, including but not limited to &lt;a href=&quot;/2025/04/15/when-playdate-stopped-being-fun/&quot;&gt;harassment&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;video-demonstration&quot;&gt;Video Demonstration&lt;/h2&gt;

&lt;p&gt;Below is the video I submitted with my entry, dated 2024-10-07. I narrate and run through the concept, complete example puzzles, and talk about the “woodblock print” style of fireworks I was planning and in the process of implementing.&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 1124/2436;&quot; videoid=&quot;APMvQ-jVTwM&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 23 Apr 2025 21:39:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/04/23/abandoned-project-firework-builder-puzzle-game/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/04/23/abandoned-project-firework-builder-puzzle-game/</guid>
        </item>
      
    
      
        <item>
          <title>Talking about Moai in Games on Tokyo Game Life podcast</title>
          <description>&lt;p&gt;You may or may not know that I run the website &lt;a href=&quot;https://moai.games&quot;&gt;moai.games&lt;/a&gt; which features a catalogue of screenshots showing Moai appearances in video games. At the time of writing there are over 1000 games listed going all the way back to the early 1980s. ✨👋🗿✨&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://tokyogamelife.com/episode/moai-in-japanese-games-with-matt-sephton-uncharted-waters-new-horizons&quot;&gt;Tokyo Game Life&lt;/a&gt; reached out and I chatted to them a bit about all of that cool and nerdy stuff. Listen in your usual podcast app or using the embedded player below.&lt;/p&gt;

&lt;iframe allow=&quot;autoplay *; encrypted-media *; fullscreen *; clipboard-write&quot; frameborder=&quot;0&quot; height=&quot;175&quot; style=&quot;width:100%;max-width:660px;overflow:hidden;border-radius:10px;&quot; sandbox=&quot;allow-forms allow-popups allow-same-origin allow-scripts allow-storage-access-by-user-activation allow-top-navigation-by-user-activation&quot; src=&quot;https://embed.podcasts.apple.com/au/podcast/moai-in-japanese-games-with-matt-sephton-uncharted/id1596631701?i=1000704182870&quot;&gt;&lt;/iframe&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 20 Apr 2025 20:56:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/04/20/talking-about-moai-in-games-on-tokyo-game-life-podcast/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/04/20/talking-about-moai-in-games-on-tokyo-game-life-podcast/</guid>
        </item>
      
    
      
        <item>
          <title>When Playdate Stopped Being Fun</title>
          <description>&lt;p&gt;For almost six years, &lt;a href=&quot;https://play.date&quot;&gt;Playdate&lt;/a&gt; (a little handheld gaming device with a crank input and 1-bit screen) was a space where I did some of my most creative and personal work. I embraced its quirks, shipped over twenty releases, and explored what a tiny, constrained device could do. It brought me joy, challenge, and a sense of purpose.&lt;/p&gt;

&lt;p&gt;But over time, that feeling changed. Following a difficult incident in October 2024 involving targeted harassment—admitted to by &lt;!-- Scizzorz --&gt;the developer responsible, but met with no meaningful follow-up from the community moderators and no reply at the time of writing from &lt;a href=&quot;https://www.panic.com&quot;&gt;Panic&lt;/a&gt;—I began to feel increasingly disconnected from the scene. I gave it time, hoped things might shift, but ultimately the silence made it hard to keep building with the same heart.&lt;/p&gt;

&lt;p&gt;So, I’m stepping back. Not dramatically—just with clarity. Right now, this isn’t the environment I can thrive in. If that changes, I’d be happy to return. For now, I want to leave a record of what I made. I’m proud of all of it. I’ll continue as a full-time indie developer, but in another castle.&lt;/p&gt;

&lt;p&gt;Be excellent to each other. And have fun.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;released-projects&quot;&gt;Released Projects&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2022-03&lt;/code&gt; &lt;a href=&quot;https://gingerbeardman.itch.io/today&quot;&gt;Today&lt;/a&gt; (the first Playdate thing sold on itch.io)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2022-04&lt;/code&gt; &lt;a href=&quot;https://gingerbeardman.itch.io/horse-race&quot;&gt;Horse Race&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2022-04&lt;/code&gt; &lt;a href=&quot;https://gingerbeardman.itch.io/audition&quot;&gt;Audition&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2022-04&lt;/code&gt; &lt;a href=&quot;https://gingerbeardman.itch.io/prototypes-for-playdate&quot;&gt;Prototypes&lt;/a&gt; multi-pack&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2022-04&lt;/code&gt; &lt;a href=&quot;https://gingerbeardman.itch.io/daily-driver&quot;&gt;Daily Driver&lt;/a&gt; (tech demo)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2022-05&lt;/code&gt; &lt;a href=&quot;https://gingerbeardman.itch.io/circular&quot;&gt;Circular&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2022-05&lt;/code&gt; &lt;a href=&quot;https://gingerbeardman.itch.io/st-din-playdate-font&quot;&gt;ST-DIN&lt;/a&gt; and &lt;a href=&quot;https://gingerbeardman.itch.io/supermini-playdate-font&quot;&gt;Supermini&lt;/a&gt; fonts&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2023-04&lt;/code&gt; &lt;a href=&quot;https://play.date/games/sparrow-solitaire/&quot;&gt;Sparrow Solitaire&lt;/a&gt; (with &lt;a href=&quot;https://vogelscript.itch.io&quot;&gt;Mac Vogelsang&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2023-05&lt;/code&gt; &lt;a href=&quot;/2023/05/10/piskel-for-playdate/&quot;&gt;Piskel for Playdate&lt;/a&gt; (desktop pixel art app)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2023-07&lt;/code&gt; &lt;a href=&quot;https://github.com/gingerbeardman/mandala&quot;&gt;Mandala&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2023-08&lt;/code&gt; &lt;a href=&quot;https://gingerbeardman.itch.io/strategies&quot;&gt;Strategies&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2023-08&lt;/code&gt; &lt;a href=&quot;https://gingerbeardman.itch.io/datediff&quot;&gt;DateDiff&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2023-08&lt;/code&gt; &lt;a href=&quot;https://play.date/games/yoyozo/&quot;&gt;YOYOZO&lt;/a&gt; (“Best Games of 2023”, &lt;a href=&quot;https://arstechnica.com/gaming/2023/12/ars-technicas-best-video-games-of-2023/7&quot;&gt;Ars Technica&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2023-10&lt;/code&gt; &lt;a href=&quot;https://mouflon-cloud.itch.io/kye&quot;&gt;Kye&lt;/a&gt; (with &lt;a href=&quot;https://mouflon-cloud.itch.io&quot;&gt;Jan Martinek&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2023-10&lt;/code&gt; &lt;a href=&quot;https://play.date/games/icarus/&quot;&gt;Super ICARUS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2023-12&lt;/code&gt; &lt;a href=&quot;https://play.date/games/fore-track/&quot;&gt;Fore! Track&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2023-12&lt;/code&gt; &lt;a href=&quot;https://gingerbeardman.itch.io/see-the-sky&quot;&gt;See the Sky&lt;/a&gt; (with &lt;a href=&quot;https://twitter.com/thoruman&quot;&gt;Thoru Yamamoto&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2024-05&lt;/code&gt; &lt;a href=&quot;https://gingerbeardman.itch.io/rorschach&quot;&gt;Rorschach&lt;/a&gt; (featuring mouse control)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2024-10&lt;/code&gt; &lt;a href=&quot;https://play.date/games/bender-2-bend-harder/&quot;&gt;Bender 2: Bend Harder&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2025-03&lt;/code&gt; &lt;a href=&quot;https://gingerbeardman.itch.io/shark-turtle&quot;&gt;Shark Turtle&lt;/a&gt;, originally created &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2023-06&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/yoyozo-teaser.gif#playdate&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;cancelled-projects&quot;&gt;Cancelled Projects&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Aero Club&lt;/strong&gt;—Flight school simulation inspired by Mode 7 and Pilotwings&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Beatnik&lt;/strong&gt;—Rhythm game with interactive music and beat-matched dynamic visuals&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Cosmic Trash&lt;/strong&gt;—Arcade action puzzle with realtime ray-traced graphics&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Daily Driver&lt;/strong&gt;—60fps arcade racing with pre-rendered graphics (reborn as &lt;a href=&quot;/2025/01/05/dream-ride-for-sega-dreamcast-and-emulators/&quot;&gt;Dream Ride&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Koatari&lt;/strong&gt;—Pachinko-style arcade game with pinball-inspired visuals, running up to 120fps&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Mole Hole&lt;/strong&gt;—A modern remake of Thoru Yamamoto’s escape-maze concept&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/molehole.gif#playdate&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;notes&quot;&gt;Notes&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Daily Driver&lt;/strong&gt; won “Outstanding Technical Achievement (SDK)” at the&lt;a href=&quot;https://playdate-wiki.com/wiki/The_2022_Playdate_Community_Awards&quot;&gt; 2022 Community Awards&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Sparrow Solitaire&lt;/strong&gt; won “Best Puzzle Game” at the &lt;a href=&quot;https://playdate-wiki.com/wiki/The_2023_Playdate_Community_Awards&quot;&gt;2023 Community Awards&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;YOYOZO&lt;/strong&gt; won “Best Arcade Game” at the &lt;a href=&quot;https://playdate-wiki.com/wiki/The_2023_Playdate_Community_Awards&quot;&gt;2023 Community Awards&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;YOYOZO&lt;/strong&gt; was named one of the “Best Games of 2023” by &lt;a href=&quot;https://arstechnica.com/gaming/2023/12/ars-technicas-best-video-games-of-2023/7&quot;&gt;Ars Technica&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Bender 2: Bend Harder&lt;/strong&gt; was nominated for “Best Arcade Game” at the &lt;a href=&quot;https://playdate-wiki.com/wiki/The_2024_Playdate_Community_Awards&quot;&gt;2024 Community Awards&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;br /&gt;
&lt;em&gt;Thanks to JM, JS, MR, PP, SC for feedback on versions of this post.&lt;/em&gt;
&lt;br /&gt;
&lt;em&gt;Panic were sent a draft of this post ahead of publication.&lt;/em&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 15 Apr 2025 21:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/04/15/when-playdate-stopped-being-fun/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/04/15/when-playdate-stopped-being-fun/</guid>
        </item>
      
    
      
        <item>
          <title>Amazfit activity tracker and watch face asset generation</title>
          <description>&lt;p&gt;I recently wanted to track my heart rate and sleeping patterns, but do not want an Apple Watch. So I ended up buying a cheap &lt;a href=&quot;https://uk.amazfit.com/products/amazfit-band-7&quot;&gt;Amazfit Band 7&lt;/a&gt; from &lt;a href=&quot;https://www.decathlon.co.uk/p/activity-tracker-band-7/_/R-p-349533?mc=8828106&quot;&gt;Decathlon&lt;/a&gt; sports store. The one I bought was reduced because of a damaged box—I love a good bargain!&lt;/p&gt;

&lt;p&gt;It’s a cool little thing and goes for an unbelievable 18 days on a single charge with default settings. Since I bought it I’ve had to charge it once! Even more amazing is that this little thing runs apps and watch faces powered by JavaScript, has an OLED screen, senses heart rate, step count, blood oxygen, sleep patterns, and lots more features I’ll never use. And it still gets multiple weeks on a single charge! The app it comes with is fairly low-nag if you don’t want to buy into the ecosystem.&lt;/p&gt;

&lt;p&gt;Anyway, I found some &lt;a href=&quot;https://amazfitwatchfaces.com/amazfit-band/view/58&quot;&gt;nice watch faces&lt;/a&gt; but if anything they were all a little bit busy for me. Ideally I’d make my own but it seemed like a lot of work—I would need to create images for every digit at every size as well as any other things I want on the face—so I put it on the rainy day list.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;ok-computer&quot;&gt;OK, Computer&lt;/h2&gt;

&lt;p&gt;Today it isn’t raining but I do have some time on my hands, which is the next best thing. I didn’t want to spend time in Figma exporting images over and over again. I get cold shivers thinking about slicing images in &lt;a href=&quot;https://en.wikipedia.org/wiki/Macromedia_Fireworks&quot;&gt;Fireworks&lt;/a&gt;. So I wondered if I could create a tool that would make light work of generating the images I need from a font of my choosing.&lt;/p&gt;

&lt;p&gt;It was pretty straightforward and I ended up with what you see below, where you can customise: font, size, color, alignment, filename prefix, and required characters/phrases/symbols. And then you can download all the images in one click! &lt;em&gt;NICE.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I do my best to adhere to the specs required by the most common watch face building tools, and in almost all cases I’ve been able to use the images exactly as they come out of the tool. There is some extraneous padding, which means you have to use quite large negative spacing (equivalent to kerning) but it all works well in practice.&lt;/p&gt;

&lt;p&gt;There’s nothing that ties the assets being generated to the Amazfit Band 7, so feel free to use the tool for other purposes if you want to just generate some digits, text, or symbols as images.&lt;/p&gt;

&lt;p&gt;The web app tool is at &lt;a href=&quot;https://www.gingerbeardman.com/amazfit/&quot;&gt;gingerbeardman.com/amazfit/&lt;/a&gt; if you want to try it out.&lt;/p&gt;

&lt;p class=&quot;screen&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/amazfit-web-app.png&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;heres-one-i-made-earlier&quot;&gt;Here’s one I made earlier&lt;/h2&gt;

&lt;p&gt;This is the first face I created using the tool: DIN. I’m generating images of numbers, and a few other things, in a few different sizes and two colours. The darker text might look too dark on your display, but on the OLED display of the device it’s plenty bright enough for secondary information. I used a &lt;a href=&quot;https://amazfitwatchfaces.com/forum/viewtopic.php?t=2743&quot;&gt;Windows tool&lt;/a&gt; to lay things out and generate the package, and &lt;a href=&quot;https://amazfitwatchfaces.com/forum/viewtopic.php?t=3873&quot;&gt;installed it locally&lt;/a&gt; in developer mode on my device.&lt;/p&gt;

&lt;p&gt;You can install &lt;a href=&quot;https://amazfitwatchfaces.com/amazfit-band/view/353&quot;&gt;the watch face&lt;/a&gt; using the &lt;a href=&quot;https://amazfitwatchfaces.com/awapp&quot;&gt;AmazFaces app&lt;/a&gt; on iOS or Android. It’s also available on the official watch face store in the &lt;a href=&quot;https://apps.apple.com/gb/app/zepp/id1127269366&quot;&gt;Zepp app&lt;/a&gt;.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/amazfit-band-7-din.png&quot; alt=&quot;IMG&quot; title=&quot;DIN looks super on OLED!&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The typeface is &lt;a href=&quot;https://github.com/amcchord/datto-d-din&quot;&gt;D-DIN Condensed Bold&lt;/a&gt;—a cool cut of &lt;a href=&quot;https://en.wikipedia.org/wiki/DIN_typeface&quot;&gt;DIN&lt;/a&gt; and it’s free and released under &lt;a href=&quot;https://en.wikipedia.org/wiki/SIL_Open_Font_License&quot;&gt;SIL Open Font License&lt;/a&gt;. Thanks very much to Datto and to the type designer, &lt;a href=&quot;https://luc.devroye.org/showcase-charlesnix/&quot;&gt;Charles Nix&lt;/a&gt; at &lt;a href=&quot;https://www.monotype.com/studio/charles-nix&quot;&gt;Monotype&lt;/a&gt;!&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 11 Apr 2025 22:05:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/04/11/amazfit-activity-tracker-and-watch-face-asset-generation/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/04/11/amazfit-activity-tracker-and-watch-face-asset-generation/</guid>
        </item>
      
    
      
        <item>
          <title>Shark Turtle: a modern version of SameGame/MaciGame</title>
          <description>&lt;p&gt;I’m releasing an expanded version of my game Shark Turtle for macOS and Windows. Grab it at itch: &lt;a href=&quot;https://gingerbeardman.itch.io/shark-turtle-desktop/&quot;&gt;gingerbeardman.itch.io/shark-turtle-desktop/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The result is a feature-rich, native desktop version of SameGame with fast calculation, animated block removal, mouse/keyboard control, incremental scoring, variable grid sizes each with their own high score table, multi-level undo, lots of options, and great music. It’s a lot of fun and ideal to play little-by-little when you have a spare moment, as you dictate the pace of the game turn-by-turn.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/sharkturtle-macos-lite.png&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;about-the-icon&quot;&gt;About the icon&lt;/h2&gt;

&lt;p&gt;I couldn’t find the exact licence for Google’s Emoji Kitchen, it’s either &lt;a href=&quot;https://github.com/googlefonts/noto-emoji/blob/main/LICENSE&quot;&gt;SIL as part of the Noto font&lt;/a&gt; or &lt;a href=&quot;https://developers.googleblog.com/en/updates-to-emoji-new-characters-new-animation-new-color-customization-and-more/&quot;&gt;CC BY 4.0&lt;/a&gt;. But I did find a &lt;a href=&quot;https://github.com/googlefonts/noto-emoji/issues/151#issuecomment-318418911&quot;&gt;comment&lt;/a&gt; by a Google staffer saying that it would be a good idea to draw a custom version that was less generic—I read that as unique and yours—so that’s exactly what I did. There was no choice but to do this, as I needed a vector version to generate an 1024×1024px icon. I like to think that with the raised eyebrow and slight smirk there’s a bit more personality in my version.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/sharkturtle-icon.png&quot; alt=&quot;IMG&quot; title=&quot;My vector version of Google Emoji Kitchen’s “Shark Turtle”&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;whats-in-a-name&quot;&gt;What’s in a name?&lt;/h2&gt;

&lt;p&gt;This concept was originally released as &lt;a href=&quot;https://web.archive.org/web/20230507124114/http://www.asahi-net.or.jp:80/~KY6K-MRB/chainsht.htm&quot;&gt;Chain Shot!&lt;/a&gt; in 1985 by 森辺訓章 Kuniaki Moribe “Morisuke” and went on to become very popular, mostly through a version known as さめがめ SameGame. The game was at one time &lt;a href=&quot;/2023/08/19/fake-steve-jobs-and-letters-from-bill-g/#samegame&quot;&gt;more popular than Tetris in Japan&lt;/a&gt; and even made its way onto consoles like the &lt;a href=&quot;https://retro-gamer.jp/?p=10059&quot;&gt;Super Famicom&lt;/a&gt; and even as recent as &lt;a href=&quot;https://www.mobygames.com/game/55440/pop-em-drop-em-samegame/&quot;&gt;Wii&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In English we pronounce the name as it is spelled: same game. But in Japanese it sounds just like the words “same” さめ (shark) and “game” がめ (sea turtle). A short leap from SameGame to Shark Turtle.&lt;/p&gt;

&lt;p&gt;Perhaps the most well known version of the concept, &lt;a href=&quot;/2023/05/04/macigame-user-created-graphics/&quot;&gt;MaciGame&lt;/a&gt; まきがめ also riffed on this. I’m not sure of the exact meaning, but I like to think it’s a clever double meaning of something cool in Japanese and it also being a game for Macintosh.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/macigamekoma-01-usa-chan.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;MaciGame’s classic default usa-chan tileset&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;recovering-tile-sets&quot;&gt;Recovering tile sets&lt;/h2&gt;

&lt;p&gt;I’d previously recovered a range of tile sets for a download pack I uploaded to &lt;a href=&quot;https://macintoshgarden.org/games/macigame&quot;&gt;Macintosh Garden&lt;/a&gt;, but that was done in the Classic Macintosh environment so I needed to redo it on modern macOS to be able to extract the images easily.&lt;/p&gt;

&lt;p&gt;MaciGame supported custom tile sets in three formats:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;SameGameFormat (160×64, from the PC-98 version of the game)&lt;/li&gt;
  &lt;li&gt;SameGameFormat2 (192×64, includes additional background tiles)&lt;/li&gt;
  &lt;li&gt;MaruSameFormat (256×65, includes connected variations and alternate palettes)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These tile sets were popular &lt;a href=&quot;/2023/05/04/macigame-user-created-graphics/&quot;&gt;user created content&lt;/a&gt; for 1990s Macintosh fans, given how easy it was to load up a paint app or ResEdit. They were made available for free download at online repositories like &lt;a href=&quot;https://en.wikipedia.org/wiki/Nifty_Corporation&quot;&gt;NIFTY-Serve&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Info-Mac&quot;&gt;Info-Mac&lt;/a&gt;, and on magazine cover mounted media around the world. I found several unique tile sets in my &lt;a href=&quot;/2025/03/28/macintosh-magazine-media-1-million-files/&quot;&gt;Macintosh Magazine Media&lt;/a&gt; archive of vintage CD-ROMs.&lt;/p&gt;

&lt;p&gt;The main online source of these is at: &lt;a href=&quot;https://www.vector.co.jp/vpack/filearea/osx/game/puzzle/makigame/&quot;&gt;vector.co.jp/vpack/filearea/osx/game/puzzle/makigame/&lt;/a&gt; and I automated the clicking of the download buttons using a &lt;a href=&quot;https://gist.github.com/gingerbeardman/47bfd8f6b76a7f33a6262b7998994416&quot;&gt;temporary user script&lt;/a&gt; (gist) to redirect to the download page and then click the button. I use &lt;a href=&quot;https://apps.apple.com/gb/app/pageextender-for-safari/id1457557274?mt=12&quot;&gt;PageExtender&lt;/a&gt; for such things. I could have gone one level deeper by automating the clicking of all the items on the list page, but I quite like clicking through long lists.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/47bfd8f6b76a7f33a6262b7998994416&quot;&gt;user script at gist.github.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We can expand these esoteric archives with &lt;a href=&quot;https://theunarchiver.com&quot;&gt;The Unarchiver&lt;/a&gt;. I needed to confirm MacOS Japanese encoding for the filenames that it was unable to heuristically determine. Read more about the madness of &lt;a href=&quot;/2022/03/31/working-with-classic-macintosh-text-encodings-in-the-age-of-unicode/&quot;&gt;classic Macintosh text encodings in the pre-Unicode age&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Next we can convert the PICT resources we’re after with &lt;a href=&quot;https://github.com/jsummers/deark&quot;&gt;deark&lt;/a&gt;. Deark doesn’t have a recursive mode, so we need to wrap it in a one-liner:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;find . -type f -print0 | xargs -0 -I {} deark {} -k -od /destination/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I verified those and &lt;a href=&quot;https://discmaster.textfiles.com/search?family=image&amp;amp;widthMin=160&amp;amp;heightMin=64&amp;amp;widthMax=160&amp;amp;heightMax=64&amp;amp;dedup=dedup&amp;amp;sortBy=itemid&amp;amp;pageNum=0&quot;&gt;found&lt;/a&gt; &lt;a href=&quot;https://discmaster.textfiles.com/search?family=image&amp;amp;widthMin=192&amp;amp;heightMin=64&amp;amp;widthMax=192&amp;amp;heightMax=64&amp;amp;dedup=dedup&amp;amp;sortBy=itemid&amp;amp;pageNum=0&quot;&gt;some&lt;/a&gt; &lt;a href=&quot;https://discmaster.textfiles.com/search?family=image&amp;amp;widthMin=256&amp;amp;heightMin=65&amp;amp;widthMax=256&amp;amp;heightMax=65&amp;amp;dedup=dedup&amp;amp;sortBy=itemid&amp;amp;pageNum=0&quot;&gt;others&lt;/a&gt; &lt;a href=&quot;https://discmaster.textfiles.com/search?family=image&amp;amp;detection=PICT%2FSaMe&amp;amp;dedup=dedup&amp;amp;sortBy=itemid&amp;amp;pageNum=0&quot;&gt;using DiscMaster&lt;/a&gt;. A few stranglers found on the web brought the grand total to 320 tile sets.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;de-duplicating&quot;&gt;De-duplicating&lt;/h2&gt;

&lt;p&gt;It was obvious that there were some duplicates, so what to do? My first thought was to optimise all images equally, I used &lt;a href=&quot;https://github.com/fhanau/Efficient-Compression-Tool&quot;&gt;ect&lt;/a&gt; command line tool for this purpose. After that, still on the command line, we can do a quick de-dupe using the &lt;a href=&quot;https://github.com/adrianlopezroche/fdupes&quot;&gt;fdupes&lt;/a&gt; tool. This helped me get rid of a bunch, but there were still some hanging around.&lt;/p&gt;

&lt;p&gt;I wanted to compare files at a pixel level, so wrapped &lt;a href=&quot;https://github.com/ImageMagick/ImageMagick&quot;&gt;imagemagick&lt;/a&gt; in &lt;a href=&quot;https://gist.github.com/gingerbeardman/31c2eabf4c39ebad0ceb9c6265afd5a6&quot;&gt;a shell script&lt;/a&gt; (gist). We compare each image with every other image. I tried adding pre-checks to the script but they slowed it down and removed the ability for it to run in parallel. Keep it simple wins again.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/47bfd8f6b76a7f33a6262b7998994416&quot;&gt;shell script at gist.github.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;organising&quot;&gt;Organising&lt;/h2&gt;

&lt;p&gt;For organisation sake I wanted to verify and categorise the dimensions of each image. I created &lt;a href=&quot;https://gist.github.com/gingerbeardman/99585e86d9a6ed321a73cc5f6ab247a2&quot;&gt;a shell script to tag images of specific sizes with Finder colours&lt;/a&gt; (gist). I noticed that some converted images were one pixel wider than expected, it turns out that this is a quirk in how those specific image were composed. So I coloured them red and edited them by hand after the fact.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/47bfd8f6b76a7f33a6262b7998994416&quot;&gt;shell script at gist.github.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;all-tile-sets&quot;&gt;All tile sets&lt;/h2&gt;

&lt;p&gt;Here’s a video of my 5 tile sets plus the 320 classic user created tile sets. &lt;em&gt;Gotta catch ‘em all!&lt;/em&gt;&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 5/3;&quot; videoid=&quot;pbWV13BNloA&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;playdate&quot;&gt;Playdate&lt;/h2&gt;

&lt;p&gt;I originally wrote a version of &lt;a href=&quot;/2025/03/11/old-codes-new-releases-for-playdate/&quot;&gt;Shark Turtle for Playdate&lt;/a&gt; back in 2023 and released it earlier this month. The desktop version of the game is expanded and enhanced in the way that desktop apps can be. Those features took a bunch more work and I’ve undoubtedly been working on the platform specific stuff far more than I did on the core of the game.&lt;/p&gt;

&lt;p&gt;Buyers of the Shark Turtle for Playdate get the desktop version for free! Head to &lt;a href=&quot;https://itch.io/s/150167/shark-turtle-double-dip&quot;&gt;this bundle&lt;/a&gt;.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 01 Apr 2025 18:44:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/04/01/shark-turtle-a-modern-version-of-samegame-and-macigame/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/04/01/shark-turtle-a-modern-version-of-samegame-and-macigame/</guid>
        </item>
      
    
      
        <item>
          <title>Station: Travel Through the Four Seasons (1994)</title>
          <description>&lt;p&gt;After reaching &lt;a href=&quot;/2025/03/28/macintosh-magazine-media-1-million-files/&quot;&gt;1 million files&lt;/a&gt; in my &lt;a href=&quot;/2021/10/30/macintosh-magazine-media/&quot;&gt;Macintosh Magazine Media project&lt;/a&gt;, I thought it would be cool to post about something I found recently in those discs. I get a real buzz rediscovering something like this after more than 30 years have passed.&lt;/p&gt;

&lt;p&gt;It’s a sweet little point and click adventure game for Classic Macintosh called “&lt;em&gt;Station: Travel Through the Four Seasons&lt;/em&gt;” by Mitsuo Isaka, about taking train rides through the Japanese countryside. You meet and interact with a variety of people and explore each scene to figure out how to move on.&lt;/p&gt;

&lt;p&gt;It was found on CD2 マルチメディアチャレンジ ’94 要賞作品篥 (Multimedia Challenge ’94 Award Winning Works) of &lt;a href=&quot;https://archive.org/details/gokuraku-paradise-theater-1994-10&quot;&gt;MACLIFE Special: Gokuraku Paradise Theater 1994&lt;/a&gt;. You can download the ISO to explore that disc for yourself in an emulator or on a vintage Macintosh. I also uploaded &lt;a href=&quot;https://macintoshgarden.org/games/station&quot;&gt;just the game to Macintosh Garden&lt;/a&gt; so that you don’t need to download the whole CD for just this game.&lt;/p&gt;

&lt;h2 id=&quot;play-it-in-your-browser&quot;&gt;Play it in your browser&lt;/h2&gt;

&lt;p&gt;But if you want to try it right now you can do so in your browser thanks to the Infinite Mac website, using this link: &lt;a href=&quot;https://infinitemac.org/1996/KanjiTalk%207.5.3?cdrom=https%3A%2F%2Fdownload.macintoshgarden.org%2Fgames%2FStation.ds62.img&quot;&gt;KanjiTalk 7.5.3 with the Station disk image already mounted&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The game is in Japanese and features mostly voiceover and a little on screen text. Google Translate can probably help with its conversation (audio) and camera (visual) translation modes. &lt;em&gt;Ganbare!&lt;/em&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;/h2&gt;

&lt;p&gt;In Japanese, it says:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;ここは“四季の里”といわれるとこる。昔から一両だけのディーゼル車がのんびりと走っているという。&lt;/p&gt;

  &lt;p&gt;駅は全部で四つの小さな鉄道だけれど不思議なことに、ひとつひとつの駅にそれぞれのきまった季節があるという。&lt;/p&gt;

  &lt;p&gt;ぼくは、さっそくその鉄道に乗ってみようと春の季節をもっといわれる“桜ヶ丘”という駅を訪ねることにした・・・&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Translated into English:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;This place is known as the ‘Village of the Four Seasons’. A single diesel train has been running slowly and leisurely here for a long time.&lt;/p&gt;

  &lt;p&gt;There are four stations in total on this small railway, but strangely enough, each station has its own set season.&lt;/p&gt;

  &lt;p&gt;I decided to visit a station called ‘Sakuragaoka’, which is known more for its spring season, to try out the railway…&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div id=&quot;carousel0&quot; class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0b&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0c&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0d&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0d&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0c&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0d&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0c&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/station-1.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/station-1.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/station-2.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/station-2.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/station-3.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/station-3.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/station-4.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/station-4.png&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0b&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0c&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0d&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 75%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}

.carousel__activator:nth-of-type(3):checked ~ .carousel__track {
  -webkit-transform: translateX(-200%);
          transform: translateX(-200%);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__slide:nth-of-type(3) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__controls:nth-of-type(3) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(3) {
  opacity: 1;
}

.carousel__activator:nth-of-type(4):checked ~ .carousel__track {
  -webkit-transform: translateX(-300%);
          transform: translateX(-300%);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__slide:nth-of-type(4) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__controls:nth-of-type(4) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(4) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(3) {
  -webkit-transform: translateX(200%) translateZ(0);
          transform: translateX(200%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(4) {
  -webkit-transform: translateX(300%) translateZ(0);
          transform: translateX(300%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(3),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(3 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(4),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(4 {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;#carousel0 .carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 30 Mar 2025 20:12:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/03/30/station-travel-through-the-four-seasons-1994/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/03/30/station-travel-through-the-four-seasons-1994/</guid>
        </item>
      
    
      
        <item>
          <title>Macintosh Magazine Media: 1 million files</title>
          <description>&lt;p&gt;I am proud to announce that my &lt;a href=&quot;/2021/10/30/macintosh-magazine-media/&quot;&gt;Macintosh Magazine Media project&lt;/a&gt; has surpassed my self-imposed goal of 1 million files, an achievement that fills me with both immense satisfaction and slight bewilderment. And if you were to decompress those files the total would be 30 million! Woah.&lt;/p&gt;

&lt;p&gt;If you’ve never heard of it before: it’s an archive of vintage media containing mostly Macintosh files sourced from Japanese magazines, but featuring content from all over the world. A treasure trove time capsule for vintage computer nerds like myself.&lt;/p&gt;

&lt;p&gt;Many thanks to &lt;a href=&quot;https://patreon.com/gingerbeardman&quot;&gt;my Patreon subscribers&lt;/a&gt; for their support!&lt;/p&gt;

&lt;h2 id=&quot;status-report&quot;&gt;Status report&lt;/h2&gt;

&lt;p&gt;The archive as it stands (updated March 2025):&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;date range: 1991–2002&lt;/li&gt;
  &lt;li&gt;total media: 500 discs&lt;/li&gt;
  &lt;li&gt;total files: 1,086,536 files&lt;/li&gt;
&lt;/ul&gt;

&lt;!--
The archive as it stands (updated July 2024):

*   date range: 1991–2002
*   total media: 461 discs
*   total files: 998,512 files
--&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/mmm-scatter.png&quot; alt=&quot;PNG&quot; title=&quot;Distribution of discs by month&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;new-discs&quot;&gt;New discs&lt;/h2&gt;

&lt;p&gt;Multiple new discs were added, almost all of them are Macintosh, or Hybrid Mac/Win, but there are a couple of Windows-only discs in there:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Acara Super CD (1998-12)&lt;/li&gt;
  &lt;li&gt;Acara Super CD (2000-07)&lt;/li&gt;
  &lt;li&gt;CD-ROM MACLIFE 131 (1999-07)&lt;/li&gt;
  &lt;li&gt;CD-ROM MACLIFE 132 (1999-08)&lt;/li&gt;
  &lt;li&gt;CD-ROM MACLIFE 133 (1999-09)&lt;/li&gt;
  &lt;li&gt;CD-ROM MACLIFE 141 (2000-05)&lt;/li&gt;
  &lt;li&gt;CD-ROM MACLIFE 152 (2001-04)&lt;/li&gt;
  &lt;li&gt;Create on a computer: New Year’s Card 1999&lt;/li&gt;
  &lt;li&gt;Create on your Mac: New Year’s Card 2000&lt;/li&gt;
  &lt;li&gt;Gokuraku Paradise Theater (1994-10) 2xCD&lt;/li&gt;
  &lt;li&gt;Mac Fan Internet CD-ROM (1997-12)&lt;/li&gt;
  &lt;li&gt;Mac Fan Internet CD-ROM (1999-04)&lt;/li&gt;
  &lt;li&gt;Mac Ga Ichiban! Vol. 50 (1998-11)&lt;/li&gt;
  &lt;li&gt;Mac Ga Ichiban! Vol. 59 (1998-08)&lt;/li&gt;
  &lt;li&gt;Mac100% Vol.7 (1998-07)&lt;/li&gt;
  &lt;li&gt;Mac100% (1999-01)&lt;/li&gt;
  &lt;li&gt;MacPeople (1998-02-15)&lt;/li&gt;
  &lt;li&gt;MacPeople (1998-04-15)&lt;/li&gt;
  &lt;li&gt;MacPeople (1998-06-15)&lt;/li&gt;
  &lt;li&gt;MacPeople (1998-08-01)&lt;/li&gt;
  &lt;li&gt;MacPeople (1998-08-15)&lt;/li&gt;
  &lt;li&gt;MacPeople (1998-09-15)&lt;/li&gt;
  &lt;li&gt;MacPeople (1998-10-15)&lt;/li&gt;
  &lt;li&gt;MacPeople (1999-05-15)&lt;/li&gt;
  &lt;li&gt;MacPeople (1999-06-01)&lt;/li&gt;
  &lt;li&gt;MacPeople (2000-08-01)&lt;/li&gt;
  &lt;li&gt;MacPeople (2002-03-15)&lt;/li&gt;
  &lt;li&gt;MacPeople (2003-05-01) 2xCD&lt;/li&gt;
  &lt;li&gt;TECH Win (1999-08) 2xCD&lt;/li&gt;
  &lt;li&gt;Tsukaeru ikinari dekiru homupejipasokon BOOKS 8 (1998)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also indexed the latest Japanese Macintosh magazine media from redump.&lt;/p&gt;

&lt;h2 id=&quot;the-process&quot;&gt;The process&lt;/h2&gt;

&lt;p&gt;For this many CDs we are talking multiple days of busy work to prepare them for sharing.&lt;/p&gt;

&lt;p&gt;If you’re interested in the “process” for each CD here it is:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Find the CD available for sale in Japan (they’re getting harder to find)&lt;/li&gt;
  &lt;li&gt;Purchase it with cold hard cash&lt;/li&gt;
  &lt;li&gt;Wait for delivery (I delay shipping until I have enough items to make it worthwhile)&lt;/li&gt;
  &lt;li&gt;Dump the CD using a suitable reader (fwiw &lt;a href=&quot;http://redump.org&quot;&gt;redump&lt;/a&gt; project is very specific)&lt;/li&gt;
  &lt;li&gt;Index the CD filesystem (I created my &lt;a href=&quot;/2022/03/31/working-with-classic-macintosh-text-encodings-in-the-age-of-unicode/&quot;&gt;own software stack&lt;/a&gt; for this)&lt;/li&gt;
  &lt;li&gt;Redo dump of any bad discs (there are always some!)&lt;/li&gt;
  &lt;li&gt;Scan the CD artwork&lt;/li&gt;
  &lt;li&gt;Prepare the upload and metadata .csv for &lt;a href=&quot;https://archive.org/developers/internetarchive/cli.html&quot;&gt;internetarchive cli tool&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bulk upload (this takes an absolute age, 30–60 mins per CD)&lt;/li&gt;
  &lt;li&gt;Redo upload of any failed items (the cli is very error prone)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I’m not sure I’ll buy any/many more discs, but never say never!&lt;/p&gt;

&lt;h2 id=&quot;searching-the-collection&quot;&gt;Searching the collection&lt;/h2&gt;

&lt;p&gt;All disc ISO with text listings are available for download at &lt;a href=&quot;https://archive.org/details/@gingerbeardman&quot;&gt;Internet Archive&lt;/a&gt;, but wait a minute!&lt;/p&gt;

&lt;p&gt;Using my search engine (&lt;a href=&quot;/2025/01/10/macintosh-magazine-media-search-engine-update/&quot;&gt;read more&lt;/a&gt; about that) you can search by regex for file/directory name, file type, creator code: &lt;a href=&quot;https://www.gingerbeardman.com/mmm/&quot;&gt;gingerbeardman.com/mmm/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or you can use DiscMaster to search inside content and grab individual files without having to download the whole ISO: &lt;a href=&quot;https://discmaster.textfiles.com&quot;&gt;discmaster.textfiles.com&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;interesting-finds&quot;&gt;Interesting finds&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gingerbeardman.com/2021/10/31/hypercard-hanafuda/&quot;&gt;HyperCard Hanafuda&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gingerbeardman.com/2021/10/31/mouse-controlled-super-mario-kart-clone-for-classic-macintosh/&quot;&gt;Mouse-controlled Super Mario Kart clone for classic Macintosh&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gingerbeardman.com/2021/11/01/roly-polys-world-tour-demo/&quot;&gt;Roly-Polys World Tour (Demo)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gingerbeardman.com/2021/11/20/asistantpickle-desktop-toy-for-macintosh/&quot;&gt;AsistantPickle desktop toy for Macintosh&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gingerbeardman.com/2023/05/17/intelligentpad-component-based-drag-and-drop-software-creator/&quot;&gt;IntelligentPad: component-based drag-and-drop software creator&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gingerbeardman.com/2023/07/15/the-famous-f40-vector-illustration/&quot;&gt;“The Famous F40” vector illustration by David Rumfelt&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gingerbeardman.com/2023/12/16/see-the-sky-thoru-yamamoto-christmas-story-for-playdate/&quot;&gt;See the sky: Thoru Yamamoto’s Christmas story&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;further-reading&quot;&gt;Further reading&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gingerbeardman.com/2021/10/30/macintosh-magazine-media/&quot;&gt;I’m preserving vintage Macintosh magazine media&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gingerbeardman.com/2025/01/10/macintosh-magazine-media-search-engine-update/&quot;&gt;Macintosh Magazine Media: search engine update&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gingerbeardman.com/2022/03/31/working-with-classic-macintosh-text-encodings-in-the-age-of-unicode/&quot;&gt;Working with classic Macintosh text encodings in the age of Unicode&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.gingerbeardman.com/2023/11/07/japanese-lanuage-support-on-classic-macintosh/&quot;&gt;Japanese language support on Classic Macintosh&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 28 Mar 2025 16:57:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/03/28/macintosh-magazine-media-1-million-files/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/03/28/macintosh-magazine-media-1-million-files/</guid>
        </item>
      
    
      
        <item>
          <title>The menu bar items I use on macOS</title>
          <description>&lt;p&gt;This is an expanded version of &lt;a href=&quot;https://talk.macpowerusers.com/t/787-revisiting-our-mac-menu-bars/40090/44?u=gingerbeardman&quot;&gt;a post I made to the MPU Talk forum&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;visible&quot;&gt;Visible&lt;/h2&gt;

&lt;p&gt;Those I often need to interact with:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.macbartender.com&quot;&gt;Bartender&lt;/a&gt; (menu bar item manager; old version)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://sindresorhus.com/dato&quot;&gt;Dato&lt;/a&gt; (alt clock and calendar with timezones; old version)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bjango.com/mac/istatmenus/&quot;&gt;iStat Menus&lt;/a&gt; (network speed; old version)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://xbarapp.com&quot;&gt;xBar&lt;/a&gt; (custom menu items powered by my own shell scripts)
    &lt;ul&gt;
      &lt;li&gt;Proxy Status&lt;/li&gt;
      &lt;li&gt;Software Sales Stats&lt;/li&gt;
      &lt;li&gt;GitHub Issues&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;/2025/02/08/automating-the-cleaning-of-macos-specific-files-on-eject/&quot;&gt;Eject Volumes&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.caffeine-app.net&quot;&gt;Caffeine&lt;/a&gt; (used to set Mac not to sleep)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;hidden&quot;&gt;Hidden&lt;/h2&gt;

&lt;p&gt;Those I infrequently need to interact with:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Bookmark manager hotkey app (my own, unreleased; supports &lt;a href=&quot;https://github.com/sissbruecker/linkding&quot;&gt;linkding&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://apps.apple.com/us/app/otp-auth/id1471867429&quot;&gt;OTP Auth&lt;/a&gt; (2FA codes)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://c-command.com/toothfairy/&quot;&gt;ToothFairy&lt;/a&gt; (Bluetooth/AirPods helper)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Pyroh/Fluor&quot;&gt;Fluor&lt;/a&gt; (specify function key behaviour per-app)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;always-hidden&quot;&gt;Always Hidden&lt;/h2&gt;

&lt;p&gt;Those I rarely need to interact with:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/odlp/bluesnooze&quot;&gt;Bluesnooze&lt;/a&gt; (turns off Bluetooth when Mac sleeps)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://micropixels.software/apps/neptunes&quot;&gt;NepTunes&lt;/a&gt; (audio scrobbler and track notifications)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://rogueamoeba.com/soundsource/&quot;&gt;SoundSource&lt;/a&gt; (custom audio equaliser with my hearing profile audiogram)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.deepl.com/en/macos-app&quot;&gt;DeepL&lt;/a&gt; (instant translation of copied text when doing Cmd+C twice)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.alfredapp.com&quot;&gt;Alfred&lt;/a&gt; (multi-tool with clipboard history and custom workflows)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/apexskier/DefaultBrowser&quot;&gt;Default Browser&lt;/a&gt; (open links in your most recently used/active browser)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://freemacsoft.net/tiles/&quot;&gt;Tiles&lt;/a&gt; (window manager)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.hammerspoon.org&quot;&gt;Hammerspoon&lt;/a&gt; (my own window and workspace manager functions written in Lua)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🤓&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 21 Mar 2025 18:08:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/03/21/the-menu-bar-items-i-use-on-macos/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/03/21/the-menu-bar-items-i-use-on-macos/</guid>
        </item>
      
    
      
        <item>
          <title>Digging up the past with DiscMaster</title>
          <description>&lt;p&gt;&lt;a href=&quot;https://discmaster.textfiles.com&quot;&gt;DiscMaster&lt;/a&gt; is an alternative interface for collections of software that have been uploaded to Internet Archive. It allows you to drill into disk images at the file level and preview the contents in-place, download individual folders, zips, images, or whatever you like. It’s been around for a while but has become bigger and better with the introduction of DiscMaster 2, which is ingesting huge amounts of new files daily. But how to keep up with this firehose!?&lt;/p&gt;

&lt;h2 id=&quot;automated-searching&quot;&gt;Automated Searching&lt;/h2&gt;

&lt;p&gt;One of the great things about DiscMaster is that you can subscribe to an RSS feed of any search result, which means you’ll be notified of new matches as they are indexed without the need to manually search on the website.&lt;/p&gt;

&lt;p&gt;I have a bunch of searches including &lt;a href=&quot;/2021/10/31/hypercard-hanafuda/&quot;&gt;Hanafuda&lt;/a&gt;, various computer artists and developers (&lt;a href=&quot;/2023/12/16/see-the-sky-thoru-yamamoto-christmas-story-for-playdate/&quot;&gt;Thoru Yamamoto&lt;/a&gt;), particular apps, specific file types (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PICT/SaMe&lt;/code&gt; for &lt;a href=&quot;/2023/05/04/macigame-user-created-graphics/&quot;&gt;MaciGame tilesets&lt;/a&gt;), and for purely selfish reasons… searches for my own name. It’s fun to see where my early software was distributed decades after the it happened.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;class-of-93&quot;&gt;Class of ’93&lt;/h2&gt;

&lt;p&gt;So far the oldest thing of mine is &lt;em&gt;Chaos Calc 2&lt;/em&gt;, my fractal explorer, this version from May 1993 when I was 16 years young! I have a pretty good memory and can tell you that I received zero registrations for that &lt;a href=&quot;https://en.wikipedia.org/wiki/Shareware&quot;&gt;shareware&lt;/a&gt; app, but I did get one call from somebody who wanted to be certain that their £5 GBP registration fee would absolutely definitely receive a floppy disk in return. I guess they were unconvinced because they never sent me any money!&lt;/p&gt;

&lt;p&gt;There are references to programs (this is what apps were called on the Atari ST) that I had forgotten about but after reading their names can now recall completely (palette manager, boot tools), some I can recall partially (menu system), and others I have very little recollection of (a front end for a ray tracing program). Curiously I see no mention of the apps I was most fond of at that time: a text file viewer, kids paint program, and my take on &lt;a href=&quot;https://en.wikipedia.org/wiki/Gorillas_(video_game)&quot;&gt;Gorillas&lt;/a&gt;. Perhaps they came later?&lt;/p&gt;

&lt;h2 id=&quot;chaos-calc-2&quot;&gt;Chaos Calc 2&lt;/h2&gt;

&lt;p&gt;It’s been 32 years but it only took a moment for me to recall how to use the app and what all the different menu options did, even without consulting the readme. This is running at 32MHz with maths co-processor (compared to stock 8MHz with no co-processor) as your time is valuable!&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 8/5;&quot; videoid=&quot;fizIhUlmVXo&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;wire-hang-redux&quot;&gt;Wire Hang Redux&lt;/h2&gt;

&lt;p&gt;Also fun to see my game &lt;a href=&quot;https://gingerbeardman.itch.io/wire-hang-redux&quot;&gt;&lt;em&gt;Wire Hang Redux&lt;/em&gt;&lt;/a&gt; was featured on the cover media of Retro Gamer magazine issues 7 &amp;amp; 13, which totally passed me by in 2004/2005! No surprise as that game was featured in dozens of magazines around the world: Japan, USA, Sweden, Finland, Czech Republic, Germany. It being &lt;a href=&quot;http://www.forest.impress.co.jp/article/2004/07/06/wirehangredux.html&quot;&gt;Big in Japan&lt;/a&gt; is extra fun because it is my remake of a Japanese game by “d2ac”, &lt;a href=&quot;https://www.mobygames.com/person/510170/masaki-kobayashi/&quot;&gt;Masaki Kobayashi&lt;/a&gt;.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/wire-hang-redux-japanese-feature.jpg&quot; alt=&quot;IMG&quot; title=&quot;I can&apos;t remember which Japanese Macintosh magazine this was from&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;faqs&quot;&gt;FAQs&lt;/h2&gt;

&lt;p&gt;The game guides I wrote and &lt;a href=&quot;https://gamefaqs.gamespot.com/community/msephton/contributions&quot;&gt;published on GameFAQs&lt;/a&gt; ended up on a number of different CD-ROMs. I love the idea of somebody using a disc full of text files as a resource when playing games in the mid-late 1990s.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 14 Mar 2025 22:58:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/03/14/digging-up-the-past-with-discmaster/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/03/14/digging-up-the-past-with-discmaster/</guid>
        </item>
      
    
      
        <item>
          <title>Enhanced sfxr for Love2D</title>
          <description>&lt;p&gt;I’ve made a bunch of usability and quality of life changes to the &lt;a href=&quot;https://love2d.org/wiki/sfxr.lua&quot;&gt;sfxr.lua&lt;/a&gt; demo app.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;fix: getDirectoryItems (from a PR)&lt;/li&gt;
  &lt;li&gt;fix: off by one sample length error (from a PR)&lt;/li&gt;
  &lt;li&gt;fix: space bar was not playing the sound&lt;/li&gt;
  &lt;li&gt;fix: selected wave form was being ignored (sounds were always square wave)&lt;/li&gt;
  &lt;li&gt;fix: loaded wave form not updating the interface (but sound was playing correctly)&lt;/li&gt;
  &lt;li&gt;add: clone method added to sfxr.lua&lt;/li&gt;
  &lt;li&gt;add: history form with list of previous sounds, save current, and undo/redo&lt;/li&gt;
  &lt;li&gt;add: “play on changes” so that any time you adjust a sound it plays automatically&lt;/li&gt;
  &lt;li&gt;add: keyboard navigation in file picker (A–Z: jump to files, Enter: choose, Esc: close picker)&lt;/li&gt;
  &lt;li&gt;add: window title reflects the most recent loaded/saved file&lt;/li&gt;
  &lt;li&gt;add: window title and filename reflects last operation&lt;/li&gt;
  &lt;li&gt;add: file selector shows data directory path&lt;/li&gt;
  &lt;li&gt;add: unified save directory across platforms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can get it at: &lt;a href=&quot;https://gingerbeardman.itch.io/enhanced-sfxr-for-love2d&quot;&gt;gingerbeardman.itch.io/enhanced-sfxr-for-love2d&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At some point I’ll fork the project on GitHub and file some PRs with my changes, but the repo for it seems very dead so I’ll wait until I hear back from the owner. Source code is at the above link.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/sfxr-lua.png&quot; alt=&quot;IMG&quot; title=&quot;“Enhance!”&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 11 Mar 2025 18:23:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/03/11/enhanced-sfxr-for-love2d/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/03/11/enhanced-sfxr-for-love2d/</guid>
        </item>
      
    
      
        <item>
          <title>Old Codes, New Releases for Playdate</title>
          <description>&lt;p&gt;As I sadly move away from game dev on Playdate, I’ve released a couple of interesting old things…&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;shark-turtle&quot;&gt;SHARK TURTLE&lt;/h2&gt;

&lt;p&gt;This is a version of &lt;a href=&quot;https://en.wikipedia.org/wiki/SameGame&quot;&gt;SameGame&lt;/a&gt; (さめがめ) originally released under the name &lt;a href=&quot;https://blog.gingerbeardman.com/2023/05/24/ordering-photocopies-from-japans-national-library/&quot;&gt;CHAIN SHOT&lt;/a&gt; in 1985 by Kuniaki “Morisuke” Moribe for Fujitsu FM-8 home computer. The concept is as old as Tetris, perhaps even older, and at one time SameGame in its many guises was more popular than Tetris in Japan. One version had an active &lt;a href=&quot;/2023/05/04/macigame-user-created-graphics/&quot;&gt;modding scene&lt;/a&gt; and some had &lt;a href=&quot;/2023/08/19/fake-steve-jobs-and-letters-from-bill-g/#samegame&quot;&gt;strategy guide books&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It was submitted and rejected in the first wave of submissions to Playdate Catalog. At one point the plan was to wrap this in a theme/concept and give it the same sort of love that resulted in the great experiences of my other games like YOYOZO, Fore! Track, Bender 2: Bend Harder, but for one reason or another it never happened.&lt;/p&gt;

&lt;p&gt;What is here is a fully-playable, feature-rich, albeit “no frills” version of SameGame with fast updates, solid controls, and great music. It’s a lot of fun and great to play little-by-little when you have a spare moment, as you dictate the pace and progress of the game turn-by-turn.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gingerbeardman.itch.io/shark-turtle&quot;&gt;gingerbeardman.itch.io/shark-turtle&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/old-playdate-shark-turtle.gif#playdate&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;new-world&quot;&gt;NEW WORLD&lt;/h2&gt;

&lt;p&gt;This is an interactive music track where you’re the DJ. You control various instruments and vocals, doing live mixing of the track. It’s really fun to play with!&lt;/p&gt;

&lt;p&gt;It is a technology demo that was put together as part of a pitch for a game. Whilst the game never came to be, an improved version of this technology went on to be used in Bender 2: Bend Harder for the dynamic background patterns that animate to the beat of the music.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gingerbeardman.itch.io/new-world&quot;&gt;gingerbeardman.itch.io/new-world&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/old-playdate-new-world.gif#playdate&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;more-games&quot;&gt;More games!&lt;/h2&gt;

&lt;p&gt;All my Playdate games:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://play.date/games/yoyozo/&quot;&gt;YOYOZO&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;read about it being a &lt;a href=&quot;/2023/11/21/yoyozo-how-i-made-a-playdate-game-in-39kb/&quot;&gt;GOTY 2023&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://play.date/games/sparrow-solitaire/&quot;&gt;Sparrow Solitaire&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;read the &lt;a href=&quot;/2023/04/13/sparrow-solitaire-for-playdate/&quot;&gt;making of&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://play.date/games/bender-2-bend-harder/&quot;&gt;Bender 2: Bend Harder&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;read the &lt;a href=&quot;/2024/10/08/bender-2-bend-harder-for-playdate/&quot;&gt;making of&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://play.date/games/fore-track/&quot;&gt;Fore! Track&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;read the &lt;a href=&quot;/2023/06/26/ball-und-panzer-golf-making-a-playdate-game-in-a-week/&quot;&gt;making of&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://play.date/games/icarus/&quot;&gt;Super ICARUS&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;read about its &lt;a href=&quot;/2023/12/09/dynamic-music-and-sound-techniques-for-video-games/&quot;&gt;dynamic music&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 11 Mar 2025 16:24:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/03/11/old-codes-new-releases-for-playdate/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/03/11/old-codes-new-releases-for-playdate/</guid>
        </item>
      
    
      
        <item>
          <title>The making of MaBoShi</title>
          <description>&lt;p&gt;It’s no secret that I’m a fan of an almost forgotten WiiWare game called &lt;a href=&quot;https://en.wikipedia.org/wiki/MaBoShi:_The_Three_Shape_Arcade&quot;&gt;MaBoShi&lt;/a&gt;. I’ve posted a &lt;a href=&quot;/2013/06/29/maboshi/&quot;&gt;review&lt;/a&gt;, the &lt;a href=&quot;/2020/03/28/credits-maboshi-wiiware/&quot;&gt;staff roll/credits&lt;/a&gt; (for the first time in English), written an &lt;a href=&quot;https://gamefaqs.gamespot.com/wii/946472-maboshis-arcade/faqs/78205&quot;&gt;FAQ strategy guide&lt;/a&gt;, managed to &lt;a href=&quot;https://twitter.com/gingerbeardman/status/625789610761842689&quot;&gt;score 1 million in its “circle” game on my Nintendo DS&lt;/a&gt;, created &lt;a href=&quot;/2024/04/18/per-game-skins-in-the-delta-classic-video-game-emulator-for-ios/&quot;&gt;a way for you to play it more easily&lt;/a&gt; on your iPhone, and even &lt;a href=&quot;https://x.com/gingerbeardman/status/1826714059938693607&quot;&gt;finally succeeded to make my own version&lt;/a&gt; of the “circle” game over the course of many years. I never miss an opportunity to wax lyrical about its genius, so here I am once again to keep the fire burning.&lt;/p&gt;

&lt;p&gt;MaBoShi was published in 2008 by Nintendo and developed by &lt;a href=&quot;http://www.pinball.co.jp/mindware/&quot;&gt;Mindware Corp&lt;/a&gt; who have &lt;a href=&quot;https://gdri.smspower.org/wiki/index.php/Mindware&quot;&gt;a long and well respected development history&lt;/a&gt;. The game was &lt;a href=&quot;https://www.metacritic.com/game/maboshis-arcade/critic-reviews/?platform=wii&quot;&gt;critically acclaimed&lt;/a&gt; on release, which might come as a shock if you’ve never heard of it. It was somewhat inaccessible: it was a hardcore arcade title only available digitally on a console that was maligned as being “for kids”. To give a sense of time, the App Store on iPhone was barely a month old at the time of MaBoShi’s release.&lt;/p&gt;

&lt;p&gt;As part of the release promotional campaign &lt;a href=&quot;https://www.4gamer.net/games/345/G034593/20161221168/&quot;&gt;Micky Albert&lt;/a&gt; of Mindware Corp gave an interview with WiiWare World (now Nintendo Life) which can be read in &lt;a href=&quot;https://www.nintendolife.com/news/2008/09/mindware_interview_part_1_maboshi_the_three_shape_arcade&quot;&gt;two&lt;/a&gt; &lt;a href=&quot;https://www.nintendolife.com/news/2008/10/mindware_interview_part_2_maboshi_the_three_shape_arcade&quot;&gt;parts&lt;/a&gt;. The team effort of the development of the Wii game is detailed in that interview. However, if we dig a little deeper we can find the true origins of the game in a couple of prototypes created by a Japanese indie developer. Over the years I have pieced together the interesting story of how MaBoShi came to be.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;the-long-tail&quot;&gt;The Long Tail&lt;/h2&gt;

&lt;p&gt;Kuniaki Watanabe (“kuni”) is probably best known for his PlayStation open world exploration and crafting game &lt;a href=&quot;https://www.mobygames.com/game/109325/panekit/&quot;&gt;Panekit&lt;/a&gt;, released in 1999. This was a product of Sony’s &lt;a href=&quot;https://ja.wikipedia.org/wiki/ゲームやろうぜ!&quot;&gt;ゲームやろうぜ!&lt;/a&gt; &lt;a href=&quot;https://game.watch.impress.co.jp/docs/20051026/game.htm&quot;&gt;“Game Yaroze!” development programme&lt;/a&gt; (not to be confused with PlayStation’s 「ネットやろうぜ」 “Net Yaroze” dev kit). Panekit offered the type of easy, freeform crafting that would later appear in &lt;a href=&quot;https://www.mobygames.com/game/37770/banjo-kazooie-nuts-bolts/&quot;&gt;Banjo-Kazooie: Nuts &amp;amp; Bolts&lt;/a&gt; and even later in &lt;a href=&quot;https://www.mobygames.com/game/203119/the-legend-of-zelda-tears-of-the-kingdom/&quot;&gt;The Legend of Zelda: Tears of the Kingdom&lt;/a&gt;. Most famously Panekit &lt;a href=&quot;https://www.siliconera.com/panekit-the-infinitive-crafting-toy-case-game-finally-sees-profits-after-13-years/&quot;&gt;took 13 years to become profitable&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In more recent years he’s written a &lt;a href=&quot;http://gihyo.jp/book/2016/978-4-7741-7944-5/&quot;&gt;book on game design&lt;/a&gt;, 組み立て×分解！ゲームデザイン (“Assembly × Disassembly! Game Design”), that goes into the mechanics that are used in his games, including MaBoShi. It’s only available in Japanese but has a very friendly manga-style presentation and the game design techniques are easily understood.&lt;/p&gt;

&lt;p&gt;Throughout the past 30 years kuni has been an indie developer, &lt;a href=&quot;https://k-u.hatenadiary.org/entries/1970/01/01&quot;&gt;developing for many platforms using a range of tools&lt;/a&gt;. And this is where we pick up the origins of MaBoShi.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;hot-soup-processor&quot;&gt;Hot Soup Processor&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Hot_Soup_Processor&quot;&gt;HSP&lt;/a&gt; could be thought of as a Japanese equivalent to something like &lt;a href=&quot;https://en.wikipedia.org/wiki/Blitz_BASIC&quot;&gt;BlitzMax&lt;/a&gt;, given that it started life as a version of BASIC, or perhaps &lt;a href=&quot;https://love2d.org/&quot;&gt;Love2D&lt;/a&gt; for a rough equivalent of its capabilities.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://ja.wikipedia.org/wiki/おにたま&quot;&gt;ONION software&lt;/a&gt;, creators of &lt;a href=&quot;http://www.onionsoft.net/hsp/&quot;&gt;HSP&lt;/a&gt;, hold the annual HSP Program Contest and the results for all of these have been archived over the years. Nice work, ONION! We can do a web search of that domain to find mentions of kuni.&lt;/p&gt;

&lt;h2 id=&quot;mosser&quot;&gt;Mosser&lt;/h2&gt;

&lt;p&gt;We find &lt;a href=&quot;https://www.onionsoft.net/hsp/contest2004/list_s3.html&quot;&gt;one entry in HSP Program Contest 2004&lt;/a&gt; called &lt;em&gt;Mosser&lt;/em&gt;. A quick look at the image below shows that it was an early version of MaBoShi’s “square” game, which later evolved into &lt;a href=&quot;https://www.mobygames.com/game/87996/flametail/&quot;&gt;Flametail on DSiWare&lt;/a&gt; in 2010. &lt;em&gt;Mosser&lt;/em&gt; was awarded &lt;a href=&quot;https://www.onionsoft.net/hsp/contest2004/place.html&quot;&gt;first prize in the small game category&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;One of the judges was none other than Micky Albert of Mindware Corp—the company that would go on to develop MaBoShi! He and the other judges were very impressed with the gameplay and depth even at this prototype stage. Kuni would win a PlayStation Portable and some pinball art donated by Mindware who were a sponsor of the event. You can &lt;a href=&quot;http://www.onionsoft.net/hsp/contest2004/result.html#368&quot;&gt;read the judges thoughts&lt;/a&gt; and the game can be run in old versions of Windows.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/maboshi-2004-mosser.png&quot; alt=&quot;IMG&quot; title=&quot;Mosser, created with Hot Soup Processor&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;circular&quot;&gt;Circular&lt;/h2&gt;

&lt;p&gt;Kuni would create prototypes in &lt;a href=&quot;https://en.wikipedia.org/wiki/Flash_Lite&quot;&gt;Flash Lite&lt;/a&gt;, which was a version of Flash that was suitable for running on low powered devices, including Japanese feature phones. If we search archived versions of kuni’s old websites we can find &lt;a href=&quot;http://web.archive.org/web/20031202202659/http://www.din.or.jp:80/~ku_/junk/junk.htm&quot;&gt;a download from 2003 called &lt;em&gt;Circular&lt;/em&gt;&lt;/a&gt;. You can play this in your browser thanks to &lt;em&gt;Internet Archive&lt;/em&gt;’s Wayback Machine and Ruffle, a web-based Flash emulator.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Circular&lt;/em&gt; is obviously an early version of MaBoShi’s “circle” game.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/maboshi-2003-circular.png&quot; alt=&quot;IMG&quot; title=&quot;Circular, created with Flash Lite&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;all-bar-one&quot;&gt;All bar one&lt;/h2&gt;

&lt;p&gt;So we have found two of the three games in MaBoShi, which leaves us with the “bar” game. I spoke to kuni and he mentioned that this did not exist as a prototype prior to work commencing on MaBoShi, so it was created for the game when it was decided that a third game would be welcome.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;missing-in-action&quot;&gt;Missing in action&lt;/h2&gt;

&lt;p&gt;At the time of release there were a couple of English videos of a “making of” developer interview shown in both North America and Europe that have since been lost to time. Nintendo Europe were kind enough to respond to my request about these videos, but told me that their archive currently only goes back to 2012 so we’re sadly out of luck. Here are references I have found to the airing dates for &lt;a href=&quot;https://nintendoeverything.com/updates-to-the-nintendo-channel-32/&quot;&gt;video 1&lt;/a&gt; (Dec 2008) and &lt;a href=&quot;https://nintendoeverything.com/updates-to-the-nintendo-channel-36/&quot;&gt;video 2&lt;/a&gt; (Jan 2009).&lt;/p&gt;

&lt;p&gt;These include the juicy fact that the game was initially green lit for the Game Boy Micro (a small Game Boy Advance, &lt;a href=&quot;https://www.youtube.com/watch?v=IdAsnZlmQtM&quot;&gt;marketed as being suitable for one-handed play for Japanese commuters&lt;/a&gt;) alongside the bitGenerations series, Polarium, Rhythm Paradise, but after the sales of the Micro were less than anticipated the development was moved to DS and eventually to Wii.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;reading-list&quot;&gt;Reading list&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/1001videogamesyo0000unse_s9o3/page/796/mode/2up&quot;&gt;“1001 Video Games You Must Play Before You Die”&lt;/a&gt; (Tony Mott, et al) right opposite Spelunky&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://tinycartridge.com/post/68430151/guest-review-maboshis-arcade&quot;&gt;Tiny Cartridge guest review&lt;/a&gt; by Anna Anthropy&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pDEPhAcwFlk&quot;&gt;TV ad/commercial that inspired MaBoShi’s effect system&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.google.com/patents/US20090093314&quot;&gt;Patent application US20090093314&lt;/a&gt; describing MaBoShi’s effect system&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.google.com/patents/US20110165940&quot;&gt;Patent application US20110165940&lt;/a&gt; describing Flametail’s power-up system&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 06 Mar 2025 16:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/03/06/the-making-of-maboshi/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/03/06/the-making-of-maboshi/</guid>
        </item>
      
    
      
        <item>
          <title>Review: The Italian Job (2001)</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/the-italian-job-ps1.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You were only supposed to blow the bloody doors off!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Italian Job is based on the &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Italian_Job&quot;&gt;1969 cult classic movie&lt;/a&gt; of the same name, and released very late into the life of PlayStation in fact over a year into the life of PlayStation 2. It reviewed well and charted at number one for a good amount of time, even winning a &lt;em&gt;“Best PlayStation Game of 2002”&lt;/em&gt; award from the Official PlayStation Magazine in the UK. But I wouldn’t be surprised if you’ve never heard of it let alone played it.&lt;/p&gt;

&lt;p&gt;It was one of those games I picked up along the way, long after release, probably at a car boot sale or charity shop or bargain bin. I distinctly remember booting it up for the first time and feeling the vibe of the movie instantly despite only having seen it once when I was a teen. It retains all the comedy, action, and British irreverance. The thought of racing cars around busy city streets with reckless abandon is as intoxicating now as it was then.&lt;/p&gt;

&lt;p&gt;So, with that in mind we should look at The Italian Job through that sort of period lens. PlayStation was on its way out and the wobbly polygons were par for the course, no worries. It released after the hugely successful &lt;a href=&quot;https://www.mobygames.com/game/309/driver/&quot;&gt;Driver&lt;/a&gt; (1999) and its slightly less successful sequel &lt;a href=&quot;https://www.mobygames.com/game/3578/driver-2/&quot;&gt;Driver 2&lt;/a&gt; (2000) and is obviously inspired by those games. It features pretty much the same game modes, and the same gameplay. One could be forgiven for thinking The Italian Job was Driver: 1969, which is no bad thing. Graphically it’s very strong, gameplay wise it ticks all the boxes, and most imporantly it drives very well. You control a range of vehicles throughout the game and they all handle differently in terms of speed and control which makes the game all the more rewarding.&lt;/p&gt;

&lt;p&gt;The main game follows the plot of the movie quite faithfully and turns the heist planning and preparation into missions mostly around London, then on to Turin and finally to the Alps for the finale. If you don’t know the movie, it’s the story of a heist where $4 million in gold bullion is stolen from Turin on the day of a football match and the robbers escape through grodlock traffic in Austin Mini cars coloured red, white, and blue. Rule Brittania, eh!? The music at the end of every mission never fails to raise a smile, and the sound effects in Turin really put you in the moment.&lt;/p&gt;

&lt;p&gt;What I love most about the game is that even though it is sticking to the plot of the movie, it never feels linear. You’re free to take whatever route you want. Naturally, there are more optimal routes for certain things, and familarity of the cities comes over the course of the missions. You might want to drive on the wrong side of the road, or take a slightly longer route to avoid police cars or roadblocks. The developers did something wonderful when they stiched together all the disparate stunts and scenes from the movie into something far more grand than it has any right to be: a seven minute escape route across Turin—through city streets, across rooftops, shopping arcades, on top of the roof of the Palavela, around the test track at the FIAT factory, down church steps, through a Palazzo, across a river, into sewers, and foiling the police to potential freedom. It’s difficult to recall a finer set piece. By the time you get to this mission the game is quite demanding in terms of difficulty, but never feels unfair. Of course these days it useful to play with save states to avoid any frustration. Load times are probably the only real issue with the game, but you can use emulator fast forward to speed those up. No better time to play the game!&lt;/p&gt;

&lt;p&gt;Today we’re spoiled by open world games. We’ve seen it all before from the likes of Grand Theft Auto and many more. It’s comforting to think that the lowly PlayStation was powerful enough in the right hands to pull of streaming of “whole” cities and allow a game like this to exist in 2001. It is undoubtedly one of best arcade driving games on PS1.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;It’s worth noting there was a later movie also called The Italian Job from 2003 which received a video game on GameCube and PS2 that same year. It’s similar in scope, though perhaps less daring in scale, and also very highly recommended and well worth playing. See posts from &lt;a href=&quot;https://blog.gingerbeardman.com/2022/12/26/gaming-advent-calendar/#20-the-italian-job-2003&quot;&gt;2022&lt;/a&gt; and &lt;a href=&quot;https://blog.gingerbeardman.com/2021/01/01/top-10-games-played-in-2020/#the-italian-job-gc&quot;&gt;2021&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=FgS7W15ZM1I&amp;amp;t=3473&quot;&gt;Watch &lt;em&gt;The Italian Job&lt;/em&gt; on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/6124/the-italian-job/&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/ps/256395-the-italian-job/faqs&quot;&gt;Check an FAQ for walkthrough and secrets at gamefaqs.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.gamedeveloper.com/design/postmortem-pixelogic-s-i-the-italian-job-i-&quot;&gt;Read a postmortem at gamedeveloper.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://web.archive.org/web/20050303004411fw_/http://www.pixelogic.nildram.co.uk/pages/tij.htm&quot;&gt;Check out the original website&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 04 Mar 2025 14:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/03/04/the-italian-job-for-playstation/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/03/04/the-italian-job-for-playstation/</guid>
        </item>
      
    
      
        <item>
          <title>Making games on iPhone/iPad using Lua &amp; Love2D</title>
          <description>&lt;p&gt;I wondered how feasible it is to make Love2D games “on the go” (on a train, in bed, etc). Often I want to try a quick sketch, work up a prototype, or simply verify an algorithm. I’m happy to say it’s possible!&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;runners&quot;&gt;Runners&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Love2D Studio&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Available since Jan 2024&lt;/li&gt;
  &lt;li&gt;Free &lt;a href=&quot;https://apps.apple.com/gb/app/love2d-studio/id6474188075&quot;&gt;apps.apple.com/gb/app/love2d-studio/id6474188075&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;this allows you to manage love files and run them on iPhone&lt;/li&gt;
  &lt;li&gt;Love2D errors can even be copied to the clipboard!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Love2D Game Maker&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Available since March 2024&lt;/li&gt;
  &lt;li&gt;Paid &lt;a href=&quot;https://apps.apple.com/gb/app/love2d-game-maker/id6476174098&quot;&gt;apps.apple.com/gb/app/love2d-game-maker/id6476174098&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;TestFlight &lt;a href=&quot;https://testflight.apple.com/join/bCLmQKfQ&quot;&gt;testflight.apple.com/join/bCLmQKfQ&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;from the creator of LuaLu (see below)&lt;/li&gt;
  &lt;li&gt;comes bundled with a handful of demo games&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.iamadman.com/products/love2d-gamemaker/love2d-game-maker-learn-to-create-the-classic-game-of-pong-in-10mins/&quot;&gt;Pong tutorial&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;editors&quot;&gt;Editors&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Textastic&lt;/strong&gt; (since 2010)&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Paid &lt;a href=&quot;https://apps.apple.com/gb/app/textastic-code-editor/id1049254261&quot;&gt;apps.apple.com/gb/app/textastic-code-editor/id1049254261&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;text editor with autocomplete and function picker&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Kodex&lt;/strong&gt; (since 2017)&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Free &lt;a href=&quot;https://apps.apple.com/gb/app/kodex/id1038574481&quot;&gt;apps.apple.com/gb/app/kodex/id1038574481&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;text editor with minimap&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;GoCoEdit&lt;/strong&gt; (since 2016)&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Paid &lt;a href=&quot;https://apps.apple.com/gb/app/gocoedit-code-text-editor/id869346854&quot;&gt;apps.apple.com/gb/app/gocoedit-code-text-editor/id869346854&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;text editor with autocomplete&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Runestone&lt;/strong&gt; (since 2022)&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Free, limited &lt;a href=&quot;https://apps.apple.com/gb/app/runestone-text-editor/id1548193893&quot;&gt;apps.apple.com/gb/app/runestone-text-editor/id1548193893&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;text editor with clean user interface&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Lua IDE&lt;/strong&gt; (since Feb 2021)&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Free &lt;a href=&quot;https://apps.apple.com/gb/app/lua-ide/id1549382090&quot;&gt;apps.apple.com/gb/app/lua-ide/id1549382090&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;this app provides QuickLook support for Lua files&lt;/li&gt;
  &lt;li&gt;at some point you’ll need to check the contents of a Lua file in Files app&lt;/li&gt;
  &lt;li&gt;it also features the full Lua docs (though I use a self-built version of Dash doc viewer)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;LuaLu&lt;/strong&gt; (since Apr 2013)&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Free &lt;a href=&quot;https://apps.apple.com/gb/app/lualu-repl-learn-lua-coding/id638219114&quot;&gt;apps.apple.com/gb/app/lualu-repl-learn-lua-coding/id638219114&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;sometimes you just need a Lua &lt;a href=&quot;https://en.wikipedia.org/wiki/Read–eval–print_loop&quot;&gt;REPL&lt;/a&gt; prompt to figure out a formula or do a quick experiment&lt;/li&gt;
  &lt;li&gt;features solid debugging support&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;other-lua-ide&quot;&gt;Other Lua IDE&lt;/h2&gt;

&lt;p&gt;If you’re into Lua but not into Love2D then you might try &lt;a href=&quot;https://codea.io&quot;&gt;Codea for iPad&lt;/a&gt;.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 20 Feb 2025 07:37:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/02/20/making-games-on-iphone-ipad-using-lua-and-love2d/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/02/20/making-games-on-iphone-ipad-using-lua-and-love2d/</guid>
        </item>
      
    
      
        <item>
          <title>Automating the cleaning of macOS-specific files on Eject</title>
          <description>&lt;p&gt;Dot underscore &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;._&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.DS_Store&lt;/code&gt; files are macOS-specific metadata cruft generated for foreign filesystems (like FAT32 or exFAT) that are not usually needed for disks that are mainly used on other platforms. Digital cameras, music players, e-book readers, and handheld gaming devices can get confused when they encounter these odd files during file system parsing and directory listing. The problem is compounded if the devices naïvely process files by looking only at the file extension as they will then see the dot underscore version of a file as a duplicate and try to preview/play/open it.&lt;/p&gt;

&lt;p&gt;For years I’ve used an app called &lt;a href=&quot;https://web.archive.org/web/20250208072547/https://macpaw.com/cleanmymac&quot;&gt;CleanMyDrive&lt;/a&gt; to remove such files, but &lt;a href=&quot;https://macpaw.com/news/cleanmydrive-no-longer-developed&quot;&gt;it was discontinued in October 2023&lt;/a&gt;. I continued to use it until it recently stopped working completely …so I needed to find an alternative solution. There are some apps on the Mac App Store that look like they’ll do the trick, but I don’t really want to spend the time buying and trialling multiple apps to find one that fits my usage habits. I can make one!&lt;/p&gt;

&lt;p&gt;I already use an app called &lt;a href=&quot;https://xbarapp.com&quot;&gt;xbar&lt;/a&gt; for keeping track of my GitHub issues, itch.io sales, network/server status, and more. So I decided to flex my shell script muscles and put together an xbar script to do it.&lt;/p&gt;

&lt;p&gt;The script adds a menu bar item that allows you to:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Eject (click)&lt;/li&gt;
  &lt;li&gt;Unmount (option-click)&lt;/li&gt;
  &lt;li&gt;Eject All (without cleaning, useful when you want to disconnect all drives from your computer)&lt;/li&gt;
  &lt;li&gt;All with a handy notification&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s it! Straight to the point, no frills, functional software.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/xbar-volumes.png&quot; alt=&quot;IMG&quot; title=&quot; &quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;noscript&gt;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/610f22180117ad20465d7c529cc5faa0&quot;&gt;View the source code as a Gist&lt;/a&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;script src=&quot;https://gist.github.com/gingerbeardman/610f22180117ad20465d7c529cc5faa0.js&quot;&gt;&lt;/script&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 08 Feb 2025 20:45:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/02/08/automating-the-cleaning-of-macos-specific-files-on-eject/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/02/08/automating-the-cleaning-of-macos-specific-files-on-eject/</guid>
        </item>
      
    
      
        <item>
          <title>Collins Gem Basic Facts: Computers (1991)</title>
          <description>&lt;p&gt;I was rooting around and stumbled across my old &lt;em&gt;Collins Gem Basic Facts: Computers&lt;/em&gt;, a glossary or dictionary of computing terms. This “New Edition” is the Third edition, published in 1991, so at this point in time almost 35 years old. That year I read it cover to cover, multiple times. It was around the time my family got an Atari ST. I consumed everything I could get my hands on regarding computers.&lt;/p&gt;

&lt;p&gt;Naturally, this being 1991 the “world wide web” was but a twinkle in the eye of Tim Berners-Lee, not launching publicly until 1993, so there’s no mention of it or any synonym: network is as close as we get. Regardless, this taught me a heck of a lot and made me curious about even more. A worthwhile purchase!&lt;/p&gt;

&lt;p&gt;It would be fun to go through it and keep a tally of how many of the items I’ve encountered or used in the time that has passed since I read it. Perhaps a project for a rainy day.&lt;/p&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div id=&quot;carousel0&quot; class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0b&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0c&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0d&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0d&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0c&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0d&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0c&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/collins-gem-computers-1.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/collins-gem-computers-1.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/collins-gem-computers-2.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/collins-gem-computers-2.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/collins-gem-computers-3.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/collins-gem-computers-3.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/collins-gem-computers-3.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/collins-gem-computers-3.jpg&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0b&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0c&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0d&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 100%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}

.carousel__activator:nth-of-type(3):checked ~ .carousel__track {
  -webkit-transform: translateX(-200%);
          transform: translateX(-200%);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__slide:nth-of-type(3) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__controls:nth-of-type(3) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(3) {
  opacity: 1;
}

.carousel__activator:nth-of-type(4):checked ~ .carousel__track {
  -webkit-transform: translateX(-300%);
          transform: translateX(-300%);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__slide:nth-of-type(4) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__controls:nth-of-type(4) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(4) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(3) {
  -webkit-transform: translateX(200%) translateZ(0);
          transform: translateX(200%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(4) {
  -webkit-transform: translateX(300%) translateZ(0);
          transform: translateX(300%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(3),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(3 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(4),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(4 {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;#carousel0 .carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 04 Feb 2025 21:36:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/02/04/collins-gem-basic-facts-computers-1991/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/02/04/collins-gem-basic-facts-computers-1991/</guid>
        </item>
      
    
      
        <item>
          <title>TETRIS: 1984 is the date of conception (1989)</title>
          <description>&lt;p&gt;Given the ongoing discussion about &lt;a href=&quot;https://www.timeextension.com/news/2024/06/anniversary-is-tetris-really-40-this-year&quot;&gt;whether or not TETRIS turns 40 years old in 2024 or 2025&lt;/a&gt;, I keep my eye out for early mentions of the game. As a bonus, this is an item that at the time of me &lt;a href=&quot;https://twitter.com/gingerbeardman/status/1885581359655039019&quot;&gt;posting it to social media a couple of days ago&lt;/a&gt; had not been covered in English anywhere else on the internet. As far as I’m aware this is the earliest printed reference mentioning the conception date of Tetris.&lt;/p&gt;

&lt;p&gt;It’s a &lt;a href=&quot;https://archive.org/details/OhX_1989-08/page/n91/mode/1up&quot;&gt;short interview with Alexey Pajitnov&lt;/a&gt; in Japanese PC magazine, &lt;strong&gt;Oh! &lt;em&gt;X&lt;/em&gt;&lt;/strong&gt;, conducted mid-1989 around the time of the release of the seminal Game Boy version of TETRIS, the first year the game was available outside of the USSR. It contains this beautiful question and answer:&lt;/p&gt;

&lt;p&gt;Japanese text:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Q: TETRIS誕生のきっかけを教えてください。&lt;/p&gt;

  &lt;p&gt;——いまから5年前の1984年に、IQテスト用プログラムを作ろうとしたのが最初です。そのとき、ペントミノというゲームをベースに5～8個からなるブロックを落下させ、それを回転させて組み合わせるということを考えて作ったのがこのゲームなのです。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;English translation:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Q: Please tell us about how TETRIS came to be created.&lt;/p&gt;

  &lt;p&gt;A: It started 5 years ago in 1984, when I was trying to create a program for IQ testing. At that time, I created this game based on a game called Pentomino, where I came up with the idea of having blocks made up of 5–8 pieces fall down and rotate them to combine them together.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; pentomino are comprised of 5 pieces whilst tetromino are comprised of 4 pieces, so the version referred to is certainly an early prototype. I’m not aware of a surviving version of &lt;em&gt;whatever TETRIS was first known as&lt;/em&gt; that has blocks of 5–8 pieces.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/tetris-date-of-conception-1984.jpg&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;bibliography&quot;&gt;Bibliography&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Publication: Oh! &lt;em&gt;X&lt;/em&gt;, Vol. 8, No. 8 (August 1989)&lt;/li&gt;
  &lt;li&gt;ISSN: 0910-7614&lt;/li&gt;
  &lt;li&gt;Section: TETRISの原作者パジトノフ氏来日 (TETRIS creator Pajitnov visits Japan)&lt;/li&gt;
  &lt;li&gt;Pages: 89–90&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/OhX_1989-08/page/n91/mode/1up&quot;&gt;Source scan&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 03 Feb 2025 17:20:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/02/03/tetris-date-of-conception-is-1984/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/02/03/tetris-date-of-conception-is-1984/</guid>
        </item>
      
    
      
        <item>
          <title>Some new old posts you might find interesting</title>
          <description>&lt;p&gt;I just added a bunch of backdated posts to the blog, mostly to do with &lt;a href=&quot;/tag/early/&quot;&gt;my early games and apps&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2022-04-23&lt;/code&gt; &lt;a href=&quot;/2022/04/23/wire-hang-redux-for-64-bit-macos/&quot;&gt;Wire Hang Redux for 64-bit macOS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2015-03-14&lt;/code&gt; &lt;a href=&quot;/2015/03/14/boom-matt/&quot;&gt;Boom Matt&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2011-12-12&lt;/code&gt; &lt;a href=&quot;/2011/12/12/wire-hang-redux-update/&quot;&gt;Wire Hang Redux: update&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2004-06-20&lt;/code&gt; &lt;a href=&quot;/2004/06/20/wire-hang-redux/&quot;&gt;Wire Hang Redux&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2002-08-23&lt;/code&gt; &lt;a href=&quot;/2002/08/23/terra-firma/&quot;&gt;Terra Firma&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2002-03-27&lt;/code&gt; &lt;a href=&quot;/2002/03/27/yaking/&quot;&gt;Yaking&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2001-02-14&lt;/code&gt; &lt;a href=&quot;/2001/02/14/bendertron/&quot;&gt;Bendertron&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2000-09-29&lt;/code&gt; &lt;a href=&quot;/2000/09/29/simple-soccer/&quot;&gt;Simple Soccer&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1998-12-01&lt;/code&gt; &lt;a href=&quot;/1998/12/01/my-old-atari-st-software/&quot;&gt;My old Atari ST software&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1998-11-16&lt;/code&gt; &lt;a href=&quot;/1998/11/16/my-old-windows-software/&quot;&gt;My old Windows software&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 23 Jan 2025 22:38:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/01/23/some-new-old-posts-you-might-find-interesting/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/01/23/some-new-old-posts-you-might-find-interesting/</guid>
        </item>
      
    
      
        <item>
          <title>Slugs on a Cube: interactive animation</title>
          <description>&lt;p&gt;Japhy Riddle makes art, music, films, and animations. He’s also a retro technology enthusiast. Naturally, he combines all these skills and interests into wonderful creative output! I follow Japhy on social media and love his high quality videos and animations. &lt;a href=&quot;https://www.youtube.com/channel/UCKeTCCYBg0CFrFHm2nxx_rQ&quot;&gt;Check him out on YouTube&lt;/a&gt;!&lt;/p&gt;

&lt;h2 id=&quot;voxel-slugs-traversing-an-invisible-cubes-edges&quot;&gt;Voxel slugs traversing an invisible cube’s edges&lt;/h2&gt;

&lt;p&gt;A few of days ago a new animation of his popped up: &lt;a href=&quot;https://www.youtube.com/watch?v=0gEHldnSH08&quot;&gt;it shows three coloured slugs moving around the edge of an invisible cube&lt;/a&gt;, positioned and directed so that they never quite touch each other! Japhy created the animation by printing out each frame and combining them onto the final result, leaning into the print offset registration errors that are so lovely.&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;0gEHldnSH08&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;h2 id=&quot;interactive-version&quot;&gt;Interactive version&lt;/h2&gt;

&lt;p&gt;I thought it would be fun to create an interactive version of the animation, and I chose to do it in LÖVE (aka Love2D, though I am doing 3D rendering in software). I stopped short of imitating the print errors, but that would be possible by drawing and compositing in the same way that Japhy did it. Here it is:&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;1PK0K_CsJPU&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;h2 id=&quot;threes-a-crowd&quot;&gt;Three’s a crowd&lt;/h2&gt;

&lt;p&gt;I spoke with Japhy and we discussed how possible it might be to maximise the number of slugs. If they’re six cubes long there could be 4 of them on the cube rather than 3. So, with the aid of my interactive and controllable version of the animation, I figured that out and added it. If the slugs are shorter then more of them can wander around the cube, and similarly if the cube is larger. But those are challenges for another day! I might even make a screen saver of this at some point.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/voxel-slugs-banner.png&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;download&quot;&gt;Download&lt;/h2&gt;

&lt;p&gt;You can download it (as .love, macOS .app, or Windows .exe) and play around with the animation yourself. There are a bunch of hot keys that modify the cube in various ways. Have fun!&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gingerbeardman.itch.io/voxel-slugs&quot;&gt;gingerbeardman.itch.io/voxel-slugs&lt;/a&gt;&lt;/p&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 16 Jan 2025 17:43:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/01/16/slugs-on-a-cube-interactive-animation/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/01/16/slugs-on-a-cube-interactive-animation/</guid>
        </item>
      
    
      
        <item>
          <title>Macintosh Magazine Media: search engine update</title>
          <description>&lt;p&gt;Some time in 2020 I started &lt;a href=&quot;/2021/10/30/macintosh-magazine-media/&quot;&gt;collecting CD-ROMs from old Macintosh magazines&lt;/a&gt;. Whilst the discs are of Japanese origin—because the supply was plentiful during the extended spring clean of lockdown—they contain a great deal of software from all over the world and a lot of it is therefore in English. They’re an amazing source of old gold: sofware, images, demos, documentation, and many other files. As of today I have 460+ discs totalling almost &lt;em&gt;1 million&lt;/em&gt; files.&lt;/p&gt;

&lt;p&gt;After the collection was well and truly established I decided to share the contents in a number of meaningful ways to help other preservationists and old Macintosh enthusiats. Firstly, I uploaded &lt;a href=&quot;https://archive.org/details/@gingerbeardman?and%5B%5D=mediatype%3A%22software%22&amp;amp;and%5B%5D=language%3A%22Japanese%22&quot;&gt;pretty much all of my discs to Internet Archive&lt;/a&gt; and I also managed to &lt;a href=&quot;/2022/03/31/working-with-classic-macintosh-text-encodings-in-the-age-of-unicode/&quot;&gt;dump the directory listings from these old discs&lt;/a&gt; and created a &lt;a href=&quot;https://www.gingerbeardman.com/mmm/&quot;&gt;search engine for lookups&lt;/a&gt; by file name, type, creator, date.&lt;/p&gt;

&lt;p&gt;Anyway, in December 2024 I migrated my websites to an arm64-powered server and whilst doing so I updated a bunch of old pages. The MMM search engine was updated to provide a faster, better, more user-friendly experience on mobile. It now features quicker searching (thanks to multi-core ARM with more RAM for ripgrep), more legible results, and a tappable emoji tooltip to show which. If you run a query with multile thousands of results, the bottleneck will now be browser rendering time. So in that extreme case I would recommend using paged results.&lt;/p&gt;

&lt;p&gt;I did experiment with a database version of the search but query time was much slower and server costs were much higher. I can’t beat the performance of ripgrep, that’s for sure!&lt;/p&gt;

&lt;p&gt;Try the search here: &lt;a href=&quot;https://www.gingerbeardman.com/mmm/&quot;&gt;gingerbeardman.com/mmm/&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/mmm-redux.png&quot; alt=&quot;IMG&quot; title=&quot;A sample search for 花札 (Hanafuda)&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 10 Jan 2025 19:09:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/01/10/macintosh-magazine-media-search-engine-update/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/01/10/macintosh-magazine-media-search-engine-update/</guid>
        </item>
      
    
      
        <item>
          <title>DREAM RIDE for Sega Dreamcast (and emulators)</title>
          <description>&lt;p&gt;Over the Christmas break I had a spare week after a trip to Ireland was cancelled. What should I do with the time? I was already aware of the upcoming &lt;a href=&quot;https://itch.io/jam/dream-disc-24&quot;&gt;DreamDisc ‘24 game jam&lt;/a&gt; and had done some reading &lt;a href=&quot;https://twitter.com/gingerbeardman/status/1843024068930658594&quot;&gt;a couple of months back&lt;/a&gt; scoping out a Lua-based SDK called ANTIRUINS Engine that looked familiar enough to me with my experience of LÖVE (love2d) and Playdate SDK. But what should I make with it?&lt;/p&gt;

&lt;p&gt;If I could get something fun up and running as quickly as possible it would prove the point and keep me motivated. Sounds like a plan. Also, it’s easier to make something that has already been planned out, so all the effort goes on implementation rather than design. I remembered my unreleased game &lt;a href=&quot;/tag/dailydriver/&quot;&gt;Daily Driver&lt;/a&gt;…maybe I could get those little cars moving around the screen? But what would make it &lt;em&gt;more Dreamcast?&lt;/em&gt; Simultaneous 4-player action and CPU opponents! &lt;em&gt;OK, let’s do this!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It took a bit of effort to get the build process setup, but after that I hit the ground running. I got the physics and 4-player control working pretty quickly. Then the sprites went in, albeit in the wrong colours. Physics equation and sprites are the only two things shared with &lt;a href=&quot;/tag/dailydriver/&quot;&gt;Daily Driver&lt;/a&gt;. Next I added a variety of game modes, power-ups, new sounds, all within a few days. Then I picked at it over the next week to polish it as much as possible before the game jam deadline. I thrive on deadlines.&lt;/p&gt;

&lt;p&gt;Many thanks to &lt;a href=&quot;https://bertholet.itch.io&quot;&gt;Bertholet&lt;/a&gt;, author of ANTIRUINS Engine, who has done a great job and was very gracious with his time helping me through the initial hurdles.&lt;/p&gt;

&lt;p&gt;I’ll do a full post-mortem and “what’s next” after the game jam results are announced. But I’m really happy with how it turned out. The cars look great in colour, and even with 8 of them on screen things are a rock solid 60fps, I really need to see how far I can push things.&lt;/p&gt;

&lt;hr /&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/dream-ride-game.png&quot; alt=&quot;IMG&quot; title=&quot;This shows a secret mode where the cars roaming around the menu screen remain in play!&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;download&quot;&gt;Download&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://gingerbeardman.itch.io/dream-ride&quot;&gt;gingerbeardman.itch.io/dream-ride&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Play DREAM RIDE on real hardware (tested on my original imported NTSC-U Sega Dreamcast from 1999, &lt;a href=&quot;/2020/12/03/dreamcast-gdemu-installation/&quot;&gt;fitted with a GDEMU&lt;/a&gt;) or in an emulator on your favourite console or handheld (tested with Flycast on macOS, GameForce Chi, Powkiddy RGB30, &lt;a href=&quot;https://twitter.com/0_game_it/status/1875734954946285610&quot;&gt;TrimUI Brick&lt;/a&gt;, and a modded Nintendo Switch).&lt;/p&gt;

&lt;p&gt;Future versions of the game with improvements and new modes will require payment, after all I’m a full-time indie developer and my caffeine intake needs to be maintained. Thanks for your support!&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;video&quot;&gt;Video&lt;/h2&gt;

&lt;p&gt;Below is a video where I forgot to switch audio source so it recorded audio through my Mac’s mic. 😅&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;movAjOjZLRg&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 05 Jan 2025 23:59:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2025/01/05/dream-ride-for-sega-dreamcast-and-emulators/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2025/01/05/dream-ride-for-sega-dreamcast-and-emulators/</guid>
        </item>
      
    
      
        <item>
          <title>My most popular posts of 2024</title>
          <description>&lt;p&gt;2024 was a bit of meh year for me. A lot of time away from working, which was necessary but a process that I find difficult as I’m at my best when I’m creating. Here’s to 2025!&lt;/p&gt;

&lt;p&gt;Two viral blog posts dwarfed all other writing: &lt;a href=&quot;/2024/05/10/emoji-history-the-missing-years/&quot;&gt;Emoji history: the missing years&lt;/a&gt; (10 May, 15K views) and &lt;a href=&quot;/2024/08/10/stapler-i-remade-a-32-year-old-classic-macintosh-app/&quot;&gt;Stapler: I remade a 32 year old classic Macintosh app&lt;/a&gt; (10 Aug, 14K views) which heralded the start of me trying other things development-wise. I’ve created macOS and iOS apps using Swift and SwiftUI, tools using Python and Qt, blog extensions using Ruby, text editor extensions using JavaScript, games in Lua for Playdate and PC, and I ended the year writing &lt;a href=&quot;/2025/01/05/dream-ride-for-sega-dreamcast-and-emulators/&quot;&gt;a game for the Sega Dreamcast&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;how-many-posts&quot;&gt;How many posts?&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/search/?q=2024&quot;&gt;32 posts&lt;/a&gt; (down from 40 in 2023)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;most-popular-posts&quot;&gt;Most popular posts&lt;/h2&gt;
&lt;p&gt;According to Google Analytics, my 10 most popular posts in 2024 were (most popular first):&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2024/05/10/emoji-history-the-missing-years/&quot;&gt;Emoji history: the missing years&lt;/a&gt; (10 May) &lt;!-- 15K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2024/08/10/stapler-i-remade-a-32-year-old-classic-macintosh-app/&quot;&gt;Stapler: I remade a 32 year old classic Macintosh app&lt;/a&gt; (10 Aug) &lt;!-- 14K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2024/07/30/taking-command-of-the-context-menu-in-macos/&quot;&gt;Taking command of the Context Menu in macOS&lt;/a&gt; (30 Jul) &lt;!-- 6K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2024/08/01/psa-internet-archive-glitch-deletes-years-of-user-data-and-accounts/&quot;&gt;PSA: Internet Archive “glitch” deletes years of user data &amp;amp; accounts&lt;/a&gt; (1 Aug) &lt;!-- 5K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2024/05/11/mouse-support-for-playdate/&quot;&gt;Mouse Support for Playdate&lt;/a&gt; (11 May) &lt;!-- 4K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2024/08/28/this-behavior-is-by-design/&quot;&gt;This behavior is by design&lt;/a&gt; (28 Aug) &lt;!-- 3K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2024/10/11/automating-the-most-annoying-aspects-of-blogging/&quot;&gt;Automating the most annoying aspects of blogging&lt;/a&gt; (11 Oct) &lt;!-- 3K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2024/05/24/emigre-typography-and-graphic-design-magazine-1984-2005/&quot;&gt;Emigre typography and graphic design magazine (1984–2005)&lt;/a&gt; (24 May) &lt;!-- 2K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2024/02/10/interview-kenta-cho-indie-game-developer/&quot;&gt;Interview: Kenta Cho (Japanese indie game developer)&lt;/a&gt; (10 Feb) &lt;!-- 2K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2024/03/07/a-year-in-the-life-of-a-playdate-game-developer/&quot;&gt;A year in the life of a Playdate game developer&lt;/a&gt; (7 Mar) &lt;!-- 1K --&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;best-of-the-rest&quot;&gt;Best of the rest&lt;/h2&gt;
&lt;p&gt;My personal favourites from the year (most recent first):&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2024/12/31/music-recommendations-2024/&quot;&gt;Music recommendations (2024)&lt;/a&gt; (31 Dec)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2024/11/09/new-3d-golf-simulation-video-game-series/&quot;&gt;New 3D Golf Simulation (video game series)&lt;/a&gt; (9 Nov)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2024/10/17/extensions-for-nova-editor/&quot;&gt;Extensions for Nova editor&lt;/a&gt; (17 Oct)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2024/07/14/shibuya-pixel-art-contest-2024/&quot;&gt;Shibuya Pixel Art Contest 2024&lt;/a&gt; (14 July)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2024/05/09/adding-your-own-multi-channel-audio-to-music-app/&quot;&gt;Adding your own multi-channel audio to Music app&lt;/a&gt; (9 May)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2024/04/18/per-game-skins-in-the-delta-classic-video-game-emulator-for-ios/&quot;&gt;Per-game skins in the Delta classic video game emulator for iOS&lt;/a&gt; (18 Apr)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2024/02/15/barbara-nessim-at-the-ginza-art-space-1986/&quot;&gt;Barbara Nessim at The Ginza Art Space (1986)&lt;/a&gt; (15 Feb)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2024/01/22/jinzo-paint-vintage-mobile-drawing-app/&quot;&gt;JINZO Paint: vintage mobile drawing app&lt;/a&gt; (22 Jan)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;blog-changelog&quot;&gt;Blog changelog&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;Optimise SASS compile once in plugin rather than header of every page (23 Feb)&lt;/li&gt;
  &lt;li&gt;Added &lt;a href=&quot;/about&quot;&gt;about&lt;/a&gt; and &lt;a href=&quot;/support&quot;&gt;support&lt;/a&gt; pages (28 May)&lt;/li&gt;
  &lt;li&gt;Multi-carousel support (14 Jul)&lt;/li&gt;
  &lt;li&gt;Rewrote the main page of my non-blog website (3 Aug)&lt;/li&gt;
  &lt;li&gt;Optimised all includes and templates to reduce build time (19 Aug)&lt;/li&gt;
  &lt;li&gt;Automatic transformation of local images urls to CDN urls (19 Aug)&lt;/li&gt;
  &lt;li&gt;Automatic smart quotes in post titles (19 Aug)&lt;/li&gt;
  &lt;li&gt;Improved replacement of “nouns” which are automatically-emphasised words (3 Sep)&lt;/li&gt;
  &lt;li&gt;Better YouTube embeds using &lt;a href=&quot;https://github.com/paulirish/lite-youtube-embed&quot;&gt;lite-yt-embed&lt;/a&gt; (11 Sep)&lt;/li&gt;
  &lt;li&gt;Added OpenSearch to allow searching blog from address bar (15 Sep)&lt;/li&gt;
  &lt;li&gt;Created Markdown File Linker to make linking easier (8 Oct)&lt;/li&gt;
  &lt;li&gt;Created YAML Tag Picker to make tagging easier (8 Oct)&lt;/li&gt;
  &lt;li&gt;Embed Gists using custom gist tag plugin (12 Oct)&lt;/li&gt;
  &lt;li&gt;Improved noscript experience (12 Oct)&lt;/li&gt;
  &lt;li&gt;Auto-migrate SASS to use its module system (17 Oct)&lt;/li&gt;
  &lt;li&gt;Migrate from EasyEngine to &lt;a href=&quot;https://caddyserver.com&quot;&gt;Caddy server&lt;/a&gt; (1 Dec)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;previous-years&quot;&gt;Previous years&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/12/27/my-most-popular-posts-of-the-year/&quot;&gt;My most popular posts of 2023&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2022/12/31/my-most-popular-posts-of-the-year/&quot;&gt;My most popular posts of 2022&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/12/31/my-most-popular-posts-of-the-year/&quot;&gt;My most popular posts of 2021&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 31 Dec 2024 23:59:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/12/31/my-most-popular-posts-of-the-year/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/12/31/my-most-popular-posts-of-the-year/</guid>
        </item>
      
    
      
        <item>
          <title>Music recommendations (2024)</title>
          <description>&lt;p&gt;Initially I had thought this year wasn’t as good as last year in terms of music, but listening again to the best tracks from the first 40-something weeks of the year proved otherwise. It was a great year.&lt;/p&gt;

&lt;p&gt;Most music I was sent by the Apple Music algorithm continued to be Japanese, thanks to my ongoing deep dive. During the initial playlist curation I was struck by a fairly clean divide of dance and not-dance. I was also still listening to &lt;a href=&quot;https://www.mixcloud.com/musiclover1980/soichi-terada-essential-mix-2022-03-05/&quot;&gt;Soichi Terada’s Essential Mix&lt;/a&gt; from 2022. All of this merged together in my mind and I wondered if I could make a DJ mix? In 2024 surely there is software that can assist? There is.&lt;/p&gt;

&lt;h2 id=&quot;my-first-dj-mix&quot;&gt;My first DJ mix&lt;/h2&gt;

&lt;p&gt;I pruned 50 tracks down to about 30 and set to work sequencing the tracks so their key and BPM flowed nicely. Each transition became a puzzle, gamifying the whole process. I had been listening to a loosely arranged playlist of 26 tracks for about a week, and two of those didn’t make the cut for the final mix.&lt;/p&gt;

&lt;p&gt;It was possible for me to create my first ever DJ mix thanks to some fantastic called &lt;a href=&quot;https://dj.studio&quot;&gt;DJ.Studio&lt;/a&gt; that makes light work of some difficult and cumbersome process. &lt;a href=&quot;https://www.mixcloud.com/gingerbeardman/2024/&quot;&gt;Listen on MixCloud&lt;/a&gt;.&lt;/p&gt;

&lt;iframe width=&quot;100%&quot; height=&quot;120&quot; src=&quot;https://player-widget.mixcloud.com/widget/iframe/?hide_cover=1&amp;amp;feed=%2Fgingerbeardman%2F2024%2F&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;24 tracks with a duration of 1h18m58s, a mere 12 seconds longer than last year. Bonus points for consistency. It also meant I could run off some CDs and MiniDiscs for friends and acquaintances.&lt;/p&gt;

&lt;div class=&quot;table-wrapper&quot;&gt;
  &lt;table&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th&gt;Timestamp&lt;/th&gt;
        &lt;th&gt;Artist&lt;/th&gt;
        &lt;th&gt;Song (Video)&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;00:00:00&lt;/td&gt;
        &lt;td&gt;luvis&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=c2SkgX9rgBs&quot;&gt;Whales&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:02:44&lt;/td&gt;
        &lt;td&gt;yomm &amp;amp; Moto Kawabe&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Z6UQKESPFBw&quot;&gt;Alice&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:06:56&lt;/td&gt;
        &lt;td&gt;macaroom&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=rwsbOFYR_UY&quot;&gt;Geinin&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:09:58&lt;/td&gt;
        &lt;td&gt;leift&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=jdpU9kPpSwg&quot;&gt;Orangette (feat. 安次嶺希和子)&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:12:50&lt;/td&gt;
        &lt;td&gt;Ai Kakihira &amp;amp; VUIZE&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=HDDGSKgz1bM&quot;&gt;超機車的機車人 ~Super Auto-bike~&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:15:24&lt;/td&gt;
        &lt;td&gt;Swimming Sheep&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=qnw3RUN09Mc&quot;&gt;Supermoon&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:17:47&lt;/td&gt;
        &lt;td&gt;leift&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=P-XXWvSl4Pc&quot;&gt;Soda (feat. kim taehoon)&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:20:13&lt;/td&gt;
        &lt;td&gt;ASS MAGIC&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=PuNXbziT74Y&quot;&gt;Corn Soup Baby&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:21:14&lt;/td&gt;
        &lt;td&gt;voquote &amp;amp; Lil Summer&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=LlPX5z5DlBc&quot;&gt;YOUR LAST&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:24:07&lt;/td&gt;
        &lt;td&gt;Pasocom Music Club&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=aEh2nCY0M6o&quot;&gt;Colors (feat. Haruy)&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:28:27&lt;/td&gt;
        &lt;td&gt;Shōtaro Aoyama&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=uMzJYXYX5xw&quot;&gt;Once (feat. SHOTA ARATANI)&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:32:08&lt;/td&gt;
        &lt;td&gt;AKIRA&lt;/td&gt;
        &lt;td&gt;Jet (feat. SPENSR)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:35:30&lt;/td&gt;
        &lt;td&gt;HOME&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=a8hsWxvrKGc&quot;&gt;Plastic Romance&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:40:11&lt;/td&gt;
        &lt;td&gt;Shōtaro Aoyama&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ZveLxWtcNwA&quot;&gt;Nowhere (feat. NAGAN SERVER &amp;amp; Yunoa)&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:44:28&lt;/td&gt;
        &lt;td&gt;DE DE MOUSE &amp;amp; hitomitoi&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Y2eEpWIcC-Q&quot;&gt;Skyscraper Starlight&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:47:23&lt;/td&gt;
        &lt;td&gt;kei&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=DH3X7Hs2nP0&quot;&gt;Girigiri Tamotteru [Instrumental]&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:50:25&lt;/td&gt;
        &lt;td&gt;Omodaka&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Zc_TGoO71xA&quot;&gt;Hokkai Bon Uta [Instrumental]&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:54:29&lt;/td&gt;
        &lt;td&gt;Natsudaidai&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=PA9Ur98EbAw&quot;&gt;Dusky Dolphin&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:57:14&lt;/td&gt;
        &lt;td&gt;Steroid &amp;amp; Y.A.&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=X3AKTQ8UV4c&quot;&gt;Arson&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;00:59:38&lt;/td&gt;
        &lt;td&gt;showmore&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=6UeEjC-mthU&quot;&gt;Fruit&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;01:03:02&lt;/td&gt;
        &lt;td&gt;hitomitoi&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=WWpGX7hY9rY&quot;&gt;Dive&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;01:07:14&lt;/td&gt;
        &lt;td&gt;yanaco&lt;/td&gt;
        &lt;td&gt;Your Orbit&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;01:11:13&lt;/td&gt;
        &lt;td&gt;Fried Banana Shop &amp;amp; Julia Takada&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=fEkwdXZg6eo&quot;&gt;Fever&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;01:15:16&lt;/td&gt;
        &lt;td&gt;Lucky Kilimanjaro&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=suzLEc9Q1fg&quot;&gt;Koi AoAoto&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;

&lt;/div&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;playlists&quot;&gt;Playlists&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://music.apple.com/gb/playlist/japanese-best-of-2024/pl.u-KRzZBtDLoK2&quot;&gt;Apple Music&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://open.spotify.com/playlist/7ruaRCzShrcfzKsy4GaYzm&quot;&gt;Spotify&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLfF-zlMNYMd9Vlb7l3uCwQO_eh2VTAtc_&quot;&gt;YouTube&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://mega.nz/folder/UkokGISS#zZHaUOzcD1KmNY_yNbzwXQ&quot;&gt;Download&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;bonus-albums-of-the-year&quot;&gt;Bonus: albums of the year&lt;/h2&gt;

&lt;div class=&quot;table-wrapper&quot;&gt;
  &lt;table&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th&gt;Artist&lt;/th&gt;
        &lt;th&gt;Album&lt;/th&gt;
        &lt;th&gt;Release Date&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;Yo Irie&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://song.link/https://music.apple.com/gb/album/%E6%81%8B%E6%84%9B/1728000159&quot;&gt;Love Affair&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2024-02-14&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;The Painted Word&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://song.link/https://music.apple.com/gb/album/lovelife/1730037254&quot;&gt;Lovelife&lt;/a&gt; (reissue)&lt;/td&gt;
        &lt;td&gt;2024-02-14 (prev. 1989)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;macaroom&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://song.link/https://music.apple.com/gb/album/burning-chrome/1752999536&quot;&gt;Burning Chrome&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2024-07-10&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Hazel English&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://song.link/https://music.apple.com/gb/album/real-life/1757810351&quot;&gt;Real Life&lt;/a&gt; (compilation)&lt;/td&gt;
        &lt;td&gt;2024-08-16&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;leift&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://song.link/https://music.apple.com/gb/album/citrus/1735442359&quot;&gt;Citrus&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2024-04-03&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Fabiana Palladino&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://song.link/https://music.apple.com/gb/album/fabiana-palladino/1722064179&quot;&gt;Fabiana Palladino&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2024-04-05&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;bog band&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://song.link/https://music.apple.com/gb/album/vanity-project-ep/1733626092&quot;&gt;Vanity Project&lt;/a&gt; (EP)&lt;/td&gt;
        &lt;td&gt;2024-06-12&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;showmore&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://song.link/https://music.apple.com/gb/album/liquid-city/1763795260&quot;&gt;Liquid City&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2024-09-11&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Sabrina Carpenter&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://song.link/https://music.apple.com/gb/album/short-n-sweet/1750307020&quot;&gt;Short ‘n Sweet&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2024-08-23&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Betty Boo&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://song.link/https://music.apple.com/gb/album/rip-up-the-rulebook/1751768472&quot;&gt;Rip Up The Rulebook&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;2024-08-30&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;

&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://music.apple.com/gb/playlist/albums-2024/pl.u-NPjBpI04jA1&quot;&gt;Apple Music&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://open.spotify.com/playlist/1xCNxwzvSnV6EUIdcYtc3N?si=6LBNJrmVRE6nTPfJJdoHsQ&amp;amp;pi=e-VbDFOL0PR2GH&quot;&gt;Spotify&lt;/a&gt; (missing my number one album)&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 31 Dec 2024 23:55:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/12/31/music-recommendations-2024/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/12/31/music-recommendations-2024/</guid>
        </item>
      
    
      
        <item>
          <title>New 3D Golf Simulation (video game series)</title>
          <description>&lt;p&gt;Golf video games are one of my passions, ever since World Class Leader Board and Microprose Golf on Atari ST. These days my favourite golf games are still the old ones. In particular I have a soft spot for &lt;em&gt;T&amp;amp;E SOFT&lt;/em&gt;’s New 3D Golf Simulation series with its blue skies, bright colours, and FM synth tunes. This series has a long history so I thought I’d do my best to recap and share some little-known knowledge.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/new-3d-golf-simulation-original.jpg&quot; alt=&quot;3-D Golf Simulation&quot; title=&quot;3-D Golf Simulation (1983, MSX)&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;translation-guides&quot;&gt;Translation Guides&lt;/h2&gt;

&lt;p&gt;To make it easier for you to play the Japanese games mentioned below, I wrote translation guides: &lt;a href=&quot;https://gamefaqs.gamespot.com/community/msephton/contributions/faqs&quot;&gt;gamefaqs.gamespot.com/community/msephton/contributions/faqs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/new-3d-golf-simulation-ad.jpg&quot; alt=&quot;Pineapple golf course ad&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;8-bit-computers&quot;&gt;8-bit Computers&lt;/h2&gt;

&lt;p&gt;The series began in 1982 with リアルゴルフゲーム (&lt;a href=&quot;https://necretro.org/Real_Golf_Game&quot;&gt;Real Golf Game&lt;/a&gt;) for NEC PC-6001, a distinctly 2D presentation with overhead view, power bar and course map. &lt;a href=&quot;https://www.youtube.com/watch?v=mXIZB54b6Jc&quot;&gt;Here’s a video&lt;/a&gt; of where it all began.&lt;/p&gt;

&lt;p&gt;Things got interesting later that year with the follow-up ３Ｄゴルフシミュレーション (&lt;a href=&quot;https://necretro.org/3D_Golf_Simulation&quot;&gt;3-D Golf Simulation&lt;/a&gt;) which was written for the Fujitsu FM-7 computer and published in &lt;a href=&quot;https://archive.org/details/Io19834/page/n185/mode/2up&quot;&gt;the 1983-4 issue of I/O magazine&lt;/a&gt;. The game was written in BASIC and its &lt;a href=&quot;https://archive.org/details/Io19834/page/n187/mode/2up&quot;&gt;source code&lt;/a&gt;, including data for 18 holes known as &lt;em&gt;T&amp;amp;E Island Golf Course&lt;/em&gt;, was given away in the magazine as a type-in listing. The game was released commercially on a few other Japanese 8-bit computers over the next couple of years, with machine code gradually added to speed up the 3D processing in &lt;a href=&quot;https://www.youtube.com/watch?v=TqBlo1BgaGY&quot;&gt;1984’s “High-Speed” edition&lt;/a&gt; for MSX and &lt;a href=&quot;https://necretro.org/3D_Golf_Simulation_Super_Version&quot;&gt;1985’s “Super Version”&lt;/a&gt; for PC-6001 mkII. They’re still painfully slow.&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;obfRuu8tCK8&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;16-bit-computers&quot;&gt;16-bit Computers&lt;/h2&gt;

&lt;p&gt;A break of 4 years should give you some idea as to the work that was going on behind the scenes, culminating in the 1989 release of Harukanaru Augusta for PC-9801. This was an official licensed representation of &lt;em&gt;Augusta National Golf Club&lt;/em&gt;, also known as the location of the famous &lt;em&gt;Masters&lt;/em&gt; tournament.&lt;/p&gt;

&lt;p&gt;This is where the series really hit its stride and made lasting impressions: high resolution graphics using a bespoke dithering system to make the most of the limited colour palette, digitised caddy images and sound effects, catchy music using FM synthesis, detailed real life golf courses, and an engaging control system. The 3DGOLF system software was upgraded a couple of times over the next few years, and &lt;a href=&quot;https://archive.org/details/oh-pc-issue-135-nov-15-1990/Oh%21%20PC%20Issue%20135%20%28Nov%2015%201990%29/page/68/mode/2up?view=theater&quot;&gt;a handful of add-on courses were released&lt;/a&gt;.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/new-3d-golf-simulation-course-data.jpg&quot; alt=&quot;IMG&quot; title=&quot;Course Data, Vol. 1–3 (Oh! PC Issue 135, Nov 15 1990)&quot; /&gt;&lt;/p&gt;

&lt;p&gt;For PC-9801 the total list of available courses counted six:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/56201/harukanaru-augusta/screenshots/pc98/&quot;&gt;Harukanaru Augusta&lt;/a&gt; (1989)
    &lt;ul&gt;
      &lt;li&gt;&lt;em&gt;“Distant Augusta”&lt;/em&gt;&lt;/li&gt;
      &lt;li&gt;[System Disk 1.0]&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/71396/new-3d-golf-simulation-eight-lakes-gc/screenshots/pc98/&quot;&gt;Eight Lakes G.C.&lt;/a&gt; (1990)
    &lt;ul&gt;
      &lt;li&gt;fictional course&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/102547/new-3d-golf-simulation-te-selection/screenshots/pc98/&quot;&gt;T&amp;amp;E Selection&lt;/a&gt; (1990)
    &lt;ul&gt;
      &lt;li&gt;fictional course&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/26665/true-golf-classics-waialae-country-club/screenshots/pc98/&quot;&gt;Waialae no Kiseki&lt;/a&gt; (1991)
    &lt;ul&gt;
      &lt;li&gt;&lt;em&gt;“Miracle of Waialae”&lt;/em&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/33405/pebble-beach-golf-links/screenshots/pc98/&quot;&gt;Pebble Beach no Hatou&lt;/a&gt; (1992)
    &lt;ul&gt;
      &lt;li&gt;&lt;em&gt;“Waves of Pebble Beach”&lt;/em&gt;&lt;/li&gt;
      &lt;li&gt;[System Disk 2.0]&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/37942/true-golf-classics-wicked-18/screenshots/pc98/&quot;&gt;Devil’s Course&lt;/a&gt; (1992)
    &lt;ul&gt;
      &lt;li&gt;aka Wicked 18&lt;/li&gt;
      &lt;li&gt;fictional course&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;Yp3YpAc2PpM&quot; params=&quot;start=310&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;p&gt;Harukanaru Augusta and Eight Lakes G.C. were also &lt;a href=&quot;https://archive.org/details/oh-pc-issue-137-dec-15-1990/Oh%21%20PC%20Issue%20137%20%28Dec%2015%201990%29/page/86/mode/2up?q=%22POLYSYS%22&quot;&gt;released on FM-TOWNS and Sharp X68000&lt;/a&gt;, but not the later courses. Maybe sales weren’t good enough? Harukanaru Augusta would also see a mail-in upgrade release as a “HD” hard disk installable version, running System Disk 2.5, but &lt;a href=&quot;https://archive.org/details/oh-pc-issue-135-nov-15-1990/Oh%21%20PC%20Issue%20135%20%28Nov%2015%201990%29/page/68/mode/2up?view=theater&quot;&gt;this was not backwards compatible with the previous releases&lt;/a&gt;. At this point the engine powering the games had been rewritten and was referred to as &lt;a href=&quot;https://archive.org/details/technopolis-1989-11/01_journal-1989-11/page/n13/mode/2up?q=%22POLYSYS%22&quot;&gt;POLYSYS&lt;/a&gt; and made claims of being an “Integrated 3D Processor” or software DSP. The holes were designed in a &lt;a href=&quot;https://archive.org/details/new-3-d-golf-simulation-pebble-beach-no-hatou-shvc-gb-sfc-jp-manual-600-dpi/page/n63/mode/2up?q=%22POLYSYS%22&quot;&gt;custom CAD package&lt;/a&gt;. IIRC each 3D hole consisted of a mere 256 points! I need to find the cite for that.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/new-3d-golf-simulation-polysys.png#smaller&quot; alt=&quot;POLYSYS logo&quot; title=&quot;Would look great on a T-shirt, right?&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Throughout this hugely productive Japanese PC period T&amp;amp;E SOFT published a printed newsletter for New 3D Golf imulation owners called “Top Spin”, which I’m yet to see a copy of. Please do get in touch if you have any information!&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;16-bit-consoles&quot;&gt;16-bit Consoles&lt;/h2&gt;

&lt;p&gt;The series was eventually ported to console, first to Nintendo’s Super Famicom (SNES), with Harukanaru Augusta arriving early in Japan and Waialae Country Club being a USA launch title. Later, totally different ports were released on Sega Mega Drive, which was lucky enough to get four out of the six courses. Pebble Beach was released first in the USA and later in Japan. Harukanaru Augusta, Devil’s Course and Waialae followed, but only in Japan.&lt;/p&gt;

&lt;p&gt;These Japanese Mega Drive versions are my favourite of the bunch. They’re based on the PC-9801 games, right down to using the same course data, and the user interface is a low-resolution facsimile that retains the charm and style of the original PC interface. They really are a work of art. The Japanese versions maintain the dithering effect to show different grass types, but the USA version features only solid colours. The USA version features an easier power meter but removes the special full power shot that the Japanese version had. All in all I’d say the USA versions are easier and less attractive.&lt;/p&gt;

&lt;p&gt;Playing them today under emulation I make sure to overclock the CPU (400% is good) to reduce the redraw times, speed up transitions, and make for an altogether more modern and enjoyable experience. You can also hold the B button to speed up ball flight animation, which is even more noticable when running overclocked. Speed runners take note!&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;18dIjiP_0gw&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;real-3d&quot;&gt;Real 3D?&lt;/h2&gt;

&lt;p&gt;With the arrival of systems capable of real-time 3D came the opportunity for more realistic golf courses, at least. But there was some legacy baggage hanging around. The SNES was still very popular, and it wasn’t obvious how much more powerful the more awkward to program 32-bit systems like the 3DO and Saturn might be. So the final games in the series on SNES and the first in the series on 3DO and Saturn were pretty much the same: 3D but no dynamic camera. Amazing for SNES owners, and perhaps disappointing for 3DO and Saturn owners.&lt;/p&gt;

&lt;p&gt;PlayStation and N64, on the other hand, got real 3D versions of the game. Even the Virtual Boy got a decent wireframe 3D version of this era T&amp;amp;E SOFT golf engine, as &lt;a href=&quot;https://www.youtube.com/watch?v=YvcLiwgLLXg&quot;&gt;T&amp;amp;E Virtual Golf&lt;/a&gt; (or just &lt;em&gt;Golf&lt;/em&gt; worldwide). Quite surprising! All are very much worth playing, though I personally favour the &lt;a href=&quot;https://www.youtube.com/watch?v=HMq_9W8OCOQ&quot;&gt;PlayStation games&lt;/a&gt; over the N64 games. Virtual Boy Golf is worth a try, just for kicks, and can be played under emulation in 3D using anaglyph red/blue glasses or in glasses-free 3D in an emulator on a Nintendo 3DS!&lt;/p&gt;

&lt;p&gt;That said, the Saturn still had a trump up its sleeve. Perhaps because it was very popular in Japan it was the console T&amp;amp;E SOFT chose to release the final 32-bit version of the game, &lt;a href=&quot;https://www.youtube.com/watch?v=PCV6EsVBlJo&quot;&gt;&lt;em&gt;Waialae no Kiseki ~Extra 36 Holes~&lt;/em&gt;&lt;/a&gt;. As you might expect from its name there were two extra courses bundled with this game. Windy G.C. was a brand new ultra-difficult course, whilst Eight Lakes G.C. was a modernisation of the fictional course featured in the 1990 add-on disk for the original Harukanaru Augusta game for PC-98 and X68000 that released back in 1989. Full circle self-referencing from T&amp;amp;E SOFT—nice!&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;HMq_9W8OCOQ&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;p&gt;The engine also powered RPG &lt;a href=&quot;https://www.mobygames.com/game/13525/virtual-hydlide/screenshots/&quot;&gt;Virtual Hydlide on SEGA Saturn&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;the-19th-hole&quot;&gt;The 19th Hole&lt;/h2&gt;

&lt;p&gt;T&amp;amp;E SOFT kind of ceased to exist at some point after this, though they managed to spit out a few golf games under one name or another to mixed reviews. Windows 9x got a proper version of the game in Harukanaru Augusta for Windows, which is great. PS2 got &lt;a href=&quot;https://www.youtube.com/watch?v=Xxsg_6UerW8&quot;&gt;Golf Paradise&lt;/a&gt; (Swing Away Golf) and a Disney-branded version called &lt;a href=&quot;https://www.youtube.com/watch?v=6gwh3pMIAl8&amp;amp;list=PL2HDVv5AFKLEIn3ZzOtg6_DNVikSU3Yby&quot;&gt;Disney Golf Classic&lt;/a&gt; (Disney Golf) which are somewhat souless games that really don’t excite me.&lt;/p&gt;

&lt;p&gt;The finale was somewhat of a surprise, with the DS getting &lt;a href=&quot;https://en.wikipedia.org/wiki/True_Swing_Golf&quot;&gt;Touch Golf&lt;/a&gt; (True Swing Golf) in 2005, and a DSi version in 2009 as &lt;a href=&quot;/2021/02/08/a-little-bit-of-nintendo-touch-golf/&quot;&gt;A Little Bit of Nintendo Touch Golf&lt;/a&gt;. These are both truly great games, though if I had to choose I’d pick the DSi version as it trims some fat and focuses the game and experience perfectly: a real treat! You can &lt;a href=&quot;/2021/02/08/a-little-bit-of-nintendo-touch-golf/&quot;&gt;read my review of the DSi verison in an older blog post&lt;/a&gt;.&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;X4ylR2b8uMA&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;music&quot;&gt;Music&lt;/h2&gt;

&lt;p&gt;The music in this series really is some of the best FM synth you’ll hear. I can recommend this episode of the &lt;a href=&quot;https://pixelatedaudio.com&quot;&gt;Pixelated Audio podcast&lt;/a&gt; to bring you up to speed.&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;qPoc3Gk_KxM&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;p&gt;A bunch of these games share a common music track—I call it the “T&amp;amp;E SOFT Golf Theme”—arranged differently to suit the host sound system capabilities.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Waialae no Kiseki (SFC)&lt;/li&gt;
  &lt;li&gt;Pebble Beach no Hatou (SFC)&lt;/li&gt;
  &lt;li&gt;Harukanaru Augusta (PC-98, X68000, FMT)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://youtube.com/playlist?list=PLfF-zlMNYMd-C63YB4qP1FtJxXGWFwuJf&quot;&gt;Here’s a playlist&lt;/a&gt; of the 5 versions.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;box-art&quot;&gt;Box Art&lt;/h2&gt;

&lt;p&gt;Perhaps the box artwork is the most striking thing about the Mega Drive versions, with its classic typography-led design, strong brush-stroked calligraphic logo, and the intriguing hand-painted golf scene.&lt;/p&gt;

&lt;p&gt;These paintings obviously represent the real life courses, but further investigation revealed that not only did they show a particular hole but they also showed a famous event that happened on the course (with the obvious exception of the fictional Devil’s Course).&lt;/p&gt;

&lt;p&gt;I don’t have much knowledge of real life golf events but I managed to figure them out, I think, using my Google-fu. Though I’d still love to know who painted them!?&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;harukanaru-augusta&quot;&gt;Harukanaru Augusta&lt;/h2&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/new-3d-golf-simulation-harukanaru-augusta.jpg#box&quot; alt=&quot;Augusta box art&quot; title=&quot;Harukanaru Augusta: Jack Nicklaus at Augusta 18th, Masters, 1986&quot; /&gt;&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;vbsVaBDRtBI&quot; params=&quot;start=7676&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;pebble-beach-no-hatou&quot;&gt;Pebble Beach no Hatou&lt;/h2&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/new-3d-golf-simulation-pebble-beach-no-hatou.jpg#box&quot; alt=&quot;Pebble Beach box art&quot; title=&quot;Pebble Beach no Hatou: Jack Nicklaus, Pebble Beach 7th, US Open, 1972&quot; /&gt;&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;xBchbdr4L1U&quot; params=&quot;start=1595&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;waialae-no-kiseki&quot;&gt;Waialae no Kiseki&lt;/h2&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/new-3d-golf-simulation-waialae-no-kiseki.jpg#box&quot; alt=&quot;Waialae box art&quot; title=&quot;Waialae no Kiseki: Isao Aoki at Waialae 18th, Hawaiian Open, 1983&quot; /&gt;&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;sdQFVTmqLl4&quot; params=&quot;start=71&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;devils-course-wicked-18&quot;&gt;Devil’s Course (Wicked 18)&lt;/h2&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/new-3d-golf-simulation-devils-course.jpg#box&quot; alt=&quot;Devil&apos;s Course box art&quot; title=&quot;Devil&apos;s Course (Wicked 18) is a very difficult fictional/fantasy course&quot; /&gt;&lt;/p&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 09 Nov 2024 20:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/11/09/new-3d-golf-simulation-video-game-series/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/11/09/new-3d-golf-simulation-video-game-series/</guid>
        </item>
      
    
      
        <item>
          <title>Word Counter extension for Nova editor</title>
          <description>&lt;p&gt;So the &lt;a href=&quot;/2024/10/24/macro-extension-for-nova-editor/&quot;&gt;Macro extension&lt;/a&gt; and &lt;a href=&quot;/2024/10/17/extensions-for-nova-editor/&quot;&gt;a bunch of smaller extensions&lt;/a&gt; were supposed to be it, but it’s so much fun to create these that whenever I get an idea for an extension I can’t help making it.&lt;/p&gt;

&lt;p&gt;This time I wanted to keep track of how many times I’m calling certain functions in my code. That’s quite a niche requirement so I made a more general purpose word counter with sidebar, thresholds and coloured blobs!&lt;/p&gt;

&lt;p&gt;You can configure a list of words to count, and the thesholds that will trigger the grey/green/yellow/red coloured blobs, on a per-project basis using the workspace &lt;em&gt;Project Settings…&lt;/em&gt; panel.&lt;/p&gt;

&lt;p&gt;And you can double-click on a word in the sidebar to search the current document for it. This feature uses AppleScript so you’ll need to give Nova permissions, though it should prompt you to do that if it doesn’t have them already.&lt;/p&gt;

&lt;p&gt;Note: the screenshot below is slightly old as I’ve since refined the images in the extension.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/nova-word-counter.png&quot; alt=&quot;PNG&quot; title=&quot;Counting some Playdate SDK specific function names&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;downloads&quot;&gt;Downloads&lt;/h2&gt;

&lt;p&gt;You can download it at: &lt;a href=&quot;https://extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.wordcounter/&quot;&gt;extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.wordcounter/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And the &lt;a href=&quot;https://github.com/gingerbeardman/Word-Counter&quot;&gt;source code is available on GitHub&lt;/a&gt; and PRs are more than welcome!&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 27 Oct 2024 17:12:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/10/27/word-counter-extension-for-nova-editor/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/10/27/word-counter-extension-for-nova-editor/</guid>
        </item>
      
    
      
        <item>
          <title>Macro extension for Nova editor</title>
          <description>&lt;p&gt;After creating &lt;a href=&quot;/2024/10/17/extensions-for-nova-editor/&quot;&gt;a bunch of smaller Nova Extensions quite quickly&lt;/a&gt; I wondered how far I could push things, just as a personal challenge. I had the idea of implementing a Macro text recording and playback system. There was something similar in TextMate editor, and whilst the Nova API doesn’t currently allow as sophisticated a system I thought it was something still worth exploring.&lt;/p&gt;

&lt;p&gt;Design of the system was incremental, with improvements and simplifications that came about through using it. It took a few aborted attempts to land on a good mechanism of recording and playing back “actions”, which currently encompass:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;insertions&lt;/li&gt;
  &lt;li&gt;deletions&lt;/li&gt;
  &lt;li&gt;cursor position changes&lt;/li&gt;
  &lt;li&gt;selection changes&lt;/li&gt;
  &lt;li&gt;selection replacements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I encode these changes with some simple JSON markup. Insertions are represented as text, and replacements as pairs of text, whilst deletions, cursor position changes, and selection changes are represented as numbers where positive means “to the right” and negative means “to the left”. It’s a simple system but should prove to be expandable if the Nova API is expanded to include extra capabilities, such as hooking into the &lt;em&gt;Find&lt;/em&gt;, &lt;em&gt;Files&lt;/em&gt; sidebar, or the &lt;em&gt;Command Palette&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Macro data can end up quite large, as we’re recording single character or position changes, so I added the ability to compress a macro by coalescing actions of the same type into one. A sort of naïve huffman encoding scheme. This makes a huge difference to both size and playback speed.&lt;/p&gt;

&lt;p&gt;You can download the extension at: &lt;a href=&quot;https://extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.Macro/&quot;&gt;extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.Macro/&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;recording&quot;&gt;Recording&lt;/h2&gt;

&lt;p&gt;Recording is done on-demand, only when you want it. A notification will signal recording has begun. When you’ve finished you click the Stop button in the notification and the macro will be automatically saved to the sidebar with a sequential name. You can rename it afterwards if you’d like.&lt;/p&gt;

&lt;p&gt;You can also start the recording using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;+&lt;/code&gt; sidebar icon, or using the command via the Editor menu or &lt;em&gt;Command Palette&lt;/em&gt;, but recording is always stopped through the notification. It took a while to arrive at this mechanism, and for a long time the extension was a lot more complicated and confusing to use.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/nova-macro-extension-record.png&quot; alt=&quot;IMG&quot; title=&quot;Macro recording notification&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;example-macro&quot;&gt;Example Macro&lt;/h2&gt;

&lt;p&gt;Let’s type:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Nova!&amp;lt;move left 1&amp;gt;&amp;lt;select -3&amp;gt;&amp;lt;replace &quot;ova&quot; → &quot;O&quot;&amp;gt;VA&amp;lt;move left 3&amp;gt;&amp;lt;delete 3&amp;gt;ova&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The end result of which is:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Nova!&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If we were to record this, the results would be…&lt;/p&gt;

&lt;p&gt;Raw macro (17 actions):&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Macro 1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;actions&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:[{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;INS&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;N&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;INS&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;o&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;INS&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;v&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;INS&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;a&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;INS&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;!&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;POS&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;direction&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;←&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;count&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;SEL&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;count&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;SEL&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;count&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;SEL&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;count&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;REP&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;old&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ova&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;new&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;O&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;INS&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;V&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;INS&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;A&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;POS&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;direction&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;←&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;count&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;POS&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;direction&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;←&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;count&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;POS&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;direction&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;←&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;count&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;DEL&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;count&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;DEL&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;count&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;DEL&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;count&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;INS&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;o&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;INS&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;v&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;INS&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;a&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}],&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;isExpanded&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Compressed macro (6 actions):&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;INS&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Nova!&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;POS&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;direction&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;←&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;count&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;SEL&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;count&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;-3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;REP&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;old&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ova&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;new&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;O&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;INS&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;VA&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;POS&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;direction&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;←&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;count&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;DEL&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;count&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;INS&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ova&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Compression also helps with readability though I added a function to copy a human-readable version of the macro,which is how the &lt;a href=&quot;#example-macro&quot;&gt;text at the start of this example&lt;/a&gt; was generated.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/nova-macro-extension-anim.gif&quot; alt=&quot;IMG&quot; title=&quot;Playback of the above macro&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;sidebar&quot;&gt;Sidebar&lt;/h2&gt;

&lt;p&gt;Recorded macros live in a bespoke sidebar, and can be expanded or collapsed on demand. This allows us to see each action in the macro and exactly how the compressed version differs. The context menu provides functions to manipulate and manage the macros.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/nova-macro-extension-sidebar.png&quot; alt=&quot;IMG&quot; title=&quot;Macro sidebar with raw and compressed versions, expanded to show all actions&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;context-menu&quot;&gt;Context Menu&lt;/h3&gt;

&lt;p&gt;After a macro is recorded you can manipulate it using the context menu of items in the Macro sidebar:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Replay&lt;/li&gt;
  &lt;li&gt;Compress&lt;/li&gt;
  &lt;li&gt;Duplicate&lt;/li&gt;
  &lt;li&gt;Rename&lt;/li&gt;
  &lt;li&gt;Copy (Compressed)&lt;/li&gt;
  &lt;li&gt;Copy (Raw)&lt;/li&gt;
  &lt;li&gt;Copy (Readable)&lt;/li&gt;
  &lt;li&gt;Delete&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;configuration&quot;&gt;Configuration&lt;/h2&gt;

&lt;p&gt;Recording selections adds extra weight and slowness to a macro, so whilst the extension defaults to recording text selection changes I added the option to switch it off. If you’re only interested in the smallest size macros you can enable automatic compression of every macro which happens as the macro is saved.&lt;/p&gt;

&lt;p&gt;Playback is very quick but in some situations, such as playing back for a screen recording, you might want the text to appear more slowly, so I added a playback speed option.&lt;/p&gt;

&lt;p&gt;Note: if you want to see the smoothest character-by-character playback, you should make sure compression and record selection changes are both switched off.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;improvements&quot;&gt;Improvements&lt;/h2&gt;

&lt;p&gt;There are still some improvements I’d like to make in the future: to be able to more easily see the cursor during playback, and to highlight the current action in the sidebar so you can keep track of progress. We’ll see if/when I get around to those.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/gingerbeardman/Macro&quot;&gt;source code is available on GitHub&lt;/a&gt; and PRs are more than welcome!&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 24 Oct 2024 14:02:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/10/24/macro-extension-for-nova-editor/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/10/24/macro-extension-for-nova-editor/</guid>
        </item>
      
    
      
        <item>
          <title>Extensions for Nova editor</title>
          <description>&lt;p&gt;I’m a big believer in solving problems yourself if it’s possible rather than waiting for app updates that might never arrive. Making extensions for the &lt;a href=&quot;https://nova.app&quot;&gt;Nova editor&lt;/a&gt; that I do most of my programming and blogging in is so much fun! So, here are some of my own creation:&lt;/p&gt;

&lt;p&gt;View all: &lt;a href=&quot;https://extensions.panic.com/extensions/com.gingerbeardman/&quot;&gt;extensions.panic.com/extensions/com.gingerbeardman/&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;yaml-tag-picker&quot;&gt;YAML Tag Picker&lt;/h2&gt;

&lt;p&gt;Allows you to easily select tags for the front matter in your blog posts. It scans your existing posts for tags and presents them in a Choice Palette, making it easy to maintain consistent tagging across your blog. Nice!&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.YAMLTagPicker/&quot;&gt;extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.YAMLTagPicker/&lt;/a&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/yaml-tag-picker.png&quot; alt=&quot;IMG&quot; title=&quot;Searching existing tags for the word “play”&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;markdown-file-linker&quot;&gt;Markdown File Linker&lt;/h2&gt;

&lt;p&gt;Allows you to insert links to local files as Markdown, perfect for linking between articles in your Jekyll blog! Also includes the ability to wrap the current text in a link, and if there’s a URL on the clipboard that’ll be used as the link destination.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.MarkdownFileLinker/&quot;&gt;extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.MarkdownFileLinker/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You choose a local file using the file selector, such as:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/Users/matt/Projects/blog/_posts/2023/2023-11-21-yoyozo-how-i-made-a-playdate-game-in-39kb.md&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And it will be inserted as:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/2023/11/21/yoyozo-how-i-made-a-playdate-game-in-39kb/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’ve selected some text before invoking the extension, you’ll get:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[YOYOZO](/2023/11/21/yoyozo-how-i-made-a-playdate-game-in-39kb/)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For an image you might end up with:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;![IMG](∕images/posts/yoyozo-teaser.gif)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;reindent-o-matic&quot;&gt;Reindent-o-matic&lt;/h2&gt;

&lt;p&gt;Allows you to apply &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.editorconfig&lt;/code&gt; indent rules to the current file, or all files matching specific extensions. Important: changes are applied but not saved, giving you the opportunity to review.&lt;/p&gt;

&lt;p&gt;Useful when reusing code from one project that used space indentation to a new one that uses tab indentation. Ideally Nova should do this automatically, and sometimes it does, but not every time for reasons I can’t figure out.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.Reindent-o-matic/&quot;&gt;extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.Reindent-o-matic/&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;toggle-scroll-bars&quot;&gt;Toggle Scroll Bars&lt;/h2&gt;

&lt;p&gt;Allows you to see the scrollbar at all times. This is useful because the scrollbar also contains source control change markers. With scrollbars always visible you can more easily locate changes across the entire length of your document.&lt;/p&gt;

&lt;p&gt;This has already saved me so much time and effort and I’ve only been using the editor this way for a week. So I thought I’d create an extension to make it easier for other people to enjoy this usability improvement.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.scrollbars/&quot;&gt;extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.scrollbars/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scroll Bars on/off&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/scrollbars-on-minimap-off.png&quot; alt=&quot;on-off&quot; /&gt; &lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/scrollbars-off-minimap-off.png&quot; alt=&quot;off-off&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;br clear=&quot;both&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;unwrap-paragraph&quot;&gt;Unwrap Paragraph&lt;/h2&gt;

&lt;p&gt;OK, I got carried away. This one adds the ability to merge multiple lines of selected text into one.&lt;/p&gt;

&lt;p&gt;This is useful for combining multiple lines of data into one, or reflowing a paragraph of text that has had manual line breaks applied such as something pasted from an old email. It also colalesces areas of white space into a single space. So, it’s not just “Join Lines” but something more specific.&lt;/p&gt;

&lt;p&gt;In the &lt;em&gt;TextMate&lt;/em&gt; editor this command is called Unwrap Paragraph, so I’ve kept the same name.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.unwraptext/&quot;&gt;extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.unwraptext/&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;example&quot;&gt;Example&lt;/h2&gt;

&lt;p&gt;Text, before:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;	What 
exactly does  
this   extension	
do with the
text?  🤔
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Text, after:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;What exactly does this extension do with the text? 🤔
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Source code, before:&lt;/p&gt;
&lt;div class=&quot;language-lua highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;mh&quot;&gt;0x050&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;mh&quot;&gt;0x104&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;mh&quot;&gt;0x202&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;mh&quot;&gt;0x050&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;mh&quot;&gt;0x451&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;mh&quot;&gt;0x104&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;mh&quot;&gt;0x505&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;mh&quot;&gt;0x088&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;mh&quot;&gt;0x272&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;mh&quot;&gt;0x104&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;mh&quot;&gt;0x050&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Source code, after:&lt;/p&gt;
&lt;div class=&quot;language-lua highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x050&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x104&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x202&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x050&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x451&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x104&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x505&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x088&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x272&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x104&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x050&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;filter-through-command&quot;&gt;Filter Through Command&lt;/h2&gt;

&lt;p&gt;Run terminal commands on selected text. When you need to use a terminal command but you just want the results. The possibilities are endless as command line is your oyster! Comes with a library of useful commands including sort, base64 decode/encode, extract URLs, remove blank lines, count loc, remove HTML tags.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.FilterThroughCommand/&quot;&gt;extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.FilterThroughCommand/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Type your own command&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/nova-filter-through-custom-command.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;br clear=&quot;both&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pick from a library of commands&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/nova-filter-through-command.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;br clear=&quot;both&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;bookmarks&quot;&gt;Bookmarks&lt;/h2&gt;

&lt;p&gt;Bookmark files in the Sidebar for easier management. Ideal if the Files Sidebar is too much, or you want a simpler view of the files you are working on.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.Bookmarks/&quot;&gt;extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.Bookmarks/&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;tag-sync&quot;&gt;Tag Sync&lt;/h2&gt;

&lt;p&gt;Automatic synchronisation of closing tag when editing opening tag. Improve your coding efficiency by ensuring tag pairs stay synchronized while editing markup languages!&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.tagsync/&quot;&gt;extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.tagsync/&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;openscad&quot;&gt;OpenSCAD&lt;/h2&gt;

&lt;p&gt;Adds language support for &lt;a href=&quot;https://openscad.org&quot;&gt;OpenSCAD&lt;/a&gt;: &lt;em&gt;The Programmers Solid 3D CAD Modeller&lt;/em&gt;, including both syntaxes (with highlighting) and completions (with alternate forms).&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.openscad/&quot;&gt;extensions.panic.com/extensions/com.gingerbeardman/com.gingerbeardman.openscad/&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;macro&quot;&gt;Macro&lt;/h2&gt;

&lt;p&gt;Text editing recording and playback system. This one &lt;a href=&quot;/2024/10/24/macro-extension-for-nova-editor/&quot;&gt;has its own blog post&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;word-counter&quot;&gt;Word Counter&lt;/h2&gt;

&lt;p&gt;Count multiple words and have their tally displayed in the sidebar. This one also &lt;a href=&quot;/2024/10/27/word-counter-extension-for-nova-editor/&quot;&gt;has its own blog post&lt;/a&gt;.&lt;/p&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 17 Oct 2024 20:47:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/10/17/extensions-for-nova-editor/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/10/17/extensions-for-nova-editor/</guid>
        </item>
      
    
      
        <item>
          <title>Automating the most annoying aspects of blogging</title>
          <description>&lt;p&gt;Back in 2021 I had a look around and decided to base this incarnation of my blog on an open-source &lt;a href=&quot;https://jekyllrb.com&quot;&gt;Jekyll&lt;/a&gt; theme called “&lt;a href=&quot;https://github.com/ahmadajmi/type&quot;&gt;Type&lt;/a&gt;”, though I’ve changed and added so much it’s quite some distance from the original as it stands today. As I added blog posts the performance became much worse. Initially I blamed Jekyll for this, until I took a closer look. What I learned was that the blog theme did some things in sub-optimal ways, so over the course of 2024 I have corrected as many of them as I can. Build time dropped from ~12 seconds to ~1 second.&lt;/p&gt;

&lt;p&gt;My fixes and optimisations included:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Optimised SASS to compile once in plugin rather than header of every page (23 Feb)&lt;/li&gt;
  &lt;li&gt;Optimised all includes and templates to reduce build time (19 Aug)&lt;/li&gt;
  &lt;li&gt;Improved “noun” replacement, which are automatically-emphasised words (3 Sep)&lt;/li&gt;
  &lt;li&gt;Better YouTube embeds using lite-yt-embed (11 Sep)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And my additions along the way:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Multi-carousel support (14 Jul)&lt;/li&gt;
  &lt;li&gt;Automatic transformation of local images urls to CDN urls (19 Aug)&lt;/li&gt;
  &lt;li&gt;Automatic smart quotes in post titles (19 Aug)&lt;/li&gt;
  &lt;li&gt;Added OpenSearch to allow searching blog from address bar (15 Sep)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You might ask… what’s left to do? Not much I reckon. So I took a closer look at what is involved in me creating a blog post and made a list of the most repetitive, awkward or error prone tasks:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Entering links, partcularly links to other blog posts&lt;/li&gt;
  &lt;li&gt;Entering tags, going from memory or using search across project&lt;/li&gt;
  &lt;li&gt;Getting images onto my CDN server, currently copy by SFTP&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let’s solve all these annoyances!&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;entering-links-and-tags&quot;&gt;Entering links and tags&lt;/h2&gt;

&lt;p&gt;You can read about these two in previous blog posts:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Created &lt;a href=&quot;/2024/10/08/markdown-file-linker/&quot;&gt;Markdown File Linker&lt;/a&gt; to make linking easier (8 Oct)&lt;/li&gt;
  &lt;li&gt;Created &lt;a href=&quot;/2024/10/08/yaml-tag-picker/&quot;&gt;YAML Tag Picker&lt;/a&gt; to make tagging easier (8 Oct)&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;getting-images-onto-my-cdn-server&quot;&gt;Getting images onto my CDN server&lt;/h2&gt;

&lt;p&gt;I was still having to copy my images to my CDN server manually, which was a pain. But the software stack on the server was intimidating. I kept putting it off for a rainy day, but I knew I would eventually get around to automating it.&lt;/p&gt;

&lt;p&gt;The idea was to not upload the images at all, but rather download them to the server directly. I’d use a GitHub Webhook to trigger a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git pull&lt;/code&gt; of the latest files onto my server. It took a few hours and a few attempts, but I finally arrived at a fairly elegant system I’m happy with:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;GitHub Webhook that runs on push event&lt;/li&gt;
  &lt;li&gt;PHP script in web server docker container receives, validates, and creates a trigger file&lt;/li&gt;
  &lt;li&gt;Service on server outside of docker looks for trigger file and does &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git pull&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Note: in January 2025, since this post was originally written, I have simplified the following files after migrating away from web servers in Docker containers to &lt;a href=&quot;https://caddyserver.com&quot;&gt;Caddy server&lt;/a&gt;. Highly recommended!&lt;/p&gt;

&lt;h3 id=&quot;github-webhook&quot;&gt;GitHub Webhook&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Payload URL: https://www.example.com/webhook.php&lt;/li&gt;
  &lt;li&gt;Content type: application/json&lt;/li&gt;
  &lt;li&gt;SSL verification: enabled&lt;/li&gt;
  &lt;li&gt;Which events would you like to trigger this webhook: Just the push event&lt;/li&gt;
  &lt;li&gt;Active: on&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;webhook-receiver-php-script&quot;&gt;Webhook receiver (PHP script)&lt;/h3&gt;

&lt;noscript&gt;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/63e4dc0bce459ad6609c2701963eb61f&quot;&gt;View the source code as a Gist&lt;/a&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;script src=&quot;https://gist.github.com/gingerbeardman/63e4dc0bce459ad6609c2701963eb61f.js&quot;&gt;&lt;/script&gt;

&lt;h3 id=&quot;webhook-git-pull-watcher-shell-script&quot;&gt;Webhook git pull watcher (Shell script)&lt;/h3&gt;

&lt;noscript&gt;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/e1c513c69b9e9d41aa91155893ae7334&quot;&gt;View the source code as a Gist&lt;/a&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;script src=&quot;https://gist.github.com/gingerbeardman/e1c513c69b9e9d41aa91155893ae7334.js&quot;&gt;&lt;/script&gt;

&lt;h3 id=&quot;trigger-system-service&quot;&gt;Trigger (System service)&lt;/h3&gt;

&lt;noscript&gt;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/1ff95ce64a6a255919b8262dd4a21bc7&quot;&gt;View the source code as a Gist&lt;/a&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;script src=&quot;https://gist.github.com/gingerbeardman/1ff95ce64a6a255919b8262dd4a21bc7.js&quot;&gt;&lt;/script&gt;

&lt;h3 id=&quot;access-control&quot;&gt;Access control&lt;/h3&gt;

&lt;noscript&gt;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/23e0da9949a8d41ebd190d60b0bd033b&quot;&gt;View the source code as a Gist&lt;/a&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;script src=&quot;https://gist.github.com/gingerbeardman/23e0da9949a8d41ebd190d60b0bd033b.js&quot;&gt;&lt;/script&gt;

&lt;h3 id=&quot;setup&quot;&gt;Setup&lt;/h3&gt;

&lt;p&gt;You can set up the service using:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo systemctl daemon-reload&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo systemctl start git-pull-watcher&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo systemctl enable git-pull-watcher&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Other commands&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo systemctl restart git-pull-watcher&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo systemctl status git-pull-watcher&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 11 Oct 2024 16:42:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/10/11/automating-the-most-annoying-aspects-of-blogging/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/10/11/automating-the-most-annoying-aspects-of-blogging/</guid>
        </item>
      
    
      
        <item>
          <title>Bender 2: Bend Harder for Playdate</title>
          <description>&lt;p&gt;Back in 2012 I wanted to make a quick game for the &lt;a href=&quot;https://twitter.com/agbicjam&quot;&gt;AGBIC&lt;/a&gt; game jam (A Game By Its Cover; make a game inspired by the imaginary cover art from the &lt;a href=&quot;http://famicase.com&quot;&gt;Famicase&lt;/a&gt; exhibition). There’s only one rule for this game jam, which is taken very seriously: &lt;em&gt;respect the wishes of the original artists, and don’t appropriate their designs without consent&lt;/em&gt;. Otherwise you’re free to do what you want. And you can choose a cover as inspiration for your game from the entire archive of Famicase entries, so every year there are more and more great covers to be inspired by.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;2012&quot;&gt;2012&lt;/h2&gt;

&lt;p&gt;I had a browse of the Famicase entries and picked artwork titled &lt;a href=&quot;https://famicase.com/11/softs/12.html&quot;&gt;Bender&lt;/a&gt;, by 清水昭利 Akitoshi Shimizu, from the 2011 submissions, and set to work… thinking. One morning I had the crazy idea to &lt;a href=&quot;/2024/09/28/a-haze-of-inspiration/&quot;&gt;impose severe constraints to help my ideation&lt;/a&gt;: I should make the game using only CSS transitions (and some simple JavaScript logic to control the game state and flow). I have no idea why this seemed like a good idea, but it worked!&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/bender-2-famicase-2011.jpg&quot; alt=&quot;IMG&quot; title=&quot;Bender Famicase by Akitoshi Shimizu, 2011&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The result of &lt;a href=&quot;https://twitter.com/gingerbeardman/status/227040932028108800&quot;&gt;two days work&lt;/a&gt; was a web game called Bender released 12th July 2012. It was fun to make and devilishly addictive. The &lt;a href=&quot;https://www.gingerbeardman.com/bender/&quot;&gt;web game&lt;/a&gt; still works today, on desktop and mobile, though the controls are prone to getting stuck from time to time for reasons I’ve not looked into.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.gingerbeardman.com/bender/&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/bender-2-web-2012.png&quot; alt=&quot;IMG&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;2022&quot;&gt;2022&lt;/h2&gt;

&lt;p&gt;Fast forward 10 years and I decided to do a pretty straight port of the web game to the &lt;a href=&quot;https://play.date&quot;&gt;Playdate&lt;/a&gt; handheld, that was 20th May 2022. I coded it from memory/feel, just for kicks, not that I had any choice as the available technologies are so different. It was a very bare bones game, with no music and messy code, but it was a test to see if I could release a game in a day. I did.&lt;/p&gt;

&lt;p&gt;Seeing as original Bender web game used CSS for all graphics and animation, and a little JavaScript to control the game flow, I had wondered how I would build Bender with the Playdate SDK? I settled on using only primitives and dither patterns to draw all the elements, an approach that I have continued to refine in subsequent games such as my &lt;a href=&quot;https://arstechnica.com/gaming/2023/12/ars-technicas-best-video-games-of-2023/7&quot;&gt;GOTY 2023 accolade&lt;/a&gt; and &lt;a href=&quot;https://play.date/games/community-awards-2023-arcade/&quot;&gt;award winner&lt;/a&gt; &lt;a href=&quot;/2023/11/21/yoyozo-how-i-made-a-playdate-game-in-39kb/&quot;&gt;YOYOZO&lt;/a&gt;, the detailed rendered look of &lt;a href=&quot;/2023/06/26/ball-und-panzer-golf-making-a-playdate-game-in-a-week/&quot;&gt;Fore! Track&lt;/a&gt;, or the stark minimalism of &lt;a href=&quot;https://play.date/games/icarus/&quot;&gt;Super ICARUS&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Each side of the bar is a thick line, with “butt” cap-style. To give the illusion of the bar bending I draw a circle at the origin or common point of both lines. A little bit of trigonometry was all that was needed to get the lines bending correctly. The benefits to this approach are many, such as: no images, no sprites, always smooth edges, better performance. Animation also does not use the Playdate SDK, but rather I track the positions of screen elements and move them based on some rules and algorithms.&lt;/p&gt;

&lt;p&gt;I use dithering to provide visual effects: a animation of snapping and motion blur of the moving line. There’s also a zen mode that disables visual effects and the toasting words (which are randomised from large lists).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/bender-2-playdate-2022.gif#playdate&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;2023&quot;&gt;2023&lt;/h2&gt;

&lt;p&gt;I submitted Bender for consideration for &lt;a href=&quot;https://play.date/games/catalog/&quot;&gt;Playdate Catalog&lt;/a&gt; when the service launched, but it was rejected for being “too simple”. After some lengthy contemplation my takeaway from the rejection was that it meant there was not enough meat on the bones of the game, rather than anything specific against the central gameplay mechanic which is beautifully simple.&lt;/p&gt;

&lt;p&gt;Fair point. Though I did say I would expand the game, add music and so on, I learned that it’s difficult for people to imagine how you’re going to expand on a simple concept. You need to show them. It took many months—about a year and a half—for me to find the time and energy to revisit Bender.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;2024&quot;&gt;2024&lt;/h2&gt;

&lt;p&gt;The end result is &lt;em&gt;Bender 2: Bend Harder&lt;/em&gt;. The new game has been remade, from scratch, right down to the fonts. And it’s packed with new things: friendlier gameplay, more obvious goals, multiple game modes, a deeper scoring system, awards/achievements multiple secrets/easter eggs, online score boards, improved graphics, dynamic music and sound including elements that react to the beat of the music, an imaginary scenario to provide a bit of world-building, and much more besides! At ~2000 lines the source code is over 4 times the length of the first version’s ~500 lines, just to give you an idea of how much more logic there is in the new game. Not that lines of code is a good metric, but you get my point. There is much new!&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;There are elements to the game that I would usually disclose the technical details of—my process, tooling—but I’m currently doing my utmost to protect my “vibe” so that won’t happen today. This is why we can’t have nice things. Maybe at some point in the future, but no promises.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Anyway, I’m really happy how this game has turned out. Can’t wait to see some activity on the leaderboards! Get it at &lt;a href=&quot;https://play.date/games/bender-2-bend-harder/&quot;&gt;play.date/games/bender-2-bend-harder/&lt;/a&gt; and I’ll see you in the high scores!&lt;/p&gt;

&lt;p&gt;As usual, promo artwork is by &lt;a href=&quot;https://www.instagram.com/vxclhd/&quot;&gt;vxcl&lt;/a&gt; with 1-bit equivalents drawn by me.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“If at first you don’t succeed, try, try again.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/bender-2-bend-harder.gif#playdate&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;my-other-games-for-playdate&quot;&gt;My other games for Playdate&lt;/h2&gt;

&lt;p&gt;This brings my total of games on Playdate Catalog to 5, the others being:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/11/21/yoyozo-how-i-made-a-playdate-game-in-39kb/&quot;&gt;YOYOZO&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;Best Games of 2023 (Ars Technica)&lt;/li&gt;
      &lt;li&gt;Best Arcade Game (Playdate Community Awards 2023)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/04/13/sparrow-solitaire-for-playdate/&quot;&gt;Sparrow Solitaire&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;Best Puzzle Game (Playdate Community Awards 2023)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/06/26/ball-und-panzer-golf-making-a-playdate-game-in-a-week/&quot;&gt;Fore! Track&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;the first &lt;a href=&quot;/2023/07/09/the-first-colour-playdate-game/&quot;&gt;colour&lt;/a&gt; Playdate game?&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://play.date/games/icarus/&quot;&gt;Super ICARUS&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;an innovative hybrid survival-racing game&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also have a bunch of other games at &lt;a href=&quot;https://gingerbeardman.itch.io&quot;&gt;gingerbeardman.itch.io&lt;/a&gt; for both Playdate and Mac/Windows.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 08 Oct 2024 17:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/10/08/bender-2-bend-harder-for-playdate/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/10/08/bender-2-bend-harder-for-playdate/</guid>
        </item>
      
    
      
        <item>
          <title>A haze of inspiration</title>
          <description>&lt;p&gt;A long time ago in a galaxy far, far away I had to give an impromptu presentation about something I didn’t know much about. The goal of the task was to see how well we could ad-lib a presentation under pressure. Everybody in the room had to think of a topic whilst waiting for our turn. The person next to me couldn’t think of anything and asked me what I had thought of, I said “the off-side rule” (it’s a football/soccer thing, don’t worry about it). Then that person was called before me and proceeded to give a presentation about… the off-side rule. I was mortified, and when my turn came I was still so shell shocked that I can’t remember what other topic I picked was, or even how the rest of the day went. Afterwards I chatted with the person—at the time we were good friends and continue to be to this day—who told me when their name was called “a haze of inspiration” came over them and the only thing they could think about was the topic I’d just mentioned. And so it was.&lt;/p&gt;

&lt;hr /&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/haze-of-inspiration.webp&quot; alt=&quot;WEBP&quot; title=&quot;“boat sailing in body of water”, photograph by Joel Bengs (courtesy of &amp;lt;a href=&amp;quot;https://unsplash.com/photos/boat-sailing-in-body-of-water-arYiUpN5tZk&amp;quot;&amp;gt;Unsplash&amp;lt;/a&amp;gt;)&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;from-whence-it-came&quot;&gt;From whence it came&lt;/h2&gt;

&lt;p&gt;Just as a haze obscures clear vision, the creative process can blur the lines between our own ideas and those we’ve encountered. We can be inspired by everything around us, in an unconscious way. I’d venture to say that this is the most common form of inspiration, you’re just existing and soaking up as much as you can. In some ways it is automatic and unavoidable. As a result, we share a lot of common experiences and so this sort of natural inspiration can lead to the Zeitgeist, with similar ideas emerging simultaneously in different places. A sort of opposite to this is the concept of incremental innovation, where small changes happen to existing ideas that are occasionally enough for it to feel new. And then there are the types of new ideas that can’t be easily found elsewhere, that are provably innovative and totally new. By definition the haze of inspiration is a very grey space, difficult to navigate, and open to interpretation. There’s no absolute right or wrong, unless you are in a position to flex legal muscles. Below is my own interpretation of how I see things, it’s expected that you won’t agree with all of it.&lt;/p&gt;

&lt;h2 id=&quot;navigating-the-haze&quot;&gt;Navigating the haze&lt;/h2&gt;

&lt;p&gt;I often pause and examine my own creative process. This serves a number of purposes: it helps me notice opportunities for improvement that might otherwise be missed along the way. If my head is down, I might not notice that I can save time by refining my workflow, or gain new understanding by looking at a problem from a different angle or through a different lens.&lt;/p&gt;

&lt;p&gt;Tracking or keeping a record of things you find inspiring is very useful. Some might use Pinterest, bookmark managers, scrap books, print outs, notebooks, folders of saved files. Whatever works for you, really.&lt;/p&gt;

&lt;p&gt;At this point I feel it’s worth mentioning the challenge of distinguishing between inspiration and imitation. We can all be inspired by something, but how we choose to act on the inspiration can be a challenge. How much you take away from the inspiration might mean you cross the line into imitation. The difference between the two is open to interpretation, and legally it’s a very grey area, so it requires understanding of our own moral compass. More on that later. But for me the difference can be summarised by how comfortable I am in the knowledge that I put enough of myself into the idea, then I’m inspired. If I don’t put enough of myself into the idea, then I would call it imitation.&lt;/p&gt;

&lt;h2 id=&quot;original-thinking&quot;&gt;Original thinking&lt;/h2&gt;

&lt;p&gt;Thinking can be difficult, and coming up with original thoughts is even more difficult. One could ask if it’s even possible at all to have an original thought? I think it is, though it’s often said that “&lt;a href=&quot;https://www.youtube.com/watch%3Fv%3DX9RYuvPCQUA&quot;&gt;everything is a remix&lt;/a&gt;”. My personal feeling is that an original thoughts can only come when you take yourself out of the equation. Famous artists used drugs, alcohol, and more. Karl Wallinger of the band World Party (check out the album “Goodbye Jumbo”) famously “&lt;a href=&quot;https://podcasts.apple.com/gb/podcast/darko-audio-podcast/id1368388920?i=1000514052892&quot;&gt;never worked straight&lt;/a&gt;” (~25:30), he would always smoke a joint with the idea being “to get yourself out the fucking way”. John Lennon, too, though perhaps with harder stuff.&lt;/p&gt;

&lt;p&gt;On the other hand Quincy Jones used a technique where he would get himself into what he called “&lt;a href=&quot;https://www.clashmusic.com/features/in-conversation-questlove/&quot;&gt;the alpha state&lt;/a&gt;”, a kind of liminal space between being asleep and awake, where he would routinely have all of his best ideas. Miles Davis used &lt;a href=&quot;https://coppice-gate.com/film/402/miles-davis-the-first-improvised-music-film-soundtrack&quot;&gt;improvisation&lt;/a&gt;. Salvador Dalí used a technique he called “&lt;a href=&quot;https://mma.pages.tufts.edu/fah188/clifford/Subsections/Paranoid%20Critical/paranoidcriticalmethod.html&quot;&gt;paranoiac-critical method&lt;/a&gt;” to access his subconscious through fear. David Lynch uses &lt;a href=&quot;https://www.vice.com/en/article/david-lynch-wants-you-to-meditate-maybe-make-a-lamp-during-self-isolation/&quot;&gt;meditation&lt;/a&gt;. Brian Eno used a deck of cards called “&lt;a href=&quot;https://en.wikipedia.org/wiki/Oblique_Strategies&quot;&gt;Oblique Strategies&lt;/a&gt;” to add constraints to the creative process. David Bowie used a “&lt;a href=&quot;https://en.wikipedia.org/wiki/Cut-up_technique&quot;&gt;cut-up technique&lt;/a&gt;” (also called découpé), adapted from one used by William S. Burroughs but with much older origins, where existing works were cut up and rearranged into new works. My current favourite pop star, Lo Lauren, &lt;a href=&quot;https://www.youtube.com/watch?v=infNIRbESVE&amp;amp;list=PLCu6QvIFB9Chc-pTB0tWnUv67ufwVz8zO&amp;amp;pp=iAQB&quot;&gt;creates songs in 10 minutes&lt;/a&gt; over a found beat using three suggested words to focus the topic of the lyrics. It’s encouraging to realise that there is more than one method and that you can most likely find one that works for you.&lt;/p&gt;

&lt;p&gt;My own method is to recede into the haze itself, into darkness. The simple act of laying down in a quiet room, and closing my eyes for a few minutes is usually enough for me to navigate through the haze and come out with an original idea, solution to a problem, name of a new product, or whatever.&lt;/p&gt;

&lt;h2 id=&quot;research&quot;&gt;Research&lt;/h2&gt;

&lt;p&gt;For me, outside of the actual act of creation, this is most fun part of the creative endeavour. The world is literally your oyster. Given that 99% of stuff happened in the past, I prefer to consult historic sources. Old magazines, books, interviews, and of course the video games and music I grew up with are now old enough to qualify. Ha! The most important thing here is to look outside your field of view. It’s easy to be inspired by the things right in front of you, but more difficult—and more rewarding—to be inspired by things further afield. Reach deeper, go further, get outside your comfort zone, take the road less travelled.&lt;/p&gt;

&lt;p&gt;Once inspired, or locked on to an idea, it’s important to do some due diligence to check that it’s unique, or not protected by any laws or copyright, or even just to check that a name is free enough to be used. Domain names can be taken, hashtags can be already used. My funniest example is when I was originally calling my hit game &lt;a href=&quot;/2023/11/21/yoyozo-how-i-made-a-playdate-game-in-39kb/&quot;&gt;YOYOZO&lt;/a&gt; by another name: YOYOZORA, which is a combination of the words YOYO (the toy) and YOZORA (the Japanese word for night sky). I quickly changed plans when a hashtag search revealed somebody posting dick pics.&lt;/p&gt;

&lt;p&gt;It’s worth noting that some creators intentionally avoid external influences during their creative process, believing this leads to more original work. Nick Cave, for instance, &lt;a href=&quot;https://the-talks.com/interview/nick-cave/&quot;&gt;avoids listening to music while writing&lt;/a&gt; to prevent unconscious imitation. Filmmaker Jim Jarmusch tries not to watch other films, or &lt;a href=&quot;https://cinemontage.org/stranger-than-paradox-jim-jarmusch/&quot;&gt;even the scenes he has already shot&lt;/a&gt;, while working on a project to maintain his unique vision. Even in tech, Steve Jobs was known for his “&lt;a href=&quot;http://www.stephengobeli.com/analysis/not-invented-here/&quot;&gt;not invented here&lt;/a&gt;” syndrome, often preferring to develop ideas from scratch. This approach isn’t about ignoring the world entirely, but about creating a space where your own ideas can flourish without immediate external influence. It’s a delicate balance – you want to be informed, but not overly swayed by what’s already out there.&lt;/p&gt;

&lt;h2 id=&quot;attribution&quot;&gt;Attribution&lt;/h2&gt;

&lt;p&gt;By now you’ll know in your heart if what you’re dealing with is imitation or inspiration. What next? Methods of attribution might include: direct credit, “inspired by”, footnotes, a mention, etc. Or if the inspiration is barely visible at all there might be no attribution needed. There’s that moral compass again.&lt;/p&gt;

&lt;p&gt;Attribution can add value to your work, as it shows not only are you compassionate and considerate, but that you value the creativity of other people. In some fields, like music and visual arts it’s perhaps more difficult to do some forms of attribution. You can’t put a list of credits on a painting or in an audio recording, but you can put them in supporting material. There’s always a way.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I won’t spend much time on the topic of “AI”, or to be more precise “generative tools”, but it’s worth mentioning them briefly at this point as they lack any method of attribution which of course is a problem. How big a problem depends on how much originality is in the result and that is a very difficult thing to measure, though I would say not impossible at least regarding the series of prompts that led to the output. Anyway, the results from the use of such tools is also open to interpretation and perhaps this is even more of a grey area than the haze of inspiration itself.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;communication&quot;&gt;Communication&lt;/h2&gt;

&lt;p&gt;So how do you figure out how best to attribute? By reaching out and having a conversation. But that’s easier said than done, I think.&lt;/p&gt;

&lt;p&gt;I’ve never gone so far as to write a formal letter or anything like that, I’ve been more casual about it. I’ve written to game developers whose games I wanted to port. Having something for them to see is always good—a prototype—and explaining the expectations and reach of the agreement will make everybody feel comfortable. There will surely be some anxiety and reticence for an idea to be taken by somebody else. In my experience I try to frame it in as positive a way as possible. Answer the questions they might have before they even have a chance to think them.&lt;/p&gt;

&lt;p&gt;Timing is always key. I always make such an approach as soon as possible. With my game &lt;a href=&quot;/2023/06/26/ball-und-panzer-golf-making-a-playdate-game-in-a-week/&quot;&gt;Fore! Track&lt;/a&gt;, I contacted the developer whose game I was inspired by as soon as I had a prototype up and running. At that point, if they’d have objected to the idea I wouldn’t have lost much time. If I’d have contacted them with a finished game, it might not have made much difference to their decision making process, but I would have had more invested in it and more to lose. Contacting somebody with only an idea for me feels like the wrong way to go about it, as &lt;a href=&quot;https://sive.rs/multiply&quot;&gt;ideas are relatively easy and execution is everything&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;With such discussions it’s important to have open conversations, which will can lead to mutual understanding and respect. Leave your ego at the door and bring truthfulness, compassion, open-mindedness and you will be rewarded. Misunderstandings will inevitably happen through the course of the conversation, but by being open both parties can rest assured that there will only be movement towards resolution rather than escalation.&lt;/p&gt;

&lt;p&gt;By far the best outcome of such open discussions is the fact that two heads are better than one so the solution is almost always better than the original idea or approach. This means it’s in your own interests to have these sorts of conversations as often as possible. They might lead to better ideas, collaboration, partnerships, refinement, suggestions you would never have thought of, about turns, and of course rejection.&lt;/p&gt;

&lt;p&gt;Rejections are always hard to take, but I’m a firm believer that with time, and enough water under the bridge, that newer and stronger ideas will emerge. For me that can take weeks, months, even years. But every time it happens I think “the Universe provides” and smile.&lt;/p&gt;

&lt;h2 id=&quot;ethical-considerations&quot;&gt;Ethical considerations&lt;/h2&gt;

&lt;p&gt;So, about that moral compass I keep mentioning. Ideas are more than a feeling, especially when executed and turned into something that can be seen, heard, played. They turn from intangible to tangible, and this process is guided by your moral compass.&lt;/p&gt;

&lt;p&gt;When it comes to that “haze of inspiration”, intellectual integrity is the needle on your moral compass. It helps you navigate through the fog without stepping on anyone’s toes. It’s about asking yourself not whether you could use an idea, but whether you should. It’s about being upfront about what inspired you, maybe asking for a thumbs-up if you’re borrowing heavily from someone else’s work, and generally just being a decent human in the creative playground. By sticking to these principles, you’re not just keeping your own nose clean. You’re helping to create an environment where ideas can bounce around freely, where people aren’t afraid to share their cool thoughts, and where everyone gets their due credit. It’s like keeping the idea ecosystem healthy, you know?&lt;/p&gt;

&lt;p&gt;Intellectual integrity is really just about not being a jerk with other people’s ideas. It’s about giving credit where it’s due, trying to get your facts straight, and not twisting things to fit your narrative. It’s also about owning your work, warts and all. If you messed up or your info isn’t 100% solid, just say so. Nobody’s perfect, right? And here’s an important addition: be open to other viewpoints. Just because someone disagrees with you doesn’t mean they’re wrong (even if you really, really think they are).&lt;/p&gt;

&lt;p&gt;All ideas build on previous work. I subscribe to the idea that everything is a remix, and I also know that being cool, kind, and considerate costs nothing. Being uncool, unkind, or inconsiderate can cost you more energy in the long run. Time teaches that particular lesson, so consider it being mentioned here a free power-up. We are lucky enough to be able to stand on the shoulders of giants, so it’s important to not make a mess whilst we’re up there.&lt;/p&gt;

&lt;h2 id=&quot;personal-growth&quot;&gt;Personal growth&lt;/h2&gt;

&lt;p&gt;Growing is hard and with it come a lot of pains. Road blocks, wrong turns, bad luck, but hopefully it will trend towards progress.&lt;/p&gt;

&lt;p&gt;One key aspect of growth is synthesis. Plants turn light energy into chemical energy through photosynthesis. The output is vastly different to the input. I think this is a useful lens through which to look at techniques for turning influences into something truly novel. You can look at the &lt;a href=&quot;/2023/04/10/where-can-i-see-hokusai-great-wave-today/&quot;&gt;The Great Wave&lt;/a&gt; and print your own version of it if the goal is to imitate it as closely as possible (as &lt;a href=&quot;https://www.youtube.com/playlist?list=PLK-Wicsj5rAasS2g7e-Z9eFUdG6I7ZqED&quot;&gt;David Bull&lt;/a&gt; has done), or you might choose to draw it instead and replace the crests of the wave with bunny rabbits (as &lt;a href=&quot;https://shop.kozyndan.com/products/uprisings-poster&quot;&gt;kozyndan&lt;/a&gt; did), or you might sculpt it from digital clay and add some mahjong tiles to it (like &lt;a href=&quot;/2023/04/13/sparrow-solitaire-for-playdate/&quot;&gt;vxcl did for my game Sparrow Solitaire&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;I like to think of this synthesis as a road—you can turn off at any point but the further you go the more wonderful the sights will be. I’d like to make a short detour to mention constraints and how they can foster creativity. Whilst the road might be long, it’s not sprawling but a single direction. Navigating a complex road system would be much more difficult, so I encourage you to impose additional constraints if there don’t seem to be enough, or if the way forward isn’t clear.&lt;/p&gt;

&lt;p&gt;Any period of not creating that you end up in is just as important as a period of intense creativity that you might rather be in. My favourite quote about this (by BT, the musician; I’m paraphrasing) is that creativity comes in waves, sometimes you’re in the doldrums and not much is happening but there is no doubt that the next wave will arrive at some point, so you just have to be ready to jump on and ride it when it does!&lt;/p&gt;

&lt;p&gt;It’s a fine balance between being influenced and being derivative. Sadly your moral compass is not fitted with a warning alarm of any sort, so you’ll have to rely on your heart, head, and those of others to give you guidance here. Having respect for others’ ideas can be considered a constraint in and of itself and can actually push you to be more innovative. Being derivative is a trap to be avoided, not only would you not gain as much personally from the endeavour but you might also inadvertently dilute the idea, brand, vibe of the originator. You should instead consider the person who has inspired you as a mentor, supporter, team mate, power-up, voice of reason, or even shoulder to cry on. The important take-away is that they are there to help because, hey, they were there first.&lt;/p&gt;

&lt;h2 id=&quot;embracing-the-future&quot;&gt;Embracing the future&lt;/h2&gt;

&lt;p&gt;With enough searching, or metaphorical travelling, you’ll be able to find your own voice, style, brand, or “vibe” as I prefer to call it. I’m a bit of a hippie at heart. The ultimate goal is to find that rug that really ties the room together. Then cherish it, feed it, sculpt it, even defend it if the need arises. You’ll have the ideas, make a &lt;a href=&quot;https://allaboutstevejobs.com/verbatim/interviews/playboy_1985&quot;&gt;dent in the universe&lt;/a&gt;, and develop a vibe that other people will be influenced by, and hopefully they will take the right path and be inspired by it rather than choose to imitate it. Perhaps that’s the ultimate goal? It’s your turn to set a good example for those that come after you.&lt;/p&gt;

&lt;hr /&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;j29Vjxi_oAg&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;center&gt;Excerpt from &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Big_Lebowski&quot;&gt;The Big Lebowski&lt;/a&gt; (Ethan &amp;amp; Joel Coen, 1998)&lt;/center&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;further-reading&quot;&gt;Further reading&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.goodreads.com/book/show/60965426-the-creative-act&quot;&gt;The Creative Act: A Way of Being&lt;/a&gt; (Rick Rubin, 2023)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.goodreads.com/book/show/13099738-steal-like-an-artist&quot;&gt;Steal Like An Artist&lt;/a&gt; (Austin Kleon, 2021)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.goodreads.com/book/show/10770576-the-ecstasy-of-influence&quot;&gt;The Ecstasy of Influence&lt;/a&gt; (Jonathan Lethem, 2011)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://sive.rs/multiply&quot;&gt;Ideas Are Just a Multiplier of Execution&lt;/a&gt; (Derek Sivers, 2005)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.goodreads.com/book/show/8083765-think-like-da-vinci&quot;&gt;Think Like Da Vinci&lt;/a&gt; (Michael J. Gelb, 1998)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.goodreads.com/book/show/18144590-the-alchemist&quot;&gt;The Alchemist&lt;/a&gt; (Paulo Coelho, 1988)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.goodreads.com/book/show/20425787-oblique-strategies&quot;&gt;Oblique Strategies&lt;/a&gt; (Brian Eno &amp;amp; Peter Schmidt, 1975–2001)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.goodreads.com/book/show/780304.Design_Methods&quot;&gt;Design Methods&lt;/a&gt; (John Chris Jones, 1970–1992)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.hermanmiller.com/stories/why-magazine/design-q-and-a-charles-and-ray-eames/&quot;&gt;Design Q &amp;amp; A&lt;/a&gt; (Charles &amp;amp; Ray Eames, 1969–1972)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.goodreads.com/book/show/157993.The_Little_Prince&quot;&gt;The Little Prince&lt;/a&gt; (Antoine de Saint-Exupéry, 1943)&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;p&gt;Thanks to vivarado for feedback on this piece ahead of publication.&lt;br /&gt;
And to Nick, Charlie, Jan and Neil for feedback that led to later revisions.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 28 Sep 2024 17:46:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/09/28/a-haze-of-inspiration/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/09/28/a-haze-of-inspiration/</guid>
        </item>
      
    
      
        <item>
          <title>Moai-chan-dise</title>
          <description>&lt;p&gt;Let’s celebrate!&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;we just hit 1000 games at &lt;a href=&quot;https://moai.games&quot;&gt;my database of moai in video games&lt;/a&gt; 🗿&lt;/li&gt;
  &lt;li&gt;today is Fiestas Patrias (Independence Day) in Chile 🇨🇱&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So here’s some “Moai-chan-dise” ✨&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;t-shirts and stickers in both silly and serious styles&lt;/li&gt;
  &lt;li&gt;special “relaxing” sticker by &lt;a href=&quot;https://www.instagram.com/vxclhd/&quot;&gt;@Vxcl&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;t-shirts&quot;&gt;T-shirts&lt;/h2&gt;

&lt;p&gt;Various sizes and colours.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gingerbeardman.creator-spring.com/listing/moai-serious-tee&quot;&gt;gingerbeardman.creator-spring.com/listing/moai-serious-tee&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gingerbeardman.creator-spring.com/listing/moai-silly-tee&quot;&gt;gingerbeardman.creator-spring.com/listing/moai-silly-tee&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div id=&quot;carousel0&quot; class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0b&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/moai-games-heather-serious.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/moai-games-heather-serious.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/moai-games-heather-silly.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/moai-games-heather-silly.png&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0b&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 100%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2 {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;#carousel0 .carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;stickers&quot;&gt;Stickers&lt;/h2&gt;

&lt;p&gt;3-inch longest side, on clear vinyl.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gingerbeardman.creator-spring.com/listing/moai-serious-sticker&quot;&gt;gingerbeardman.creator-spring.com/listing/moai-serious-sticker&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gingerbeardman.creator-spring.com/listing/moai-silly-sticker&quot;&gt;gingerbeardman.creator-spring.com/listing/moai-silly-sticker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div id=&quot;carousel1&quot; class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel1&quot; id=&quot;1a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel1&quot; id=&quot;1b&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;1b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;1b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;1a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;1a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/moai-games-sticker-serious.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/moai-games-sticker-serious.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/moai-games-sticker-silly.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/moai-games-sticker-silly.png&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;1a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;1b&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 100%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2 {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;#carousel1 .carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;special-edition-sticker&quot;&gt;Special Edition Sticker&lt;/h2&gt;

&lt;p&gt;3-inch longest side, on clear vinyl.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gingerbeardman.creator-spring.com/listing/moai-relaxing-sticker&quot;&gt;gingerbeardman.creator-spring.com/listing/moai-relaxing-sticker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/moai-games-sticker-relaxing.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;alt-store&quot;&gt;Alt Store&lt;/h2&gt;

&lt;p&gt;Some buyers may choose to buy from my alternate web store which ships from the UK.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tshirtstudio.com/marketplace/gingerbeardman&quot;&gt;www.tshirtstudio.com/marketplace/gingerbeardman&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This store has more limited colour choices, though you can edit that during checkout. YMMV.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 18 Sep 2024 19:19:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/09/18/moai-chan-dise/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/09/18/moai-chan-dise/</guid>
        </item>
      
    
      
        <item>
          <title>This behavior is by design</title>
          <description>&lt;p&gt;Back in the mid-1990s I was using Windows 95/98 and running up against bugs, problems, driver issues, unexpected things happening. I would often end up on the Microsoft Knowledge Base support web pages, where the issue would often be accompanied by the line “&lt;a href=&quot;https://support.microsoft.com/en-gb/topic/you-can-change-the-desktop-wallpaper-setting-after-administrator-selects-prevent-changing-wallpaper-option-in-group-policy-e3af8a03-69f5-e320-42dc-15702ba5375c&quot;&gt;This behavior is by design&lt;/a&gt;”, which remains in use to this very day.&lt;/p&gt;

&lt;p&gt;This mantra has stuck with me over the years, and it came to light in a recent discussion about the design of &lt;a href=&quot;https://en.wikipedia.org/wiki/Lucas_Pope&quot;&gt;Lucas Pope&lt;/a&gt;’s &lt;a href=&quot;https://play.date/games/mars-after-midnight/&quot;&gt;Mars After Midnight&lt;/a&gt; for the &lt;a href=&quot;https://play.date&quot;&gt;Playdate&lt;/a&gt; handheld game console. It has a black interstitial screen between some scenes, which was enough to get me thinking about the intent behind the design of a screen that contains …nothing at all.&lt;/p&gt;

&lt;h2 id=&quot;to-be-or-not-to-be&quot;&gt;To be or not to be&lt;/h2&gt;

&lt;p&gt;I’m as guilty as anybody in wondering why certain things are how they are in the software, apps, or games I’m using. It’s a fundamental truth about software development that often goes unnoticed by end users: every aspect of computer software is the result of deliberate human decisions, from the broadest feature sets right down to the placement of individual pixels.&lt;/p&gt;

&lt;p&gt;This intentionality in software design has profound implications. It means that the user experience—whether frustrating or delightful—stems from choices made by developers, designers, product managers, and perhaps even the users themselves. How enjoyable or not the software is to use, the accessibility (or lack thereof) of user interfaces, and even the bugs and glitches we encounter are all products of the human decision-making process. This perspective challenges the notion that technology is impersonal, as there are human minds and motivations behind every aspect.&lt;/p&gt;

&lt;p&gt;However, it’s worth noting that while every element is designed, not all design decisions are made with equal deliberation or foresight. Some choices are carefully considered and tested, while others might be rushed, overlooked, or based on flawed assumptions. Additionally, the complexity of modern software means that interactions between different design choices can sometimes lead to unintended consequences. More on that later.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;examples&quot;&gt;Examples&lt;/h2&gt;

&lt;p&gt;Given that we could go on forever with examples, here are 10 off the top of my head:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;whether or not there’s a black screen between scenes in a game&lt;/li&gt;
  &lt;li&gt;size of padding or border around the edge of a dialog box&lt;/li&gt;
  &lt;li&gt;radius of a rounded rectangle&lt;/li&gt;
  &lt;li&gt;spacing or kerning between specific letters of a font&lt;/li&gt;
  &lt;li&gt;aliasing or anti-aliasing around the edge of a circle&lt;/li&gt;
  &lt;li&gt;speed at which an object moves across the screen&lt;/li&gt;
  &lt;li&gt;what happens when you press a button or do an action&lt;/li&gt;
  &lt;li&gt;wording on a menu item or dialog box&lt;/li&gt;
  &lt;li&gt;order of two competing buttons that mean cancel or proceed&lt;/li&gt;
  &lt;li&gt;the number of digits used to represent a high score&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Making a game involves deciding on thousands upon thousands of tiny things like this. I love it.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;happy-accidents&quot;&gt;Happy accidents&lt;/h2&gt;

&lt;p&gt;While most aspects of software are meticulously planned, sometimes unintended behaviors or glitches lead to serendipitous discoveries. These “happy accidents” might result in a breakthrough in design and can become beloved features if developers choose to keep them.&lt;/p&gt;

&lt;p&gt;A famous example is the “creeper” in Minecraft, which resulted from a coding error while creating pigs. The game’s creator, &lt;a href=&quot;https://en.wikipedia.org/wiki/Markus_Persson&quot;&gt;Markus Persson&lt;/a&gt;, liked the mistaken entity so much that he decided to keep and refine it, turning it into one of the game’s most iconic elements. Similarly, the &lt;a href=&quot;https://www.ssbwiki.com/Wavedash&quot;&gt;wavedash technique in Super Smash Bros. Melee&lt;/a&gt; was an unintended consequence of the game’s physics engine, but it became a crucial part of high-level play after creator &lt;a href=&quot;https://www.ssbwiki.com/Masahiro_Sakurai&quot;&gt;Masahiro Sakurai&lt;/a&gt; opted to leave it in. These instances remind us that even in a world of intentional design, there’s room for the unexpected—and the human decision to embrace and incorporate these accidents can lead to some of the most innovative and engaging aspects of software.&lt;/p&gt;

&lt;h2 id=&quot;deciding-by-not-deciding&quot;&gt;Deciding by not deciding&lt;/h2&gt;

&lt;p&gt;Some might argue that you don’t make a choice when you accept the default settings, like the white background and font in a Word document. Or you might make the same argument about using an existing framework, package, template, or SDK in your software. However, I would argue that by using the defaults you are implicitly agreeing with the designers’ choices. As a user you become complicit in the design decisions simply by not changing them.&lt;/p&gt;

&lt;p&gt;This tacit agreement with default settings is another aspect of design that often goes unnoticed, yet it plays a significant role in shaping the end product. Somebody at Microsoft decided that with Office 2007 the default font would become Calibri, replacing Times New Roman which had been the default since forever. There’s no better example of the implications and reach of a single human decision.&lt;/p&gt;

&lt;h2 id=&quot;thinking-about-the-future&quot;&gt;Thinking about the future&lt;/h2&gt;

&lt;p&gt;At the end of the day, computers do only what we direct them to do, so every aspect of software has been touched by the hand of a human. With the rise of machine learning and “AI” coding assistants, that human touch may become increasingly abstracted from view. However, rest assured it is still there. Even in systems that utilize artificial intelligence, humans are designing the algorithms, curating and creating the training data, and making decisions about how to implement and apply these tools. The fundamental truth remains: behind every line of code, every pixel, and every feature, there are human decisions shaping our experiences.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 28 Aug 2024 21:46:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/08/28/this-behavior-is-by-design/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/08/28/this-behavior-is-by-design/</guid>
        </item>
      
    
      
        <item>
          <title>Stapler: I remade a 32 year old classic Macintosh app</title>
          <description>&lt;p&gt;A couple of days ago I was &lt;a href=&quot;https://news.ycombinator.com/item?id=41192547&quot;&gt;reading on Hacker News about a feature in some &lt;em&gt;Linux&lt;/em&gt; window managers where they allow collections of tabs from different apps&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This reminded me of &lt;em&gt;BeOS&lt;/em&gt;, but at the same time it reminded me of an app from 1992 for classic Macintosh called &lt;a href=&quot;https://macintoshgarden.org/apps/stapler-11&quot;&gt;&lt;em&gt;Stapler&lt;/em&gt;&lt;/a&gt;, and how &lt;a href=&quot;https://twitter.com/gingerbeardman/status/1590051288951443456&quot;&gt;I’d talked about that&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/gingerbeardman/status/1596573654674034691&quot;&gt;it’s one-time spiritual successor&lt;/a&gt;, &lt;a href=&quot;http://hasseg.org/launchList/&quot;&gt;&lt;em&gt;LaunchList&lt;/em&gt;&lt;/a&gt;, in the past. These were both similar apps that allowed you to collect and launch all the apps, files, folders, documents, related to a specific task, thus saving time. Or as Ali Rantakari so succinctly put it in 2009: “&lt;a href=&quot;http://hasseg.org/blog/post/249/launching-lots-of-stuff-at-once-on-your-mac/&quot;&gt;Opening a Bunch of Stuff at Once on Your Mac&lt;/a&gt;”.&lt;/p&gt;

&lt;p&gt;So over the past day or so I built my own take on this concept for modern macOS!&lt;/p&gt;

&lt;p&gt;Whilst my app is inspired by both Stapler (right down to the name) and LaunchList, my app adds improvements and features of its own and is more of a hybrid of both. For example, Stapler didn’t have drag and drop and LaunchList didn’t have zero-click auto-launch. My goal was to keep it as simple as possible, but no simpler. To that end, there are no preferences or settings in the app.&lt;/p&gt;

&lt;p&gt;Full details, download, and usage are at the GitHub repo: &lt;a href=&quot;https://github.com/gingerbeardman/stapler&quot;&gt;github.com/gingerbeardman/stapler&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/stapler.png&quot; alt=&quot;PNG&quot; title=&quot;Stapler, for modern macOS (12.0 or newer)&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;tell-me-more&quot;&gt;Tell me more&lt;/h2&gt;

&lt;p&gt;The idea is you set up a Stapler Document per project containing related apps, files, folders, etc. Then you can open them all at once by launching the single document. Each document contains a list of aliases that can be managed, inspected, launched using the app. The key time-saver is that if you launch a Stapler Document directly, all the items in its list will automatically be launched. Cool!&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Work: text editor, run current game, pixel art editor, bitmap font app, todo list&lt;/li&gt;
  &lt;li&gt;Play: Music app, Hacker News app, Twitter app, script to position windows&lt;/li&gt;
  &lt;li&gt;Movie: run Caffeine to keep your computer on, shortcut to put displays to sleep&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s an odd way of thinking about working on a computer—it’s task-based rather than app-based or document-based. Indeed, some might say it’s an outdated way of approaching things. But I’m always &lt;a href=&quot;https://www.youtube.com/playlist?list=PLfF-zlMNYMd_ZioGb0BKdqwWnx0wCDSgU&quot;&gt;banging the drum&lt;/a&gt; about there being so much good stuff that was prematurely left behind along with the memories of System 7 (&lt;a href=&quot;/2021/04/17/turning-an-ipad-pro-into-the-ultimate-classic-macintosh/&quot;&gt;though I still use that&lt;/a&gt;), BeOS, OS/2, Amiga Workbench, GEM and the many alternative desktops of Atari ST, etc. So I thought I’d see if I could walk the walk as well as talk the talk.&lt;/p&gt;

&lt;h2 id=&quot;details&quot;&gt;Details&lt;/h2&gt;

&lt;p&gt;It’s written in Swift and SwiftUI and weighs in at 640KB, about one third of which is a multitude of icon files at many different sizes and resolutions. By creating a Document-Based App you get a ton of functionality for free, such as document/tab/window management, undo/redo (though I still needed to watch for it and refresh the app window), and much more.&lt;/p&gt;

&lt;p&gt;The editor is a native macOS window that’s kind of like list view in a file manager, or a spreadsheet, or a little folder…depending on your point of view. Plus some menu commands and keyboard equivalents. You can have multiple windows open at once, for example one window each for all your common tasks, giving you the ability to launch full tasks or parts of them with minimal effort.&lt;/p&gt;

&lt;p&gt;The items in each list are macOS &lt;a href=&quot;https://eclecticlight.co/2020/05/21/bookmarks-a-type-of-alias-their-access-and-use/&quot;&gt;bookmarks&lt;/a&gt; (sometimes: security scoped bookmarks) which are a type of authorised/verified/secure alias (in fact, they’re still called aliases in the code) that have been around for about 10–15 years. They contain the path plus a bunch more info. As macOS becomes more locked-down the recommended way of accessing files is to retrieve these bookmarks through the normal layers of system permissions and security. Without the bookmarks, for example just using plain text paths, I would not be able to show the full images in Quick Look or easily launch the list items. A key benefit is that the bookmark will still resolve if the file is moved somewhere else on the same disk, or even to a different volume!&lt;/p&gt;

&lt;p&gt;I store the items as JSON in the saved file, simply because I prefer it to XML (which is the main/default option). I wanted the files to still be human readable and editable to a degree.&lt;/p&gt;

&lt;p&gt;The files are launched using the default app specified by that file, so it can be changed on a per-file basis. Individual images might open in an image editor, image viewer, app to run OCR, script to run OCR on it, etc.&lt;/p&gt;

&lt;p&gt;Dealing with files was both cool and annoying, cool that you can get the bookmarks to files so easily, but annoying that you have to jump through so many hoops to work around the security and sandbox protections and end up having to do file requests in a long-winded way, and then there’s having to tweak plist entries to give the app just the right permissions. I’m using some features of SwiftUI that mean the app can’t run on anything before macOS 14 Sonoma. All-in-all I’d say modern macOS development is a bit of a mixed bag. Take it or leave it.&lt;/p&gt;

&lt;h2 id=&quot;icon&quot;&gt;Icon&lt;/h2&gt;

&lt;p&gt;Given that this was a quick weekend project, I kind of lost steam when it came to the icon. I’d love a better app icon, as well as a specific document icon, so &lt;a href=&quot;https://github.com/gingerbeardman/stapler/discussions/24&quot;&gt;new icons are being worked on by a designer&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;bonus-tip&quot;&gt;Bonus tip&lt;/h2&gt;

&lt;p&gt;Make sure to &lt;em&gt;uncheck&lt;/em&gt;: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;System Settings&lt;/code&gt; &amp;gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Desktop &amp;amp; Dock&lt;/code&gt; &amp;gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Windows&lt;/code&gt; &amp;gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Close windows when quitting an application&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then leave the windows of an app open as you quit it. When you next launch the app its windows will restore to their previous size and position. If you close the windows first, then the app will restore to having no windows open.&lt;/p&gt;

&lt;hr /&gt;

&lt;blockquote&gt;
  &lt;h2 id=&quot;thanks&quot;&gt;Thanks&lt;/h2&gt;

  &lt;p&gt;My good friend Dave Roberts (Serendipity App Company) for brainstorming why it was so damned difficult to get the app to react differently when a document was opened from Finder. Rip it up and start again! To Dustin Mierau for kickstarting this trend of remaking forgotten old apps for modern macOS. And eternal thanks to &lt;a href=&quot;https://twitter.com/chrispatterson/status/1822396663425532259&quot;&gt;Chris Patterson&lt;/a&gt; and Ali Rantakari for their apps.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;since-launch&quot;&gt;Since launch&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;support added for macOS 12 and newer (was originally macOS 14 and newer)&lt;/li&gt;
  &lt;li&gt;new features added&lt;/li&gt;
  &lt;li&gt;omissions addressed&lt;/li&gt;
  &lt;li&gt;bug fixes&lt;/li&gt;
  &lt;li&gt;new icon on the way&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;elsewhere&quot;&gt;Elsewhere&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://news.ycombinator.com/item?id=41212193&quot;&gt;Hacker News&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://tidbits.com/2024/09/02/appbits-stapler-opens-multiple-apps-documents-and-folders/&quot;&gt;TidBits&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 10 Aug 2024 21:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/08/10/stapler-i-remade-a-32-year-old-classic-macintosh-app/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/08/10/stapler-i-remade-a-32-year-old-classic-macintosh-app/</guid>
        </item>
      
    
      
        <item>
          <title>TETRIS for Sharp Electronic Notebook (1989)</title>
          <description>&lt;p&gt;Sharp’s Denshi Techō (電子手帳) were a range of electronic notebooks or organisers, marketed as &lt;a href=&quot;https://www.g-mark.org/gallery/winners/9cad4b2a-803d-11ed-862b-0242ac130002&quot;&gt;Bware&lt;/a&gt; in Japan and &lt;a href=&quot;https://en.wikipedia.org/wiki/Sharp_Wizard&quot;&gt;Wizard or IQ&lt;/a&gt; elsewhere. In Japan they won a prestigious &lt;a href=&quot;https://www.g-mark.org/gallery/winners/9cad4b2a-803d-11ed-862b-0242ac130002&quot;&gt;G-mark Good Design Award in 1988&lt;/a&gt; and in the USA &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Wizard_(Seinfeld)&quot;&gt;an episode of Seinfeld&lt;/a&gt; was the prize.&lt;/p&gt;

&lt;p&gt;As well as being &lt;a href=&quot;/2024/05/10/emoji-history-the-missing-years/&quot;&gt;home to some of the earliest emoji&lt;/a&gt; these devices could run software from IC cards (solid state storage). There were about 30 games released in this format, everything from classics like &lt;em&gt;Sokoban&lt;/em&gt;, &lt;em&gt;Shanghai&lt;/em&gt;, &lt;em&gt;Lode Runner&lt;/em&gt;, &lt;em&gt;Puzznic&lt;/em&gt;, &lt;em&gt;Fortress&lt;/em&gt;, to everygreen games like &lt;em&gt;Golf&lt;/em&gt;, &lt;em&gt;Baseball&lt;/em&gt;, &lt;em&gt;Mahjong&lt;/em&gt;, &lt;em&gt;Shogi&lt;/em&gt;, &lt;em&gt;Othello&lt;/em&gt;, &lt;em&gt;Solitaire&lt;/em&gt;, &lt;em&gt;President&lt;/em&gt; (card game), exclusive games like &lt;em&gt;Yamamura Misa Suspense – The Kyoto Zai-tech Murder Case&lt;/em&gt;, and some contemporary titles like &lt;em&gt;Hatris&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;And perhaps most importantly: a version of &lt;em&gt;Tetris&lt;/em&gt;, released in December 1989. &lt;a href=&quot;/2024/06/18/tetris-heavenly-scrolls/&quot;&gt;Tetris-mania was in full effect&lt;/a&gt; and the &lt;em&gt;Game Boy&lt;/em&gt; had recently received its version of &lt;em&gt;Tetris&lt;/em&gt; in April 1989.&lt;/p&gt;

&lt;p&gt;There’s not much about these devices online, particularly in English, but two notable places are: &lt;a href=&quot;https://www.hpmuseum.org/forum/thread-16524.html&quot;&gt;HP Museum forum&lt;/a&gt; (for devices and IC cards) and &lt;a href=&quot;https://forums.insertcredit.com/t/stay-sharp-with-sc-denshi-system-techo-games/2326&quot;&gt;Insert Credit forum&lt;/a&gt; (for games). The devices are common on Japanese auction and selling websites, but the games are becoming more difficult to find.&lt;/p&gt;

&lt;p&gt;This was, as far as I am aware, the second ever handheld version of Tetris. At the time of its release &lt;a href=&quot;https://en.wikipedia.org/wiki/Japanese_asset_price_bubble&quot;&gt;Japan was in the “bubble era” period of economic boom&lt;/a&gt;, which lasted 1986–1991. There was so much money floating around they didn’t know what to do with it, so much of it was ploughed into research and development of crazy things in the fields of consumer electronics, computers, engine technology, vehicle design, book design, software distribution, etc.&lt;/p&gt;

&lt;p&gt;Without this device &lt;a href=&quot;/2024/05/10/emoji-history-the-missing-years/#1994&quot;&gt;there would be no Apple Newton&lt;/a&gt; (which was co-produced by Sharp), without Newton there would be no iPhone, and without iPhone there would be no Android. Evolution is necessary for technological progress.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Thanks to &lt;a href=&quot;https://www.reddit.com/r/OldHandhelds/comments/sr51ze/may_i_present_you_the_whole_family_of_sharp/&quot;&gt;Akuji&lt;/a&gt;, the collector from whom I bought my Sharp PA-8500 and manual, who is a fountain of knowledge regarding IC-capable devices from a range of manufacturers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;tetris-ic-card&quot;&gt;TETRIS IC card&lt;/h2&gt;

&lt;p&gt;Here it is running on my PA-8500:&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 1/1;&quot; videoid=&quot;Rzm5STvVY08&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;analysis&quot;&gt;Analysis&lt;/h2&gt;

&lt;p&gt;This version of the game is documented only briefly on &lt;a href=&quot;https://tetris.wiki/Tetris_(Sharp_Wizard)&quot;&gt;Tetris.wiki&lt;/a&gt; and even less on &lt;a href=&quot;https://harddrop.com/wiki/Tetris_(Sharp_Wizard)&quot;&gt;Hard Drop Tetris Wiki&lt;/a&gt;, so let’s see what we can do to fill in a bit more information.&lt;/p&gt;

&lt;p&gt;The device boots straight into the game, but you can switch to calendar, memo, calculator, or other organiser functions whilst it is running. Switching back to the game causes it to reboot, so games cannot be resumed. You cannot skip the BPS logo, but you can skip the credits.&lt;/p&gt;

&lt;p&gt;The credits and game area are in the left (or top) half of the display because it can also run on devices with a smaller screen of half the size of the one shown.&lt;/p&gt;

&lt;p&gt;There is a touch screen surface on top of where the card slots in and the print on the IC card itself shows the user where to press for each button or function. We can see that the shape of each buttons lines up with the grid of dots of the touch surface. We see the following buttons:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;left&lt;/li&gt;
  &lt;li&gt;right&lt;/li&gt;
  &lt;li&gt;rotate (only counter-clockwise)&lt;/li&gt;
  &lt;li&gt;soft drop&lt;/li&gt;
  &lt;li&gt;start (hi-speed)&lt;/li&gt;
  &lt;li&gt;start (low-speed)&lt;/li&gt;
  &lt;li&gt;pause on/off&lt;/li&gt;
  &lt;li&gt;sound on/off&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Scoring, line-clearing, leveling-up are somewhat odd and non-standard. &lt;a href=&quot;https://tetris.wiki/Tetris_(Sharp_Wizard)&quot;&gt;Tetris.wiki&lt;/a&gt; has those covered. Notably, the play area reduces in size by the bottom lines filling in as you level-up, gradually becoming less tall and more cramped.&lt;/p&gt;

&lt;p&gt;The game seems to have been programmed by BPS (Bullet-Proof Software), though I’m yet to see the manual, but there are no separate programming credits. &lt;!--Perhaps the game code or chips would contain more information.--&gt;&lt;/p&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;
&lt;p&gt;As seen in the video:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;™ and © 1987 Elorg.&lt;br /&gt;
TETRIS licensed to B.P.S.&lt;br /&gt;
© 1989 B.P.S. All Rights Reserved.&lt;br /&gt;
Original concept by Alexey Pazhitnov.&lt;br /&gt;
Original design and program by Vadim Gerasimov.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 04 Aug 2024 16:47:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/08/04/tetris-for-sharp-electronic-notebook-1989/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/08/04/tetris-for-sharp-electronic-notebook-1989/</guid>
        </item>
      
    
      
        <item>
          <title>Search Moby Games using Alfred app</title>
          <description>&lt;p&gt;Earlier this year I made a workflow for &lt;a href=&quot;https://alfred.app&quot;&gt;Alfred app&lt;/a&gt; to allow easy searching of &lt;a href=&quot;https://www.mobygames.com&quot;&gt;Moby Games&lt;/a&gt;. Earlier this week it was released on &lt;a href=&quot;https://alfred.app/workflows/gingerbeardman/moby-games/&quot;&gt;Alfred Gallery&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/alfred-moby-games.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;download&quot;&gt;Download&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://alfred.app/workflows/gingerbeardman/moby-games/&quot;&gt;alfred.app/workflows/gingerbeardman/moby-games/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The workflow &lt;a href=&quot;https://www.mobygames.com/info/api/&quot;&gt;requires an API key that you can get instantly&lt;/a&gt; via your Moby Games profile page.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;If you’d like access to the free API (not-for-profit use), create a MobyGames account and then visit your profile page. Click the ‘API’ link under your user name to sign up for an API key. If you wish to use the API key with an existing game launcher or plugin please specify which launcher and plugin you will be using.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Enter “Alfred app Moby Games workflow”. Then paste your API into the Workflow configuration.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;open-source&quot;&gt;Open Source&lt;/h2&gt;
&lt;p&gt;Suggestions and PRs are welcome at: &lt;a href=&quot;https://github.com/gingerbeardman/alfred-moby-games/&quot;&gt;github.com/gingerbeardman/alfred-moby-games/&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 04 Aug 2024 12:57:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/08/04/search-moby-games-using-alfred-app/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/08/04/search-moby-games-using-alfred-app/</guid>
        </item>
      
    
      
        <item>
          <title>PSA: Internet Archive “glitch” deletes years of user data &amp; accounts</title>
          <description>&lt;p&gt;Recently at Internet Archive a “glitch” (&lt;a href=&quot;https://archive.org/post/2435138/archives-removed-my-account-and-deleted-all-my-uploaded-files&quot;&gt;their choice of word&lt;/a&gt;) deleted a great many accounts, including my account that had been at &lt;a href=&quot;https://archive.org/details/@gingerbeardman&quot;&gt;archive.org/details/@gingerbeardman&lt;/a&gt; since 2015.&lt;/p&gt;

&lt;p&gt;Somewhat surprisingly, they are not reaching out to affected users but rather waiting for them to create new accounts and silently relinking their old uploads &lt;em&gt;only if the new account has same email as the old account&lt;/em&gt;. Otherwise, all profile metadata, favourites, lists, reviews, posts, collections, web archives, and the original username are not being relinked. For me that’s a decade of data…gone.&lt;/p&gt;

&lt;p&gt;The main impact of this massive data loss, that happened around mid-July, is that there are now dead links to old profiles and various old pages all across the internet, plus the additional impact of lost data that is not being recovered. It’s a real blow to the broader preservation effort to know that &lt;em&gt;the one place where data is supposed to be safe forever has had a massive data loss&lt;/em&gt; and the organisation responsible are not taking proactive steps to address the issue fully. I can appreciate addressing it will require a certain amount of time, energy, staff and that’s likely the reason why it’s not being.&lt;/p&gt;

&lt;p&gt;The extent of the data loss and how many accounts were affected is currently unknown. And because they’re not really talking about it, it’s quite difficult to find any concrete information as to the extent or cause of the data loss. You can find &lt;a href=&quot;https://archive.org/iathreads/forum-display.php?forum=general&quot;&gt;more info at the Internet Archive forums&lt;/a&gt;, &lt;a href=&quot;https://www.reddit.com/r/internetarchive/s/YFihAFXzE8&quot;&gt;the /r/internetarchive subreddit&lt;/a&gt;, or your choice of social media where Internet Archive have a presence (Twitter: &lt;a href=&quot;https://twitter.com/search?q=login%20to%3Ainternetarchive&amp;amp;src=typed_query&amp;amp;f=live&quot;&gt;ref1&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/search?q=account%20to%3Ainternetarchive&amp;amp;src=typed_query&amp;amp;f=live&quot;&gt;ref2&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;This story is still developing, and the press have been notified.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;status&quot;&gt;Status&lt;/h2&gt;

&lt;p&gt;Here’s a summary of the current status of the pages related to my deleted account:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Relinked&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/@flicky1984/uploads&quot;&gt;archive.org/details/@gingerbeardman/uploads&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Restored&lt;/strong&gt; (see update below)&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/@gingerbeardman&quot;&gt;archive.org/details/@gingerbeardman&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/fav-gingerbeardman&quot;&gt;archive.org/details/fav-gingerbeardman&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Lost&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;archive.org/details/@gingerbeardman/loans&lt;/li&gt;
  &lt;li&gt;archive.org/details/@gingerbeardman/lists&lt;/li&gt;
  &lt;li&gt;archive.org/details/@gingerbeardman/posts&lt;/li&gt;
  &lt;li&gt;archive.org/details/@gingerbeardman/reviews&lt;/li&gt;
  &lt;li&gt;archive.org/details/@gingerbeardman/collections&lt;/li&gt;
  &lt;li&gt;archive.org/details/@gingerbeardman/web-archive&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;support-up-to-a-point&quot;&gt;Support, up to a point&lt;/h2&gt;

&lt;p&gt;My support experience with Internet Archive was frustrating and ultimately futile. They did not adequately address my queries and requests. Instead they made changes to my account that I did not request, and in the end were pretty clear that they were not going to help me any further. This is such a disappointing stance to take with users who are simply trying to recover their data as a result of loss caused by Internet Archive itself.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/internet-archive-glitch.png&quot; alt=&quot;PNG&quot; title=&quot;“(your data) cannot be restored and, for the last time, the old user name is no longer available.”&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;update-about-turn&quot;&gt;Update, about turn&lt;/h2&gt;

&lt;p&gt;After the second submission of this post by somebody else hit the Hacker News homepage I received an email say that they had “figured a workaround” (their choice of word) and restored my username, which in turn relinked my old favorites. This miracle contradicts the message shown above there they are pretty clear that it was not possible.&lt;/p&gt;

&lt;p&gt;So this means there’s still a bunch of data missing, as detailed above. I suspect this was a one off workaround and that they’re not doing it for everybody affected. YMMV. It wasn’t my intention to try and force action by publicising this event, but it does seem to have had that effect.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;elsewhere&quot;&gt;Elsewhere&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://news.ycombinator.com/item?id=41131388&quot;&gt;Hacker News&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://news.ycombinator.com/item?id=41135450&quot;&gt;Hacker News&lt;/a&gt;  submitted by somebody else (“flagged” for some reason)&lt;/li&gt;
  &lt;li&gt;&lt;del&gt;&lt;a href=&quot;https://lobste.rs/s/82zpde/psa_internet_archive_glitch_deletes&quot;&gt;Lobste.rs&lt;/a&gt;&lt;/del&gt; (deleted by moderator at the request of Internet Archive)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://tildes.net/~tech/1hy4/psa_internet_archive_glitch_deletes_years_of_user_data_accounts#comment-dbpw&quot;&gt;Tildes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://twostopbits.com/item?id=3935&quot;&gt;Two Stop Bits&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 01 Aug 2024 17:16:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/08/01/psa-internet-archive-glitch-deletes-years-of-user-data-and-accounts/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/08/01/psa-internet-archive-glitch-deletes-years-of-user-data-and-accounts/</guid>
        </item>
      
    
      
        <item>
          <title>Taking command of the Context Menu in macOS</title>
          <description>&lt;p&gt;Yesterday on Twitter the inimitable &lt;a href=&quot;https://twitter.com/mortenjust/status/1817991110544744764&quot;&gt;Morten Just posted a preview of a tool he’s created&lt;/a&gt; that wrap ffmpeg to allow movies, such screen recordings but pretty much anything, to be re-encoded to a smaller filesize.&lt;/p&gt;

&lt;p&gt;I responded with a trick I use to do the same on “right-click” context menu using a macOS app called ContextMenu, and others said it was possible to do it using Automator (with some caveats). In this blog post I’ll compare the two.&lt;/p&gt;

&lt;p&gt;But first… let’s talk about how we will make this work.&lt;/p&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;processing-files-through-shell-scripts&quot;&gt;Processing files through shell scripts&lt;/h1&gt;

&lt;p&gt;We’ll be making use of command line tools to do the heavy lifting, but don’t worry I’ll show that this can be as simple as a single-line command to process a single file, or a shell scripts of a few lines to process multiple files.&lt;/p&gt;

&lt;h3 id=&quot;single-files&quot;&gt;Single files&lt;/h3&gt;

&lt;p&gt;The one-line command to convert a video or audio file can be as simple as the following:&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;/opt/homebrew/bin/ffmpeg &lt;span class=&quot;nt&quot;&gt;-i&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$@&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;@%.*&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.mp4&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;There are some assumptions here:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ffmpeg&lt;/code&gt; has been installed using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;brew&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;my Mac is Apple silicon, so &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;brew&lt;/code&gt; installs commands to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/opt/homebrew/bin/&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;(older Intel Macs will have them installed to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/usr/local/bin/&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;the script is called with parameters passed by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;argv&lt;/code&gt; so the file is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$@&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;the new file will have the same name as the original, but with a new .mp4 file extension&lt;/li&gt;
  &lt;li&gt;it only works on single files (read on)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We &lt;em&gt;could&lt;/em&gt; add an extra parameter to the command line to use hardware encoding (hevc_videotoolbox) &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-c:v hevc_videotoolbox&lt;/code&gt;, which would be something like twice as fast, but this will not reduce the file size. So we stick with ffmpeg default settings.&lt;/p&gt;

&lt;p&gt;You can take the exact same approach with any destination format as it is decided by the file extension. Cool. You could convert any of ffmpeg’s supported file types to any other, such as WAV, OGG, MKV, etc.&lt;/p&gt;

&lt;p&gt;And as we’ll see later we can take this simple command and change it to use other command line tools to compress GIFs, with or without upscaling, and many other timesaving tasks. Powerful stuff!&lt;/p&gt;

&lt;h3 id=&quot;multiple-files&quot;&gt;Multiple files&lt;/h3&gt;

&lt;p&gt;To extend this approach for multiple files you can use the following for loop:&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;f &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$@&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
    /opt/homebrew/bin/ffmpeg &lt;span class=&quot;nt&quot;&gt;-i&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$f&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;%.*&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.mp4&quot;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;multiple-files-in-parallel&quot;&gt;Multiple files in parallel&lt;/h3&gt;

&lt;p&gt;And to process those multiple files in parallel (be careful not to overwhelm your computer!) we can background each execution using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;amp;&lt;/code&gt; symbol.&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;f &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$@&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
    /opt/homebrew/bin/ffmpeg &lt;span class=&quot;nt&quot;&gt;-i&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$f&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;%.*&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.mp4&quot;&lt;/span&gt; &amp;amp;
&lt;span class=&quot;k&quot;&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;automator&quot;&gt;Automator&lt;/h2&gt;

&lt;p&gt;This has been a built-in macOS app since 2005. Setup is relatively straightforward:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Create a new &lt;em&gt;Quick Action&lt;/em&gt; workflow&lt;/li&gt;
  &lt;li&gt;Workflow receives current: &lt;em&gt;movie files&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;in: &lt;em&gt;Finder&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Add a new action of type action &lt;em&gt;Run Shell Script&lt;/em&gt; (search for it in the sidebar)&lt;/li&gt;
  &lt;li&gt;Pass input: &lt;em&gt;as arguments&lt;/em&gt; (this will give us a template command)&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Replace the echo line with your command&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Save&lt;/em&gt;, name it “Duplicate as MP4”&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/take-command-automator-setup.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The menu item is now available on the context menu, inside the &lt;em&gt;Quick Actions&lt;/em&gt; submenu. After repeated use I find this submenu too annoying, but you may fare better.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/take-command-automator-finder.png&quot; alt=&quot;PNG&quot; title=&quot;Automator Quick Action in Finder Context Menu&quot; /&gt;&lt;/p&gt;

&lt;p&gt;So, pretty easy! But, there are some caveats or limitations that may, or may not, annoy you. Perhaps we don’t want the menu item to appear for such a broad range of files (all “movie files”), or maybe we want it to appear for multiple types of files (both “audio files” and “movie files”). Sadly this is not so easy with Automator.&lt;/p&gt;

&lt;p&gt;Automator stores these files at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/Library/Services/&lt;/code&gt; and they will migrate to a new Mac.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;contextmenu&quot;&gt;ContextMenu&lt;/h2&gt;

&lt;p&gt;Many years ago I found &lt;a href=&quot;https://apps.apple.com/us/app/context-menu/id1236813619?mt=12&quot;&gt;ContextMenu&lt;/a&gt; ($4.99) which solves all of the issues I have with the Automator approach. There’s also a free version, &lt;a href=&quot;https://apps.apple.com/gb/app/context-menu-lite/id1261373706?mt=12&quot;&gt;ContextMenu Lite&lt;/a&gt;, that supports up to 3 actions to give you a taste of the good stuff.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Submenu is optional&lt;/li&gt;
  &lt;li&gt;Apply to multiple types (files or directories; can be as granular as file extension)&lt;/li&gt;
  &lt;li&gt;Show output (sometimes you want to see the results of the command)&lt;/li&gt;
  &lt;li&gt;Confirmation before running (if it’s a potentially dangerous operation)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/take-command-context-menu-setup.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The menu item displays in Finder as follows:&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/take-command-context-menu-finder.png&quot; alt=&quot;PNG&quot; title=&quot;ContextMenu Action in Finder Context Menu&quot; /&gt;&lt;/p&gt;

&lt;p&gt;ContextMenu stores these files in its own group folder, right click an action and choose &lt;em&gt;Show in Finder&lt;/em&gt;, but you can specify your own folder in a location of your choice. Both will migrate to a new Mac, but the later might give you more control.&lt;/p&gt;

&lt;p&gt;Edit: we can limit actions to running on files with specific extensions or, since update 1.4.4 &lt;a href=&quot;https://gist.github.com/RhetTbull/7221ef3cfd9d746f34b2550d4419a8c2&quot;&gt;specific UTI types&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;compressing-a-gif&quot;&gt;Compressing a GIF&lt;/h2&gt;

&lt;p&gt;We can use the &lt;a href=&quot;https://www.lcdf.org/gifsicle/&quot;&gt;gifsicle&lt;/a&gt; command line tool to optimise (compress) an Animated GIF. The a parameters I use here are explained in the &lt;a href=&quot;https://www.lcdf.org/gifsicle/man.html&quot;&gt;gifsicle man page&lt;/a&gt;, and I arrived at them with &lt;a href=&quot;/2016/06/16/post-processing-animated-gifs/&quot;&gt;years of experimentation&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;/opt/homebrew/bin/gifsicle &lt;span class=&quot;nt&quot;&gt;-O1&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-Okeep-empty&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--careful&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$@&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;@%.gif&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.o.gif&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;We can also do the same thing whilst scaling it up by a factor of 2:&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;/opt/homebrew/bin/gifsicle &lt;span class=&quot;nt&quot;&gt;-O1&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-Okeep-empty&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--careful&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--scale&lt;/span&gt; 2 &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$@&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;@%.gif&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.o.gif&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;repository-of-contextmenu-actions&quot;&gt;Repository of ContextMenu Actions&lt;/h2&gt;

&lt;p&gt;Here’s my repo of shared actions. Inside each &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.cmaction&lt;/code&gt; file is a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;main.sh&lt;/code&gt; file which contains the command that you can use in Automator if you’d like.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gingerbeardman/contextmenu-actions&quot;&gt;github.com/gingerbeardman/contextmenu-actions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These include many useful commands such as:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Convert BIN+CUE to ISO&lt;/li&gt;
  &lt;li&gt;Change sample rate of audio&lt;/li&gt;
  &lt;li&gt;Convert image to 1-bit&lt;/li&gt;
  &lt;li&gt;Convert image format&lt;/li&gt;
  &lt;li&gt;Create Clean ZIP&lt;/li&gt;
  &lt;li&gt;Duplicate audio as alternative format&lt;/li&gt;
  &lt;li&gt;Duplicate image as alternative format&lt;/li&gt;
  &lt;li&gt;Duplicate movie as alternative format&lt;/li&gt;
  &lt;li&gt;File information&lt;/li&gt;
  &lt;li&gt;Generate images for web&lt;/li&gt;
  &lt;li&gt;Make script executable&lt;/li&gt;
  &lt;li&gt;Move file (includes helper app)&lt;/li&gt;
  &lt;li&gt;New file with clipboard&lt;/li&gt;
  &lt;li&gt;Open file with specific apps&lt;/li&gt;
  &lt;li&gt;Optimize GIF&lt;/li&gt;
  &lt;li&gt;Set GIF to loop infinitely&lt;/li&gt;
  &lt;li&gt;Show GIF info&lt;/li&gt;
  &lt;li&gt;Playdate Colorize IMG&lt;/li&gt;
  &lt;li&gt;Replace Existing App (warning)&lt;/li&gt;
  &lt;li&gt;Scale image to certain percentage&lt;/li&gt;
  &lt;li&gt;Set as MacJapanese encoding&lt;/li&gt;
  &lt;li&gt;Show hashes (includes helper app)&lt;/li&gt;
  &lt;li&gt;Stub out file (warning)&lt;/li&gt;
  &lt;li&gt;Touch file&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 30 Jul 2024 16:14:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/07/30/taking-command-of-the-context-menu-in-macos/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/07/30/taking-command-of-the-context-menu-in-macos/</guid>
        </item>
      
    
      
        <item>
          <title>Shibuya Pixel Art Contest 2024</title>
          <description>&lt;p&gt;For June and July of 2024 the &lt;a href=&quot;https://pixel-art.jp/contesten&quot;&gt;Shibuya Pixel Art Contest&lt;/a&gt; has been running, a welcome return after it not happening in 2023. Entries are open all over the world, but can only be submitted to Twitter using the hashtag &lt;a href=&quot;https://twitter.com/hashtag/shibuyapixelart2024?f=live&quot;&gt;#shibuyapixelart2024&lt;/a&gt;. You have to include a name for the artwork and its original pixel dimensions (though it’s OK to rescale small artwork so it can be seen more easily). There are special categories for 16×16px and 32×32px artwork, and then a category for anything bigger up to the maximum of 512×512px. Full rules at &lt;a href=&quot;https://pixel-art.jp/contesten&quot;&gt;pixel-art.jp/contesten&lt;/a&gt; and there’s still time to enter! Selected works will go on display around the Shibuya district of Tokyo in August and September.&lt;/p&gt;

&lt;p&gt;For my entries I thought it would be cool to use different, unexpected software to produce my artwork.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;pico-8&quot;&gt;PICO-8&lt;/h2&gt;

&lt;p&gt;These three entries are based on graphics I created for a game I started making when my wife was pregnant with our first child. We were house bound for a while, waiting for the birth, and I drew these cards using &lt;a href=&quot;https://www.lexaloffle.com/pico-8.php&quot;&gt;PICO-8&lt;/a&gt; for a game which remains unfinished. At least I finished the graphics!&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;16×16px = 「花見」hanami card, (&lt;a href=&quot;https://twitter.com/gingerbeardman/status/1808102421077295350&quot;&gt;link&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;32×32px = 「花見酒」hanami-sake yaku, (&lt;a href=&quot;https://twitter.com/gingerbeardman/status/1808102225857720725&quot;&gt;link&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;128×128px = 「花札」hanafuda koi-koi game layout, (&lt;a href=&quot;https://twitter.com/gingerbeardman/status/1806905446805938219&quot;&gt;link&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The smaller cards shown in the full game layout are just the regular sized cards downscaled to 8×11px in code using nearest neighbour resizing. For all cards the border is drawn seperately. One or the other size of card are most likely the smallest Hanafuda ever pixelled!?&lt;/p&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div id=&quot;carousel0&quot; class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0b&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0c&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0c&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0c&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/shibuya-pixel-art-contest-2024-pico8-hanami.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/shibuya-pixel-art-contest-2024-pico8-hanami.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/shibuya-pixel-art-contest-2024-pico8-hanami-sake.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/shibuya-pixel-art-contest-2024-pico8-hanami-sake.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/shibuya-pixel-art-contest-2024-pico8-hanafuda.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/shibuya-pixel-art-contest-2024-pico8-hanafuda.png&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0b&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0c&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 100%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}

.carousel__activator:nth-of-type(3):checked ~ .carousel__track {
  -webkit-transform: translateX(-200%);
          transform: translateX(-200%);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__slide:nth-of-type(3) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__controls:nth-of-type(3) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(3) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(3) {
  -webkit-transform: translateX(200%) translateZ(0);
          transform: translateX(200%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(3),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(3 {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;#carousel0 .carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;rorschach-for-playdate&quot;&gt;Rorschach for Playdate&lt;/h2&gt;

&lt;p&gt;This entry was created with &lt;a href=&quot;https://gingerbeardman.itch.io/rorschach&quot;&gt;Rorschach&lt;/a&gt; a creative toy/game I made for the &lt;a href=&quot;https://play.date&quot;&gt;Playdate&lt;/a&gt; handheld gaming system. This piece was created by moving the “pen” using the accelerometer and relying on the dynamic ink colour which is relative to the movement. It’s a fullscreen grab at 400×240px, titled 「キクぞく」”Kikuzoku” or “Chrysanthemum”.&lt;/p&gt;

&lt;p&gt;It would be tremendously complicated and time-consuming to create artwork like this pixel-by-pixel, or even with dither brushes, unless you had some sort of pressure sensitive stylus. But Rorschach and the Playdate accelerometer makes light work of it.&lt;/p&gt;

&lt;p&gt;The final image was my 12th attempt at getting a convincing flower! With many of my earlier attempts I was slow to hide the cursor and beautiful flowers were ruined by rogue strokes of ink after I’d technically finished. Perhaps I should have added the ability to record/playback or some sort of undo to the app. (&lt;a href=&quot;https://twitter.com/gingerbeardman/status/1810481363046318410&quot;&gt;link&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/shibuya-pixel-art-contest-2024-rorschach.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;deneba-artworks-for-classic-macintosh&quot;&gt;Deneba artWORKS for Classic Macintosh&lt;/h2&gt;

&lt;p&gt;I thought it would be fun to use my favourite classic Macintosh drawing app—Deneba &lt;a href=&quot;/tag/deneba/&quot;&gt;artWORKS&lt;/a&gt;—to create pixel art using vector shapes, its bundled external tools (plugins), and the infinite fills best known from their appearance in MacPaint. There are only 20 objects in this drawing, which is 200×300px in size and titled 「黄金比」 or “the golden ratio”. (&lt;a href=&quot;https://twitter.com/gingerbeardman/status/1812491599789576474&quot;&gt;link&lt;/a&gt;)&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Spiral: flower heads (2)&lt;/li&gt;
  &lt;li&gt;Resistor: hairs (3)&lt;/li&gt;
  &lt;li&gt;Bezier: stems, branch, leaves (5)&lt;/li&gt;
  &lt;li&gt;Arc: shoots, stems, midrib (7)&lt;/li&gt;
  &lt;li&gt;Round rect: planter (2)&lt;/li&gt;
  &lt;li&gt;Polygon: planter inner shadow (1)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Plus&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Calligraphic pen nibs to get variable line thickness&lt;/li&gt;
  &lt;li&gt;Infinite fills to get dithered patterns and textures&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div id=&quot;carousel1&quot; class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel1&quot; id=&quot;1a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel1&quot; id=&quot;1b&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel1&quot; id=&quot;1c&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;1c&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;1b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;1a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;1c&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;1b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;1a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/shibuya-pixel-art-contest-2024-artworks1.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/shibuya-pixel-art-contest-2024-artworks1.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/shibuya-pixel-art-contest-2024-artworks2.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/shibuya-pixel-art-contest-2024-artworks2.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/shibuya-pixel-art-contest-2024-artworks3.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/shibuya-pixel-art-contest-2024-artworks3.png&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;1a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;1b&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;1c&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 75%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}

.carousel__activator:nth-of-type(3):checked ~ .carousel__track {
  -webkit-transform: translateX(-200%);
          transform: translateX(-200%);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__slide:nth-of-type(3) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__controls:nth-of-type(3) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(3) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(3) {
  -webkit-transform: translateX(200%) translateZ(0);
          transform: translateX(200%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(3),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(3 {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;#carousel1 .carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;bonus&quot;&gt;Bonus!&lt;/h2&gt;

&lt;p&gt;I was having too much fun with dither patterns, so I drew one more piece just for kicks. This one is called 「生け花」”Ikebana” (“flower arranging”) and was exported at 200% because I miscalculated my document size at the beginning. I drew the shears and then transformed them with Free Rotate and Scale. There was minor pixel touch-up after export, and the final thing measures 400×512px. Otherwise I used the same techniques as above. (&lt;a href=&quot;https://twitter.com/gingerbeardman/status/1812840849211851109&quot;&gt;link&lt;/a&gt;)&lt;/p&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div id=&quot;carousel2&quot; class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel2&quot; id=&quot;2a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel2&quot; id=&quot;2b&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;2b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;2b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;2a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;2a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/shibuya-pixel-art-contest-2024-artworks-ikebana.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/shibuya-pixel-art-contest-2024-artworks-ikebana.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/shibuya-pixel-art-contest-2024-artworks-ikebana2.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/shibuya-pixel-art-contest-2024-artworks-ikebana2.png&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;2a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;2b&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 128%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2 {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;#carousel2 .carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;extras-bonus&quot;&gt;Extras Bonus!&lt;/h2&gt;

&lt;p&gt;And I did one more just before the deadline. This is titled 「ラペルピン」”lapel pin” and is 512×512px and was created using the same vectors and fills technique. I decided to work in Canvas 3.0 rather than artWORKS, simply because it has a way of locking objects. The only new thing I did here is that I created two diagonal line fill patterns of my own for the collars. (&lt;a href=&quot;https://twitter.com/gingerbeardman/status/1817609688210690392&quot;&gt;link&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/shibuya-pixel-art-contest-2024-artworks-lapel-pin.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;And here’s a screenshot of my working area, Macintosh System 7.5.5 running in 1-bit colour at 1025x768 in the BasiliskII emulator. This time I created it on my MacBook Pro with external Magic Trackpad, but &lt;a href=&quot;/2021/04/17/turning-an-ipad-pro-into-the-ultimate-classic-macintosh/&quot;&gt;sometimes I use my iPad Pro with Apple Pencil&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/shibuya-pixel-art-contest-2024-artworks-lapel-pin-working.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 14 Jul 2024 16:42:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/07/14/shibuya-pixel-art-contest-2024/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/07/14/shibuya-pixel-art-contest-2024/</guid>
        </item>
      
    
      
        <item>
          <title>TETRIS: Heavenly Scrolls (1989)</title>
          <description>&lt;p&gt;Given the ongoing discussion about &lt;a href=&quot;https://www.timeextension.com/news/2024/06/anniversary-is-tetris-really-40-this-year&quot;&gt;whether or not TETRIS is 40 years old in 2024&lt;/a&gt; (I say not), I thought it would be cool to add something interesting and relevant to the conversation. As a bonus, this is an item that at the time of writing is not covered in English anywhere else on the internet.&lt;/p&gt;

&lt;p&gt;A Japanese book about TETRIS, written in the first year the game was available outside of the USSR:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;テトリス10万点への解法 (天の巻)&lt;br /&gt;
TETRIS: The Solution to 100,000 Points (Heavenly Scrolls)&lt;/strong&gt;&lt;br /&gt;
“HOW TO WIN TETRIS FOR 100,000,000 TETRISTS”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Edited and translated by 石原恒和 Tsunekazu Ishihara, published 15th March 1989.&lt;/p&gt;

&lt;p&gt;Yes, that’s &lt;a href=&quot;https://en.wikipedia.org/wiki/Tsunekazu_Ishihara&quot;&gt;the current CEO of The Pokémon Company&lt;/a&gt;!&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;The book is equal parts strategy guide, love letter to the game, and historical document. It mostly features &lt;em&gt;Spectrum Holobyte&lt;/em&gt;’s &lt;a href=&quot;https://www.mobygames.com/game/1630/tetris/screenshots/macintosh/&quot;&gt;&lt;em&gt;Macintosh&lt;/em&gt; version of TETRIS&lt;/a&gt;, but fondly refers to versions on the &lt;em&gt;Amiga&lt;/em&gt; and other home computers. At the point this book was published, March 1989, the &lt;em&gt;Game Boy&lt;/em&gt; was just about to release, in April, and its version of TETRIS would not arrive for a few months more, in June.&lt;/p&gt;

&lt;p&gt;It features contributions from the team at &lt;a href=&quot;https://www.mobygames.com/company/20165/sedic/&quot;&gt;&lt;em&gt;SEDIC&lt;/em&gt;&lt;/a&gt; (most famous for &lt;a href=&quot;https://www.mobygames.com/game/61185/otocky/&quot;&gt;&lt;em&gt;Otocky&lt;/em&gt;&lt;/a&gt;) in the form of essays, stories, and illustrations about their experience with the game and how it had changed their world view. More on them in a forthcoming blog post. Towards the end of the book there are interviews with the TETRIS creators: &lt;a href=&quot;https://www.mobygames.com/person/62651/vadim-gerasimov/&quot;&gt;Vadim Gerasimov&lt;/a&gt; (programmer) and &lt;a href=&quot;https://www.mobygames.com/person/533681/alexey-l-pajitnov/&quot;&gt;Alexey Pajitnov&lt;/a&gt; (designer). &lt;a href=&quot;https://www.mobygames.com/person/3523/henk-b-rogers/&quot;&gt;Henk Rogers&lt;/a&gt; does not seem to be mentioned, though his company &lt;a href=&quot;https://www.mobygames.com/company/2186/bullet-proof-software-inc/&quot;&gt;BPS&lt;/a&gt; is briefly mentioned in passing.&lt;/p&gt;

&lt;p&gt;I can’t see any specific mention of the creation date of TETRIS in the text, but there’s a copyright line, &lt;a href=&quot;https://youtu.be/2wnhPS5Q78E?t=24&quot;&gt;most likely taken from the &lt;em&gt;Spectrum Holobyte&lt;/em&gt; &lt;em&gt;Macintosh&lt;/em&gt; version&lt;/a&gt;, that says:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Copyright © 1987 Academy Soft-ELORG.&lt;br /&gt;
All rights reserved. TETRIS is a trademark of Academy Soft-ELORG.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;b&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;c&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;d&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;e&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;f&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;g&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;h&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;h&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;f&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;g&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;f&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;h&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;g&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tetris-heavenly-scrolls-1989-img-01-front-cover.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tetris-heavenly-scrolls-1989-img-01-front-cover.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tetris-heavenly-scrolls-1989-img-02-title-page.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tetris-heavenly-scrolls-1989-img-02-title-page.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tetris-heavenly-scrolls-1989-img-03-contents-left.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tetris-heavenly-scrolls-1989-img-03-contents-left.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tetris-heavenly-scrolls-1989-img-04-contents-right.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tetris-heavenly-scrolls-1989-img-04-contents-right.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tetris-heavenly-scrolls-1989-img-05-copyright.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tetris-heavenly-scrolls-1989-img-05-copyright.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tetris-heavenly-scrolls-1989-img-06-sample.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tetris-heavenly-scrolls-1989-img-06-sample.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tetris-heavenly-scrolls-1989-img-07-interview-alexey-pajitnov.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tetris-heavenly-scrolls-1989-img-07-interview-alexey-pajitnov.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/tetris-heavenly-scrolls-1989-img-08-rear-cover.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/tetris-heavenly-scrolls-1989-img-08-rear-cover.jpg&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;f&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;g&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;h&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 133%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__staticimage,
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}

.carousel__activator:nth-of-type(3):checked ~ .carousel__track {
  -webkit-transform: translateX(-200%);
          transform: translateX(-200%);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__slide:nth-of-type(3) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__controls:nth-of-type(3) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(3) {
  opacity: 1;
}

.carousel__activator:nth-of-type(4):checked ~ .carousel__track {
  -webkit-transform: translateX(-300%);
          transform: translateX(-300%);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__slide:nth-of-type(4) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__controls:nth-of-type(4) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(4) {
  opacity: 1;
}

.carousel__activator:nth-of-type(5):checked ~ .carousel__track {
  -webkit-transform: translateX(-400%);
          transform: translateX(-400%);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__slide:nth-of-type(5) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__controls:nth-of-type(5) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(5) {
  opacity: 1;
}

.carousel__activator:nth-of-type(6):checked ~ .carousel__track {
  -webkit-transform: translateX(-500%);
          transform: translateX(-500%);
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__slide:nth-of-type(6) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__controls:nth-of-type(6) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(6) {
  opacity: 1;
}

.carousel__activator:nth-of-type(7):checked ~ .carousel__track {
  -webkit-transform: translateX(-600%);
          transform: translateX(-600%);
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__slide:nth-of-type(7) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__controls:nth-of-type(7) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(7) {
  opacity: 1;
}

.carousel__activator:nth-of-type(8):checked ~ .carousel__track {
  -webkit-transform: translateX(-700%);
          transform: translateX(-700%);
}
.carousel__activator:nth-of-type(8):checked ~ .carousel__slide:nth-of-type(8) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(8):checked ~ .carousel__controls:nth-of-type(8) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(8):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(8) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(3) {
  -webkit-transform: translateX(200%) translateZ(0);
          transform: translateX(200%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(4) {
  -webkit-transform: translateX(300%) translateZ(0);
          transform: translateX(300%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(5) {
  -webkit-transform: translateX(400%) translateZ(0);
          transform: translateX(400%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(6) {
  -webkit-transform: translateX(500%) translateZ(0);
          transform: translateX(500%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(7) {
  -webkit-transform: translateX(600%) translateZ(0);
          transform: translateX(600%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(8) {
  -webkit-transform: translateX(700%) translateZ(0);
          transform: translateX(700%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(3),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(3) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(4),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(4) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(5),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(5) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(6),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(6) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(7),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(7) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(8),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(8) {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;.carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 18 Jun 2024 14:47:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/06/18/tetris-heavenly-scrolls/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/06/18/tetris-heavenly-scrolls/</guid>
        </item>
      
    
      
        <item>
          <title>Pitching a game based on the CICLOPE 2016 Opening Film</title>
          <description>&lt;p&gt;A little over a year ago I wrote a screenplay/pitch for a video game based on an animated short film created by &lt;a href=&quot;https://www.thelineanimation.com&quot;&gt;THE LINE Animation Studio&lt;/a&gt;: the opening film from the CICLOPE Festival in 2016.&lt;/p&gt;

&lt;p&gt;I’d like to make this game but I need support to do so. Until then I figured I’d post it here for all to read.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;ciclope&quot;&gt;CICLOPE&lt;/h2&gt;

&lt;p&gt;Think of this as the game trailer. Watch it before or after reading.&lt;/p&gt;

&lt;iframe src=&quot;https://player.vimeo.com/video/190700988?h=adadcd17c5&amp;amp;title=0&amp;amp;byline=0&amp;amp;portrait=0&quot; width=&quot;740&quot; height=&quot;310&quot; frameborder=&quot;0&quot; allow=&quot;autoplay; fullscreen; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;More information on the making of the animation at &lt;a href=&quot;https://www.thelineanimation.com/work/ciclope/&quot;&gt;thelineanimation.com/work/ciclope/&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;game-overview&quot;&gt;Game Overview&lt;/h2&gt;

&lt;p&gt;Our task is to transport the package to its destination.&lt;/p&gt;

&lt;p&gt;We start the game not knowing what, why, or how.&lt;/p&gt;

&lt;p&gt;The story would involve the environment and its occupants, across many scenarios. We would work together to overcome problems and allow the drone to complete its journey.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The overarching theme of the game is that we could and should all live in harmony together, make use of what we have around us, treat each other and the Earth with respect, and live a happy life.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The experience is not a walking simulator, it is more than that. It is a truly interactive, guided story, with puzzles and multiple paths.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;scenarios&quot;&gt;Scenarios&lt;/h2&gt;

&lt;p&gt;These are the scenarios shown in the film and story boards. I’m giving them names here, but I do not see them being named in the game as it will strive to use as little text as possible.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/ciclope-01.delta.jpg&quot; alt=&quot;Ciclope-01&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;delta&quot;&gt;Delta&lt;/h3&gt;

&lt;p&gt;We first see the drone flying above an River delta at low tide, arriving from an unknown location. We are immediately tasked with flying the drone, following the strand of river that we are on. The camera angle is locked to point only down. We do not see that we are carrying a package.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;On subsequent play-throughs we would fly low to pick up some “gold dust” on the package we are carrying for a special bonus in the ending sequence.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After a while everywhere starts to look the same, every tree looks the same, every bit of riverbed looks the same. The small river we have been following starts to disappear, eventually branching into another which does the same. We realise that we are lost.&lt;/p&gt;

&lt;p&gt;Picking up clues from the environment, we figure out that the best course of action is to follow the direction in which the water is flowing, eventually reaching the open sea.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;River deltas have proven to be important throughout human civilisation, as they are major agricultural and population centres. They could be considered the cradle of civilisation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We cross the open sea only to encounter an electric fence, we have to seek the help of animals to find the hole in the fence and continue our journey. Near the hole in the fence we find a small satellite dish and overhear some broken comms/broadcast that we cannot understand.&lt;/p&gt;

&lt;p&gt;We see our reflection for the first time in the water and see a label stencilled on our housing: D3174 (“Delta”).&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;we see: beautiful landscapes, ourselves&lt;/li&gt;
  &lt;li&gt;we feel: found, lost, new beginnings, purpose&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/ciclope-02.opening-credits.jpg&quot; alt=&quot;Ciclope-02&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;opening-credits&quot;&gt;Opening Credits&lt;/h3&gt;

&lt;p&gt;This acts as a tidy segue between river delta and desert, showing star-filled sky and sun-bleached-sky signifying that much time has passed and distance has been covered.&lt;/p&gt;

&lt;p&gt;Here it is revealed for the first time that we are carrying a package.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;we see: the vast expanse, the wide world, stars, sun, endless vistas&lt;/li&gt;
  &lt;li&gt;we feel: excited, inquisitive, small, ill-equipped&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/ciclope-03.desert.jpg&quot; alt=&quot;Ciclope-03&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;desert&quot;&gt;Desert&lt;/h3&gt;

&lt;p&gt;After flying through the desert for a while, exploring structures, a sand storm approaches and we are forced to take shelter in a small hut at the base of a felled pylon. Here we are taught first hand how we can drop the package if we need to (but only on places where X marks the spot) and how we can pick up and combine items. We learn how to craft new objects with the things we find around us.&lt;/p&gt;

&lt;p&gt;After the storm has passed (coincidentally as soon as we have completed the tutorial objectives) we are allowed to go back outside. We discover lots of new things: a partially covered megalithic monument where we are able to find a replacement battery, and a satellite dish and broadcasting station.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Similar partially covered monuments are visible in all locations, and are a reference to technology and discoveries that have been forgotten in the name of progress.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We need to use our new crafting ability to reconnect the equipment. We then receive our first communication/broadcast. But what form does it take?&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;One idea would be for it to be famous radio broadcasts in foreign languages, celebratiing technological breakthroughs related to the current scenario. eg. the desert could be Africa, and the radio broadcast could be about, say, CT scan etc.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We are also given our first new ability, an Augmented Reality (AR) overlay on our camera view allowing us to see certain invisible things in the environment such as hot air drafts.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;we see: sand storm, crafting, invisible stuff&lt;/li&gt;
  &lt;li&gt;we feel: accomplished, empowered&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/ciclope-04.oasis.jpg&quot; alt=&quot;Ciclope-04&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;oasis&quot;&gt;Oasis&lt;/h3&gt;

&lt;p&gt;The transition out of the desert takes the form of an encounter with an oasis.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;This gives us the opportunity to have a flash-back or flash-forward, somewhat acid trip sort of interjection in the story. Half through our AR glasses and half through the scene. We see elements of what has happened on Earth to leave the landscape in such a ravaged state. It is not Nuclear war, or AI, but simply a result of our over-use of Earth’s resources.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We are left wondering… what was real and what was imaginary?&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;we see: psychedelic, trippy, quick-cut flashes from another time&lt;/li&gt;
  &lt;li&gt;we feel: confused, lost, humbled&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/ciclope-05.solar-farm.jpg&quot; alt=&quot;Ciclope-05&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;solar-farm&quot;&gt;Solar Farm&lt;/h3&gt;

&lt;p&gt;We see something on the horizon, something that looks like a city. Perhaps our experience at the oasis had foreshadowed this? We instinctively head in that direction, and it turns out to be much closer than it looked because it is much less tall than it looked at a distance.&lt;/p&gt;

&lt;p&gt;We have encountered a solar farm, with panels stretching as far as the eye can see in every direction.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;In fact the game makes sure it is impossible to fly away from them, see Notes section at the end of this document.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After our ordeal in the desert we have a problem with our battery and solar panel.&lt;/p&gt;

&lt;p&gt;We need to figure out where in the solar farm we have to go, maybe there is something here we can use to craft a solution. Racing against daylight and the approaching shadows of nightfall we are forced in a certain direction. We realise we can follow the cables on the ground much like we followed the rivers at the delta. We end up at a hut somewhere in the solar farm.&lt;/p&gt;

&lt;p&gt;We immediately find a new battery, but replacing our solar panel will be more difficult. Another satellite comes online and we receive more comms. We see signs of a power source radar, we have to find it and pick it up. But how?&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;We need to build a Rube Goldberg-style contraption involving: a fragment of our existing solar panel, the reflection of the sun to concentrate light/heat, the water tower, and of course the drone. The water tower ruptures and water floods onto the land and down a previously unseen drainage system. We fly through the pipes into an underground facility where we find a replacement solar panel and our power source radar.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;we see: signs of sustainable technology, signs of an advanced human race&lt;/li&gt;
  &lt;li&gt;we feel: empowered, less small, hopeful&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/ciclope-06.coastline.jpg&quot; alt=&quot;Ciclope-06&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;coastline&quot;&gt;Coastline&lt;/h3&gt;

&lt;p&gt;We see the megalithic monuments for the first time.&lt;/p&gt;

&lt;p&gt;Our radar picks up its first sign of power, but we cannot reach it.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;We need to fly to top of the tower, in stages as we do not have the power to fly at once. When we get to the top we realise we are low on battery. The only things up there are a rock and a small plank of wood. We have to position the wood on the rock and then land on it like a see saw. The wood then flips over and lands on top of us, interlocking with our frame to create wings.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We dive from the top of one monument and glide over to the other monument, to sunlight and safety, and a replacement power source.&lt;/p&gt;

&lt;p&gt;The gliding in this stage is reminiscent of hang-gliding in Pilotwings (SNES, N64, DS) where you need to fly through rings of dots and catch updrafts. These can be see thanks to the item we obtained in the desert.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;we see: strange monuments to lost technology&lt;/li&gt;
  &lt;li&gt;we feel: mysterious, capable, resourceful&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/ciclope-07.cut-scene.jpg&quot; alt=&quot;Ciclope-07&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;cut-scene&quot;&gt;Cut Scene&lt;/h3&gt;

&lt;p&gt;The transition from coastline takes the form of an introduction to our Augmented Reality camera.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;We see AR overlays of ravaged landscape showing aspects of how it used to be.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/ciclope-08.volcanic.jpg&quot; alt=&quot;Ciclope-08&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;volcanic&quot;&gt;Volcanic&lt;/h3&gt;

&lt;p&gt;We use two abilities of our AR camera in this tricky scenario. We need to find a path through the steam that avoids heat, and use updrafts to reach difficult heights.&lt;/p&gt;

&lt;p&gt;We reach a set of six communications towers but they are offline. One of the six towers is broken and we need to fix it.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;We need to find some metal, smelt it in the heat, pick it up when safe to do so, find wire and a way to cut it, and all to fashion a replacement resistor. We also need to find, untie and otherwise free various wires, and eventually re-plug them to get the system powered up.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We get the system online and hear more comms.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;we see: heat haze, AR views&lt;/li&gt;
  &lt;li&gt;we feel: relieved, capable, hot!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/ciclope-09.mountains-valley.jpg&quot; alt=&quot;Ciclope-09&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;mountains-valley&quot;&gt;Mountains: valley&lt;/h3&gt;

&lt;p&gt;We see the broken monorail. In the distance we can hear the sound of cattle bells.&lt;/p&gt;

&lt;p&gt;We pick up a power signal and after some effort removing a rock fall, we enter a tunnel and find a small monorail cart. It’s a close cousin of the drone, for the purposes of delivery and operated by the same company. But it’s much older, from the days before drones.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;We have to go through the waterfall to collect the battery. Now we have two options, we can leave the area with the battery we have found, or we can go back to monorail cart and give it the battery.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;By donating the battery the monorail cart bursts into action and we discover that it is part of a much larger system. The various parts all come to life and start to reconnect the monorail track. This results in a special bonus in the ending sequence.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;We are also given a new ability for our kindness: language translation which will allow us to understand the contents of all the broadcasts in the game. These abilities can be kept for New Game+ allowing us to see the contents of the earlier broadcasts which add an extra level of depth to the story line on second playthrough.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After the task is complete we feel as big as the mountains and capable of anything.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;we see: the bigger picture, traces of other useful technology&lt;/li&gt;
  &lt;li&gt;we feel: huge, helpful, part of something bigger&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/ciclope-10.storm.jpg&quot; alt=&quot;Ciclope-10&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;storm&quot;&gt;Storm&lt;/h3&gt;

&lt;p&gt;This scenario not only shows some fancy weather effects, but also shows us that we can save battery power by switching off our light and by not using our other abilities.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;We manage to locate a hole in the electrified fence. Once we fly through the storm abates. We are low on power but pick up a radar signal locating a power source. We fly towards it but our battery is depleted giving us no choice but to crash land. The music has been building all this time, becoming more somber, but now it falls completely silent. We hear the strained whine of motors that do not have enough power.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The image fades to black, and we think it might be game over.&lt;/p&gt;

&lt;p&gt;A short while later the scene comes back and it is day time. We are in the opening of a cliff-side cave. We see ancient murals depicting a peaceful world.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;We can photograph these with our AR camera to get a special bonus in the ending sequence.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Enough sun has entered the cave to recharge our battery enough for us to continue our journey. From our current vantage point we can see we are almost at the peak of a mountain range. The only way is up!&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;we see: rain, lightning, the end?&lt;/li&gt;
  &lt;li&gt;we feel: relieved, born again, recharged&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/ciclope-11.mountains-peak.jpg&quot; alt=&quot;Ciclope-11&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;mountains-peak&quot;&gt;Mountains: peak&lt;/h3&gt;

&lt;p&gt;We are now far off route, but the top of the mountain has been calling us.&lt;/p&gt;

&lt;p&gt;We encounter indigenous people who have perhaps never seen a drone. Or maybe they are trying to take the package? We keep our distance and notice they seem preoccupied by something else.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;There are markings on the rocks, including our familiar X marks the spot the recurring theme showing the place where we can set down our package and it will be safe.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The people are looking for their pet. They understand that the drone might be able to help them and they shout in a language the drone does not recognise, but the new ability gained at the Valley means that we can understand them. We can see the pet stranded on a high peak.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;If we fly directly there we will be in too much shadow and our battery will deplete. We figure out that we need to fly between crepuscular rays and avoid shadows. So with some aerial acrobatics and some picking up and dropping things to help the animal come closer, we are able to rescue pick it up and carry it back to the people. They reward us by interpreting the photo we took earlier and show us which way we need to go.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;we see: people, animals, the path forward&lt;/li&gt;
  &lt;li&gt;we feel: helpful, helped, oneness&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/ciclope-12.forest.jpg&quot; alt=&quot;Ciclope-12&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;forest&quot;&gt;Forest&lt;/h3&gt;

&lt;p&gt;We fly down the far side of the mountain. The scenery changes from snow covered peaks to lush forests. Never have we been able to fly so freely.&lt;/p&gt;

&lt;p&gt;Flying below tree canopy means less direct sun light and makes parts of this scenario more difficult. Imagine the Star Wars speedbike sequence.&lt;/p&gt;

&lt;p&gt;We are receiving radar signals for multiple power sources. One by one they drop off the radar, by going out of range, leaving us with only one. Little do we know that this is our last waypoint.&lt;/p&gt;

&lt;p&gt;We are hit by a catapulted projectile and crash to the ground. We see the crashed drone, open package, and the child picking up and using the music box.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;we see: a human, a child&lt;/li&gt;
  &lt;li&gt;we feel: useful, happy, complete&lt;/li&gt;
  &lt;li&gt;we hear: the music box&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/ciclope-13.fin.jpg&quot; alt=&quot;Ciclope-13&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;fin&quot;&gt;FIN&lt;/h3&gt;

&lt;p&gt;The end sequence is similar to the opening sequence, with the addition of humans. We see each location that we encountered in the game, but they are changed because the world is rebuilding. There are many drones, monorail systems and power source to be seen.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Delta: is once again the cradle of civilisation, busy with people and agriculture&lt;/li&gt;
  &lt;li&gt;Desert: is back online, populated and a hub of activity&lt;/li&gt;
  &lt;li&gt;Solar Farm: is now fully functional and even larger than before&lt;/li&gt;
  &lt;li&gt;Coastline: offshore wind farm, the monuments have been converted into windmills&lt;/li&gt;
  &lt;li&gt;Volcanic: we are harnessing the volcano heat and steam for power&lt;/li&gt;
  &lt;li&gt;Valley: we see a busy monorail system, and the waterfall and river is a power source&lt;/li&gt;
  &lt;li&gt;Storm: in daylight we see the electrified fence is another way of harnessing power&lt;/li&gt;
  &lt;li&gt;Peak: we see the indigenous people using technology to make their lives easier&lt;/li&gt;
  &lt;li&gt;Oasis: this turns out to be the home of the child, we see the drone being played with&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s all, folks.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;we see: everything&lt;/li&gt;
  &lt;li&gt;we feel: happy and content&lt;/li&gt;
  &lt;li&gt;we hear: rearranged main theme&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;post-credits&quot;&gt;Post Credits&lt;/h3&gt;

&lt;p&gt;The child is seen saving the sum total knowledge of her civilisation to a small magneto optical disc, inserting it into the music box, and loading it into the repaired drone. With great delight, she throws the drone into the air. Its next adventure begins.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;notes&quot;&gt;Notes&lt;/h2&gt;

&lt;p&gt;If it’s an open world can’t we just keep on flying?&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;it is not an open world but a guided experience&lt;/li&gt;
  &lt;li&gt;each location is a limited dimensions and if we keep flying in one direction it will wrap around&lt;/li&gt;
  &lt;li&gt;this also help reduce backtracking if the map was wide open&lt;/li&gt;
  &lt;li&gt;travel between areas is guided but there is free movement within each area&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Who is flying this thing?&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;we are&lt;/li&gt;
  &lt;li&gt;slowly we will earn about other people in the world and we will be helped on our way by many of them, in a wide range of languages&lt;/li&gt;
  &lt;li&gt;with an ability gathered mid-game we can understand the languages&lt;/li&gt;
  &lt;li&gt;hearing all the messages will require a second play-through&lt;/li&gt;
  &lt;li&gt;messages that initially appeared angry take on other meanings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How do we segue between locations?&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;music &amp;amp; animated sequence almost like a music visualiser
    &lt;ul&gt;
      &lt;li&gt;like the star-filled sky @1:38&lt;/li&gt;
      &lt;li&gt;and the sun-bleached sky @1:48&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;we have to rest (sleep) in some locations to progress from night to day&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;influences&quot;&gt;Influences&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://ja.wikipedia.org/wiki/パネキット&quot;&gt;Panekit&lt;/a&gt; (1999, PS1)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Rime_(video_game)&quot;&gt;Rime&lt;/a&gt; (2017, PS4)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Journey_(2012_video_game)&quot;&gt;Journey&lt;/a&gt; (2021, PS3)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Proteus_(video_game)&quot;&gt;Proteus&lt;/a&gt; (2013, PC)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Ico&quot;&gt;Ico&lt;/a&gt; (2001, PS2)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Hunter_(video_game)&quot;&gt;Hunter&lt;/a&gt; (1991, Atari ST)&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 01 Jun 2024 14:30:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/06/01/pitching-a-game-based-on-the-ciclope-2016-opening-film/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/06/01/pitching-a-game-based-on-the-ciclope-2016-opening-film/</guid>
        </item>
      
    
      
        <item>
          <title>FRP bypass and unlock on a Samsung Galaxy Tab S2</title>
          <description>&lt;p&gt;I use an Android tablet for reading ebooks. My favourite ebook reader is the &lt;a href=&quot;https://www.the-ebook-reader.com/sony-prs-650.html&quot;&gt;Sony PRS-650&lt;/a&gt; which was ahead of its time in a lot of ways. But these days I like to have internet connectivity whilst reading so I can do both dictionary lookups, Wikipedia lookups, and quick Google searches. But at the same time I don’t really want the total distraction of an iPad, or Android tablet, so the ideal solution for me was to use KOReader - an ebook reading app heavily inspired by the Sony Reader interface - and which has the ability to do those dictionary and Wikipedia lookups and keep me mostly self-contained.&lt;/p&gt;

&lt;p&gt;So I bought a Google Asus Nexus 7 which is really nice, but for my use case running any modern version of Android on it shows how much it is lacking in both CPU and RAM. It was OK for a while, I read a good handful of books on it, but I eventually wanted something more capable. I’d heard about the Samsung Galaxy Tab S2 8.0 which is slightly wider and perhaps slightly lighter and above all more powerful. Both devices have very high resolution displays, which is a must for font rendering, and seems to bea thing if the past for Android tablets.&lt;/p&gt;

&lt;p&gt;I managed to snag a “faulty” Tab S2 8.0 on eBay that was listed as powering on and off, but was locked to a Google Account. This is something I knew could be worked around, and this blog post gives a brief outline of how I did it.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;frp-bypass&quot;&gt;FRP bypass&lt;/h2&gt;

&lt;p&gt;FRP is basically an account lock. The device will require the owners account to be logged in even after a facory reset. A bit like iCloud lock on Apple devices, but this is much less well implemented. A comprehensive &lt;a href=&quot;https://www.youtube.com/watch?v=R4g5KZFRM1Y&quot;&gt;YouTube video by Muhammad Mubeen&lt;/a&gt; was of great help to do the bypass.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;SamFW FRP TOOL &amp;gt; MRP &amp;gt; Open YouTube &amp;gt; View&lt;/li&gt;
  &lt;li&gt;Choose browser &amp;gt; Open Samsung Browser&lt;/li&gt;
  &lt;li&gt;Download and install &lt;a href=&quot;https://androidfilehost.com/?fid=5862345805528059176&quot;&gt;technocare.apk from androidfilehost.com&lt;/a&gt; (this adds options we’ll use)&lt;/li&gt;
  &lt;li&gt;Open a new tab with &lt;a href=&quot;https://frpbypass.io&quot;&gt;frpbypass.io&lt;/a&gt; for the FRP bypass links&lt;/li&gt;
  &lt;li&gt;Choose link from frpbypass tab: Settings&lt;/li&gt;
  &lt;li&gt;Settings &amp;gt; Lock Screen &amp;amp; Security &amp;gt; Other Security Settings &amp;gt; Device Administrators &amp;gt; Find My Device (uncheck)&lt;/li&gt;
  &lt;li&gt;Settings &amp;gt; Apps &amp;gt; Google Play Store &amp;gt; Disable&lt;/li&gt;
  &lt;li&gt;Cloud &amp;amp; Accounts &amp;gt; Add Account &amp;gt; Google&lt;/li&gt;
  &lt;li&gt;(login and verify)&lt;/li&gt;
  &lt;li&gt;Settings &amp;gt; Apps &amp;gt; Google Play Store &amp;gt; Enable&lt;/li&gt;
  &lt;li&gt;Restart&lt;/li&gt;
  &lt;li&gt;Settings &amp;gt; Apps &amp;gt; TecnocareTricks &amp;gt; Uninstall&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;frp-unlock&quot;&gt;FRP unlock&lt;/h2&gt;

&lt;p&gt;By enabling OEM Unlock the FRP lock will also be switched off, which is very handy. By factory resetting the device whilst in that state, FRP will be permanently disabled. Result!&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Settings &amp;gt; System &amp;gt; About &amp;gt; Build number (tap 7 times)&lt;/li&gt;
  &lt;li&gt;Settings &amp;gt; System &amp;gt; Developer Options &amp;gt; OEM Unlock&lt;/li&gt;
  &lt;li&gt;Reboot to recovery mode (Power, Volume Up, Home)&lt;/li&gt;
  &lt;li&gt;Factory reset&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;android-update&quot;&gt;Android update&lt;/h2&gt;

&lt;p&gt;From here I installed &lt;a href=&quot;https://xdaforums.com/t/unofficial-rom-alpha-lineageos-20-for-sm-t713-may-16-2024.4667460/&quot;&gt;Lineage OS 20&lt;/a&gt; (Android 13) on the device, which would otherwise be limited to very old Android 6 or 7. Other options are &lt;a href=&quot;https://xdaforums.com/t/rom-unofficial-10-lineageos-17-1-t713-t719-t813-t819.4070161/&quot;&gt;Lineage OS 17.1&lt;/a&gt; (Android 10) &lt;a href=&quot;https://xdaforums.com/t/rom-7-0-nougat-abandoned-stock-lite-v8-t713-t813.3746583/&quot;&gt;Stock Android 7 Lite&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;for-mac-users&quot;&gt;For Mac Users&lt;/h2&gt;

&lt;p&gt;on macOS you can use Odin or SamFw Tool in a virtual machine, using the latest official Samsung Android USB drivers. I did it in VMware Fusion 13 running Windows 11 ARM on an M1 MacBook Pro running macOS Sonoma 14.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 30 May 2024 18:24:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/05/30/frp-bypass-and-unlock-on-a-samsung-galaxy-tab-s2/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/05/30/frp-bypass-and-unlock-on-a-samsung-galaxy-tab-s2/</guid>
        </item>
      
    
      
        <item>
          <title>Emigre typography and graphic design magazine (1984–2005)</title>
          <description>&lt;p&gt;&lt;em&gt;Emigre&lt;/em&gt; magazine was a highly influential graphic design publication. It was known for its innovative and experimental approach to typography and graphic design, pushing the boundaries of traditional design norms—for better or worse. The magazine was published from 1984 (year of the Macintosh launch) until 2005, and during its run it played a critical role in shaping the discourse around digital design and typography. It was founded by &lt;a href=&quot;https://www.emigre.com/Designer/RudyVanderLans&quot;&gt;&lt;em&gt;Rudy VanderLans&lt;/em&gt;&lt;/a&gt; and his wife &lt;a href=&quot;https://www.emigre.com/Designer/ZuzanaLicko&quot;&gt;&lt;em&gt;Zuzana Licko&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/emigre-magazine.jpg&quot; alt=&quot;&quot; title=&quot;Selected covers from Emigre magazine (1984–2005)&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;tell-me-about-it&quot;&gt;Tell me about it&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Emigre&lt;/em&gt; is notable for many reasons, and if you’re interested in 80s and 90s design there will surely be something in there for you. I first heard about &lt;em&gt;Emigre&lt;/em&gt; when I started work at London graphic design agency &lt;a href=&quot;https://form.uk.com&quot;&gt;&lt;em&gt;Form&lt;/em&gt;&lt;/a&gt; in 1998, so about three quarters through the run.&lt;/p&gt;

&lt;p&gt;Some features that stand out for me personally are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://wayback.archive-it.org/9432/20190926205616/http://goldstein.design.umn.edu/collection/emigre/typefaces/Lores.html&quot;&gt;Early bitmap fonts&lt;/a&gt; (1984) and &lt;a href=&quot;https://oa.letterformarchive.org/item?workID=lfa_emigre_0006&amp;amp;targPic=lfa_emigre_0006_009.jpg&quot;&gt;emoji-like pictograms&lt;/a&gt; (1986) created by &lt;a href=&quot;https://www.emigre.com/Designer/ZuzanaLicko&quot;&gt;&lt;em&gt;Zuzana Licko&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://oa.letterformarchive.org/item?workID=lfa_emigre_0003&amp;amp;targPic=lfa_emigre_0003_004.jpg&quot;&gt;Early 1-bit Macintosh art&lt;/a&gt; by &lt;a href=&quot;https://www.hersey.com/about&quot;&gt;&lt;em&gt;John Hersey&lt;/em&gt;&lt;/a&gt; (1985) and many other lovely period details&lt;/li&gt;
  &lt;li&gt;Designs by such luminaries as &lt;a href=&quot;https://oa.letterformarchive.org/item?workID=lfa_emigre_0013&amp;amp;targPic=lfa_emigre_0013_015.jpg&quot;&gt;&lt;em&gt;Neville Brody&lt;/em&gt;&lt;/a&gt;, &lt;a href=&quot;https://oa.letterformarchive.org/?dims=Name_KEY&amp;amp;vals0=SPIEKERMANNERIK&amp;amp;friendly0=Spiekermann%comma%20Erik&quot;&gt;&lt;em&gt;Erik Spiekermann&lt;/em&gt;&lt;/a&gt;, and &lt;a href=&quot;https://wayback.archive-it.org/9432/20190926160800/http://goldstein.design.umn.edu/collection/emigre/&quot;&gt;many more&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Articles on people like font designer &lt;a href=&quot;https://oa.letterformarchive.org/item?workID=lfa_emigre_0026&amp;amp;targPic=lfa_emigre_0026_018.jpg&quot;&gt;&lt;em&gt;Aldo Novarese&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Issues dedicated to the record label &lt;a href=&quot;https://oa.letterformarchive.org/item?workID=lfa_emigre_0009&quot;&gt;&lt;em&gt;4AD&lt;/em&gt;&lt;/a&gt; (1988) and &lt;a href=&quot;https://oa.letterformarchive.org/item?workID=lfa_emigre_0029&quot;&gt;&lt;em&gt;The Designers Republic&lt;/em&gt;&lt;/a&gt; (1994)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;online-archives&quot;&gt;Online archives&lt;/h2&gt;

&lt;p&gt;I recently wanted to read some of the issues again and found a couple of online archives:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://oa.letterformarchive.org/?dims=Collection&amp;amp;vals0=Emigre%20Collection&amp;amp;sortby=title&quot;&gt;Letterform Archive: Emigre Collection&lt;/a&gt; (browsable magazines, simplified cross references)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://wayback.archive-it.org/9432/20190926160800/http://goldstein.design.umn.edu/collection/emigre/&quot;&gt;University of Minnesota: Emigre Magazine Index&lt;/a&gt; (only comprehensive cross references)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;digital-versions&quot;&gt;Digital versions&lt;/h2&gt;

&lt;p&gt;If you want to take the magazine with you today it’s available in the &lt;a href=&quot;https://www.emigre.com/Emigre-Fonts-App&quot;&gt;Emigre Fonts app&lt;/a&gt; for iPad/iPhone, which allows you to download the issues for offline reading.&lt;/p&gt;

&lt;p&gt;If you can’t use, or would rather not use, the official app &lt;a href=&quot;https://archive.org/details/emigre-magazine-archive-1984-2005&quot;&gt;I’ve converted the issues to CBZ files&lt;/a&gt;. Read those with &lt;a href=&quot;https://panels.app&quot;&gt;Panels&lt;/a&gt;, &lt;a href=&quot;https://apps.apple.com/gb/app/simple-comic/id1497435571?mt=12&quot;&gt;Simple Comic&lt;/a&gt;, &lt;a href=&quot;https://www.cdisplayex.com&quot;&gt;CDisplayEx&lt;/a&gt;, or another comic reader app of your choice.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;related-reading&quot;&gt;Related reading&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Emigre_(magazine)&quot;&gt;Emigre (magazine)&lt;/a&gt; at &lt;em&gt;Wikipedia&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://luc.devroye.org/fonts-27441.html&quot;&gt;Emigre&lt;/a&gt; entry at &lt;em&gt;Type Design Information Page&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.emigre.com/BooksCds/Type-90-HyperCard&quot;&gt;Type ‘90 HyperCard Video&lt;/a&gt; video of a HyperCard Stack&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.researchgate.net/publication/303776354_Designing_the_Emigre_Magazine_Index_Theory_and_Practice_in_an_Alternative_Research_Tool&quot;&gt;Designing the Emigre Magazine Index&lt;/a&gt;, &lt;em&gt;Jessica Barness, 2016&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/merztoemigrebeyo0000hell/&quot;&gt;Merz to Emigre and Beyond&lt;/a&gt; Avant-Garde Magazine Design of the Twentieth Century&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2019/07/10/verbum-journal-of-personal-computer-aesthetics/&quot;&gt;Verbum “The Journal of Personal Computer-Aesthetics”&lt;/a&gt;, &lt;em&gt;Michael Gosney, 1986–&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 24 May 2024 20:19:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/05/24/emigre-typography-and-graphic-design-magazine-1984-2005/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/05/24/emigre-typography-and-graphic-design-magazine-1984-2005/</guid>
        </item>
      
    
      
        <item>
          <title>Mouse Support for Playdate</title>
          <description>&lt;p&gt;Since some of my first prototypes with Playdate I’ve wanted there to be a way to interact with the device using a mouse. Well, today is that day!&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 3/2;&quot; videoid=&quot;PF4emlHhYCM&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;p&gt;No doubt you have some questions? How are you doing this? What’s the weather like? etc.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;how&quot;&gt;How?&lt;/h2&gt;

&lt;p&gt;A custom &lt;a href=&quot;https://www.hammerspoon.org&quot;&gt;Hammerspoon&lt;/a&gt; script monitors mouse coordinates and sends them to the Playdate over serial connection. The game receives those messages through the recently added API &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;playdate.serialMessageReceived(message)&lt;/code&gt;, parses them, and acts accordingly.&lt;/p&gt;

&lt;p&gt;Currently the script sends messages such as:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;msg mouse on
msg 0,0
msg -19,84
msg mouse off
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I use those to trigger on screen notifications, reset the game state, and move the cursor.&lt;/p&gt;

&lt;p&gt;Note: use of serial means you can’t have the Playdate Simulator or Mirror open when trying this. If you invoke the script and it can’t open the serial connection for any reason it will sound an error beep.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;why&quot;&gt;Why?&lt;/h2&gt;

&lt;p&gt;Originally, back in 2020, I wanted to be able to position items in the in-game level editor of &lt;a href=&quot;/tag/dailydriver/&quot;&gt;my game Daily Driver&lt;/a&gt; more directly, using a mouse rather than typing co-ordinates into a file. Then I forgot about it for a while. Then in &lt;a href=&quot;https://sdk.play.date/changelog/#_2_4_0&quot;&gt;&lt;em&gt;Playdate SDK 2.4.0&lt;/em&gt;&lt;/a&gt; (March 1, 2024) a new API was added that made me wonder if it was now possible.&lt;/p&gt;

&lt;p&gt;I knew the &lt;a href=&quot;https://itch.io/jam/uncrankdjam&quot;&gt;Uncrank’d Game Jam&lt;/a&gt; was in progress and was thinking about what to do, and then the mouse control idea came back to me. I first put together the bare bones of an app that drew a dot to the screen, mirrored both horizontally and vertically. Then I set about proving I could forward mouse events, which resulted in a &lt;a href=&quot;https://github.com/gingerbeardman/playdate-mouse-support/blob/main/mouse/mouse_to_playdate.lua&quot;&gt;small Hammerspoon script&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;After that, I built out the drawing app and that’s how &lt;a href=&quot;https://gingerbeardman.itch.io/rorschach&quot;&gt;Rorschach&lt;/a&gt; came to be. It was originally built to showcase the mouse control, but has since evolved into a lovely little toy of its own. I thought a drawing app would be an easy-to-understand visual showcase for this innovation. But, really, the possibilities for its use are endless.&lt;/p&gt;

&lt;p&gt;Developers can use it to speed up and simplify development, add finer control to their in-game level editors, and generally make their lives easier. There’s nothing stopping you giving users access to it in a game.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;installation&quot;&gt;Installation&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Make sure you’re running &lt;a href=&quot;https://gingerbeardman.itch.io/rorschach&quot;&gt;Rorschach&lt;/a&gt; or &lt;a href=&quot;https://github.com/gingerbeardman/playdate-mouse-support/releases/tag/240511&quot;&gt;Mouse Demo&lt;/a&gt; on your device&lt;/li&gt;
  &lt;li&gt;Attach your Playdate over USB and unlock the device&lt;/li&gt;
  &lt;li&gt;Install &lt;a href=&quot;https://www.hammerspoon.org/&quot;&gt;Hammerspoon&lt;/a&gt; automation tool for macOS&lt;/li&gt;
  &lt;li&gt;Install &lt;a href=&quot;https://github.com/gingerbeardman/playdate-mouse-support/blob/main/mouse/mouse_to_playdate.lua&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mouse_to_playdate.lua&lt;/code&gt;&lt;/a&gt; (instructions in the file)&lt;/li&gt;
  &lt;li&gt;Press the hotkey (defaults to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;F13&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;The guide window (virtual trackpad?) appears so you can gauge Playdate screen size&lt;/li&gt;
  &lt;li&gt;Move your mouse pointer and watch the drawing appear!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I’ve tested this on a MBP running Sonoma with a mouse and a trackpad. There’s very little lag, it’s really quite usable. The video has substantial lag as I was capturing through QuickTime and my phone camera. Anyway, it’s super cool!&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;demos&quot;&gt;Demos&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Rorschach drawing app is at: &lt;a href=&quot;https://gingerbeardman.itch.io/rorschach&quot;&gt;gingerbeardman.itch.io/rorschach&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;An example project with source code is at: &lt;a href=&quot;https://github.com/gingerbeardman/playdate-mouse-support&quot;&gt;github.com/gingerbeardman/playdate-mouse-support&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;notes&quot;&gt;Notes&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;This is a technical proof of concept, so it can be improved&lt;/li&gt;
  &lt;li&gt;It was created to show that this can be done. It is not a final version or the most robust way of doing this. And, yes, sorry, it’s only available for macOS&lt;/li&gt;
  &lt;li&gt;My dream scenario would be for Playdate Simulator and Mirror to have this feature built-in, so you can enable the feature and then interact with the virtual screen to forward mouse events to Playdate&lt;/li&gt;
  &lt;li&gt;If that can’t happen, then maybe a more native mouse forwarding client can be created for each of macOS, Windows, and Linux&lt;/li&gt;
  &lt;li&gt;On macOS it would be cool if it supported Apple Pencil via an iPad/Sidecar&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 11 May 2024 10:52:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/05/11/mouse-support-for-playdate/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/05/11/mouse-support-for-playdate/</guid>
        </item>
      
    
      
        <item>
          <title>Emoji history: the missing years</title>
          <description>&lt;p&gt;During &lt;a href=&quot;/2023/10/21/list-of-vintage-japanese-pixel-dot-art-software/&quot;&gt;my research into vintage Japanese drawing software&lt;/a&gt;, I came across some devices that had built in sketch or handwritten memo functions. I bought a couple of them to see if they did anything cool or interesting. These sorts of devices are pre-internet, so there’s not much about them online, and they can’t be emulated, so the only way to find out what they do is to get first hand experience by reading the manual or, better, using one yourself. It’s difficult to find these devices in working condition, as most of them have screen polarisers that have gone bad over time, but if you’re lucky you can find one.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1994&quot;&gt;1994&lt;/h2&gt;

&lt;p&gt;One such device &lt;a href=&quot;https://twitter.com/gingerbeardman/status/1748017395585683751&quot;&gt;I bought&lt;/a&gt; was the Sharp PI-4000, from 1994. This is a pocket computer that rolled out of Sharp’s involvement in the development and manufacturing of Apple’s Newton MessagePad. In 1993 Sharp did their own licenced version of the &lt;a href=&quot;https://apple.fandom.com/wiki/MessagePad_H1000&quot;&gt;Apple Newton MessagePad H1000&lt;/a&gt;, the &lt;a href=&quot;https://apple.fandom.com/wiki/Sharp_Expert_Pad_PI-7000&quot;&gt;Expert Pad PI-7000&lt;/a&gt;, but just like Apple’s device it wasn’t as successful as they’d hoped. But before that, in 1992, they’d made a device called the PV-F1 which was the first touchscreen-only PDA. After the Expert Pad failure, Sharp took another attempt at the concept and came up with the PI-3000 in 1993. This solved all the problems with the PV-F1, most notably size and cost. The device I have, the PI-4000, was released a year later and features higher memory capacity. The PI-3000/4000 devices could transfer data via infrared, connect to a modem to send faxes, and by the PI-5000 in 1995 could connect to cell phones to send emails. They all use a simplified—but still quite complicated—version of the multi-window operating system that had been developed for the PV-F1.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/emoji-history-sharp-pi-3000.jpg&quot; alt=&quot;&quot; title=&quot;Sharp Zaurus PI-3000 “Personal Information Tool” (1993)&quot; /&gt;&lt;/p&gt;

&lt;p&gt;So I was trying out the PI-4000, the memo function is pretty cool allowing you to draw in different dither shades and pen widths, and use stamps to add symbols to your memo. These are mostly map-related things like road and rail junctions, buildings, and train stations. Pretty cool. Then I tried typing some messages on the device and as I explored the myriad of keyboard input mechanisms I came across something rather familiar (sorry about the awful photo—it’s the best I could do, honest—the screen is very reflective and the pixels are so far from the backing they cast individual shadows!):&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/emoji-history-sharp-pi-4000-emoji-picker.jpg&quot; alt=&quot;PNG&quot; title=&quot;Look! It&apos;s an emoji picker on the Sharp PI-4000 (1994)&quot; /&gt;&lt;/p&gt;

&lt;p&gt;At this point, I couldn’t quite believe what I was seeing because I was under the impression that the first emoji were created by an anonymous designer at &lt;a href=&quot;https://emojipedia.org/softbank/1997&quot;&gt;SoftBank in 1997&lt;/a&gt;, and the most famous emoji were created by Shigetaka Kurita at &lt;a href=&quot;https://emojipedia.org/docomo/1999&quot;&gt;NTT DoCoMo in 1999&lt;/a&gt;. But the Sharp PI-4000 in my hands was released in 1994, and it was chock full of recognisable emoji. Then down the rabbit hole I fell. 🕳️🐇&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/emoji-history-sharp-pi-4000-emoji-table-16-16.png#pi4000&quot; alt=&quot;PNG&quot; title=&quot;Emoji present on the Sharp PI-4000 (1994)&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1990&quot;&gt;1990&lt;/h2&gt;

&lt;p&gt;A little more reading, and a tip from my friend &lt;a href=&quot;https://twitter.com/chame&quot;&gt;@chamekan&lt;/a&gt; on Twitter, unearthed the fact that the NEC PI-ET1 in 1990 also contained emoji&lt;sup id=&quot;fnref:piet1&quot;&gt;&lt;a href=&quot;#fn:piet1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. I also found a &lt;a href=&quot;https://www.reddit.com/r/retrobattlestations/comments/vzm9gm/nec_piet1_the_first_and_only_electronic_organizer/&quot;&gt;collector who owned a device&lt;/a&gt;, and we’ll hear more from them later on. The device is literally the coolest thing you’ve ever seen. With system software written by video game developer Hudson Soft its character set features emoji that can be typed inline, and it also features a &lt;a href=&quot;https://youtu.be/8_w8elG3w0Y?t=248&quot;&gt;“montage function” that allows you to create faces for each of your contacts&lt;/a&gt;—15 years later we’d see something similar in Mii on Nintendo Wii in 2006. The emoji on this device are a lot less well designed, in my humble opinion, than those on the Sharp devices.&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;8_w8elG3w0Y&quot; params=&quot;start=503&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/emoji-history-nec-pi-et1-emoji-table-20-20.png#piet1&quot; alt=&quot;PNG&quot; title=&quot;Emoji present on the NEC PI-ET1 (1990)&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;a-word-about-word-processors&quot;&gt;A word about word processors&lt;/h2&gt;

&lt;p&gt;By now I was in contact with Keith at &lt;a href=&quot;https://emojipedia.org&quot;&gt;Emojipedia&lt;/a&gt;, who mentioned that he remembered a Sharp device with emoji, a word processor. I found one in the Sharp WD-A521, from November 1990, which &lt;a href=&quot;http://kanji.zinbun.kyoto-u.ac.jp/~yasuoka/Emoji/SHARP-WD-A521p457-458.pdf&quot;&gt;featured higher resolution versions of the emoji designs&lt;/a&gt; found on my Sharp PI-4000.&lt;/p&gt;

&lt;p&gt;There’s also the Panasonic FW-U1S50 from 1990, &lt;a href=&quot;https://archive.org/details/panasonic-fw-u-1-s-50/Panasonic%20パーソナルワープロ%20FW-U1S50%20リファレンスマニュアル/page/n311/mode/1up&quot;&gt;which contains 110 famiiar emoji&lt;/a&gt; under a section called “illustrations”, and also contains &lt;a href=&quot;https://archive.org/details/panasonic-fw-u-1-s-50/Panasonic%20パーソナルワープロ%20FW-U1S50%20リファレンスマニュアル/page/n311/mode/1up&quot;&gt;another 99 “audio/visual” symbols&lt;/a&gt; some of which coincide with modern emoji.&lt;/p&gt;

&lt;p&gt;Perhaps there are other word processors from around that time that also contain emoji? I understand from my friend &lt;a href=&quot;https://twitter.com/haeckel&quot;&gt;Izumi Okano&lt;/a&gt; that Japanese software developer Enzan-Hoshigumi, &lt;a href=&quot;/2021/12/16/tomoya-ikeda-macintosh-artist/&quot;&gt;most famous for their Macintosh software and clipart&lt;/a&gt;, had created pictograms for one of the Canoword word processors around 1986. So at this point I’m thinking, why would the emoji on a word processor be ignored on the timeline of emoji history? Was there anything else being ignored?&lt;/p&gt;

&lt;p&gt;Before cell phones became prevalent there were pagers, or beepers, in Japan these were known as Pocket Bell. Initially they would only beep and show a number, and &lt;a href=&quot;https://twitter.com/s7ephenwithaph/status/1785939813432254950&quot;&gt;people would use “beeper slang”&lt;/a&gt; to form words by using numbers whose pronunciation was similar to words and syllables. Necessity is the mother of invention! Eventually pagers would be able to send and receive text. It was perhaps only natural that emoji find a home on these devices, with the most notable being the heart ❤️ emoji. But the date of this transition is 1995, which is earlier than the SoftBank emoji from 1997 but later than my Sharp PI-4000 device.&lt;/p&gt;

&lt;h2 id=&quot;a-note-about-beepers&quot;&gt;A note about beepers&lt;/h2&gt;

&lt;p&gt;As an aside, it’s interesting to understand how emoji were typed on pagers/beepers. They weren’t selected using a picker, which would have required cycling through a huge range of characters, but rather typed in numeric digits which narrows the cycling down to far less characters.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/emoji-history-pocket-bell-pager.jpg&quot; alt=&quot;JPG&quot; title=&quot;Pager cheat sheet, photo by 山下メロ &amp;lt;a href=https://ima.goo.ne.jp/column/article/6981.html&amp;gt;https://ima.goo.ne.jp/column/article/6981.html&amp;lt;/a&amp;gt;&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The numeric code: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21 91 15 24 12 23 78&lt;/code&gt;&lt;br /&gt;
…would map to: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;カラオケイク？&lt;/code&gt;&lt;br /&gt;
…which means: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KARAOKE?&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Wild. Typing text this way must have felt like programming machine code directly in hexadecimal!&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;what-makes-it-emoji&quot;&gt;What makes it emoji?&lt;/h2&gt;

&lt;p&gt;I was chatting to my friend &lt;a href=&quot;https://lmnt.me/blog/&quot;&gt;Louie Mantia&lt;/a&gt;, who has designed many emoji in his career, discussing the earlier emoji I had found in my 1994 device. Louie asked me to confirm that I could type emoji inline with text, giving me the example &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;W😲W&lt;/code&gt;, which was his criteria for the symbols to qualify as emoji. If I couldn’t do that, he suggested we could only consider the symbols as icons.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/emoji-history-sharp-pi-4000-emoji-wow.jpg&quot; alt=&quot;PNG&quot; title=&quot;Passing the Emoji test on the Sharp PI-4000&quot; /&gt;&lt;/p&gt;

&lt;p&gt;So if I can type them inline amongst text on my device from 1994 that was capable of connecting to other devices and sending messages, then surely they should be considered the first emoji? Why do we, currently, only count emoji as emoji if they’re on a mobile phone? I’m also wondering when these emoji might have been designed. Were they created in 1994 for the PI-4000, in 1993 for the PI-3000, or earlier for another device?&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1988&quot;&gt;1988&lt;/h2&gt;

&lt;p&gt;So I kept looking. I was aware of another line of Sharp devices, electronic organisers, known as the Bware range in Japan and Wizard in the USA. These were pretty popular at the time, so much so that the USA device even &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Wizard_(Seinfeld)&quot;&gt;got it’s own episode of Seinfeld&lt;/a&gt; in 1998. I’d come back into contact with these devices just last year as they had the interesting capability of being able to &lt;a href=&quot;https://forums.insertcredit.com/t/stay-sharp-with-sc-denshi-system-techo-games/2326&quot;&gt;play video games&lt;/a&gt; stored on solid-state application “IC” cards. You can play a version of Tetris by BPS that is quite different to the Game Boy version, and both were released in 1989. You can also play versions of Sokoban by Thinking Rabbit, and Fortress by SSI/Victor, amongst others.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/emoji-history-sharp-pa-8500-1988.jpg&quot; alt=&quot;JPG&quot; title=&quot;Sharp PA-8500 (1988)&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Thanks to a collector, &lt;a href=&quot;https://www.reddit.com/r/OldHandhelds/comments/sr51ze/may_i_present_you_the_whole_family_of_sharp/&quot;&gt;Akuji&lt;/a&gt;, I was able to confirm that the Japanese PA-8500 device, released in 1988, contains emoji&lt;sup id=&quot;fnref:pa8500&quot;&gt;&lt;a href=&quot;#fn:pa8500&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; similar in design to those found on my PI-4000 and on the WD-A521. When redrawing these it was obvious that all the Sharp emoji sets are based on the same master design. (I’d love to know more about the Sharp artwork if anybody knows anything.)&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/emoji-history-sharp-pa-8500-emoji-table-20-20.png#pa8500&quot; alt=&quot;PNG&quot; title=&quot;Emoji present on Sharp PA-8500 (1988)&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;how-old-is-an-emoji&quot;&gt;How old is an emoji?&lt;/h2&gt;

&lt;p&gt;At this point we’ve wiped almost a decade off the creation date of emoji, but can we go further? Is there a way to date a set of emoji? In Japanese 絵文字 means emoji.&lt;/p&gt;

&lt;p&gt;If we think about the PA line of devices, the PA-8500 was released in 1988, and it’s predecessor the (emoji-less) PA-7000 was released in 1987. So maybe the emoji set was created around this time? We can get closer by looking at a couple of characters present in the emoji that give us &lt;a href=&quot;https://srad.jp/~yasuoka/journal/495877/&quot;&gt;a clue to the date of creation&lt;/a&gt;. That is indeed the case with the Sharp PI-4000 and WD-A521.&lt;/p&gt;

&lt;p&gt;The characters &lt;a href=&quot;https://ja.wikipedia.org/wiki/渡辺和博#○金・○ビ&quot;&gt;○金 and ○ビ&lt;/a&gt; (&lt;em&gt;maru-kin&lt;/em&gt; meaning rich/successful/winner and &lt;em&gt;maru-bi&lt;/em&gt; meaning poor/unsuccessful/loser) were invented by the author &lt;a href=&quot;https://ja.wikipedia.org/wiki/渡辺和博#○金・○ビ&quot;&gt;Kazuhiro Watanabe&lt;/a&gt; in 1984 in his book &lt;a href=&quot;https://www.amazon.co.jp/dp/4072734365&quot;&gt;Kinkonkan&lt;/a&gt; which was later &lt;a href=&quot;https://www.nikkatsu.com/movie/26211.html&quot;&gt;made into a movie&lt;/a&gt;. These were quickly accepted into Japanese vocabulary, winning the 84年の日本流行語 (Japanese Buzzwords Award 1984). And they are right there in the Sharp PI-4000 emoji, represented as characters enclosed in circles. They were in common use throughout Japan’s bubble-era, 1986-1991, but eventually fell out of fashion and are now considered obsolete. It’s interesting to note that they are not featured in either the &lt;a href=&quot;https://emojipedia.org/softbank/1997&quot;&gt;1997 SoftBank&lt;/a&gt; or &lt;a href=&quot;https://emojipedia.org/docomo/1999&quot;&gt;1999 NTT DoCoMo&lt;/a&gt; emoji sets.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1984&quot;&gt;1984&lt;/h2&gt;

&lt;p&gt;Once you accept that emoji existed in the 1980s, more things come to light. The Ishii Award 「石井賞創作タイプフェイスコンテスト」 was a &lt;a href=&quot;https://news.mynavi.jp/article/font-history-19/&quot;&gt;typeface design contest organised by the community of type designers in 1970&lt;/a&gt;. By 1984 it was in its 8th year. Yutaka Satoh of Type-Labo proposed a typeface consisting of emoji. Because they weren’t on screen they were created by arranging dots in various shapes, but they are recognisably emoji.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Coincidentally, I used a hybrid of this sort of approach &lt;a href=&quot;/2023/11/26/easter-egg-emoji-converting-pixels-into-particles/&quot;&gt;when I added emoji to my game YOYOZO&lt;/a&gt; in September 2023: I plot the emoji as points but define them on a pixel grid.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/emoji-history-type-labo-typeface-1984.jpg&quot; alt=&quot;JPG&quot; title=&quot;Yakumono typeface (partial/proposed), created by Yutaka Satoh (TYPE-LABO) in 1984&quot; /&gt;&lt;/p&gt;

&lt;p&gt;In Matt Alt’s book &lt;a href=&quot;https://www.goodreads.com/book/show/30631850-the-secret-lives-of-emoji&quot;&gt;“The Secret Lives of Emoji: How Emoticons Conquered the World”&lt;/a&gt;, there is a brief mention of ASCII emoticons on the Japanese internet (JUNET) in 1984, and then it fast forwards to 1995 to begin talking about the Pager, missing a decade of emoji usage in the process.&lt;/p&gt;

&lt;p&gt;In the &lt;a href=&quot;https://www.type-labo.jp/Ohbun.html&quot;&gt;Yakumono typeface, created by Yutaka Satoh&lt;/a&gt; (TYPE-LABO), we can clearly see many of the key emoji that would persist throughout the years: smiley faces, food, drink, cigarettes, sweat, umbrella, paperclip, lips, envelope, and most interestingly the (not smiling) pile of poo. This typeface received an honourable mention at the awards. Some 40 years later, I think it’s safe to say it deserved more. 🏆&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1979&quot;&gt;1979&lt;/h2&gt;

&lt;p&gt;We can see &lt;a href=&quot;http://kanji.zinbun.kyoto-u.ac.jp/~yasuoka/JUGYO/2009-12-21.pdf&quot;&gt;emoji in the character sets of Japanese home computers&lt;/a&gt; such as the Sharp MZ-80K, which included a UFO, smiley faces, stick figures, car, snake, and more. I won’t include them here but you can click the above link to see some in a PDF. 💾&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1965&quot;&gt;1965&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://ja.wikipedia.org/wiki/BA-90&quot;&gt;“Full Moon With Face”, also known as BA-90&lt;/a&gt; which was listed in a book of typesetting symbols, published by Sha-ken in 1965. A &lt;a href=&quot;https://emojipedia.org/full-moon-face&quot;&gt;smiling moon is still present in the emoji set today&lt;/a&gt;. 🌝&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/emoji-history-ba-90-full-moon-with-face.png#ba90&quot; alt=&quot;PNG&quot; title=&quot;image courtesy of &amp;lt;a href=https://commons.m.wikimedia.org/wiki/File:BA-90.png&amp;gt;Wikimedia&amp;lt;/a&amp;gt;&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1959&quot;&gt;1959&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://ja.wikipedia.org/wiki/CO-59&quot;&gt;CO-59 is a character set created in 1959&lt;/a&gt; for exchange of data between Japanese newspapers. In it is included a symbol of a baseball, which again is &lt;a href=&quot;https://emojipedia.org/baseball&quot;&gt;still present in emoji&lt;/a&gt; ⚾️ and &lt;a href=&quot;https://www.fileformat.info/info/unicode/char/26be/index.htm&quot;&gt;at Unicode codepoint U+26BE&lt;/a&gt; ⚾︎ today.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/emoji-history-co-59-baseball.png&quot; alt=&quot;PNG&quot; title=&quot;image courtesy of &amp;lt;a href=http://etlcdb.db.aist.go.jp/etlcdb/&amp;gt;ETL character database&amp;lt;/a&amp;gt;&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;comparing-emoji&quot;&gt;Comparing Emoji&lt;/h2&gt;

&lt;p&gt;I was interested in how the emoji that I have redrawn compared to the 1997 SoftBank and 1999 DoCoMo sets, and an early Pocket Bell, so here’s a little table.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt; &lt;/th&gt;
      &lt;th&gt;Sharp&lt;br /&gt;PA-8500&lt;/th&gt;
      &lt;th&gt;NEC&lt;br /&gt;PI-ET1&lt;/th&gt;
      &lt;th&gt;Sharp&lt;br /&gt;PI-4000&lt;/th&gt;
      &lt;th&gt;Pocket Bell&lt;br /&gt;R-FAHC&lt;/th&gt;
      &lt;th&gt;SoftBank&lt;/th&gt;
      &lt;th&gt;NTT&lt;br /&gt;DoCoMo&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Year&lt;/td&gt;
      &lt;td&gt;1988&lt;/td&gt;
      &lt;td&gt;1990&lt;/td&gt;
      &lt;td&gt;1994&lt;/td&gt;
      &lt;td&gt;1995&lt;/td&gt;
      &lt;td&gt;1997&lt;/td&gt;
      &lt;td&gt;1999&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Quantity (approx)&lt;/td&gt;
      &lt;td&gt;100&lt;/td&gt;
      &lt;td&gt;130&lt;/td&gt;
      &lt;td&gt;170&lt;/td&gt;
      &lt;td&gt;7&lt;/td&gt;
      &lt;td&gt;90&lt;/td&gt;
      &lt;td&gt;176&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Resolution&lt;/td&gt;
      &lt;td&gt;16×16&lt;/td&gt;
      &lt;td&gt;16×16&lt;/td&gt;
      &lt;td&gt;12×12&lt;/td&gt;
      &lt;td&gt;5×7&lt;/td&gt;
      &lt;td&gt;12×12&lt;/td&gt;
      &lt;td&gt;12×12&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;So what does this all mean? I’d say mostly that the history emoji isn’t as clean cut as you might have thought. You can decide for yourself on what you consider to be the first emoji. It depends on our own personal definition, so there is no right or wrong answer. 😎&lt;/p&gt;

&lt;p&gt;Personally, I define the start date of emoji as the point in time when sets of these symbols first appeared for use whilst composing text. I don’t think the timeline should start at mobile phones, as this feels like a somewhat arbitrary decision that dismisses a lot of history. It’s like saying music only began to exist from the moment it could be recorded and listened to without the actual muscians being present. 🤔&lt;/p&gt;

&lt;p&gt;As to whether the timeline of emoji history will be rewritten with this knowledge, it’s difficult to say. Much of this falls in the grey area of happening around the time the internet was taking hold, plus most things about the origin of emoji are in Japanese language, so there are unlikely to be sources Wikipedia would consider verifiable enough. The best we could do is quote the pages of the manuals for devices, and for the rest hope that there’s some record in Japanese literature that could be cited.&lt;/p&gt;

&lt;p&gt;I won’t be running the Wikipedia editing gauntlet, but if you do please let me know how it goes! 🧨&lt;/p&gt;

&lt;hr /&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/emoji-history-piskel.png&quot; alt=&quot;PNG&quot; title=&quot;I added a new tool to the Piskel app to make redrawing hundreds of emoji a little bit easier&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;terms-of-use&quot;&gt;Terms of use&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;I painstakingly recreated the emoji sets on this page, pixel by pixel, over many days of hard work. I even went so far as &lt;a href=&quot;/2023/05/10/piskel-for-playdate/&quot;&gt;adding a new tool to the pixel art app I use&lt;/a&gt;, so as to make the task of redrawing hundreds of emoji a little less daunting. Feel free to utilize the emoji images, just remember to credit @gingerbeardman and include a link to this page. With one exception: I object to the use of these images for the purpose of creating NFTs. Thanks for your understanding!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;printed-citations&quot;&gt;Printed citations&lt;/h2&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:piet1&quot;&gt;
      &lt;p&gt;NEC Electronic Tool PI-ET1, Instruction Manual, p.131, システム外字数 (“Non System Kanji”) &lt;a href=&quot;#fnref:piet1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:pa8500&quot;&gt;
      &lt;p&gt;Sharp Electronic Notebook PA-8500, Operating Instructions, p.201, 記号一覧表 (“Symbol List”) &lt;a href=&quot;#fnref:pa8500&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 10 May 2024 20:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/05/10/emoji-history-the-missing-years/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/05/10/emoji-history-the-missing-years/</guid>
        </item>
      
    
      
        <item>
          <title>Adding your own multi-channel audio to Music app</title>
          <description>&lt;p&gt;I’m really enjoying Dolby Atmos, “spatial audio”, or “surround sound” as we used to call it. There is so much music in this format on streaming platforms, both new albums and classic albums. I wanted to listen to Björk’s first four albums in “spatial audio”, but they don’t currently exist in that format on streaming platforms. But I was reminded about DVD-Audio versions of these from back in the day, and I could find most of mine, so I figured I’d have a go of converting them myself whilst I’m waiting for Dolby Atmos versions to hit streaming.&lt;/p&gt;

&lt;p&gt;This blog post lists the three main steps needed to add your own multi-channel audio to Music.app (you might know it by its old name: iTunes) and have them be accessible across all of your devices thanks to Apple Music’s Cloud Library (you might know it by its old name: iCloud Music Library).&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;dvd-audiovideo&quot;&gt;DVD Audio/Video&lt;/h2&gt;

&lt;p&gt;Three albums I have were released on DVD and contain multi-channel audio in both DTS and Dolby Digital as DVD-Video, these are Debut, Post, and Homogenic. Vespertine is better mastered and was released as a disc that included DVD-Audio. Regardless, we can take the same approach for these two disc types: use &lt;a href=&quot;https://www.dvdae.com&quot;&gt;DVD Audio Extractor&lt;/a&gt; (the 30-day trial is OK) to extract the tracks to FLAC files:&lt;/p&gt;

&lt;p&gt;Settings:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Sample rate: Same as input&lt;/li&gt;
  &lt;li&gt;Channels: All 6 Channels&lt;/li&gt;
  &lt;li&gt;Bits per sample: 24-bit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’ll take a minute or two for the files to be generated.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Result: many multi-channel FLAC files&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;aside-cloud-library&quot;&gt;Aside: Cloud Library&lt;/h2&gt;

&lt;p&gt;Music.app (formerly iTunes) doesn’t really go out of its way to support multi-channel audio users might add themselves. We won’t be creating Dolby Atmos tracks, but rather we’ll take advantage of a loop hole in Apple Music’s Cloud Library feature.&lt;/p&gt;

&lt;p&gt;Thanks to &lt;a href=&quot;https://www.quadraphonicquad.com/forums/threads/ripping-in-surround-for-apple-tv.33931/post-699285&quot;&gt;a post on the QuadrophonicQuad forum&lt;/a&gt; we know that we need to limit the bitrate to 256kb/s for it to be uploaded unmodified to our Cloud Library and sync to all our devices. Well, it turns out that trick also works with 768kb/s bitrate files, which is the same bitrate as Dolby Atmos releases on Apple Music. That’s good enough for me.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;conversionencoding&quot;&gt;Conversion/Encoding&lt;/h2&gt;

&lt;p&gt;There are many GUI tools that you might use to do this but I’ve chose to use ffmpeg on the command line. Feel free to adapt these settings to your tool of choice. The most important property is the 768kb/s bitrate, as mentioned earlier.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;for n in *.flac; do ffmpeg -i &quot;$n&quot; -vn -c:a aac_at -b:a 768k -sample_fmt s16 -ar 48000 &quot;$n.m4a&quot;; done&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Breaking down the command above:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;for n in *.flac; do&lt;/code&gt; = loop through all *.flac files&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-i &quot;$n&quot;&lt;/code&gt; = input, using filename from for loop&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-vn&lt;/code&gt; = remove the video track&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-c:a aac_at&lt;/code&gt; = use Apple’s AAC encoder&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-b:a 768k&lt;/code&gt; = target 768kb/s bitrate&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-sample_fmt s16&lt;/code&gt; = 16-bit sample format&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-ar 48000&lt;/code&gt; = 48KHz sample rate&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;$n.m4a&quot;&lt;/code&gt; = output, using filename from for loop, adding .m4a&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;; done&lt;/code&gt; = end for loop&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hopefully that makes sense.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Result: many multi-channel M4A files&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;chapters&quot;&gt;Chapters&lt;/h2&gt;

&lt;p&gt;If the M4A audio file contains chapters they will need to be removed or the file will not be playable on iPhone. We can load it into &lt;a href=&quot;https://subler.org&quot;&gt;Subler&lt;/a&gt;, then select and delete the “Text Track”.&lt;/p&gt;

&lt;p&gt;The process above should not introduce them, but I’m mentioning it as I was repeatedly caught out by this on my journey to this solution. If you fail to remove it the track will either either upload but not be playable, error and not upload, or be matched rather than uploaded.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Result: multi-channel M4A file (modified)&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;final-steps&quot;&gt;Final steps&lt;/h2&gt;

&lt;p&gt;Add the final files to Music.app on your desktop. At this point you can add artwork and other meta data, such as tagging them as “multi-channel” or similar.&lt;/p&gt;

&lt;p&gt;When you’re done make sure to choose &lt;em&gt;File &amp;gt; Library &amp;gt; Update Cloud Library&lt;/em&gt;. After they finish uploading, open the Music app on your iPhone and you’ll see the multi-channel files ready to play.&lt;/p&gt;

&lt;p&gt;These multi-channel files work wonderfully with AirPods Pro spatial audio head tracking!&lt;/p&gt;

&lt;hr /&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/music-multi-channel.heic&quot; alt=&quot;WEBP&quot; title=&quot;My own multi-channel audio in Music app on my iPhone&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 09 May 2024 20:19:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/05/09/adding-your-own-multi-channel-audio-to-music-app/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/05/09/adding-your-own-multi-channel-audio-to-music-app/</guid>
        </item>
      
    
      
        <item>
          <title>Per-game skins in the Delta classic video game emulator for iOS</title>
          <description>&lt;p&gt;Apple recently changed the App Store rules to allow emulators, which means we’re now seeing emulators for classic video game consoles available for download! This is great news for a retro gamer like myself. &lt;a href=&quot;https://apps.apple.com/gb/app/delta-game-emulator/id1048524688&quot;&gt;Delta&lt;/a&gt; is one such emulator that currently focuses on Nintendo platforms: NES, Game Boy, Game Boy Color, SNES, N64 and DS.&lt;/p&gt;

&lt;p&gt;I thought it would be fun to play my favourite Nintendo DS game: &lt;a href=&quot;/2013/06/29/maboshi/&quot;&gt;MaBoShi&lt;/a&gt;. This is an odd choice of game for a few reasons, but it really tests what Delta and the melonDS emulation core can do.&lt;/p&gt;

&lt;p&gt;Immediately I noticed that the Nintendo DS emulation quality is high: MaBoShi’s mosaic transitions are shown, whereas in other emulators such as DraStic or DeSmuME they are not. That’s a good start!&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/delta-maboshi-default.png&quot; alt=&quot;PNG&quot; title=&quot;Delta&apos;s default Nintendo DS skin—pretty nice! BUT&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;when-good-isnt-good-enough&quot;&gt;When good isn’t good enough&lt;/h2&gt;

&lt;p&gt;But, we can see some odd things about MaBoShi:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;it is played with the DS rotated on its side&lt;/li&gt;
  &lt;li&gt;the second screen goes mostly unused&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And there are some other things we can’t see:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;it doesn’t use the touch screen&lt;/li&gt;
  &lt;li&gt;only the D-pad is used during play (and Start button to pause)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Usually, when I play this game in an emulator I activate single screen mode and forgo seeing the high score, which is no big deal as the game ends at 1 million and that’s always my goal.&lt;/p&gt;

&lt;p&gt;So I looked into the &lt;a href=&quot;https://faq.deltaemulator.com/using-delta/controller-skins&quot;&gt;Delta docs&lt;/a&gt; and &lt;a href=&quot;https://noah978.gitbook.io/delta-docs/skins&quot;&gt;skin docs&lt;/a&gt; and find that the options to show a single screen, or rotate it, are controlled by the skin (visual theme) you are using.&lt;/p&gt;

&lt;p&gt;Reading further into skins the capabilities seemed quite comprehensive, so I began to hatch a plan… &lt;em&gt;maybe I can create a custom skin just for MaBoShi&lt;/em&gt;?&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;i-love-it-when-a-plan-comes-together&quot;&gt;I love it when a plan comes together&lt;/h2&gt;

&lt;p&gt;Here’s the feature list I came up with:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;show the main game screen&lt;/li&gt;
  &lt;li&gt;show only the score from the secondary screen&lt;/li&gt;
  &lt;li&gt;remove all controls other than the d-pad, start and delta button&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I achieved this goal as follows:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;define two seperate screens to split the DS image&lt;/li&gt;
  &lt;li&gt;rotate each of the screens&lt;/li&gt;
  &lt;li&gt;overlap the screens so that only the score from the secondary screen is visible&lt;/li&gt;
  &lt;li&gt;rotate the d-pad direction controls&lt;/li&gt;
  &lt;li&gt;made the touch/game screen a big button&lt;/li&gt;
  &lt;li&gt;make empty space equivalent to nearest button&lt;/li&gt;
  &lt;li&gt;create a nice PDF to show the buttons visually&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you’re interested in the JSON associated with this skin, &lt;a href=&quot;https://gist.github.com/gingerbeardman/00a75a0675da8a98faa0812383eb822e&quot;&gt;here it is on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;maximum-joy&quot;&gt;Maximum joy&lt;/h2&gt;

&lt;p&gt;Installation and download instructions are at the bottom of the page, but here’s the final skin:&lt;/p&gt;

&lt;p class=&quot;deltaskin&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/delta-maboshi-deltaskin.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/delta-maboshi-deltaskin-instructions.png&quot; alt=&quot;PNG&quot; title=&quot;Game instructions are presented when the phone is in landscape&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;installation&quot;&gt;Installation&lt;/h2&gt;

&lt;p&gt;To install the skin you need to do a little bit of busy work, but boy is it worth it:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Install &lt;a href=&quot;&quot;&gt;Delta&lt;/a&gt; and get it running DS games (&lt;a href=&quot;https://www.youtube.com/watch?v=lV_QfVvXA-o&quot;&gt;check this video&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Create a folder called Delta in your iCloud Drive so you can easily store/retrieve some downloads&lt;/li&gt;
  &lt;li&gt;Download the following files:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://archive.org/download/maboshi-nintendo-ds/MaBoShi.nds.zip&quot;&gt;MaBoShi.nds.zip&lt;/a&gt; game file&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://archive.org/download/maboshi-nintendo-ds/MaBoShi.jpg&quot;&gt;MaBoShi.jpg&lt;/a&gt; artwork&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://cdn.gingerbeardman.com/files/NDS_MaBoShi.deltaskin&quot;&gt;MaBoShi.deltaskin&lt;/a&gt; custom skin&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Open the .nds.zip game file in Delta&lt;/li&gt;
  &lt;li&gt;Tap and hold the game icon to show a menu&lt;/li&gt;
  &lt;li&gt;Choose “Change Artwork”&lt;/li&gt;
  &lt;li&gt;Select the .jpg you downloaded earlier&lt;/li&gt;
  &lt;li&gt;Choose “Change Controller Skin”&lt;/li&gt;
  &lt;li&gt;Select the skin using the + button and set it as both Portrait and Landscape skin for the game&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Check out &lt;a href=&quot;https://gamefaqs.gamespot.com/wii/946472-maboshis-arcade/faqs&quot;&gt;my MaBoShi Guide at GameFAQs&lt;/a&gt; to learn more about the game and how to play it. It’s essentially a one button game so isn’t affected by the lack of physical buttons.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 18 Apr 2024 19:55:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/04/18/per-game-skins-in-the-delta-classic-video-game-emulator-for-ios/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/04/18/per-game-skins-in-the-delta-classic-video-game-emulator-for-ios/</guid>
        </item>
      
    
      
        <item>
          <title>Adding the “Move to Trash” function to System 7.1</title>
          <description>&lt;p&gt;First, a little bit of Macintosh History. You probably know that on modern macOS you can select a file in Finder, on your Desktop, or in an app, and send it to the Trash by choosing the Move to Trash menu item, or by pressing Cmd+Backspace/Delete. This keyboard shortcut was added in System 7.5.3 where it was largely unadvertised and somewhat of a secret feature, but quickly became indispensable for those who knew. Of course, these days it is proudly displayed in macOS Finder menu.&lt;/p&gt;

&lt;p&gt;Fast forward to today, when &lt;a href=&quot;https://twitter.com/james_wages&quot;&gt;James Wages&lt;/a&gt; asked about a good way to do this on System 7.1, and posed a partial solution along with a challenge. But we’ll get to that in a moment. Since I regularly use &lt;a href=&quot;/2021/04/17/turning-an-ipad-pro-into-the-ultimate-classic-macintosh/&quot;&gt;System 7 on my iPad Pro&lt;/a&gt; I’d also missed this function and had come up with a few different workarounds to map Move to Trash to Cmd+Backspace/Delete.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;#keyquencer&quot;&gt;KeyQuencer&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#finderhack&quot;&gt;FinderHack &amp;amp; KeyQuencer&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#hexedit&quot;&gt;FinderHack &amp;amp; HexEdit&lt;/a&gt; &lt;br /&gt;Bonus:&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#keyquencer-redux&quot;&gt;KeyQuencer, Redux&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;keyquencer&quot;&gt;KeyQuencer&lt;/h2&gt;

&lt;p&gt;The first workaround was to script a &lt;a href=&quot;https://macintoshgarden.org/apps/keyquencer&quot;&gt;KeyQuencer&lt;/a&gt; macro to simulate the mouse drag of the selected item to the trash can. This relied on you positioning the mouse pointer over the selected file and also making sure the Trash icon was always in the required position on screen. It worked, but it was less than ideal because it was far too fragile. I’ll leave reproducing this as an excercise for the reader.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;KeyQuencer&lt;/em&gt; is one of my favourite and most used classic Macintosh apps, written by prolific Italian developer &lt;a href=&quot;http://www.montalcini.com&quot;&gt;Alessandro Levi Montalcini&lt;/a&gt; who is still developing &lt;a href=&quot;https://www.usboverdrive.com&quot;&gt;useful things&lt;/a&gt; today! Anyway, it could be used for a wide variety of macro and automation purposes. It was very versatile as it contained its own scripting language and a dictionary of functions that touched most aspects of System 7. I use it to map &lt;a href=&quot;/tag/keyquencer/&quot;&gt;all sorts of esoteric functions&lt;/a&gt; to hotkeys, like changing screen resolutions and colour depth, or performing complicated multi-step tasks on a single key stroke. An equivalent for modern macOS is &lt;a href=&quot;https://www.keyboardmaestro.com/main/&quot;&gt;Keyboard Maestro&lt;/a&gt;, which is no doubt more capable but also more difficult to use.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;finderhack&quot;&gt;FinderHack&lt;/h2&gt;

&lt;p&gt;So, James mentioned &lt;a href=&quot;https://macintoshgarden.org/apps/finderhack&quot;&gt;FinderHack&lt;/a&gt; which is a system Extension that gave earlier versions of System 7 a similar set of Finder features to those introduced in 7.5.3. But, crucially, it mapped the Move to Trash hotkey to Cmd+T, which is different enough to become annoying as you can no longer rely on muscle memory. The challenge: how can we map this to the modern Cmd+Backspace/Delete shortcut?&lt;/p&gt;

&lt;p&gt;So, I turned to KeyQuencer once again and created a short macro which would type the Cmd+T key combination and I assigned it to Cmd+Backspace/Delete. It worked! Pressing my hotkey typed the FinderHack hotkey.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/move-to-trash-1.png&quot; alt=&quot;PNG&quot; title=&quot;This macro, bound to Cmd+Backspace/Delete, types Cmd+T to effectively map one hotkey to another&quot; /&gt;&lt;/p&gt;

&lt;p&gt;So we already have a good solution but resources are often scarce on classic Macintosh, so I wondered if I might be able to cut out the middleman and change the keyboard shortcut by modifying FinderHack directly. James had noticed that ResEdit would not allow you to type the Backspace character. I confirmed the same was true in Resorcerer. So, what to do?&lt;/p&gt;

&lt;h2 id=&quot;hexedit&quot;&gt;HexEdit&lt;/h2&gt;

&lt;p&gt;Opening FinderHack directly in &lt;a href=&quot;https://macintoshgarden.org/apps/hexedit&quot;&gt;HexEdit&lt;/a&gt; we can scroll down a little to find the menu definitions, find “Move to Trash” and can change the following hex value from 54 (“T”) to 08 (“Backspace/Delete”), those being ASCII values, and reminding ourselves that the Backspace/Delete key is different than Forward Delete key on some Apple keyboards that have both.&lt;/p&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;b&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/move-to-trash-2.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/move-to-trash-2.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/move-to-trash-3.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/move-to-trash-3.png&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 100%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__staticimage,
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2) {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;.carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

&lt;p&gt;The final modified file is up over at Macintosh Garden: &lt;a href=&quot;https://macintoshgarden.org/apps/finderhack&quot;&gt;macintoshgarden.org/apps/finderhack&lt;/a&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/move-to-trash-4.png&quot; alt=&quot;PNG&quot; title=&quot;Notice that System 7 has no glyph for the Backspace key&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Removing the confirmation alert&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I used a &lt;a href=&quot;https://github.com/fuzziqersoftware/resource_dasm/issues/77&quot;&gt;disassembler&lt;/a&gt; to figure out the code that was responsible for showing the confirmation alert that appears after pressing the hotkey, but I wasn’t sure how best to remove it. So I asked on 68KMLA.org and user &lt;em&gt;cheesestraws&lt;/em&gt; came up with a solution (thanks!) that involved NOPing out the Alert syscall setup, invokation, and return, and making the comparison that usually checks the alert button always default to the OK. I was so close to figuring out this solution myself, but I lacked a key bit of knowledge for how to figure out the hex code for a totally new instruction. Well, now I know how to do that! &lt;a href=&quot;https://68kmla.org/bb/index.php?threads/skipping-a-confirmation-alert-and-doing-the-ok-code-path.47220/post-529695&quot;&gt;Here’s all the details of how to change the machine code&lt;/a&gt;. I could have and probablt should have used Ghidra to figure out this edit to the code.&lt;/p&gt;

&lt;p&gt;Once this was done it became obvious how much of a hack FinderHack really is. After deleting the file the icon of the now missing file persists in Finder for up to a few seconds on my emulated Mac, and up to 20 seconds on period hardware! This is unacceptable, so I had to go deeper.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;keyquencer-redux&quot;&gt;KeyQuencer, Redux&lt;/h2&gt;

&lt;p&gt;I went back to old faithful, KeyQuencer, to see if there was a way I could force Finder to refresh the icon more quickly. Whilst I was reading the docs I saw the following:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;What Is KeyQuencer?

KeyQuencer is a utility that lets you create shortcuts, called macros, that
perform a series of tasks with a single keystroke. A macro is a set of
instructions that KeyQuencer uses to perform a task on a computer, for
example you can use KeyQuencer macros to:

   * Apply shortcuts directly to the current Finder selection, like moving
     items to the Trash.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Well! It turns out KeyQuencer could have solved our problem from day one! Lesson learned: RTFM.&lt;/p&gt;

&lt;p&gt;So, how do we go about setting up KeyQuencer to enable this feature? Well, before we get to that let’s talk about how KeyQuencer does its thing. It consists of three main parts:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;em&gt;KeyQuencer Engine&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;one or more &lt;em&gt;KeyQuencer Extensions&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;KeyQuencer Panel&lt;/em&gt; and/or &lt;em&gt;KeyQuencer Editor&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;one or more &lt;em&gt;KeyQuencer Macros&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The beating heart of KeyQuencer is the &lt;em&gt;KeyQuencer Engine&lt;/em&gt; system extension that lives in the usual System/Extensions folder, along with a folder in System called &lt;em&gt;KeyQuencer Extensions&lt;/em&gt; that contains KeyQuencer’s own type of extensions. Still with me?&lt;/p&gt;

&lt;p&gt;Inside the &lt;em&gt;KeyQuencer Extensions&lt;/em&gt; folder you put any KeyQuencer Extension files that you want to use, by copying them from the KeyQuencer installation folder. This was a method to keep memory usage low by only loading the functions you’re using rather than the whole suite. So if you’re using a function from the File category, you copy the “File” KeyQuencer Extension in there.&lt;/p&gt;

&lt;p&gt;Once all that is set up you can create/add KeyQuencer Macros, using either KeyQuencer Panel or KeyQuencer Editor. There are lots of sample macros included with the app to get you started, and many were made and shared by the community. The app also includes detailed command help so you know exactly what is possible and how to make it so. Eventually you can construct your own macro, which is what I’ll do here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step by step: words&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Download &lt;a href=&quot;https://macintoshgarden.org/apps/keyquencer&quot;&gt;KeyQuencer 2.5.6&lt;/a&gt; which gives us a folder called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyQuencer 2.5.6 99/07/18&lt;/code&gt; and copy the following files to their destinations:
    &lt;ul&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyQuencer Engine&lt;/code&gt; goes in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;System/Extensions&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyQuencer Panel&lt;/code&gt; goes in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;System/Control Panels&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyQuencer Extensions/Archive and Files/File&lt;/code&gt; goes in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;System/KeyQuencer Extensions&lt;/code&gt; (create the destination folder)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Install &lt;a href=&quot;https://macintoshgarden.org/apps/applescript-11&quot;&gt;AppleScript 1.1&lt;/a&gt; &lt;em&gt;Finder Scripting Software&lt;/em&gt; (this is the updated &lt;em&gt;Scriptable Finder 7.1.3&lt;/em&gt; and &lt;em&gt;Finder Scripting Extension&lt;/em&gt;)&lt;/li&gt;
  &lt;li&gt;Restart the Macintosh when prompted&lt;/li&gt;
  &lt;li&gt;Create the Macro (you could also copy and paste it from a sample macro file):
    &lt;ul&gt;
      &lt;li&gt;Open &lt;em&gt;KeyQuencer Panel&lt;/em&gt; control panel&lt;/li&gt;
      &lt;li&gt;Inside the panel choose File &amp;gt; New Macro&lt;/li&gt;
      &lt;li&gt;Give the macro a name: “Move to Trash”&lt;/li&gt;
      &lt;li&gt;Give the macro a hotkey: Cmd+Backspace/Delete&lt;/li&gt;
      &lt;li&gt;Enter the macro script: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;File move selected to trash enforce&lt;/code&gt; by pasting, typing, or using the gui&lt;/li&gt;
      &lt;li&gt;Click OK&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Select some files and press Cmd+Backspace/Delete to move them to the trash!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Step by step: video&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s a screen recording of me doing the above on a fresh System 7.1:&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 4/3;&quot; videoid=&quot;99oQ5zZMHkI&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 12 Apr 2024 22:08:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/04/12/adding-the-move-to-trash-function-to-system-7/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/04/12/adding-the-move-to-trash-function-to-system-7/</guid>
        </item>
      
    
      
        <item>
          <title>Remote monitoring a web server job queue</title>
          <description>&lt;p&gt;I use some software called &lt;a href=&quot;https://github.com/huginn/huginn&quot;&gt;&lt;em&gt;Huginn&lt;/em&gt;&lt;/a&gt; to do various automated web searching and scraping. One use case is &lt;a href=&quot;/2023/04/10/where-can-i-see-hokusai-great-wave-today/&quot;&gt;checking the status of all the institutions where The Great Wave is currently on view&lt;/a&gt;, or not. I also have it do automatic auction searches for various items I’m looking for, that would otherwise take up a bunch of my time. And much more.&lt;/p&gt;

&lt;h2 id=&quot;huginn-we-have-a-problem&quot;&gt;Huginn, we have a problem&lt;/h2&gt;

&lt;p&gt;Huginn is installed on one of my web servers and does its thing on hourly, every day of the week without fail. Well, that’s not quite true. Sometimes, something happens outside of its control and the job queue gets jammed. It should be able to cope with this event, but for whatever reason it doesn’t. There’s no easy way to tell when this has happened, and the way I usually notice is by my RSS feed appearing less busy than usual. So, the most recent time this happened I promised myself I’d find a solution to monitoring the job queue remotely.&lt;/p&gt;

&lt;h2 id=&quot;help-from-the-community&quot;&gt;Help from the community&lt;/h2&gt;

&lt;p&gt;Another Huginn user &lt;a href=&quot;https://github.com/huginn/huginn/issues/3368#issuecomment-2045510388&quot;&gt;mentioned&lt;/a&gt; that I could send a regular request to &lt;a href=&quot;https://www.healthchecks.io&quot;&gt;healthchecks.io&lt;/a&gt;, which would raise a notification if the requests stopped coming in (a method known as &lt;a href=&quot;https://en.wikipedia.org/wiki/Dead_man%27s_switch&quot;&gt;the Dead man’s switch&lt;/a&gt;) which is exactly what would happen when the job queue is jammed. This was a good idea! Whilst I could be notfications by email or various push notification services, I’d prefer to get my notifications the same way as my server notifications - through &lt;a href=&quot;https://uptimerobot.com&quot;&gt;uptimerobot.com&lt;/a&gt; - so I added that to the process, with the help of &lt;a href=&quot;https://toot.lv/@cuu508/112246652626290022&quot;&gt;Pēteris Caune&lt;/a&gt; the creator of healthchecks.io.&lt;/p&gt;

&lt;p&gt;Here is my final recipe:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https://healthchecks.io/&quot;&gt;healthchecks.io&lt;/a&gt; to get a Ping URL&lt;/li&gt;
  &lt;li&gt;create a new Huginn Scenario with a Website Agent to request the above Ping URL every hour&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://healthchecks.io/&quot;&gt;healthchecks.io&lt;/a&gt; to get a Status Badge URL (JSON format)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://uptimerobot.com&quot;&gt;uptimerobot.com&lt;/a&gt; Keyword monitor watching the contents of the Status Badge URL (check for keyword “up”, and start incident when keyword does not exist)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And that’s it! Next time the job queue jams, the Uptime Robot app will send me a push notification. I know it works because I tested it—a very important step!&lt;/p&gt;

&lt;h2 id=&quot;future-features&quot;&gt;Future features?&lt;/h2&gt;

&lt;p&gt;Maybe this setup will help me spot a pattern in the queue jams? Or perhaps I can take this further and have the Huginn restart when it gets jammed? As with all these sorts of things, I take it step by step and make one change at a time. Let’s see how it goes.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 10 Apr 2024 19:04:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/04/10/remote-monitoring-a-web-server-job-queue/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/04/10/remote-monitoring-a-web-server-job-queue/</guid>
        </item>
      
    
      
        <item>
          <title>A year in the life of a Playdate game developer</title>
          <description>&lt;p&gt;This week sees the &lt;a href=&quot;https://play.date/games/tags/on-sale&quot;&gt;first Anniversary Sale of Catalog, the official store for Playdate games&lt;/a&gt;. This means it’s almost the anniversary of &lt;a href=&quot;/2023/04/13/sparrow-solitaire-for-playdate/&quot;&gt;the release Sparrow Solitaire&lt;/a&gt;, which was the first Playdate work I did in 2023 after taking an enforced break.&lt;/p&gt;

&lt;p&gt;So I thought it would be interesting to look back and take stock of the last year of me making stuff for Playdate. What did I finish? What did I abandon? What is still to come?&lt;/p&gt;

&lt;p&gt;After Sparrow Solitaire (a huge game that took around a year of development time split between myself and Mac Vogelsang), it took me a few months to figure out the right sort of size and scope that would allow me to make a game every month or two, whilst minimising the risk of not selling enough. By September I was well and truly &lt;em&gt;in the zone&lt;/em&gt; and &lt;a href=&quot;/2023/11/21/yoyozo-how-i-made-a-playdate-game-in-39kb/&quot;&gt;created YOYOZO&lt;/a&gt; which went on to receive a commendation from Ars Technica as one of the &lt;a href=&quot;https://arstechnica.com/gaming/2023/12/ars-technicas-best-video-games-of-2023/7&quot;&gt;“Best Games of 2023”&lt;/a&gt;. And at the &lt;a href=&quot;https://play.date/games/community-awards-2023/&quot;&gt;2023 Playdate Community Awards&lt;/a&gt;, presented on 8th March 2024, Sparrow Solitaire won &lt;em&gt;Best Puzzle Game&lt;/em&gt; and YOYOZO won &lt;em&gt;Best Arcade Game&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Somebody asked me if this is my full-time job? My answer is: yes, this is my only job and I do it as often as I’m able. It’s certainly more complicated, due to various life stuff, but that’s the gist of things. Over the last twelve months, I would say I’ve been productive for around half my time.&lt;/p&gt;

&lt;p&gt;Recently I saw somebody say &lt;a href=&quot;https://twitter.com/indieretropod/status/1764443576597946593&quot;&gt;“Be careful with scope and look what you can do in a year!”&lt;/a&gt;, about the wonderful &lt;a href=&quot;https://twitter.com/johanpeitz&quot;&gt;Johan Peitz&lt;/a&gt;, and I think that addage can also be applied to my output this year.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Summary:&lt;/strong&gt; 22 projects, 10 of which were released, and 5 are still to come. I’m pretty happy with that!&lt;/p&gt;

&lt;p&gt;I also managed to squeeze in a couple of non-Playdate projects: my first real Love2D game &lt;a href=&quot;https://gingerbeardman.itch.io/portrait-curling&quot;&gt;Portrait Curling&lt;/a&gt;, modifications to vintage pixel art app &lt;a href=&quot;/2024/01/22/jinzo-paint-vintage-mobile-drawing-app/&quot;&gt;JINZO Paint&lt;/a&gt;, and I’m always &lt;a href=&quot;/&quot;&gt;blogging&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Don’t forget to &lt;a href=&quot;https://play.date/games/yoyozo/&quot;&gt;check out my Playdate games in the Catalog Sale!&lt;/a&gt; And my &lt;a href=&quot;/tag/playdate/&quot;&gt;other Playdate blog posts&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;table-wrapper&quot;&gt;
  &lt;table&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th&gt;Month&lt;/th&gt;
        &lt;th&gt;Project&lt;/th&gt;
        &lt;th&gt;Genre&lt;/th&gt;
        &lt;th&gt;Status&lt;/th&gt;
        &lt;th&gt;Store&lt;/th&gt;
        &lt;th&gt;Blog&lt;/th&gt;
        &lt;th&gt;Made With&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;2023-03&lt;/td&gt;
        &lt;td&gt;Sparrow Solitaire&lt;/td&gt;
        &lt;td&gt;Puzzle&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://play.date/games/sparrow-solitaire/&quot;&gt;Released&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://play.date/games/sparrow-solitaire/&quot;&gt;Catalog&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;/2023/04/13/sparrow-solitaire-for-playdate/&quot;&gt;Read&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://twitter.com/Vogelscript&quot;&gt;vogelscript&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;2023-04&lt;/td&gt;
        &lt;td&gt;Shark Turtle&lt;/td&gt;
        &lt;td&gt;Puzzle&lt;/td&gt;
        &lt;td&gt;Unreleased&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;2023-05&lt;/td&gt;
        &lt;td&gt;Radical&lt;/td&gt;
        &lt;td&gt;Adventure&lt;/td&gt;
        &lt;td&gt;Abandoned&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;2023-05&lt;/td&gt;
        &lt;td&gt;Carton&lt;/td&gt;
        &lt;td&gt;Puzzle&lt;/td&gt;
        &lt;td&gt;On hold&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;2023-06&lt;/td&gt;
        &lt;td&gt;Heno Heno&lt;/td&gt;
        &lt;td&gt;Puzzle&lt;/td&gt;
        &lt;td&gt;On hold&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;2023-06&lt;/td&gt;
        &lt;td&gt;Fore! Track&lt;/td&gt;
        &lt;td&gt;Sports&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://play.date/games/fore-track/&quot;&gt;Released&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://play.date/games/fore-track/&quot;&gt;Catalog&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;/2023/06/26/ball-und-panzer-golf-making-a-playdate-game-in-a-week/&quot;&gt;Read&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;2023-07&lt;/td&gt;
        &lt;td&gt;Mandala&lt;/td&gt;
        &lt;td&gt;Toy&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://github.com/gingerbeardman/mandala&quot;&gt;Released&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;GitHub&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;2023-08&lt;/td&gt;
        &lt;td&gt;Strategies&lt;/td&gt;
        &lt;td&gt;App&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://gingerbeardman.itch.io/strategies&quot;&gt;Released&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Itch&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;2023-08&lt;/td&gt;
        &lt;td&gt;DateDiff&lt;/td&gt;
        &lt;td&gt;App&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://gingerbeardman.itch.io/datediff&quot;&gt;Released&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Itch&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;2023-08&lt;/td&gt;
        &lt;td&gt;Fortress&lt;/td&gt;
        &lt;td&gt;Puzzle&lt;/td&gt;
        &lt;td&gt;Abandoned&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;2023-08&lt;/td&gt;
        &lt;td&gt;Mole Hole&lt;/td&gt;
        &lt;td&gt;Adventure&lt;/td&gt;
        &lt;td&gt;Unreleased&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://twitter.com/thoruman&quot;&gt;thoruman&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;2023-09&lt;/td&gt;
        &lt;td&gt;Rink&lt;/td&gt;
        &lt;td&gt;Sports&lt;/td&gt;
        &lt;td&gt;Tutorial&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;2023-09&lt;/td&gt;
        &lt;td&gt;Kye&lt;/td&gt;
        &lt;td&gt;Puzzle&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://mouflon-cloud.itch.io/kye&quot;&gt;Released&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Itch&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://twitter.com/MouflonCloud&quot;&gt;mouflon cloud&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;2023-09&lt;/td&gt;
        &lt;td&gt;YOYOZO&lt;/td&gt;
        &lt;td&gt;Action&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://play.date/games/yoyozo/&quot;&gt;Released&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://play.date/games/yoyozo/&quot;&gt;Catalog&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;/2023/11/21/yoyozo-how-i-made-a-playdate-game-in-39kb/&quot;&gt;Read&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;2023-10&lt;/td&gt;
        &lt;td&gt;Pararena&lt;/td&gt;
        &lt;td&gt;Sports&lt;/td&gt;
        &lt;td&gt;Abandoned&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;2023-10&lt;/td&gt;
        &lt;td&gt;Soccer&lt;/td&gt;
        &lt;td&gt;Sports&lt;/td&gt;
        &lt;td&gt;Prototype&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;2023-10&lt;/td&gt;
        &lt;td&gt;Super ICARUS&lt;/td&gt;
        &lt;td&gt;Action&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://play.date/games/icarus/&quot;&gt;Released&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://play.date/games/icarus/&quot;&gt;Catalog&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;2023-11&lt;/td&gt;
        &lt;td&gt;Boing&lt;/td&gt;
        &lt;td&gt;Action&lt;/td&gt;
        &lt;td&gt;Prototype&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;2023-11&lt;/td&gt;
        &lt;td&gt;Cranxious&lt;/td&gt;
        &lt;td&gt;Action&lt;/td&gt;
        &lt;td&gt;Prototype&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;2023-12&lt;/td&gt;
        &lt;td&gt;See The Sky&lt;/td&gt;
        &lt;td&gt;Storybook&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://gingerbeardman.itch.io/see-the-sky&quot;&gt;Released&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Itch&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;/2023/12/16/see-the-sky-thoru-yamamoto-christmas-story-for-playdate/&quot;&gt;Read&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;&lt;a href=&quot;https://twitter.com/thoruman&quot;&gt;thoruman&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;2024-01&lt;/td&gt;
        &lt;td&gt;Rocket Man&lt;/td&gt;
        &lt;td&gt;Simulation&lt;/td&gt;
        &lt;td&gt;On hold&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;2024-02&lt;/td&gt;
        &lt;td&gt;Eggdog&lt;/td&gt;
        &lt;td&gt;Action&lt;/td&gt;
        &lt;td&gt;Prototype&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;

&lt;/div&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 07 Mar 2024 19:44:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/03/07/a-year-in-the-life-of-a-playdate-game-developer/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/03/07/a-year-in-the-life-of-a-playdate-game-developer/</guid>
        </item>
      
    
      
        <item>
          <title>The Blue Nile “A Walk Across The Rooftops” (5.1)</title>
          <description>&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/the-blue-nile-a-walk-across-the-rooftops.jpg&quot; alt=&quot;The Blue Nile &amp;quot;A Walk Across The Rooftops&amp;quot;&quot; title=&quot;&amp;lt;br&amp;gt;There are no downloads here, only links&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1984&quot;&gt;1984&lt;/h2&gt;

&lt;p&gt;In early 1984 Scottish band The Blue Nile released their debut album &lt;a href=&quot;https://en.wikipedia.org/wiki/A_Walk_Across_the_Rooftops&quot;&gt;&lt;em&gt;“A Walk Across The Rooftops”&lt;/em&gt;&lt;/a&gt; including the single Tinseltown in the Rain. After 40 years the album is still regarded as a classic, and in all that time the band have released only three other albums.&lt;/p&gt;

&lt;h2 id=&quot;2010&quot;&gt;2010&lt;/h2&gt;

&lt;p&gt;A user called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;XTC343&lt;/code&gt; uploaded some files to a USENET newsgroup: a fan-made multi-channel version of The Blue Nile’s &lt;em&gt;“A Walk Across The Rooftops”&lt;/em&gt; album. The .nfo file said only:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;This is an upmix from stereo to 5.1&lt;br /&gt;
Done in Plogue.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I was so excited to listen to one of my favourite albums in a new way. I burned the DTS format 5.1 .wav and .cue pair to a CD and played it in a Sony Blu-Ray player. It was awesome! The album sounded more like a live session, with instruments and noises positioned all around.&lt;/p&gt;

&lt;h2 id=&quot;2023&quot;&gt;2023&lt;/h2&gt;

&lt;p&gt;Anyway, lots of time passed, and one day in September 2023 I rediscovered these files in my archives. A quick Google showed that they had been forgotten about and did not exist anywhere else, so I thought I’d upload them to Internet Archive. I didn’t give it any further thought.&lt;/p&gt;

&lt;h2 id=&quot;2024&quot;&gt;2024&lt;/h2&gt;

&lt;p&gt;It’s now February 2024 and I realise that I have a whole bunch of devices capable of playing multi-channel audio: my iPhone, iPad, MacBook, and AirPods Pro headphones! Time to revisit those files.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;wrangling&quot;&gt;Wrangling&lt;/h2&gt;

&lt;p&gt;Immediately it was easy to confirm playback using the original DTS format .wav and VLC app on macOS. But how to get the audio into the Music app so I can listen on my device of choice?&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https://sourceforge.net/projects/xld/&quot;&gt;XLD&lt;/a&gt; and the .cue sheet to split the single DTS format .wav into multiple files&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://ffmpeg.org&quot;&gt;FFMPEG&lt;/a&gt; to convert the DTS format .wav files into AC3 format .m4a files&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Using a video container for audio content is a trick normally reserved for podcasts, so they can have chapter markers, but here it enables us to get multi-channel content into Music app (aka iTunes).&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;playback&quot;&gt;Playback&lt;/h2&gt;

&lt;p&gt;You’ll need some multi-channel capable listening equipment.&lt;/p&gt;

&lt;p&gt;For the DTS .wav you can either burn it to a CD and play it in a suitable CD/DVD/Blu-Ray/etc player, or play the file directly using software (VLC).&lt;/p&gt;

&lt;p&gt;For the Apple .m4a files you can drop them onto the Music app or copy across your devices.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I’m sorry but I cannot help you with any of this.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Have fun listening!&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;download&quot;&gt;Download&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/the-blue-nile-a-walk-across-the-rooftops-dts-5.1&quot;&gt;archive.org/details/the-blue-nile-a-walk-across-the-rooftops-dts-5.1&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 22 Feb 2024 22:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/02/22/the-blue-nile-a-walk-across-the-rooftops-5-1/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/02/22/the-blue-nile-a-walk-across-the-rooftops-5-1/</guid>
        </item>
      
    
      
        <item>
          <title>Barbara Nessim at The Ginza Art Space (1986)</title>
          <description>&lt;p&gt;At the end of 2023 I bought a one-in-a-million find from Japan: it’s a postcard from &lt;a href=&quot;/2023/11/09/early-computer-art-by-barbara-nessim/&quot;&gt;Barbara Nessim&lt;/a&gt;’s residency at &lt;a href=&quot;https://gallery.shiseido.com/en/access/&quot;&gt;&lt;em&gt;The Ginza Art Space&lt;/em&gt;&lt;/a&gt;, September 26 thru October 19 1986. This residency came on the back of &lt;a href=&quot;/2023/11/09/early-computer-art-by-barbara-nessim/&quot;&gt;her breakthrough early computer art&lt;/a&gt; that was done on a Telidon system, a type of Teletext graphics system that displayed rudimentary vector graphics.&lt;/p&gt;

&lt;p&gt;The postcard artwork is not digital and is dated 6-86. The details on the rear are set in the Chicago typeface designed by Susan Kare for the Apple Macintosh just a couple of years prior.&lt;/p&gt;

&lt;p&gt;As well as Barbara’s residency there was an accompanying exhibition &lt;em&gt;“The Work of Barbara Nessim”&lt;/em&gt;.&lt;/p&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;b&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/barbara-nessim-ginza-1986-01.webp&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/barbara-nessim-ginza-1986-01.webp&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/barbara-nessim-ginza-1986-02.webp&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/barbara-nessim-ginza-1986-02.webp&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 140%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__staticimage,
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2) {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;.carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },10000);
  
&lt;/script&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;made-in-japan&quot;&gt;Made in Japan&lt;/h2&gt;

&lt;p&gt;During her time at The Ginza Art Space, Barbara used an NEC PC-100 to draw new work and printed them on one of the earliest wide-format colour inkjet printers, the &lt;a href=&quot;https://www.jstage.jst.go.jp/article/isjepj/24/4/24_278/_pdf/-char/ja&quot;&gt;&lt;em&gt;Fujix JetGraphy 3000&lt;/em&gt;&lt;/a&gt; (I’d love to be able to read &lt;a href=&quot;https://www.researchgate.net/publication/294487702&quot;&gt;this article at ResearchGate&lt;/a&gt;). Given the use of early technology and non-archival inks, the prints are prone to fading and are now very fragile.&lt;/p&gt;

&lt;p&gt;The choice of PC-100 computer is interesting because its display could be rotated between portrait and landscape. In portrait orientation it had a resolution of 512×720, which is seven times more pixels than the Telidon system and twice as tall as the Macintosh Plus. The PC-100 displayed bitmap graphics so it was more similar to the Macintosh than the vector graphics of the Telidon system.&lt;/p&gt;

&lt;p&gt;Colours were limited: the PC-100 hardware could display 16 colours from a palette of 512. The printer used CMYK and could produce around 10,000 colours, some of which printed better than others. This combination may have imposed some limitations as to which colours could, or should, be used.&lt;/p&gt;

&lt;p&gt;Below are three examples of the work Barbara produced at The Ginza Art Space: they are &lt;em&gt;Flowers in the Wind&lt;/em&gt;, &lt;em&gt;Hand Memory&lt;/em&gt;, and &lt;em&gt;The Gift&lt;/em&gt;. A description of the creative process is featured in &lt;a href=&quot;https://archive.org/details/PC_Computing_1988_10/page/n101/mode/2up&quot;&gt;Carol Olsen Day’s article &lt;em&gt;“The Art of Barbara Nessim”&lt;/em&gt;, in the October 1988 issue of PC Computing&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://twitter.com/gingerbeardman/status/1758166965330272503&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/barbara-nessim-ginza-1986-03.png&quot; alt=&quot;JPG&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;what-software&quot;&gt;What software?&lt;/h2&gt;

&lt;p&gt;My ongoing &lt;a href=&quot;/2023/10/21/list-of-vintage-japanese-pixel-dot-art-software/&quot;&gt;research into early Japanese pixel art software&lt;/a&gt; shows that Barbara most likely used ASCII’s エアーブラシ “Airbrush” painting software on the NEC PC-100, as it is the only graphics software for that platform I’ve been able to find &lt;a href=&quot;https://archive.org/details/login-april-1984/LOGiN%20-%20April%201984/page/n242/mode/2up&quot;&gt;advertised for sale&lt;/a&gt; or &lt;a href=&quot;https://archive.org/details/login-june-1984/LOGiN%20-%20June%201984/page/n113/mode/2up&quot;&gt;featured in period literature&lt;/a&gt;.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/barbara-nessim-ginza-1986-04.jpg&quot; alt=&quot;JPG&quot; title=&quot;LOGiN magazine, June 1984, page 117: Tachibana Hajime&apos;s article on CG mentions Airbrush&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 15 Feb 2024 23:22:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/02/15/barbara-nessim-at-the-ginza-art-space-1986/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/02/15/barbara-nessim-at-the-ginza-art-space-1986/</guid>
        </item>
      
    
      
        <item>
          <title>Interview: Kenta Cho (Japanese indie game developer)</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/dev2dev-kenta-cho.jpg&quot; alt=&quot;Kenta Cho&quot; title=&quot;Kenta Cho&quot; class=&quot;profile&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Kenta Cho&lt;/em&gt; is a Japanese indie game developer, who has been active since the 1980s. He became well-known in the West in the early 2000s with a series of bullet hell shoot-em-ups. In 2021 he created a total 139 games, which is one hell of a lockdown project. In early 2024 his game &lt;a href=&quot;https://abagames.github.io/crisp-game-lib-11-games/?pakupaku&quot;&gt;&lt;em&gt;Paku Paku&lt;/em&gt;&lt;/a&gt; went viral, as “&lt;em&gt;1D Pac-Man&lt;/em&gt;”, a year after it was made.&lt;/p&gt;

&lt;p&gt;I reached out to him with some questions and he was gracious enough to answer them candidly, from one game developer to another.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;ive-been-following-your-work-for-20-years-at-this-point-so-id-like-to-know-more-about-you-as-a-person-and-a-game-developer-can-you-please-share-some-details-about-your-background-and-current-professional-status&quot;&gt;I’ve been following your work for 20 years at this point, so I’d like to know more about you as a person and a game developer. Can you please share some details about your background and current professional status?&lt;/h2&gt;

&lt;p&gt;After studying information science at university, I joined a manufacturing company in an IT-related research position. Currently, I work as a manager in system development. I have never worked in the gaming industry.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;wow-youre-a-true-indie-in-that-youve-never-worked-at-a-game-studio-well-lets-start-at-the-beginning-what-was-your-earliest-experience-with-video-games&quot;&gt;Wow! You’re a true indie in that you’ve never worked at a game studio! Well, let’s start at the beginning: what was your earliest experience with video games?&lt;/h2&gt;

&lt;p&gt;It was &lt;em&gt;Nintendo&lt;/em&gt;’s &lt;a href=&quot;https://en.wikipedia.org/wiki/Game_&amp;amp;_Watch&quot;&gt;&lt;em&gt;Game &amp;amp; Watch&lt;/em&gt;&lt;/a&gt;. Around that time, I lived in an apartment, and I used to exchange and play various &lt;em&gt;Game &amp;amp; Watch&lt;/em&gt; games with my friends who lived there. Titles like &lt;em&gt;Fire&lt;/em&gt;, &lt;em&gt;Manhole&lt;/em&gt;, &lt;em&gt;Helmet&lt;/em&gt;, &lt;em&gt;Parachute&lt;/em&gt;, and &lt;em&gt;Octopus&lt;/em&gt; were simple yet extremely exciting. The simple gameplay of &lt;em&gt;Game &amp;amp; Watch&lt;/em&gt; has become my foundational experience in gaming, significantly influencing the small games I make now.&lt;/p&gt;

&lt;p&gt;Also, at that time, game arcades were more adult-oriented, making it difficult for children to visit, so arcade games were objects of longing that I couldn’t actually play. Instead, there were various LSI/FL games (in the West we usually refer to such games as LCD games or handheld electronic games) that ported those arcade games, which I also played with friends. Games like &lt;a href=&quot;https://en.wikipedia.org/wiki/Heiankyo_Alien&quot;&gt;&lt;em&gt;Heiankyo Alien&lt;/em&gt;&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Frisky_Tom&quot;&gt;&lt;em&gt;Frisky Tom&lt;/em&gt;&lt;/a&gt;, ported to machines with specs far inferior to arcade games, were almost different games, but their core gameplay was well-designed, and I loved playing them. The LSI game version of &lt;a href=&quot;https://en.wikipedia.org/wiki/Pac-Man&quot;&gt;&lt;em&gt;Pac-Man&lt;/em&gt;&lt;/a&gt;, released by multiple manufacturers, was interesting because each one had its unique arrangement. It was enlightening to realize that depending on the arrangement, a variety of variations could be created from the base gameplay, which greatly influenced my game development.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_Game_%26_Watch_games&quot;&gt;List of Game &amp;amp; Watch games&lt;/a&gt; at Wikipedia&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://handheldmuseum.com&quot;&gt;Handheld Games Museum&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;so-even-in-these-early-days-you-were-captivated-by-simple-and-effective-gameplay-was-it-at-this-point-that-you-began-programming-computers&quot;&gt;So even in these early days you were captivated by simple and effective gameplay. Was it at this point that you began programming computers?&lt;/h2&gt;

&lt;p&gt;I was about ten years old when I saw a TV educational program called マイコン入門 “Mycom Nyumon” (Introduction to Microcomputers). “Mycom” is another name for microcomputer, which was the term used during the dawn of personal computers in Japan. At that time, it was very rare for households to own a personal computer, hence the microcomputer was colloquially called “Mycom”, short for “My-computer”. “Mycom Nyumon” was a program aimed at complete beginners to computers, explaining things like programming. Watching how computers could perform various calculations and control the screen, I thought they were like magical boxes and was utterly fascinated.&lt;/p&gt;

&lt;p&gt;Later, my father bought a &lt;a href=&quot;https://en.wikipedia.org/wiki/Sharp_PC-1500&quot;&gt;&lt;em&gt;SHARP PC-1500&lt;/em&gt;&lt;/a&gt;, a pocket computer, and brought it home. That was my first experience with programming in &lt;a href=&quot;https://en.wikipedia.org/wiki/BASIC&quot;&gt;&lt;em&gt;BASIC&lt;/em&gt;&lt;/a&gt;, and I thought it had potential unlike any machine I had seen before.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://ja.wikipedia.org/wiki/マイコン入門&quot;&gt;マイコン入門 (Introduction to Microcomputers)&lt;/a&gt; at Wikipedia (Japanese)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://ja.wikipedia.org/wiki/ポケットコンピュータ&quot;&gt;ポケットコンピュータ (Pocket computer)&lt;/a&gt; at Wikipedia (Japanese)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.epocalc.net/php/liste_comp.php?type1=PC&amp;amp;type2=MF&amp;amp;type3=MC&amp;amp;type4=SC&amp;amp;type5=TER&amp;amp;type6=SU&amp;amp;type7=%3F&amp;amp;cat=POCKET&amp;amp;sel=all&amp;amp;ystart=1940&amp;amp;yend=2019&amp;amp;actu=all&amp;amp;order=manuf/&quot;&gt;Pocket Computer Manufacturers Database&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;despite-the-limitation-of-the-single-line-display-on-those-pocket-computers-they-were-host-to-many-great-games-i-can-see-their-influence-in-your-games-today-atwhat-point-did-you-decide-to-create-your-own-game&quot;&gt;Despite the limitation of the single line display on those pocket computers they were host to many great games. I can see their influence in your games today. At what point did you decide to create your own game?&lt;/h2&gt;

&lt;p&gt;The next microcomputer we got was the &lt;a href=&quot;https://en.wikipedia.org/wiki/NEC_PC-6001&quot;&gt;&lt;em&gt;NEC PC-6001&lt;/em&gt;&lt;/a&gt;. This was a type that connected to a TV. It was a fresh experience to turn the TV, usually just for watching shows, into something interactive that could be operated with keystrokes and programming. At first, I created games in &lt;em&gt;BASIC&lt;/em&gt;, but I was dissatisfied with the processing speed for action games, so I learned to hand-assemble for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_Z80&quot;&gt;&lt;em&gt;Z-80&lt;/em&gt;&lt;/a&gt; and began creating games in &lt;a href=&quot;https://en.wikipedia.org/wiki/Machine_code&quot;&gt;&lt;em&gt;machine language&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In Japan, there was a magazine called マイコンBASICマガジン “&lt;em&gt;Mycom BASIC Magazine&lt;/em&gt;” that accepted submissions of game programs from readers and published them. Each game in the magazine had several pages of source code, which you would enter manually to play the game. These games, despite their compact source code, were full of originality. There were action games about making hamburgers as ordered, race games combined with &lt;em&gt;Pac-Man&lt;/em&gt;’s power pellets, puzzle games incorporating rock-paper-scissors, etc. Inspired by how such diverse games could be created depending on the idea, I wanted to make such games too.&lt;/p&gt;

&lt;p&gt;I tried submitting some games I made to “&lt;em&gt;Mycom BASIC Magazine&lt;/em&gt;”, but it was tough to get them accepted. Only one got published – &lt;em&gt;METEORITE&lt;/em&gt; - a game where you shoot down meteors falling from the sky. The game had a unique control where the position of the keys on the keyboard was linked to the attack position on the screen, and you determined the attack location by pressing the keyboard with a clenched fist.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://ja.wikipedia.org/wiki/マイコンBASICマガジン&quot;&gt;Mycom BASIC Magazine&lt;/a&gt; at Wikipedia (Japanese)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/basiccomputingmagazine&quot;&gt;Mycom BASIC Magazine&lt;/a&gt; at Internet Archive&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/micomBASIC-1989-09/page/139/mode/1up&quot;&gt;&lt;em&gt;METEORITE&lt;/em&gt;—source code&lt;/a&gt; in the 1989-09 issue of Mycom BASIC Magazine&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/files/meteorite-by-kenta-cho-from-mycom-basic-magazine-1989-09.p6t&quot;&gt;&lt;em&gt;METEORITE&lt;/em&gt;—tape file&lt;/a&gt; for use with a PC-6001 emulator&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;Thanks to Dustin Hubbard (Hubz)&lt;/em&gt; at &lt;a href=&quot;https://www.gamingalexandria.com&quot;&gt;&lt;em&gt;Gaming Alexandria&lt;/em&gt;&lt;/a&gt; for transforming the magazine source code listing into a tape image. This was done using specialist Japanese software &lt;a href=&quot;https://github.com/eighttails/ProgramListOCR&quot;&gt;&lt;em&gt;ProgamListOCR&lt;/em&gt;&lt;/a&gt; and &lt;a href=&quot;https://bugfire2009.ojaru.jp/input.html&quot;&gt;&lt;em&gt;DumpListEditor&lt;/em&gt;&lt;/a&gt; that are tailor-made for getting old source code off the page and into the computer, so thanks also to the authors of those applications. Video game preservation is a worldwide effort.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/dev2dev-kenta-cho-meteorite.jpg&quot; alt=&quot;METEORITE source code in 1989-09 issue of Mycom BASIC Magazine&quot; title=&quot;METEORITE source code in 1989-09 issue of Mycom BASIC Magazine&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;your-formative-years-coincided-with-the-golden-age-of-video-games-period-from-the-late-1970s-to-the-early-1980s-what-inspired-you-at-that-time&quot;&gt;Your formative years coincided with the “golden age of video games” period from the late 1970s to the early 1980s. What inspired you at that time?&lt;/h2&gt;

&lt;p&gt;It was &lt;a href=&quot;https://en.wikipedia.org/wiki/Namco&quot;&gt;&lt;em&gt;Namco&lt;/em&gt;&lt;/a&gt;’s arcade games. In the 1980s arcade games, I felt that the ideas in games released by &lt;em&gt;Namco&lt;/em&gt; were particularly excellent. &lt;a href=&quot;https://en.wikipedia.org/wiki/Dig_Dug&quot;&gt;&lt;em&gt;Dig Dug&lt;/em&gt;&lt;/a&gt;’s one-shot reversal reward using rocks and the risk of being crushed by them, &lt;a href=&quot;https://en.wikipedia.org/wiki/Xevious&quot;&gt;&lt;em&gt;Xevious&lt;/em&gt;&lt;/a&gt;’ beautiful graphics and well-crafted enemy flight curves, &lt;a href=&quot;https://en.wikipedia.org/wiki/Gaplus&quot;&gt;&lt;em&gt;Gaplus&lt;/em&gt;&lt;/a&gt;’ super-fast enemy movements yet fair game balance, and &lt;a href=&quot;https://en.wikipedia.org/wiki/New_Rally-X&quot;&gt;&lt;em&gt;New Rally-X&lt;/em&gt;&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Bosconian&quot;&gt;&lt;em&gt;Bosconian&lt;/em&gt;&lt;/a&gt;’s combination of all-direction scrolling and radar screens requiring complex situational judgment – &lt;em&gt;Namco&lt;/em&gt; kept releasing games with very innovative mechanisms. A lot of my belief in the importance of novel mechanisms in game production comes from encountering &lt;em&gt;Namco&lt;/em&gt;’s arcade games during this era.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_Namco_games#Namco_proprietary_arcade_systems&quot;&gt;List of Namco arcade games&lt;/a&gt; at Wikipedia&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;i-apologise-for-this-next-question-as-its-almost-impossibly-difficult-but-im-keen-to-learn-more-about-you-from-the-games-you-like-to-play-so-what-are-five-of-your-favourite-video-games-and-what-aspects-make-them-special-to-you&quot;&gt;I apologise for this next question, as it’s almost impossibly difficult, but I’m keen to learn more about you from the games you like to play. So… what are five of your favourite video games, and what aspects make them special to you?&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Transport_Tycoon&quot;&gt;&lt;strong&gt;Transport Tycoon&lt;/strong&gt;&lt;/a&gt;—it’s a railway management simulator, released by &lt;a href=&quot;https://en.wikipedia.org/wiki/MicroProse&quot;&gt;&lt;em&gt;MicroProse&lt;/em&gt;&lt;/a&gt;. I also liked its predecessor, &lt;a href=&quot;https://en.wikipedia.org/wiki/Railroad_Tycoon&quot;&gt;&lt;em&gt;Railroad Tycoon&lt;/em&gt;&lt;/a&gt;, but I played &lt;em&gt;Transport Tycoon&lt;/em&gt; for a longer time. A major difference between the two is that in &lt;em&gt;Transport Tycoon&lt;/em&gt;, there are rival companies laying tracks on the same map. It was fun to strategize and lay tracks aggressively to important cities to beat rivals. It’s my favorite game in the city development simulation genre. The isometric beautiful graphics and lively BGM (background music) were great too.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/DoDonPachi&quot;&gt;&lt;strong&gt;Dodonpachi&lt;/strong&gt;&lt;/a&gt;—the first title in &lt;a href=&quot;https://en.wikipedia.org/wiki/Cave_(company)&quot;&gt;&lt;em&gt;CAVE&lt;/em&gt;&lt;/a&gt;’s famous &lt;em&gt;Dodonpachi&lt;/em&gt; series of bullet hell vertical scrolling shooters, following its progenitor, &lt;a href=&quot;https://en.wikipedia.org/wiki/Donpachi&quot;&gt;&lt;em&gt;Donpachi&lt;/em&gt;&lt;/a&gt;. A fun aspect of bullet hell shooters is the technique called “cutback”. It involves rapidly moving the player to one screen edge to create gaps in bullet patterns, then escaping in the opposite direction through these gaps. &lt;em&gt;Dodonpachi&lt;/em&gt;’s stage 5 offers the best experience of this, influencing the shooting games I would create later.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Ikaruga&quot;&gt;&lt;strong&gt;Ikaruga&lt;/strong&gt;&lt;/a&gt;—a vertical scrolling shooter with a unique system where both the player and enemy bullets have black and white attributes, and bullets of the same attribute can be absorbed. This system provided a gameplay experience quite different from previous shooters. Although released as an arcade game, perhaps thinking it too different for ordinary players to accept as is, the first stage offered an “infinite lives trial game” mode. At first, I had no idea when to switch attributes and was helplessly defeated many times. But once I understood which enemies to attack with which attribute and when, the game became addictively charming. The chain combo for defeating three enemies of the same attribute in succession and the complex attack patterns of stage 4’s so-called “Rafflesia” added to its depth. The groundbreaking game system offered an artistic playing experience, impressing me with the high potential of gaming.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/The_Atlas_(video_game)&quot;&gt;&lt;strong&gt;THE ATLAS&lt;/strong&gt;&lt;/a&gt;—a PC exploration game set during the &lt;a href=&quot;https://en.wikipedia.org/wiki/Age_of_Discovery&quot;&gt;&lt;em&gt;Age of Discovery&lt;/em&gt;&lt;/a&gt;, released by &lt;a href=&quot;https://en.wikipedia.org/wiki/Artdink&quot;&gt;&lt;em&gt;ArtDink&lt;/em&gt;&lt;/a&gt;. Its feature was a procedurally generated coastline, different in each game. The player dispatches a captain from Lisbon to survey coastlines and ports. Upon the captain’s return, you can choose to “believe” or “disbelieve” their report. Disbelieving discards the survey results, but here comes the twist with the procedural generation. If the captain reports an endlessly long, supply-challenged coastline, or a closed one preventing further survey, disbelieving it could generate a more advantageous coastline in the next survey. The game skilfully integrated procedural mechanics with the game system, deeply enlightening me about the benefits of incorporating procedural elements into games.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Rez_(video_game)&quot;&gt;&lt;strong&gt;Rez&lt;/strong&gt;&lt;/a&gt;—a 3D shooter with abstract wireframe graphics and techno music synchronized with sound effects. The immersion provided by this game was unique, supported by the excellence of its visuals and music. Especially, the sound effects being quantized to match the background music’s rhythm and beat, making game operations and actions feel like playing an instrument, was brilliant. I have incorporated a similar quantization mechanism in the games I’m creating now.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;i-see-a-nice-balance-of-gameplay-systems-and-skill-in-all-of-those-games-that-brings-to-mind-the-types-of-games-you-create-now-if-you-could-have-developed-any-existing-game-which-one-would-you-choose-and-why&quot;&gt;I see a nice balance of gameplay systems and skill in all of those games. That brings to mind the types of games you create. Now, if you could have developed any existing game, which one would you choose, and why?&lt;/h2&gt;

&lt;p&gt;That’s &lt;a href=&quot;https://en.wikipedia.org/wiki/Herzog_(video_game)&quot;&gt;&lt;em&gt;Herzog&lt;/em&gt;&lt;/a&gt;. It’s a real-time strategy game released by &lt;a href=&quot;https://en.wikipedia.org/wiki/Technosoft&quot;&gt;&lt;em&gt;Technosoft&lt;/em&gt;&lt;/a&gt; for personal computers. Overseas, the sequel &lt;a href=&quot;https://en.wikipedia.org/wiki/Herzog_Zwei&quot;&gt;&lt;em&gt;Herzog Zwei&lt;/em&gt;&lt;/a&gt;, which was released for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Sega_Mega_Drive&quot;&gt;&lt;em&gt;Sega Mega Drive&lt;/em&gt;&lt;/a&gt;, is more famous, and the original &lt;em&gt;Herzog&lt;/em&gt; might not be as well-known. It’s an action game where you control a robot that can move both in the air and on the ground. The battlefield is a vertically long strip, with enemy and ally bases located at each end. Players could produce units like infantry, tanks, and anti-aircraft guns at these bases and dispatch them towards the opponent’s base. At that time, it was quite rare to have a game where you could produce allies other than the player and fight together. I was very impressed by this game, where you could fight as part of an army against enemy forces.&lt;/p&gt;

&lt;p&gt;Later, I even created a game similar to &lt;em&gt;Herzog&lt;/em&gt; for the &lt;a href=&quot;https://en.wikipedia.org/wiki/PC-98&quot;&gt;&lt;em&gt;PC-9801&lt;/em&gt;&lt;/a&gt;. I made the screen 3D and added an arrangement where you could freely board any friendly unit on the battlefield, intending to make the game even more enjoyable.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=MU2FDnKzt5I&quot;&gt;Herzog (MSX) longplay&lt;/a&gt; on YouTube&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;in-the-early-2000s-many-western-gamers-developed-a-real-interest-in-japanese-indie-games-particularly-shoot-em-ups-shmups-you-gained-recognition-for-multiple-shmups-and-you-were-even-interviewed-by-mtv-can-you-share-any-experiences-from-that-period&quot;&gt;In the early 2000s many Western gamers developed a real interest in Japanese indie games, particularly shoot-‘em-ups (shmups). You gained recognition for multiple shmups, and you were even interviewed by &lt;em&gt;MTV&lt;/em&gt;! Can you share any experiences from that period?&lt;/h2&gt;

&lt;p&gt;At that time, I often played bullet hell shooters released by &lt;em&gt;CAVE&lt;/em&gt; at game arcades, especially loving &lt;a href=&quot;https://en.wikipedia.org/wiki/Progear_no_Arashi&quot;&gt;&lt;em&gt;Progear no Arashi&lt;/em&gt;&lt;/a&gt;. &lt;em&gt;Progear&lt;/em&gt;’s bullet patterns were very complex compared to earlier &lt;em&gt;CAVE&lt;/em&gt; games, like fan-shaped bullets shot in nine directions, slowly decelerating, and then five straight bullets targeting the player. I wanted to replicate such complex bullet movements in a simple way and developed the &lt;em&gt;BulletML&lt;/em&gt; language.&lt;/p&gt;

&lt;p&gt;With &lt;em&gt;BulletML&lt;/em&gt;, I developed &lt;a href=&quot;https://www.asahi-net.or.jp/~cs8k-cyu/windows/noiz2sa_e.html&quot;&gt;&lt;em&gt;Noiz2sa&lt;/em&gt;&lt;/a&gt;, aiming to achieve the fun of bullet hell dodging with the immersion of games like &lt;em&gt;Rez&lt;/em&gt;. In &lt;a href=&quot;https://www.asahi-net.or.jp/~cs8k-cyu/windows/rr_e.html&quot;&gt;&lt;em&gt;rRootage&lt;/em&gt;&lt;/a&gt;, I used &lt;em&gt;BulletML&lt;/em&gt; for procedural generation of bullet patterns, aiming to create infinite attack patterns. After developing a technology called &lt;em&gt;Bulletsmorph&lt;/em&gt; and extensive balancing, I finally released it. It was challenging to achieve patterns that were fair and challenging without reducing variation, but I think it worked out well. Among my shooting games often featuring auto-generated levels, &lt;a href=&quot;https://www.asahi-net.or.jp/~cs8k-cyu/windows/tf_e.html&quot;&gt;&lt;em&gt;TUMIKI Fighters&lt;/em&gt;&lt;/a&gt;, where levels were manually designed, was somewhat unique. But this was simply because I found &lt;em&gt;Namco&lt;/em&gt;’s &lt;a href=&quot;https://en.wikipedia.org/wiki/Katamari_Damacy&quot;&gt;&lt;em&gt;Katamari Damacy&lt;/em&gt;&lt;/a&gt; so enjoyable that I wanted to combine it with a shooting game. Attaching enemies to your ship until it occupies more than half the screen, this kind of shooting game is still quite rare, so I think it turned out to be a game with originality.&lt;/p&gt;

&lt;p&gt;Also, during this period, I entered various game contests with my games. Games for the &lt;a href=&quot;https://en.wikipedia.org/wiki/WonderSwan&quot;&gt;&lt;em&gt;WonderSwan&lt;/em&gt;&lt;/a&gt; on &lt;a href=&quot;https://ja.wikipedia.org/wiki/ワンダーウィッチ&quot;&gt;&lt;em&gt;WonderWitch&lt;/em&gt;&lt;/a&gt;, games for &lt;em&gt;Xbox 360&lt;/em&gt; on &lt;a href=&quot;https://en.wikipedia.org/wiki/Microsoft_XNA&quot;&gt;&lt;em&gt;XNA&lt;/em&gt;&lt;/a&gt;, and games for contests on &lt;a href=&quot;/2021/08/19/aquaplus-piece-vs-panic-playdate/&quot;&gt;&lt;em&gt;P/ECE&lt;/em&gt;&lt;/a&gt;. Fortunately, some games won awards. I had opportunities to present my games to judges, which was enjoyable. Playing my games on these consumer devices was a fresh experience for an amateur developer. Also, optimizing for each device’s characteristics provided many interesting development experiences.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.asahi-net.or.jp/~cs8k-cyu/windows.html&quot;&gt;Kenta Cho’s Windows games&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.asahi-net.or.jp/~cs8k-cyu/misc.html&quot;&gt;Kenta Chu’s miscellaneous games&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;in-the-following-years-i-continued-to-follow-your-work-and-noticed-a-move-towards-the-web-browser-as-your-platform-of-choice-more-recently-i-was-wowed-by-your-prolific-output-particularly-the-139-games-you-made-in-2021-im-wondering-what-motivates-you-and-can-you-outline-your-creative-process&quot;&gt;In the following years I continued to follow your work and noticed a move towards the web browser as your platform of choice. More recently, I was wowed by your prolific output, particularly the 139 games you made in 2021! I’m wondering, what motivates you? And can you outline your creative process?&lt;/h2&gt;

&lt;p&gt;Around 2008, I realized I could make browser-playable games by implementing them in &lt;a href=&quot;https://en.wikipedia.org/wiki/ActionScript#2006–2020:_ActionScript_3.0&quot;&gt;&lt;em&gt;ActionScript3&lt;/em&gt;&lt;/a&gt;, a programming language for &lt;a href=&quot;https://en.wikipedia.org/wiki/Adobe_Flash&quot;&gt;&lt;em&gt;Flash&lt;/em&gt;&lt;/a&gt;. I knew about &lt;em&gt;Flash&lt;/em&gt;, but I thought of it more as a platform for creating animations than games. However, &lt;em&gt;ActionScript3&lt;/em&gt; was a sophisticated language with diverse features, allowing me to create games using just code. Browser games are more accessible than conventional games, so I started making many small action games that could be played intuitively in a short time.&lt;/p&gt;

&lt;p&gt;Through this process, I realized that making lots of small games was ideal for trying out various game ideas and mechanics. Since then, I’ve been experimenting with how to make games enjoyable by thinking about mechanisms that haven’t been seen much in previous games and trying to turn them into fun games. This has become my basic process for game development.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.asahi-net.or.jp/~cs8k-cyu/browser.html&quot;&gt;Kenta Cho’s browser games&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;already-youve-mentioned-multiple-programming-languages-in-this-interview-what-factors-do-you-consider-when-selecting-programming-languages-platforms-and-technologies-for-game-development&quot;&gt;Already you’ve mentioned multiple programming languages in this interview. What factors do you consider when selecting programming languages, platforms, and technologies for game development?&lt;/h2&gt;

&lt;p&gt;I flexibly switch programming languages depending on the target device for the game. For the &lt;em&gt;PC-6001&lt;/em&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/MSX&quot;&gt;&lt;em&gt;MSX&lt;/em&gt;&lt;/a&gt;, &lt;em&gt;Z-80&lt;/em&gt; assembler; for &lt;em&gt;PC-9801&lt;/em&gt;, &lt;em&gt;Borland&lt;/em&gt;’s &lt;a href=&quot;https://en.wikipedia.org/wiki/Turbo_C&quot;&gt;&lt;em&gt;Turbo C&lt;/em&gt;&lt;/a&gt;; for &lt;em&gt;Windows&lt;/em&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Delphi_(software)&quot;&gt;&lt;em&gt;Delphi&lt;/em&gt;&lt;/a&gt; or &lt;em&gt;GCC&lt;/em&gt;; for &lt;em&gt;XNA&lt;/em&gt;, &lt;em&gt;C#&lt;/em&gt;; for browsers, &lt;em&gt;ActionScript3&lt;/em&gt; or &lt;em&gt;JavaScript&lt;/em&gt;, and so on.&lt;/p&gt;

&lt;p&gt;But I don’t just use commonly used programming languages; I also look for languages that are easier to use and equipped with new technologies. For example, the &lt;a href=&quot;https://en.wikipedia.org/wiki/D_(programming_language)&quot;&gt;&lt;em&gt;D language&lt;/em&gt;&lt;/a&gt; as a replacement for &lt;em&gt;C&lt;/em&gt;, offering object orientation without the complexity of &lt;em&gt;C++&lt;/em&gt; and faster build speed; &lt;a href=&quot;https://en.wikipedia.org/wiki/Haxe&quot;&gt;&lt;em&gt;Haxe&lt;/em&gt;&lt;/a&gt;, superior to &lt;em&gt;ActionScript3&lt;/em&gt; with features like &lt;a href=&quot;https://en.wikipedia.org/wiki/Mixin&quot;&gt;Mixins&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Enumerated_type&quot;&gt;Enums&lt;/a&gt;; &lt;a href=&quot;https://en.wikipedia.org/wiki/TypeScript&quot;&gt;&lt;em&gt;TypeScript&lt;/em&gt;&lt;/a&gt; for type-checking &lt;em&gt;JavaScript&lt;/em&gt;, allowing proper error detection and code recommendations. I actively use them even if they are slightly less mature or have weaker ecosystems than traditional languages if they can improve development speed.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;i-really-appreciate-how-technology-agnostic-you-are-its-noticeable-that-the-game-is-the-number-one-priority-and-the-choice-of-technologies-is-not-so-important-this-is-similar-to-how-i-work-in-that-im-happiest-when-the-technologies-fade-away-and-i-can-concentrate-on-the-game-design-and-implementation-details-could-you-tell-us-more-about-your-approach-to-game-development&quot;&gt;I really appreciate how technology agnostic you are. It’s noticeable that the game is the number one priority and the choice of technologies is not so important. This is similar to how I work, in that I’m happiest when the technologies fade away and I can concentrate on the game design and implementation details. Could you tell us more about your approach to game development?&lt;/h2&gt;

&lt;p&gt;As I mentioned earlier, I think about game mechanisms that haven’t been seen in previous games. However, it’s challenging to conceive completely new mechanisms. Instead, I often borrow and arrange parts of mechanisms from old arcade games or submission magazines like “Mycom BASIC Magazine”. Old games focused more on the novelty of rules and mechanics than on content like scenarios, which is very informative for game development.&lt;/p&gt;

&lt;p&gt;I also create games driven by specific technologies. I’ve incorporated procedural content generation and physics calculations into shooting games. Before &lt;em&gt;Windows&lt;/em&gt;, I implemented 3D drawing logic and software-based screen rotation, scaling, and shrinking. Recently, I’ve been experimenting with whether everything from game idea conception to programming can be procedurally generated.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;im-also-interested-in-this-aspect-of-game-development-its-a-deep-well-with-a-lot-of-opportunity-i-can-see-its-influence-in-many-of-the-games-youve-created-using-your-crisp-game-lib-what-was-the-thinking-behind-your-framework&quot;&gt;I’m also interested in this aspect of game development, it’s a deep well with a lot of opportunity. I can see its influence in many of the games you’ve created using your &lt;em&gt;Crisp Game Lib&lt;/em&gt;. What was the thinking behind your framework?&lt;/h2&gt;

&lt;p&gt;The goal of &lt;a href=&quot;https://github.com/abagames/crisp-game-lib&quot;&gt;&lt;em&gt;Crisp Game Lib&lt;/em&gt;&lt;/a&gt; is to enable the creation of innovative games within a three-hour timeframe. For this, I made it easy to implement collision detection, which is typically challenging. I particularly focused on making collision detection easy for geometric shapes like lines and arcs, allowing the inclusion of geometric shapes as terrain, obstacles, players, and enemies. This makes it easier to create games different from traditional sprite-based 2D games.&lt;/p&gt;

&lt;p&gt;It also includes features for procedurally generating background music and sound effects. Automatically generated background music and quantized sound effects make it possible to create enjoyable games even within a short development period.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/abagames/crisp-game-lib&quot;&gt;Crisp Game Lib&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.asahi-net.or.jp/~cs8k-cyu/browser.html&quot;&gt;Browser games made using Crisp Game Lib&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;your-recent-games-use-quite-simple-scoring-systems-especially-when-compared-with-arcade-or-pinball-scoring-systems-what-are-your-thoughts-on-scoring&quot;&gt;Your recent games use quite simple scoring systems, especially when compared with arcade or pinball scoring systems. What are your thoughts on scoring?&lt;/h2&gt;

&lt;p&gt;In a simple scoring system, it’s important to reward the player’s risky actions with high scores. Assigning high scores or multipliers for actions like attracting and defeating many enemies at once, narrowly avoiding enemy attacks, or collecting hard-to-reach items can add depth to the gameplay. Additionally, I make it a point to clearly display the acquired score and multipliers on the screen, making it easy for players to understand how to earn high scores.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;the-gameplay-concepts-in-your-recent-games-are-also-beautiful-in-their-simplicity-but-at-the-same-time-they-have-depth-how-do-you-approach-the-difficulty-curve-to-ensure-your-game-is-enjoyable-for-as-many-people-as-possible&quot;&gt;The gameplay concepts in your recent games are also beautiful in their simplicity, but at the same time they have depth. How do you approach the difficulty curve to ensure your game is enjoyable for as many people as possible?&lt;/h2&gt;

&lt;p&gt;I often use the traditional Game &amp;amp; Watch era mechanic of increasing difficulty as time goes on from the start of the game. In such cases, I consciously choose between a linearly increasing difficulty (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;difficulty = time&lt;/code&gt;) and one that gradually becomes milder, using the square root function (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;difficulty = sqrt(time)&lt;/code&gt;). Linear is usually fine, but for parameters like enemy size, which could become unreasonably difficult if too large, I use square root to maintain game balance over time.&lt;/p&gt;

&lt;p&gt;As mentioned in the previous answer, rewarding risky actions is closely related to appropriate difficulty settings. Increasing difficulty over time means to achieve high scores, players need to take risky actions and score high from the early, easier parts of the game. This avoids boredom in the early stages, making the game enjoyable from the start.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;in-january-2024-your-game-paku-paku-went-viral-after-being-featured-on-hacker-news-it-was-picked-up-by-various-bloggers-and-news-outlets-and-was-even-ported-by-fans-to-multiple-systems-were-you-surprised-by-this-turn-of-events-and-why-do-you-think-the-game-garnered-such-attention&quot;&gt;In January 2024, your game &lt;em&gt;Paku Paku&lt;/em&gt; went viral after being featured on &lt;em&gt;Hacker News&lt;/em&gt;. It was picked up by various bloggers and news outlets, and was even ported by fans to multiple systems. Were you surprised by this turn of events, and why do you think the game garnered such attention?&lt;/h2&gt;

&lt;p&gt;When I released &lt;a href=&quot;https://abagames.github.io/crisp-game-lib-11-games/?pakupaku&quot;&gt;&lt;em&gt;Paku Paku&lt;/em&gt;&lt;/a&gt; a year ago, it was fairly well-received among Japanese players, but I was surprised that it gained attention from international players a year later. Many articles described &lt;em&gt;Paku Paku&lt;/em&gt; as a ‘&lt;em&gt;1D Pac-Man&lt;/em&gt;’, which likely sparked curiosity about how a 1D version of &lt;em&gt;Pac-Man&lt;/em&gt; could be realized. &lt;em&gt;Paku Paku&lt;/em&gt; was an example of the demakes and minimalization I often do when making small games. Successfully balancing it as a good game within the strong constraint of 1D might be why it became popular. My experiences with games I made and played during the pocket computer era were very helpful in developing a 1D game.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://abagames.github.io/crisp-game-lib-11-games/?pakupaku&quot;&gt;Play Paku Paku in your browser&lt;/a&gt; “…just one more go…”&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;paku-paku-could-be-considered-the-essence-of-kenta-cho-from-the-single-line-display-pocket-computers-through-namcos-arcade-titles-like-pac-man-to-his-love-for-modern-programming-languages-and-the-web-browser-as-a-platform&quot;&gt;&lt;em&gt;Paku Paku&lt;/em&gt; could be considered the essence of Kenta Cho: from the single-line display pocket computers, through &lt;em&gt;Namco&lt;/em&gt;’s arcade titles like &lt;em&gt;Pac-Man&lt;/em&gt;, to his love for modern programming languages and the web browser as a platform.&lt;/h2&gt;

&lt;h2 id=&quot;many-thanks-to-kenta-cho-for-this-interview-now-go-play-some-of-his-games&quot;&gt;Many thanks to Kenta Cho for this interview. Now go play some of his games!&lt;/h2&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 10 Feb 2024 21:46:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/02/10/interview-kenta-cho-indie-game-developer/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/02/10/interview-kenta-cho-indie-game-developer/</guid>
        </item>
      
    
      
        <item>
          <title>Running modern macOS on non-retina displays</title>
          <description>&lt;p&gt;It’s 2024 and for some years now Apple have stopped supporting non-retina displays. From their perspective it makes sense given that all of their devices run retina displays, but from the user’s perspective it’s annoying given that so many of us are still using non-retina displays as either an external main display or as a secondary display. Not all of us are capable or comfortable buying multi-thousand dollar 5K displays.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;My personal situation is that I run a portrait display so that I can display a long page of code. Hey, if portrait was good enough for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Xerox_Alto&quot;&gt;Xerox Alto&lt;/a&gt; and is good enough for the &lt;a href=&quot;https://en.wikipedia.org/wiki/IPhone&quot;&gt;iPhone&lt;/a&gt; then it’s good enough for me. I have shortcut keys to arrange windows into halves, thirds or quarters and I’m super productive with it. I’ve been using this setup for a handful of years now, with my current setup consisting of a 1920×1200 display rotated 90-degrees giving me a desktop of 1200×1920.&lt;/p&gt;

  &lt;p&gt;You might be thinking, “why not use a rotated 1080p display?” and the answer to that question is that a lot of software won’t display correctly or even fit on a desktop of width 1080px, but is fine at 1200px. You might also be thinking “why not buy a 4K display?” and that’s because none of them are wide enough in portrait. Finally, if you’re asking “why not buy a 5K display?” then, yes, that’s a very good point. But until I do that, there’s a problem waiting to be solved.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;problem&quot;&gt;Problem&lt;/h2&gt;

&lt;p&gt;There are a number of issues running modern macOS on non-retina displays that Apple seems to not want to fix, and in fact they are introducing new problems with every new version of macOS. Apple’s stance is that they don’t make resolution-specific adjustments, but I find that to not be quite true. Of course, abandoning non-retina elements or not paying attention to how they display on non-retina displays has the affect of being a resolution-specific adjustment. Plus, one of the most recent issues proves that there was a specific change made for non-retina displays.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Text cursor&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Since macOS 14, Sonoma, there’s a new redesign text cursor. It changes colour and flashes in a different way than the normal cursor, but more importantly it is 50% wider (1.5x) on non-retina displays! On retina displays the cursor is equivalent to 2px wide and on non-retina displays it is equivalent to 3px side. You might think that a single pixel might not make much of a difference, but when there’s only 2px between characters it means &lt;a href=&quot;https://forums.macrumors.com/attachments/cursor-non-retina-png.2338640/&quot;&gt;the neighbouring text is obscured&lt;/a&gt;. So it’s difficult, perhaps even impossible, to tell whether a c character to the left of the cursor is a c, d, o, q, etc. In some situations, depending on your choice of font or text size the new wider cursor will completely obscure the letters i, I, l, 1 that are next to the cursor. Reported to Apple as FB13536508.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Abandoned icons&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Across macOS from Finder to Safari &lt;a href=&quot;https://twitter.com/gingerbeardman/status/1539963156570820608&quot;&gt;icons are stretched and badly positioned&lt;/a&gt; on non-retina displays, which may or may not be limited to icons made from SF Symbols. As recent as Monterey, System Preferences app would &lt;a href=&quot;https://twitter.com/gingerbeardman/status/1539963168654589954&quot;&gt;transition using retina icons and then after the transition they would be replaced with non-retina icons&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;workaround&quot;&gt;Workaround&lt;/h2&gt;

&lt;p&gt;The most useful workaround to these problems is to trick macOS into thinking that your non-retina display is retina. This is done by changing the scale value of your display.&lt;/p&gt;

&lt;p&gt;An alternative way of doing this is to use &lt;a href=&quot;https://github.com/waydabber/BetterDisplay&quot;&gt;BetterDisplay&lt;/a&gt; where you can simply click the High Resolution (HiDPI) toggle for your non-retina display.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;If you want to do it by hand you can open up the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.apple.windowserver.displays...plist&lt;/code&gt; at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/Library/Preferences/ByHost/&lt;/code&gt;, in something like PlistEdit Pro, and search for “Scale” to change each instance of a value 1 into 2. Thanks to &lt;a href=&quot;https://www.getvladimir.com&quot;&gt;Vladimir Kochkovski&lt;/a&gt; for sharing this solution!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;improves cursor width issue (it’s less wide so neighbouring text is not obscured quite as much)&lt;/li&gt;
  &lt;li&gt;fixes many other user interface elements that are bad on non-retina displays&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;screenshots are @2x, which might be unexpected or undesirable&lt;/li&gt;
  &lt;li&gt;websites that do not provide retina-ready images may appear slightly blurry&lt;/li&gt;
  &lt;li&gt;(in other words: the same things as a real retina display)&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 25 Jan 2024 16:25:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/01/25/running-modern-macos-on-non-retina-displays/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/01/25/running-modern-macos-on-non-retina-displays/</guid>
        </item>
      
    
      
        <item>
          <title>JINZO Paint: vintage mobile drawing app</title>
          <description>&lt;p&gt;At my core I’m a software guy. I don’t really get attached to hardware: in my mind it exists only as a conduit to software. I use emulation whenever I can to benefit from the increased convenience and reliability. But when I can’t… I buy old devices, and with old devices come old problems.&lt;/p&gt;

&lt;p&gt;I’m fascinated by &lt;a href=&quot;/2023/10/21/list-of-vintage-japanese-pixel-dot-art-software/&quot;&gt;vintage digital art software&lt;/a&gt;, from my beginnings on Atari ST, though classic Macintosh and vintage Japanese PCs, to handhelds like Palm devices or, in this case, a PocketPC running Windows CE. As with all software, many great ideas have been abandoned in the name of “progress”.&lt;/p&gt;

&lt;h2 id=&quot;zen-and-the-art-of-software-design&quot;&gt;Zen and the Art of Software Design&lt;/h2&gt;

&lt;p&gt;Japanese art software is notable in a number of ways because their drawing tools evolved differently to those in the West, at least until Photoshop took hold. In Japan the first breakthrough digital art software was the PC-98’s &lt;a href=&quot;https://www.youtube.com/watch?v=nIdFor2WOnw&quot;&gt;Multi Paint System&lt;/a&gt; (MPS, マルチペイントシステム) released by C-Lab in 1992, though an earlier version was released in 1991 as Maguro Paint System, or Tuna Paint System (鮪ペイントシステム) both of which were programmed by Woody_RINN.&lt;/p&gt;

&lt;p&gt;MPS introduced &lt;a href=&quot;https://twitter.com/_blubot_/status/1727397680895476153&quot;&gt;the ability to lock colours and prevent them from being drawn over&lt;/a&gt;. You might think of it as a mask featuring every instance of that particular colour. You could also replace colours in a similar way. This was done through an intuitive mechanism of a toolbar button or key press to lock one or more specific colours on the palette, which is quite different to the selection or mask approaches popularised by Photoshop and common today.&lt;/p&gt;

&lt;p&gt;Regardless of whether or not the method of handling colours in MPS is novel or unique, it was adopted as a standard by most Japanese art software for many years. JINZO Paint (JZP), a digital art app for PocketPC (Windows CE) created by t-ueno (&lt;a href=&quot;http://www.tomozon.sakura.ne.jp/wince/&quot;&gt;Tomohiro Ueno&lt;/a&gt;), was one such app that adopted the MPS way of doing things and I’ve been using it a bunch recently. It offers first class support for drawing in dither patterns, and you can load in custom patterns. If you like HyperCard, NewtPaint, TealPaint, you’ll love it. &lt;em&gt;Jinzo&lt;/em&gt; is the Japanese word for kidney, which is also the icon of the app.&lt;/p&gt;

&lt;p&gt;If you’re interested in reading about the interface and functions of JINZO Paint &lt;a href=&quot;https://www.gingerbeardman.com/jzpaint/&quot;&gt;I’ve mirrored the manuals for two early versions on my website&lt;/a&gt; as the original location is no longer available. A later version supports full 24-bit colour, but removes some useful functions. Regardless, all versions use a similar interface so they’re easy to use once you’re familiar with the general operation. One thing I would say is that the toolbars can be opened and selected with a single tap-drag-release action, which a huge win for usability and one that reminds me of the original Apple Macintosh and Palm OS. If you’re lucky your operating system today will support such fluidity.&lt;/p&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;b&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;c&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;d&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;e&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;f&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;g&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;h&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;h&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;f&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;g&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;f&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;h&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;g&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/jinzo-paint-ui-1.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/jinzo-paint-ui-1.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/jinzo-paint-ui-2.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/jinzo-paint-ui-2.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/jinzo-paint-ui-3.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/jinzo-paint-ui-3.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/jinzo-paint-ui-4.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/jinzo-paint-ui-4.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/jinzo-paint-ui-5.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/jinzo-paint-ui-5.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/jinzo-paint-ui-6.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/jinzo-paint-ui-6.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/jinzo-paint-ui-7.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/jinzo-paint-ui-7.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/jinzo-paint-ui-8.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/jinzo-paint-ui-8.png&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;f&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;g&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;h&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 133%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__staticimage,
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}

.carousel__activator:nth-of-type(3):checked ~ .carousel__track {
  -webkit-transform: translateX(-200%);
          transform: translateX(-200%);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__slide:nth-of-type(3) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__controls:nth-of-type(3) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(3) {
  opacity: 1;
}

.carousel__activator:nth-of-type(4):checked ~ .carousel__track {
  -webkit-transform: translateX(-300%);
          transform: translateX(-300%);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__slide:nth-of-type(4) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__controls:nth-of-type(4) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(4) {
  opacity: 1;
}

.carousel__activator:nth-of-type(5):checked ~ .carousel__track {
  -webkit-transform: translateX(-400%);
          transform: translateX(-400%);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__slide:nth-of-type(5) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__controls:nth-of-type(5) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(5) {
  opacity: 1;
}

.carousel__activator:nth-of-type(6):checked ~ .carousel__track {
  -webkit-transform: translateX(-500%);
          transform: translateX(-500%);
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__slide:nth-of-type(6) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__controls:nth-of-type(6) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(6) {
  opacity: 1;
}

.carousel__activator:nth-of-type(7):checked ~ .carousel__track {
  -webkit-transform: translateX(-600%);
          transform: translateX(-600%);
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__slide:nth-of-type(7) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__controls:nth-of-type(7) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(7) {
  opacity: 1;
}

.carousel__activator:nth-of-type(8):checked ~ .carousel__track {
  -webkit-transform: translateX(-700%);
          transform: translateX(-700%);
}
.carousel__activator:nth-of-type(8):checked ~ .carousel__slide:nth-of-type(8) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(8):checked ~ .carousel__controls:nth-of-type(8) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(8):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(8) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(3) {
  -webkit-transform: translateX(200%) translateZ(0);
          transform: translateX(200%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(4) {
  -webkit-transform: translateX(300%) translateZ(0);
          transform: translateX(300%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(5) {
  -webkit-transform: translateX(400%) translateZ(0);
          transform: translateX(400%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(6) {
  -webkit-transform: translateX(500%) translateZ(0);
          transform: translateX(500%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(7) {
  -webkit-transform: translateX(600%) translateZ(0);
          transform: translateX(600%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(8) {
  -webkit-transform: translateX(700%) translateZ(0);
          transform: translateX(700%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(3),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(3) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(4),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(4) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(5),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(5) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(6),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(6) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(7),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(7) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(8),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(8) {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;.carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },10000);
  
&lt;/script&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;for-my-next-trick-i-will-run-it-on-a-dictionary&quot;&gt;For my next trick I will run it on a Dictionary&lt;/h2&gt;

&lt;p&gt;My Windows CE device is a bit odd because it’s a Brain. These are a range of electronic dictionaries made by Sharp and sold only in Japan. With a bit of gentle coaxing it can be used as a little computer running Windows CE. My particular model is the PW-SH1 which is a 3rd generation device with a high resolution screen whose hinge can rotate 360° so it’s back-to-back against the keyboard, effectively becoming a tablet computer. Some years ago it was figured out that you could sideload apps and even force these devices to open the Windows CE desktop and do all manner of crazy things. Japanese hackers and modders seem to love using these devices to run emulators for old computers like Sharp MZ-series and NEC PC-series. If you want to know more check out the &lt;a href=&quot;https://brain.fandom.com/ja/wiki/Brain_Wiki&quot;&gt;Brain Wiki&lt;/a&gt; and if you want to pick up a device &lt;a href=&quot;https://brain.fandom.com/ja/wiki/Brain機種別解説&quot;&gt;here’s a list of them all&lt;/a&gt; (browser translation required for those links).&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/jinzo-paint.jpg&quot; alt=&quot;JPG&quot; title=&quot;JINZO Paint, 4-colour version&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;a-problem-with-file-selection&quot;&gt;A problem with file selection&lt;/h2&gt;

&lt;p&gt;Anyway, I noticed whilst using JZP that the file selector would often fail to open properly. It worked the first time but subsequent attempts saw it open and then immediately vanish. The source code to the first two versions is available, and with the help of Brain Hackers’ &lt;a href=&quot;https://twitter.com/watamario15&quot;&gt;@watamario15&lt;/a&gt; the reason for the problem was traced. He found that the value of the parameter being passed to the file selector was invalid, and provided proof by modifying the source code to those versions resulting in new working binaries. But with the final full-colour version has no source code, so how do we fix that?&lt;/p&gt;

&lt;h2 id=&quot;multiple-solutions&quot;&gt;Multiple solutions&lt;/h2&gt;

&lt;p&gt;The binaries for my device are ARM so there’s good support for debugging that type of code. I fired up Ghidra and started poking around in the earliest, smallest version of JZP. I quickly found the section of code that defined the parameters, helped by the placement of the setup of the strings used in the file selector. &lt;a href=&quot;https://www.coalfire.com/the-coalfire-blog/reverse-engineering-and-patching-with-ghidra&quot;&gt;A quick tutorial later&lt;/a&gt; and I knew how to use Ghidra to find references to data, patch instructions, and save a new binary. The workaround was to set the parameter to NULL, which works nicely but removes the ability for the app to remember the most recently used directory.&lt;/p&gt;

&lt;p&gt;However the source is available for the two earlier versions, which I prefer using, so more complete changes could be implemented. Rather than simply nulling out the parameter we could set it to the correct initial value: the root directory. Additional changes were needed to make sure the program would cope with saving and loading from the root directory of the device directly. And finally, just for good measure, the 16-colour version’s extremely slow bitmap saving has been optimised!&lt;/p&gt;

&lt;p&gt;Many thanks to &lt;a href=&quot;https://twitter.com/watamario15&quot;&gt;@watamario15&lt;/a&gt; for his invaluable help with debugging and his generous source code wrangling. And to &lt;a href=&quot;https://brain.fandom.com/ja/wiki/&quot;&gt;Brain Wiki&lt;/a&gt; for being such a valuable resource for crazy old software nerds like me!&lt;/p&gt;

&lt;h2 id=&quot;keyboard-controls&quot;&gt;Keyboard controls&lt;/h2&gt;

&lt;p&gt;I’ve also added keyboard control to JINZO Paint 16, with standard Photoshop keys to switch tools, plus keys for undo, set zoom, quick zoom (hold space bar), and more. If I get permission from the original author I’ll release a patch.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/jinzo-paint-dev.png&quot; alt=&quot;JPG&quot; title=&quot;JINZO Paint 16, source code modifications&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;repo&quot;&gt;Repo&lt;/h2&gt;

&lt;p&gt;My changes to the 16-color version are now available at the BRAIN hackers GitHub:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/brain-hackers/jinzo-paint/tree/16-color&quot;&gt;github.com/brain-hackers/jinzo-paint/tree/16-color&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;further-reading&quot;&gt;Further reading&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://brain.fandom.com/ja/wiki/JINZO_Paint&quot;&gt;JINZO Paint page on Brain Wiki&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://discord.com/channels/759813579120836608/1198349406878060646&quot;&gt;JINZO Paint thread on Brain Hackers Discord Server&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.gingerbeardman.com/jzpaint/&quot;&gt;JINZO Paint documentation mirror&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.tomozon.sakura.ne.jp/wince/JINZO_COLLECTION/DATA_BOOK/JZP_DATA/tel/howtojzp/howtojzp.htm&quot;&gt;JINZO Paint tutorial (4-colours)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.tomozon.sakura.ne.jp/wince/JINZO_COLLECTION/DATA_BOOK/JZP_DATA/emugaro/cgmake.htm&quot;&gt;JINZO Paint tutorial (16-colours)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=nIdFor2WOnw&quot;&gt;Playback of Woody_RINN drawing in Multi Paint System&lt;/a&gt; watch the dithering by blending at &lt;a href=&quot;https://www.youtube.com/watch?v=nIdFor2WOnw&amp;amp;t=434&quot;&gt;07:14&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 22 Jan 2024 20:53:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2024/01/22/jinzo-paint-vintage-mobile-drawing-app/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2024/01/22/jinzo-paint-vintage-mobile-drawing-app/</guid>
        </item>
      
    
      
        <item>
          <title>Japanese music recommendations (2023)</title>
          <description>&lt;p&gt;In April 2023, after I’d been listening to a bit of Japanese music during the last stretch of making the game &lt;a href=&quot;/2023/04/13/sparrow-solitaire-for-playdate/&quot;&gt;Sparrow Solitaire for Playdate&lt;/a&gt;, Apple Music started recommending me Japanese music in the weekly &lt;a href=&quot;https://twitter.com/search?q=from%3Agingerbeardman%20%23NewMusicMix&amp;amp;src=typed_query&amp;amp;f=live&quot;&gt;#NewMusicMix&lt;/a&gt; playlists. Every week I post my favourite track to social media, keeping the best of each week as curated playlists. You can follow me on Apple Music &lt;a href=&quot;https://music.apple.com/profile/mattsephton&quot;&gt;@mattsephton&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So I thought it would be nice to make a summary playlist of the best of the best! It consists of the tracks I’ve listened to the most, with a couple of other favourites thrown in to help perfect the running order: 18 tracks with a duration of 1h18m46s.&lt;/p&gt;

&lt;div class=&quot;table-wrapper&quot;&gt;
  &lt;table&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th&gt;Song&lt;/th&gt;
        &lt;th&gt;Artist&lt;/th&gt;
        &lt;th&gt;Release&lt;/th&gt;
        &lt;th&gt;Time&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://youtu.be/5TyjQmYmPyk&quot;&gt;Closer&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;ROTH BART BARON&lt;/td&gt;
        &lt;td&gt;8&lt;/td&gt;
        &lt;td&gt;3:37&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://youtu.be/c-wwTa9oyXA&quot;&gt;All Sunlight Must Fade&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Half Mile Beach Club&lt;/td&gt;
        &lt;td&gt;Glare - EP&lt;/td&gt;
        &lt;td&gt;5:33&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://youtu.be/iF03m9uswnk&quot;&gt;The Magic of Creation&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Bitei Matsuki&lt;/td&gt;
        &lt;td&gt;THE MAGICAL TOUCH&lt;/td&gt;
        &lt;td&gt;3:09&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://youtu.be/hClOs5KcbPs&quot;&gt;Bloom&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Low Fu&lt;/td&gt;
        &lt;td&gt;Links&lt;/td&gt;
        &lt;td&gt;4:16&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://youtu.be/Dv6SmBrNP-E&quot;&gt;Distraction Girl&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Yuzame Radio&lt;/td&gt;
        &lt;td&gt;Distraction Girl - Single&lt;/td&gt;
        &lt;td&gt;4:15&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://youtu.be/KTG28NyVw2g&quot;&gt;Halo&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Aaanna Japanese Special&lt;/td&gt;
        &lt;td&gt;Follow Your Heart - EP&lt;/td&gt;
        &lt;td&gt;2:46&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://youtu.be/wLk0t79f4Gg&quot;&gt;Caution&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Odd Donuts&lt;/td&gt;
        &lt;td&gt;Caution - Single&lt;/td&gt;
        &lt;td&gt;4:10&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://youtu.be/QjI5W_BeknI&quot;&gt;Train II&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Clute&lt;/td&gt;
        &lt;td&gt;Loomie&lt;/td&gt;
        &lt;td&gt;4:53&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://youtu.be/zvXt5kJuN0s&quot;&gt;i&amp;amp;i&amp;amp;i&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Thiiird Place&lt;/td&gt;
        &lt;td&gt;i&amp;amp;i&amp;amp;i - Single&lt;/td&gt;
        &lt;td&gt;4:05&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://youtu.be/xbFb54LKPXQ&quot;&gt;Ame ga Sekai o Nadete&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;MUSEMENT&lt;/td&gt;
        &lt;td&gt;Song Pavilion&lt;/td&gt;
        &lt;td&gt;4:36&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://youtu.be/Sm-JhjtuYqI&quot;&gt;Anshin to Manshin&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Shima Hitachi&lt;/td&gt;
        &lt;td&gt;Anshin to Manshin - Single&lt;/td&gt;
        &lt;td&gt;4:55&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://youtu.be/2Krl3kpqbKE&quot;&gt;A world of nothingness&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Nathalie Wise&lt;/td&gt;
        &lt;td&gt;Nathalie Wise - EP&lt;/td&gt;
        &lt;td&gt;3:43&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://youtu.be/L73jU8ZeNA4&quot;&gt;empty&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;South Penguin&lt;/td&gt;
        &lt;td&gt;empty - Single&lt;/td&gt;
        &lt;td&gt;3:42&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://youtu.be/jhPnndLdK9E&quot;&gt;2010&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Nariaki Komatsu&lt;/td&gt;
        &lt;td&gt;2010 - Single&lt;/td&gt;
        &lt;td&gt;4:20&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://youtu.be/b_Z8Xz_EScw&quot;&gt;Hanagumori&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;CHIAKI SATO&lt;/td&gt;
        &lt;td&gt;Hanagumori - Single&lt;/td&gt;
        &lt;td&gt;4:03&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://youtu.be/dQ0A6mSZz68&quot;&gt;Porch&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Asami Tono&lt;/td&gt;
        &lt;td&gt;House - EP&lt;/td&gt;
        &lt;td&gt;4:43&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://youtu.be/scY7s9jQlH0&quot;&gt;shira-shira-ake&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;AOKI &amp;amp; hayato&lt;/td&gt;
        &lt;td&gt;yoake&lt;/td&gt;
        &lt;td&gt;5:21&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://youtu.be/RTh55zon528&quot;&gt;Some steps under the sky&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;sphontik&lt;/td&gt;
        &lt;td&gt;wave wave wave&lt;/td&gt;
        &lt;td&gt;6:40&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;

&lt;/div&gt;

&lt;h2 id=&quot;playlists&quot;&gt;Playlists&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://music.apple.com/gb/playlist/japanese-best-of-2023/pl.u-xRlpNFEJKr3&quot;&gt;Apple Music&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://open.spotify.com/playlist/2ZnWDhLMF12oH06JkX0pbR?si=91e7e5b6b5e0457f&quot;&gt;Spotify&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLfF-zlMNYMd_9CzfEJ1OxOwIJxI4smRAJ&quot;&gt;YouTube&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;iframe allow=&quot;autoplay *; encrypted-media *; fullscreen *; clipboard-write&quot; frameborder=&quot;0&quot; height=&quot;450&quot; style=&quot;width:100%;max-width:740px;overflow:hidden;border-radius:10px;&quot; sandbox=&quot;allow-forms allow-popups allow-same-origin allow-scripts allow-storage-access-by-user-activation allow-top-navigation-by-user-activation&quot; src=&quot;https://embed.music.apple.com/gb/playlist/japanese-best-of-2023/pl.u-xRlpNFEJKr3&quot;&gt;&lt;/iframe&gt;

&lt;iframe style=&quot;border-radius:12px&quot; src=&quot;https://open.spotify.com/embed/playlist/2ZnWDhLMF12oH06JkX0pbR?utm_source=generator&quot; width=&quot;100%&quot; height=&quot;152&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot; allow=&quot;autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture&quot; loading=&quot;lazy&quot;&gt;&lt;/iframe&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 31 Dec 2023 22:37:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/12/31/japanese-music-recommendations-2023/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/12/31/japanese-music-recommendations-2023/</guid>
        </item>
      
    
      
        <item>
          <title>My most popular posts of 2023</title>
          <description>&lt;p&gt;2023 was a year where I feel my blogging really hit its stride.&lt;/p&gt;

&lt;p&gt;I’ve spent most of the year trying to comprehend 2022’s traumatic events, the lingering impact of which continues to affect me daily. Positive outcomes are that it gave me a little more time to write, and I developed some small games that might not have existed otherwise. And one of those, &lt;a href=&quot;/2023/11/21/yoyozo-how-i-made-a-playdate-game-in-39kb/&quot;&gt;YOYOZO&lt;/a&gt;, has &lt;a href=&quot;https://arstechnica.com/gaming/2023/12/ars-technicas-best-video-games-of-2023/7&quot;&gt;received a Game Of The Year accolade&lt;/a&gt;!&lt;/p&gt;

&lt;h2 id=&quot;how-many-posts&quot;&gt;How many posts?&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/search/?q=2023&quot;&gt;40 posts&lt;/a&gt; (up from 18 in 2022)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;most-popular-posts&quot;&gt;Most popular posts&lt;/h2&gt;
&lt;p&gt;According to Google Analytics, my 10 most popular posts in 2023 were (most popular first):&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/07/15/the-famous-f40-vector-illustration/&quot;&gt;“The Famous F40” vector illustration by David Rumfelt&lt;/a&gt; (15 Jul) &lt;!-- 25K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/11/21/yoyozo-how-i-made-a-playdate-game-in-39kb/&quot;&gt;YOYOZO (or, how I made a Playdate game in 39KB)&lt;/a&gt; (21 Nov) &lt;!-- 7K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/08/17/going-back-to-the-old-pre-x-twitter-ios-app/&quot;&gt;Going back to the old (pre-X) Twitter iOS app&lt;/a&gt; (17 Aug) &lt;!-- 6K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/11/09/early-computer-art-by-barbara-nessim/&quot;&gt;Early computer art by Barbara Nessim (1984)&lt;/a&gt; (9 Nov) &lt;!-- 6K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2019/05/11/back-in-time-vintage-maps-of-akihabara/&quot;&gt;Back In Time: Vintage Maps of Akihabara (1976–2001)&lt;/a&gt; (1 Jul, updated old post) &lt;!-- 6K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/12/09/dynamic-music-and-sound-techniques-for-video-games/&quot;&gt;Dynamic music and sound techniques for video games&lt;/a&gt; (9 Dec) &lt;!-- 4K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/08/25/casio-caleid-xm700-mobile-navigator-hardware/&quot;&gt;Casio CALEID XM-700 Mobile Navigator (1997)&lt;/a&gt; (25 Aug) &lt;!-- 4K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/06/26/ball-und-panzer-golf-making-a-playdate-game-in-a-week/&quot;&gt;Ball und Panzer Golf: making a Playdate game in a week&lt;/a&gt; (26 Jun) &lt;!-- 4K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/10/13/kenichi-shinohara-pixel-art-ukiyo-e/&quot;&gt;Kenichi Shinohara’s pixel art Ukiyo-e&lt;/a&gt; (13 Oct) &lt;!-- 3K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/05/24/ordering-photocopies-from-japans-national-library/&quot;&gt;Ordering photocopies from Japan’s National Library&lt;/a&gt; (24 May) &lt;!-- 3K --&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;best-of-the-rest&quot;&gt;Best of the rest&lt;/h2&gt;
&lt;p&gt;My personal favourites from the year (most recent first):&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/10/21/list-of-vintage-japanese-pixel-dot-art-software/&quot;&gt;List of vintage Japanese pixel/dot art software&lt;/a&gt; the one where I list 200 old apps&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/08/22/tom-moulton-father-of-the-disco-mix/&quot;&gt;Tom Moulton, Father of the Disco Mix (1976)&lt;/a&gt; the one a student copy-pasted for me&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/08/19/fake-steve-jobs-and-letters-from-bill-g/&quot;&gt;Fake Steve Jobs &amp;amp; Letters from BILL G&lt;/a&gt; the one that nobody read&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/06/07/gti-cub-supermini-festa/&quot;&gt;Review: GTi Club Supermini Festa!&lt;/a&gt; the one about an amazing &lt;em&gt;Wii&lt;/em&gt; game&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/04/10/where-can-i-see-hokusai-great-wave-today/&quot;&gt;Where can I see Hokusai’s Great Wave today?&lt;/a&gt; the one about &lt;em&gt;The Great Wave&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;blog-changelog&quot;&gt;Blog changelog&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;Added tag cloud to improve discoverability (12 Aug)&lt;/li&gt;
  &lt;li&gt;Added site search to further improve discoverability (27 Aug)&lt;/li&gt;
  &lt;li&gt;Added Google search link if there are no site search results (1 Dec)&lt;/li&gt;
  &lt;li&gt;Fixed site search issue which meant some blog posts were being skipped (22 Dec)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;previous-years&quot;&gt;Previous years&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2022/12/31/my-most-popular-posts-of-the-year/&quot;&gt;My most popular posts of 2022&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/12/31/my-most-popular-posts-of-the-year/&quot;&gt;My most popular posts of 2021&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 27 Dec 2023 19:41:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/12/27/my-most-popular-posts-of-the-year/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/12/27/my-most-popular-posts-of-the-year/</guid>
        </item>
      
    
      
        <item>
          <title>Using game controllers and keyboards for custom shortcuts</title>
          <description>&lt;p&gt;Recently I’ve been following a trend in &lt;a href=&quot;https://www.thetechedvocate.org/what-is-a-macro-pad-and-what-do-you-use-it-for/&quot;&gt;macro-pads&lt;/a&gt;, specialised/bespoke keyboards that provide an easy way to trigger keyboard shortcuts. A host of small companies have flooded the market with modified Bluetooth numeric pads that target Procreate, and Figma have teamed up with Work Louder to create a branded keypad with additional jog and rotary dials.&lt;/p&gt;

&lt;p&gt;But none of these seem quite right for me. I have so many controllers and devices already it felt better to make use of what I have to hand.&lt;/p&gt;

&lt;p&gt;I’m encouraged to find that there are lots of options! I’m a macOS user and I also dabble with Windows on occasion, but I have no idea how this can be done well on Linux.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/8bitdo-micro-shortcuts.jpg&quot; alt=&quot;8Bitdo Micro&quot; title=&quot;&amp;lt;em&amp;gt;8Bitdo Micro&amp;lt;/em&amp;gt; is marketed as a multi-tasking controller&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;controllers&quot;&gt;Controllers&lt;/h2&gt;

&lt;p&gt;An obvious choice for a device with multiple buttons is a game controller. In modern macOS it’s easy to pair Nintendo Switch controllers, and the JoyCon (left or right) is an ideal candidate for a hand-held shortcut device. Xbox and PlayStation controllers can also be paired but they are much larger. Wired or wireless controllers will work.&lt;/p&gt;

&lt;p&gt;You can even use a Wii remote using an adapter like the &lt;a href=&quot;https://www.mayflash.com/product/magic_ns_lite.html&quot;&gt;&lt;em&gt;Mayflash MAGIC-NS Lite&lt;/em&gt;&lt;/a&gt;. Or you might use more esoteric controllers with an adapter from Robert Dale Smith’s &lt;a href=&quot;https://controlleradapter.com&quot;&gt;Controller Adapter&lt;/a&gt; store. In fact, I use one of his adapters to get an old &lt;a href=&quot;https://x.com/gingerbeardman/status/1629936413801062403?s=20&quot;&gt;&lt;em&gt;Sony Jog Controller&lt;/em&gt;&lt;/a&gt; to act like a GameCube controller, which I then map to keyboard shortcuts using the methods below. The sky’s the limit!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;8Bitdo&lt;/em&gt; also have their &lt;a href=&quot;https://www.8bitdo.com/micro/&quot;&gt;&lt;em&gt;Micro&lt;/em&gt; controller&lt;/a&gt; which offers more buttons and slightly better one-handed ergonomics than a Switch JoyCon. This controller is really interesting as it can pose as a Switch Pro Controller, generic controller, or keyboard. This gives us even more options. 8Bitdo are aware of this market and have created this device to fit, including a bespoke mobile app, and they even go so far as to &lt;a href=&quot;https://www.8bitdo.com/micro/#content-1-9&quot;&gt;call out this use case in their marketing material&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;keyboards&quot;&gt;Keyboards&lt;/h2&gt;

&lt;p&gt;These could be cheap bluetooth numeric pads or other small keyboards. I’ve personally tried a &lt;a href=&quot;https://niwanetwork.org/wiki/Nintendo_Wireless_Keyboard&quot;&gt;&lt;em&gt;Nintendo Wireless Keyboard&lt;/em&gt;&lt;/a&gt; that came with Nintendo DS game &lt;em&gt;Pokémon Typing Adventure&lt;/em&gt;. And of course the 8Bitdo controller mentioned above has a keyboard mode. There are many macro-pads listed for sale online, with various numbers of keys and rotary dials. Wired or wireless keyboards will work, so get creative!&lt;/p&gt;

&lt;h2 id=&quot;remapping&quot;&gt;Remapping&lt;/h2&gt;

&lt;p&gt;The 8Bitdo controller has a specific app for iOS/Android that can change its keyboard mappings. That’s cool for those mobile devices, and the iOS version will even run on an M1 Mac. But we can achieve a more versatile solution by doing the remapping in software on the computer.&lt;/p&gt;

&lt;p&gt;The general concept is to use an app that will take an input from your device of choice and map it to a keyboard shortcut or some other action that you specify. There are many apps that do this, so I’ve limited my list below to those that offer one important feature: &lt;em&gt;per-app mapping&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;This means you can set different shortcuts for each app you use, and they will change as you move between apps. Of course, it is best if this happens automatically to prevent any friction in the process.&lt;/p&gt;

&lt;p&gt;I might have a button set to “zoom in” or “zoom out” that will trigger slightly different shortcuts in my text editor than in my image editor, or I might have a button set to “primary tool” and it will trigger a tool in a different way depending on the design app I am currently using.&lt;/p&gt;

&lt;p&gt;My personal favourite app is &lt;a href=&quot;https://github.com/qibinc/JoyMapperSilicon&quot;&gt;JoyMapperSilicon&lt;/a&gt;, but we really are spoiled for choice.&lt;/p&gt;

&lt;h2 id=&quot;mouse&quot;&gt;Mouse&lt;/h2&gt;

&lt;p&gt;It’s also possible to use the analog sticks and gyro of a Switch JoyCon as a mouse using QJoyControl. Analog is straightforward and as you’d expect. But using gyro basically gives you an Air Mouse which is pretty amazing.&lt;/p&gt;

&lt;h2 id=&quot;apps&quot;&gt;Apps&lt;/h2&gt;

&lt;p&gt;You can sort the table by headings: name, cost, platform, how the per-app function works, relative ease-of-use, and whether it works with devices keyboard (key) or controller (joy) or both.&lt;/p&gt;

&lt;div class=&quot;table-wrapper&quot;&gt;
  &lt;table&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th&gt;Name&lt;/th&gt;
        &lt;th&gt;Cost&lt;/th&gt;
        &lt;th&gt;Platform&lt;/th&gt;
        &lt;th&gt;Per‑app?&lt;/th&gt;
        &lt;th&gt;Easy?&lt;/th&gt;
        &lt;th&gt;Type&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://support.8bitdo.com/ultimate/micro.html&quot;&gt;8BitDo Ultimate Software&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Free&lt;/td&gt;
        &lt;td&gt;iOS/Android&lt;/td&gt;
        &lt;td&gt;Manual&lt;/td&gt;
        &lt;td&gt;Yes&lt;/td&gt;
        &lt;td&gt;Key&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.autohotkey.com&quot;&gt;AutoHotKey&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Free&lt;/td&gt;
        &lt;td&gt;Windows&lt;/td&gt;
        &lt;td&gt;Auto&lt;/td&gt;
        &lt;td&gt;No&lt;/td&gt;
        &lt;td&gt;Joy&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://folivora.ai&quot;&gt;BetterTouchTool&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;$10&lt;/td&gt;
        &lt;td&gt;macOS&lt;/td&gt;
        &lt;td&gt;Auto&lt;/td&gt;
        &lt;td&gt;Yes&lt;/td&gt;
        &lt;td&gt;Both&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://apps.apple.com/gb/app/gamepad-companion/id428799479?mt=12&quot;&gt;GamePad Companion&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;$10&lt;/td&gt;
        &lt;td&gt;macOS&lt;/td&gt;
        &lt;td&gt;Manual&lt;/td&gt;
        &lt;td&gt;No&lt;/td&gt;
        &lt;td&gt;Joy&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://apps.apple.com/gb/app/joykeymapper/id1511416593?mt=12&quot;&gt;JoyKeyMapper&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Free&lt;/td&gt;
        &lt;td&gt;macOS&lt;/td&gt;
        &lt;td&gt;Auto&lt;/td&gt;
        &lt;td&gt;Yes&lt;/td&gt;
        &lt;td&gt;Joy&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://github.com/qibinc/JoyMapperSilicon&quot;&gt;JoyMapperSilicon&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Free&lt;/td&gt;
        &lt;td&gt;macOS&lt;/td&gt;
        &lt;td&gt;Auto&lt;/td&gt;
        &lt;td&gt;Yes&lt;/td&gt;
        &lt;td&gt;Joy&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://joytokey.net/en/&quot;&gt;JoyToKey&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;$7&lt;/td&gt;
        &lt;td&gt;Windows&lt;/td&gt;
        &lt;td&gt;Auto&lt;/td&gt;
        &lt;td&gt;No&lt;/td&gt;
        &lt;td&gt;Joy&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://github.com/zenangst/KeyboardCowboy&quot;&gt;Keyboard Cowboy&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Free&lt;/td&gt;
        &lt;td&gt;macOS&lt;/td&gt;
        &lt;td&gt;Auto&lt;/td&gt;
        &lt;td&gt;No&lt;/td&gt;
        &lt;td&gt;Key&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.keyboardmaestro.com&quot;&gt;Keyboard Maestro&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;$36&lt;/td&gt;
        &lt;td&gt;macOS&lt;/td&gt;
        &lt;td&gt;Auto&lt;/td&gt;
        &lt;td&gt;No&lt;/td&gt;
        &lt;td&gt;Both&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://github.com/erikmwerner/QJoyControl&quot;&gt;QJoyControl&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;Free&lt;/td&gt;
        &lt;td&gt;macOS&lt;/td&gt;
        &lt;td&gt;No&lt;/td&gt;
        &lt;td&gt;Yes&lt;/td&gt;
        &lt;td&gt;Joy&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href=&quot;https://www.usboverdrive.com&quot;&gt;USB Overdrive&lt;/a&gt;&lt;/td&gt;
        &lt;td&gt;$20&lt;/td&gt;
        &lt;td&gt;macOS&lt;/td&gt;
        &lt;td&gt;Auto&lt;/td&gt;
        &lt;td&gt;Yes&lt;/td&gt;
        &lt;td&gt;Both&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;

&lt;/div&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 23 Dec 2023 23:06:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/12/23/using-game-controllers-and-keyboards-for-custom-shortcuts/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/12/23/using-game-controllers-and-keyboards-for-custom-shortcuts/</guid>
        </item>
      
    
      
        <item>
          <title>See the sky: Thoru Yamamoto’s Christmas story, for Playdate</title>
          <description>&lt;p&gt;&lt;em&gt;Thoru Yamamoto&lt;/em&gt; (Japanese: 山本徹 or とーるやまもと), born 1955, is a Japanese multimedia artist. Over the years he has released work in many formats including, but not limited to: magazine illustrations, HyperCard decks, interactive CD-ROMs, printed books, websites, digital stickers, and videos. He is perhaps best known for his story books distributed as HyperCard stacks and his unique 1-bit art taking advantage of the limitation imposed by early Apple Macintosh computers.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;See the sky&lt;/em&gt; is one such story book, a Christmas present released in October 1992 as a series of HyperCard stacks. In 1996 it was re-released in a remastered form: as an interactive CD-ROM, produced using Macromedia Director, which added ambient music and navigation to the original images. Also released in 1996 was &lt;a href=&quot;https://twitter.com/gingerbeardman/status/1582466068517310465&quot;&gt;a printed book of the story, presented as 3 images per page&lt;/a&gt;. Finally, in 1999 a CD-R of the combined HyperCard stacks was released.&lt;/p&gt;

&lt;h2 id=&quot;a-new-edition-for-2023&quot;&gt;A new edition for 2023&lt;/h2&gt;

&lt;p&gt;I’ve created a new version of &lt;em&gt;See the sky&lt;/em&gt; for &lt;a href=&quot;https://play.date&quot;&gt;Playdate&lt;/a&gt;. The remastering/remaking/porting process was quite involved, so I’d like to detail it in this blog post.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/thoru-yamamoto-see-the-sky-playdate.gif#playdate&quot; alt=&quot;See the sky&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;extracting-the-original-images&quot;&gt;Extracting the original images&lt;/h2&gt;

&lt;p&gt;I used &lt;a href=&quot;https://github.com/PierreLorenzi/HyperCardPreview&quot;&gt;HyperCardPreview&lt;/a&gt; to export the assets from the original &lt;a href=&quot;https://en.wikipedia.org/wiki/HyperCard&quot;&gt;HyperCard&lt;/a&gt; stack. I did this back in October 2022, and had to use an old MacBook Pro running Mojave to do it.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Just today, whilst writing this blog post, I figured out that HyperCardPreview will refuse to open stacks if the app Stacksmith is also present on your Mac!? As soon as I deleted Stacksmith, HyperCardPreview opened the files just fine. It seems to be some sort of issue with them competing for control of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;com.apple.hypercard.stack&lt;/code&gt; uti. Weird.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Anyway, &lt;em&gt;See the sky&lt;/em&gt; consists of just over 500 full screen card images. For other stacks, you might get a combination of background images and card images that would need re-compositing - it really depends on the stack.&lt;/p&gt;

&lt;p&gt;Thoru told me that when he first started out with HyperCard he wasn’t aware of the benefits of using a common background card and different foreground cards, which is why &lt;em&gt;See the sky&lt;/em&gt; consists of only foreground cards. For this reason it was very difficult for him to upload the files, which were rather large for the time. Later productions would make more effective use of background cards to keep the file size as small as possible.&lt;/p&gt;

&lt;h2 id=&quot;implementing-a-viewer&quot;&gt;Implementing a viewer&lt;/h2&gt;

&lt;p&gt;My way of developing is to think of the goal as clearly as possible, then get something up and working as quickly as possible, and after that iterate and refine until I reach the goal. So it was easy to create a sort of slideshow viewer for the images, keeping track of the current image and allowing navigation forwards and backwards with A and B buttons, loading the next/previous image as required. Pretty quickly it became apparent that I could not simply display each screen centred as important content would frequently be out of view.&lt;/p&gt;

&lt;h2 id=&quot;adjusting-each-screen&quot;&gt;Adjusting each screen&lt;/h2&gt;

&lt;p&gt;So I added a table to store offsets for each screen. But defining these manually would be very time consuming so I set about creating an interactive way to do this. I added a debug mode in which I map the d-pad (cursor keys) to move the current image up/down/left/right, along with the ability to save the offsets table to a file. This was a huge productivity boost! But I was still finding it quite a repetitive task, so I added further key mappings so I could use the numbers on the numeric pad of my keyboard to quickly set the offsets for a screen to each of the 8 compass directions, or centred. This increased productivity even more. At this point I found myself setting the same offsets for a screen as the previous screen, so I added to more keys to copy the offset from the previous/following screen. All in all this made setting offsets for 500 screens quick and easy. When I was happy I copied the offset table into the code and that became the default values.&lt;/p&gt;

&lt;p&gt;This is all to say that whilst the original Macintosh resolution of 512×342 does not match the Playdate’s resolution of 400×240, &lt;em&gt;See the sky&lt;/em&gt; still works on Playdate because every screen has been manually repositioned to keep the important elements in view, a process similar to the “pan and scan” adaptation of movies for 4:3 TVs.&lt;/p&gt;

&lt;h2 id=&quot;hypercard-look-and-feel&quot;&gt;HyperCard look and feel&lt;/h2&gt;

&lt;p&gt;The most recognisable feature of many HyperCard stacks are the crossfades between screens. This was essential to the experience. Thoru even took advantage of the crossfade in certain scenes by changing only small elements from screen to screen so that the crossfade turned into a sort of stop-motion animation effect.&lt;/p&gt;

&lt;p&gt;To achieve the crossfade on Playdate I do the following:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Before the transition I capture the current screen using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;playdate.graphics.getWorkingImage()&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Next I make this image into an overlay, in my case I’m assigning it to a “fade” sprite&lt;/li&gt;
  &lt;li&gt;Behind the fade image/sprite I load in the requested next/previous image&lt;/li&gt;
  &lt;li&gt;Finally I use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;playdate.graphics.image:fadedImage(alpha, Bayer8x8)&lt;/code&gt; to fade out the overlay, which happens over several frames and results in the image becoming more and more transparent, eventually disappearing completely&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So the crossfade is simply one image fading away and the image behind it slowly being revealed. Magic.&lt;/p&gt;

&lt;p&gt;I also added the ability to have slower or faster crossfades depending on your preference. I do this by adjusting the refresh/frame rate of the game itself, rather than skipping any of the fade.&lt;/p&gt;

&lt;p&gt;The only other feature I needed to add was a flashing capability. This happens at a handful of places in the story to various degrees, mostly there are a few flashes in places but in one places there are 10 flashes. Given that people with photosensitive epilepsy won’t want to see the screen flash I honour the Playdate “reduce flashing” system setting. If the user has that toggled on the story will only flash once at each instance. The speed of the flashing is quite slow, and not tied to the speed of the crossfade.&lt;/p&gt;

&lt;p&gt;Page turn sounds are recordings of the sounds defined in the original HyperCard stack, another essential part of the experience. Thoru describes these sounds as “pipo papo” and that’s how I label it in the settings. I also provide the option to use a more realistic page turn sound, or switch off page turn sounds entirely.&lt;/p&gt;

&lt;h2 id=&quot;chapters&quot;&gt;Chapters&lt;/h2&gt;

&lt;p&gt;I added chapter navigation which unlocks as you go through the story, in a similar way to the 1996 CD-ROM release of &lt;em&gt;See the sky&lt;/em&gt;. This means you can revisit any previous chapter, and once you’ve reached the end of the story you’ll have access to all chapters. If you want to reset that progress, for example to let somebody else enjoy the story from the beginning and remove any temptation for them to skip ahead, you can delete the “game data” through Playdate Settings. Chapter title cards are only shown when using the chapter navigation, and not whilst going through the story, I do this by injecting temporary images into the crossfade system.&lt;/p&gt;

&lt;h2 id=&quot;progress&quot;&gt;Progress&lt;/h2&gt;

&lt;p&gt;I also added a progress bar, shown when you bring up the menu. It’s a vertical bar drawn in the centre of the screen between the menu and faded game image. The bar itself is dithered at 50%, and onto it I draw white markers for each chapter position. The current position is shown by drawing a solid white bar from the bottom of the screen to the current position. This means that the bar “fills” with white from the bottom as you progress through the story.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/thoru-yamamoto-see-the-sky-playdate.png#playdate&quot; alt=&quot;Progress bar&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;experiments-with-sound&quot;&gt;Experiments with sound&lt;/h2&gt;

&lt;p&gt;The 1996 CD-ROM release of &lt;em&gt;See the sky&lt;/em&gt; has ambient music, but Thoru and myself couldn’t figure out the rights to this so it could not be used. I had done the work, just in case, so I’ll mention it here.&lt;/p&gt;

&lt;p&gt;I &lt;a href=&quot;/2023/08/12/extracting-sounds-from-macromedia-director-files/&quot;&gt;extracted the audio from the Director files using a technique I’ve previously blogged about&lt;/a&gt;. I then converted the audio files to 44.1KHz 16-bit WAV files, and used &lt;a href=&quot;https://www.ocenaudio.com/en/startpage&quot;&gt;Ocen Audio&lt;/a&gt; to remove the base noise from those files. Basically, you select a part of the audio that contains only noise and it removes this from the entire audio file. Doing this without first upsampling the audio meant it did not work as well or at all. After the de-noising, I converted to ADPCM using adpcm-xq which gave files half the original size at higher quality and with lower noise levels.&lt;/p&gt;

&lt;h2 id=&quot;experiments-with-music&quot;&gt;Experiments with music&lt;/h2&gt;

&lt;p&gt;After we realised we would not be able to use the ambient music, I looked at using completely different music, turning to the catalogue of watson @ MusMus. I found a piece of music for each chapter of the story and extracted loops using PyMusicLooper. I then tweaked the loops by adjusting their start point by moving a section of audio from one end to the other so the loop began with the part of the audio I thought sounded best. I use &lt;a href=&quot;https://twistedwave.com&quot;&gt;TwistedWave&lt;/a&gt; for most sound editing like this. Thoru really liked the music itself but was of the opinion that no music would be more honest to the original release. I can’t argue with that reasoning. Feel free to play your own choice of music whilst experiencing the story.&lt;/p&gt;

&lt;h2 id=&quot;optimising-for-size&quot;&gt;Optimising for size&lt;/h2&gt;

&lt;p&gt;The final app binary is tiny but the images are adding up to about 3MB. That’s fine, but I wondered how I might be able to optimise them. I used imagemagick’s montage command to stitch the images together into a grid. In Playdate land we call this an image table, but you might refer to it as a sprite sheet. This reduced the size of 500 separate card images from 3MB to a single image of just 2MB. A nice saving!&lt;/p&gt;

&lt;p&gt;The 500 screen image table occupies 10.5MB RAM, so about two thirds of the available RAM on Playdate. Side-effects of bundling 500 screens as single file are a short delay on loading for users, a short delay on building for me as a developer, and the need to regenerate the single image if any of the images it contains are changed.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;At this point, I could have stopped. I should have stopped. But, of course, I didn’t.&lt;/p&gt;

  &lt;p&gt;I’ve often wondered how the dimensions of a sprite sheet grid affect the file size when saved as a compressed format such as PNG. The extreme examples in this case would be having a tall grid of 1×504 or a wide grid of 504×1, and in between we have some exact multiples. I generated one sprite sheet for each grid size and here found that for this set of images a grid of 42×12 resulted in the smallest image file size a saving of a further 4% or so. The savings are similar when converted to the Playdate pdt image format. Note that this sort of optimisation only works for solid images, not for images with any alpha/transparency.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And that’s it. The final size of this new version is smaller than the original, mostly due to the image optimisation. I could make it even smaller by exporting all the final crops of the screen images, create a new image table of those, displaying them with zero offset. But I decided to not go there!&lt;/p&gt;

&lt;h2 id=&quot;the-result&quot;&gt;The result&lt;/h2&gt;

&lt;p&gt;You can download &lt;em&gt;See the sky&lt;/em&gt; for Playdate from my page on itch.io, and it is a free download. A present from Thoru and myself. With best wishes for a Merry Christmas.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gingerbeardman.itch.io/see-the-sky&quot;&gt;gingerbeardman.itch.io/see-the-sky&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;500 screens&lt;/li&gt;
  &lt;li&gt;10 chapters&lt;/li&gt;
  &lt;li&gt;~ 1 hour experience&lt;/li&gt;
  &lt;li&gt;Quick navigation menu unlocked as you go&lt;/li&gt;
  &lt;li&gt;Position is remembered between launches&lt;/li&gt;
  &lt;li&gt;Settings for sound and crossfade speed&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Created by Thoru Yamamoto&lt;/li&gt;
  &lt;li&gt;Edited by Matt Sephton&lt;/li&gt;
  &lt;li&gt;© 1992 Thoru Yamamoto&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;further-reading&quot;&gt;Further reading&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://lostmediawiki.com/Thoru_Yamamoto_works_(partially_found_interactive_media;_1990s)&quot;&gt;Thoru Yamamoto @ Lost Media Wiki&lt;/a&gt; read more about his work&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/thoru-yamamoto-hypercard-stacks&quot;&gt;Thoru Yamamoto HyperCard Stacks Collection @ archive.org&lt;/a&gt; view the original &lt;em&gt;See the sky&lt;/em&gt; &amp;amp; more&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;birthday-blog-post&quot;&gt;Birthday blog post?&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Check out my other &lt;a href=&quot;/tag/birthday/&quot;&gt;#birthday&lt;/a&gt; blog posts.&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 16 Dec 2023 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/12/16/see-the-sky-thoru-yamamoto-christmas-story-for-playdate/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/12/16/see-the-sky-thoru-yamamoto-christmas-story-for-playdate/</guid>
        </item>
      
    
      
        <item>
          <title>Dynamic music and sound techniques for video games</title>
          <description>&lt;p&gt;The only aspect of game development I’ve not attempted myself is the music. I mostly use royalty free music of Japanese origin (just because I dig their vibe, man) as in the case of &lt;a href=&quot;https://soundcloud.com/mac-vogelsang/sets/sparrow-solitaire&quot;&gt;&lt;em&gt;Sparrow Solitaire&lt;/em&gt;&lt;/a&gt; or &lt;a href=&quot;https://twitter.com/gingerbeardman/status/1732555533863751691&quot;&gt;&lt;em&gt;Fore! Track&lt;/em&gt;&lt;/a&gt; or in rare cases I pay friends (like the amazing Jamie Hamshere) to write music specifically for a game as in the case of &lt;a href=&quot;https://soundcloud.com/gingerbeardman/sets/yoyozo-soundtrack&quot;&gt;&lt;em&gt;YOYOZO&lt;/em&gt;&lt;/a&gt;. Maybe one day that will change, but until then I’m enjoying gaining more understanding and control of the music in my games. Whilst I develop games for &lt;a href=&quot;https://play.date&quot;&gt;Playdate&lt;/a&gt; these techniques are general enough to apply anywhere.&lt;/p&gt;

&lt;p&gt;The main way I make the music into more than a static track is to apply a dynamic, reactive, or adaptive effect in one way or another. In this blog post I’ll go into how I’ve achieved this. Please note this is by no means an exhaustive list, rather it’s just the ones I have personally used.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;dynamic-bpm&quot;&gt;Dynamic BPM&lt;/h2&gt;

&lt;p&gt;I use this method in &lt;a href=&quot;https://play.date/games/yoyozo/&quot;&gt;&lt;em&gt;YOYOZO&lt;/em&gt;&lt;/a&gt; because it uses “chip tune” music data representing songs composed by my friend Jamie Hamshere using &lt;a href=&quot;https://play.date/pulp/&quot;&gt;&lt;em&gt;Playdate Pulp&lt;/em&gt;&lt;/a&gt;. A playback engine for this data, written by Pulp creator Shaun Inman, works beautifully when integrated into games written using Lua and the &lt;a href=&quot;https://play.date/dev/&quot;&gt;&lt;em&gt;Playdate SDK&lt;/em&gt;&lt;/a&gt;. I added hook to allow me to set the BPM at any point to any value. The end result is that the BPM of the music scales from 130 to 135 as your score increases. As you improve at the game you’ll notice the music speed up ever so slightly along with an increase in tension and anxiety.&lt;/p&gt;

&lt;iframe width=&quot;100%&quot; height=&quot;140&quot; scrolling=&quot;no&quot; frameborder=&quot;no&quot; allow=&quot;autoplay&quot; src=&quot;https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1685873466&amp;amp;color=%23ff5500&amp;amp;auto_play=false&amp;amp;hide_related=false&amp;amp;show_comments=true&amp;amp;show_user=true&amp;amp;show_reposts=false&amp;amp;show_teaser=true&amp;amp;visual=true&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;Of course, it’s possible to do this in a pre-recorded song stored as a digital music file, but it’s much more difficult for that to respond to the what the player does in the game. An example that takes an interesting approach to this is the track &lt;a href=&quot;https://www.youtube.com/watch?v=1_iZh_2li4M&quot;&gt;“Sunny Day” from the game Vib Ribbon&lt;/a&gt;, and indeed the rest of its soundtrack, where tempo changes over the duration of each song.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;infinite-variations&quot;&gt;Infinite Variations&lt;/h2&gt;

&lt;p&gt;Another technique I use in &lt;a href=&quot;https://play.date/games/yoyozo/&quot;&gt;&lt;em&gt;YOYOZO&lt;/em&gt;&lt;/a&gt;, again made possible because I can modify the music data and playback parameters in real time. With this one I cycle the values for the instrument voices pseudo-randomly so that the track plays once as it was programmed and then morphs slightly for each subsequent playback. The track is quite minimal and repetitive in &lt;a href=&quot;https://sites.barbican.org.uk/reichglassadams/&quot;&gt;Steve Reich, Philip Glass or John Adams&lt;/a&gt; sort of way, so there are automated variations wandering around the original arrangement work really well. Perhaps the &lt;a href=&quot;https://www.youtube.com/watch?v=NkBXgcN3fXo&quot;&gt;ultimate implementation of this approach is &lt;em&gt;Wii Play’s&lt;/em&gt; Tanks game&lt;/a&gt;.&lt;/p&gt;

&lt;iframe width=&quot;100%&quot; height=&quot;140&quot; scrolling=&quot;no&quot; frameborder=&quot;no&quot; allow=&quot;autoplay&quot; src=&quot;https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1685873439&amp;amp;color=%23ff5500&amp;amp;auto_play=false&amp;amp;hide_related=false&amp;amp;show_comments=true&amp;amp;show_user=true&amp;amp;show_reposts=false&amp;amp;show_teaser=true&amp;amp;visual=true&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;For sound effects, I vary the playback sample rate to change the pitch of sound effects. This prevents the same sound effect becoming monotonous. Two examples might be &lt;em&gt;Lara Croft&lt;/em&gt; in the first &lt;em&gt;Tomb Raider&lt;/em&gt; game, &lt;a href=&quot;https://youtu.be/Roi2UelYGsU?si=_17TmHon5JenRxCM&amp;amp;t=1079&quot;&gt;groaning the same way every time she climbs up a platform&lt;/a&gt; compared with &lt;a href=&quot;https://www.youtube.com/watch?v=JGQeQmUuMas&quot;&gt;the rich variety of sounds when &lt;em&gt;Mario&lt;/em&gt; walks on different surfaces&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;blendingfadingbalance&quot;&gt;Blending/Fading/Balance&lt;/h2&gt;

&lt;p&gt;Another idea I had was to fade or blend two tracks as the player makes progress in the game. But how to find two tracks that can be cross-faded in a way that always makes sense? Of course you can have them composed, but what about in music that already exists? If only there was an easy way to find such tracks!&lt;/p&gt;

&lt;p&gt;There is: stereo pairs! You’d be surprised at how different the left and right channels can sound whilst obviously being the same tune. Of course this means that are output audio will be mono but for me on Playdate that’s just fine. I use this method in &lt;a href=&quot;https://play.date/games/fore-track/&quot;&gt;&lt;em&gt;Fore! Track&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The idea is to adjust the balance of the two parts of the audio, at once point you’re playing just the left audio across both outputs, then you adjust the balance to play a mix of both, at the other end of the scale you’d be playing just the right audio. Unfortunately the Playdate SDK currently has no API to easily adjust balance, so I had to program a method myself. First, I convert to the destination format which is for me ADPCM using &lt;a href=&quot;https://github.com/dbry/adpcm-xq&quot;&gt;adpcm-xq&lt;/a&gt;. Once the files are in this format I split the stereo pair into two files, one for the left channel and one for the right channel. Converting to the destination format before splitting ensures that the two are exactly the same length in terms of samples/bytes.&lt;/p&gt;

&lt;p&gt;In the game I fade between the two as the score/chain increases, which has the effect of subtly changing the instrumentation of the tune. It’s one of those things that most people wouldn’t notice, but that once you know about it you can’t miss it. Sadly, I don’t have an easy way to demo this in a video or sound file.&lt;/p&gt;

&lt;p&gt;For sound effects, you might consider panning to increase immersion and guide the players visual focus through use of audio. In &lt;a href=&quot;https://play.date/games/yoyozo/&quot;&gt;&lt;em&gt;YOYOZO&lt;/em&gt;&lt;/a&gt; I pan certain sounds relative to the location of the ball, certain other sounds relative to the location of the player, and there are global sound effects that are not panned at all.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/yoyozo-teaser.gif#playdate&quot; alt=&quot;YOYOZO&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;progressive-loops&quot;&gt;Progressive Loops&lt;/h2&gt;

&lt;p&gt;Digital audio is a different beast. I always try to find a time that fits the game, going so far as to audition many hundreds of tracks and creating playlist of songs far ahead of ever making a game or even having and idea for a game. I try to find tracks that will loop well and not get annoying, which is easier said than done. If I can’t find a track that loops well, there’s another way.&lt;/p&gt;

&lt;p&gt;You can use &lt;a href=&quot;https://github.com/arkrow/PyMusicLooper&quot;&gt;PyMusicLooper&lt;/a&gt; to analyse a digital audio track and spit out information about ranges that loop nicely, along with a percentage indicating how good it considers the loop. In other words you can identify and extract a loop from digital audio files that sound like they could loop. Of course, can’t identify loops in tracks that aren’t repetitive or consistent in their structure.  You might get PyMusicLooper to split the file into into three sections (intro, loop, outro) or just export the loop information as a text file to use in your game. Which I choose depends on how much of the file I want to use.&lt;/p&gt;

&lt;p&gt;For an example, in my game &lt;a href=&quot;https://play.date/games/icarus&quot;&gt;Super ICARUS&lt;/a&gt; I’m using a file that gives the vibe I wanted in the game and sounded like it contained some loops even though it was not provided as a looping song. PyMusicLooper reported that it contains tens of possible loops of varying quality.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;loop&lt;/th&gt;
      &lt;th&gt;start&lt;/th&gt;
      &lt;th&gt;end&lt;/th&gt;
      &lt;th&gt;duration&lt;/th&gt;
      &lt;th&gt;match&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;3.437&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;30.755&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;27.318&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;94.87%&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;1&lt;/td&gt;
      &lt;td&gt;0.023&lt;/td&gt;
      &lt;td&gt;27.341&lt;/td&gt;
      &lt;td&gt;27.318&lt;/td&gt;
      &lt;td&gt;94.79%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;7.279&lt;/td&gt;
      &lt;td&gt;34.598&lt;/td&gt;
      &lt;td&gt;27.319&lt;/td&gt;
      &lt;td&gt;94.63%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;3&lt;/td&gt;
      &lt;td&gt;6.850&lt;/td&gt;
      &lt;td&gt;34.168&lt;/td&gt;
      &lt;td&gt;27.318&lt;/td&gt;
      &lt;td&gt;93.95%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;4&lt;/td&gt;
      &lt;td&gt;8.127&lt;/td&gt;
      &lt;td&gt;35.445&lt;/td&gt;
      &lt;td&gt;27.318&lt;/td&gt;
      &lt;td&gt;93.92%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;5&lt;/td&gt;
      &lt;td&gt;22.221&lt;/td&gt;
      &lt;td&gt;52.953&lt;/td&gt;
      &lt;td&gt;30.732&lt;/td&gt;
      &lt;td&gt;93.80%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;6&lt;/td&gt;
      &lt;td&gt;25.635&lt;/td&gt;
      &lt;td&gt;56.366&lt;/td&gt;
      &lt;td&gt;30.731&lt;/td&gt;
      &lt;td&gt;93.23%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;7&lt;/td&gt;
      &lt;td&gt;11.970&lt;/td&gt;
      &lt;td&gt;39.288&lt;/td&gt;
      &lt;td&gt;27.318&lt;/td&gt;
      &lt;td&gt;93.17%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;8&lt;/td&gt;
      &lt;td&gt;6.850&lt;/td&gt;
      &lt;td&gt;35.875&lt;/td&gt;
      &lt;td&gt;29.025&lt;/td&gt;
      &lt;td&gt;92.13%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;9&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;6.850&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;54.660&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;47.810&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;91.98%&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;10&lt;/td&gt;
      &lt;td&gt;20.515&lt;/td&gt;
      &lt;td&gt;52.953&lt;/td&gt;
      &lt;td&gt;32.438&lt;/td&gt;
      &lt;td&gt;91.54%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;11&lt;/td&gt;
      &lt;td&gt;10.263&lt;/td&gt;
      &lt;td&gt;37.581&lt;/td&gt;
      &lt;td&gt;27.318&lt;/td&gt;
      &lt;td&gt;91.26%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;12&lt;/td&gt;
      &lt;td&gt;22.221&lt;/td&gt;
      &lt;td&gt;54.660&lt;/td&gt;
      &lt;td&gt;32.439&lt;/td&gt;
      &lt;td&gt;91.11%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;13&lt;/td&gt;
      &lt;td&gt;23.928&lt;/td&gt;
      &lt;td&gt;68.325&lt;/td&gt;
      &lt;td&gt;44.397&lt;/td&gt;
      &lt;td&gt;90.92%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;14&lt;/td&gt;
      &lt;td&gt;39.300&lt;/td&gt;
      &lt;td&gt;70.031&lt;/td&gt;
      &lt;td&gt;30.731&lt;/td&gt;
      &lt;td&gt;90.82%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;12.399&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;70.449&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;58.050&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;90.78%&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;My goal was to find three loops of increasing length and with a high percentage loop quality. After some experimentation and listening, I decided on loops 0, 9, and 15 (table only shows the top 15 loops from this track, even though their percentage loop match are not 100% they still sound like good loops, so selecting these loops was a case of finding three of suitable length and content. PyMusicLooper will let you audition the loops directly, so there’s no need to use an audio editor.&lt;/p&gt;

&lt;p&gt;Using the Playdate SDK I can do &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;setRange()&lt;/code&gt; on the audio track to change the playback range and the music will loop between those new points when the playhead reaches the end of the range. For this reason, this method does not provide immediate results so is better used to signify a large change in progress as the delay until the change is noticed will be an unknown amount of time. But when the change does kick in it’s a really nice surprise!&lt;/p&gt;

&lt;p&gt;The final result sees the game start by playing loop 1 (synth and drums) and then as the player gets makes some good progress I switch to loop 2 (synth, drums, guitar licks), and finally as they pass a certain threshold I switch to loop 3 (synth, drums, guitar licks into guitar solo). This provides music that sounds very dynamic with little effort. You could even drop back to the shorter loops if the player lost a life, missed a target, and so on. Again, there’s no real way of me demoing this as it’s something that will become apparent through play, and the final result is just one long dynamic song!&lt;/p&gt;

&lt;p&gt;For sound effects I use the same approach as above. As an example, in &lt;a href=&quot;https://play.date/games/fore-track/&quot;&gt;&lt;em&gt;Fore! Track&lt;/em&gt;&lt;/a&gt; there is a clapping sound effect after the player gets the ball in a hole. This is a long sound effect but I play three increasingly long sections of it as the player’s chain increases (number of successive holes-in-one). It starts off as a short clap, increases to a longer more enthusiastic clap, and finally it begins with a whoop and continues to enthusiastic clap. I have a separate sound effect for the end game cheer that plays over the top of the full clap, resulting in a raucous end of game celebration.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;quantised-sounds&quot;&gt;Quantised Sounds&lt;/h2&gt;

&lt;p&gt;In &lt;a href=&quot;https://play.date/games/icarus&quot;&gt;Super ICARUS&lt;/a&gt; created certain game event sounds from small sections of the music track. I then adjust playback rate/speed/pitch. The result is that the sounds appear to be quantised or matched to the music. I’m not sure how to describe this phenomenon accurately in musical/technical terms.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;I’d love to hear about other methods of achieving dynamic music and sound in video games. Feel free to reach out to me on social media!&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;further-reading&quot;&gt;Further reading&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/11/21/yoyozo-how-i-made-a-playdate-game-in-39kb/&quot;&gt;&lt;em&gt;YOYOZO&lt;/em&gt; (or, how I made a Playdate game in 39KiB)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/11/26/easter-egg-emoji-converting-pixels-into-particles/&quot;&gt;Easter egg emoji: converting pixels into particles&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/12/09/dynamic-music-and-sound-techniques-for-video-games/&quot;&gt;Dynamic music and sound techniques for video games&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;elsewhere&quot;&gt;Elsewhere&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;2023-11-22—&lt;a href=&quot;https://news.ycombinator.com/item?id=38584336&quot;&gt;Hacker News&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2023-11-22—&lt;a href=&quot;https://tildes.net/~games/1crg/dynamic_music_and_sound_techniques_for_video_games&quot;&gt;Tildes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 09 Dec 2023 01:22:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/12/09/dynamic-music-and-sound-techniques-for-video-games/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/12/09/dynamic-music-and-sound-techniques-for-video-games/</guid>
        </item>
      
    
      
        <item>
          <title>Easter egg emoji: converting pixels into particles</title>
          <description>&lt;p&gt;I’m &lt;a href=&quot;/2019/08/14/moai-games/&quot;&gt;fascinated with Moai&lt;/a&gt; so I always try to squeeze an appearance into my games. Moai in video games is a meme, or &lt;a href=&quot;https://en.wikipedia.org/wiki/Easter_egg_(media)&quot;&gt;easter egg&lt;/a&gt;, going all the way back to 1983. But my game YOYOZO (&lt;a href=&quot;https://play.date/games/yoyozo/&quot;&gt;out now for the Playdate handheld&lt;/a&gt;) is about capturing stars in space using a yoyo, so how could I get a Moai in it?&lt;/p&gt;

&lt;p&gt;The source of my inspiration was a trip to Japan back in 2004 (my only one, so far). Visiting in August meant that one of the things we did was go to an &lt;a href=&quot;https://www.japan-guide.com/e/e2267.html&quot;&gt;annual hanabi fireworks festival&lt;/a&gt;, where I saw &lt;a href=&quot;https://blog.gaijinpot.com/four-types-of-japanese-fireworks/&quot;&gt;katamono&lt;/a&gt; for the first time. These are fireworks that explode in the shapes of drawings, like a smiley face or a magic 8-ball. I was amazed and the experience has stuck with me for over 20 years. Maybe I could add Moai into YOYOZO by making the explosions appear like the katamono?&lt;/p&gt;

&lt;p&gt;I started off by coding the patterns by hand, as a test, but my calculations weren’t precise enough and the whole endeavour quickly grew too complicated to manage by hand. I needed a better, more automated way. The method that I arrived at is what I’ll document in this post.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;pixels-as-code&quot;&gt;Pixels as code&lt;/h2&gt;

&lt;p&gt;Instead of plotting values by hand in code I figured that it would make more sense if I could draw the patterns and then somehow convert them into coordinates. I use &lt;a href=&quot;/2023/05/10/piskel-for-playdate/&quot;&gt;Piskel&lt;/a&gt; as my Playdate-centric graphics editor. It’s a really useful tool. So I drew a few emoji-like patterns, keeping in mind that they would be converted into a cluster of points and exploded from an origin. This took a bit of experimentation but I ended up with a sort of already exploded look.&lt;/p&gt;

&lt;p class=&quot;screen&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/yoyozo-emoji.png#pixel&quot; alt=&quot;EMOJI&quot; /&gt;&lt;/p&gt;

&lt;p&gt;To get the pixel data out of Piskel in text form I make use of its “export as a C file” feature. This results in code definitions similar to the below. (I use a script that does some simple regex search/replace to reformat these definitions to be a little more succinct and readable in my Lua code.)&lt;/p&gt;

&lt;div class=&quot;language-c highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt; &lt;span class=&quot;cpf&quot;&gt;&amp;lt;stdint.h&amp;gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;
&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;#define EMOJI-TABLE-11-11_FRAME_COUNT 3
#define EMOJI-TABLE-11-11_FRAME_WIDTH 11
#define EMOJI-TABLE-11-11_FRAME_HEIGHT 11
&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;/* Piskel data for &quot;emoji-table-11-11&quot; */&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;uint32_t&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;emoji&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;table&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;][&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;121&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
&lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
&lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
&lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
&lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
&lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
&lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
&lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
&lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
&lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
&lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0xff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;0x00&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;pixels-as-points&quot;&gt;Pixels as points&lt;/h2&gt;

&lt;p&gt;With this data in hand, my plan was to convert them into points expressed as an angle and distance from an origin. This way of expressing points is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Polar_coordinate_system&quot;&gt;polar coordinate system&lt;/a&gt; so there was no need to invent anything, I just needed to code a function that would take a grid of pixels expressed as &lt;em&gt;(x, y)&lt;/em&gt; and convert them to a series of distances and angles expressed as &lt;em&gt;(r, θ)&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The way I do this is to read the point data in from a grid of pixels, offsetting that data by half the width and height of the &lt;em&gt;odd-sized&lt;/em&gt; grid so that the centre of the grid &lt;em&gt;(0, 0)&lt;/em&gt; is the middle of the centre pixel. And finally I convert those adjusted &lt;em&gt;(x, y)&lt;/em&gt; values to polar &lt;em&gt;(r, θ)&lt;/em&gt; coordinates. This worked really well!&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Below is a work-in-progress GIF captured on 14 September 2023, shortly after getting the feature working. This animation also shows an early version of the HUD and debug values for ball size and the length of the beam.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/yoyozo-emoji.gif#playdate&quot; alt=&quot;EMOJI&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The finishing touches (not shown in the above animation) were to add some small amount of &lt;em&gt;pseudo-randomisation&lt;/em&gt; to the initial rotation of the emoji, the initial “colour” of each particle, and changing the coordinates of each point slightly so they appear more organic and move at slightly different speeds. I eventually settled on over a dozen such pixel patterns in the game (how many have you spotted?). Once your score is higher than 50M points every explosion is an emoji! &lt;a href=&quot;https://play.date/games/yoyozo/#gameListingMoreInfo&quot;&gt;Check out the game manual&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;pseudo-random&quot;&gt;Pseudo-random?&lt;/h2&gt;

&lt;p&gt;I try to limit my use math.random values if I can help it, or at least use it in controlled way. I already use that for the positions of the stars, so if I also used it for explosions that would mean it would become far less controlled. Controlling the use of random is important in making a game system deterministic, if you want it to react the same way every time.&lt;/p&gt;

&lt;p&gt;If you’re wondering how you can get pseudo-random values, the main method I use is a trick I learned from the old arcade game &lt;a href=&quot;/2011/10/26/flicky-1984/&quot;&gt;Flicky (1984, SEGA)&lt;/a&gt; which is a game &lt;a href=&quot;https://www.flicky1984.com/post/709058873877790720/just-a-quick-reminder-that-you-can-play-my-flicky&quot;&gt;I own as a physical cabinet&lt;/a&gt;. Anyway, in Flicky there is a diamond that appears under seemingly random conditions.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;One of the MAME programmers was kind enough &lt;a href=&quot;https://www.flicky1984.com/post/54534135892/the-best-jewel-thief-in-the-world&quot;&gt;reverse engineer Flicky on my behalf and figured out what makes the diamond appear&lt;/a&gt;. It turns out the diamond will appear only if you knock out an enemy cat and it disappears outside of the centre third of the play area &lt;em&gt;and&lt;/em&gt; if the x coordinate at which the cat finally comes to rest is even. So, about 50% chance &lt;em&gt;but&lt;/em&gt; only if you position the screen correctly during play.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So, taking a cue from that wonderful Flicky logic, I use modulus—which returns the remainder of a division—as my main mechanism of generating pseudo-random values. It ensures a value in the range &lt;em&gt;[0,n-1]&lt;/em&gt;. They key thing to note is that if you base it on values in your game system that are constantly changing you can get seemingly random values that have the benefit of being deterministic if the player is skilled enough at repeating their inputs. The deterministic thing is how pretty much all the old school arcade games operated from Pac-Man to Flicky and more.&lt;/p&gt;

&lt;p&gt;Common game variables I use are: game tick (my alternative to timer), x-coordinate, y-coordinate, speed, angle, or combinations of more than one of these. I also used this approach in YOYOZO for the starfield particles, and in &lt;a href=&quot;/2023/04/13/sparrow-solitaire-for-playdate/&quot;&gt;Sparrow Solitaire&lt;/a&gt; for the falling particles that make up the &lt;a href=&quot;https://www.reddit.com/r/PlaydateConsole/comments/12vcrm6/dynamic_weather_effects_and_more_in_the_sparrow/&quot;&gt;weather effects&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;playdate-particles&quot;&gt;Playdate particles&lt;/h2&gt;

&lt;p&gt;There are &lt;a href=&quot;https://github.com/PossiblyAxolotl/pdParticles&quot;&gt;one or more libraries&lt;/a&gt; available that can be used to manage particles in a performant way on Playdate. Though I tend to code my own system that is bespoke to the game I’m working on at the time (I start each game from a blank file and use minimal libraries, force of habit). But the important thing for such limited platforms, especially when using Lua, is to use a pool of particles so that you’re not constantly creating and destroying particles which would wreak havoc on performance through overuse of Lua’a garbage collector.&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;further-reading&quot;&gt;Further reading&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/11/21/yoyozo-how-i-made-a-playdate-game-in-39kb/&quot;&gt;&lt;em&gt;YOYOZO&lt;/em&gt; (or, how I made a Playdate game in 39KiB)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/12/09/dynamic-music-and-sound-techniques-for-video-games/&quot;&gt;Dynamic music and sound techniques for video games&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://play.date/games/yoyozo/#gameListingMoreInfo&quot;&gt;&lt;em&gt;YOYOZO&lt;/em&gt; manual/player’s guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 26 Nov 2023 20:41:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/11/26/easter-egg-emoji-converting-pixels-into-particles/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/11/26/easter-egg-emoji-converting-pixels-into-particles/</guid>
        </item>
      
    
      
        <item>
          <title>YOYOZO (or, how I made a Playdate game in 39KB)</title>
          <description>&lt;blockquote&gt;
  &lt;p&gt;2023-12-27—&lt;a href=&quot;https://arstechnica.com/gaming/2023/12/ars-technicas-best-video-games-of-2023/7&quot;&gt;Ars Technica: YOYOZO wins GOTY accolade!&lt;/a&gt; almost unbelievable to be listed alongside such games as: Chants of Sennaar, Cocoon, Dave the Diver, Humanity, The Legend of Zelda: Tears of the Kingdom, Pikmin 4, Puzzmo, Super Mario Bros. Wonder, Venba and Viewfinder.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A game I made for the Playdate handheld was released today! &lt;a href=&quot;https://play.date/games/yoyozo/&quot;&gt;Go buy it&lt;/a&gt; and then come back to read this blog post.&lt;/p&gt;

&lt;p&gt;It’s called YOYOZO and in it you control a space yo-yo and have to collect stars in a sort of cosmic ballet. Well, at first it might feel a little like being on a fairground ride, but eventually you’ll become good enough for it to feel like ballet. The concept is based on my memory of a game called &lt;a href=&quot;https://archive.org/details/Pendulumania-v1.3&quot;&gt;Pendulumania&lt;/a&gt; that I played 20 years ago.&lt;/p&gt;

&lt;p&gt;The most amazing thing about this game, for me, is that launch version weighs in at a file size of &lt;em&gt;only 39KiB&lt;/em&gt;. I’m using the KiB unit of measurement which equates to 1024 bytes. I still find it hard to believe as the game contains so much! In this blog post I’ll go into some of the nerdy details.&lt;/p&gt;

&lt;h2 id=&quot;playdate&quot;&gt;Playdate?&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://play.date&quot;&gt;Playdate&lt;/a&gt; is a handheld gaming system with a unique crank input method. I don’t use the crank in this game, but I have done in the past and will do again in the future.&lt;/p&gt;

&lt;p&gt;If you own a Playdate you can buy the game now at &lt;a href=&quot;https://play.date/games/yoyozo/&quot;&gt;play.date/games/yoyozo/&lt;/a&gt;. If you don’t own a Playdate, well, &lt;a href=&quot;https://play.date&quot;&gt;what are you waiting for&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/yoyozo-teaser.gif#playdate&quot; alt=&quot;YOYOZO&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;butwhy&quot;&gt;But…&lt;em&gt;why?&lt;/em&gt;&lt;/h2&gt;

&lt;p&gt;The drive to produce a small game started after I sent the first playable version to testers. Steve at &lt;a href=&quot;http://scenicroutesoftware.com&quot;&gt;&lt;em&gt;Scenic Route Software&lt;/em&gt;&lt;/a&gt;, purveyor of quality video games, commented how tiny the game was. At that point it was 18KiB, but had no music or sound effects or polish. There was a long way to go.&lt;/p&gt;

&lt;p&gt;Even so, I wondered how doable it would be to build the game out with an eye on keeping file size “low”. I thought back to the days of my youth where whole games would fit on a single floppy disk, with room to spare. If they could do it, shouldn’t I give it a try?&lt;/p&gt;

&lt;p&gt;It’s worth noting that even with this mindset, I didn’t make a huge sustained effort to meet the goal. On the contrary, it was just something I simply kept in mind as development proceeded. For that reason, I’m sure there are more ways the game could be made even smaller than it is, with the exact same code and content. For example, I never tried finding the most optimal format for things like music and particle data which are the two largest sets of embedded data.&lt;/p&gt;

&lt;p&gt;Finally, this is not a challenge, or me throwing down the gauntlet in any way. It’s easy enough to make a smaller game, be it similar or entirely different, you’d just have to make different choices along the way. This was just me doing something nerdy as an additional constraint on top of the already enjoyable constraints of developing for Playdate.&lt;/p&gt;

&lt;p&gt;That said, I think every game developer should regularly make a point of writing code for an underpowered device as part of their own personal development—there are so many lessons to learn.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;reasons&quot;&gt;Reasons&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;The main reason for the small file size is the fact that &lt;em&gt;the game does not use any digital sound files, and very few bitmap images&lt;/em&gt; (the launch card and animation have to be bitmaps, and in-game only the logo and fonts are bitmaps). Game graphics are all drawn using only shapes (lines, rects, circles) and fills (black, white, and dither patterns).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;A second reason is that whilst I use the base Playdate Lua SDK, &lt;em&gt;I don’t use any of the additional “CoreLibs”&lt;/em&gt;. The only extra graphics functions I needed were for drawing outlined or filled circles, so I use two of my own wrapper functions that are similar to those from CoreLibs/graphics but mine are smaller and more specific. For timers, I use a simple frame/tick system, an approach which has pros and cons, but it’s good enough for me.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;A third reason is that I made the tough decision to reduce system assets, which means &lt;em&gt;there is no animated launcher card&lt;/em&gt;. This was a tough one, but it added so much to the file size I decided against it.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Finally, I noticed that &lt;em&gt;including data inside your game code&lt;/em&gt; often trumps how well you can compress it and store it externally. For example I tried compressing the music data and storing it in an external file, but the game final file size was larger than if I embedded the data in my Lua code. Plus, it’s faster as it doesn’t need to load an additional external file.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;breakdown&quot;&gt;Breakdown&lt;/h2&gt;

&lt;p&gt;I thought it would be cool to outline the main features and how each contributes to the total file size. Note that the sizes are expressed as quantities of the compiled binary, rather than uncompiled source code. It’s also worth noting that a blank project with an empty update function results in a compiled binary of only 147 bytes. Playdate compiles to Lua bytecode.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/yoyozo-chart.png&quot; alt=&quot;CHART&quot; /&gt;&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Content&lt;/th&gt;
      &lt;th&gt;Kilobytes&lt;/th&gt;
      &lt;th&gt;%&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Main code&lt;/td&gt;
      &lt;td&gt;19&lt;/td&gt;
      &lt;td&gt;49&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Two music tracks&lt;/td&gt;
      &lt;td&gt;5.5&lt;/td&gt;
      &lt;td&gt;14&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Three bitmap fonts&lt;/td&gt;
      &lt;td&gt;2.5&lt;/td&gt;
      &lt;td&gt;6&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Synthesized sound effects&lt;/td&gt;
      &lt;td&gt;2.5&lt;/td&gt;
      &lt;td&gt;6&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Custom particle system&lt;/td&gt;
      &lt;td&gt;2.0&lt;/td&gt;
      &lt;td&gt;5&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Animated system icon&lt;/td&gt;
      &lt;td&gt;2.0&lt;/td&gt;
      &lt;td&gt;5&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Animated system card&lt;/td&gt;
      &lt;td&gt;2.0&lt;/td&gt;
      &lt;td&gt;5&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Pulp music engine (modified)&lt;/td&gt;
      &lt;td&gt;1.5&lt;/td&gt;
      &lt;td&gt;4&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Online scoring system&lt;/td&gt;
      &lt;td&gt;0.5&lt;/td&gt;
      &lt;td&gt;1.25&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;How to play instructions&lt;/td&gt;
      &lt;td&gt;0.4&lt;/td&gt;
      &lt;td&gt;1&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Custom soundtrack capability&lt;/td&gt;
      &lt;td&gt;0.1&lt;/td&gt;
      &lt;td&gt;0.25&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;“Main code” contains: physics simulation, game structure and state management, multi-layered scoring and bonus system, score/stat tracking, loading and saving stats and settings, path recording and playback, animated introduction, plus the following &lt;em&gt;dynamic&lt;/em&gt; systems: scrolling starfield, screen shake, music system, sound effects system. All running at 40fps.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;abandoned-and-removed-features&quot;&gt;Abandoned and removed features&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;I tried a bunch of stuff during development. Such as asteroid fields or meteor showers that introduced obstacles that needed to be avoided, and black holes that would magnetically attract the ball. But I felt they detracted from the pureness of the concept, so I didn’t go any further with them.&lt;/li&gt;
  &lt;li&gt;The positions of stars are randomly generated, but I have implemented a fixed “daily” layout in the game, which is really fun. It’s a different experience to be able to play the same layout over and over, improving your execution of the same moves and eking out higher and higher scores. I did plan to reintroduce that option when Playdate Catalog got score boards that reset daily, but by the time that happened &lt;a href=&quot;/2025/04/15/when-playdate-stopped-being-fun/&quot;&gt;I was no longer developing Playdate&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;manualguide&quot;&gt;Manual/Guide&lt;/h2&gt;

&lt;p&gt;I really loved the manuals that came with games in the 8-bit and 16-bit era. So I thought it would be fun to write a manual/player’s guide in the old-school style. I love reading those sorts of manuals, where the developer gives you a little glimpse behind the curtain so you get an understanding of how the game works, with some small hints and tips littered throughout—for the most inquisitive players! If that sounds like your thing, &lt;a href=&quot;https://play.date/games/yoyozo/#gameListingMoreInfo&quot;&gt;download the manual from the game page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://play.date/games/yoyozo/#gameListingMoreInfo&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/yoyozo-manual.png&quot; alt=&quot;YOYOZO Manual&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;timeline&quot;&gt;Timeline&lt;/h2&gt;

&lt;p&gt;I worked on YOYOZO from September 5th to 27th, submitting it to Catalog on 21st and polishing it for the final week after that. After the game was approved I added online score boards one evening just prior to launch. It was in review and waiting for release longer than it was in development!&lt;/p&gt;

&lt;p&gt;The purpose of this section is not to say that developing a game quickly is better than developing one slowly, or vice versa, but rather to show the importance of scoping a game well and then sticking to the plan.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;2023-09-05—&lt;a href=&quot;https://twitter.com/gingerbeardman/status/1699108587732119834&quot;&gt;initial prototype&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2023-09-07—&lt;a href=&quot;https://twitter.com/gingerbeardman/status/1699784106505290093&quot;&gt;playable prototype&lt;/a&gt; (3 days)&lt;/li&gt;
  &lt;li&gt;2023-09-07—&lt;a href=&quot;https://twitter.com/gingerbeardman/status/1699890693366517890&quot;&gt;quick progress&lt;/a&gt; (3 days)&lt;/li&gt;
  &lt;li&gt;2023-09-09—&lt;a href=&quot;https://twitter.com/gingerbeardman/status/1700612152707461396&quot;&gt;came up with the name&lt;/a&gt; (5 days)&lt;/li&gt;
  &lt;li&gt;2023-09-14—&lt;a href=&quot;https://twitter.com/gingerbeardman/status/1702103698749505670&quot;&gt;polishing and balancing&lt;/a&gt; (10 days)&lt;/li&gt;
  &lt;li&gt;2023-09-20—&lt;a href=&quot;https://twitter.com/gingerbeardman/status/1704608465522487681&quot;&gt;revelatory physics tweak&lt;/a&gt; (16 days)&lt;/li&gt;
  &lt;li&gt;2023-09-21—&lt;a href=&quot;https://twitter.com/gingerbeardman/status/1704991183573831711&quot;&gt;addicted to my own game&lt;/a&gt; (17 days)&lt;/li&gt;
  &lt;li&gt;2023-09-21—submitted to Catalog (17 days)&lt;/li&gt;
  &lt;li&gt;2023-09-23—&lt;a href=&quot;https://twitter.com/gingerbeardman/status/1705676134245875750&quot;&gt;game over replay&lt;/a&gt; (19 days)&lt;/li&gt;
  &lt;li&gt;2023-09-26—&lt;a href=&quot;https://twitter.com/gingerbeardman/status/1706765228879253972&quot;&gt;layout design using spreadsheet&lt;/a&gt; (22 days)&lt;/li&gt;
  &lt;li&gt;2023-09-26—&lt;a href=&quot;https://twitter.com/gingerbeardman/status/1706772586510643560&quot;&gt;game over stats screen&lt;/a&gt; (22 days)&lt;/li&gt;
  &lt;li&gt;2023-09-27—final version (23 days)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…and then some waiting until:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;2023-10-10—approved for Catalog (36 days)&lt;/li&gt;
  &lt;li&gt;2023-11-19—added online scoreboards (76 days)&lt;/li&gt;
  &lt;li&gt;2023-11-21—&lt;a href=&quot;https://twitter.com/gingerbeardman/status/1727030817116053611&quot;&gt;released on Catalog&lt;/a&gt; (78 days)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…so that is 78 days (11 weeks) from initial prototype to being live on the Catalog store!&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;YOYOZO is a game by Matt Sephton, with music by Jamie Hamshere.&lt;/p&gt;

&lt;p&gt;Thanks to CANO-Lab and Testers.&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;further-reading&quot;&gt;Further reading&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/11/26/easter-egg-emoji-converting-pixels-into-particles/&quot;&gt;Easter egg emoji: converting pixels into particles&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/12/09/dynamic-music-and-sound-techniques-for-video-games/&quot;&gt;Dynamic music and sound techniques for video games&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://play.date/games/yoyozo/#gameListingMoreInfo&quot;&gt;&lt;em&gt;YOYOZO&lt;/em&gt; manual/player’s guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;elsewhere&quot;&gt;Elsewhere&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;2024-10-16—&lt;a href=&quot;https://gamerepublic.net/news/best-indie-game-made-in-the-north-of-england-2024-award/&quot;&gt;Game Republic 2024 Awards: Best Indie Game Made in the North of England&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2024-03-08—&lt;a href=&quot;https://play.date/games/community-awards-2023/&quot;&gt;Playdate Community Awards 2023: Best Arcade Game&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2023-12-27—&lt;a href=&quot;https://arstechnica.com/gaming/2023/12/ars-technicas-best-video-games-of-2023/7&quot;&gt;Ars Technica: YOYOZO wins GOTY accolade!&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2023-11-30—&lt;a href=&quot;https://arstechnica.com/gaming/2023/11/my-long-quest-to-revive-a-90s-windows-gaming-cult-classic/&quot;&gt;Ars Technica&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2023-11-24—&lt;a href=&quot;http://eepurl.com/iEHB8M&quot;&gt;Hacker Newsletter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2023-11-23—&lt;a href=&quot;https://www.timeextension.com/news/2023/11/yoyozo-is-a-new-playdate-game-inspired-by-the-japanese-cult-classic-pendulumania&quot;&gt;Time Extension&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2023-11-22—&lt;a href=&quot;https://news.ycombinator.com/item?id=38372936&quot;&gt;Hacker News&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2023-11-22—&lt;a href=&quot;https://tildes.net/~games/1cbz/yoyozo_or_how_i_made_a_playdate_game_in_39kb&quot;&gt;Tildes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 21 Nov 2023 23:59:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/11/21/yoyozo-how-i-made-a-playdate-game-in-39kb/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/11/21/yoyozo-how-i-made-a-playdate-game-in-39kb/</guid>
        </item>
      
    
      
        <item>
          <title>Early computer art by Barbara Nessim (1984)</title>
          <description>&lt;p&gt;Whilst searching for something else entirely I stumbled across these images and was struck by just how beautiful they are. The &lt;a href=&quot;https://archive.org/details/BYTE_Vol_09-10_1984-09_Computer_Graphics/mode/2up&quot;&gt;September 1984 (Vol 9, No 10) issue of BYTE magazine&lt;/a&gt; features cover artwork by &lt;a href=&quot;https://en.wikipedia.org/wiki/Barbara_Nessim&quot;&gt;Barbara Nessim&lt;/a&gt; and section pages by Liz Gutowski under direction of Barbara Nessim. Larger versions are &lt;a href=&quot;#scans&quot;&gt;at the bottom&lt;/a&gt; of this blog post.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;#scans&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/barbara-nessim-byte-1984-09-image-thumbnails.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;They were drawn during a residency at Time Life in NYC, simply because that was the easiest way Barbara could gain access to a colour computer with suitable capabilities: a Norpak IPS-2 Videotex (NAPLPS/Telidon) system. This offered 6 drawing modes (arc, rectangle, circle, line, dot and polygon) and 12 colours, of which half where shades of grey, plus black and white. And at a resolution of 256x200. That equates to a computer system roughly equivalent to an Apple II running a rudimentary graphics application, in fact you could get an add-on card for the Apple II to give it full &lt;a href=&quot;https://wiki.preterhuman.net/Norpak_Telidon_Graphics_System&quot;&gt;Norpak Telidon capabilities&lt;/a&gt;. The main benefit of the Norpak IPS-2 computer system was that it had pen/stylus input. The system comprised two monitors, one showed the artwork and the other showed the software status menu system. The software was controlled by keyboard and the points that specify the shapes were entered using the pen input.&lt;/p&gt;

&lt;p&gt;My first thought was “such cool pixel art!” but a little bit more reading shows that they are actually vector illustrations. &lt;a href=&quot;https://en.wikipedia.org/wiki/NAPLPS&quot;&gt;NAPLPS&lt;/a&gt; is an early graphics format which could &lt;a href=&quot;https://archive.org/details/telidonbook0000unse/page/116/mode/2up&quot;&gt;represent both text and vector graphics&lt;/a&gt; with all coordinates and other properties - such as size, fill pattern, density - encoded as ASCII for easy transmission. It was &lt;a href=&quot;https://www.friendsofcrc.ca/Projects/Telidon/Telidon.html&quot;&gt;designed to display information on TVs&lt;/a&gt;, and also used for display on terminals, in BBS software, and on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Prodigy_(online_service)&quot;&gt;Prodigy online service&lt;/a&gt;. Readers from around the world might be more familiar with Teletext, which is a close relative of Videotex.&lt;/p&gt;

&lt;p&gt;Doing pure illustration using a system meant for creating pages of information is exactly the type of software subversion I love to discover!&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/barbara-nessim-telidon.jpg&quot; alt=&quot;JPG&quot; title=&quot;How arcs and rectangles are defined and stored using minimal data, from &amp;lt;em&amp;gt;The Telidon Book&amp;lt;/em&amp;gt; (1981)&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.barbaranessim.com&quot;&gt;Barbara Nessim&lt;/a&gt; is a name I was already familiar with, as I’d seen her mentioned and &lt;a href=&quot;https://archive.org/details/verbum502unse/page/8/mode/1up&quot;&gt;interviewed&lt;/a&gt; in &lt;a href=&quot;/2019/07/10/verbum-journal-of-personal-computer-aesthetics/&quot;&gt;Verbum magazine&lt;/a&gt;, &lt;a href=&quot;https://archive.org/details/compute-magazine&quot;&gt;COMPUTE magazine&lt;/a&gt;, in various books about illustration, and regarding her groundbreaking interactive art exhibition/installation &lt;a href=&quot;https://digitalartarchive.siggraph.org/artwork/random-access-memories-400/&quot;&gt;Random Access Memories&lt;/a&gt; (1991/2) - which addressed world issues such as migration and population growth and allowed visitors to operate a Macintosh containing the work, selecting images and printing their own customised booklet of her work with their choice of national flag on the cover. &lt;a href=&quot;https://archive.org/details/computersinartde0000kerl/page/12/mode/1up&quot;&gt;Source 1&lt;/a&gt; &lt;a href=&quot;https://archive.org/details/cyberartsexplori0000unse/page/n207/mode/1up&quot;&gt;and 2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Whilst I had seen other early computer work by Barbara - &lt;a href=&quot;https://collections.vam.ac.uk/item/O1257731/ode-to-the-statue-of-photograph-barbara-nessim/&quot;&gt;portraits&lt;/a&gt;, &lt;a href=&quot;https://collections.vam.ac.uk/item/O1257732/reclining-nude-photograph-barbara-nessim/&quot;&gt;nudes&lt;/a&gt;, &lt;a href=&quot;https://barbaranessim.squarespace.com/1980s-computer-works/cikairn7mb0di14fz72fvzubvplcu4&quot;&gt;abstract&lt;/a&gt; (all of which are worth checking out!) - I had never seen work quite like these images from BYTE.&lt;/p&gt;

&lt;p&gt;The chunky scan-line gaps in between the rows of pixels are the result of these images being photographs of the monitor on which they were displayed. Screenshots had existed since the 1960s but in the 1980s getting such an image off a mainframe was not yet easy or universal. Instead images were saved by pointing a camera at the screen, in this case a Polaroid Palette Video Image Recorder, capturing the image on 35mm slide film, and printing them by &lt;a href=&quot;https://www.npg.org.uk/collections/explore/glossary-of-art-terms/cibachrome-print&quot;&gt;cibachrome process&lt;/a&gt;. Which is really saying something! Of course, I think the photos are much better than screenshots because of the scan-lines, the phosphor glow, the bleeding of colours, and the general analog feel to the whole thing.&lt;/p&gt;

&lt;p&gt;Barbara was one of few people to embrace computers for art in the early-1980s, when the rest of the art world considered them at best a “fad” and at worst a threat to their existence. Before and after the 1980s Barbara carved out a hugely successful career for herself, encompassing many different forms of &lt;a href=&quot;https://www.printmag.com/culturally-related-design/gloria-steinem-barbara-nessim-writers-artists-role-models/&quot;&gt;art, teaching and activism&lt;/a&gt;. She continues to &lt;a href=&quot;http://www.barbaranessim.com&quot;&gt;create and exhibit her art&lt;/a&gt;.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/barbara-nessim-portrait.webp&quot; alt=&quot;WEBP&quot; title=&quot;Barbara Nessim at the &amp;lt;em&amp;gt;School of Visual Arts&amp;lt;/em&amp;gt;, 1986. Photographed by Seiji Kakizaki. &amp;lt;a href=https://www.printmag.com/culturally-related-design/gloria-steinem-barbara-nessim-writers-artists-role-models/&amp;gt;Source&amp;lt;/a&amp;gt;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;further-reading-chronological&quot;&gt;Further reading (chronological)&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/ulc-magazine/Volume%2010-4/page/36/mode/2up&quot;&gt;U&amp;amp;lc (Upper &amp;amp; Lower Case) Magazine, Vol. 10, No. 4 (1983)&lt;/a&gt; &lt;strong&gt;Essential reading.&lt;/strong&gt; “From pencils to pixels: artist Barbara Nessim explores the new tool” by &lt;em&gt;Marion Muller&lt;/em&gt;. Published at a time when there was great unease about the arrival of computers in the world of graphics. This is a fantastic piece that goes into how the works were created, even down to which tools or shapes were used to draw particular aspects of a drawing and how they were layered, and mostly shows Barbara’s love for the arc tool! It also describes the IPS-2 computer system. and look at that page layout!&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://drive.google.com/file/d/12QcmZ0Z0srtZBkNTvh5p36En71lSUOXi/view&quot;&gt;BYTE magazine, Vol. 08, No. 07 - Videotex (July 1983)&lt;/a&gt; 49 pages on Videotex and NAPLPS graphics. Excerpted PDF provided by the &lt;a href=&quot;https://sites.google.com/view/telidonartproject/&quot;&gt;Telidon Art Project&lt;/a&gt;. Full magazine available at &lt;a href=&quot;https://archive.org/details/byte-magazine-1983-07-rescan/page/n85/mode/2up&quot;&gt;archive.org&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://store.graphis.com/products/issue-232-digital-version&quot;&gt;Graphis 232 (1984)&lt;/a&gt; “Computer Images” Barbara writes a small introduction to a selection of computer art created by other artists. Notable for her description of how a Video Image Recorder works.&lt;/li&gt;
  &lt;li&gt;Video: &lt;a href=&quot;https://www.youtube.com/watch?v=vAKWR2b6yB8&quot;&gt;Face To Face (1984)&lt;/a&gt; a video made to document her work on the last night of her residency at Time Life, featuring the images loading and displaying in real-time. Very cool!&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/innovatorsofamer0000unse_v4p1/page/122/mode/2up&quot;&gt;Innovators of American Illustration (1986)&lt;/a&gt; an interview by &lt;em&gt;Steven Heller&lt;/em&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/PC_Computing_1988_10/page/n101/mode/2up&quot;&gt;PC Computing Magazine (1988)&lt;/a&gt; “The Art of Barbara Nessim” by &lt;em&gt;Carol Olsen Day&lt;/em&gt; showing the work Barbara did on the NEC PC-100 whilst in Japan, on her Commodore Amiga, and on her Macintosh Plus, plus mention of her Polaroid Palette video image recorder.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/isbn_9781581150759/page/8/mode/2up&quot;&gt;The Education of an Illustrator (2000)&lt;/a&gt; an essay by &lt;em&gt;Barbara Nessim&lt;/em&gt; on her thinking and process as an illustrator.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/digitalcreativit0000wand/page/76/mode/2up&quot;&gt;Digital Creativity: Techniques for Digital Media and the Internet (2001)&lt;/a&gt; a short interview by &lt;em&gt;Bruce Wands&lt;/em&gt; with details about her process.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.artnet.com/usernet/awc/awc_historyview_details.asp?aid=424871289&amp;amp;awc_id=39038&amp;amp;info_type_id=7&quot;&gt;3×3: The Magazine of Contemporary Illustration, Vol. 1, No. 3 (2004)&lt;/a&gt; Interview by &lt;em&gt;Charles Hively&lt;/em&gt;, formerly of Graphis magazine. Touches on the timeless quality of Barbara’s human figures and has a succinct description of her digital work along with the challenges of showing it.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/PanelbordersBarbaraNessim&quot;&gt;Panel Borders: Barbara Nessim - a (comics) artful life (2013)&lt;/a&gt; interview by &lt;em&gt;Alex Fitch&lt;/em&gt; looking through a comic book and sequential image lens.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.commarts.com/columns/barbara-nessim&quot;&gt;Communication Arts: Barbara Nessim (2014)&lt;/a&gt; interview by &lt;em&gt;Anne Telford&lt;/em&gt; where Barbara speaks about archiving and keeping her work fresh.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bgccraftartdesign.org/items/show/29&quot;&gt;BGC Craft, Art &amp;amp; Design Oral History Project (2014)&lt;/a&gt; &lt;strong&gt;Essential reading.&lt;/strong&gt; A great, long interview by &lt;em&gt;Emily Banas&lt;/em&gt;. Barbara talks about her use of the IPS-2, Apple Macintosh, and Commodore Amiga.&lt;/li&gt;
  &lt;li&gt;Video/Presentation: &lt;a href=&quot;https://youtu.be/--BAMGqbb8c?t=1115&quot;&gt;Barbara Nessim: From There to Here (2014)&lt;/a&gt; &lt;strong&gt;Essential viewing.&lt;/strong&gt; Barbara talks about her work as a pioneer in using computer technology to make art. Featuring work done on a Japanese NEC PC-100 and Commodore Amiga. Also includes “Face to Face” and a Q&amp;amp;A afterwards with info about the IPS-2 work.&lt;/li&gt;
  &lt;li&gt;Video: &lt;a href=&quot;https://www.youtube.com/watch?v=vjMUe7hkwRs&quot;&gt;The Lost Art of Canada’s Doomed Pre-Internet Web (2015)&lt;/a&gt; &lt;em&gt;Motherboard&lt;/em&gt; video about the Telidon/NAPLPS system, including footage of some cool art created using it.&lt;/li&gt;
  &lt;li&gt;Video: &lt;a href=&quot;https://www.youtube.com/watch?v=skHHummCJY4&quot;&gt;SVA Career Development presents: Gloria Steinem and Barbara Nessim: In Conversation (2018)&lt;/a&gt; an evening of conversation featuring Gloria Steinem and Barbara Nessim as they discuss their lives as pioneering young women starting their careers in New York City.&lt;/li&gt;
  &lt;li&gt;Audio: &lt;a href=&quot;https://illustrationdept.com/podcast/barbara-nessim-talks-to-giuseppe-castellano&quot;&gt;The Illustration Department: Barbara Nessim (2021)&lt;/a&gt; talks to &lt;em&gt;Giuseppe Castellano&lt;/em&gt; about the early days of her illustrious career.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dinaburgarts.com/barbara-nessim&quot;&gt;DinaburgArts: Barbara Nessim (2021)&lt;/a&gt; profile by &lt;em&gt;Jessica Eisenthal&lt;/em&gt;.&lt;/li&gt;
  &lt;li&gt;Audio: &lt;a href=&quot;https://www.sighswhispers.com/episodes/episode-21-barbara-nessim&quot;&gt;Sighs &amp;amp; Whispers: Episode 21 (2021)&lt;/a&gt; &lt;strong&gt;Essential listening.&lt;/strong&gt; An interview by &lt;em&gt;Laura McLaws Helms&lt;/em&gt;. Includes Barbara describing how she operated the IPS-2 using a combination of keyboard commands and pen input.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/barbara-nessim-uandlc-quote.png&quot; alt=&quot;If you have anything in the world to do with graphics, you would have to be pretty thick-skinned not to have &amp;quot;feelings&amp;quot; about the computer revolution. The truth is, when you &apos;re reached a certain level of accomplishment in your chosen vocation, it&apos;s more than a little disconcerting to have your pencil and T-square plucked from your hands and your drawing table kicked out from under you. Here you are at the peak of your powers and... VAVOOM...a whole new technology has come tumbling down on your head, without as much as an &amp;quot;If you please..&amp;quot; More exasperating still, is the army of mere &amp;quot;children&amp;quot; who are in cahoots with the devilish machines, tickle their keys and speak computerese fluently—a language that is quite foreign to many of us. Small wonder that some graphics people have entrenched themselves in on anti-computer stance, which they cling to like shipwrecked victims to a life raft. And the more they see of the fantastic hijinks of the new tool——the more threatening it becomes.&quot; title=&quot;Quote from U&amp;amp;lc (Upper &amp;amp; Lower Case) Magazine, Vol. 10, No. 4 (1983)&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;scans&quot;&gt;Scans&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/BYTE_Vol_09-10_1984-09_Computer_Graphics/mode/2up&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/barbara-nessim-byte-1984-09-image-01.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/BYTE_Vol_09-10_1984-09_Computer_Graphics/page/n113/mode/2up&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/barbara-nessim-byte-1984-09-image-02.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/BYTE_Vol_09-10_1984-09_Computer_Graphics/page/n163/mode/2up&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/barbara-nessim-byte-1984-09-image-03.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/BYTE_Vol_09-10_1984-09_Computer_Graphics/page/n305/mode/2up&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/barbara-nessim-byte-1984-09-image-04.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/BYTE_Vol_09-10_1984-09_Computer_Graphics/page/n361/mode/2up&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/barbara-nessim-byte-1984-09-image-05.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 09 Nov 2023 01:25:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/11/09/early-computer-art-by-barbara-nessim/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/11/09/early-computer-art-by-barbara-nessim/</guid>
        </item>
      
    
      
        <item>
          <title>Japanese language support on Classic Macintosh</title>
          <description>&lt;p&gt;Collecting &lt;a href=&quot;/2021/10/30/macintosh-magazine-media/&quot;&gt;Japanese Macintosh Magazine Media&lt;/a&gt; was not without its challenges. After buying those discs, and &lt;a href=&quot;/2022/03/31/working-with-classic-macintosh-text-encodings-in-the-age-of-unicode/&quot;&gt;figuring out a way to index the content&lt;/a&gt;, I wanted to run some of that software! So I needed a way to work with Japanese files and display them correctly in a real Classic Macintosh environment. For the reasons outlined below I decided to use only System J7.5.3 and Mac OS 9.&lt;/p&gt;

&lt;h2 id=&quot;system-6&quot;&gt;System 6&lt;/h2&gt;

&lt;p&gt;You’d install a third party solution like &lt;a href=&quot;https://macintoshgarden.org/apps/sweetjam&quot;&gt;SweetJAM&lt;/a&gt; or &lt;a href=&quot;https://macintoshgarden.org/apps/gomtalk&quot;&gt;GomTalk&lt;/a&gt;. This method only for the truly hardcore!&lt;/p&gt;

&lt;h2 id=&quot;kanjitalk&quot;&gt;KanjiTalk&lt;/h2&gt;

&lt;p&gt;You could install KanjiTalk 7 on top of US System 7. It includes all the features of System 7, plus utilities for entering and displaying Japanese.&lt;/p&gt;

&lt;h2 id=&quot;native-japanese-system-7&quot;&gt;Native Japanese System 7&lt;/h2&gt;

&lt;p&gt;Later you could get official Japanese installers for System 7. I’ve found that it’s easiest to install &lt;a href=&quot;https://macintoshgarden.org/apps/kanjitalk753&quot;&gt;System J7.5.3&lt;/a&gt; and dual boot to it using &lt;a href=&quot;https://macintoshgarden.org/apps/system-picker&quot;&gt;System Picker&lt;/a&gt;. This allows full display of Japanese text, opening of Japanese documents and you can still type in English when you need to, by using the language input method icon in the menu bar.&lt;/p&gt;

&lt;h2 id=&quot;language-kits&quot;&gt;Language Kits&lt;/h2&gt;

&lt;p&gt;For later versions of the system you can install Language Kits provided by Apple. For System 7 and 8 the Language Kits had to be bought. For OS 9 they came for free.&lt;/p&gt;

&lt;h2 id=&quot;example-mac-os-9&quot;&gt;Example: Mac OS 9&lt;/h2&gt;

&lt;p&gt;After installation the process requires some additional steps: set your system to a specific font, and register specific apps to display in Japanese (if they don’t automatically).&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Install “Language Kits”
Result:
    &lt;ul&gt;
      &lt;li&gt;You’ll gain the language input menu&lt;/li&gt;
      &lt;li&gt;You’ll be able to see Japanese in Text control panel&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Set “Control Panels -&amp;gt; Appearance -&amp;gt; Fonts -&amp;gt; Views Font” to Osaka
Result:
    &lt;ul&gt;
      &lt;li&gt;You’ll be able to see Japanese in Finder&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Use “Language Register” to set Japanese on a per-app basis
Result:
    &lt;ul&gt;
      &lt;li&gt;You’ll be able to see Japanese in the app menus and windows&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Further details at &lt;a href=&quot;http://www.kenkyuu.net/computer-01.html&quot;&gt;Japanese-ization of OS (Mac OS 9 edition)&lt;/a&gt;.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 07 Nov 2023 12:50:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/11/07/japanese-lanuage-support-on-classic-macintosh/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/11/07/japanese-lanuage-support-on-classic-macintosh/</guid>
        </item>
      
    
      
        <item>
          <title>List of vintage Japanese pixel/dot art software</title>
          <description>&lt;p&gt;For a while now I’ve been collecting references to old Japanese pixel/dot art software. My main sources of information are the treasure trove of scanned magazines on Internet Archive, Twitter archives, YouTube videos, Yahoo! Japan Auctions listings, and Google search. I’ve been keeping this list for a while, and the release of &lt;a href=&quot;https://myanimelist.net/anime/54041/16bit_Sensation__Another_Layer&quot;&gt;&lt;em&gt;16bit Sensation: Another Layer&lt;/em&gt;&lt;/a&gt; and its inclusion of &lt;a href=&quot;https://www.youtube.com/watch?v=nIdFor2WOnw&quot;&gt;&lt;em&gt;Multi Paint System&lt;/em&gt;&lt;/a&gt; made me realise I should make the list public.&lt;/p&gt;

&lt;p&gt;A long term goal would be to find files for each of these so they can be actively used and documented more fully. But that might never happen if it’s left to just me…so feel free to get involved!&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/login-march-1985/LOGiN%20-%20March%201985/page/n75/mode/2up&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/list-of-vintage-japanese-pixel-dot-art-software.jpg&quot; alt=&quot;Funny (pixel art software) &amp;amp; CANDY (technical drawing software)&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;selected-columns-from-the-big-list&quot;&gt;Selected columns from the big list&lt;/h2&gt;

&lt;p&gt;The table below is a snapshot of &lt;a href=&quot;https://docs.google.com/spreadsheets/d/17RhWfM2wXW4A-MkQdC6W-w00zHM2tbLfpzuSTD8woMs/edit#gid=0&quot;&gt;selected columns of a Google Sheet&lt;/a&gt; that I’m updating over time. The full spreadsheet contains links to downloads, videos, web pages, magazine mentions, and many other references. So be sure to check, bookmark or subscribe to that link for the very latest information. Since January 2024 I’ve been adding some non-Japanese software that was “big in Japan”.&lt;/p&gt;

&lt;p&gt;Regarding the empty cells: software missing a Japanese name was mostly referred to only by an English title. The rest of the missing information is TBC.&lt;/p&gt;

&lt;p&gt;ドット絵（ドットえ）作成に使えるビンテージ日本語ソフトの一覧です。&lt;/p&gt;

&lt;p&gt;Total entries: 266&lt;/p&gt;

&lt;div class=&quot;table-wrapper&quot;&gt;
  &lt;table&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th&gt;Platform&lt;/th&gt;
        &lt;th&gt;English&lt;/th&gt;
        &lt;th&gt;Japanese&lt;/th&gt;
        &lt;th&gt;Year&lt;/th&gt;
        &lt;th&gt;Developer&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;FM-7, X1&lt;/td&gt;
        &lt;td&gt;Art Creator&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1984&lt;/td&gt;
        &lt;td&gt;MDBA&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;FM-7/8&lt;/td&gt;
        &lt;td&gt;Graphic Editor&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1983&lt;/td&gt;
        &lt;td&gt;Hiroshi Ichikawa&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;FM-7/8&lt;/td&gt;
        &lt;td&gt;Super Graphic Editor&lt;/td&gt;
        &lt;td&gt;スーパーグラフィック エディター&lt;/td&gt;
        &lt;td&gt;1983&lt;/td&gt;
        &lt;td&gt;T&amp;amp;E SOFT&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;FM-77&lt;/td&gt;
        &lt;td&gt;FM Graphic Editor&lt;/td&gt;
        &lt;td&gt;FMグラフィックエディタⅡ V1.0&lt;/td&gt;
        &lt;td&gt;1986&lt;/td&gt;
        &lt;td&gt;Fujitsu&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;FM-R50/60&lt;/td&gt;
        &lt;td&gt;Z’s STAFF Kid FP&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1988&lt;/td&gt;
        &lt;td&gt;Zeit&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;FM-R60/70&lt;/td&gt;
        &lt;td&gt;Z’s STAFF Kid FP&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1990&lt;/td&gt;
        &lt;td&gt;Zeit&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;FM-Towns&lt;/td&gt;
        &lt;td&gt;ARTemis&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1993&lt;/td&gt;
        &lt;td&gt;Ryosuke Matsuuchi&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;FM-Towns&lt;/td&gt;
        &lt;td&gt;DRAW BOARD2&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1993&lt;/td&gt;
        &lt;td&gt;Souji Yamakawa&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;FM-Towns&lt;/td&gt;
        &lt;td&gt;G-Pen32K&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1995&lt;/td&gt;
        &lt;td&gt;rice&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;FM-Towns&lt;/td&gt;
        &lt;td&gt;many COLORS&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1993&lt;/td&gt;
        &lt;td&gt;Amorphous&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;FM-Towns&lt;/td&gt;
        &lt;td&gt;many COLORS II&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1995&lt;/td&gt;
        &lt;td&gt;Amorphous&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;FM-Towns&lt;/td&gt;
        &lt;td&gt;Meta Paint 2&lt;/td&gt;
        &lt;td&gt;メタペイント2&lt;/td&gt;
        &lt;td&gt;1992&lt;/td&gt;
        &lt;td&gt;Oizumi Shigeru&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;FM-Towns&lt;/td&gt;
        &lt;td&gt;New Transfer&lt;/td&gt;
        &lt;td&gt;ニュートランスファー&lt;/td&gt;
        &lt;td&gt;1992&lt;/td&gt;
        &lt;td&gt;Hiroshi Toda&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;FM-Towns&lt;/td&gt;
        &lt;td&gt;Oops, anime-kun&lt;/td&gt;
        &lt;td&gt;おっとアニメ君&lt;/td&gt;
        &lt;td&gt;1989&lt;/td&gt;
        &lt;td&gt;Nihon Mi-Com Hanbai&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;FM-Towns&lt;/td&gt;
        &lt;td&gt;Otome / Towns Paint System&lt;/td&gt;
        &lt;td&gt;乙女座&lt;/td&gt;
        &lt;td&gt;1993&lt;/td&gt;
        &lt;td&gt;Yabara&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;FM-Towns&lt;/td&gt;
        &lt;td&gt;Power Paint&lt;/td&gt;
        &lt;td&gt;パワーペインター&lt;/td&gt;
        &lt;td&gt;1991&lt;/td&gt;
        &lt;td&gt;Wave Train&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;FM-Towns&lt;/td&gt;
        &lt;td&gt;Towns PAINT&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1989&lt;/td&gt;
        &lt;td&gt;Fujitsu&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;FM-Towns&lt;/td&gt;
        &lt;td&gt;TownsFullcolor&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1993&lt;/td&gt;
        &lt;td&gt;Fujitsu&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;FM-Towns&lt;/td&gt;
        &lt;td&gt;Z’s STAFF PRO-TOWNS&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1991&lt;/td&gt;
        &lt;td&gt;Zeit&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Mac OS X&lt;/td&gt;
        &lt;td&gt;DotEditerSE&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2016&lt;/td&gt;
        &lt;td&gt;tokyoconsaruai&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Mac OS X&lt;/td&gt;
        &lt;td&gt;DotShot X&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2007&lt;/td&gt;
        &lt;td&gt;Studio Shin&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Mac OS X&lt;/td&gt;
        &lt;td&gt;FireAlpaca&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2011&lt;/td&gt;
        &lt;td&gt;FireAlpaca&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Mac OS X&lt;/td&gt;
        &lt;td&gt;PikoPixel&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2013&lt;/td&gt;
        &lt;td&gt;Twilight Edge Software&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Mac OS X&lt;/td&gt;
        &lt;td&gt;PoCo&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2005&lt;/td&gt;
        &lt;td&gt;KAENRYUU Koutoku&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Macintosh&lt;/td&gt;
        &lt;td&gt;BluePaint&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2001&lt;/td&gt;
        &lt;td&gt;Shungo Onozuka&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Macintosh&lt;/td&gt;
        &lt;td&gt;DotShot&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1998&lt;/td&gt;
        &lt;td&gt;Studio Shin&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Macintosh&lt;/td&gt;
        &lt;td&gt;Leo paint&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1997&lt;/td&gt;
        &lt;td&gt;Reona Takahashi&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Macintosh&lt;/td&gt;
        &lt;td&gt;SketchBook 68K&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2000&lt;/td&gt;
        &lt;td&gt;Shibutaro Kimura&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Macintosh&lt;/td&gt;
        &lt;td&gt;Solid Paint&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1996&lt;/td&gt;
        &lt;td&gt;Masatoshi Utashiro&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Macintosh&lt;/td&gt;
        &lt;td&gt;WishDraw&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1998&lt;/td&gt;
        &lt;td&gt;Motoo Tanaka&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MPC-X&lt;/td&gt;
        &lt;td&gt;MPC-X Lightpen Graphics&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1984&lt;/td&gt;
        &lt;td&gt;Sanyo&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;ACE-tools DRAW-SET&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1997&lt;/td&gt;
        &lt;td&gt;Akio Hiramatsu&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Animation editor EDDY&lt;/td&gt;
        &lt;td&gt;アニメエディタＥＤＤＹ&lt;/td&gt;
        &lt;td&gt;1984&lt;/td&gt;
        &lt;td&gt;HAL Laboratory&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;ANIMECHA Ver. 2.00&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1995&lt;/td&gt;
        &lt;td&gt;MAR’Z PROJECT&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Art Paper&lt;/td&gt;
        &lt;td&gt;アートペーパー&lt;/td&gt;
        &lt;td&gt;1986&lt;/td&gt;
        &lt;td&gt;Mitsubishi&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;CHEESE&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1984&lt;/td&gt;
        &lt;td&gt;NEOS&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;CHEESE 2&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1985&lt;/td&gt;
        &lt;td&gt;NEOS&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Computer Painting&lt;/td&gt;
        &lt;td&gt;描きくけコン&lt;/td&gt;
        &lt;td&gt;1985&lt;/td&gt;
        &lt;td&gt;Casio&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Creative Tool&lt;/td&gt;
        &lt;td&gt;クリエイティブツール&lt;/td&gt;
        &lt;td&gt;1989&lt;/td&gt;
        &lt;td&gt;HAL Laboratory&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Da Vinci&lt;/td&gt;
        &lt;td&gt;ダ・ビンチ&lt;/td&gt;
        &lt;td&gt;1988&lt;/td&gt;
        &lt;td&gt;Shinkikakusha Corp&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Dot Designers Club&lt;/td&gt;
        &lt;td&gt;ＤＤ倶楽部&lt;/td&gt;
        &lt;td&gt;1989&lt;/td&gt;
        &lt;td&gt;T&amp;amp;E SOFT&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Dream Block&lt;/td&gt;
        &lt;td&gt;ドリームブロック&lt;/td&gt;
        &lt;td&gt;1989&lt;/td&gt;
        &lt;td&gt;Nikkoh Thinking&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;EDDY II&lt;/td&gt;
        &lt;td&gt;エティー2&lt;/td&gt;
        &lt;td&gt;1984&lt;/td&gt;
        &lt;td&gt;HAL Laboratory&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Gaban&lt;/td&gt;
        &lt;td&gt;がばん&lt;/td&gt;
        &lt;td&gt;1988&lt;/td&gt;
        &lt;td&gt;Micronet&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Garakuta&lt;/td&gt;
        &lt;td&gt;画楽多&lt;/td&gt;
        &lt;td&gt;1988&lt;/td&gt;
        &lt;td&gt;Southern Create&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Graph Saurus 1&lt;/td&gt;
        &lt;td&gt;グラフサウルス&lt;/td&gt;
        &lt;td&gt;1989&lt;/td&gt;
        &lt;td&gt;Bit²&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Graph Saurus 2&lt;/td&gt;
        &lt;td&gt;グラフサウルスVer2.0&lt;/td&gt;
        &lt;td&gt;1991&lt;/td&gt;
        &lt;td&gt;Bit²&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Graph Saurus 2.1&lt;/td&gt;
        &lt;td&gt;グラフサウルスVer2.1&lt;/td&gt;
        &lt;td&gt;1993&lt;/td&gt;
        &lt;td&gt;Bit²&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Graphic Artist&lt;/td&gt;
        &lt;td&gt;グラフィックアーティスト&lt;/td&gt;
        &lt;td&gt;1985&lt;/td&gt;
        &lt;td&gt;YAMAHA&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Graphic Editor&lt;/td&gt;
        &lt;td&gt;グラフィックエディター&lt;/td&gt;
        &lt;td&gt;1984&lt;/td&gt;
        &lt;td&gt;HAL Laboratory&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Graphic Editor ANGLE&lt;/td&gt;
        &lt;td&gt;グラフィック エディタ アングル&lt;/td&gt;
        &lt;td&gt;1985&lt;/td&gt;
        &lt;td&gt;Hiroshi Ichikawa&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Graphic Editor XV&lt;/td&gt;
        &lt;td&gt;グラフィックエディター&lt;/td&gt;
        &lt;td&gt;1988&lt;/td&gt;
        &lt;td&gt;HAL Laboratory?&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Graphic Master Lab&lt;/td&gt;
        &lt;td&gt;グラフィックマスターラボ&lt;/td&gt;
        &lt;td&gt;1985&lt;/td&gt;
        &lt;td&gt;HAL Laboratory&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Graphic Studio Pro&lt;/td&gt;
        &lt;td&gt;カラー・グラフィック・エディター&lt;/td&gt;
        &lt;td&gt;1985&lt;/td&gt;
        &lt;td&gt;HAL Laboratory&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Graphic Tool for screen 12&lt;/td&gt;
        &lt;td&gt;専用簡易グラフィックツール&lt;/td&gt;
        &lt;td&gt;1993&lt;/td&gt;
        &lt;td&gt;KNKKY&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Illustration Word Processor&lt;/td&gt;
        &lt;td&gt;絵はがき用ワープロ&lt;/td&gt;
        &lt;td&gt;1985&lt;/td&gt;
        &lt;td&gt;Hitachi&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Joy Graph&lt;/td&gt;
        &lt;td&gt;ジョイグラフ&lt;/td&gt;
        &lt;td&gt;1983&lt;/td&gt;
        &lt;td&gt;Victor&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Kakikuke kon&lt;/td&gt;
        &lt;td&gt;かきくけこん&lt;/td&gt;
        &lt;td&gt;1985&lt;/td&gt;
        &lt;td&gt;Casio&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Leonard&lt;/td&gt;
        &lt;td&gt;レオナルド&lt;/td&gt;
        &lt;td&gt;1987&lt;/td&gt;
        &lt;td&gt;Omega System&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Leonard Plus Kanji&lt;/td&gt;
        &lt;td&gt;レオナルドプラス漢字&lt;/td&gt;
        &lt;td&gt;1987&lt;/td&gt;
        &lt;td&gt;Omega System&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Lightpen Graphics&lt;/td&gt;
        &lt;td&gt;ライトペングラフィックス&lt;/td&gt;
        &lt;td&gt;1984&lt;/td&gt;
        &lt;td&gt;HAL Laboratory&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;MOKO&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1986&lt;/td&gt;
        &lt;td&gt;Toshio Tabeta&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;MOKO II Improved Version&lt;/td&gt;
        &lt;td&gt;改良版 MOKO II&lt;/td&gt;
        &lt;td&gt;1987&lt;/td&gt;
        &lt;td&gt;Maeda Mameo&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;MSX’s TOOLS&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1995&lt;/td&gt;
        &lt;td&gt;Hitori Circle&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;The Painter&lt;/td&gt;
        &lt;td&gt;ザ・ペインター&lt;/td&gt;
        &lt;td&gt;1986&lt;/td&gt;
        &lt;td&gt;YAMAHA&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Tiny Joygraph&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1985&lt;/td&gt;
        &lt;td&gt;Victor&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Pattern Editor Robin&lt;/td&gt;
        &lt;td&gt;パターンエディターRobin&lt;/td&gt;
        &lt;td&gt;1985&lt;/td&gt;
        &lt;td&gt;Hirohumi Ino&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Pixel 2&lt;/td&gt;
        &lt;td&gt;ピクセル２&lt;/td&gt;
        &lt;td&gt;1985&lt;/td&gt;
        &lt;td&gt;T&amp;amp;E SOFT&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Pixel 3&lt;/td&gt;
        &lt;td&gt;ピクセル３&lt;/td&gt;
        &lt;td&gt;1988&lt;/td&gt;
        &lt;td&gt;T&amp;amp;E SOFT&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;(Graphic Editor) Sha Ga Raku&lt;/td&gt;
        &lt;td&gt;写・画・楽&lt;/td&gt;
        &lt;td&gt;1988&lt;/td&gt;
        &lt;td&gt;Victor&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;UniPaint&lt;/td&gt;
        &lt;td&gt;ユニペイント&lt;/td&gt;
        &lt;td&gt;1986&lt;/td&gt;
        &lt;td&gt;Matsushita&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX&lt;/td&gt;
        &lt;td&gt;Video Graphics&lt;/td&gt;
        &lt;td&gt;ビデオグラフィックス&lt;/td&gt;
        &lt;td&gt;1986&lt;/td&gt;
        &lt;td&gt;Matsushita&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MSX, WAVY&lt;/td&gt;
        &lt;td&gt;Light Pen Graphics&lt;/td&gt;
        &lt;td&gt;ライトペングラフィックス&lt;/td&gt;
        &lt;td&gt;1984&lt;/td&gt;
        &lt;td&gt;Sanyo&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MZ-2500&lt;/td&gt;
        &lt;td&gt;G-EDIT2500&lt;/td&gt;
        &lt;td&gt;グラフィックエディタ2500&lt;/td&gt;
        &lt;td&gt;1987&lt;/td&gt;
        &lt;td&gt;Data West&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MZ-2500&lt;/td&gt;
        &lt;td&gt;ILLUST BOX&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1987&lt;/td&gt;
        &lt;td&gt;Rhodes&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MZ-2500&lt;/td&gt;
        &lt;td&gt;Palette&lt;/td&gt;
        &lt;td&gt;ぱれっと&lt;/td&gt;
        &lt;td&gt;1987&lt;/td&gt;
        &lt;td&gt;Dynaware&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MZ-2500&lt;/td&gt;
        &lt;td&gt;Quick MZ Paint&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1987&lt;/td&gt;
        &lt;td&gt;Minoru Morinaka&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MZ-2500&lt;/td&gt;
        &lt;td&gt;Super Paint&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1987&lt;/td&gt;
        &lt;td&gt;S.B.C Software&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Newton&lt;/td&gt;
        &lt;td&gt;HexPaint&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1997&lt;/td&gt;
        &lt;td&gt;HexDump&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Newton&lt;/td&gt;
        &lt;td&gt;NewtPaint&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1995&lt;/td&gt;
        &lt;td&gt;Glen Raphael&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;OS/2&lt;/td&gt;
        &lt;td&gt;QueenCy&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2000&lt;/td&gt;
        &lt;td&gt;masami&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Palm&lt;/td&gt;
        &lt;td&gt;CLIE Paint&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2001&lt;/td&gt;
        &lt;td&gt;Sony&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Palm&lt;/td&gt;
        &lt;td&gt;MoePaint&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2004&lt;/td&gt;
        &lt;td&gt;Toshiyuki Hayashi&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Palm&lt;/td&gt;
        &lt;td&gt;PenPenCol&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2001&lt;/td&gt;
        &lt;td&gt;Shigeyuki Seko&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Palm&lt;/td&gt;
        &lt;td&gt;PenPenW&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2005&lt;/td&gt;
        &lt;td&gt;Shigeyuki Seko&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Palm&lt;/td&gt;
        &lt;td&gt;PixMarker&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2001&lt;/td&gt;
        &lt;td&gt;wernyv&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Palm&lt;/td&gt;
        &lt;td&gt;Sphere the PAINTER&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2001&lt;/td&gt;
        &lt;td&gt;Katsunori Sakuragi&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Palm&lt;/td&gt;
        &lt;td&gt;yapp&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2000&lt;/td&gt;
        &lt;td&gt;Ines&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-100&lt;/td&gt;
        &lt;td&gt;Airbrush&lt;/td&gt;
        &lt;td&gt;エアーブラシ&lt;/td&gt;
        &lt;td&gt;1984&lt;/td&gt;
        &lt;td&gt;ASCII&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-6001&lt;/td&gt;
        &lt;td&gt;Picture Editor&lt;/td&gt;
        &lt;td&gt;ピクチャーエディタ&lt;/td&gt;
        &lt;td&gt;1983&lt;/td&gt;
        &lt;td&gt;ASCII&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-88&lt;/td&gt;
        &lt;td&gt;Adventure Maker mk2&lt;/td&gt;
        &lt;td&gt;アドベンチャーツクールmkII&lt;/td&gt;
        &lt;td&gt;1987&lt;/td&gt;
        &lt;td&gt;T.Ueno&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-88&lt;/td&gt;
        &lt;td&gt;ART MASTER 88&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1985&lt;/td&gt;
        &lt;td&gt;SystemSoft&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-88&lt;/td&gt;
        &lt;td&gt;da Vinci ~Super Graphic Tool~&lt;/td&gt;
        &lt;td&gt;ダヴィンチ&lt;/td&gt;
        &lt;td&gt;1985&lt;/td&gt;
        &lt;td&gt;POPCOM&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-88&lt;/td&gt;
        &lt;td&gt;Emi&lt;/td&gt;
        &lt;td&gt;絵美&lt;/td&gt;
        &lt;td&gt;1990&lt;/td&gt;
        &lt;td&gt;MIINA&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-88&lt;/td&gt;
        &lt;td&gt;HR-PAINT3&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1990&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-88&lt;/td&gt;
        &lt;td&gt;Ink Pot M&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1987&lt;/td&gt;
        &lt;td&gt;H.Komatsu&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-88&lt;/td&gt;
        &lt;td&gt;LALF ~Hyper Graphic Tool~&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1989&lt;/td&gt;
        &lt;td&gt;Technopolis&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-88&lt;/td&gt;
        &lt;td&gt;LUNA&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1991&lt;/td&gt;
        &lt;td&gt;MEW&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-88&lt;/td&gt;
        &lt;td&gt;Magic Paint 88 v2.0&lt;/td&gt;
        &lt;td&gt;マジックペイント88&lt;/td&gt;
        &lt;td&gt;1988&lt;/td&gt;
        &lt;td&gt;Atsushi Oshima&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-88&lt;/td&gt;
        &lt;td&gt;Magic Paint 88 v3.0&lt;/td&gt;
        &lt;td&gt;マジックペイント88&lt;/td&gt;
        &lt;td&gt;1988&lt;/td&gt;
        &lt;td&gt;Atsushi Oshima&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-88&lt;/td&gt;
        &lt;td&gt;Magic Paint 98&lt;/td&gt;
        &lt;td&gt;マジックペイント98&lt;/td&gt;
        &lt;td&gt;1990&lt;/td&gt;
        &lt;td&gt;Atsushi Oshima&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-88&lt;/td&gt;
        &lt;td&gt;Magic Paint VA&lt;/td&gt;
        &lt;td&gt;マジックペイントVA&lt;/td&gt;
        &lt;td&gt;1988&lt;/td&gt;
        &lt;td&gt;Atsushi Oshima&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-88&lt;/td&gt;
        &lt;td&gt;nedi3.bin&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1987&lt;/td&gt;
        &lt;td&gt;TA(O)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-88&lt;/td&gt;
        &lt;td&gt;Super Artist 256&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1989&lt;/td&gt;
        &lt;td&gt;Seed Software&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-88&lt;/td&gt;
        &lt;td&gt;Yukara art&lt;/td&gt;
        &lt;td&gt;ユーカラart&lt;/td&gt;
        &lt;td&gt;1987&lt;/td&gt;
        &lt;td&gt;Tokai Create&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-88&lt;/td&gt;
        &lt;td&gt;Z’s STAFF Kid VA&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1987&lt;/td&gt;
        &lt;td&gt;Zeit&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-88&lt;/td&gt;
        &lt;td&gt;Z’s STAFF Kid88&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1987&lt;/td&gt;
        &lt;td&gt;Zeit&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-88, X1&lt;/td&gt;
        &lt;td&gt;Ink Pot&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1985&lt;/td&gt;
        &lt;td&gt;H.Komatsu&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;256 Color Drawing Tool&lt;/td&gt;
        &lt;td&gt;256色お 絵描きツール&lt;/td&gt;
        &lt;td&gt;1994&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;6 Coloured Pencils&lt;/td&gt;
        &lt;td&gt;6色鉛筆&lt;/td&gt;
        &lt;td&gt;1993&lt;/td&gt;
        &lt;td&gt;tsutosan&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;Actor98&lt;/td&gt;
        &lt;td&gt;アクター98&lt;/td&gt;
        &lt;td&gt;1990&lt;/td&gt;
        &lt;td&gt;Soft Studio Panther&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;Adventure Maker 98&lt;/td&gt;
        &lt;td&gt;アドベンチャー ツクール98&lt;/td&gt;
        &lt;td&gt;1992&lt;/td&gt;
        &lt;td&gt;ASCII/LOGiN&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;Akane&lt;/td&gt;
        &lt;td&gt;あかね&lt;/td&gt;
        &lt;td&gt;1992&lt;/td&gt;
        &lt;td&gt;Miruhi Takahara&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;Art Frontier&lt;/td&gt;
        &lt;td&gt;アートフロンティア&lt;/td&gt;
        &lt;td&gt;1991&lt;/td&gt;
        &lt;td&gt;Bijutech&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;ArtCore (Art/V?)&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1992&lt;/td&gt;
        &lt;td&gt;SystemSoft&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;Assist Art&lt;/td&gt;
        &lt;td&gt;アシストアート&lt;/td&gt;
        &lt;td&gt;1991&lt;/td&gt;
        &lt;td&gt;Assist Co., Ltd.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;Ayako&lt;/td&gt;
        &lt;td&gt;彩子&lt;/td&gt;
        &lt;td&gt;1988&lt;/td&gt;
        &lt;td&gt;Art Function&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;CANDY&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1984&lt;/td&gt;
        &lt;td&gt;ASCII&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;CANDY2&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1985&lt;/td&gt;
        &lt;td&gt;ASCII&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;Character Maker 98&lt;/td&gt;
        &lt;td&gt;キャラクターツクール98&lt;/td&gt;
        &lt;td&gt;1994&lt;/td&gt;
        &lt;td&gt;Pegasus Japan&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;Doodle Book / Rakugaki-chō&lt;/td&gt;
        &lt;td&gt;落書き帳&lt;/td&gt;
        &lt;td&gt;1993&lt;/td&gt;
        &lt;td&gt;Toshiya Hayashi&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;DynaPix V&lt;/td&gt;
        &lt;td&gt;ダイナビックスV&lt;/td&gt;
        &lt;td&gt;1988&lt;/td&gt;
        &lt;td&gt;Dynaware&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;ESQUISSE&lt;/td&gt;
        &lt;td&gt;電子水彩エスキース&lt;/td&gt;
        &lt;td&gt;1989&lt;/td&gt;
        &lt;td&gt;SAPIENCE&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;Funny&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1984&lt;/td&gt;
        &lt;td&gt;Zeit&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;Garakuta98&lt;/td&gt;
        &lt;td&gt;画楽多98&lt;/td&gt;
        &lt;td&gt;1990&lt;/td&gt;
        &lt;td&gt;Southern Create&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;GIOTTO&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1986&lt;/td&gt;
        &lt;td&gt;Art Function&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;GRAPHIC HENSHIN&lt;/td&gt;
        &lt;td&gt;ぐらひっく へんしん&lt;/td&gt;
        &lt;td&gt;1998&lt;/td&gt;
        &lt;td&gt;Taro Namae&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;GREEN&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1993&lt;/td&gt;
        &lt;td&gt;Yoshito Takemura&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;GREM&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1993&lt;/td&gt;
        &lt;td&gt;Yoshito Takemura&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;Hyper Ayako&lt;/td&gt;
        &lt;td&gt;HYPER 彩子&lt;/td&gt;
        &lt;td&gt;1989&lt;/td&gt;
        &lt;td&gt;Art Function / Digital Arts&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;JEDAI&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1994&lt;/td&gt;
        &lt;td&gt;D.O. CORP&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;Kureyon-chan&lt;/td&gt;
        &lt;td&gt;くれよん ちゃん&lt;/td&gt;
        &lt;td&gt;1994&lt;/td&gt;
        &lt;td&gt;Fusao Saito&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;Maguro/Tuna Paint System&lt;/td&gt;
        &lt;td&gt;鮪ペイントシステム&lt;/td&gt;
        &lt;td&gt;1991&lt;/td&gt;
        &lt;td&gt;Woody_RINN&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;Mapping Paint&lt;/td&gt;
        &lt;td&gt;写像ペイント&lt;/td&gt;
        &lt;td&gt;1990&lt;/td&gt;
        &lt;td&gt;CAST&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;Marupa&lt;/td&gt;
        &lt;td&gt;まるぱ&lt;/td&gt;
        &lt;td&gt;1993&lt;/td&gt;
        &lt;td&gt;Ichikawa Soft Labratory&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;MEDI-98 / nedi3&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1990&lt;/td&gt;
        &lt;td&gt;NOZUMU&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;Monopen&lt;/td&gt;
        &lt;td&gt;ものぺん&lt;/td&gt;
        &lt;td&gt;1995&lt;/td&gt;
        &lt;td&gt;OEAO&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;Multi Paint System / MPS&lt;/td&gt;
        &lt;td&gt;マルチペイントシステム&lt;/td&gt;
        &lt;td&gt;1992&lt;/td&gt;
        &lt;td&gt;C-Lab&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;Paint System Tool / PST&lt;/td&gt;
        &lt;td&gt;似非キース&lt;/td&gt;
        &lt;td&gt;1990&lt;/td&gt;
        &lt;td&gt;hironon&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;Penta-kun&lt;/td&gt;
        &lt;td&gt;ぺん太くん&lt;/td&gt;
        &lt;td&gt;1994&lt;/td&gt;
        &lt;td&gt;NEG&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;SANDY&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1994&lt;/td&gt;
        &lt;td&gt;Wataru Ishihara&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;Small CANDY&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1984&lt;/td&gt;
        &lt;td&gt;ASCII&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;Super Tableau&lt;/td&gt;
        &lt;td&gt;スーパータブロー&lt;/td&gt;
        &lt;td&gt;1987&lt;/td&gt;
        &lt;td&gt;SAPIENCE&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;Tableau&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1987&lt;/td&gt;
        &lt;td&gt;SAPIENCE&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;TrueLine&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1996&lt;/td&gt;
        &lt;td&gt;OEAO&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;Z’s STAFF&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1985&lt;/td&gt;
        &lt;td&gt;Zeit&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;Z’s STAFF Kid&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1986&lt;/td&gt;
        &lt;td&gt;Zeit&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;Z’s STAFF Kid98&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1988&lt;/td&gt;
        &lt;td&gt;Zeit&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PC-98&lt;/td&gt;
        &lt;td&gt;Z’s STAFF Kid98 v3.0&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1990&lt;/td&gt;
        &lt;td&gt;Zeit&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PS-55&lt;/td&gt;
        &lt;td&gt;Z’s STAFF TRAD&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1989&lt;/td&gt;
        &lt;td&gt;Zeit&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;SMC&lt;/td&gt;
        &lt;td&gt;Graphic Editor&lt;/td&gt;
        &lt;td&gt;グラフィックエディター&lt;/td&gt;
        &lt;td&gt;1984&lt;/td&gt;
        &lt;td&gt;Sony&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;TRON-OS&lt;/td&gt;
        &lt;td&gt;Pelistina&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2005&lt;/td&gt;
        &lt;td&gt;KAENRYUU Koutoku&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;TRON-OS&lt;/td&gt;
        &lt;td&gt;Pelistina 2&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2005&lt;/td&gt;
        &lt;td&gt;KAENRYUU Koutoku&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;TRON-OS&lt;/td&gt;
        &lt;td&gt;Sketchbook&lt;/td&gt;
        &lt;td&gt;楽描き帳&lt;/td&gt;
        &lt;td&gt;2011&lt;/td&gt;
        &lt;td&gt;Satoshi Sera&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;TRON-OS&lt;/td&gt;
        &lt;td&gt;Xbrush for Chokanji&lt;/td&gt;
        &lt;td&gt;Xbrush for 超漢字&lt;/td&gt;
        &lt;td&gt;2013&lt;/td&gt;
        &lt;td&gt;Akira Tasaki&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 2K&lt;/td&gt;
        &lt;td&gt;4thPaint&lt;/td&gt;
        &lt;td&gt;よつばペイント&lt;/td&gt;
        &lt;td&gt;2007&lt;/td&gt;
        &lt;td&gt;4th Paint Project&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 2K&lt;/td&gt;
        &lt;td&gt;Let’s Draw F&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2007&lt;/td&gt;
        &lt;td&gt;Oscar Creation&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 3.1&lt;/td&gt;
        &lt;td&gt;Daisy Art&lt;/td&gt;
        &lt;td&gt;デイジーアート&lt;/td&gt;
        &lt;td&gt;1995&lt;/td&gt;
        &lt;td&gt;Ichikawa Soft Labratory&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 3.1&lt;/td&gt;
        &lt;td&gt;Draw Unit&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1994&lt;/td&gt;
        &lt;td&gt;Type-甲&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 3.1&lt;/td&gt;
        &lt;td&gt;GOINDRW&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1996&lt;/td&gt;
        &lt;td&gt;Yasuhiro Nakata&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 3.1&lt;/td&gt;
        &lt;td&gt;ImgFinish&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1996&lt;/td&gt;
        &lt;td&gt;Syouichi Hattori&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 3.1&lt;/td&gt;
        &lt;td&gt;Pattern Editor PE&lt;/td&gt;
        &lt;td&gt;パターンエディタ PE&lt;/td&gt;
        &lt;td&gt;1995&lt;/td&gt;
        &lt;td&gt;Windows 3.1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 3.1&lt;/td&gt;
        &lt;td&gt;Sailing Draw++&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1993&lt;/td&gt;
        &lt;td&gt;Jun Satomi&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 3.1&lt;/td&gt;
        &lt;td&gt;SUPER KiD&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1994&lt;/td&gt;
        &lt;td&gt;Zeit&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 3.1&lt;/td&gt;
        &lt;td&gt;SUPER KiD v2.0&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1995&lt;/td&gt;
        &lt;td&gt;Zeit&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 3.1&lt;/td&gt;
        &lt;td&gt;Tsuruniha○○mushi&lt;/td&gt;
        &lt;td&gt;つるニハ○○ムシ&lt;/td&gt;
        &lt;td&gt;1999&lt;/td&gt;
        &lt;td&gt;Mr Dad&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 7&lt;/td&gt;
        &lt;td&gt;EDGE2&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2006&lt;/td&gt;
        &lt;td&gt;TAKABO SOFT&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;1bitPaper&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2004&lt;/td&gt;
        &lt;td&gt;shiden&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;ArtistX&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2001&lt;/td&gt;
        &lt;td&gt;ARINOKI&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;ArtistX Labolt&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2005&lt;/td&gt;
        &lt;td&gt;ARINOKI&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;AZPainter&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2006&lt;/td&gt;
        &lt;td&gt;Azel&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;AZPainter2&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2009&lt;/td&gt;
        &lt;td&gt;Azel&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;D-Pixed&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2000&lt;/td&gt;
        &lt;td&gt;Jun Doi&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;DoggyPaint&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2000&lt;/td&gt;
        &lt;td&gt;HKR.Jon&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;Dot Art Kakiko&lt;/td&gt;
        &lt;td&gt;ドット絵カキコ&lt;/td&gt;
        &lt;td&gt;2000&lt;/td&gt;
        &lt;td&gt;YUUKI&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;Dot Art Vacation&lt;/td&gt;
        &lt;td&gt;ドット絵バケーション&lt;/td&gt;
        &lt;td&gt;2002&lt;/td&gt;
        &lt;td&gt;Arue&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;Dot Editor Ver 4.0&lt;/td&gt;
        &lt;td&gt;ドットエディタVer4.0&lt;/td&gt;
        &lt;td&gt;2000&lt;/td&gt;
        &lt;td&gt;PSIKYO&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;Dot Pictureditor&lt;/td&gt;
        &lt;td&gt;ドット絵でぃた&lt;/td&gt;
        &lt;td&gt;2000&lt;/td&gt;
        &lt;td&gt;shishido&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;DotPainterALFAR&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2003&lt;/td&gt;
        &lt;td&gt;Herohero&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;Easy Paint Tool SAI&lt;/td&gt;
        &lt;td&gt;ペイントツールSAI&lt;/td&gt;
        &lt;td&gt;2004&lt;/td&gt;
        &lt;td&gt;TANE/KOJI&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;eco paint&lt;/td&gt;
        &lt;td&gt;エコペイント&lt;/td&gt;
        &lt;td&gt;2006&lt;/td&gt;
        &lt;td&gt;tyty&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;EDGE&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2000&lt;/td&gt;
        &lt;td&gt;TAKABO SOFT&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;FARLUX&lt;/td&gt;
        &lt;td&gt;ファーラックス&lt;/td&gt;
        &lt;td&gt;1997&lt;/td&gt;
        &lt;td&gt;Studio BullTerrier&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;FudeBoard&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1998&lt;/td&gt;
        &lt;td&gt;matumoto&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;Gpen96&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1999&lt;/td&gt;
        &lt;td&gt;Hiroshi Igami&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;GraphicsGale&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2004&lt;/td&gt;
        &lt;td&gt;HUMANBALANCE&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;HappyPaint32R&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1997&lt;/td&gt;
        &lt;td&gt;Isao Maruoka&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;Hyper KiD&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2000&lt;/td&gt;
        &lt;td&gt;Fanfare&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;Hyper-Paint&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2004&lt;/td&gt;
        &lt;td&gt;kiriman&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;iDraw&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1996&lt;/td&gt;
        &lt;td&gt;hawk&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;ILLUSTMAKER&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2000&lt;/td&gt;
        &lt;td&gt;matumoto&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;Janus&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2007&lt;/td&gt;
        &lt;td&gt;Rigeru&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;Kakukakuoji&lt;/td&gt;
        &lt;td&gt;かくかくおうじ&lt;/td&gt;
        &lt;td&gt;2000&lt;/td&gt;
        &lt;td&gt;1BITMANIA&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;L-Paint&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2001&lt;/td&gt;
        &lt;td&gt;via&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;Let’s Draw&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1996&lt;/td&gt;
        &lt;td&gt;Oscar Creation&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;Let’s Draw Z&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2003&lt;/td&gt;
        &lt;td&gt;Oscar Creation&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;Light Painter&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2000&lt;/td&gt;
        &lt;td&gt;Yoshi&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;LitePaint&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2000&lt;/td&gt;
        &lt;td&gt;Rigeru&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;Matilda&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2001&lt;/td&gt;
        &lt;td&gt;ViikiSoft&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;mdiapp&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2007&lt;/td&gt;
        &lt;td&gt;nattou&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;Mpaint&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2001&lt;/td&gt;
        &lt;td&gt;ura00&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;Neko no Mori Graphic Editor&lt;/td&gt;
        &lt;td&gt;猫の森グラフィックエディタ&lt;/td&gt;
        &lt;td&gt;2009&lt;/td&gt;
        &lt;td&gt;Neko no Mori Soft&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;PAL Paint 2&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2005&lt;/td&gt;
        &lt;td&gt;Togura&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;PictBear&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2000&lt;/td&gt;
        &lt;td&gt;Yasuyuki Kashiwagi&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;PictBear 2&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2009&lt;/td&gt;
        &lt;td&gt;Yasuyuki Kashiwagi&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;piroPaint&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2011&lt;/td&gt;
        &lt;td&gt;piroyan&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;Pixia&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1998&lt;/td&gt;
        &lt;td&gt;Isao Maruoka&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;Pointillist Feng Chu 3&lt;/td&gt;
        &lt;td&gt;点画師鳳雛３&lt;/td&gt;
        &lt;td&gt;2005&lt;/td&gt;
        &lt;td&gt;Maya Takimoto&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;PRETTY ART&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2000&lt;/td&gt;
        &lt;td&gt;dmms_21&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;SPED4&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2001&lt;/td&gt;
        &lt;td&gt;TwinkleSoft&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;SUPER KiD 95&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1996&lt;/td&gt;
        &lt;td&gt;Zeit&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;SUPER KiD FE&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1997&lt;/td&gt;
        &lt;td&gt;Zeit&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;The Graphics&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2002&lt;/td&gt;
        &lt;td&gt;Fanfare&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;Ultra KiD&lt;/td&gt;
        &lt;td&gt;ウルトラキッド&lt;/td&gt;
        &lt;td&gt;1997&lt;/td&gt;
        &lt;td&gt;Fanfare&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;Ultra KiD v2.0&lt;/td&gt;
        &lt;td&gt;ウルトラキッド&lt;/td&gt;
        &lt;td&gt;1998&lt;/td&gt;
        &lt;td&gt;Fanfare&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows 9x&lt;/td&gt;
        &lt;td&gt;Yumeiro no Enogu&lt;/td&gt;
        &lt;td&gt;ゆめいろのえのぐ&lt;/td&gt;
        &lt;td&gt;2008&lt;/td&gt;
        &lt;td&gt;Kengo Watanabe&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows CE&lt;/td&gt;
        &lt;td&gt;EDGE Pocket 2&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2009&lt;/td&gt;
        &lt;td&gt;TAKABO SOFT&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows CE&lt;/td&gt;
        &lt;td&gt;JINZO Paint 16&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1999&lt;/td&gt;
        &lt;td&gt;Tomohiro Ueno&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows CE&lt;/td&gt;
        &lt;td&gt;JINZO Paint 4&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1999&lt;/td&gt;
        &lt;td&gt;Tomohiro Ueno&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows CE&lt;/td&gt;
        &lt;td&gt;JINZO Paint full-colour&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1999&lt;/td&gt;
        &lt;td&gt;Tomohiro Ueno&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows CE&lt;/td&gt;
        &lt;td&gt;mdiapp mobile&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2008&lt;/td&gt;
        &lt;td&gt;nattou&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Windows CE&lt;/td&gt;
        &lt;td&gt;Pocket Artist&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2001&lt;/td&gt;
        &lt;td&gt;Conduits&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X-Windows&lt;/td&gt;
        &lt;td&gt;Gedo / Graphic EDitor OMNI&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1999&lt;/td&gt;
        &lt;td&gt;Yasuhito Sugiura&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X-Windows&lt;/td&gt;
        &lt;td&gt;Xbrush&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2001&lt;/td&gt;
        &lt;td&gt;Akira Tasaki&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X-Windows&lt;/td&gt;
        &lt;td&gt;xpx&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1994&lt;/td&gt;
        &lt;td&gt;yav&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X-Windows&lt;/td&gt;
        &lt;td&gt;XShodou&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1998&lt;/td&gt;
        &lt;td&gt;Hiroaki Sakai&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X1&lt;/td&gt;
        &lt;td&gt;turbo Z’s STAFF&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1985&lt;/td&gt;
        &lt;td&gt;Zeit&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X68000&lt;/td&gt;
        &lt;td&gt;Art68K&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1991&lt;/td&gt;
        &lt;td&gt;OOYAMA&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X68000&lt;/td&gt;
        &lt;td&gt;Easypaint SX-68K&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1991&lt;/td&gt;
        &lt;td&gt;First Class Technology&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X68000&lt;/td&gt;
        &lt;td&gt;EEL&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1994&lt;/td&gt;
        &lt;td&gt;GORRY&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X68000&lt;/td&gt;
        &lt;td&gt;EX-WIN (EX-System)&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1996&lt;/td&gt;
        &lt;td&gt;Oh! X&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X68000&lt;/td&gt;
        &lt;td&gt;Full Color Paint Tool SAI&lt;/td&gt;
        &lt;td&gt;フルカラーペイントツール-彩-&lt;/td&gt;
        &lt;td&gt;1996&lt;/td&gt;
        &lt;td&gt;TANE/KOJI&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X68000&lt;/td&gt;
        &lt;td&gt;G・TOOL&lt;/td&gt;
        &lt;td&gt;G・ツール&lt;/td&gt;
        &lt;td&gt;1990&lt;/td&gt;
        &lt;td&gt;Zainsoft&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X68000&lt;/td&gt;
        &lt;td&gt;G68KversionII-PRO&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1989&lt;/td&gt;
        &lt;td&gt;OH! Bussiness&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X68000&lt;/td&gt;
        &lt;td&gt;GE&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1990&lt;/td&gt;
        &lt;td&gt;Miki Hoshino&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X68000&lt;/td&gt;
        &lt;td&gt;GLab&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1992&lt;/td&gt;
        &lt;td&gt;Ushi no shizuku&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X68000&lt;/td&gt;
        &lt;td&gt;gm256.x&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1993&lt;/td&gt;
        &lt;td&gt;Kanzu&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X68000&lt;/td&gt;
        &lt;td&gt;Graphics Editor ARTIST&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1992&lt;/td&gt;
        &lt;td&gt;T.Shimanuki/GCC&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X68000&lt;/td&gt;
        &lt;td&gt;Magic Palette&lt;/td&gt;
        &lt;td&gt;マジックパレット&lt;/td&gt;
        &lt;td&gt;1990&lt;/td&gt;
        &lt;td&gt;Musical Plan Ltd&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X68000&lt;/td&gt;
        &lt;td&gt;Matier&lt;/td&gt;
        &lt;td&gt;マチエール&lt;/td&gt;
        &lt;td&gt;1992&lt;/td&gt;
        &lt;td&gt;Meteor Art Tech&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X68000&lt;/td&gt;
        &lt;td&gt;mfged.x&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1988&lt;/td&gt;
        &lt;td&gt;Mamiyu Yuuki&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X68000&lt;/td&gt;
        &lt;td&gt;MONOCRAYON&lt;/td&gt;
        &lt;td&gt;ＭＯＮＯくれよん&lt;/td&gt;
        &lt;td&gt;1990&lt;/td&gt;
        &lt;td&gt;Yasuhiro Sasama&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X68000&lt;/td&gt;
        &lt;td&gt;MONOCRAYON Wide Edition&lt;/td&gt;
        &lt;td&gt;ワイド版 ＭＯＮＯくれよん&lt;/td&gt;
        &lt;td&gt;1994&lt;/td&gt;
        &lt;td&gt;Noboru Ishii&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X68000&lt;/td&gt;
        &lt;td&gt;Monotone&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1988&lt;/td&gt;
        &lt;td&gt;GUNchan&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X68000&lt;/td&gt;
        &lt;td&gt;Object Editor&lt;/td&gt;
        &lt;td&gt;オブジェクトエディタ&lt;/td&gt;
        &lt;td&gt;1990&lt;/td&gt;
        &lt;td&gt;Tonbe&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X68000&lt;/td&gt;
        &lt;td&gt;Onazorikun&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1990&lt;/td&gt;
        &lt;td&gt;Muchi&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X68000&lt;/td&gt;
        &lt;td&gt;Prism 68K&lt;/td&gt;
        &lt;td&gt;プリズム68K&lt;/td&gt;
        &lt;td&gt;1989&lt;/td&gt;
        &lt;td&gt;WOLF TEAM&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X68000&lt;/td&gt;
        &lt;td&gt;RG&lt;/td&gt;
        &lt;td&gt;ＲＧ&lt;/td&gt;
        &lt;td&gt;1992&lt;/td&gt;
        &lt;td&gt;RERO2&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X68000&lt;/td&gt;
        &lt;td&gt;RGBP&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1994&lt;/td&gt;
        &lt;td&gt;Tetsuya Kimura&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X68000&lt;/td&gt;
        &lt;td&gt;Usagi&lt;/td&gt;
        &lt;td&gt;うさぎ&lt;/td&gt;
        &lt;td&gt;1992&lt;/td&gt;
        &lt;td&gt;IKUTA&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X68000&lt;/td&gt;
        &lt;td&gt;XGE&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1995&lt;/td&gt;
        &lt;td&gt;KYA!,CHIAKI&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X68000&lt;/td&gt;
        &lt;td&gt;XPST&lt;/td&gt;
        &lt;td&gt;えせきーすX68&lt;/td&gt;
        &lt;td&gt;1991&lt;/td&gt;
        &lt;td&gt;kenna &amp;amp; PUNA&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X68000&lt;/td&gt;
        &lt;td&gt;Z’s STAFF Pro-68K&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1987&lt;/td&gt;
        &lt;td&gt;Zeit&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;X68000&lt;/td&gt;
        &lt;td&gt;Z’s STAFF Pro-68K v2.0&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1989&lt;/td&gt;
        &lt;td&gt;Zeit&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Zaurus&lt;/td&gt;
        &lt;td&gt;PetitPaint&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2001&lt;/td&gt;
        &lt;td&gt;TOK&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Zaurus&lt;/td&gt;
        &lt;td&gt;PrismPaint 3&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2001&lt;/td&gt;
        &lt;td&gt;Soga Juroh&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Zaurus&lt;/td&gt;
        &lt;td&gt;PrismPocket&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2002&lt;/td&gt;
        &lt;td&gt;Soga Juroh&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Zaurus&lt;/td&gt;
        &lt;td&gt;Zausuke&lt;/td&gt;
        &lt;td&gt;ざうすけ&lt;/td&gt;
        &lt;td&gt;2000&lt;/td&gt;
        &lt;td&gt;Soga Juroh&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Zaurus Linux&lt;/td&gt;
        &lt;td&gt;CloverPaint&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2005&lt;/td&gt;
        &lt;td&gt;Soga Juroh&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Zaurus Linux&lt;/td&gt;
        &lt;td&gt;PetitPeinture&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;2004&lt;/td&gt;
        &lt;td&gt;Sakira&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Dedicated&lt;/td&gt;
        &lt;td&gt;Aniputer&lt;/td&gt;
        &lt;td&gt;アニピュータ&lt;/td&gt;
        &lt;td&gt;1982&lt;/td&gt;
        &lt;td&gt;JVC&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Dedicated&lt;/td&gt;
        &lt;td&gt;Hyper Paint 2&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1991&lt;/td&gt;
        &lt;td&gt;Shima Seiki&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Dedicated&lt;/td&gt;
        &lt;td&gt;Personal LINKS: PFB-2&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1991&lt;/td&gt;
        &lt;td&gt;LINKS Corporation&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Dedicated&lt;/td&gt;
        &lt;td&gt;Pyuta G-GRAPHIC&lt;/td&gt;
        &lt;td&gt;ぴゅう太 G-GRAPHIC&lt;/td&gt;
        &lt;td&gt;1982&lt;/td&gt;
        &lt;td&gt;Tomy&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Dedicated&lt;/td&gt;
        &lt;td&gt;SGI-Pictoris&lt;/td&gt;
        &lt;td&gt;ピクトリス&lt;/td&gt;
        &lt;td&gt;1988&lt;/td&gt;
        &lt;td&gt;LINKS Corporation&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Dedicated&lt;/td&gt;
        &lt;td&gt;SGX-Hyper Paint&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt;1988&lt;/td&gt;
        &lt;td&gt;Shima Seiki&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;

&lt;/div&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 21 Oct 2023 15:56:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/10/21/list-of-vintage-japanese-pixel-dot-art-software/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/10/21/list-of-vintage-japanese-pixel-dot-art-software/</guid>
        </item>
      
    
      
        <item>
          <title>Kenichi Shinohara’s Pixel Art Ukiyo-e (1987)</title>
          <description>&lt;p&gt;From LOGiN Magazine (1987, No 5) comes the story of 篠原賢一 (Kenichi Shinohara), a “cheerful uncle” from Hyogo Prefecture, who at the age of 60 years old began using an NEC PC-98 to draw pixel art reproductions of Ukiyo-e. He also printed them and made folding screens and kites! Just “for something to do”. I like his style! What a guy.&lt;/p&gt;

&lt;p&gt;His process involved pasting copies of artwork from books and magazines to his monitor screen and then tracing them using the mouse. After that he would clean up, add colour, and after 4 to 5 days print it out on his NEC NM9900, check and repeat. Each piece would take 1 to 2 weeks of work.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;This is pretty much the same process I used to create my &lt;a href=&quot;/tag/1bitwoodblocks/&quot;&gt;&lt;em&gt;1-bit Woodblocks&lt;/em&gt; series&lt;/a&gt;, though with a more modern set of tools, and similar to what &lt;a href=&quot;https://www.folklore.org/StoryView.py?project=Macintosh&amp;amp;story=MacPaint_Gallery.txt&quot;&gt;&lt;em&gt;Susan Kare&lt;/em&gt; did for her famous MacPaint artwork&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;happy-100th&quot;&gt;Happy 100th&lt;/h2&gt;

&lt;p&gt;Given that this feature was published in 1987, when Kenichi was 64, that would make him 100 this year. Happy Birthday for your centenary, Kenichi, wherever you are! 🎂&lt;/p&gt;

&lt;h2 id=&quot;the-setup&quot;&gt;The Setup&lt;/h2&gt;

&lt;p&gt;We can read that he used pixel art software such as Z’s STAFF, FUNNY and CANDY2. The kite goes further and advertises that its image was drawn using Z’s STAFF with Pluskit LEVEL 1, an NEC PC-9801E and printed on an NEC MultiImpact NM-9900 dot matrix printer.&lt;/p&gt;

&lt;p&gt;Handily, many of these tools are &lt;a href=&quot;https://archive.org/details/login-march-1986/LOGiN%20-%20March%201986/page/n103/mode/1up&quot;&gt;referenced in a repeated feature about &lt;em&gt;ASCII C.G. Tools Festival&lt;/em&gt;&lt;/a&gt; which ran from the middle of November 1985 to the end of February 1986. That feature was essentially an advertisement for Zeit software company and was sponsored by them.&lt;/p&gt;

&lt;p&gt;We can see that Funny was a pixel art package, CANDY2 was a technical drawing app, Z’s STAFF was a pixel art app (&lt;em&gt;Zeit&lt;/em&gt;’s most famous, in fact), Pluskit LEVEL 1 was an “image reader” software add-on. Interestingly, &lt;a href=&quot;https://archive.org/details/logi-n-october-1986-raw-scans/LOGiN%20-%20October%201986/page/n458/mode/1up&quot;&gt;&lt;em&gt;Pluskit LEVEL 2&lt;/em&gt;&lt;/a&gt; involved an interface board to allow for direct camera input.&lt;/p&gt;

&lt;h2 id=&quot;login-1987-no-5&quot;&gt;LOGiN 1987 No 5&lt;/h2&gt;

&lt;p&gt;Thanks to &lt;a href=&quot;https://www.gamingalexandria.com/wp/magazines/&quot;&gt;Gaming Alexandria&lt;/a&gt; for scanning the magazine and making it available at Internet Archive: &lt;a href=&quot;https://archive.org/details/login-may-1987/LOGiN%20-%20May%201987/page/n169/mode/2up&quot;&gt;archive.org/details/login-may-1987/LOGiN%20-%20May%201987/page/n169/mode/2up&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;陽気なおごさんに教わるグラフィックツールのひミーふな使い方&lt;br /&gt;
Learn how to use graphics tools from a jolly old man&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Click the images below to see a zoomable, browsable version of the magazine.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/login-may-1987/LOGiN%20-%20May%201987/page/n169/mode/2up&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/kenichi-shinohara-pixel-art-ukiyoe-1.jpg&quot; alt=&quot;Kenichi Shinohara&apos;s pixel art Ukiyo-e, page 1 &amp;amp; 2&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/login-may-1987/LOGiN%20-%20May%201987/page/n171/mode/2up&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/kenichi-shinohara-pixel-art-ukiyoe-2.jpg&quot; alt=&quot;Kenichi Shinohara&apos;s pixel art Ukiyo-e, page 3 &amp;amp; 4&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/login-may-1987/LOGiN%20-%20May%201987/page/n171/mode/2up&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/kenichi-shinohara-pixel-art-ukiyoe-3.jpg&quot; alt=&quot;Kenichi Shinohara&apos;s pixel art Ukiyo-e, close up&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/login-may-1987/LOGiN%20-%20May%201987/page/n171/mode/2up&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/kenichi-shinohara-pixel-art-ukiyoe-4.jpg&quot; alt=&quot;Kenichi Shinohara&apos;s pixel art Ukiyo-e, profile&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 13 Oct 2023 10:43:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/10/13/kenichi-shinohara-pixel-art-ukiyo-e/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/10/13/kenichi-shinohara-pixel-art-ukiyo-e/</guid>
        </item>
      
    
      
        <item>
          <title>OpenSCAD to Sprite Sheet workflow</title>
          <description>&lt;p&gt;I just released the “OpenSCAD to Spritesheet” workflow I created for &lt;a href=&quot;/tag/dailydriver/&quot;&gt;Daily Driver&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gingerbeardman/openscad-spritesheet&quot;&gt;github.com/gingerbeardman/openscad-spritesheet&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It’s a Frankenstein mish-mash of a Makefile and several shell scripts that evolved over many months/years. Initial rendering is done using OpenSCAD, and post-processing is done using ImageMagick. Model poses and rendering variations are controlled by variables in either the shell script or passed through to the model. The whole process is optimised to do as much in parallel as I could figure. More info at the link above! 🚗💨&lt;/p&gt;

&lt;h2 id=&quot;post-processing&quot;&gt;Post Processing&lt;/h2&gt;

&lt;p&gt;After exporting all frames there is some &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;image magick&lt;/code&gt; work to process the files as follows:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;stitch frames together into a single sprite sheet&lt;/li&gt;
  &lt;li&gt;split sprite sheet into RGBA channels&lt;/li&gt;
  &lt;li&gt;process channels to recolour and dither as required&lt;/li&gt;
  &lt;li&gt;recombine processed channels into new sprite sheet image&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can read about that in a &lt;a href=&quot;/2021/06/05/channelling-rgb-into-1bit/&quot;&gt;previous blog post&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;benchmarks&quot;&gt;Benchmarks&lt;/h2&gt;

&lt;p&gt;A full build of 36 cars is as follows:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;3GHz 6-core Intel Mac mini 32GB
    &lt;ul&gt;
      &lt;li&gt;100% CPU for ~26 minutes&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;M1 Pro 10-core MacBook Pro 16GB
    &lt;ul&gt;
      &lt;li&gt;70% CPU for ~9 mins&lt;/li&gt;
      &lt;li&gt;about 3x speedup&lt;/li&gt;
      &lt;li&gt;approx 16 seconds per car&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s parallel 3D rendering, PNG writing &amp;amp; compositing &amp;amp; processing, and copying of ~140K files (which takes up ~0.5GB of disk space).&lt;/p&gt;

&lt;h2 id=&quot;example-model&quot;&gt;Example Model&lt;/h2&gt;

&lt;p&gt;Not to scale! Sizes of features are exagerated to allow for them to appear correct when rendered at a very small size.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/openscad-spritesheet-model-car.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;example-output&quot;&gt;Example Output&lt;/h2&gt;

&lt;p&gt;990 frames each for car and shadow, total of 1980 frames per sprite sheet. Each sprite sheet takes up about ~400KB of RAM on Playdate, and only one is loaded at a time.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/images/posts/openscad-spritesheet-car-table-38-38.png&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/openscad-spritesheet-car-table-38-38.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 04 Oct 2023 15:19:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/10/04/openscad-to-sprite-sheet/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/10/04/openscad-to-sprite-sheet/</guid>
        </item>
      
    
      
        <item>
          <title>Casio CALEID XM-700 Mobile Navigator (1997)</title>
          <description>&lt;p&gt;I like to think everybody collects something odd. Me? I collect hanafuda video games: digital implementations of traditional physical Japanese card games. Mostly that means physical copies of games for consoles and computers both new and old, for handhelds like Game Boy Advance, WonderSwan, digital versions for computers, handhelds and smart phones, and sometimes versions for platforms nobody has ever heard of.&lt;/p&gt;

&lt;h2 id=&quot;down-the-rabbit-hole&quot;&gt;Down the rabbit hole&lt;/h2&gt;

&lt;p&gt;At some point last year (shortly before I began writing this blog post!) I found reference to a hanafuda video game created in 1998 for the Casio CALEID XM-700 Mobile Navigator &lt;a href=&quot;http://webcache.googleusercontent.com/search?q=cache%3Ahp.vector.co.jp%2Fauthors%2FVA003746%2FCALEID3.HTM&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8&amp;amp;hl=en-gb&amp;amp;client=safari&quot;&gt;on a random old, Japanese website&lt;/a&gt;. It turns out this device is a long-forgotten handheld computer that was released in 1997, only in Japan. The device is what you might refer to as a &lt;abbr title=&quot;Personal Information Manager&quot;&gt;PIM&lt;/abbr&gt; or &lt;abbr title=&quot;Personal Data Assistant&quot;&gt;PDA&lt;/abbr&gt;, roughly equivalent to Apple Newton or Palm Pilot, particularly as it featured handwriting recognition. Not what we would consider powerful in this day and age, but good at running database lookups and any undemanding software written specifically for it. The CPU was Intel 8086 compatible, like &lt;a href=&quot;https://www.youtube.com/watch?v=q3qIS5XvzfQ&quot;&gt;other period CASIO handheld personal computers&lt;/a&gt;, and &lt;a href=&quot;https://www.sci.u-toyama.ac.jp/~iwao/caleid.html&quot;&gt;an SDK was available&lt;/a&gt;. Cost of the device was 47800JPY, which was around 240GBP or 400USD at the time.&lt;/p&gt;

&lt;p&gt;The game file came with a reference bitmap showing hanafuda scoring, which was just the type of guarantee and encouragement I needed to start hunting.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/caleid-hanafuda-cards.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;Scoring reference image, included inside HANA100.LZH&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;research-first&quot;&gt;Research first&lt;/h2&gt;

&lt;p&gt;So, after making sure the related web pages were archived to the Wayback Machine, and the downloads backed up, I did a bunch of reading to try to figure out whether or not I would be able to play this game if I bought a device.&lt;/p&gt;

&lt;p&gt;It turns out the device arrived around the same time as USB 1.0. So perhaps its development, and most definitely its buyers, existed in a world that predated widespread support for USB. To that end, the device only has a serial connection. And not only that, the serial connection is on a dock that was not always sold with the device. Without the dock there is no way to transfer files to/from the device!&lt;/p&gt;

&lt;p&gt;For me to stand a chance at this, I’d need to buy a device with a dock and the software to put files onto the device. After some searching, lots of waiting, and more searching, one came up for auction on Yahoo! Japan Auctions. I bought it.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/caleid-promo.jpg&quot; alt=&quot;PNG&quot; title=&quot;Promotional photo of Casio CALEID XM-700 Mobile Navigator&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;caleid-get&quot;&gt;CALEID GET!&lt;/h2&gt;

&lt;p&gt;The screen is 320x240 monochrome (1-bit) which exhibits an odd quirk that active pixels cast a shadow because the LCD is clear and the silver backing is some distance away. This is long before the LCD would be fused to the backing. In fact, some units you see for sale have creases in the silver backing, I’m not sure what must have happened to those devices!&lt;/p&gt;

&lt;p&gt;The system software is a charming custom OS, featuring a full mobile office suite, and 2MB of flash storage (1.49MB free for user data). Most importantly it allows user-created Add-ins to be loaded onto it, we would call them plugins or apps today. The device even has an expansion port for communications peripherals, enabling it to do email/fax using a cell phone or pay phone as data connection. A salaryman’s dream in late-90s Japan!&lt;/p&gt;

&lt;p&gt;My goal: sideload the hanafuda game, along with anything else I can lay my hands on, using the proprietary dock, sync software and a Japanese install of Windows 98!&lt;/p&gt;

&lt;p&gt;I love this sort of challenge that requires discovery and understanding of old hardware and software, and a little (but not too much) messing around with old versions of Windows.&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;6vCO28GqnlA&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;installation&quot;&gt;Installation&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;You can &lt;a href=&quot;https://twitter.com/gingerbeardman/status/1560631734198104065&quot;&gt;follow this process in a Twitter thread I created last year&lt;/a&gt; which contains additional images. I’ve also created an &lt;a href=&quot;https://imgur.com/a/4Ef6nXP&quot;&gt;imgur gallery&lt;/a&gt; of photos and screenshots from the installation process.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I thought it would be fun to try to do this on period correct hardware, so I tried to use my old Sony VAIO PCG-Z600RE from 1999, but the battery is coming up to 20 years old and even with mains power it no longer turns on reliably enough for me to do anything. I would have had to install Japanese language support into Windows. So I quickly gave up this folly.&lt;/p&gt;

&lt;p&gt;A better approach would be to use modern hardware running Windows in a Virtual machine, and &lt;a href=&quot;https://archive.org/details/windows-98-se-japanese-vmware&quot;&gt;I already have one set up running Japanese Windows 98&lt;/a&gt;. I hit a temporary roadblock whilst installing the DATA IMPRESSION for CALEID sync software: it is date locked to only run between the years 1988 and 2010. And here I am over a decade late! Thankfully a quick date change and we’re back in business.&lt;/p&gt;

&lt;p&gt;The first run of sync software post-install requests that you run a Comms check. You have to tap the menu and folder buttons alternately seven times to put the device into a special debug mode, a tip cleaned from an addendum leaflet that came in the box. Without that leaflet I probably would have been stuck.&lt;/p&gt;

&lt;p&gt;I used a USB to Serial cable to take care of the connection to the dock and it just worked, though I know from first hand experience that is lucky as some cheap adapters require a bit of fiddling to work with ancient Windows versions. Data transfer is slow at 9600 baud, that’s less than 1KB per second. I’ll try increasing the baud rate later, maybe.&lt;/p&gt;

&lt;h2 id=&quot;syncing&quot;&gt;Syncing&lt;/h2&gt;

&lt;p&gt;Syncing is done using a custom version of Data Impression 2, renamed Data Impression for CALEID. It has an arcane, overly complicated user interface along with a multitude of period and cultural quirks.&lt;/p&gt;

&lt;p&gt;After some time spent browsing and translating the menus I found the section of the interface listing Add-ins and imported a bunch that I downloaded earlier. There’s some awkwardness to this process which I’ll describe later.&lt;/p&gt;

&lt;p&gt;Syncing was working, but the add-ins were not syncing across for some reason. My thought that it was probably something obvious was correct. In the DATA IMPRESSION app you need to press the button that doesn’t look like other buttons (yellow text) and then enable Add-in syncing! We’re almost there, I can feel it.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/caleid-data-impression.png&quot; alt=&quot;PNG&quot; title=&quot;Data synchronisation is achieved using Data Impression for CALEID (see &amp;lt;a href=&apos;https://imgur.com/a/4Ef6nXP&apos;&amp;gt;imgur gallery&amp;lt;/a&amp;gt;)&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;add-ins&quot;&gt;Add-ins&lt;/h2&gt;

&lt;p&gt;The last little bits are worth bullet pointing, as they require some detailed operation:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Launch “DATA IMPRESSION for CALEID”&lt;/li&gt;
  &lt;li&gt;Select 電子手帳 (“Electronic Notebook”) from the buttons above the clock on the right (2nd from bottom) and then:
    &lt;ol&gt;
      &lt;li&gt;Make the model selection カレイド (“Caleid”, default)&lt;/li&gt;
      &lt;li&gt;Make the type of communication データ送信 (“data transmission”, dropdown 2, 3rd list item)&lt;/li&gt;
      &lt;li&gt;Click the 動作設定 (“operation settings”, button 3)&lt;/li&gt;
      &lt;li&gt;Check the アドイン (“Add-in”) checkbox (bottom, alt+D)&lt;/li&gt;
      &lt;li&gt;Uncheck all other types of data to disable syncing of those&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;Select メモ帳 (“Notepad”) from the menu on the right and then:
    &lt;ol&gt;
      &lt;li&gt;Select the アドイン (“Add-in”) folder&lt;/li&gt;
      &lt;li&gt;Select メモ帳 (“Notepad”) -&amp;gt; アドインデータの読み込み (“Read Add-in Data”) from the menu bar (alt+M, R)&lt;/li&gt;
      &lt;li&gt;Choose an add-in file (*.adi)&lt;/li&gt;
      &lt;li&gt;Repeat steps 1-3 for multiple add-ins&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;Press the スタート (“Start”) button on the dock. Add-In will be sent to the CALEID.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Gotchas:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Serial ports in VMs can be a hassle, try both the host PC and guest VM ports&lt;/li&gt;
  &lt;li&gt;DATA IMPRESSION will let you know if it can’t communicate over the selected serial port&lt;/li&gt;
  &lt;li&gt;Cursor needs to be in the Add-Ins folder for the Add-in menu items to be enabled&lt;/li&gt;
  &lt;li&gt;Syncing without an Add-in selected will result in a failure message&lt;/li&gt;
  &lt;li&gt;If you select an existing add-in rather than the Add-in folder, the existing add-in will be overwritten by the newly imported one(!)&lt;/li&gt;
  &lt;li&gt;If you start with the demo data you’ll have a bunch of test items in the various apps, see note below&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Awkwardness: Add-ins have to be transferred one at a time, but a sync of a single Add-in goes fast enough after disabling syncing of all other types of data (notes, calendar, spreadsheets, etc).&lt;/p&gt;

&lt;p&gt;Note: the first time I setup the device starting with the demo data it must have been syncing 25 years worth of recurring demonstration calendar events. Each sync of a single add-in took multiple minutes. Maybe that’s why they didn’t want anybody running the sync software so long after the device had been released?&lt;/p&gt;

&lt;p&gt;The final, &lt;a href=&quot;https://lucidar.me/en/serialib/most-used-baud-rates-table/&quot;&gt;highest supported baud rate is 38400&lt;/a&gt; (4800 bytes/sec theoretical speed, 3840 bytes/s actual speed, that’s 3.75KB/sec). Game sizes range between 3KB and 32KB, averaging 12KB each. So the slowest part of the process is the GUI busy work to install the Add-ins in DATA IMPRESSION for CALEID, and then syncing them one by one.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;game-on&quot;&gt;Game on!&lt;/h2&gt;

&lt;p&gt;Here’s my Casio CALEID XM-700 Mobile Navigator running 花合わせ (Hana-awase) a hanafuda game made by すーさん (Sū-san) in 1998. Pixels are slightly wider than they are tall so the cards in the game display wider than in the image at the top of the page.&lt;/p&gt;

&lt;p&gt;…I wonder how many other people have played this game in the last 25 years?&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;In a follow-up post I’ll detail the other games that I was able to install on the device.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/caleid-hanafuda-running.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/caleid-hanafuda-running-close-up.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;casio-catalog-97-12&quot;&gt;CASIO Catalog ‘97-12&lt;/h2&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/caleid-catalog.webp&quot; alt=&quot;WEBP&quot; title=&quot;CALEID page from the CASIO Catalog, December 1997, with thanks to &amp;lt;a href=&apos;https://www.casio-calculator.com/Download/Catalogue/Catalogues.html&apos;&amp;gt;casio-calculator.com&amp;lt;/a&amp;gt;&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;extras&quot;&gt;Extras&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://cdn.gingerbeardman.com/files/caleid-addins.dim.zip&quot;&gt;caleid.addins.dim.zip&lt;/a&gt; (294KB) a profile for DATA IMPRESSION for CALEID that has all the Add-ins I’ve found so far pre-installed and ready to sync&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cdn.gingerbeardman.com/files/caleid.portmon-serial-addin.txt&quot;&gt;caleid.portmon-serial-addin.txt&lt;/a&gt;
(44KB) a &lt;a href=&quot;https://learn.microsoft.com/en-us/sysinternals/downloads/portmon&quot;&gt;portmon&lt;/a&gt; serial log taken whilst syncing a single Add-in (the sample card game that comes with DATA IMPRESSION for CALEID)&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 25 Aug 2023 21:44:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/08/25/casio-caleid-xm700-mobile-navigator-hardware/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/08/25/casio-caleid-xm700-mobile-navigator-hardware/</guid>
        </item>
      
    
      
        <item>
          <title>Tom Moulton, Father of the Disco Mix (1976)</title>
          <description>&lt;blockquote&gt;
  &lt;p&gt;This interview is reproduced from the January 1976 “Disco” issue of Black Music magazine.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;TOM MOULTON is the behind-the-scenes figure of disco music. His name has appeared on the credits of discs by Gloria Gaynor, B.T. Express, Bobby Moore, Al Downing, Peoples Choice, South Shore Commission and many others. Yet Moulton’s vital contributions to the hits of a dozen soul acts is in a manner new to an industry increasingly immersed in the complexities of a technological age. For Tom Moulton, a white New York based engineer, is the father of the “disco mix”.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Mixing a record is a complex process. Modern recording uses sixteen or twenty-four track machines, which means that every instrument is recorded and controlled separately, and can be balanced against the others. Tapes can be edited in a variety of ways, and played at any speed. Effects, like echo, repeat and phasing, can be placed on instruments, and stereo separation is exploited to give breadth to a recording. Compression, expansion and limiting are techniques which can firm up a sound by making quiet parts louder and loud parts quieter, or emphasize the dynamic range, or completely remove certain frequencies. Equalizers (which are found on home stereos in the form of bass and treble knobs) can be used on each instrument separately to change its characteristic sound. Most studios have bass, lower middle, upper middle, treble and top frequency controls which provide endless permutations of tone for each track. Tom Moulton has specialised in mastering these facilities, an assignment usually left to the producer. Tom’s services are called for whenever a company wants to perform a magical transformation: changing an uptempo soul disc into a ‘disco record’. Black Music spoke at length to this charming articulate man in his luxurious New York apartment to unravel the mysteries behind the oft quoted but seldom understood complexities of the ‘disco mix’.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: Tom, begin by telling us a bit about your background. How did you get into the music business?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: When I was fifteen years old I had a part-time job in a record store, and I liked it so much that I left school to try to get into the music business as a salesman. I worked for Seeburg’s (the jukebox company), and King Records. Then I went up to Boston and worked for a retail chain. I got a salesman’s job with RCA, left there, and went into United Artists as a promotion man. By that time I was so fed up that I left the business for about a year.&lt;/p&gt;

&lt;p&gt;Then I went to a couple of discotheques, and I noticed how people were really starting to get into music, in a different way than I had ever realised; and I noticed how, towards the end of a record, people would really start to get into it and then, for some strange reason, they’d lose it, because another record would come on, or two records would be playing at the same time. So I figured, God, if people get off that much on music, there’s got to be a way to take them from where that peak is at the end of a record, and hold them, and take them up another level.&lt;/p&gt;

&lt;p&gt;I started fooling around technically with tapes at home, and I finally got one place to try one of my tapes. I noticed that by doing edits, and by using parts of the actual record over again, like the instrumental break, people would yell and there’d be an emotional reaction. I just wanted to make people get off on the music, or at least extend that feeling that they had at the end of a record. Say I do a forty-five minute set; you start your records off at one level, and try to build up to a peak. When I do a mix, I try to take that whole forty-five minute trip and put it into one record. You start here, and then by the time the record is over you have them up at the ceiling.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: When did you get into the disco thing?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: It was 1970.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: Are you freelance?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: I am; I do a lot for Scepter—and they’ve done a lot for me. They gave me my first chance at something like this, with the BT Express.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: What is the appeal of discos?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: People go to get away from everything. Here in New York, a lot of people go to the discos to get away from the world, to get away from the city, and be totally free while dancing: being freaked out with the music and the lights. But you watch people, and they come in, they don’t know if they want to dance or whatever, and all of a sudden they’ll hear a record, they get up on the floor, and they totally come out of it. You just watch the expression of how they’re getting into it; I love to see people turn on like that to music.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: How do you mix a track for disco?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: A disco record has to have excitement, so what I do when I’m involved in a record is, first of all, something has to turn me on about it or I won’t get involved. What I usually do is hear a rough mix, and see what they’ve tried to do with it. Then I take it into the studio, and I try to get the right tempo for it. I slow up and speed up records, which I do on the sixteen track, and I get the right groove. Then I try to make things in there like the guitar, or piano, or something… I try to get some kind of drive going, some excitement. I notice that the beauty of things, like the bells, or vibes, or something, that are in there, or like a guitar that’s playing some pretty chords, I’ve noticed that the contrast has a funny reaction on people. It’s a hard driving thing, but all of a sudden there’s all this beauty there at the same time. I notice things like that really turn people on. And what I also try to do is put in breaks if I can, cause that takes people even higher. It’s down to flow; I try to take people somewhere. I never stay on the same plane because I think that becomes boring.&lt;/p&gt;

&lt;p&gt;For example, the People’s Choice record (‘Do It Any Way You Wanna’). You hit them right over the head the first time with that drum beat, and then you build them from there, but you don’t let them go. You gotta keep their attention. When I first heard that on tape, it was the same thing all the way through the record. The same monotonous thing. So I did that record thirty seconds at a time; I started with the drums and the bass, then I punched in the guitar, then another guitar, then the Fender Rhodes. And you go like that. Then you keep bringing the hook back in; I brought the hook back three times. The original was close to that, except I kept repeating things to make it interesting. I’m not sure what the record would have done if it had come out the original way, but I know this way made it more exciting.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: Are you involved in computer mixes?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: I use computer mixes quite a bit now if it’s twenty-four track; it’s difficult with sixteen. It’s good if there’s a lot of riding to do, like if you want to get certain licks in on the guitar, or maybe the voices. It’s good in that respect, especially if there are a lot of things on there that you want to get out. The other thing I like about computer mixes is that you can use group masters, so you can bring the whole orchestration up at times, or put the strings and horns in something to accentuate what somebody’s singing. I find the computer mixes are fantastic for that; but even now I rely on the computer just as a group master, even on the sixteen track, ‘cause it just makes it easier. The use of computer mixes still isn’t perfected yet; the computer can perform two hundred and twenty functions, and we’re only using about three percent of its total capabilities.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: What do you think is your best mix?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: I think the most creative was probably Gloria Gaynor. The first one was probably the one I like best. It was just the excitement of taking two old songs that they felt, well, the only reason we’ll let you do them is basically because they’re old, and who really cares about them; they didn’t say it exactly that way, but since they’d already gotten the hit records, I mean, why would anybody want a five minute version of ‘Honeybee’? And I had to convince them into doing that.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: Did you change the tempo on that one?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: Yeah, a little bit.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: Don’t you find that that distorts the vocal performance?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: No; I speeded that up a little bit, but what that does is it puts things up in a higher range and makes the drums a little brighter. It makes the voice a little higher, and if you roll off the bottom and put more highs on the voice, you can almost make like she’s really screaming, like she’s really into the record. I’ve done that with a lot of records, where it sounds like they’re singing their ass off, but they’re not, ‘cause it’s done technically. I did that on ‘Leavin’ The Good Life Behind’, by Phyllis Hyman on Private Stock, (unfortunately that one wasn’t a hit) and on ‘Just Can’t Say Goodbye’, by The Philly Devotions. I suppose my all-time favourite mix is ‘I’ll Be Holding On’ by Al Downing. The radio stations here played the long B side on that; they never once played the short one. Stations started playing the long versions, like on ‘Do It ‘Til You’re Satisfied’, what they call the disco mix. I was thrilled when I heard that.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: The disco mix on ‘I Don’t Know If I Can Make It’, by Dawson Smith, sounds toppier than the vocal A side, especially the guitar and percussion.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: I did a mix on the vocal version as well as the instrumental, but they used the producer’s vocal version. My instrumental was just the track to the vocal version without the voice. My whole number on that was that I wanted to make it more dynamic, rather than just a street record. That guitar is brought out by adding brightness. I like a clean sound on most records; if I’m gonna hear a guitar playing I want it to sound alive; I don’t want it to sound compressed, or so tight in the record that there’s no life to it. When things bounce out of a track it sounds real, it sounds alive. I find also a great deal depends on the mastering of the record. I like to take a lot of bottom off the bass, so I can push it more, and pick up the melody line without destroying the bass drum sound. I like the bass to ride above the bass drum. Now, if you take off a lot of the bottom, roll off the bottom or some of the mid-range, it gets very thin, but it’s clean. Then when you go to master, you push the bottom again, you put the bottom back in, but you get a very clean bottom sound, without it all being boom boom boom, vibration rather than music.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: It’s been said that disco mixing is a matter of emphasizing highs to compensate for bottom-heavy speaker systems.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: I think I was probably the one that brought back the bright sound on top. The only reason for that is, at that volume, I always like to keep a dry top. I like to keep the cymbals as dry as I can, because when you have a lot of echo on a record, and you play it at that volume, everything just jumps together, and it sounds all distorted. I notice with a dry sound on the cymbals, they cut through, and the cymbal tracks would sort of float across the speaker. And I notice that people react to highs like that.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: There was also a lot of top on the Banzaï record.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: Yeah, well I think that was the hottest record I’ve ever mixed. That was deliberately done that way. I had a tape of that, and ‘Undecided Love’ by The Chequers, at the same time. I got them from France, and I turned Scepter onto them so they could buy it. But I did say that if you buy them, buy them with the stipulation that we get the sixteen tracks so I can redo them. I feel ‘Undecided Love’ is gonna be a big hit now. And there’s a break in that that never existed, and that’s 5:35, including that. I always try to get records to hit 5:35, it just seems to be a magic number with me. ‘I’ll Be Holding On’ was 5:35, and so was ‘Free Man’.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: Is there such a thing as a slow disco track?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: It’s hard to say; I feel there’s gonna be a trend towards that, what it is I don’t know, but right now, I would say no, there isn’t. In New York, the gay discos still influence the sound. You’ll find the gay discos are much more into things they’re not familiar with, whereas in the straight discos, people still feel they have to hear something they’re familiar with, and only occasionally can you slip in that new record that’s foreign to them. But now it’s getting to the point where gay discos aren’t gay anymore, they’re mixed. Because a lot of people are getting hip and saying, “Oh, we don’t want the same old music. We want to be able to go where it’s new and fresh”, and that’s what a lot of people do now. But I think you’ll find that in your big cities rather than your smaller towns. They’re not really into that sort of thing yet, and they watch what New York does.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: Are there any older records which are natural disco tracks?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: Yeah, there’s quite a few of them; ‘Think’, by Aretha Franklin, ‘Just One Look’, by Doris Troy, ‘Who’s Makin’ Love’, by Johnny Taylor. Things like that are really kind of disco records.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: When did disco begin in America?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: It began in the early sixties; but it really took off around 1971. I feel disco started happening more because radio got very tight with their playlist, and there was a lot of music which just wasn’t being exposed. And of course, the economy doesn’t help either. People want to be able to go out and have a good time. If you believe that history repeats itself, I think we’re going through the dance era of the forties again.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: Like the old tune ‘Brazil’ being recorded again?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: There’s quite a number of them now; there’s ‘How High The Moon’, on Gloria’s new album.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: What do you feel catalysed the new boom?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: Everything has an effect, when you put it all together, but I don’t think just one thing does; it takes everybody to get on a good thing, or it’s not gonna work. That’s what I tried to get the disc jockeys here to do; a couple of years ago I said, “Hey, the only way you guys are ever gonna get anywhere is if you all stick together, and then you can become something”. One will help the other this way, rather than each one trying to become a star themselves.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: Is that how the record pool came about?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: The record pool was really formed because of ‘The Chicago Theme’, by Hubert Laws; let’s say that was the basis of forming it. There was a man who was working for the company, CTI, who was giving out test pressings, and a couple of other disc jockeys tried to get it. The guy said, “I’m sorry, you’re not big enough”. So they called me and said, “I can’t believe anybody would say we’re not big enough”. And I said, “Well, I don’t have a solution to it”. I tried to call him, and he was very nasty about it. So the next thing I know is, “Well look, we’re all gonna get together then, and if we all don’t get it, then none of us are gonna play it”. And I said, “That’s the smartest thing I’ve ever heard you say”. That’s the reason they all got together, and of course I tried to help them .&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: Are there any other disco mixers you admire?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: I don’t really know anyone else who does what I do: see, I call myself the objective side of a producer. I’ll go in there being totally objective, and take out everything that doesn’t work, and put in stronger things that are the key to it. And the reason I’ve come to that conclusion is, I’ve tried to produce some things myself, and I found it very difficult in the mixing to be objective, to say it’s not really mine, it’s somebody else’s, and I’m out to get everything that’s good in the record.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: Have you ever overdubbed anything onto a record?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: Sure, background voices. In ‘Reach Out, I’ll Be There’ by Gloria Gaynor, the drums in the beginning. See, that was only once in the record, so we went in and overdubbed it, put it in again, kept repeating it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: Did you change anything in ‘Call Me Your Anything Man”’, by Bobby Moore?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: No, but we had to triple the strings. We did it technically, cause there were only three violins, and rather than… I don’t like to add things to a producer’s record, I don’t think that’s right: if I can do it without that sort of thing, I would rather. ‘Cause I enjoy what I do, but I’m not trying to take it away from the producer either.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: ‘Anything Man’ had a lovely summer quality.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: I loved that record. Everybody always says the same thing, they always say “summer quality”. I was just fascinated with it. It’s the melody which I think attracted me to that record, and the girls’ voices. It’s like a lovers’ record, I can’t explain it. Like, to me that was a ballad. It wasn’t really disco. The original had a sideman (a rhythm box simulating sixteenths on a closed high hat) up louder, but the whole mix was much harder. And there’s that thin line where you’ve got to compromise, where you still want to retain the feel of the record, but you also want the beauty, and the minute that was up too loud, it clashed with what he was doing, it ruined the intimacy of what he was trying to say. You’ve got to consider the vocalist too.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: Has disco affected dance itself?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: It has; I don’t think the hustle would have come up without the disco. They call it the hustle, I don’t actually know how it got its name, but I know that a promotion man at RCA was the guy who gave Van (McCoy) the idea to record it. The rhythm is really a Philadelphia sound, what I call pretty soul.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: Is the bump surviving?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: I don’t think it was ever that big in New York. It was big with the blacks, but not so much with the whites. On a national basis, I’d say the bump is probably still popular.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: Has disco transcended ethnic lines?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: I find black music on the whole more effective than white records when it comes to generating excitement. I’ve grown up with black music, and maybe I’m prejudiced, but I prefer black music, only because there’s an excitement there. It’s like the way a black group performs versus a white group. It seems like a black group needs less to make it exciting, I don’t know why that is. Even vocally, they sing between the notes. I guess you’d call it soul. And why should that kind of music be just for the blacks, that’s not fair. I appreciate anything that’s real and exciting. That’s what I try to do in a mix.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: Aren’t discos expensive?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: No, they’re not. It’d probably cost you around five dollars to get in, then you’d probably spend maybe two or three dollars for a drink or whatever. That’s not a lot of money here.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: Are drugs prevalent on the scene?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: I think you’re gonna find them anywhere. I don’t think there’s as much as there used to be, but there’s still a lot of drugs around, let’s say grass, or they might be on amyl nitrate, what they call poppers here. But I don’t think there’s as much as before.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: Do you think that disco has hurt struggling live acts?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: No, because if you look at the charts, there’s still a great percentage of ballads. I just think that disco music has opened a whole new area and created some new record stars. Those small clubs still exist. There’s still a lot of people who like that kind of music.&lt;/p&gt;

&lt;p&gt;Maybe it’s hurt them a little bit, but there are still people who want to hear the small trio, the piano lounge. A lot of restaurants have opened discos where before they had nothing. If you’re gonna go the music route, discos are hot right now. Rather than someone saying, “I wanna really increase my business so I’m gonna throw out the small group and start getting discos”. There are still a lot of places that have the small lounge acts.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: Do you see any signs of disco fading?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: No, because I don’t think it’s peaked yet.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: A lot of people have jumped onto the disco bandwagon; has James Brown?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: What James Brown used to do really wasn’t disco music. James Brown generates a raw excitement, and that’s a prime reason why a number of his records were played in the discos, because it had that raw excitement to make you wanna move. There’s a certain line there where it becomes listening music, and music where you’ve got to tap your foot or something; and that’s what you try to get out of a mix, to get people, like, to slap them in the face and say, “Hey, come on, let’s move”.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: What do you think of James Brown’s two latest disco albums?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: I wouldn’t want to comment on those.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: What do you think of ‘Bad Luck’, by Harold Melvin And The Blue Notes?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: It’s got to be one of my favourite all-time records. That of course was a million seller here. That’ll probably be the biggest record of ‘75 in terms of popularity, because people just don’t get sick of it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: And The O’Jays?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: Believe it or not, The O’Jays are the biggest sellers on Philadelphia International. They’re probably one of the strongest black acts around; they do have some white appeal, but it’s primarily the black appeal for The O’Jays. ‘Love Train’ was probably their biggest seller to the white audience, and ‘For The Love Of Money’ was an incredible disco record.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: And The Temptations?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: It’s funny about Motown. I think the most exciting thing they’ve come out with is ‘Forever Came Today’, by The Jackson Five. That became a number one disco record here in New York; but as for some of their other products, it seems like there’s no excitement anymore. It’s like they don’t take it far enough, they confine it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: Does that hold for The Commodores?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: Oh, I wish you didn’t say that. There’s one song I love right now, it’s my favourite song. It’s called ‘This Is Your Life’, it’s a ballad. That to me is one of the greatest Motown records I’ve ever heard. But I didn’t care for ‘Slippery When Wet’. If they applied the same approach to The Commodores’ up records as they did to ‘This Is Your Life’, they would really dominate the disco world.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: What about some other groups?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: I love Kool &amp;amp; The Gang, always have. I like The Ohio Players, they’re interesting. I’m surprised they’re as commercial as they are, because when you listen to them they’re really not that commercial. Love The Isley Brothers.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: Is side one of ‘The Heat Is On’ disco?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: Yes and no. That’s a group disco-wise that’s predominant in the straight clubs. It’s too repetitious for the gays. And it’s bigger in black clubs.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: And Barry White?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: He’s sort of over now. His last big record was ‘You’re The First, The Last, My Everything’.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: Are you involved in any work other than disco?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: I’ve been doing a lot of ballads lately. I think ballads are much easier to do. You can get more emotion out of a ballad, where, with a disco record, there’s a lot of things that you’ve got to keep going. ‘Cause if I get bored with it, then I know other people are. You’ve got to keep the excitement level up, whereas on a ballad you depend more on the lyrics and the melody.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BM: How do you see the future of disco?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TM: As long as people can go out and have a good time for five dollars, and feel uninhibited, because maybe it’s dark, and let’s say, escape, and just come out of your shell and dance, I think discos are gonna be around. Because it’s really a cheap way of having a great time.&lt;/p&gt;

&lt;p&gt;© Davitt Sigerson, 1976&lt;/p&gt;

&lt;!-- thanks to Eleyeen Salah for helping me gain access to this article, so kind! --&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 22 Aug 2023 17:12:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/08/22/tom-moulton-father-of-the-disco-mix/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/08/22/tom-moulton-father-of-the-disco-mix/</guid>
        </item>
      
    
      
        <item>
          <title>Fake Steve Jobs &amp; Letters from BILL G</title>
          <description>&lt;p&gt;On 9th August 2006, “Fake Steve (Jobs)” started blogging at &lt;a href=&quot;https://www.fakesteve.net/2006/08/el-jobso-rides-again.html&quot;&gt;The Secret Diary of Steve Jobs&lt;/a&gt;. The blog featured scathing criticism of Silicon Valley and the tech industry at large, a pinch of political satire, along with many in-jokes and pandering to the zeitgeist. It was, above all else, very funny. A year or so after it began the identity of the ghost writer was revealed as journalist Dan Lyons. The blogging eventually stopped as the (real) Steve Jobs’ health deteriorated, and &lt;a href=&quot;https://www.fakesteve.net/2011/10/one-last-thing-r-i-p-steve-jobs.html&quot;&gt;a single posthumous post&lt;/a&gt; appeared the day after his untimely death. I often think about Fake Steve, some of his best lines, some of his funniest observations. It was a different time.&lt;/p&gt;

&lt;p&gt;Anyway… imagine my surprise when, earlier this year, I discovered that somebody in Japan had done a “Fake Bill (Gates)” a decade before Fake Steve! Truly, &lt;a href=&quot;https://www.everythingisaremix.info&quot;&gt;everything is a remix&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;letters-from-bill-g&quot;&gt;Letters from BILL G&lt;/h2&gt;

&lt;p&gt;ビル・Ｇからの手紙 &lt;em&gt;“Letters from BILL G”&lt;/em&gt; was a column that appeared in &lt;a href=&quot;https://weekly.ascii.jp/elem/000/001/539/1539536/&quot;&gt;EYE・COM magazine&lt;/a&gt; in 1996 and continued after the magazine was renamed to 週刊アスキー (&lt;a href=&quot;https://weekly.ascii.jp/elem/000/002/612/2612627/&quot;&gt;Weekly ASCII&lt;/a&gt;) in May 1997.&lt;/p&gt;

&lt;p&gt;The writer of the column was コモエスタ坂本 (Comoesta Sakamoto). Of course, his name is a pseudonym combining Spanish and Japanese. He was a philosophy graduate (Sophia University, 1988), performance artist, actor, &lt;a href=&quot;https://www.youtube.com/watch?v=o9MmWLVBEzI&quot;&gt;punk singer&lt;/a&gt; with 坂本プロジェクト (Sakamoto Project, 1989), sports commentator, journalist, author, and all-round troublemaker. Quite a busy man! There is next to no information on the internet about all of this: &lt;a href=&quot;https://cpplover.blogspot.com/2007/03/g.html&quot;&gt;a single blog post&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/search?q=ビルＧからの手紙&amp;amp;src=typed_query&amp;amp;f=live&quot;&gt;some reminiscing on Twitter&lt;/a&gt; and a short bio. So I’ve done my best to dive deep into the Wayback Machine to uncover what I can.&lt;/p&gt;

&lt;p&gt;The Letters from BILL G were eventually published in two books, with &lt;a href=&quot;https://www.amazon.co.jp/dp/4756118550/&quot;&gt;Volume 1&lt;/a&gt; appearing in August 1998 and &lt;a href=&quot;https://www.amazon.co.jp/dp/4756131514/&quot;&gt;Volume 2&lt;/a&gt; in July 1999. After the column had been running for around 6 months, ramping up to the publication of the first book, a &lt;a href=&quot;https://web.archive.org/web/20030811195205/http://wam.ascii.co.jp/regular/bill_g/&quot;&gt;teaser/promo website&lt;/a&gt; was introduced featuring a selection of letters. This is cool because internet was still pretty new at this point! Both the books and the website feature letters in their “original” &lt;a href=&quot;https://web.archive.org/web/20030813051438/http://wam.ascii.co.jp/regular/bill_g/eng/index.html&quot;&gt;English&lt;/a&gt; as well as in “translated” &lt;a href=&quot;https://web.archive.org/web/20030802194529/http://wam.ascii.co.jp/regular/bill_g/index.html&quot;&gt;Japanese&lt;/a&gt; (of course, this is the opposite of the real order of events).&lt;/p&gt;

&lt;h2 id=&quot;the-media-king&quot;&gt;The Media King&lt;/h2&gt;

&lt;p&gt;BILL G is quite a character. He proclaims himself to be “The Media King” and claims credit for a whole host of aspects of modern technology some of which are true and some of which are, of course, blatant lies.&lt;/p&gt;

&lt;p&gt;I would say that BILL G doesn’t call out specific people or turn to (tongue in cheek) personal insults as frequently as Fake Steve did. But BILL G is well remembered for his brutal opening remarks of many letters were he is condescending to Japanese people in general, explaining how he is better than them. And in some letters he response to “reader’s questions” which are equally scathing.&lt;/p&gt;

&lt;p&gt;Of course, in the mid- to late-90s Windows reigned supreme so the butt of the jokes tend to rest on Microsofts dominance in the marketplace and what seemed to be its inevitable encroachment on every facet of computer use. In &lt;a href=&quot;https://web.archive.org/web/20020902153215/http://weeklyascii.com/regular/bill_g/letter/mail/mail61-70/mail61.html&quot;&gt;letter 61, published in 1997&lt;/a&gt;, BILL G declares that he “invented the Internet”. A decade later Fake Steve would declare “I invented the iPhone!”&lt;/p&gt;

&lt;p&gt;Topics include: Pocket PCs, Y2K, Tamagotchi, IE in Windows antitrust suit, Clinton/Lewinsky scandal, iMac introduction, sports events such as The Masters, and so on. Many topics that were mentioned are still relevant today: Digital currency, Network OS, Pokemon, Global warming, and more.&lt;/p&gt;

&lt;p&gt;I recommend browsing the teaser/promo website &lt;a href=&quot;https://web.archive.org/web/20030813051438/http://wam.ascii.co.jp/regular/bill_g/eng/index.html&quot;&gt;in English&lt;/a&gt; or &lt;a href=&quot;https://web.archive.org/web/20030811195205/http://wam.ascii.co.jp/regular/bill_g/&quot;&gt;Japanese&lt;/a&gt;, but here are a few of my favourites:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;the “true” story of Windows GUI vs Mac GUI&lt;/li&gt;
  &lt;li&gt;cloning himself into every PC “BILL G Inside”&lt;/li&gt;
  &lt;li&gt;Bing Crosby singing “White Christmas” at the Christmas Party (“he’s dead? no problem we’ll use a hologram”)&lt;/li&gt;
  &lt;li&gt;comparing a short trip around Japan to “Gulliver’s Travels”&lt;/li&gt;
  &lt;li&gt;his disclosure that micro drives came out of what “really” happened at Roswell, NM&lt;/li&gt;
  &lt;li&gt;his brief obsession with the game “Age of Empires”&lt;/li&gt;
  &lt;li&gt;a brief stint as “Counsellor for Love Affairs”&lt;/li&gt;
  &lt;li&gt;a virtual interview with Ghandi that ends in a fist fight&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/comoesta-sakamoto-letters-from-bill-g-1.jpg&quot; alt=&quot;Letters from BILL G: Volume 1&quot; /&gt; &lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/comoesta-sakamoto-letters-from-bill-g-2.jpg&quot; alt=&quot;Letters from BILL G: Volume 2&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;end-users&quot;&gt;End Users&lt;/h2&gt;

&lt;p&gt;It feels to me that the BILL G column may have fallen out of Comoesta Sakamoto’s digital magazine 末期ユーザー &lt;a href=&quot;https://web.archive.org/web/19990220082947/http://www.asahi-net.or.jp/%7ELZ3T-SKMT/enduser/makki.htm&quot;&gt;&lt;em&gt;“End Users”&lt;/em&gt;&lt;/a&gt; (phrased to mean “terminally ill”) that was similarly irreverent.&lt;/p&gt;

&lt;p&gt;“End Users” was distributed Mac User’s &lt;a href=&quot;https://archive.org/search?query=MACBIN+CD-ROM&quot;&gt;MACBIN CD-ROMs&lt;/a&gt; (supposedly issues 20 to 26, but I can only find it on two of these). On the same discs were some Macintosh apps created by Comoesta Sakamoto, a mix of joke apps (one resets your Mac!), surreal point and click explorations of sound and image, and a text-mode baseball game (seemingly a version of an earlier game he’d made for Japanese NEC PCs). You can also find these on an archived version of his old website via &lt;a href=&quot;https://web.archive.org/web/19981206045204/http://www.asahi-net.or.jp:80/~LZ3T-SKMT/game/&quot;&gt;Wayback Machine&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;legacy&quot;&gt;Legacy&lt;/h2&gt;

&lt;p&gt;BILL G is a product of its time, and neither it nor Fake Steve have the impact today that they had when they were published. But they’re both still pretty funny and seemingly fondly remembered around the world.&lt;/p&gt;

&lt;p&gt;The BILL G column was well-remembered enough that it reappeared in MSX Magazine 永久保存版 2 (MSX Magazine Eternal Preservation Edition 2), released in December 2003, and &lt;a href=&quot;https://archive.org/details/MSXMAGAZINE2/page/n113/mode/2up&quot;&gt;available to read at Internet Archive&lt;/a&gt;.&lt;/p&gt;

&lt;figure class=&quot;img-with-caption&quot;&gt;
&lt;picture&gt;
  &lt;source srcset=&quot;https://cdn.gingerbeardman.com/images/posts/comoesta-sakamoto-msx-revival-vol-2.avif 1x, https://cdn.gingerbeardman.com/images/posts/comoesta-sakamoto-msx-revival-vol-2-retina.avif 2x&quot; type=&quot;image/avif&quot; /&gt;
  &lt;source srcset=&quot;https://cdn.gingerbeardman.com/images/posts/comoesta-sakamoto-msx-revival-vol-2.webp 1x, https://cdn.gingerbeardman.com/images/posts/comoesta-sakamoto-msx-revival-vol-2-retina.webp 2x&quot; type=&quot;image/webp&quot; /&gt;
  &lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/comoesta-sakamoto-msx-revival-vol-2.jpg&quot; srcset=&quot;https://cdn.gingerbeardman.com/images/posts/comoesta-sakamoto-msx-revival-vol-2-retina.jpg 2x&quot; onload=&quot;doScroll();&quot; alt=&quot;&quot; title=&quot;&quot; loading=&quot;lazy&quot; /&gt;
&lt;/picture&gt;
&lt;figcaption class=&quot;caption&quot;&gt;Like a phoenix rising from the ashes: &lt;em&gt;Letter from BILL G&lt;/em&gt; in &lt;em&gt;MSX Magazine 永久保存版 2&lt;/em&gt; (Dec, 2003)&lt;/figcaption&gt;&lt;/figure&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;samegame&quot;&gt;SameGame&lt;/h2&gt;

&lt;p&gt;It seems that at some point Comoesta Sakamoto was swept up in the SameGame craze that happened in Japan during the mid-1990s. He wrote a strategy guide about how to play it, and published it in two minor variations: まきがめ必勝ガイド (&lt;a href=&quot;http://webcatplus.nii.ac.jp/webcatplus/details/book/2452434.html&quot;&gt;MaciGame Victory Guide&lt;/a&gt;, for Macintosh) and さめがめ必勝ガイド (&lt;a href=&quot;http://webcatplus.nii.ac.jp/webcatplus/details/book/2455181.html&quot;&gt;SameGame Victory Guide&lt;/a&gt;, for Windows/DOS).&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;さめがめ (&lt;a href=&quot;https://gamicus.fandom.com/wiki/SameGame&quot;&gt;SameGame&lt;/a&gt;) by Eiji “Kyoto” Fukumoto, is a variation of the original game in the genre: &lt;a href=&quot;https://www.asahi-net.or.jp/~ky6k-mrb/chainsht.htm&quot;&gt;Chain Shot&lt;/a&gt; by Kuniaki “Morisuke” Moribe (1985, same year as Tetris which would remain behind the iron curtain until 1987).&lt;/p&gt;

  &lt;p&gt;まきがめ (&lt;a href=&quot;/2023/05/04/macigame-user-created-graphics/&quot;&gt;MaciGame&lt;/a&gt;) was an expanded version for classic Macintosh that featured a GUI and customisable graphics. Between them the two games created a phenomenon of Tetris-level proportions.&lt;/p&gt;

  &lt;p&gt;There have been countless versions of the Chain Shot concept made over the years, most based on either SameGame or MaciGame, including one for Super Famicom (SNES) by Hudson which &lt;a href=&quot;https://retro-gamer.jp/?p=10059&quot;&gt;came about in an interesting way&lt;/a&gt;.&lt;/p&gt;

  &lt;p&gt;The goal of this type of game is to clear the board of blocks by clicking on groups of two or more, empty space is then removed vertical by the remaining blocks dropping down and horizontally by empty columns being replaced by their rightmost column. This means that over time blocks converge in the lower left of the play area.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;…I’ll leave it as an exercise for the reader to figure out which book cover is PC and which is Mac.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/comoesta-sakamoto-same-game-mac.jpg&quot; alt=&quot;MaciGame&quot; /&gt; &lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/comoesta-sakamoto-same-game-pc.jpg&quot; alt=&quot;SameGame&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;illustrator&quot;&gt;Illustrator&lt;/h2&gt;

&lt;p&gt;I have to mention the illustrator of all of these books, 能美勉 (Nomi Tsutomu, also known as: nomitsutomuwaku, NohVenWaku, nomitom). His surreal take on mid-century Japanese advertising illustrations used a combination of scans and Photoshop and gave all of Comoesta’s articles and books a very distinctive look.&lt;/p&gt;

&lt;p&gt;Again there is very little about Nomi online in 2023, but you can check out a couple of &lt;a href=&quot;https://web.archive.org/web/20001017115435/http://www.ne.jp/asahi/nomi/2106/index.html&quot;&gt;archived&lt;/a&gt; &lt;a href=&quot;http://www.illustrators-jp.net/dbase/dbase.php?start=91&amp;amp;end=100&amp;amp;ename=image,&amp;amp;values=%89%F9%82%A9%82%B5%82%A2%81E%83%8C%83g%83%8D%2C&quot;&gt;websites&lt;/a&gt;. Unfortunately his &lt;a href=&quot;https://www.instagram.com/nmt_waku/&quot;&gt;Instagram account @nmt_waku&lt;/a&gt; is private.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 19 Aug 2023 18:49:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/08/19/fake-steve-jobs-and-letters-from-bill-g/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/08/19/fake-steve-jobs-and-letters-from-bill-g/</guid>
        </item>
      
    
      
        <item>
          <title>Going back to the old (pre-X) Twitter iOS app</title>
          <description>&lt;p&gt;There are two main ways to do this. As of 2025 I recommend the first one, using a tweaked app, but I’ll leave the second one up for the sake of history as it still works, albeit more limited in use.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;using-a-tweaked-app&quot;&gt;Using a tweaked app&lt;/h2&gt;

&lt;p&gt;My current recommended way of doing this to sideload a tweaked version of the Twitter/X app.&lt;/p&gt;

&lt;p&gt;You’ll need a tweaked Twitter.ipa and the version I use is &lt;a href=&quot;https://github.com/ghl3m0n/FuckElon&quot;&gt;a version by ghl3m0n&lt;/a&gt; that also replaces all X branding with the bird.&lt;/p&gt;

&lt;p&gt;Tweaked apps have additional plugins and extensions added to them. The most common and useful tweak is BHTwitter, which will block ads and most bots whilst enabling some extra features. The only real downside to tweaked apps is that they don’t support deep linking like the original apps, but you can use the bundled Safari extensions and/or &lt;a href=&quot;https://www.opener.link&quot;&gt;Opener app&lt;/a&gt; to work around that.&lt;/p&gt;

&lt;p&gt;Then you will need to pick a method of installing, using &lt;a href=&quot;https://altstore.io&quot;&gt;AltStore&lt;/a&gt;, &lt;a href=&quot;https://appdb.to&quot;&gt;appdb&lt;/a&gt;, &lt;a href=&quot;https://sidestore.io&quot;&gt;SideStore&lt;/a&gt;, &lt;a href=&quot;https://github.com/khcrysalis/Feather&quot;&gt;Feather&lt;/a&gt;, &lt;a href=&quot;https://sideloadly.io&quot;&gt;Sideloadly&lt;/a&gt;, or similar. Depending which method you choose you may have to reinstall or reactivate the app from time to time.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;using-an-old-version-of-the-app&quot;&gt;Using an old version of the app&lt;/h2&gt;

&lt;p&gt;Here’s how you can downgrade to an older version of Twitter (pre-X changes) and install it in a way that means &lt;em&gt;it will not be automatically updated&lt;/em&gt;.&lt;/p&gt;

&lt;figure class=&quot;img-with-caption&quot;&gt;
&lt;picture&gt;
  &lt;source srcset=&quot;https://cdn.gingerbeardman.com/images/posts/twitter-old-installed.avif&quot; type=&quot;image/avif&quot; /&gt;
  &lt;source srcset=&quot;https://cdn.gingerbeardman.com/images/posts/twitter-old-installed.webp&quot; type=&quot;image/webp&quot; /&gt;
  &lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/twitter-old-installed.png&quot; alt=&quot;&quot; title=&quot;&quot; loading=&quot;lazy&quot; /&gt;
&lt;/picture&gt;
&lt;figcaption class=&quot;caption&quot;&gt;Twitter 9.66 (858339189) running on an iPhone Xs just now&lt;/figcaption&gt;&lt;/figure&gt;

&lt;h3 id=&quot;downloading-the-old-version&quot;&gt;Downloading the old version&lt;/h3&gt;

&lt;p&gt;This is the trickiest part of the process as it requires installing some old software and following a guide. But don’t worry—it’s not that difficult! You’ll need access to an old version of iTunes (so it’s most easily done using Windows) and about 15 minutes to carry out the steps.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/qnblackcat/How-to-Downgrade-apps-on-AppStore-with-iTunes-and-Charles-Proxy&quot;&gt;Follow this great step-by-step tutorial&lt;/a&gt;. It might seem complicated but it is quite easy. A high level summary of what is involved in the guide is as follows:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Install old iTunes &amp;amp; Charles Proxy&lt;/li&gt;
  &lt;li&gt;Configure intercepting of the latest app download&lt;/li&gt;
  &lt;li&gt;Change the version of the app to be downloaded&lt;/li&gt;
  &lt;li&gt;Download the old version&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Notes:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;id 858339189 (version 9.66) predates the rebrand to X&lt;/li&gt;
  &lt;li&gt;id 848443565 (version 9.7.2) predates Blue&lt;/li&gt;
  &lt;li&gt;id 840768123 (version 8.56) predates Spaces&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result of this process is a completely legitimate .ipa file, tied to your Apple ID in exactly the same way that apps normally are. As such, the resulting file can be installed on your device and once installed would be no different to an app you’ve downloaded directly from the App Store. This also means that if you share your .ipa with somebody else they would need to log in to your account using your Apple ID to do so, which is undesirable. Best if they download their own! Send them this blog post.&lt;/p&gt;

&lt;h3 id=&quot;avoiding-updates&quot;&gt;Avoiding updates&lt;/h3&gt;

&lt;p&gt;If you install the .ipa file onto your phone using Finder, iTunes, Apple Configurator it will install just fine. But, because of the metadata that is included the .ipa, it will be checked for updates and automatically updated soon after installation. We need to go deeper.&lt;/p&gt;

&lt;p&gt;There is a little-known method of installing apps on an iOS device which will prevent it from being checked for updates. I discovered this method &lt;a href=&quot;/2016/07/19/how-to-prevent-an-individual-ios-app-from-updating-forever/&quot;&gt;back in 2016&lt;/a&gt; when I used it to downgrade the eBay and Gmail Inbox apps.&lt;/p&gt;

&lt;h3 id=&quot;installing-the-app&quot;&gt;Installing the app&lt;/h3&gt;

&lt;p&gt;Before we begin, you don’t need to remove the current app you’re using. But best to make sure to backup any data you need from it regardless! You may, or may not, need to login once the old version of the app is reinstalled.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Copy your backup of .ipa somewhere where you can work on it&lt;/li&gt;
  &lt;li&gt;Open the .ipa with Archive Utility to decompress it&lt;/li&gt;
  &lt;li&gt;Expand the resulting folder until you go into the Payload folder&lt;/li&gt;
  &lt;li&gt;You’ll see Twitter.app (on macOS the icon has a “no entry sign” because it’s an iOS app)&lt;/li&gt;
  &lt;li&gt;Connect your device&lt;/li&gt;
  &lt;li&gt;Open Apple Configurator (you might need to &lt;a href=&quot;https://archive.org/details/apple-configurator&quot;&gt;use an old version&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Double click on your device (missing this will mean you can’t do step 8)&lt;/li&gt;
  &lt;li&gt;Click Add &amp;gt; App &amp;gt; Choose from my Mac…&lt;/li&gt;
  &lt;li&gt;Confirm you want to overwrite the old app&lt;/li&gt;
  &lt;li&gt;Wait for the app to install on your device&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You’re done!&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/twitter-old-payload.png&quot; alt=&quot;PNG&quot; title=&quot;Locating the Twitter .ipa Payload&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;questions&quot;&gt;Questions&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why can’t I add the app to my phone?&lt;/strong&gt;
    Either you missed step 7, or you need to &lt;a href=&quot;https://archive.org/details/apple-configurator&quot;&gt;use an older version of Apple Configurator&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why does downloading this way work?&lt;/strong&gt;
    iTunes used to be able to download apps this way, so we’re just persuading it to download a particular version. The app is attached to your Apple ID and totally legitimate, no funny business.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why does installing this way work?&lt;/strong&gt;
    Installing the payload directly means the App Store app has no record of the app being installed so it does not check for updates to it. You can confirm this by going to the App Store page for the app, where it will show it is yet to be downloaded.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Will the old app stop working at some point?&lt;/strong&gt;
    Eventually, yes. Older versions lack support for modern Twitter features but that can be a desirable feature depending on your point of view. But let’s enjoy the old experience for as long as we can.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I get help to do this?&lt;/strong&gt;
    No, sorry. You need to do it yourself for various reasons. It will take less than 1 hour to read all the steps, then follow them one-by-one.&lt;/p&gt;

&lt;p&gt;Long live the bird!&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 17 Aug 2023 18:39:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/08/17/going-back-to-the-old-pre-x-twitter-ios-app/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/08/17/going-back-to-the-old-pre-x-twitter-ios-app/</guid>
        </item>
      
    
      
        <item>
          <title>Automatically classifying the content of sound files using ML</title>
          <description>&lt;p&gt;Following on from yesterday’s &lt;a href=&quot;/2023/08/12/extracting-sounds-from-macromedia-director-files/&quot;&gt;extraction of old sound effects&lt;/a&gt;, I quickly realised I needed an easier way to search them as they came out of Director as unlabelled, numbered files. I can use QuickLook or a media player to quickly audition them, but how could I easily find the sample that contains the sound of running water or a horse trotting?&lt;/p&gt;

&lt;p&gt;I wondered if there was a way of using Machine Learning (ML) to automatically categorise sounds. It seemed like something that should be possible, especially given the recent explosion in “AI” (really: ML) tools. I quickly found Google’s AudioSet, which sounded like the perfect dataset:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;AudioSet consists of an expanding ontology of 632 audio event classes and a collection of 2,084,320 human-labeled 10-second sound clips drawn from YouTube videos. The ontology is specified as a hierarchical graph of event categories, covering a wide range of human and animal sounds, musical instruments and genres, and common everyday environmental sounds.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But the data set is only one half of the solution. You need to use the dataset to create a model and then run that model against your own data to get the required results. Thankfully, I found YAMNet:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;YAMNet is a deep net that predicts ~521 audio event classes from the AudioSet-YouTube corpus it was trained on.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I guess YAMNet is tracking behind AudioSet in terms of total categories, but it is good enough for me. Here is a &lt;a href=&quot;https://github.com/tensorflow/models/blob/master/research/audioset/yamnet/yamnet_class_map.csv&quot;&gt;list of all the classes&lt;/a&gt; of sounds it can recognise.&lt;/p&gt;

&lt;h2 id=&quot;lets-go&quot;&gt;Let’s go&lt;/h2&gt;

&lt;p&gt;I used the script described in &lt;a href=&quot;https://www.tensorflow.org/hub/tutorials/yamnet&quot;&gt;this tutorial&lt;/a&gt; as a starting point. I’m not a regular python user but using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pip&lt;/code&gt; to &lt;a href=&quot;https://www.tensorflow.org/install&quot;&gt;install tensorflow&lt;/a&gt;, along with any other missing imports, and after that it …just worked.&lt;/p&gt;

&lt;h2 id=&quot;getting-your-files-in-order&quot;&gt;Getting your files in order&lt;/h2&gt;

&lt;p&gt;According to the documentation all sound files need to be at a sample rate of 16000Hz. After getting some calssification results of “Silence”, I realised they also need to be 16-bit resolution. So I ran a quick &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sox&lt;/code&gt; command to create compliant copies of all my sounds. I’ll delete these when I’m done. Notice how I decided to trim sounds to a maximum length of 3 seconds. This helps speed things up and most sounds can still be recognised with such a short starting section.&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;find &lt;span class=&quot;nb&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-iname&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;*.wav&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-exec&lt;/span&gt; sox &lt;span class=&quot;o&quot;&gt;{}&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-c&lt;/span&gt; 1 &lt;span class=&quot;nt&quot;&gt;-r&lt;/span&gt; 16000 &lt;span class=&quot;nt&quot;&gt;-b&lt;/span&gt; 16 &lt;span class=&quot;o&quot;&gt;{}&lt;/span&gt;_16k.wav trim 0 00:03 &lt;span class=&quot;se&quot;&gt;\;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;optimisation&quot;&gt;Optimisation&lt;/h2&gt;

&lt;p&gt;Running the classifier works at about real-time, a few seconds per sound, but I noticed that it was leaving a lot of my CPU unused. This struck me as a prime candidate for parallelisation, which is pretty easy on the command line. I used the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;parallel&lt;/code&gt; command to scale up the classification to use all 10-cores of the M1 Pro CPU in my 2021 MacBook Pro.&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;find &lt;span class=&quot;nb&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-iname&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;*.wav&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-exec&lt;/span&gt; parallel python3 classify.py &lt;span class=&quot;o&quot;&gt;{}&lt;/span&gt; ::: &lt;span class=&quot;o&quot;&gt;{}&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\+&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;As I type my computer is making short order of the task, whilst remaining perfectly responsive, if a little warm. Final speed for me is one sound every ~0.85 seconds.&lt;/p&gt;

&lt;h2 id=&quot;python-script&quot;&gt;Python Script&lt;/h2&gt;

&lt;noscript&gt;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/9e9bde623673ed2f50aeb15e97aae4a3&quot;&gt;View the source code as a Gist&lt;/a&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;script src=&quot;https://gist.github.com/gingerbeardman/9e9bde623673ed2f50aeb15e97aae4a3.js&quot;&gt;&lt;/script&gt;

&lt;h2 id=&quot;creating-my-sfx-library&quot;&gt;Creating my SFX Library&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://getsoundly.com&quot;&gt;Soundly&lt;/a&gt; is a sort of iTunes for sound effects. It’s an app that enables easy, automatic organisation of files, quick searching of metadata, painless playback/auditioning, non-destructive edits, and simple exporting of the final sounds. The free version allows a local library of 10,000 files which is more than enough for my usage. I’m not affiliated with them in any way, but they offer a free version and a &lt;a href=&quot;https://getsoundly.com/news/soundly-promo-code-free/&quot;&gt;1-month free trial of their paid version&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As you add your local folder of files it allows you to import a (semicolon-separated) .csv file containing additional metadata. It’s here that I point it to the file that was generated by the classifier. The categories are imported as the description of the sound, and are able to be searched. Perfect!&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 13 Aug 2023 17:01:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/08/13/automatically-classifying-the-content-of-sound-files-using-ml/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/08/13/automatically-classifying-the-content-of-sound-files-using-ml/</guid>
        </item>
      
    
      
        <item>
          <title>Extracting sounds from Macromedia Director files</title>
          <description>&lt;p&gt;For my latest “quick” &lt;a href=&quot;https://play.date&quot;&gt;Playdate&lt;/a&gt; project—a remaster of a ~1997 web game by &lt;a href=&quot;https://lostmediawiki.com/Thoru_Yamamoto_works_(partially_found_interactive_media;_1990s)&quot;&gt;Thoru Yamamoto&lt;/a&gt;—I decided to add sound effects. In order to keep it as authentic as possible I decided to use only sound effects created by Thoru Yamamoto that were used in his other productions.&lt;/p&gt;

&lt;p&gt;The largest collection of sounds I could think of were those included in his Macromedia Director web experiments which include everything from short animations, through games and interactive toys, to abstract slideshows. The problem is, these Director files are tricky to deal with some 25 years later.&lt;/p&gt;

&lt;h2 id=&quot;halt-and-catch-fire&quot;&gt;Halt and Catch Fire&lt;/h2&gt;

&lt;p&gt;A bit of reading and some help from &lt;a href=&quot;https://www.mistys-internet.website&quot;&gt;Misty De Méo&lt;/a&gt; led me to &lt;a href=&quot;https://github.com/ProjectorRays/ProjectorRays&quot;&gt;ProjectorRays&lt;/a&gt; which can convert a protected .dcr file into an editable .dir file, and also allows saving of all the individual chunks that comprise each file. Think of it as one chunk for each piece of graphics, sound, and so on.&lt;/p&gt;

&lt;p&gt;Once you’ve converted the .dcr to .dir you can open the file in, say, &lt;a href=&quot;https://vinizinho.net/projects/shockwave-rip&quot;&gt;Macromedia Director 2004 and use CastRipperTool&lt;/a&gt; to export sounds and graphics and more. But it’s a very manual process and the whole setup is prone to crashing. Crucially, it won’t open some older Director movies so this wasn’t a good enough solution for me.&lt;/p&gt;

&lt;h2 id=&quot;chunks&quot;&gt;Chunks&lt;/h2&gt;

&lt;p&gt;I looked to the chunks that had been dumped by ProjectorRays and some quick experimentation showed that the ‘&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;snd &lt;/code&gt;’ chunks contained raw PCM audio date with a bespoke header. Loading these into something like ocenaudio wave editor was proof enough, but I would need to figure out some of the header to see if I could get the correct sample rate of each file.&lt;/p&gt;

&lt;p&gt;With a bit of help bouncing ideas off &lt;a href=&quot;https://hikari.noyu.me&quot;&gt;hikari_no_yume&lt;/a&gt; in a &lt;a href=&quot;https://github.com/hikari-no-yume/dream-sparer/issues/1&quot;&gt;bug report&lt;/a&gt; on one of their tools I figured out the location of the sample rate. Interestingly, the values were unexpected and not the usual values 11025, 22050, etc. It turns out that classic Apple Macintosh used some slightly &lt;a href=&quot;https://whitefiles.org/dta/pgs/c08.htm&quot;&gt;different sample rate values&lt;/a&gt;: 11127, 22254, etc.&lt;/p&gt;

&lt;p&gt;Using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xxd&lt;/code&gt; tool I dumped the relevant section of the headers of 1163 sounds from 105 .dcr files. The breakdown in sample rates found was as follows:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Rate (Hz)&lt;/th&gt;
      &lt;th&gt;Hex&lt;/th&gt;
      &lt;th&gt;Quantity Found&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;7,418&lt;/td&gt;
      &lt;td&gt;0x1cfa&lt;/td&gt;
      &lt;td&gt;1&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;11,127&lt;/td&gt;
      &lt;td&gt;0x2b77&lt;/td&gt;
      &lt;td&gt;616&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;22,050&lt;/td&gt;
      &lt;td&gt;0x5622&lt;/td&gt;
      &lt;td&gt;31&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;22,254&lt;/td&gt;
      &lt;td&gt;0x56ee&lt;/td&gt;
      &lt;td&gt;515&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;The lack of any unexpected sample rate values was further proof that this was the real deal.&lt;/p&gt;

&lt;h2 id=&quot;shell-script&quot;&gt;Shell script&lt;/h2&gt;

&lt;p&gt;Armed with this information I decided to write a short shell script that would do the following:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;extract the sample rate from the ‘&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;snd &lt;/code&gt;’ chunk&lt;/li&gt;
  &lt;li&gt;create a trimmed raw pcm file excluding the 78-byte header&lt;/li&gt;
  &lt;li&gt;use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sox&lt;/code&gt; to add a new WAV header using the correct sample rate&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This script allows me to batch process all the audio and that’s much more to my liking: it captures everything compared to CastRipperTool and it’s a lot quicker.&lt;/p&gt;

&lt;p&gt;So, dump your chunks using ProjectorRays and then call my script like this:&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;find &lt;span class=&quot;nb&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-iname&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;*.bin&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-exec&lt;/span&gt; ./bin2wav.sh &lt;span class=&quot;o&quot;&gt;{}&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;noscript&gt;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/1e6170d2652352bf30623b2a6c8d12fd&quot;&gt;View the source code as a Gist&lt;/a&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;script src=&quot;https://gist.github.com/gingerbeardman/1e6170d2652352bf30623b2a6c8d12fd.js&quot;&gt;&lt;/script&gt;

&lt;p&gt;Notes:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;I’m assuming 8-bit, mono, unsigned PCM data in the ‘&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;snd &lt;/code&gt;’ chunks and have not found anything else in them.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://sox.sourceforge.net/sox.html&quot;&gt;SoX&lt;/a&gt; (Sound eXchange, the Swiss Army knife of audio manipulation) requires the .raw extension for raw PCM audio data, it will refuse to process the files without it.&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 12 Aug 2023 19:42:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/08/12/extracting-sounds-from-macromedia-director-files/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/08/12/extracting-sounds-from-macromedia-director-files/</guid>
        </item>
      
    
      
        <item>
          <title>“The Famous F40” vector illustration by David Rumfelt</title>
          <description>&lt;p&gt;I was looking through some old Macintosh CD-ROMs, searching for my usual things that I do whenever I add new discs to my collection: hanafuda, specific artists, favourite software, plugins for said favourite software, and so on. Whilst I was deep in the filesystem I stumbled across some old sample files from Deneba Canvas and noticed how they were all credited to the artist.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/deneba-canvas-david-rumfelt.png&quot; alt=&quot;Canvas Title was produced entirely in Canvas 2.1 by David Rumfelt, Deneba Software. © 1990 Deneba Systems, Inc.&quot; title=&quot;Canvas Title was produced entirely in Canvas 2.1 by David Rumfelt, Deneba Software. © 1990 Deneba Systems, Inc.&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Intrigue got the better of me so I did a quick google and came up with &lt;a href=&quot;https://www.canvasgfx.com/blog/driven-by-design-david-rumfelt-graphic-artist&quot;&gt;a post on the Canvas GFX website&lt;/a&gt; (yes, the software still exists!) about David Rumfelt and his most famous work: a cutaway illustration of a Ferrari F40.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Thanks to my &lt;a href=&quot;https://www.patreon.com/gingerbeardman&quot;&gt;Patreon&lt;/a&gt; supporters for their help and encouragement with this type of content.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Going back to the &lt;a href=&quot;https://archive.org/details/GRAVIS_CD_1_94&quot;&gt;files on the CD&lt;/a&gt;, I found the artwork for The Famous F40! It was alongside another detailed cutaway piece called The Famous Harley. In the folder containing the artwork files there was an important looking Read Me document:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Effectively immediately, all uses of the F-40 and Harley image by Deneba or third-party vendors MUST include one of the following tag lines in the credits: &lt;strong&gt;“Original art by David Kimble. Electronically re-created in Canvas by Deneba Software”&lt;/strong&gt; or &lt;strong&gt;“Original art by David Kimble. Electronically re-created in Canvas by Deneba Software artist Dave Rumfelt.”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These days we would just call it a vector illustration, but at the time I guess there must have been some fun discussions as to both the legality of this piece of work—a copy of a piece of art originally created by somebody else—and also how it should be described to minimise &lt;a href=&quot;https://www.canvasgfx.com/blog/driven-by-design-david-rumfelt-graphic-artist&quot;&gt;the outrage David describes&lt;/a&gt; when he recalls creating the piece.&lt;/p&gt;

&lt;figure class=&quot;img-with-caption&quot;&gt;
&lt;picture&gt;
  &lt;source srcset=&quot;https://cdn.gingerbeardman.com/images/posts/deneba-canvas-david-rumfelt-the-famous-f40-exported.avif 1x, https://cdn.gingerbeardman.com/images/posts/deneba-canvas-david-rumfelt-the-famous-f40-exported-retina.avif 2x&quot; type=&quot;image/avif&quot; /&gt;
  &lt;source srcset=&quot;https://cdn.gingerbeardman.com/images/posts/deneba-canvas-david-rumfelt-the-famous-f40-exported.webp 1x, https://cdn.gingerbeardman.com/images/posts/deneba-canvas-david-rumfelt-the-famous-f40-exported-retina.webp 2x&quot; type=&quot;image/webp&quot; /&gt;
  &lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/deneba-canvas-david-rumfelt-the-famous-f40-exported.png&quot; srcset=&quot;https://cdn.gingerbeardman.com/images/posts/deneba-canvas-david-rumfelt-the-famous-f40-exported-retina.png 2x&quot; onload=&quot;doScroll();&quot; alt=&quot;&quot; title=&quot;&quot; loading=&quot;lazy&quot; /&gt;
&lt;/picture&gt;
&lt;figcaption class=&quot;caption&quot;&gt;Original art by David Kimble. Electronically re-created in Canvas by Deneba Software artist Dave Rumfelt.&lt;/figcaption&gt;&lt;/figure&gt;

&lt;h2 id=&quot;time-travel&quot;&gt;Time travel&lt;/h2&gt;

&lt;p&gt;The F40 is a mind blowing piece of work and is reported to feature around 28,000 vector objects. It’s a very good imitation of the &lt;a href=&quot;https://uk.motor1.com/news/462763/ferrari-f40-straight-piped-autobahn/&quot;&gt;original illustration&lt;/a&gt; by the legendary &lt;a href=&quot;https://memory-alpha.fandom.com/wiki/David_A._Kimble&quot;&gt;David Kimble&lt;/a&gt; on which it is based.&lt;/p&gt;

&lt;p&gt;I recorded a short video showing me zooming, scrolling, and watching it redraw. Finally I ungroup everything a handful of times to count the total number of vector objects. This is running in an emulator of a Macintosh with System 7.5 and 64MB RAM, though the illustration only requires around 8MB RAM. Maybe this will transport you back through time to when you were young!?&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 4/3;&quot; videoid=&quot;5HMUp6vmc4Q&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;p&gt;Back in the late 1980s and early 1990s Canvas—and most other contemporary illustration software—did not draw lines smoothly using the process known as &lt;a href=&quot;https://en.wikipedia.org/wiki/Spatial_anti-aliasing&quot;&gt;anti-aliasing&lt;/a&gt;. This was for a combination of performance reasons (you need the artwork to redraw quickly) and hardware limitations (computers didn’t have GPU acceleration and displays often ran with limited colours). The resulting image has lines with aliasing—a distinct pixel stepping—and gradient fills that are not very smooth. Though I feel that a lot of the gradient fills in this piece are deliberately using banding for similar technical reasons.&lt;/p&gt;

&lt;p&gt;After playing around in Canvas for a while, I decided to see if I could get a higher quality version of the file. Rather than struggle making 30-year-old software do something it would rather not, I exported the Canvas file as an EPS and moved to modern macOS. Importing it into modern &lt;a href=&quot;https://flyingmeat.com/acorn/&quot;&gt;Acorn&lt;/a&gt; allowed me to export a higher quality, smooth, anti-aliased version of the illustration that you see at the top of this page. But why stop there?&lt;/p&gt;

&lt;h2 id=&quot;scrollable-20-megapixel-version&quot;&gt;Scrollable 20-megapixel version&lt;/h2&gt;

&lt;p&gt;You can scroll around this image or right click and open it in a new tab to see it in all its glory.&lt;/p&gt;

&lt;iframe id=&quot;megapixel&quot; width=&quot;740&quot; height=&quot;555&quot; style=&quot;overflow:scroll;&quot; src=&quot;/files/deneba-canvas-david-rumfelt-the-famous-f40-exported-megapixel.html&quot; title=&quot;The Famous F40&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 id=&quot;notes&quot;&gt;Notes&lt;/h2&gt;

&lt;p&gt;Eagle-eyed viewers may notice that this version of the F40 differs slightly from &lt;a href=&quot;https://www.canvasgfx.com/blog/driven-by-design-david-rumfelt-graphic-artist&quot;&gt;the one shown on the Canvas GFX web page&lt;/a&gt;. The Canvas file I have from 1994 is some missing elements, such as the metalwork between the petrol cap and petrol tank. It is also comprised of around 16,000 vector objects, around two thirds of the reported number. Also of note is the image on the Canvas GFX website appears to be either squished horizontally or stretched vertically.&lt;/p&gt;

&lt;h2 id=&quot;further-reading&quot;&gt;Further reading&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.canvasgfx.com/blog/driven-by-design-david-rumfelt-graphic-artist&quot;&gt;Driven by Design – David Rumfelt, Graphic Artist&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://uk.motor1.com/news/462763/ferrari-f40-straight-piped-autobahn/&quot;&gt;Gallery: Ferrari F40 Prototype cutaway sketch by David Kimble&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://motors.mega.mu/news/6-ferrari-f40-facts-car-nerds-only-20170303.html&quot;&gt;Some Ferrari F40 facts for car nerds only&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;downloads&quot;&gt;Downloads&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://cdn.gingerbeardman.com/files/deneba-canvas-david-rumfelt-the-famous-f40.pdf&quot;&gt;The Famous F40, PDF file&lt;/a&gt; (2MB, direct download)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cdn.gingerbeardman.com/files/deneba-canvas-david-rumfelt-the-famous-f40.sit&quot;&gt;The Famous F40, Canvas file as SIT&lt;/a&gt; (10MB, direct download)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/GRAVIS_CD_1_94&quot;&gt;The Famous F40, Canvas file on CD-ROM&lt;/a&gt; (400MB, link to download page)&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 15 Jul 2023 17:25:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/07/15/the-famous-f40-vector-illustration/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/07/15/the-famous-f40-vector-illustration/</guid>
        </item>
      
    
      
        <item>
          <title>The first colour Playdate game?</title>
          <description>&lt;blockquote&gt;
  &lt;p&gt;This blog post assumes some familiarity with &lt;a href=&quot;https://play.date&quot;&gt;Playdate&lt;/a&gt; (a handheld game console with a cool crank control scheme), &lt;a href=&quot;https://play.date/dev/&quot;&gt;Playdate SDK&lt;/a&gt; and the &lt;a href=&quot;https://www.lua.org/manual/5.4/&quot;&gt;Lua programming language&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;During the development of my forthcoming Playdate game &lt;em&gt;&lt;a href=&quot;/2023/06/26/ball-und-panzer-golf-making-a-playdate-game-in-a-week/&quot;&gt;Ball und Panzer Golf&lt;/a&gt;&lt;/em&gt; (tentative title), I wanted to be able to draw to the debug layer from anywhere in my code. The SDK allows you to draw to the debug layer only from the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;drawDebug&lt;/code&gt; function.&lt;/p&gt;

&lt;p&gt;After filing a &lt;a href=&quot;https://devforum.play.date/t/additional-way-to-do-debug-draw-from-anywhere-in-code/11735&quot;&gt;feature request&lt;/a&gt; I thought about it some more and &lt;a href=&quot;&quot;&gt;came up with a workaround&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. (on initialisation) create a full screen opaque image&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-lua highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;local&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;gfx&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;playdate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;graphics&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;local&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;disp&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;playdate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;display&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;overlay&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;gfx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;disp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;getWidth&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;disp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;getHeight&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;gfx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;kColorBlack&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;2. (anywhere in your code) draw into that using pushContext (or lockFocus)&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-lua highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;gfx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pushContext&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;overlay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;gfx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;setColor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;gfx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;kColorWhite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;gfx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;setLineWidth&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;gfx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;drawCircleAtPoint&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;-- draw some debug stuff into our overlay image&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;gfx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;popContext&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;3. (in debugDraw function) draw the single image of our collected debug drawing&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-lua highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;playdate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;debugDraw&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;overlay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;draw&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;-- draw our overlay image containing all debug draws&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;overlay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;clear&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;gfx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;kColorBlack&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;-- blank overlay ready for the next update&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This means I can draw debug info about a thing from the same code and logic responsible for that thing. For me, with this game, that makes a lot of sense.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/playdate-debugdraw.png#playdate&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;abusing-the-system&quot;&gt;Abusing the system&lt;/h2&gt;

&lt;p&gt;After debugging the positions of everything during my collision logic, it occurred to me that I could abuse this system to give the game a colour overlay.&lt;/p&gt;

&lt;p&gt;I do this by using the debug draw in the opposite way to how it’s supposed to be used. Instead of drawing just the debug information, I set the hole screen to draw in colour and then—in the same way as above—at various points in my code &lt;em&gt;I punch out areas of the screen I do not want drawn in colour&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;I’m not quite drawing everything twice, as the areas that are punched out are simple shapes approximating the elements in my game. Plus, this is made easier for me because everything in the game is already being drawn only with filled shapes.&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 5/3;&quot; videoid=&quot;fqv1kwfW5r8&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;p&gt;One interesting thing about this technique is that changing the contrast (dither pattern opacity) of the golf greens only when running in “colour mode” on the Simulator made things look better. That’s to say that adding colour also adds an extra complexity with regards to contrast. I think that’s the only change to the graphics I’ve done so far but there is opportunity for more.&lt;/p&gt;

&lt;p&gt;When I sent a build out to testers I put a cryptic note in the changelog “added: chartreuse tinted glasses mode” but only one tester figured out what it was referring to. I had asked ChatGPT to suggest a colour that sounds like a shade of red, but is actually a shade of green: it suggested chartreuse (and so I use the “proper” chartreuse hex colour for the base colour of my green layer).&lt;/p&gt;

&lt;h2 id=&quot;multi-colour&quot;&gt;Multi-colour?&lt;/h2&gt;

&lt;p&gt;This approach could be taken further if the Playdate SDK allowed multiple colours to be used for debug drawing, &lt;a href=&quot;https://devforum.play.date/t/support-mutiple-colors-in-debugdraw/5848&quot;&gt;keep an eye on this feature request&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;physical-overlays&quot;&gt;Physical overlays&lt;/h2&gt;

&lt;p&gt;Back in October 2021 I bought transparency film in a range of colours to make a physical screen overlay, inspired by early arcade games like Space Invaders and the Vectrex gaming system, which worked but is obviously more hassle as the transparency picks up lint and gets dirty really quickly. This split of blue/green was for sky/grass in a 3D golf game.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/playdate-physical-overlays.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;further-reading&quot;&gt;Further reading&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/06/26/ball-und-panzer-golf-making-a-playdate-game-in-a-week/&quot;&gt;Ball und Panzer Golf: making a Playdate game in a week&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 09 Jul 2023 12:59:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/07/09/the-first-colour-playdate-game/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/07/09/the-first-colour-playdate-game/</guid>
        </item>
      
    
      
        <item>
          <title>Beyerdynamic Blue Byrd (1st generation) battery replacement</title>
          <description>&lt;p&gt;I’ve had a pair of Beyerdynamic Blue Byrd 1st generation bluetooth earbud headphones since June 2020. They are great Bluetooth headphones but were recalled just after I bought them. Somebody got too sweaty and managed to somehow burn themselves on the headphone wire. Given that no replacement was being offered I refused to send mine back in the recall. I don’t exercise with mine so I figured I’d be safe enough and I have been.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Warning: I’d like to take the opportunity to mention how bad Beyerdynamic customer support is: absolutely atrocious. Everybody I dealt with over the phone were really aggressive.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The headphones have a companion app that you can do a hearing test with, and you can supplement that one with a second test through the &lt;a href=&quot;https://mimi.io/mimi-hearing-test-app&quot;&gt;Mimi hearing test app&lt;/a&gt;. The results can be used to personalised the sound that is produced, counteracting any hearing loss you have. For me, it seems to amplifies sound in the frequency range of my age-related hearing loss and tinnitus so that I can hear sounds I can’t hear so clearly using normal headphones. It works well and the sound is really great. A short while after the recall official support for upgrading the firmware was pulled from the app, but everything else continues to work as well as I need it to.&lt;/p&gt;

&lt;h2 id=&quot;problem&quot;&gt;Problem&lt;/h2&gt;

&lt;p&gt;After three years the expected battery life was down from around 6 hours to perhaps 2 or 3 hours at best. To give you an idea of what an inconvenience this is: I’d have to go into a movie with a full charge or they’d run out part way through. I looked around for a replacement set but they’re hard to come by and I don’t like the design of the 2nd generation model so I decided to see if I could change the batteries myself. I watched some YouTube videos and it seemed doable!&lt;/p&gt;

&lt;p&gt;I couldn’t find any direct replacements, the &lt;em&gt;3.7V VDL 53mAh 410920 lithium-ion&lt;/em&gt; seem unobtainable in 2023 and I needed two of them. I eventually settled on two &lt;em&gt;3.7V 80mAh 401119 lithium-polymer&lt;/em&gt; batteries, of no particular brand, but from a reputable eBay seller. They are pretty much identical sizes—roughly 2cm x 1cm x 0.4cm—and are a straight swap. The new batteries have a higher power rating so I’m hoping to get longer usage between charges: we’ll see.&lt;/p&gt;

&lt;h2 id=&quot;lets-do-this&quot;&gt;Let’s do this!&lt;/h2&gt;

&lt;p&gt;The battery cover compartments separate by pulling apart—carefully—perpendicular to the seam (so, each half directly away from each other and the line of the wire). One battery, I think the furthest from the remote, has two wires: ground and positive. The other battery, I think closest to the remote, has three wires: ground, positive and negative. Just desolder the existing batteries and solder the new batteries in their place.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Warning: the remote itself doesn’t need to be opened, as it contains only a small circuit board with surface mounted buttons, the USB-C charging socket, and related bluetooth electronics. It opens with a similar process to the battery covers, but I found that it is more easily damaged (and I did damage mine) so I would recommend leaving well enough alone!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;All in all replacing the batteries was pretty straight forward if you have the right tools, I recommend at least a magnifier or preferably microscope screen, and a good hot soldering iron. My friend &lt;a href=&quot;https://twitter.com/daver888&quot;&gt;Dave&lt;/a&gt; had all the gear which made the job easy. So, thanks to him!&lt;/p&gt;

&lt;p&gt;Initial usage with the new batteries is encouraging. In a week or two I’ll edit this blog post with the sort of usage time I’m getting.&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;ktpNqWAlB0s&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;p&gt;Here’s a little bit of video showing me unsoldering one of the original batteries. Everything is tiny!&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 30 Jun 2023 11:18:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/06/30/beyerdynamic-blue-byrd-replacement-batteries/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/06/30/beyerdynamic-blue-byrd-replacement-batteries/</guid>
        </item>
      
    
      
        <item>
          <title>Ball und Panzer Golf: making a Playdate game in a week</title>
          <description>&lt;p&gt;I’ve been following the X68000 Z mini computer since it’s announcement in the hope that it will bring new activity to the X68000 scene and it seems to be having that effect. In one video from the recent 「68の日」(“68 Day”, named after the date written in Japanese order, 6-8, that’s 8th June the most special day of the year for X68000 fans) &lt;a href=&quot;https://twitter.com/gingerbeardman/status/1669909753592512512?s=61&amp;amp;t=vJGphXuN310nHUu1fN6c7Q&quot;&gt;I spotted&lt;/a&gt; a interesting looking single screen golf game:&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;Nwte3wm6lzo&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;h2 id=&quot;hello-kata68k&quot;&gt;Hello kata68k&lt;/h2&gt;

&lt;p&gt;It was Ball und Panzer Golf an indie/doujin game by &lt;a href=&quot;https://twitter.com/kata68k&quot;&gt;@kata68k&lt;/a&gt; for the Sharp X68000 series of Japanese personal computers and the recent &lt;a href=&quot;https://www.zuiki.co.jp/products/x68000z/&quot;&gt;&lt;em&gt;Zuiki X68000 Z&lt;/em&gt;&lt;/a&gt; mini system, a new emulator based reimagining of the original classic computer. The name is a pun on the anime series &lt;a href=&quot;https://en.wikipedia.org/wiki/Girls_und_Panzer&quot;&gt;&lt;em&gt;Girls und Panzer&lt;/em&gt;&lt;/a&gt; and its shortened version is &lt;em&gt;BuPG&lt;/em&gt; which I assume is a pun on &lt;em&gt;PUBG&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;kata68k’s game, as the name implies, is golf but with a tank. It was &lt;a href=&quot;https://twitter.com/kata68k/status/1634209609069076480&quot;&gt;created in May 2023 and fine tuned for a few weeks&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/kata68k/status/1666099628947968006&quot;&gt;released in time for “68 Day”&lt;/a&gt;. It’s a single player game where you use the tank to shoot holes-in-one on a golf course and try to destroy all flags. All this to say it plays like golf, kinda, but with a focus on high scores.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Aside: my favourite source of X68000 content is the &lt;a href=&quot;https://www.youtube.com/user/pipipicpsf&quot;&gt;&lt;em&gt;PipitanTV&lt;/em&gt; YouTube channel&lt;/a&gt;, run by &lt;a href=&quot;https://twitter.com/pipixvi&quot;&gt;@pipixvi&lt;/a&gt;, which has a &lt;a href=&quot;https://www.youtube.com/watch?v=FMrsHfuuTR8&amp;amp;t=22s&quot;&gt;longer, screen capture video&lt;/a&gt; of Ball und Panzer Golf.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I played Ball und Panzer Golf v0.94 using an X68000 emulator and was instantly hooked, by the strange mashup concept and also by the scoring mechanisms that were involved. Kata’s game design values and methods align with my own to a surprising degree. kata68k grew up with the X68000 much like I grew up with another Motorola 68000-based computer: the Atari ST. We’re roughly the same age and have similar interests in many ways.&lt;/p&gt;

&lt;p&gt;Anyway, I had great fun figuring out the different types of shots and opportunities to increase my scoring ability during my few plays of the game. Once I’d figured them out, it became a task of improving my skill controlling the tank and the shot power. The shot mechanism itself is worthy of a mention: there is no real charging of the shot and the ball starts to move immediately. What you do control is the moment the ball starts to come back down to Earth. It’s a very strange way of controlling the ball, but oddly satisfying. It’s reminiscent of the two tap system that sets power in most golf games, but at the same time feels completely alien.&lt;/p&gt;

&lt;h2 id=&quot;enter-playdate&quot;&gt;Enter Playdate&lt;/h2&gt;

&lt;p&gt;I currently spend my time creating games for &lt;a href=&quot;https://play.date&quot;&gt;Playdate&lt;/a&gt;, a handheld gaming system with a black and white screen and a unique crank control that can be used as a method of input. Whilst on a walk in the park I couldn’t stop thinking of kata68k’s game and how it might work on Playdate. When I got back to my computer I wrote a little bit of Lua code to draw an elliptical golf green on screen, then added a hole, a flag pole, and a flag with a number on it. Then I added a loop to generate random positions and drew 18 holes, adjusting the size so they all fitted a bit better. It might just work.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/ball-und-panzer-golf-01.png#playdate&quot; alt=&quot;PNG&quot; title=&quot;The first 18 holes, eat your heart out &amp;lt;em&amp;gt;Pebble Beach no Hatou&amp;lt;/em&amp;gt;!&quot; /&gt;&lt;/p&gt;

&lt;p&gt;After a quick dinner, it was time to draw the tank. I really didn’t want to slow down my pace of progress so I decided to keep drawing the graphical elements in code using filled shapes rather then have to draw a tank in pixels. Another option would have been to use one of the cars from my game &lt;a href=&quot;/2021/08/23/daily-driver-teaser-artwork/&quot;&gt;Daily Driver&lt;/a&gt;, but the path of least resistance was to draw a filled ellipse along with a line to show the turret position.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/ball-und-panzer-golf-02.png#playdate&quot; alt=&quot;PNG&quot; title=&quot;Rudimentary tank and turret drawn using an filled ellipse and a thick line&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;day-1&quot;&gt;Day 1&lt;/h2&gt;

&lt;p&gt;That first day everything fell into place perfectly, with little friction and no refactoring. I started from a blank file and wrote just under 400 lines of code. The two most complicated elements were the randomised background and limiting the tank to its circular area, but I’d done similar things before so there was no problem solving involved, just pure implementation. In fact, a lot of this quick prototype made use of tricks and techniques I’d figured out over the past few years of Playdate development, in particular during the development of my game &lt;a href=&quot;/tag/dailydriver/&quot;&gt;Daily Driver&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;At the end of the first day you could drive the tank around the screen, fire the ball at an angle selected using the crank or d-pad, and when you run out of balls it would trigger game over. What it didn’t have is any logic that would collide the ball with the holes, point scoring, or any sort of win state. For some reason at this point I thought it would be cool to have a black tank with three wheels.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/ball-und-panzer-golf-03.gif#playdate&quot; alt=&quot;GIF&quot; title=&quot;The state of the game the end of the first day&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;day-1-timeline&quot;&gt;Day 1: Timeline&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Time&lt;/th&gt;
      &lt;th&gt;Event&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;15:40&lt;/td&gt;
      &lt;td&gt;draw a single “hole”: flag, hole, green&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;16:00&lt;/td&gt;
      &lt;td&gt;loop to draw 18 holes&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;17:00&lt;/td&gt;
      &lt;td&gt;(dinner)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;18:00&lt;/td&gt;
      &lt;td&gt;draw tank&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;18:20&lt;/td&gt;
      &lt;td&gt;(ask permission from kata68k)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;19:00&lt;/td&gt;
      &lt;td&gt;background (interesting use of Perlin and random)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;20:00&lt;/td&gt;
      &lt;td&gt;add controls to tank&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;20:10&lt;/td&gt;
      &lt;td&gt;(send update to kata68k)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;21:00&lt;/td&gt;
      &lt;td&gt;limit tank to circular area (tricky but fun)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;22:00&lt;/td&gt;
      &lt;td&gt;ball moving&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;22:10&lt;/td&gt;
      &lt;td&gt;(kata68k confirms he’s OK with my version)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;22:30&lt;/td&gt;
      &lt;td&gt;add game states&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;23:00&lt;/td&gt;
      &lt;td&gt;add ball height capability&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;23:45&lt;/td&gt;
      &lt;td&gt;(send update to kata68k)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;00:26&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;https://twitter.com/gingerbeardman/status/1670573820581650434&quot;&gt;tweet about it&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;week-1&quot;&gt;Week 1&lt;/h2&gt;

&lt;p&gt;The following day I added a first draft of collisions and scoring. There was slower progress, but it was still very steady with no problems encountered. I was keenly aware that the collision and scoring were very naïve and that I would have to refine and improve them going forward. But, regardless, at the end of the second day it was possible to play a complete round of tank golf!&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/ball-und-panzer-golf-04.gif#playdate&quot; alt=&quot;GIF&quot; title=&quot;How the game was shaping up at the end of the second day&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The next two days consisted of fine tuning, polishing, play testing, bug fixing, adding sound effects, and so on. I even managed to record a GIF where I got all 18 flags …my first speed run!? I also received some great early encouragement and feedback from Playdate Squad community members: Donald &lt;a href=&quot;https://twitter.com/Guv_Bubbs&quot;&gt;@Guv_Bubbs&lt;/a&gt;, Steve &lt;a href=&quot;https://twitter.com/ScenicSoftware&quot;&gt;@ScenicSoftware&lt;/a&gt;, Atsu &lt;a href=&quot;https://twitter.com/SquidGodDev&quot;&gt;@SquidGodDev&lt;/a&gt;, Neven &lt;a href=&quot;https://twitter.com/mrgan&quot;&gt;@neven&lt;/a&gt; and of course &lt;a href=&quot;https://twitter.com/kata68k&quot;&gt;@kata68k&lt;/a&gt; himself! The game was shaping up nicely and coming together very quickly.&lt;/p&gt;

&lt;p&gt;Opportune timing meant that I could get the game in the hands of some testers on a live stream, over at IGDA Twin Cities (MN, USA) as part of their monthly Playtest. Thanks to &lt;a href=&quot;https://twitter.com/Mark_LaCroix&quot;&gt;Mark LaCroix&lt;/a&gt; for sorting that out! It was great to watch them play the game for the first time as they discovered the details of gameplay, mechanics, controls, and scoring! I even spotted a bug.&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;qZq3-N1MczA&quot; params=&quot;start=3837&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;p&gt;For the rest of the week I polished and played, addressing areas that I thought could be improved. I added accessibility improvements, more opportunities to score, better hole randomisation, even wind effects, and so much more besides.&lt;/p&gt;

&lt;p&gt;For the last couple of days of the week I kept release notes, as I felt the pace of progress slowing down towards the end of my self-imposed deadline of one week. I would categorise most changes in those final days as either quality of life improvements or minor bug fixes.&lt;/p&gt;

&lt;p&gt;I had not optimised any of the code and was targeting the default 30 frames per second. On the final evening I optimised all text drawing in my main update path, as I could see that was responsible for a huge portion of where my game was spending its time, with the CPU pegged at 100% and the frame rate not able to hit the target 30fps. So the flags with numbers on were pre-rendered as images during initialisation, and the HUD is drawn only when its contents change, and the image is cached for use at other times. These two small and quick optimisations reduced the CPU usage by 20% and put me at a solid 30fps.&lt;/p&gt;

&lt;p&gt;There are many more optimisations to be made but this is not the time to do them. There’s too much still to do and I don’t want to lose focus. But for example: I’m not currently using the Playdate SDK Sprite system and am instead doing things the traditional way of drawing everything every update, so I’m positive I can get some good gains by drawing to a few different sprite layers. There are also some functions I call regularly, such as one that counts remaining holes, that can be optimised or avoided by improving my game logic. I’m confident I can get the CPU time down a good bit more. There’s no real need to do so, but I figure anything that will help reduce power usage or is good for the player is a honourable responsibility for a developer with a conscience to take on. If that goes well I may even increase the frame rate for smoother ball movement.&lt;/p&gt;

&lt;h2 id=&quot;shaping-up&quot;&gt;Shaping up&lt;/h2&gt;

&lt;p&gt;All the graphics are still composed with filled ellipses, rectangles and lines, varying their dithering patterns to provide different textures. I really leaned into this and over the course of the week fine tuned the tank from a three-wheeled blob to a high contrast, detailed, carefully animated sprite that you might think has been rendered externally. Maybe in a forthcoming post I can put together an exploded diagram of how it’s drawn?&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/ball-und-panzer-golf-05.gif#playdate&quot; alt=&quot;GIF&quot; title=&quot;Ball und Panzer Golf for Playdate, at the end of the first week&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;whats-next&quot;&gt;What’s next?&lt;/h2&gt;

&lt;p&gt;The only things I didn’t manage to fit in in my week sprint were a couple of animations I think will help make the game feel even higher quality and that will increase players ability to read/understand what is happening on screen. I need to make some more changes to the wind feature and the way the flag flaps in the wind. Currently the flag direction is correct but I’d like the length and frequency to be relative to the strength of the wind.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Pretty much all of the maths in this game is high school algebra and trigonometry, wrapped up in some smoke and mirrors to make it feel magical.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Also on the task list are a couple more sound effects, with the goal being one sound effect for each important event or action in the game. I feel that sounds cues are as important as visual cues and players could pick up on one or the other so there should ideally be parity.&lt;/p&gt;

&lt;p&gt;I can’t keep up the insanely fast pace of development from this first week, not only because of the physical and mental toll it would take but also because the quick wins of the prototype phase are now gone. To add the animations I previously mentioned, the first serious refactoring of part of the code will be needed. So there is no choice but for progress to be slower from this point at least for a while.&lt;/p&gt;

&lt;p&gt;The big remaining task that will take a lot longer than a week is game structure and progression. I have ideas of how I can package the structure of the game now into a short experience with increasing difficulty level and unlimited replay-ability.&lt;/p&gt;

&lt;p&gt;But the bigger question is do I want it to be bigger than that? There are no shortage of ideas how how to mashup to concept of tanks and golf, only a shortage of time and budget to make it happen. I could even add a mini-golf type of experience where you’re playing a round of single screen holes with additional hazards pulled from both the golf and tank world.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;launched&quot;&gt;Launched!&lt;/h2&gt;

&lt;p&gt;My version of Ball und Panzer Golf was renamed Fore! Track and is available for Playdate via Catalog &lt;a href=&quot;https://play.date/games/fore-track/&quot;&gt;play.date/games/fore-track/&lt;/a&gt; or on &lt;a href=&quot;https://gingerbeardman.itch.io/fore-track&quot;&gt;itch where there’s a bargain offline version&lt;/a&gt;.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/ball-und-panzer-golf-fore-track.gif#playdate&quot; alt=&quot;GIF&quot; title=&quot;Demonstration of the launch version of &amp;lt;em&amp;gt;Fore! Track&amp;lt;/em&amp;gt;&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;further-reading&quot;&gt;Further reading&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/07/09/the-first-colour-playdate-game/&quot;&gt;The first colour Playdate game?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 26 Jun 2023 22:11:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/06/26/ball-und-panzer-golf-making-a-playdate-game-in-a-week/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/06/26/ball-und-panzer-golf-making-a-playdate-game-in-a-week/</guid>
        </item>
      
    
      
        <item>
          <title>Preserving the Marguerite Hanafuda browser game</title>
          <description>&lt;p&gt;Marguerite is a defunct Japanese website, previously at &lt;a href=&quot;https://marguerite.jp&quot;&gt;marguerite.jp&lt;/a&gt; (dead link) that hosted HTML5 implementations of Hanafuda and Mahjong.&lt;/p&gt;

&lt;p&gt;Their Hanafuda in particular was very well done, offering a variety of rulesets some of which are difficult to find in video game form and impossible to find in a browser game. The experience was single player versus one or two CPU players.&lt;/p&gt;

&lt;p&gt;The complete list of rules offered:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2-player&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Koi-Koi&lt;/li&gt;
  &lt;li&gt;Mushi (aka “Insect”)&lt;/li&gt;
  &lt;li&gt;Roppyakken (aka “600”)&lt;/li&gt;
  &lt;li&gt;Hachi-Hachi (aka “88”)&lt;/li&gt;
  &lt;li&gt;Hachi (aka “8”)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3-player&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Hana-Awase&lt;/li&gt;
  &lt;li&gt;Hachi-Hachi (aka “88”)&lt;/li&gt;
  &lt;li&gt;Sudaoshi&lt;/li&gt;
  &lt;li&gt;Roppyakken (aka “600”)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/marguerite-hanafuda.png&quot; alt=&quot;PNG&quot; title=&quot;Marguerite Hanafuda&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;gone-but-not-forgotten&quot;&gt;Gone but not forgotten&lt;/h2&gt;

&lt;p&gt;The site went offline mid-2022, about a year ago at this point, and all was thought to be lost. We had tried the Wayback Machine but the archive seemed incomplete.&lt;/p&gt;

&lt;p&gt;This week Marguerite was mentioned on the &lt;a href=&quot;https://discord.com/invite/mKbdwy9&quot;&gt;Hanafuda Discord&lt;/a&gt;, so I decided to try again. Taking a fresh look at the state of the site, it seemed to be stalling trying to load two images.&lt;/p&gt;

&lt;p&gt;A couple of small changes later (two hard-coded URLs in the JavaScript pointed to the dead website) I managed to get the desktop version of the Marguerite Hanafuda working locally!&lt;/p&gt;

&lt;h2 id=&quot;its-alive&quot;&gt;It’s alive!&lt;/h2&gt;

&lt;p&gt;So, I’m now hosting a mirror copy on my website: &lt;a href=&quot;https://marguerite.gingerbeardman.com&quot;&gt;marguerite.gingerbeardman.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Notes:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Sound requires Chrome&lt;/li&gt;
  &lt;li&gt;Safari/Chrome built-in translation works well for this web app&lt;/li&gt;
  &lt;li&gt;Some links out of the game will be broken&lt;/li&gt;
  &lt;li&gt;if Marguerite.jp comes back online I’ll remove my mirror&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Read more about the game rules:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://fudawiki.org/en/hanafuda/games&quot;&gt;Fuda Wiki&lt;/a&gt; (English)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://marguerite.gingerbeardman.com/Nihongo/Games/しらぎく花札/index.html&quot;&gt;Marguerite rules website&lt;/a&gt; (Japanese)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;mobile--mahjong&quot;&gt;Mobile &amp;amp; Mahjong?&lt;/h2&gt;

&lt;p&gt;Sadly the Wayback Machine archive of the Marguerite website is incomplete, so Mobile Hanafuda is lost as are both versions of Marguerite Mahjong.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 23 Jun 2023 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/06/23/preserving-the-marguerite-hanafuda-browser-game/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/06/23/preserving-the-marguerite-hanafuda-browser-game/</guid>
        </item>
      
    
      
        <item>
          <title>Usajong gaiden ore ga kirifuda! (Game Soundtrack Rip)</title>
          <description>&lt;p&gt;I recently played through COMPILE’s うさ雀外伝 俺が切り札！ “Usajong gaiden ore ga kirifuda!” (a ninja-themed Hanafuda Koi-Koi game for PC-98 featured on Disc Station Vol. 10) and took the liberty of recording its great soundtrack as I went along.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/kirifuda.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;うさ雀外伝 俺が切り札！ “Usa suzume gaiden ore ga kirifuda!”&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;soundtrack-download&quot;&gt;Soundtrack download&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/usa-suzume-gaiden-ore-ga-kirifuda-pc-98-unofficial-soundtrack&quot;&gt;archive.org/details/usa-suzume-gaiden-ore-ga-kirifuda-pc-98-unofficial-soundtrack&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Track listing:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Logo (SFX) &lt;em&gt;00:02&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Intro &lt;em&gt;03:00&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Start (SFX) &lt;em&gt;00:06&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;World Ninja Atlas &lt;em&gt;03:06&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Deal (SFX) &lt;em&gt;00:10&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Normal Round &lt;em&gt;03:07&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Final Round &lt;em&gt;03:05&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Chime (SFX) &lt;em&gt;00:02&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Scores (SFX) &lt;em&gt;00:06&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Lose (SFX) &lt;em&gt;00:05&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Win (SFX) &lt;em&gt;00:03&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Ending &lt;em&gt;01:51&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;how-to-play-the-game&quot;&gt;How to play the game&lt;/h2&gt;

&lt;p&gt;I’m going to recommend using RetroArch to play this:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.retroarch.com/?page=platforms&quot;&gt;download RetroArch&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/download/NeoKobe-NecPc-98012017-11-17/Compile.zip/Compile%2FDisc%20Station%20Vol.%2010%2FDisc%20Station%20Vol.%2010%20%28Usajan%20Gaiden%20-%20Ore%20ga%20Kirifuda%21%29%20%5BFD%5D.zip&quot;&gt;download a zip of the game&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Abdess/retroarch_system/tree/libretro/NEC%20-%20PC-98&quot;&gt;download PC-98 System files&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;start RetroArch&lt;/li&gt;
  &lt;li&gt;system files will need to go into RetroArch System folder, check Settings &amp;gt; Directory &amp;gt; System/BIOS and move them there&lt;/li&gt;
  &lt;li&gt;download PC-98 core: Main Menu &amp;gt; Online Updater &amp;gt; Core Downloader &amp;gt; NEC PC-98 (Neko project II Kai)&lt;/li&gt;
  &lt;li&gt;start the game: Main Menu &amp;gt; Load Content &amp;gt; (choose game zip) &amp;gt; Load &amp;gt; NEC PC-98&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can play the game using mouse, though I used the right analog stick and a single button of a game controller…have fun!&lt;/p&gt;

&lt;h2 id=&quot;notes&quot;&gt;Notes&lt;/h2&gt;

&lt;p&gt;Some interesting things about this game:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;a draw results in the round being replayed&lt;/li&gt;
  &lt;li&gt;koi-koi increases your “level-up” which counts along a sword, pretty cool visualisation&lt;/li&gt;
  &lt;li&gt;your score doesn’t double if you finish a round after the opponent calls koi-koi&lt;/li&gt;
  &lt;li&gt;I can’t see any way to check the current score, so i memorise it as i go&lt;/li&gt;
  &lt;li&gt;if you lose to an opponent you can simply try again by choosing them from the map screen&lt;/li&gt;
  &lt;li&gt;it has a cool soundtrack!&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 15 Jun 2023 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/06/15/usa-suzume-gaiden-ore-ga-kirifuda-soundtrack/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/06/15/usa-suzume-gaiden-ore-ga-kirifuda-soundtrack/</guid>
        </item>
      
    
      
        <item>
          <title>Five interesting facts about the design of the original PlayStation</title>
          <description>&lt;p&gt;Some things you probably didn’t realise about the design of the original &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/PlayStation_(console)&quot;&gt;Sony PlayStation&lt;/a&gt;&lt;/em&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;it was inspired by Apple’s &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Macintosh_Plus&quot;&gt;Macintosh Plus&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;the colour is grey with a hint of violet to counteract plastic ageing/yellowing&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Sony&lt;/em&gt; acquired the PlayStation name from Yamaha&lt;/li&gt;
  &lt;li&gt;it led to the &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Vaio&quot;&gt;VAIO&lt;/a&gt;&lt;/em&gt; range of PCs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Bonus fact:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Vaio#Etymology&quot;&gt;VAIO&lt;/a&gt;&lt;/em&gt; was originally an acronym for Video Audio Input Output&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;photo-reference&quot;&gt;Photo reference&lt;/h2&gt;

&lt;p&gt;Taken from &lt;em&gt;&lt;a href=&quot;https://www.worldcat.org/title/1050032044&quot;&gt;Digital Dreams: The Work of the Sony Design Center&lt;/a&gt;&lt;/em&gt; (1999, Paul Kunkel)&lt;/p&gt;

&lt;blockquote class=&quot;imgur-embed-pub&quot; lang=&quot;en&quot; data-id=&quot;a/Br09AXj&quot;&gt;&lt;a href=&quot;//imgur.com/a/Br09AXj&quot;&gt;Some things you probably didn’t realise about the design of the original PlayStation... from the book &amp;quot;Purple Power&amp;quot; from Digital Dreams: The Work of the Sony Design Center (1999, Paul Kunkel)&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;//s.imgur.com/min/embed.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 12 Jun 2023 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/06/12/five-interesting-facts-about-the-design-of-the-original-playstation/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/06/12/five-interesting-facts-about-the-design-of-the-original-playstation/</guid>
        </item>
      
    
      
        <item>
          <title>Review: GTi Club Supermini Festa!</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/gti-club-supermini-festa-wii.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The ultimate hot hatch.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most people are familiar with the first game in the GTi Club series due to its prevalence in arcades throughout the later half of the 1990s. The second game in the series is very hard to find in the wild, whilst the third is perhaps least known but a little easier to find and play today.&lt;/p&gt;

&lt;p&gt;The PlayStation 3 received a loose port of the first arcade game, as GTi Club+, though it takes a lot of liberties. You may not notice if you’re going from 20-something year old memories of the original arcade game, but to me it feels more Western than Japanese and the classic GTi Club handling is largely missing. It’s very much a “blue sky” reinterpretation of the original arcade game running in the Sumo Digital racing game engine. It’s OK, but that’s all.&lt;/p&gt;

&lt;p&gt;And that brings us to the home ports of &lt;em&gt;GTi Club: Supermini Festa!&lt;/em&gt; The third game in Konami’s arcade series added extra locations, cars, and game modes to the original recipe whilst keeping the much loved controls including the handbrake. For this home port developer Genki built on the base of the arcade game and added even more, including online multi-player, game progression, and unlockable cars, modifications, liveries. And you can still play it online today with a modded Wii!&lt;/p&gt;

&lt;p&gt;Released amongst the aftermath of the Icelandic ash cloud and greeted with physical delays before its arrival in retail stores, and perhaps even onto digital store fronts. The game finally released in Spring 2010, a mere two years after its release in arcades. The choice of Nintendo Wii and Sony PSP is a curious one, explained in part by the Wii being a huge seller but the PSP remains an odd choice. Maybe it was easy to target both these 480p platforms with one codebase or maybe it made more sense from a Japanese perspective? Regardless, due to the capabilities of the target home platforms the HD graphics of the arcade game are downscaled in resolution and complexity to 480p and, at least on Wii, the frame rate is kept high at 60fps.&lt;/p&gt;

&lt;p&gt;Your first few games with &lt;em&gt;GTi Club: Supermini Festa!&lt;/em&gt; might have you feeling a little nonplussed, and that was my experience when I received it in the post in March 2010. I played it for a bit and put it to one side. It was over a decade later that I returned to play it again—with a more open mind—and it really sunk its teeth into me.&lt;/p&gt;

&lt;p&gt;The game starts off very easy, almost too easy, as you set about unlocking cars and game modes. You might think that there is no challenge, but before long you’ll notice that difficulty begins to ramp up and you have to be a little more selective with your car choice and how you choose to level-up your car stats. By about half way through the game, and perhaps earlier if you’re going for gold medals, you’ll need to figure out that to remaining competitive means figuring out the correct car to use for each challenge and failure to do so will result in you hitting an impasse. It’s a very Japanese level of difficulty, one could describe it as the Dark Souls of driving games. I’ve seen many people hit this wall and abandon the game just as it is about to show them what it really has up its sleeve. Nintendo do the same thing in many of their games, where you play through it once and only then are the most dedicated players greeted with the main event.&lt;/p&gt;

&lt;p&gt;One final point is about control. In the early days of playing the game I was using motion control, which is well-implemented and very enjoyable. Later in the game, I found that I needed a control method with more reaction speed. I tried Wii SNES Controller, which helped but the digital nature of the controls felt very jarring on-screen. So I switched to analog stick control on a Wii Classic Controller Pro, which gives quicker turns and reactions in general. I later spoke with &lt;a href=&quot;https://twitter.com/40n______&quot;&gt;赤しおん/Aka_sion&lt;/a&gt;—a Japanese player with whom I race online—who confirmed that all serious Japanese players who were playing online back in the day had made the same discovery.&lt;/p&gt;

&lt;p&gt;At this point in time GTi Club: Supermini Festa! is one of a select few hard-to-find Wii games, so it commands a high price. If you’re not a collector it’s an easier choice, as you could essentially rent the game by buying it, playing it and selling it on. Or you might have other options depending on your propensity to sail the high seas. Come on in, the water’s lovely.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=YqvTjPzXM5E&amp;amp;list=PLfF-zlMNYMd-f0027NK9ybUjPRrd5a1kV&quot;&gt;Watch &lt;em&gt;GTi Club: Supermini Festa!&lt;/em&gt; on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://soundcloud.com/timeextend/057-supermini-festa&quot;&gt;Listen to &lt;em&gt;Time Extend&lt;/em&gt; praise the game on their podcast&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/91379/gti-club-supermini-festa/&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://wii.guide/wiimmfi.html&quot;&gt;Play &lt;em&gt;GTi Club: Supermini Festa!&lt;/em&gt; online today&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gbatemp.net/threads/introducing-the-wiimmfi-notifier.546926/&quot;&gt;Get notifications when other people are playing online&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 07 Jun 2023 12:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/06/07/gti-cub-supermini-festa/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/06/07/gti-cub-supermini-festa/</guid>
        </item>
      
    
      
        <item>
          <title>Ordering photocopies from Japan’s National Library</title>
          <description>&lt;p&gt;Recently I have been looking for a specific issue of an old 1985 Japanese PC magazine, but there are non currently for sale, nor have there been any sold for some time judging by sold listings. Over the past several years what I would normally do in this scenario is play the waiting game and hope one pops up for sale and that I can win it. But this time I decided to play things a little different, after finding a detailed table of contents for the magazine at Japan’s National Diet Library (NDL) and seeing that they offered a &lt;a href=&quot;https://www.ndl.go.jp/en/copy/remote/overseas.html&quot;&gt;remote duplication service&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;remote-duplication&quot;&gt;Remote duplication?&lt;/h2&gt;

&lt;p&gt;Japan has very strict copyright laws which are obeyed by their citizens and that goes for the library and its employees. Even though the magazine in question had been scanned onto their system the scans can only be viewed in person at NDL. That’s because even though the magazine is from 1985 it’s still in copyright so it’s a breach of that copyright to send the scans digitally: either over the internet to your web browser or by email. But they are totally fine making a photocopy and posting it to you. In this particular scenario, I’m totally fine with that!&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Note: the majority of this process happens &lt;em&gt;in Japanese&lt;/em&gt; so make sure to use the built-in translation features of your operating system (&lt;em&gt;iOS&lt;/em&gt; can translate any selected text), email service (&lt;em&gt;Gmail&lt;/em&gt; will offer to translate foreign language emails), or web browser (&lt;em&gt;Safari&lt;/em&gt; and &lt;em&gt;Chrome&lt;/em&gt; can translate any web page). With that out of the way, let’s go!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;step-by-step&quot;&gt;Step-by-step&lt;/h2&gt;

&lt;p&gt;It turns out this process is pretty old-school, powered by a mix of website and email.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https://iss.ndl.go.jp&quot;&gt;Find the item on the NDL website&lt;/a&gt; and &lt;a href=&quot;https://dl.ndl.go.jp&quot;&gt;check if it’s available to view online&lt;/a&gt;, if so there’s no need for you to do this process!&lt;/li&gt;
  &lt;li&gt;If it’s only available for remote duplication you’ll need to &lt;a href=&quot;https://ndlonline.ndl.go.jp/#!/userreg&quot;&gt;set up an account at NDL Online&lt;/a&gt;, a little tricky as I could only find the registration form in Japanese and make sure to confirm your email address&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://ndlonline.ndl.go.jp/static/en/help-6a/index.html?lang=en#menu6a-4&quot;&gt;Fill out the remote duplication form&lt;/a&gt; making sure to specify all details and most importantly the page number range. You can request an estimate up-front or wait for the invoice on receipt. That’s right, you don’t pay for this service until after you receive the material!&lt;/li&gt;
  &lt;li&gt;Next, waiting for the item to be picked from the shelves and make it to the front of the duplication queue. For me this took about a week, but it was easy to see it progressing as &lt;a href=&quot;https://ndlonline.ndl.go.jp/#!/status&quot;&gt;the status the request can be checked on the website at all times&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;At this point I received an email - in Japanese - asking me to please check my address and make sure that it contains the country. For whatever reason it didn’t have country, so I made sure to correct it and &lt;em&gt;then replied to the email to let them know I’d done it&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;You’ll receive a final email when the item has been processed and shipped!&lt;/li&gt;
  &lt;li&gt;Wait for it to arrive, a mere 4 days to get to me in the UK&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;costs&quot;&gt;Costs&lt;/h2&gt;

&lt;p&gt;My request was only 3 magazine pages which, when scanned two-at-a-time, fit on two A3 sheets.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Charge&lt;/th&gt;
      &lt;th&gt;Cost&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;A4 paper (¥43 per sheet)&lt;/td&gt;
      &lt;td&gt;¥86&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Packing charge&lt;/td&gt;
      &lt;td&gt;¥350&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Postage charge&lt;/td&gt;
      &lt;td&gt;¥400&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;¥836&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Note: they recommend online payment by card as it’s free. If you really need to you can pay by bank transfer, but it costs an extra ¥4,000! Yikes.&lt;/p&gt;

&lt;h2 id=&quot;paying&quot;&gt;Paying&lt;/h2&gt;

&lt;p&gt;As I mentioned earlier you don’t pay until you receive the material. Included alongside my two photocopies were: a 2-page stapled A4 invoice, a single A4 sheet payment request fax form, and an A5 information slip on how to request an online payment. So, let’s pay online!&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Send an email to their email address, with your name and invoice number&lt;/li&gt;
  &lt;li&gt;They reply confirming and asking you to watch for an email from the payment provider, and reminding you that you need to pay within the 3 days during which the link is active&lt;/li&gt;
  &lt;li&gt;The payment website is basic but functional and straightforward&lt;/li&gt;
  &lt;li&gt;It accepted my strange European debit card&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Total cost in GBP £4.89&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;All in all a very useful service, fairly painless process, and one that I will no doubt use again in future!&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/ascii-1985-11-chain-shot-intro.jpg&quot; alt=&quot;JPG&quot; title=&quot;Introduction to Chain Shot (by 森辺訓章 Kuniaki &amp;quot;Morisuke&amp;quot; Moribe) for FM-8/7, PC-9801 &amp;amp; PC-8801&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 24 May 2023 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/05/24/ordering-photocopies-from-japans-national-library/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/05/24/ordering-photocopies-from-japans-national-library/</guid>
        </item>
      
    
      
        <item>
          <title>IntelligentPad: component-based drag-and-drop software creator</title>
          <description>&lt;p&gt;IntelligentPad was a drag-and-drop software creator based on the concept of reusable components. Pads could be reused on other pads. There was no programming language so software could be created by anybody, including those without programming experience. It was generally referred to as IP, and often “iPad” which resulted in &lt;a href=&quot;https://twitter.com/search?q=intelligentpad%20ipad&amp;amp;src=typed_query&amp;amp;f=live&quot;&gt;some users reminiscing on Twitter&lt;/a&gt; after the launch of Apple’s iPad device.&lt;/p&gt;

&lt;h3 id=&quot;history&quot;&gt;History&lt;/h3&gt;

&lt;p&gt;IntelligentPad was proposed in 1987 by Professor Yuzuru Tanaka 田中譲 of Knowledge Media Laboratory, Faculty of Engineering, Hokkaido University, and implemented using &lt;a href=&quot;https://en.wikipedia.org/wiki/Smalltalk#History&quot;&gt;Smalltalk-80&lt;/a&gt; in 1989. All software resources on a computer are represented in the form of Pads. Pads are standardised so that they can be connected to each other and by combining general pads such as text pads, graph pads, and image pads, a program (called a composite pad) is created.&lt;/p&gt;

&lt;p&gt;With it being a tool for &lt;a href=&quot;https://en.wikipedia.org/wiki/Rapid_application_development&quot;&gt;Rapid Application Development&lt;/a&gt; there are some similarities with Jean-Marie Hullot’s &lt;a href=&quot;https://en.wikipedia.org/wiki/Interface_Builder&quot;&gt;Interface Builder&lt;/a&gt; (1986), Bill Atkinson’s &lt;a href=&quot;https://en.wikipedia.org/wiki/HyperCard&quot;&gt;HyperCard&lt;/a&gt; (1987), Denison Bollay’s &lt;a href=&quot;https://vimeo.com/62618532&quot;&gt;Action! (video)&lt;/a&gt; (1988), Fujitsu’s &lt;a href=&quot;https://twitter.com/gingerbeardman/status/1574018275507412992&quot;&gt;TownsGEAR&lt;/a&gt; (1990), Microsoft’s &lt;a href=&quot;https://en.wikipedia.org/wiki/Visual_Basic_(classic)&quot;&gt;Visual Basic&lt;/a&gt; (1991), Borland’s &lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_Delphi_(software)&quot;&gt;Delphi&lt;/a&gt; (1995), and also Apple Research Labs’ &lt;a href=&quot;https://web.archive.org/web/19970104030734/http://www.research.apple.com/research/proj/Learning_Concepts/squeak/intro.html&quot;&gt;Squeak&lt;/a&gt; (1996, which also happened to be created using Smalltalk-80).&lt;/p&gt;

&lt;p&gt;IntelligentPad could be used to build a variety of software from a working calculators and digital clocks (as shown in the documentation/tutorials), through to fully blown applications such as a &lt;a href=&quot;https://www.jcprg.org/ipad/&quot;&gt;database of nuclear reactors&lt;/a&gt;. Examples quoted in early-1999 included a &lt;a href=&quot;https://drops.dagstuhl.de/opus/volltexte/2021/15137/pdf/DagSemRep-251.pdf&quot; title=&quot;Declarative Data Access on the Web&quot;&gt;Kyoto culture database “THE MIYAKO”&lt;/a&gt; (pdf, p.13) and IntelligentPad’s own “Piazza” project. But, both were still under development at that time.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/intelligentpad-about.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;IntelligentPad for Macintosh (1994, Hitachi)&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;desktop-software&quot;&gt;Desktop software&lt;/h3&gt;

&lt;p&gt;Implementations of the IntelligentPad standard were available for multiple platforms, and all could mutually exchange pads. Hitachi were most active, creating versions for Mac (as both Shareware and limited demo), HP workstations and a version for Windows with Fujitsu. To add to that Fujitsu created a version for Solaris workstations. Elsewhere K-Plex released a commercial version under the name &lt;a href=&quot;http://www.kplex.com/products/plexware.html&quot;&gt;PlexWare&lt;/a&gt; (&lt;a href=&quot;http://www.kplex.co.jp/products/plexware/PlexWare.html&quot;&gt;Japanese&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;From 1993 the standard was overseen by the IntelligentPad Consortium, a non-profit organisation aiming to promote and standardise IntelligentPad. The consortium is made up of 36 corporate members and individual members, including Fujitsu, Hitachi Software Engineering, Fuji Xerox, NTT, and NEC. The same year a live-demo was presented &lt;a href=&quot;https://kobe-cc.jp/kcc/wp-content/uploads/2017/12/139.pdf&quot;&gt;in Kobe at the first TED conference held outside of North America&lt;/a&gt; (pdf). The proliferation of the world wide web at this point meant the beginning of some adjustments to the concept.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/intelligentpad-clock.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;Sample: Digital Clock Pad&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;the-piazza-project&quot;&gt;The “Piazza” project&lt;/h3&gt;

&lt;p&gt;Given that the core concept meant Pads were freely redistributable components, a problem arose that software made using IntelligentPad was difficult to sell. The software was free, Pads were free, and there was no distribution or billing system available.&lt;/p&gt;

&lt;p&gt;So, the IntelligentPad Consortium proposed a virtual space for content distribution called Piazza, which was presented at the &lt;a href=&quot;https://art-science.org/nicograph/&quot;&gt;NicoGRAPH&lt;/a&gt; conference of art and science in 1998. Users would gain the ability to place their own applications and image data in the Piazza space in the form of pads, and have other users download them. The proposal was complicated by Japan’s copyright laws, which caused the need for a middle-man clearing house to be involved issuing copyright registrations, as well as distributors who would encrypt the content. It makes the single point of contact for modern App Stores appear to be the ultimate in luxury!&lt;/p&gt;

&lt;p&gt;In March 1999 this was all just an idea, with no working prototype available. Piazza version 1.0 was released in November 1999.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/intelligentpad-piazza.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;IntelligentPad Piazza&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;reinventing-the-internet&quot;&gt;Reinventing the internet&lt;/h3&gt;

&lt;p&gt;Further proposals included an “internet sandbox” that used the Piazza to connect elementary schools over long distances, enabling them to exchange content and communicate with each other, and the development of a search engine for content distributed on Piazza. To me this sounds a little like reinventing the internet.&lt;/p&gt;

&lt;h2 id=&quot;download&quot;&gt;Download&lt;/h2&gt;

&lt;p&gt;My interest in IntelligentPad begun when I found Japanese version 2.0.1J in my archive of &lt;a href=&quot;/2021/10/30/macintosh-magazine-media/&quot;&gt;Macintosh Magazine Media&lt;/a&gt; on a Japanese MacUser magazine CD-ROM from 1996. With that knowledge I headed over to &lt;a href=&quot;http://discmaster.textfiles.com&quot;&gt;DiscMaster&lt;/a&gt; and found English version 2.0.1 on a 1996 CD-ROM sold by German Apple reseller GRAVIS that contained their catalogue, software and updates. One world!&lt;/p&gt;

&lt;p&gt;You can download those Macintosh files at &lt;a href=&quot;https://macintoshgarden.org/apps/intelligentpad&quot;&gt;macintoshgarden.org/apps/intelligentpad&lt;/a&gt; and try it in a classic Macintosh emulator such as the Infinite Mac web-based emulators (&lt;a href=&quot;https://system7.app&quot;&gt;System 7&lt;/a&gt;, &lt;a href=&quot;https://KanjiTalk7.app&quot;&gt;KanjiTalk 7&lt;/a&gt;) and do make sure to copy the files to the emulated hard drive before expanding and running IntelligentPad. Documentation is included and there are Tutorials to create a variety of things from a simple calculator, to a more advanced digital clock, and even a full software application in the form of an interactive map with database browser.&lt;/p&gt;

&lt;p&gt;For Windows, IntelligentPad version 4 released in 2000 still works on Windows 8 in XP Mode. There’s also a Java version of IntelligentPad. Both can be &lt;a href=&quot;http://pads.kplex.co.jp/_taiken/dl2.html&quot;&gt;downloaded from the Consortium website&lt;/a&gt; though I am yet to try those specific versions myself.&lt;/p&gt;

&lt;h2 id=&quot;demonstration&quot;&gt;Demonstration&lt;/h2&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 4/3;&quot; videoid=&quot;4an1bzfOlKA&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;aftershock&quot;&gt;Aftershock&lt;/h3&gt;

&lt;p&gt;In 1995 the concept was reimagined as IntelligentBox, which added an extra dimension as it was capable of displaying and manipulating 3D models. An internet-ready version used the phrase Web Pebble (“Webble”) instead of Pad or Box, and yet another version used the phrase “Meme Media” to refer to reusable components comprised of parts of web pages.&lt;/p&gt;

&lt;h3 id=&quot;intelligentpad-today&quot;&gt;IntelligentPad today&lt;/h3&gt;

&lt;p&gt;By now you might think IntelligentPad is long forgotten, but I’m here to blow your mind. The &lt;a href=&quot;https://ipad.live7.jp&quot;&gt;IntelligentPad Museum/Palace&lt;/a&gt; website is still being updated.&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;further-reading&quot;&gt;Further reading&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;hhttp://pads.kplex.co.jp/index.html&quot;&gt;IntelligentPad Consortium home page&lt;/a&gt; (2005)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://ascii.jp/elem/000/000/315/315443/&quot;&gt;Report on the 6th IntelligentPad workshop: marketplace for software and components&lt;/a&gt; (1999)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.kplex.com/products/intelligentpad.html&quot;&gt;K-Plex IntelligentPad Overview&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;related-reading&quot;&gt;Related reading&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://drops.dagstuhl.de/opus/volltexte/2021/15137/pdf/DagSemRep-251.pdf&quot; title=&quot;Declarative Data Access on the Web&quot;&gt;Declarative Data Access on the Web&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://annas-archive.org/md5/d12a196536c538bc713e8d2175afdce5&quot;&gt;Meme Media and Meme Market Architectures: Knowledge Media for Editing, Distributing, and Managing Intellectual Resources&lt;/a&gt; (book)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://slideplayer.com/slide/4962007/&quot;&gt;Meme Media Architecture for the Re-editing and Re-distribution of Web Resources&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.researchgate.net/publication/37553567_Meme_Media_for_Clipping_and_Combining_Web_Resources&quot;&gt;Meme Media for Clipping and Combining Web Resources&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.researchgate.net/publication/236148025_Advanced_Webble_Application_Development_Directly_in_the_Browser_by_Utilizing_the_Full_Power_of_Meme_Media_Customization_and_Event_Management_Capabilities&quot;&gt;Advanced “Webble” Application Development Directly in the Browser by Utilizing the Full Power of Meme Media Customization and Event Management Capabilities&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://link.springer.com/chapter/10.1007/978-3-642-38836-1_2&quot;&gt;Web Version of IntelligentBox (WebIB) and Its Integration with Webble World&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.researchgate.net/publication/260347336_Media_Multiplicity_at_Your_Fingertips_Direct_Manipulation_Based_on_Webbles&quot;&gt;Media Multiplicity at Your Fingertips: Direct Manipulation Based on Webbles&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 17 May 2023 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/05/17/intelligentpad-component-based-drag-and-drop-software-creator/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/05/17/intelligentpad-component-based-drag-and-drop-software-creator/</guid>
        </item>
      
    
      
        <item>
          <title>Japanese music recommendations</title>
          <description>&lt;p&gt;For the past month or so Apple Music has been suggesting new music from Japan in my weekly “New Music” playlist. I’m not quite sure what flipped the bit in their recommendation engine, but I’m happy it did. If I had to guess I’d say it was the music I was listening to whilst finishing off &lt;a href=&quot;/2023/04/13/sparrow-solitaire-for-playdate/&quot;&gt;&lt;em&gt;Sparrow Solitaire&lt;/em&gt; for Playdate&lt;/a&gt; which has an excellent soundtrack by young Japanese musician &lt;a href=&quot;https://yuyakemonster.bandcamp.com&quot;&gt;&lt;em&gt;Yuyake Monster&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It’s so great to receive tailored recommendations of music that I enjoy, and occasionally find so good it has me doing somersaults. I’m attempting to keep the most enjoyable from each week in playlists on my &lt;a href=&quot;https://music.apple.com/profile/mattsephton&quot;&gt;Apple Music profile&lt;/a&gt;, so feel free to check them out. There are a lot of artists featured and I only have time to explore those that make the biggest impression.&lt;/p&gt;

&lt;p&gt;So, I’d like to mention a couple in particular:&lt;/p&gt;

&lt;h2 id=&quot;nathalie-wise&quot;&gt;Nathalie Wise&lt;/h2&gt;

&lt;p&gt;The track 何もない世界の果てに &lt;em&gt;“A world of nothingness”&lt;/em&gt; was featured in the third week of recommendations and it immediately struck a chord with me thanks to its lush synthesisers, range of live instruments and the particular poetic style of vocal delivery. I immediately listened to the rest of &lt;a href=&quot;https://music.apple.com/gb/album/nathalie-wise-ep/1682148461&quot;&gt;the EP&lt;/a&gt; and it was all equally good.&lt;/p&gt;

&lt;p&gt;A quick google later and it turns out that &lt;a href=&quot;https://ja.wikipedia.org/wiki/Nathalie_Wise&quot;&gt;&lt;em&gt;Nathalie Wise&lt;/em&gt;&lt;/a&gt; is the name of the band rather than an individual, and the EP was a taster for “Open Sky” their first album in 19 years! What a splash.&lt;/p&gt;

&lt;p&gt;I figured if the band thought they still had something to say in 2023 then they must have &lt;em&gt;really&lt;/em&gt; had something to say back in the day. So I listened to their 2004 album “raise hands high” and …it blew me away. Instant Super Fan!&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;“Open Sky”&lt;/em&gt; album launched on the May 2023 Bandcamp Friday, and &lt;a href=&quot;https://takanohiroshi.bandcamp.com/album/open-sky&quot;&gt;bandcamp is the only place you can get it digitally&lt;/a&gt; at this point. Sadly I wasn’t able to watch the live album launch event video stream as it required a Japanese credit card for payment, but I tried my best! I hope the band release the footage after the album launch period.&lt;/p&gt;

&lt;h2 id=&quot;masakatsu-takagi&quot;&gt;Masakatsu Takagi&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://www.takagimasakatsu.com&quot;&gt;&lt;em&gt;Marginalia&lt;/em&gt;&lt;/a&gt; is an ongoing series of daily piano recordings made at Takagi’s private studio in the mountains of Hyogo, Japan. He opens all the windows, welcomes in the sounds of nature, and proceeds to play the piano without any further preparation. In these recordings there are no overdubs, no edits or fixes, everything is just …as it happened. I love this sort of passion project!&lt;/p&gt;

&lt;p&gt;At the time of writing 130 recordings have been released since April 2017, making up a total of more than 11 hours of music spanning a handful of albums and dozens of singles. &lt;a href=&quot;https://takagimasakatsu.bandcamp.com&quot;&gt;Everything is on bandcamp&lt;/a&gt;, and I’ve created a &lt;a href=&quot;https://music.apple.com/gb/library/playlist/p.DQ65KcLdp1P?l=en-GB&quot;&gt;playlist of them all on my Apple Music profile&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Since my introduction was to some of his recent pieces, I’ve gone back to the beginning of the project and am listening to every piece in the series in chronological order. I’m only part way through at this point, but am enjoying it immensely.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 15 May 2023 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/05/15/japanese-music-recommendations/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/05/15/japanese-music-recommendations/</guid>
        </item>
      
    
      
        <item>
          <title>F-MIN INFINITY an obscure Japanese sprite-scaler racing game</title>
          <description>&lt;p&gt;This is version 2.1 of F-MIN INFINITY, a sprite-scaler 2D/3D racing game by mpulip for Windows 95. You could describe it as Power Drift meets F-Zero.&lt;/p&gt;

&lt;p&gt;The copy of its homepage in Wayback Machine was incomplete, as were direct links from &lt;a href=&quot;https://web.archive.org/web/20000829131347/https://www.vector.co.jp/magazine/softnews/000729/n000729com1.html&quot;&gt;an old feature on Vector&lt;/a&gt;, so it took a long time to find a copy of the .lzh archive file. Eventually I managed to locate it in an archive of an obscure old type of listing page on Vector.&lt;/p&gt;

&lt;p&gt;To run the game correctly it’s best to use &lt;a href=&quot;https://sourceforge.net/projects/dxwnd/&quot;&gt;DxWnd&lt;/a&gt;, which will allow you to play the game on modern Windows with zero configuration, or even through Crossover/Wine and not use Windows at all.&lt;/p&gt;

&lt;p&gt;The game includes help files as HTML, the ability create your own tracks, and source code. Let me know if you have more luck running it than I did!&lt;/p&gt;

&lt;p&gt;Download at Internet Archive: &lt;a href=&quot;https://archive.org/details/f-min-infinity-21&quot;&gt;archive.org/details/f-min-infinity-21&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks to my &lt;a href=&quot;https://www.patreon.com/posts/f-min-infinity-1-82948641&quot;&gt;Patreon&lt;/a&gt; supporters!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/f-min-infinity.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;F-MIN INFINITY Ver2.1&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 13 May 2023 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/05/13/f-min-infinity/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/05/13/f-min-infinity/</guid>
        </item>
      
    
      
        <item>
          <title>一筆 / Hitofude / Ippitsu Japanese puzzle game</title>
          <description>&lt;p&gt;一筆 (“Hitofude” = Single Stroke) aka “Ippitsu” is a puzzle game by H.Hirabayashi.&lt;/p&gt;

&lt;p&gt;Released in 1995, a decade before &lt;em&gt;Mitchell Corp&lt;/em&gt; &amp;amp; &lt;em&gt;Nintendo&lt;/em&gt;’s Polarium 直感ヒトフデ (“Chokkan Hitofude” = Intuitive Single Stroke) &amp;amp; Polarium Advance 通勤ヒトフデ (“Tsūkin Hitofude” = Commuting Single Stroke).&lt;/p&gt;

&lt;p&gt;As &lt;a href=&quot;/2014/01/01/polarium-advance-daily-puzzle-challenge&quot;&gt;huge fan of the Polarium games&lt;/a&gt; this discovery has rocked my world.&lt;/p&gt;

&lt;p&gt;You can read about it in &lt;a href=&quot;https://www.vector.co.jp/magazine/special/970912/sp7091211.html&quot;&gt;this 1997 feature at Vector&lt;/a&gt; and &lt;a href=&quot;https://www.vector.co.jp/soft/win31/game/se024209.html&quot;&gt;download it from its listing page&lt;/a&gt;. The author’s website is &lt;a href=&quot;https://web.archive.org/web/20030506062907/http://www.hiraba.com/slaveofpc/software/ippitsu/index.html&quot;&gt;archived in the Wayback Machine&lt;/a&gt;. It will run on Windows 3.x and Windows 95, at least. I’m running here in English Windows 95 through DOSbox-x.&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 1/1;&quot; videoid=&quot;-VaQ4DUSvWE&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 11 May 2023 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/05/11/hitofude-ippitsu-for-windows/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/05/11/hitofude-ippitsu-for-windows/</guid>
        </item>
      
    
      
        <item>
          <title>Piskel for Playdate</title>
          <description>&lt;p&gt;I just pushed some changes to my Playdate-centric fork of Piskel:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gingerbeardman/piskel-playdate/tree/dev-1047&quot;&gt;github.com/gingerbeardman/piskel-playdate/tree/dev-1047&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This fork:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;can be used to build desktop apps on latest operating systems
    &lt;ul&gt;
      &lt;li&gt;updated to future-proof dependencies and build process&lt;/li&gt;
      &lt;li&gt;builds for Windows, Linux, macOS&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;has Playdate-specific features
    &lt;ul&gt;
      &lt;li&gt;get frame size from imagetable filename&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;has quality-of-life improvements
    &lt;ul&gt;
      &lt;li&gt;save keyboard shortcut will export PNG&lt;/li&gt;
      &lt;li&gt;ignore warnings preference&lt;/li&gt;
      &lt;li&gt;turns off animated preview by default&lt;/li&gt;
      &lt;li&gt;different window size and positioning&lt;/li&gt;
      &lt;li&gt;stops nagging if run in WebKit&lt;/li&gt;
      &lt;li&gt;modern macOS icon&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;adds useful community improvements
    &lt;ul&gt;
      &lt;li&gt;Outliner tool&lt;/li&gt;
      &lt;li&gt;Dither modifier keys&lt;/li&gt;
      &lt;li&gt;Keyboard cursor&lt;/li&gt;
      &lt;li&gt;Shift Palette Color Index Brush&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;adds new default Pencil tool
    &lt;ul&gt;
      &lt;li&gt;draws in the opposite color to that of the start pixel&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;apple-silicon-support&quot;&gt;Apple silicon support&lt;/h3&gt;

&lt;p&gt;Check out the &lt;a href=&quot;https://github.com/gingerbeardman/piskel-playdate/blob/dev-1047/README.md&quot;&gt;readme&lt;/a&gt; for details on how to quickly generate a new build without having to build nw.js from scratch. It’s very easy! Thanks to &lt;a href=&quot;https://www.ayushmanchhabra.com&quot;&gt;Ayushman Chhabra&lt;/a&gt; for help and hints.&lt;/p&gt;

&lt;h3 id=&quot;image-table-support&quot;&gt;Image Table support&lt;/h3&gt;

&lt;p&gt;Most of the time I load Piskel and drop an image table (a sort of sprite sheet) on it. Having to manually enter frame/cell size dimensions got old really fast, so this was my main motivation for doing a custom build. It’s a simple hack that checks the file name and parses out the cell dimensions. Slightly more tricky was trigger changes to the import panel so that everything looked and worked as it should.&lt;/p&gt;

&lt;h3 id=&quot;ignore-warnings&quot;&gt;Ignore Warnings&lt;/h3&gt;
&lt;p&gt;After editing an image in Piskel the majority of the time I export it and then quit the app. The app always nags twice: firstly to make sure you wanted to “leave the site?” - a leftover from the fact this is a web tool at heart - and a secondly to make sure you want to “abandon unsaved changes?”. An option to ignore these warnings is such a time saver.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;I also took the opportunity to add some useful features developed by the community.&lt;/p&gt;

&lt;h3 id=&quot;outliner-tool&quot;&gt;Outliner tool&lt;/h3&gt;

&lt;p&gt;Thanks to &lt;a href=&quot;https://github.com/ElectricToy/piskel/pulls?q=is%3Apr+is%3Aclosed&quot;&gt;ElectricToy&lt;/a&gt; for this patch, it works like flood fill but only fills the outline of any pixels it hits. You can hold Cmd to do a slightly thicker outline including corners.&lt;/p&gt;

&lt;h3 id=&quot;dither-modifier-keys&quot;&gt;Dither modifier keys&lt;/h3&gt;

&lt;p&gt;Another one from &lt;a href=&quot;https://github.com/ElectricToy/piskel/pulls?q=is%3Apr+is%3Aclosed&quot;&gt;ElectricToy&lt;/a&gt;, this gives you 25% ad 75% dither patterns by holding modifier keys, in addition to the standard 50% checkerboard dither pattern.&lt;/p&gt;

&lt;h3 id=&quot;keyboard-cursor&quot;&gt;Keyboard cursor&lt;/h3&gt;

&lt;p&gt;I’m not sure how useful this really is, but I added it anyway. Thanks to &lt;a href=&quot;https://github.com/piskelapp/piskel/tree/keyboard-cursor&quot;&gt;juliandescottes&lt;/a&gt; for the patch. You can control the pixel cursor location using Alt+cursor, and space will activate the current tool at that location. I haven’t tried it but you could set up a game controller to use these keys and &lt;a href=&quot;https://readonlymemory.vg/the-making-of-speedball-2/&quot;&gt;draw like Dan Malone did&lt;/a&gt;!&lt;/p&gt;

&lt;h3 id=&quot;shift-palette-color-index-brush&quot;&gt;Shift Palette Color Index Brush&lt;/h3&gt;

&lt;p&gt;This tool allows you to do shading using neighbouring colours more easily. Thanks to &lt;a href=&quot;https://github.com/piskelapp/piskel/pull/887&quot;&gt;blurymind&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;And I even added a new tool myself!&lt;/p&gt;

&lt;h3 id=&quot;pencil-tool-new-default&quot;&gt;Pencil tool (new default)&lt;/h3&gt;

&lt;p&gt;Classic Macintosh style Pencil. Draws in the opposite color than that of the pixel the stroke begins on. If the stroke begins on transparent, or the secondary color, it draws in the primary color. If the stroke begins on the primary color, it draws in the secondary color. This minimizes the need to switch between selected colors. To draw in a single color you won’t need to change colors or tools at all.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 10 May 2023 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/05/10/piskel-for-playdate/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/05/10/piskel-for-playdate/</guid>
        </item>
      
    
      
        <item>
          <title>MaciGame user created graphics</title>
          <description>&lt;p&gt;I recently collected over 250(!) sets of user created graphics for &lt;a href=&quot;https://macintoshgarden.org/games/macigame&quot;&gt;MaciGame&lt;/a&gt; the classic Macintosh tile-matching puzzle game by Takeshi “KEN” Takahashi.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;まきがめ (MaciGame) was a wildly popular game worldwide in the mid-to-late 1990s, and there was even a play guide book published about it in its native Japan! The game is a variation of さめがめ (&lt;a href=&quot;https://gamicus.fandom.com/wiki/SameGame&quot;&gt;SameGame&lt;/a&gt;) by Eiji “Kyoto” Fukumoto, which is in turn a variation of the original game in the genre: &lt;a href=&quot;https://www.asahi-net.or.jp/~ky6k-mrb/chainsht.htm&quot;&gt;Chain Shot&lt;/a&gt; by Kuniaki “Morisuke” Moribe.&lt;/p&gt;

  &lt;p&gt;The goal of this type of game is to clear the board of blocks by clicking on groups of two or more, empty space is then removed vertically by the remaining blocks dropping down and horizontally by empty columns being replaced by their rightmost column. This means that over time blocks converge in the lower left of the play area.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The user-created graphic sets were all sourced from the amazing &lt;a href=&quot;https://www.vector.co.jp/vpack/filearea/osx/game/puzzle/makigame/&quot;&gt;Vector.co.jp&lt;/a&gt;, extracted from all manner of esoteric vintage archives, organised and packaged as a single compressed disk image to make using them much quicker and easier. &lt;a href=&quot;https://macintoshgarden.org/games/macigame&quot;&gt;Download it at Macintosh Garden&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Tips: you can browse the folder as a GraphicConverter slideshow to more quickly and easily figure out which you’d like to use or install. The easiest way of using a graphics set is to double click it and it will open MaciGame with the new graphics loaded. A few images may not have the correct &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SaMe&lt;/code&gt; creator code so may need to either have that set, or be loaded manually using the game menu.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Thanks to &lt;a href=&quot;https://twitter.com/haeckel&quot;&gt;Izumi Okano&lt;/a&gt; for letting me know about this archive of user created graphics, and also &lt;a href=&quot;https://www.patreon.com/gingerbeardman&quot;&gt;my Patreon supporters&lt;/a&gt; for allowing me to preserve this type of content.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;discmaster&quot;&gt;DiscMaster&lt;/h2&gt;

&lt;p&gt;User created graphics can be found and viewed in DiscMaster using this search: &lt;a href=&quot;http://discmaster.textfiles.com/search?format=pict&amp;amp;detection=PICT%2FSaMe&quot;&gt;http://discmaster.textfiles.com/search?format=pict&amp;amp;detection=PICT%2FSaMe&lt;/a&gt; which indexes and makes browsable all of my Japanese CD-ROMs as well as many more uploaded by other people.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;my-favourites&quot;&gt;My Favourites&lt;/h2&gt;

&lt;p&gt;As well as recovering the infamous &lt;em&gt;&lt;a href=&quot;https://web.archive.org/web/20241218105633/http://hp.vector.co.jp/authors/VA001976/index_e.html&quot;&gt;Panty&lt;/a&gt; &lt;a href=&quot;https://web.archive.org/web/20051229121318/http://www.kibo.com/exegesis/panty_cat.shtml&quot;&gt;Cat&lt;/a&gt;&lt;/em&gt; graphics set—which was removed after version 1.74 of MaciGame—I also discovered all manner of beautiful, clever, and some times brain-melting graphics.&lt;/p&gt;

&lt;p&gt;Tile sets with 16 cells allow tiles that change their appearance based on matching neighbours. That means melting faces, multi-headed xenomorph, water pipes, DNA sequences, impossible key chains, mutant fish bones, weird blobs with faces, intertwining branches, mole burrows and more.&lt;/p&gt;

&lt;p&gt;A small selection of my favourites are below:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/macigamekoma-01-usa-chan.png#compare&quot; alt=&quot;PNG&quot; /&gt; &lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/macigamekoma-02-panty-cat.png#compare&quot; alt=&quot;PNG&quot; /&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/macigamekoma-03-monkey.png#compare&quot; alt=&quot;PNG&quot; /&gt; &lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/macigamekoma-04-spheres.png#compare&quot; alt=&quot;PNG&quot; /&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/macigamekoma-05-autumn.png#compare&quot; alt=&quot;PNG&quot; /&gt; &lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/macigamekoma-06-cookies.png#compare&quot; alt=&quot;PNG&quot; /&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/macigamekoma-07-eggs.png#compare&quot; alt=&quot;PNG&quot; /&gt; &lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/macigamekoma-08-faces.png#compare&quot; alt=&quot;PNG&quot; /&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/macigamekoma-10-roadworks.png#compare&quot; alt=&quot;PNG&quot; /&gt; &lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/macigamekoma-09-lines.png#compare&quot; alt=&quot;PNG&quot; /&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/macigamekoma-11-xenomorph.png#compare&quot; alt=&quot;PNG&quot; /&gt; &lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/macigamekoma-12-zippo.png#compare&quot; alt=&quot;PNG&quot; /&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;br clear=&quot;both&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 04 May 2023 12:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/05/04/macigame-user-created-graphics/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/05/04/macigame-user-created-graphics/</guid>
        </item>
      
    
      
        <item>
          <title>Sparrow Solitaire Tile Workshop</title>
          <description>&lt;p&gt;A little known feature of &lt;a href=&quot;https://sparrowsolitaire.com&quot;&gt;Sparrow Solitaire&lt;/a&gt; is its ability to load user-generated content from files copied onto the &lt;a href=&quot;https://play.date&quot;&gt;Playdate&lt;/a&gt;. One day I thought it would be cool to combine two tile sets, so I built a web app to do it!&lt;/p&gt;

&lt;p&gt;A wild tile set builder appears! &lt;a href=&quot;https://sparrowsolitaire.com/workshop/&quot;&gt;sparrowsolitaire.com/workshop/&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;3-in-1&quot;&gt;3-in-1&lt;/h2&gt;

&lt;p&gt;As well as allowing you to cherry pick tiles from existing sets (and sharing that selection data with people), you can also load your own image data into the “user” row. This is done using the Pasteboard text area, which accepts a few different types of data.&lt;/p&gt;

&lt;p&gt;First it accepts a PNG URL which will be loaded into the user row and must be the correct dimensions.&lt;/p&gt;

&lt;p&gt;Secondly it accepts data:image (recommended &amp;amp; most versatile) which can be of any dimension. You can easily copy data:image straight out of the &lt;a href=&quot;https://www.piskelapp.com&quot;&gt;Piskel&lt;/a&gt; pixel art web app. You can also generate it on the command line, using the small script below, or using &lt;a href=&quot;https://www.alfredforum.com/topic/20306-clipboard-image-to-data-uri/&quot;&gt;an Alfred workflow&lt;/a&gt; or similar automation.&lt;/p&gt;

&lt;noscript&gt;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/c19ac6d2b8565fea9e3e45909ddddc9b&quot;&gt;View the source code as a Gist&lt;/a&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;script src=&quot;https://gist.github.com/gingerbeardman/c19ac6d2b8565fea9e3e45909ddddc9b.js&quot;&gt;&lt;/script&gt;

&lt;p&gt;Thirdly, and finally, if you’d rather create a full tile set of your own, you can do it all in &lt;a href=&quot;https://www.piskelapp.com&quot;&gt;Piskel&lt;/a&gt; and save it online as a GIF. Paste this URL into Tile Workshop and you can save it straight to an image format suitable for use on your Playdate.&lt;/p&gt;

&lt;p&gt;Please do get in touch if you create any tile sets of your own!&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/sparrow-solitaire-tile-workshop.png&quot; alt=&quot;PNG&quot; title=&quot;Sparrow Solitaire Tile Workshop&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 01 May 2023 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/05/01/sparrow-solitaire-tile-workshop/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/05/01/sparrow-solitaire-tile-workshop/</guid>
        </item>
      
    
      
        <item>
          <title>Resurrecting an ASMedia USB hard drive enclosure</title>
          <description>&lt;p&gt;A while ago I bought a 2.5” Crucial SSD and a &lt;em&gt;UGREEN USB 3.1 Gen 2 Hard Drive Enclosure&lt;/em&gt; (SKU: &lt;a href=&quot;https://www.ugreen.com/collections/hard-drive-enclosure/products/usb-3-1-gen-2-hard-drive-enclosure&quot;&gt;70499&lt;/a&gt;) on which to keep some working files whilst connected to a Mac mini. I used that on macOS 10.13 High Sierra, 10.14 Mojave, and 11 Big Sur (I skipped 10.15 Catalina). Over the years the setup served me well.&lt;/p&gt;

&lt;p&gt;After I upgraded to an M1 MacBook Pro I didn’t need to use that sort of setup, so I just kept the external drive in my travel bag to be used as a backup drive.&lt;/p&gt;

&lt;h2 id=&quot;the-problem&quot;&gt;The problem&lt;/h2&gt;

&lt;p&gt;The first time I plugged it in on macOS 12 Monterey it didn’t show up, but I didn’t have time to troubleshoot so I put it away again. Today I had some free time so I plugged it in and, unsurprisingly, it did not mount. Time to do some research!&lt;/p&gt;

&lt;p&gt;First, I tried it in my Windows VM. No joy. Then I tried it on a real Windows PC: it mounted briefly and then disappeared. Interesting! Thankfully Windows gave me a little more information to go on than macOS, it showed the chipset model number: ASMT2235&lt;/p&gt;

&lt;h2 id=&quot;the-diagnosis&quot;&gt;The diagnosis&lt;/h2&gt;

&lt;p&gt;A quick web search found some &lt;a href=&quot;https://www.station-drivers.com/index.php/en/outils/Drivers/Asmedia/ASM-105x-115x-215x-(ASMT-xxxx)-Sata-USB-3.x-controllers/ASM2235-Sata-USB-3.1-controllers/ASMedia-ASM2235-SATA-USB-3.1-Firmware-Version-161102_D1_05_01/lang,en-gb/&quot;&gt;references to a firmware update&lt;/a&gt; that “resolves intermittent mounting issues in Windows” which sounded like just the ticket!&lt;/p&gt;

&lt;h2 id=&quot;the-plan&quot;&gt;The plan&lt;/h2&gt;

&lt;p&gt;I found a great &lt;a href=&quot;https://www.youtube.com/watch?v=DOxrXnEwqJY&quot;&gt;YouTube video that showed the process&lt;/a&gt; and explained what you should and should not do. The video was created in late 2022 and advised installing the firmware that started with the same number as the one on your drive, but my drive already had that installed (version 171120_D1_1E_80). Then, whilst I was looking at all the other available firmware, I noticed that the first part of the filename looked more like a date to me, one that roughly matched when the firmware was released.&lt;/p&gt;

&lt;h2 id=&quot;the-solution&quot;&gt;The solution&lt;/h2&gt;

&lt;p&gt;So I decided to try flashing the firmware with the most recent date (version &lt;a href=&quot;https://www.usbdev.ru/files/asmedia/asmt2235firmware/&quot;&gt;220906_D1_45_01&lt;/a&gt;). The flashing tool, MPTools, needs to have its interface unlocked using the password “asmedia” and then you should select the line in the window that corresponds to your drive. It shouldn’t let you flash the wrong drive, but please be careful!&lt;/p&gt;

&lt;p&gt;After displaying a green progress bar, the tool declared the process was a “PASS”, and everything looked great. I unmounted the disk from Windows and it appeared in macOS — it had worked!&lt;/p&gt;

&lt;h2 id=&quot;lights-out&quot;&gt;Lights out?&lt;/h2&gt;

&lt;p&gt;The only change after all of this is that the drive enclosure no longer shows a LED when powered on, which is a minor inconvenience in the grand scheme of things.&lt;/p&gt;

&lt;p&gt;The LED can be enabled by flashing a slightly less than newest firmware (version &lt;a href=&quot;https://www.usbdev.ru/files/asmedia/asmt2235firmware/&quot;&gt;200416_D1_43_00&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;At this point, given that it’s proven these firmware updates do contain fixes, the choice is yours whether to have the light or not.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 22 Apr 2023 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/04/22/resurrecting-an-asmedia-usb-hard-drive-enclosure/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/04/22/resurrecting-an-asmedia-usb-hard-drive-enclosure/</guid>
        </item>
      
    
      
        <item>
          <title>Sparrow Solitaire for Playdate</title>
          <description>&lt;p&gt;I’ve &lt;a href=&quot;/2022/07/13/sparrow-solitaire-for-playdate/&quot;&gt;previously&lt;/a&gt; written about the Playdate game Sparrow Solitaire, when we released the Early Access version of the game. That was almost 9 months ago and a lot has changed!&lt;/p&gt;

&lt;p&gt;This week the &lt;a href=&quot;https://vogelscript.itch.io/sparrow-solitaire/devlog/515286/sparrow-solitaire-v10&quot;&gt;hugely expanded full version&lt;/a&gt; of the game &lt;a href=&quot;https://vogelscript.itch.io/sparrow-solitaire&quot;&gt;released on itch.io&lt;/a&gt;, where it’s been for sale for a while, &lt;a href=&quot;https://play.date/games/sparrow-solitaire/&quot;&gt;and on Playdate Catalog&lt;/a&gt; the new on-device store. It even got its &lt;a href=&quot;https://sparrowsolitaire.com&quot;&gt;own website&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;This post is a continuation of the history of the development of the game, going into the conceptual decisions and visual inspiration.&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;Wb5fw7rCfl4&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;mahjong-or-not-mahjong-that-is-the-question&quot;&gt;&lt;em&gt;Mahjong&lt;/em&gt; or &lt;em&gt;not Mahjong&lt;/em&gt;, that is the question?&lt;/h2&gt;

&lt;p&gt;This type of game is commonly called Mahjong Solitaire, because it uses mahjong tiles to form the layouts and it’s usually a single-player game. But the traditional tiles are somewhat inscrutable to newcomers. They are from a totally different game that goes by the name of &lt;em&gt;Mahjong&lt;/em&gt;, which further confuses the situation. For this reason most Mahjong Solitaire games use alternative, more recognisable and approachable tile patterns.&lt;/p&gt;

&lt;p&gt;Whilst reading about the history of mahjong, I discovered that in Chinese the game was originally called 麻雀 (pinyin: máquè)—meaning &lt;em&gt;sparrow&lt;/em&gt;. This seemed like a nice alternative name for the game, allowing me to use alliteration, and avoiding the complexity that comes with the traditional mahjong tiles, and of course having cultural sensitivity top of mind.&lt;/p&gt;

&lt;h2 id=&quot;a-brief-history-of-mahjong-solitaire&quot;&gt;A brief history of Mahjong Solitaire&lt;/h2&gt;

&lt;p&gt;Mahjong Solitaire is widely considered a Western invention in much the same way as French-suited playing cards and their related Patience/Solitaire games, but both have their origins in China.&lt;/p&gt;

&lt;p&gt;Computer game Mahjong Solitaire was originally &lt;a href=&quot;https://forest-flower.com/university_old/note.php?timestamp=2019-09-09+03%3A41%3A00&quot;&gt;created by Brodie Lockard in 1981 on the PLATO system and named Mah-Jongg&lt;/a&gt; after the game that uses the same tiles for play. Lockard &lt;a href=&quot;https://www.salon.com/2017/11/19/how-a-little-known-computer-network-system-changed-the-history-of-the-internet/&quot;&gt;claimed that it was based on a centuries-old Chinese game called “the Turtle”&lt;/a&gt; that he had been shown whilst in hospital after a serious accident that left him paralysed from the neck down.&lt;/p&gt;

&lt;p&gt;Not only did Brodie create the PLATO version in 1981 using only his mouth to type the code and draw the graphics, but he went on to make the Apple Macintosh version which was published in 1986 by Activision, as Shanghai, which sold millions of copies. Shanghai II came in 1989 and a whole new genre of games was born.&lt;/p&gt;

&lt;h2 id=&quot;wherefore-art-thou-macintosh&quot;&gt;Wherefore art thou Macintosh?&lt;/h2&gt;

&lt;p&gt;An interesting point about the first two versions of the computer game: they both had monochrome displays (also referred to as 1-bit). &lt;a href=&quot;https://forest-flower.com/university_old/note.php?timestamp=2019-09-09+03%3A41%3A00&quot;&gt;PLATO was orange on black&lt;/a&gt;, and &lt;a href=&quot;https://macgui.com/downloads/?file_id=14895&quot;&gt;Macintosh was black on white&lt;/a&gt;. Funnily enough Playdate is also monochrome: dark grey on pale grey. Upon seeing the Sharp Memory LCD display that is used in the Playdate I was instantly reminded of the original Apple Macintosh. I mean, I still use &lt;a href=&quot;/2021/04/17/turning-an-ipad-pro-into-the-ultimate-classic-macintosh/&quot;&gt;System 7 on an iPad Pro&lt;/a&gt; and have a 1991 Macintosh Classic at home so it did not take much to remind me, but it did.&lt;/p&gt;

&lt;p&gt;My initial explorations around 1-bit graphics happened on Macintosh, long before I had ever held a Playdate in my hands. I explored fill patterns, dithering algorithms (eventually discovering and popularising a &lt;a href=&quot;https://hbfs.wordpress.com/2013/12/31/dithering/&quot;&gt;little known algorithm&lt;/a&gt;), old drawing software optimised for 1-bit graphics, and diving head first into old clip art collections. Sparrow Solitaire could be considered the culmination of all of this exploration and gathered knowledge presented in a single game.&lt;/p&gt;

&lt;p&gt;Once I got hold of a Playdate (eternal thanks, &lt;a href=&quot;http://lmnt.me&quot;&gt;Louie&lt;/a&gt;!) I started thinking about implementation details. Coding prototypes, figuring out sizes, textures, shadows, frame rate, tricks, optimisations, but with no particular game in mind. Just sailing free across a sea of ideas.&lt;/p&gt;

&lt;p&gt;I struck upon a novel way to generate patterns of dots. Instead of using organised Beyer dither patterns, I used error diffusion dithering and fed it a solid colour. When a shade of grey is run through Burkes dithering algorithm it produces organic-looking patterns of dots that are ever so pleasing to the eye. Interestingly, other dithering algorithms don’t exhibit the same result. This image became a catalyst and the core of Sparrow Solitaire.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/sparrow-release-dots.png&quot; alt=&quot;PNG&quot; title=&quot;A shade of grey fed into the &amp;lt;em&amp;gt;Burkes&amp;lt;/em&amp;gt; dithering algorithm&quot; /&gt;&lt;/p&gt;

&lt;p&gt;After this I drew the traditional Chinese mahjong tile set, and figured out a tile size that would allow the standard Mahjong Solitaire layouts to fit fully on screen. Unlike the PLATO and Macintosh games, which used border thickness to denote the height of a tile in the layout, I offset the tiles in a sort of isometric view and added a repeating shadow dither pattern. After this I drew regional variations for Japan, Europe and America. I drew tile sets inspired by the original late-90s Japanese Emoji set, others based on Egyptian and Toki Pona heiroglyphs, and an alphanumeric tile set I thought might be easiest for newcomers. I even recorded sounds of my own mahjong tiles.&lt;/p&gt;

&lt;h2 id=&quot;sunset&quot;&gt;Sunset&lt;/h2&gt;

&lt;p&gt;I found (and promptly forgot about until just now!) royalty free sound effects of sparrows, rain, button presses, confirmation tones. During all of this, amongst my normal music listening, I stumbled across a song that I thought sounded really great: it was the track &lt;a href=&quot;https://soundcloud.com/iiyume/starry-dish&quot;&gt;“Starry Dish” by Yuyake Monster&lt;/a&gt; a Japanese music producer. The track is a sort of bouncy low-fi video-game hip-hop and piano thing. I wanted to hear more by this musician, so I clicked on their profile and listened to the next track. It was “Herbal Remedies” and I liked it even more! It featured plucked strings and a melodic bass line and… about half way through… bird song! And these tunes were already tagged as royalty free, so it was meant to be. When I reached out to Yuyake Monster they were super happy to have their music used in a game.&lt;/p&gt;

&lt;p&gt;
&lt;iframe width=&quot;100%&quot; height=&quot;166&quot; scrolling=&quot;no&quot; frameborder=&quot;no&quot; allow=&quot;autoplay&quot; src=&quot;https://w.soundcloud.com/player/?url=https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F946034860&amp;amp;auto_play=false&amp;amp;show_artwork=true&amp;amp;visual=true&quot;&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;It was at this point that I released a prototype with graphics, sounds and animation of the layout dealing. I quickly realised that it would take a lot of time and effort to finish the game, so I made the difficult decision to abandon it. But work resumed later on with the help of &lt;a href=&quot;https://twitter.com/vogelscript&quot;&gt;Mac Vogelsang&lt;/a&gt;, as you can read about in &lt;a href=&quot;/2022/07/13/sparrow-solitaire-for-playdate/&quot;&gt;my earlier blog post&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;one-vision&quot;&gt;One vision&lt;/h2&gt;

&lt;p&gt;Mac had taken on the majority of the programming, slowly eroding what remained of my prototype code and refactoring things into a more solid foundation. I was concentrating on graphics and animation. We shared game design decisions. By this point we had both played a ton of mahjong solitaire games from the original Shanghai on Macintosh, through versions on almost every home console, handheld and home computer platform, to versions on the latest Nintendo consoles. We had a thorough understanding of things that worked well with a mouse, what did not work so well with a game controller, what worked best on screen and what limitations these old platforms imposed on the games.&lt;/p&gt;

&lt;p&gt;Comparing Playdate to the best handhelds from the 90s it became obvious that we were working with a much more capable device, in terms of both CPU power and graphical fidelity. We could lean into the strengths of the device and provide a tailored experience that made use of the Playdate’s unique control mechanism - the crank - as well as its excellent sound and graphics hardware. I hope Mac will write more about getting the most out of the device, writing code that made the most of Playdate performance to do things that have never been done before in a mahjong solitaire game. Sparrow Solitaire has truly ground-breaking features some of which are only possible on Playdate.&lt;/p&gt;

&lt;p&gt;Meanwhile, with the prompting and encouragement of Mac, I researched classic Chinese and Japanese painting techniques and drew some Eurasian tree sparrows and cherry blossom in the classic ink and watercolour style.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/sparrow-release-strokes.png&quot; alt=&quot;PNG&quot; title=&quot;Vector drawings of tree sparrow and blossom, using only strokes&quot; /&gt;&lt;/p&gt;

&lt;p&gt;These illustrations were used to create the game’s launch animation. I started to create the animation the traditional way, but quickly changed tact and created it programatically instead.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/sparrow-release-launch.gif#playdate&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;content-matters&quot;&gt;Content matters&lt;/h2&gt;

&lt;p&gt;For the full version of the game I created additional backgrounds, cursors, grids, animations, tools to aid development and more besides. I created several fonts, all carefully kerned and tweaked to look their best on the Playdate. I’d &lt;a href=&quot;/2020/10/03/found-whilst-backing-up-an-old-pc/&quot;&gt;created a popular font in my teens&lt;/a&gt; and it was fun to get back to that. More backgrounds, more tile sets including my favourite “zen”. Even now, when I see this tile set in the game, I often shake my head in disbelief. How was I capable of drawing these symbols so well at such a small size? My &lt;a href=&quot;https://www.youtube.com/watch?v=y4-2iTJW-2Y&quot;&gt;Susan Kare&lt;/a&gt; moment, if you will. If ever there was a lesson that you should believe in your own abilities, this was it for me.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/sparrow-release-zen.png#playdate&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;hidden-in-plain-sight&quot;&gt;Hidden in plain sight&lt;/h2&gt;

&lt;p&gt;The influence of the Macintosh and the nostalgia in the final look and feel of the game is something I wear proudly. Sparrow Solitaire is the sum total of all my passions and interests, wrapped up in a neat little game that will provide hundreds of hours of fun and relaxation.&lt;/p&gt;

&lt;p&gt;But what about if you look a little deeper? You will find brush/fill patterns from &lt;a href=&quot;https://en.wikipedia.org/wiki/MacPaint&quot;&gt;MacPaint&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Atkinson_dithering&quot;&gt;Atkinson dithering&lt;/a&gt; as first seen in ThunderScan, elements drawn in &lt;a href=&quot;/2021/04/06/ultrapaint-manual/&quot;&gt;UltraPaint&lt;/a&gt;, pixels generated using &lt;a href=&quot;https://en.wikipedia.org/wiki/Dave_Theurer&quot;&gt;DeBabelizer&lt;/a&gt;, and so much more. Heck, we even use &lt;a href=&quot;https://en.wikipedia.org/wiki/Garamond&quot;&gt;Garamond&lt;/a&gt; as our brand typeface which is the same one Apple used in their classic Macintosh advertising, the most well known of which is the “Think different” campaign. Sparrow Solitaire is my love letter to the Macintosh, but runs on a device that fits in the palm of your hand.&lt;/p&gt;

&lt;p&gt;One of my favourite “&lt;a href=&quot;https://en.wikipedia.org/wiki/Easter_egg_(media)&quot;&gt;Easter Eggs&lt;/a&gt;” in Sparrow Solitaire is some clip art from the &lt;a href=&quot;https://macintoshgarden.org/author/enzan-hoshigumi-co&quot;&gt;Scroll collections&lt;/a&gt;, published in 1986/87 by Japanese Macintosh specialists Enzan-Hoshigumi. Specifically I have used a border for the manual/credits overlay, and several sections of artwork for our patterned backgrounds. These sections of artwork were not bundled as brushes/fills, but are nevertheless easy to cut out and use as a repeating fill in an image editor. They are based on repeating elements that are much larger than the 16x16 pixel patterns of MacPaint, so they allow for patterns that are not as garish and easier on the eyes. Plus, I love the fact that in 2023 Enzan-Hoshigumi finally have their first video game credit, almost &lt;a href=&quot;/2021/12/16/tomoya-ikeda-macintosh-artist/&quot;&gt;40 years after working on their first video game&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/sparrow-release-enzan-hoshigumi.png#playdate&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;the-great-wave-of-mahjong&quot;&gt;The Great Wave of Mahjong&lt;/h2&gt;

&lt;p&gt;Finally, to come full circle back to the image seen in the trailer at the top of the page: “The Great Wave of Mahjong”. I came up with the concept for the image and commissioned the wonderful &lt;a href=&quot;https://www.instagram.com/vxclhd/&quot;&gt;Vxcl&lt;/a&gt; to create it, leaving them free to interpret the brief. They pretty much nailed it first time, and there were only a handful of small notes from me - in the form of &lt;a href=&quot;https://twitter.com/gingerbeardman/status/1646262994727321602?s=20&quot;&gt;screen grabs with coloured highlighter markup&lt;/a&gt; - to tweak the alignment of details of a few elements. This is the &lt;a href=&quot;/2021/08/23/daily-driver-teaser-artwork/&quot;&gt;second such render&lt;/a&gt; I’ve commissioned, a look inspired by 1980s Japanese PC/game mags.&lt;/p&gt;

&lt;p&gt;You can download a high resolution version of this image at &lt;a href=&quot;https://vogelscript.itch.io/sparrow-solitaire&quot;&gt;itch.io&lt;/a&gt; to use as PC/phone wallpaper.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/great-wave-of-mahjong-by-vxcl.jpg&quot; alt=&quot;JPG&quot; title=&quot;&amp;lt;em&amp;gt;&amp;#x201C;The Great Wave of Mahjong&amp;#x201D;&amp;lt;/em&amp;gt;, by Vxcl&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;update&quot;&gt;Update!&lt;/h2&gt;

&lt;p&gt;Less than two weeks after version 1.0 we released an update to address a few small issues and add a bunch more content! It features dynamic weather effects, three new tile sets and more cool stuff. You can &lt;a href=&quot;https://twitter.com/gingerbeardman/status/1649809550239846405&quot;&gt;read about version 1.1 in this Twitter thread&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;elsewhere&quot;&gt;Elsewhere&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;2024-03-08—&lt;a href=&quot;https://play.date/games/community-awards-2023/&quot;&gt;Playdate Community Awards 2023: Best Puzzle Game&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 13 Apr 2023 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/04/13/sparrow-solitaire-for-playdate/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/04/13/sparrow-solitaire-for-playdate/</guid>
        </item>
      
    
      
        <item>
          <title>Where can I see Hokusai’s Great Wave today?</title>
          <description>&lt;p&gt;I’ve been obsessed with &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Great_Wave_off_Kanagawa&quot;&gt;The Great Wave&lt;/a&gt; (or its more literal title: &lt;em&gt;Under the Wave, Off Kanagawa&lt;/em&gt;) since the mid-1990s. This Japanese woodblock print designed by &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Hokusai&quot;&gt;Katsushika Hokusai&lt;/a&gt;&lt;/em&gt; is one of the world’s most iconic works of art. You’ve probably seen it crop up in a whole host of scenarios.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/great-wave-british-museum.jpg&quot; alt=&quot;JPG&quot; title=&quot;One of three early impressions of The Great Wave in the collection of The British Museum&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The interesting thing about woodblock prints is that the original piece of art was destroyed during the act of &lt;a href=&quot;https://www.youtube.com/watch?v=IBcB_dYtGUg&quot;&gt;mass production&lt;/a&gt;. In the case of The Great Wave, there are around 100 known, publicly viewable, early impressions that were made around the time Hokusai was alive. And there are very many impressions made after his death, not to mention modern prints that are not made using woodblocks.&lt;/p&gt;

&lt;p&gt;The trick to seeing one of the early impressions is being in the right place at the right time, because they are sensitive to light and will fade with over-exposure. Most are stored away for several of years, make a brief appearance, and then go back into long-term storage.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=U_025NB8alw&quot;&gt;These early impressions vary&lt;/a&gt; in their details, colours and condition, so it’s worthwhile seeing more than just one. I’ve been lucky enough with timing to get to see two different impressions: the first was at The British Museum back in the early 2000s, and the second at &lt;a href=&quot;https://www.bristolmuseums.org.uk/bristol-museum-and-art-gallery/whats-on/hokusai-hiroshige-japanese-prints/&quot;&gt;Bristol Museum and Art Gallery&lt;/a&gt; in 2018. But in 2021 I missed seeing a different impression at The British Museum, one of three in their collection.&lt;/p&gt;

&lt;p&gt;Missing a viewing made me think about all the impressions in galleries and museums around the world, and which of them might currently be viewable. So I made a list of known impressions, with thanks to &lt;a href=&quot;https://www.britishmuseum.org/sites/default/files/2022-03/korenberg_article-for_hokusai%20_edited_volume_final-2020_accessible.pdf&quot;&gt;Capucine Korenberg at The British Museum&lt;/a&gt; for a head start. I spent time digging up their respective pages across the various museum and gallery online collections, which was the most laborious part of this project. After that I set up some automation using &lt;a href=&quot;https://github.com/huginn/huginn&quot;&gt;Huginn&lt;/a&gt; to alert me when an impression is pulled out of storage and put “on view”. This doesn’t happen very often—every few months or so, if we’re lucky—so it’s a nice surprise when a notification pops up. I also monitor Japanese press releases and news websites. If there’s any interest I’ll write a separate blog post about the automation I put in place for this project.&lt;/p&gt;

&lt;p&gt;Of course, there’s no fun in keeping this to myself so I put together a website containing the places where you can see The Great Wave today:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://greatwavetoday.com&quot;&gt;greatwavetoday.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As well as checking the website you can also subscribe to its RSS feed, so you’ll also receive those lovely surprise notifications! Both the web page and RSS feed are automatically generated.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Thanks to &lt;a href=&quot;https://twitter.com/soleio&quot;&gt;Soleio&lt;/a&gt; for thinking of such a great domain name!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;final-thoughts&quot;&gt;Final thoughts&lt;/h3&gt;

&lt;p&gt;Please do let me know if this project helps you see an early impression of Hokusai’s Great Wave.&lt;/p&gt;

&lt;p&gt;If you’re a museum or gallery and would like to have your impression tracked, please &lt;a href=&quot;https://github.com/gingerbeardman/greatwavetoday/issues/new/choose&quot;&gt;click this link and follow the prompts&lt;/a&gt;.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 10 Apr 2023 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/04/10/where-can-i-see-hokusai-great-wave-today/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/04/10/where-can-i-see-hokusai-great-wave-today/</guid>
        </item>
      
    
      
        <item>
          <title>Working around a breaking change in WebKit CSS</title>
          <description>&lt;p&gt;Safari 16.4 has some breaking changes (fixes?) to CSS, which means &lt;a href=&quot;https://github.com/uetchy/Polyglot&quot;&gt;Polyglot&lt;/a&gt; the Safari Extension by &lt;a href=&quot;https://twitter.com/uechz&quot;&gt;Yasuaki Uechi&lt;/a&gt; that I use every day no longer displays its popup. Oh no!&lt;/p&gt;

&lt;p&gt;It turns out that some &lt;a href=&quot;https://github.com/uetchy/Polyglot/blob/2c3c52e6eb35f0bd1a59a067afc92ff8f876fbc1/PolyglotSafariExtension/ContentScript/content.css#L39&quot;&gt;6-year-old CSS&lt;/a&gt; and recent changes in WebKit mean the translation popup disappears immediately after it appears.&lt;/p&gt;

&lt;p&gt;But, all is not lost, I created a quick-fix workaround with a user stylesheet!&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/uetchy/Polyglot/issues/128#issuecomment-1487229870&quot;&gt;github.com/uetchy/Polyglot/issues/128#issuecomment-1487229870&lt;/a&gt;&lt;/p&gt;

&lt;noscript&gt;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/5baabc9b141e1c395c73af237fdd0e49&quot;&gt;View the source code as a Gist&lt;/a&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;script src=&quot;https://gist.github.com/gingerbeardman/5baabc9b141e1c395c73af237fdd0e49.js&quot;&gt;&lt;/script&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 28 Mar 2023 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/03/28/working-around-a-breaking-change-in-webkit-css/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/03/28/working-around-a-breaking-change-in-webkit-css/</guid>
        </item>
      
    
      
        <item>
          <title>Pairing a Wii remote on macOS</title>
          <description>&lt;h2 id=&quot;universal&quot;&gt;Universal&lt;/h2&gt;

&lt;p&gt;If you’re using the Dolphin emulator, by far the easiest method of syncing a Wii remote with it is to use a cheap Bluetooth adapter and Dolphin’s “Passthrough a Bluetooth adapter” controller option.&lt;/p&gt;

&lt;p&gt;If you want to use the Wii remote outside of Dolphin, on modern macOS, you have a couple of options:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;software: &lt;a href=&quot;https://github.com/dolphin-emu/WiimotePair&quot;&gt;WiimotePair&lt;/a&gt; will pair a Wii remote at system level, only needed once per remote&lt;/li&gt;
  &lt;li&gt;hardware: &lt;a href=&quot;https://amzn.to/44CpM1x&quot;&gt;MAYFLASH MAGIC-NS Bluetooth adapter&lt;/a&gt; (any version will work for Wii remotes)&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;p&gt;The following section remains only for historical sake:&lt;/p&gt;

&lt;h2 id=&quot;intel-only&quot;&gt;Intel-only&lt;/h2&gt;

&lt;p&gt;Pairing a Nintendo Wii remote used to work just fine on macOS, but starting with Monterey Apple changed something and Wii remotes now require a PIN code. Maybe they took out the Wii remote special case when they rewrote IOBluetooth? &lt;em&gt;The method below only works for Intel Macs.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Anyway, some very clever people have already documented &lt;a href=&quot;https://wiibrew.org/wiki/Wiimote#Bluetooth_Pairing&quot;&gt;how to calculate the PIN code for any Wii remote&lt;/a&gt;. It’s the Bluetooth network &lt;a href=&quot;https://en.wikipedia.org/wiki/MAC_address&quot;&gt;MAC address&lt;/a&gt; of the device &lt;em&gt;in reverse&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;But a PIN code made up of hex numbers is difficult to type by hand. It isn’t a decimal number, or ASCII text, and it quite probably contains special characters that are not represented on a keyboard. All that to say: we can’t enter it into the macOS Bluetooth pairing window.&lt;/p&gt;

&lt;p&gt;However, we can use the &lt;a href=&quot;https://github.com/toy/blueutil&quot;&gt;blueutil&lt;/a&gt; command-line tool to automate the following steps:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;get the MAC address&lt;/li&gt;
  &lt;li&gt;calculate the PIN code&lt;/li&gt;
  &lt;li&gt;pair&lt;/li&gt;
  &lt;li&gt;connect&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;All you have to do is hold down 1+2 on your Wii remote and wait a short while.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you’re using an Intel Mac you might have luck with the script below, but if you’re on Apple silicon you’ll be sadly out of luck and unable to pair your Wii remote.&lt;/strong&gt;&lt;/p&gt;

&lt;noscript&gt;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/05030c73714b3aa3202aeee7f21c3b1e&quot;&gt;View the source code as a Gist&lt;/a&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;script src=&quot;https://gist.github.com/gingerbeardman/05030c73714b3aa3202aeee7f21c3b1e.js&quot;&gt;&lt;/script&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 21 Mar 2023 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/03/21/automatically-pairing-a-wii-remote-on-macos/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/03/21/automatically-pairing-a-wii-remote-on-macos/</guid>
        </item>
      
    
      
        <item>
          <title>Reviewing the iPhone Xs in 2023</title>
          <description>&lt;p&gt;Yes, the iPhone Xs came out in 2018. I thought it would be interesting to review it in 2023. Plus, I only just bought one!&lt;/p&gt;

&lt;p&gt;I hung on to the old home-button form factor for as long as I could, using a 6s for the longest time, but two things made me move to an edge-to-edge phone:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;I was on an SE2020 which doesn’t have enough RAM to run modern iOS well. The newer SE2022 has more RAM, but still suffers from…&lt;/li&gt;
  &lt;li&gt;the encroachment of user interface meant for edge-to-edge phones that do not work well on home-button devices: gestures, buttons, and weird spacings and misalignments: death by a thousand cuts.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So, why an Xs over a &lt;em&gt;newer&lt;/em&gt; iPhone? Many reasons.&lt;/p&gt;

&lt;h2 id=&quot;good&quot;&gt;Good&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;Extra RAM is the biggest benefit, especially when it comes to multi-tasking&lt;/li&gt;
  &lt;li&gt;Home bar interactions are great, they make sense for this device&lt;/li&gt;
  &lt;li&gt;Safari address bar at the bottom also makes sense!&lt;/li&gt;
  &lt;li&gt;One of my favourite gestures is swiping up on the editable Safari address bar to get to tab view&lt;/li&gt;
  &lt;li&gt;Being able to see large cards for every tab now makes sense&lt;/li&gt;
  &lt;li&gt;3D Touch is so much more immediate than a long press&lt;/li&gt;
  &lt;li&gt;Camera features less computational adjustments&lt;/li&gt;
  &lt;li&gt;OLED blacks are really black&lt;/li&gt;
  &lt;li&gt;256GB capacity means less hassle&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;bad&quot;&gt;Bad&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;Top corners accessibility is a pain, though reachability helps&lt;/li&gt;
  &lt;li&gt;Entering passwords is slower due to Face ID being slower than fingerprint&lt;/li&gt;
  &lt;li&gt;Having to enter my passcode more frequently due to Face ID fails&lt;/li&gt;
  &lt;li&gt;OLED ghosting at low brightness&lt;/li&gt;
  &lt;li&gt;3D Touch interactions other than long press have been removed&lt;/li&gt;
  &lt;li&gt;&lt;del&gt;Speakers are nowhere near as good as on the SE2020&lt;/del&gt;&lt;br /&gt;   &lt;em&gt;This issue was fixed for free at the same time as an official battery replacement&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;indifferent&quot;&gt;Indifferent&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;Speed is slightly slower than SE2020, but the increased RAM and user interface fit are a net gain&lt;/li&gt;
  &lt;li&gt;Very slippery, but I use a case that provides additional grip and protection as I am clumsy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, there we have it! I bought an old iPhone rather than a new one and I’m enjoying it.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 20 Mar 2023 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/03/20/reviewing-the-iphone-xs-in-2023/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/03/20/reviewing-the-iphone-xs-in-2023/</guid>
        </item>
      
    
      
        <item>
          <title>Working around the YouTube Channel RSS limit</title>
          <description>&lt;p&gt;I’ve been falling behind watching Masahiro Sakurai’s game development videos, so decided to subscribe to his YouTube channel using RSS. This is as simple as plugging the channel URL https://youtube.com/@sora_sakurai_en into your RSS feed reader.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BUT only the most recent 15 videos will be listed!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Google’s YouTube API allows listing of the most recent 50 videos, but that’s easier said than done as you’d have to get an API key, write some code to do this query, and host it somewhere online. Wouldn’t it be great if somebody else has already done the hard work and is sharing their solution?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Well, we’re in luck!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Thanks to this &lt;a href=&quot;https://stackoverflow.com/questions/56430703/how-to-use-youtube-data-api-v3-to-get-more-than-15-videos-in-an-rss-reader-ne#comment99478631_56430703&quot;&gt;helpful StackOverflow comment&lt;/a&gt;, you can use the following URL to list the most recent 50 videos from Sakurai’s channel:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;https://scriptbarrel.com/xml.cgi?channel_id=UCv1DvRY5PyHHt3KN9ghunuw&amp;amp;name=%40sora_sakurai_en&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This will work for any other YouTube channel by simply substituting the relevant &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;channel_id&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;name&lt;/code&gt; details.&lt;/p&gt;

&lt;h2 id=&quot;if-you-need-more-than-50&quot;&gt;If you need more than 50&lt;/h2&gt;

&lt;p&gt;You can &lt;a href=&quot;https://authory.com/blog/create-a-youtube-rss-feed-with-vastly-increased-limits/&quot;&gt;use Authory&lt;/a&gt; (free 30 day trial) to create a feed that will return up to 1000 most recent videos.&lt;/p&gt;

&lt;h2 id=&quot;important-getting-back-on-track&quot;&gt;Important: getting back on track&lt;/h2&gt;

&lt;p&gt;After you’ve retrieved the historic videos, you should edit the RSS feed link in your reader to change it back to the original YouTube channel link. This will let you keep the historic videos from the workaround feed and retrieve any future videos from the standard YouTube feed, so you’re not relying on a third-party service.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 09 Jan 2023 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/01/09/working-around-the-youtube-channel-rss-limit/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/01/09/working-around-the-youtube-channel-rss-limit/</guid>
        </item>
      
    
      
        <item>
          <title>Turning a Twitter Thread into a Blog Post</title>
          <description>&lt;p&gt;Sometimes after posting to Twitter I’ll decide that I should really archive the information as a blog post. For single tweets that’s as easy (or difficult) as copying the text and images and publishing. For Twitter threads, it could be a lot more complicated. With a bit of lateral thinking I’ve found an easy way to do it.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Get the URL to a post in the thread&lt;/li&gt;
  &lt;li&gt;Unroll the thread using &lt;a href=&quot;https://threadreaderapp.com&quot;&gt;threadreaderapp.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Open the web inspector&lt;/li&gt;
  &lt;li&gt;Highlight the element that contains the content (the one with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;data-controller=&quot;mentions&quot;&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;Right click, and choose Copy &amp;gt; HTML&lt;/li&gt;
  &lt;li&gt;Paste the HTML into this &lt;a href=&quot;https://codebeautify.org/html-to-markdown&quot;&gt;Markdown converter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Copy the Markdown&lt;/li&gt;
  &lt;li&gt;Paste into your blogging system&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The conversion from HTML to Markdown cleans or sanitises the content making for a straightforward paste into most blogging software.&lt;/p&gt;

&lt;h2 id=&quot;optional-post-processing&quot;&gt;Optional post-processing&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;You might want to repoint all embedded images from Twitter to locally-hosted copies&lt;/li&gt;
  &lt;li&gt;Some images in long threads might be lazy loaded, so you’ll need to fix those&lt;/li&gt;
  &lt;li&gt;Check and reinstate any embedded video iframes&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 09 Jan 2023 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2023/01/09/turning-a-twitter-thread-into-a-blog-post/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2023/01/09/turning-a-twitter-thread-into-a-blog-post/</guid>
        </item>
      
    
      
        <item>
          <title>My most popular posts of 2022</title>
          <description>&lt;p&gt;2022 was a mixed year for me.&lt;/p&gt;

&lt;p&gt;I secured my own studio and continued to be hugely productive, creating some of my best ever work. Unfortunately, I experienced multiple traumatic events, and their lingering effects knocked out the last third of the year and beyond. Life-changing, and not in a good way.&lt;/p&gt;

&lt;h2 id=&quot;how-many-posts&quot;&gt;How many posts?&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/search/?q=2022&quot;&gt;18 posts&lt;/a&gt; (down from 55 in 2021)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;most-popular-posts&quot;&gt;Most popular posts&lt;/h2&gt;
&lt;p&gt;According to Google Analytics, my 5 most popular posts in 2022 were (most popular first):&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2022/04/07/accessing-yahoo-japan-from-europe/&quot;&gt;Accessing Yahoo! Japan from Europe&lt;/a&gt; (7 Apr) &lt;!-- 2K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2022/12/29/kawase-hasui-imaginary-world-tour/&quot;&gt;Kawase Hasui’s Imaginary World Tour&lt;/a&gt; (29 Dec)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2022/01/17/displaying-full-referrer-url-in-google-analytics-4-ga4/&quot;&gt;Displaying Full Referrer URL in Google Analytics 4 (GA4)&lt;/a&gt; (17 Jan)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2022/04/07/accessing-yahoo-japan-from-europe/&quot;&gt;Accessing Yahoo! Japan from Europe&lt;/a&gt; (7 Apr)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2022/05/20/bender-for-playdate/&quot;&gt;Bender for Playdate&lt;/a&gt; (20 May)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;best-of-the-rest&quot;&gt;Best of the rest&lt;/h2&gt;
&lt;p&gt;My personal favourites from the year (most recent first):&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2022/12/26/gaming-advent-calendar/&quot;&gt;Gaming Advent Calendar&lt;/a&gt; the one where I mention games I’ve played&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2022/10/07/fixing-bugs-using-bird-on-palm-os/&quot;&gt;Fixing bugs using Bird on Palm OS&lt;/a&gt; the one where I nerd out&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2022/07/13/sparrow-solitaire-for-playdate/&quot;&gt;Sparrow Solitaire for Playdate (Early Access)&lt;/a&gt; the one where I launch a game too early&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;most-enduring-posts&quot;&gt;Most enduring posts&lt;/h2&gt;
&lt;p&gt;According to Google Analytics, my 5 most popular posts from previous years (most popular first):&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/21/building-basiliskii-for-ios/&quot;&gt;Building BasiliskII for iOS&lt;/a&gt; (21 Apr 2021) &lt;!-- 4K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2019/04/24/recovered-forgotten-sega-exclusives-on-palm-os/&quot;&gt;Recovered: Forgotten SEGA Exclusives on Palm OS&lt;/a&gt; (24 Apr 2019) &lt;!-- 2K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/17/turning-an-ipad-pro-into-the-ultimate-classic-macintosh/&quot;&gt;Turning an iPad Pro into the Ultimate Classic Macintosh&lt;/a&gt; (17 Apr 2021) &lt;!-- 2K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/05/06/pixel-perfect-retro-gaming-in-480p/&quot;&gt;Pixel-Perfect retro gaming on LCD 480p EDTVs&lt;/a&gt; (6 May 2021) &lt;!-- 2K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/09/13/playing-old-32-bit-ios-games-in-2021/&quot;&gt;Playing old 32-bit iOS games in 2021&lt;/a&gt; (14 Sep 2021)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;previous-years&quot;&gt;Previous years&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/12/31/my-most-popular-posts-of-the-year/&quot;&gt;My most popular posts of 2021&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 31 Dec 2022 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2022/12/31/my-most-popular-posts-of-the-year/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2022/12/31/my-most-popular-posts-of-the-year/</guid>
        </item>
      
    
      
        <item>
          <title>Kawase Hasui’s Imaginary World Tour</title>
          <description>&lt;p&gt;My favourite artist is &lt;a href=&quot;https://en.wikipedia.org/wiki/Hasui_Kawase&quot;&gt;Kawase Hasui&lt;/a&gt; (1883–1957) who was a printmaker during Japan’s &lt;a href=&quot;https://en.wikipedia.org/wiki/Shin-hanga&quot;&gt;shin-hanga&lt;/a&gt; (“new prints”) movement of &lt;a href=&quot;https://en.wikipedia.org/wiki/Woodblock_printing_in_Japan&quot;&gt;woodblock printing&lt;/a&gt; in the early 20th century. I’m lucky enough to own a &lt;a href=&quot;https://brill.com/display/title/13321?rskey=leTfwY&amp;amp;result=4&quot;&gt;book containing his complete collection of his prints&lt;/a&gt;, as well as many other books featuring his work. He is known as one of the most prolific printmakers Japan has ever seen, with &lt;a href=&quot;http://www.ukiyoe-gallery.com/gallery.htm&quot;&gt;around 700 prints to his name&lt;/a&gt; and more still being discovered.&lt;/p&gt;

&lt;h2 id=&quot;woodblocks&quot;&gt;Woodblocks?&lt;/h2&gt;

&lt;p&gt;One perhaps little-known fact about &lt;em&gt;Hasui&lt;/em&gt; is that &lt;a href=&quot;http://shinhanga.net/hasuiwc.htm&quot;&gt;he was really a watercolour painter&lt;/a&gt;. He would paint the original scene, and then his team of expert woodblock carvers and printers would execute a version of his painting.&lt;/p&gt;

&lt;p&gt;The woodblock version would usually be different to the watercolour, not because the carvers and printers lacked the skill to match the original vision but rather because editorial changes would be made after the watercolour was complete. &lt;a href=&quot;http://shinhanga.net/ARThasui/wc/WCushibori.html&quot;&gt;A boat might be moved&lt;/a&gt; or &lt;a href=&quot;http://shinhanga.net/ARThasui/wc/WCsekiyado.html&quot;&gt;something added&lt;/a&gt;, all done without the need for a new watercolour and with the understanding that the master craftsmen would get it right in their execution. This sort of collaborative process was quite normal in the shin-hanga industry, and you can watch a &lt;a href=&quot;https://www.youtube.com/watch?v=BQmF3HHyWwI&quot;&gt;video of &lt;em&gt;Hasui&lt;/em&gt; and his team in action&lt;/a&gt; towards the end of his life.&lt;/p&gt;

&lt;p&gt;And the variations don’t stop there: &lt;a href=&quot;http://shinhanga.net/hasuiwc.htm#4&quot;&gt;printed versions would differ from each other&lt;/a&gt;, sometimes deliberately by printing the same scene with different colours to give the appearance of different times of day, or with additional/substitute key blocks used to add weather effects like snow or rain to an existing scene.&lt;/p&gt;

&lt;p&gt;All this to say that woodblock prints are far from unique - they were mass produced to be sold in quantity, largely as souvenirs.&lt;/p&gt;

&lt;h2 id=&quot;around-the-world&quot;&gt;Around the world&lt;/h2&gt;

&lt;p&gt;As far as I know the majority of &lt;em&gt;Hasui’s&lt;/em&gt; work are of Japanese locations, though there are a handful of prints of locations in Korea. Some other shin-hanga artists produced prints of locations even further afield, most notably &lt;a href=&quot;https://en.wikipedia.org/wiki/Hiroshi_Yoshida&quot;&gt;Yoshida Hiroshi&lt;/a&gt; who &lt;a href=&quot;https://www.scholten-japanese-art.com/printsH/811&quot;&gt;travelled through the United States&lt;/a&gt; and later throughout &lt;a href=&quot;https://www.artelino.com/articles/hiroshi_yoshida_europe.asp&quot;&gt;Europe&lt;/a&gt;, &lt;a href=&quot;https://www.scholten-japanese-art.com/printsH/1055&quot;&gt;Africa&lt;/a&gt;, &lt;a href=&quot;https://mogulesque.com/art/hiroshi-yoshida-india-pakistan-prints/&quot;&gt;India&lt;/a&gt;, and &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Yoshida_Hiroshi_-_Sochu_China.jpg&quot;&gt;China&lt;/a&gt;, as well as his native Japan. Indeed, these prints are a great source of comparison with those later on in this blog post.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;the-idea&quot;&gt;The idea&lt;/h2&gt;

&lt;p&gt;I thought it would be fun to produce images of locations from around the world in the style of &lt;em&gt;Hasui&lt;/em&gt;: to see the world through his eyes even though he never visited these places. A “what if” series of images.&lt;/p&gt;

&lt;p&gt;The stops on the Imaginary World Tour are mostly taken from one of my favourite video games, &lt;a href=&quot;https://www.gingerbeardman.com/archive/pang/places.htm&quot;&gt;Pang&lt;/a&gt;, with a few extra locations added by me to round things out a little.&lt;/p&gt;

&lt;h2 id=&quot;the-process&quot;&gt;The process&lt;/h2&gt;

&lt;p&gt;It’s important to understand the process that has generated these images. &lt;a href=&quot;https://en.wikipedia.org/wiki/Midjourney&quot;&gt;Midjourney&lt;/a&gt; is a neural network - think of it as an artificial brain - that has been trained by being shown billions of images and associated descriptions. This &lt;a href=&quot;https://www.laion.ai&quot;&gt;training set&lt;/a&gt; comprises many hundreds of terabytes of data collected from around the internet. After training the model retains only the understanding of what it has seen: none of the original images or descriptions are included. This is echoed by the size of the resulting model being only a handful of gigabytes, a tiny fraction of the size of the training data.&lt;/p&gt;

&lt;p&gt;By prompting Midjourney with something like &lt;em&gt;“Chichen Itza, in the style of Kawase Hasui”&lt;/em&gt; it will hallucinate an image from its understanding of those words. Just like you could draw a tree from memory, if asked. The important difference is that Midjourney has almost unbelievable recall and painting skills. Such image generators are new tools, &lt;a href=&quot;https://aestheticsforbirds.com/2022/11/02/ai-art-is-art/&quot;&gt;as revolutionary as the camera&lt;/a&gt;. I feel that the process of prompting Midjourney to generate images and the requesting of subsequent variations has parallels with the shin-hanga process of going from watercolour to woodblock to prints.&lt;/p&gt;

&lt;p&gt;This type of simple prompting in the style of an artist is morally contentious. In this instance I’m going to say it’s OK because I’m not trying to pass off the results as being “by” either &lt;em&gt;Hasui&lt;/em&gt; or myself - they are just for fun.&lt;/p&gt;

&lt;h3 id=&quot;notes&quot;&gt;Notes&lt;/h3&gt;

&lt;p&gt;The images below were generated by prompting Midjourney v4 in late 2022. You’ll be able to spot some quirks, impossibilities and various other errors in the paintings - such is the nature of generated art at this point in time. Interestingly, this was also the case with Japanese woodblock prints: they did not aim for realism but more of a dream-like representation of the subject matter. The images are mostly unedited: some small marks were removed from a handful of images, two were cropped, and one had perspective correction applied to it.&lt;/p&gt;

&lt;hr /&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hasui-world-tour-01-japan-mt-fuji.jpg&quot; alt=&quot;JPG&quot; title=&quot;Mount Fuji, Japan&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hasui-world-tour-02-china-great-wall.jpg&quot; alt=&quot;JPG&quot; title=&quot;Great Wall, China&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hasui-world-tour-03-china-guilin.jpg&quot; alt=&quot;JPG&quot; title=&quot;Guillin, China&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hasui-world-tour-04-thailand-wat-phra-kaew.jpg&quot; alt=&quot;JPG&quot; title=&quot;Wat Phra Kaew, Thailand&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hasui-world-tour-05-cambodia-angkor-wat.jpg&quot; alt=&quot;JPG&quot; title=&quot;Angkor Wat, Cambodia&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hasui-world-tour-06-australia-ayers-rock.jpg&quot; alt=&quot;JPG&quot; title=&quot;Uluru, Australia&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hasui-world-tour-07-india-taj-mahal.jpg&quot; alt=&quot;JPG&quot; title=&quot;Taj Mahal, India&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hasui-world-tour-08-russia-st-isaacs-cathedral.jpg&quot; alt=&quot;JPG&quot; title=&quot;Saint Isaac&apos;s Cathedral, Russia&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hasui-world-tour-09-france-arc-de-triomphe.jpg&quot; alt=&quot;JPG&quot; title=&quot;Arc de Triomphe, France&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hasui-world-tour-10-uk-houses-of-parliament.jpg&quot; alt=&quot;JPG&quot; title=&quot;Houses of Parliament, United Kingdom&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hasui-world-tour-11-spain-sagrada-familia.jpg&quot; alt=&quot;JPG&quot; title=&quot;Sagrada Família, Spain&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hasui-world-tour-12-italy-mount-vesuvius.jpg&quot; alt=&quot;JPG&quot; title=&quot;Mount Vesuvius, Italy&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hasui-world-tour-13-greece-parthenon-acropolis.jpg&quot; alt=&quot;JPG&quot; title=&quot;Parthenon on the Acropolis, Greece&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hasui-world-tour-14-egypt-giza-plateau.jpg&quot; alt=&quot;JPG&quot; title=&quot;Giza Plateau, Egypt&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hasui-world-tour-15-tanzania-mount-kilimanjaro.jpg&quot; alt=&quot;JPG&quot; title=&quot;Mount Kilimanjaro, Tanzania&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hasui-world-tour-16-usa-statue-of-liberty.jpg&quot; alt=&quot;JPG&quot; title=&quot;Statue of Liberty, USA&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hasui-world-tour-17-mexico-chichen-itza.jpg&quot; alt=&quot;JPG&quot; title=&quot;Chichén Itzá, Mexico&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hasui-world-tour-18-brazil-cristo-redentor.jpg&quot; alt=&quot;JPG&quot; title=&quot;Cristo Redentor, Brazil&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hasui-world-tour-19-antarctica-aurora-australis.jpg&quot; alt=&quot;JPG&quot; title=&quot;Aurora Australis, Antarctica&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hasui-world-tour-20-easter-island-space-moai.jpg&quot; alt=&quot;JPG&quot; title=&quot;Moai, Easter Island&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 29 Dec 2022 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2022/12/29/kawase-hasui-imaginary-world-tour/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2022/12/29/kawase-hasui-imaginary-world-tour/</guid>
        </item>
      
    
      
        <item>
          <title>Gaming Advent Calendar</title>
          <description>&lt;p&gt;At the start of December I decided to do a sort of “gaming advent calendar”, a single-tweet review of a bunch of my favourite video games. I’m collecting them here for posterity. Hopefully you will find something of interest in the list.&lt;/p&gt;

&lt;p&gt;Each tweet contained:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;hashtag #GamingAdventCalendar&lt;/li&gt;
  &lt;li&gt;title &amp;amp; year&lt;/li&gt;
  &lt;li&gt;text review&lt;/li&gt;
  &lt;li&gt;YouTube video link&lt;/li&gt;
  &lt;li&gt;4x images (box art, flyers, screenshot, etc)&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Here begins my #GamingAdventCalendar for 2022.&lt;/p&gt;

  &lt;p&gt;Twenty-five of my favourite video games between 1st and 25th December. Just for kicks!&lt;/p&gt;

  &lt;p&gt;🧵&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;1-flicky-1984&quot;&gt;1. &lt;strong&gt;Flicky&lt;/strong&gt; (1984)&lt;/h2&gt;

&lt;p&gt;I adore this so much I own an arcade cabinet! It’s deterministic (no randomness) so you can figure out a repeatable route and turn playing into a zen experience. Controls use leaf switches so feel very analogue. &lt;a href=&quot;https://www.youtube.com/watch?v=Gth96brPsxM&quot;&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjKnOAvXEAIlR9V.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjKnOA0XgAA8wvj.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjKnOAqXgAAslBU.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjKnOAqWAAABvDM.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;2-pebble-beach-no-hatou-1993&quot;&gt;2. &lt;strong&gt;Pebble Beach no Hatou&lt;/strong&gt; (1993)&lt;/h2&gt;

&lt;p&gt;Or any of the “New 3D Golf Simulation” series; I play the Japanese Mega Drive versions. Great golf, majestic music, super stylish interface &amp;amp; box art, and a tea break after hole 9. Play with CPU overclock! ⛳️🏌️‍♂️  &lt;a href=&quot;https://www.youtube.com/watch?v=fBkWmYxDHk0&quot;&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjKsRTxWYAU3crE.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjKsRTwXkAUaf5T.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjKsRTxXoAEb4I7.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjKsRTuXwAIl3y_.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;3-runabout-2-1999&quot;&gt;3. &lt;strong&gt;Runabout 2&lt;/strong&gt; (1999)&lt;/h2&gt;

&lt;p&gt;This sequel fulfilled the promise of the original and took it to great heights, delivering an almost perfect game of chasing, collecting and crashing. Don’t fall into the trap of thinking it’s like Crazy Taxi! &lt;a href=&quot;https://www.youtube.com/watch?v=PaxpR8BtNNo&quot;&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjKw3TZXwAAiWVE.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjKw3TUWYAEwI_0.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjKw3TdWYAEHvyg.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjKw3TVXEAALYKK.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;4-orbital-2006&quot;&gt;4. &lt;strong&gt;Orbital&lt;/strong&gt; (2006)&lt;/h2&gt;

&lt;p&gt;Available for both GBA &amp;amp; Wii this is slow motion Katamari Damacy with gravity. You control a star that can absorb smaller stars and crash into larger ones. Two buttons: attract/repel control your orbit &amp;amp; trajectory. &lt;a href=&quot;https://www.youtube.com/watch?v=2aQg5vJrUEM&quot;&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjK5WO-WIAMTSYq.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjK5WO8XgAAdR1Z.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjK5WO1WIAAur1S.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjK5WO-WAAAF5mJ.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;5-digitalglider-airman-1999&quot;&gt;5. &lt;strong&gt;DigitalGlider Airman&lt;/strong&gt; (1999)&lt;/h2&gt;

&lt;p&gt;An immensely rewarding glider sim with perfect difficulty curve and lovely, mysterious vibe. But playing this as an arcade game won’t get you far: it requires thinking, planning &amp;amp; minimal/accurate input. &lt;a href=&quot;https://www.youtube.com/watch?v=4kYiTK7EK9c&quot;&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjLD3hKWYAIFO7y.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjLD3hUWQAAB1Rg.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjLD3hKWIAAFDxV.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjLD3hLWIAEtbil.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;6-kururin-paradise-2002&quot;&gt;6. &lt;strong&gt;Kururin Paradise&lt;/strong&gt; (2002)&lt;/h2&gt;

&lt;p&gt;This 2nd GBA game in the series gets my vote as best, tho they’re all great. It dials the concept up to 11 with enhanced level design, goals &amp;amp; controls. On a beach holiday I was so engrossed I got sunstroke. &lt;a href=&quot;https://www.youtube.com/watch?v=naTMFWRDneI&quot;&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjQPUnFWAAI8NOP.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjQPUnEWIAEXwj4.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjQPUnAWAAAhfbl.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjQPUnCWYAIob2H.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;7-a-little-bit-of-nintendo-touch-golf-2009&quot;&gt;7. &lt;strong&gt;A Little Bit of… Nintendo Touch Golf&lt;/strong&gt; (2009)&lt;/h2&gt;

&lt;p&gt;This DSiWare reworking of the original game throws out online functionality and adds an extensive Challenge mode to reinforce the core. Mod your device and download it &lt;a href=&quot;https://twitter.com/internetarchive&quot;&gt;@internetarchive&lt;/a&gt;!) &lt;a href=&quot;https://www.youtube.com/watch?v=Ch5Ui4RLFbk&quot;&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjX2_WfXoAAx_db.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjX2_XPXgAcdXOO.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjX3YzhWAAAFyyR.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjX3tfYXoAQuWJw.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;8-smashing-drive-2002&quot;&gt;8. &lt;strong&gt;Smashing Drive&lt;/strong&gt; (2002)&lt;/h2&gt;

&lt;p&gt;Superb port of an arcade game people think is like Crazy Taxi but is more Out Run with mad shortcuts! Extended play rewarded by seeing more wow moments. I’m yet to see them all. Crash into King Kong’s bits! &lt;a href=&quot;https://www.youtube.com/watch?v=BRVii93BZ8I&quot;&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjeYD3vXkAQw-hH.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjeYD30XkBwo8f3.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjeYD3yXkBYEgZX.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjeYD3rWAAAKZAA.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;9-polarium-advance-2005&quot;&gt;9. &lt;strong&gt;Polarium Advance&lt;/strong&gt; (2005)&lt;/h2&gt;

&lt;p&gt;After seeing a prototype Nintendo demanded a version of this for DS, but the GBA version is more refined &amp;amp; released later. Daily puzzle mode will last you a year. One-handed control for commuting is genius! &lt;a href=&quot;https://www.youtube.com/watch?v=IdAsnZlmQtM&quot;&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjokjEQWAAUH-jO.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Fjokx1uXoAIKqFs.png&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjolzkCXwAEqmIB.png&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjolzkAWYAAPuwi.png&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;10-excite-truck-2006&quot;&gt;10. &lt;strong&gt;Excite Truck&lt;/strong&gt; (2006)&lt;/h2&gt;

&lt;p&gt;An amazingly well-balanced game. Criminally overlooked, maybe because it’s Wii, or only has motion controls? This is a tour de force of close and clever racing; an adrenalin rush like no other once it clicks! &lt;a href=&quot;https://www.youtube.com/watch?v=5U2MDLyXnVM&quot;&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjomZ9pXEAE_6AM.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjomvsYXgAAwqJk.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Fjomwp5WQAMWxlS.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjomxphXkAIOdmI.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;11-downhill-domination-2003&quot;&gt;11. &lt;strong&gt;Downhill Domination&lt;/strong&gt; (2003)&lt;/h2&gt;

&lt;p&gt;I often wonder if the developers of Excite Truck were inspired by this game? It’s certainly as close a relative as I’ve found. It features same BIG AIR adrenalin rush, impossible powers and close racing. &lt;a href=&quot;https://www.youtube.com/watch?v=QNMNiMoRJjs&quot;&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjtPT1RWIAI1uKu.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjtPFfhXwAAToZL.png&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjtPGeZXwAM6g-T.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FjtPHu5XoAQTzAW.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;12-pilotwings-1990&quot;&gt;12. &lt;strong&gt;Pilotwings&lt;/strong&gt; (1990)&lt;/h2&gt;

&lt;p&gt;One of my fondest memories: my dad playing hang gliding stage on repeat as a relaxation tool. I loved the surprise &amp;amp; delight of the secret levels that were unlocked for being good at the game: I can still do it! &lt;a href=&quot;https://www.youtube.com/watch?v=dvBbQPMGmiM&quot;&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkHHscgXkAAc1ot.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkHHuTDWAAAy-Di.png&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkHHupTXkAM9Toa.png&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkHHu7xWIAAN8A0.png&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;13-maboshi-2008&quot;&gt;13. &lt;strong&gt;MaBoShi&lt;/strong&gt; (2008)&lt;/h2&gt;

&lt;p&gt;This inventive action game is 3-in-1: Circle, Square &amp;amp; Bar. Circle = physics, Square = turn-based, Bar = Reaction. Circle is quite possibly my favourite game of all time. You can play today using Wii &amp;amp; DS ROMs. See: &lt;a href=&quot;/2013/06/29/maboshi/&quot;&gt;blog.gingerbeardman.com/2013/06/29/maboshi/)&lt;/a&gt; &lt;a href=&quot;https://www.youtube.com/watch?v=2BvygeP0O4g&quot;&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkHJ_ljWIAMHB-g.png&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkHKCuzXkAE3qZq.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkHKJ-DXoAAIl8F.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkHKL9BXEAIouFe.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;14-gti-club-supermini-festa-2010&quot;&gt;14. &lt;strong&gt;GTi Club: Supermini Festa!&lt;/strong&gt; (2010)&lt;/h2&gt;

&lt;p&gt;This is a port of the 3rd game in Konami’s arcade series. Developer Genki added online multi-player &amp;amp; extra features to the console versions. You can still play it online today with a modded Wii! &lt;a href=&quot;https://www.youtube.com/watch?v=YqvTjPzXM5E&quot;&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkHK6fPXkAEHcSg.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkHMJRkWYAIyr0b.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkHMhmtXkAEaqy8.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkHMihOXEAA5nAU.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;15-bubble-bobble-1986&quot;&gt;15. &lt;strong&gt;Bubble Bobble&lt;/strong&gt; (1986)&lt;/h2&gt;

&lt;p&gt;Maybe the greatest ever arcade game!? A tour-de-force by the late, great Fukio “MTJ” Mitsuji, this game has perfectly balanced gameplay, 2-player perks, 100s levels, inventive power-ups, and hidden secrets. &lt;a href=&quot;https://www.youtube.com/watch?v=BuXOSBb4hQw&quot;&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkHNhX6X0AQFpdZ.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkHObF6XoAEtT0o.png&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkHOc5_XoAU06bG.png&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkHOdkyXEAAMZdc.png&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;16-magical-puzzle-popils-1991&quot;&gt;16. &lt;strong&gt;Magical Puzzle Popils&lt;/strong&gt; (1991)&lt;/h2&gt;

&lt;p&gt;Is a highly original puzzle game with mind-bending level design feat. portals and other cool stuff. Created by MTJ (Bubble Bobble) &amp;amp; Jun Amanai it is largely unknown as it is only for Sega Game Gear! 🧵 &lt;a href=&quot;https://www.youtube.com/watch?v=HxViEixcvfE&quot;&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkHPOyZWIAAVoxC.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkHPQUhWIAQBvbq.png&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkHPU22WAAE2XJE.png&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkHPV3mXwAQONOI.png&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;It’s my birthday! SO… more about POPILS:&lt;/p&gt;

  &lt;p&gt;whilst trying to 100% the game, my friend Jamie “Junosix” Hamshere and I reverse-engineered/hacked/patched the game to make the step and sub-step count always visible. This makes it easier to beat stage targets! &lt;a href=&quot;https://www.smspower.org/forums/16730-MagicalPuzzlePopilsGGHackHelp&quot;&gt;www.smspower.org/forums/16730-MagicalPuzzlePopilsGGHackHelp&lt;/a&gt; &lt;img src=&quot;https://pbs.twimg.com/media/FkHUU8TXEAEMGVi.png&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;

  &lt;p&gt;I also discovered a few other previously unknown things: debug mode (step count preview, level select), alt credits, and most notably secret stage 0 that had only been hinted at in the Japanese manual [segaretro.org/images/e/e0/Magical_Puzzle_Popils_GG_JP_Manual.pdf]&amp;gt; (https://segaretro.org/images/e/e0/Magical_Puzzle_Popils_GG_JP_Manual.pdf) these are documented at TCRF: &lt;a href=&quot;https://tcrf.net/Magical_Puzzle_Popils&quot;&gt;tcrf.net/Magical_Puzzle_Popils&lt;/a&gt; &lt;img src=&quot;https://pbs.twimg.com/media/FkHVurVX0AESbqz.png&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkHVwxNXEAc5xgd.png&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkHVzYLXkAAsioj.png&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;

  &lt;p&gt;I’ll summarise my complete POPILS adventures in a future blog post, because it’s worth it. But not today. See you in a bit for the big birthday blog post, and tomorrow for the next entry in 🎄&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;17-boogie-wings-1992&quot;&gt;17. &lt;strong&gt;Boogie Wings&lt;/strong&gt; (1992)&lt;/h2&gt;

&lt;p&gt;This “shmup” contains more ideas than any other single game. At every turn you think you’ve seen it all: you have not. Game designer Kazuyuki Kurata called it a day after this, his only game. A masterpiece. &lt;a href=&quot;https://www.youtube.com/watch?v=zBJaVkJdvsc&quot;&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkMlbNjWYAEBNiV.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkMlbNjXgAAUM1Y.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkMlbNnXgAAoiDz.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkMlbNqXEAIm23f.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;18-sideswiped-2009&quot;&gt;18. &lt;strong&gt;Sideswiped&lt;/strong&gt; (2009)&lt;/h2&gt;

&lt;p&gt;Crazy, fast, manic, 60fps. There’s racing, plus so much more. My favourite mode involves juggling exploding cars and traffic cones to keep your multiplier and have the road ahead in a constant state of explosion. &lt;a href=&quot;https://www.youtube.com/watch?v=fBkWmYxDHk0&quot;&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkTjB-kXkAAmbB8.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkTjB-kWYAEcFcM.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkTjB-hWIAAO2vP.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkTjB-pXwAEQHxx.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;19-guru-logi-champ-2001&quot;&gt;19. &lt;strong&gt;Guru Logi Champ&lt;/strong&gt; (2001)&lt;/h2&gt;

&lt;p&gt;Dev COMPILE made games of all types for their Disc Station compilations. Related to those is this puzzle game: rotate the field &amp;amp; pull/push blocks to compete the picture. Sort of Magical Drop meets Picross. &lt;a href=&quot;https://www.youtube.com/watch?v=Ny_kTCvscRw&quot;&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkXhi6qWIAggomV.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkXhi6xXoAEmxwb.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkXhi6sWIBMVFea.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkXhi6tWYAEP9Nf.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;20-the-italian-job-2003&quot;&gt;20. &lt;strong&gt;The Italian Job&lt;/strong&gt; (2003)&lt;/h2&gt;

&lt;p&gt;A short 60fps mission-based driving game like “Driver”. Tight arcade controls, demanding targets, interesting env. Story mode echoes movie plot. Stunt mode involves driving elaborate scaffolded courses. Fun! &lt;a href=&quot;https://www.youtube.com/watch?v=1J-bpZjz6jk&quot;&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Fkcy7YhXgAMSHID.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Fkcy7YdXkAcPqve.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Fkcy7YkXwAYra_-.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Fkcy7YeWAAEu8lz.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;21-donkey-kongs-crash-course-2012&quot;&gt;21. &lt;strong&gt;Donkey Kong’s Crash Course&lt;/strong&gt; (2012)&lt;/h2&gt;

&lt;p&gt;A motion-controlled mini-game in Nintendo Land on Wii U. Navigate the maze-like stages using all your skill and dexterity. A forgotten prototypes that made it into a real game! 100% pure Nintendo. &lt;a href=&quot;https://www.youtube.com/watch?v=uFhTmXTi6Mw&quot;&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkdaGX-XkAEMmhB.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkdaGYGX0AAvMxU.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkdaGX_XgAA6m1s.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkdaGYGWYAAQLJj.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;22-llamatron-1991&quot;&gt;22. &lt;strong&gt;Llamatron&lt;/strong&gt; (1991)&lt;/h2&gt;

&lt;p&gt;Jeff Minter improves on Robotron by adding elaborate power-ups, enhancing enemies, and channeling Monty Python. Round up animals, avoid radioactive rain, shoot a screaming Mandelbrot set! Assisted by an AI droid? &lt;a href=&quot;https://www.youtube.com/watch?v=xNHl0jG0mug&quot;&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkiwuoFWYAAWr67.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkiwuoGXoAIA2Ua.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkiwuoEWQAArGJk.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FkiwuoNXkAIe65-.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;23-sheep-raider-2001&quot;&gt;23. &lt;strong&gt;Sheep Raider&lt;/strong&gt; (2001)&lt;/h2&gt;

&lt;p&gt;A “despicable” 3D puzzle platform stealth game dressed as TV show. Beautifully presented, supremely self-aware, inventive puzzles anchored in the Looney Toons world, good difficulty curve, secrets, jazz …nice! &lt;a href=&quot;https://www.youtube.com/watch?v=XXhiddyQzsA&quot;&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FknkK7-XgAkhfuS.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FknkK7-XkAA1cnV.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FknkK78WIAEGF5n.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FknkK7-WIAY1r9f.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;24-pang-2010&quot;&gt;24. &lt;strong&gt;Pang&lt;/strong&gt; (2010)&lt;/h2&gt;

&lt;p&gt;All prior games in the series are perfectly distilled and stretched across dual screens. A more perfect difficulty curve I am yet to find. Extended play is mind-melding: you begin to think like the level designer! 🤯  &lt;a href=&quot;https://www.youtube.com/watch?v=K5vTOyFjcM0&quot;&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Fkwv33nXgAAMihs.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Fkwv33kXoAAtjTL.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Fkwv33nXoAA5SWQ.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Fkwv33iXkAAAcFq.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;25-winter-gold-1996&quot;&gt;25. &lt;strong&gt;Winter Gold&lt;/strong&gt; (1996)&lt;/h2&gt;

&lt;p&gt;Part Amiga demoscene production, part SNES technical showcase for the Super FX 2 chip, 1–8 players can compete across six winter sports events. Downhill and luge are my favourites. Very fun! Happy Christmas 🎄 &lt;a href=&quot;https://www.youtube.com/watch?v=2HR8_0z8nwM&quot;&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Fkz3mpQXkAAn8xL.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Fkz3mpSWYAA1nMN.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Fkz3mpSX0AAj1JF.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Fkz3mpSWIAI2odB.jpg&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;26-bonus-a-little-tree-1995&quot;&gt;26. BONUS! &lt;strong&gt;A Little Tree&lt;/strong&gt; (1995)&lt;/h2&gt;

&lt;p&gt;This wonderful animated story book by Thoru Yamamoto 山本徹 &lt;a href=&quot;https://twitter.com/thoruman&quot;&gt;@thoruman&lt;/a&gt; is one of several Christmas-themed works he created using HyperCard on Macintosh. Play/download this, See The Sky and ZiZi Christmas &lt;a href=&quot;https://archive.org/details/thoru-yamamoto-hypercard-stacks&quot;&gt;archive.org/details/thoru-yamamoto-hypercard-stacks&lt;/a&gt; &lt;a href=&quot;https://www.youtube.com/watch?v=QS7zN9GlV9s&quot;&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Fk565XnWYAciA1q.png&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Fk565XoXkAE88AS.png&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Fk565XnWIAAZY3P.png&quot; alt=&quot;IMAGE&quot; /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Fk565X0XoAEr77B.png&quot; alt=&quot;IMAGE&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 26 Dec 2022 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2022/12/26/gaming-advent-calendar/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2022/12/26/gaming-advent-calendar/</guid>
        </item>
      
    
      
        <item>
          <title>Updating the Becker Cascade navigation filesystem</title>
          <description>&lt;p&gt;I have a &lt;a href=&quot;https://ifdesign.com/en/winner-ranking/project/becker-traffic-pro-7949/2069&quot;&gt;Becker Traffic Pro 7949&lt;/a&gt; car audio and navigation system in my LHD Renault Twingo mk1. This unit, effectively a re-badged Becker Cascade with a green OLED screen rather than colour, was bundled with high-end sports cars of German and Italian origin, but I added one to my lowly Twingo because it’s a 1DIN headunit with great sound quality, navigation and music support from CF card, that gives spoken and on-screen turn-by-turn directions!&lt;/p&gt;

&lt;p&gt;Even today the interface is rock solid and obvious, and the turn-by-turn directions pack a lot of information on screen. Below we can see (clockwise from top right): menu marker, ETA, distance to next turn as number and as shaded road edge, turn-by-turn arrow, traffic message control badge, remaining journey time, current road and next road.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/becker-7949.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/2009/09/05/hacking-the-becker-cascade-navigation-cf-card/&quot;&gt;A while ago I hacked the CF card structure&lt;/a&gt; to allow use of larger capacity cards to more easily store maps and music side-by-side. Good times!&lt;/p&gt;

&lt;h2 id=&quot;upgrading-maps&quot;&gt;Upgrading maps&lt;/h2&gt;

&lt;p&gt;The maps for this thing were long discontinued, but for a while users such as myself were able to use maps made for BMW’s business fleet (with partial postcode search) and more recently Mercedes-Benz (with no postcode search).&lt;/p&gt;

&lt;p&gt;It’s also possible to add speed limit and camera data through injecting a new .lwd file (thanks SCDB!) into the split ISO filesystem. This relied on using Windows and some old apps.&lt;/p&gt;

&lt;p&gt;Today I wrote a small shell script to do the same on macOS (and probably Linux, maybe Windows).&lt;/p&gt;

&lt;noscript&gt;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/f18de0abe61c8dd548b4901b606bf39b&quot;&gt;View the source code as a Gist&lt;/a&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;script src=&quot;https://gist.github.com/gingerbeardman/f18de0abe61c8dd548b4901b606bf39b.js&quot;&gt;&lt;/script&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 11 Dec 2022 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2022/12/11/updating-the-becker-cascade-navigation-filesystem/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2022/12/11/updating-the-becker-cascade-navigation-filesystem/</guid>
        </item>
      
    
      
        <item>
          <title>Open Studios: Christmas 2022</title>
          <description>&lt;p&gt;This weekend I’m taking part in Christmas Open Studios at Krowji in Redruth.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;FRI 2nd Dec, 5pm–9pm&lt;/li&gt;
  &lt;li&gt;SAT 3rd Dec, 10am–4pm&lt;/li&gt;
  &lt;li&gt;SUN 4th Dec, 10am–4pm&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See you there!?&lt;/p&gt;

&lt;p&gt;You’ll be able to buy my art and play my games.&lt;/p&gt;

&lt;p&gt;More info: &lt;a href=&quot;https://www.krowji.org.uk/open-studios/&quot;&gt;www.krowji.org.uk/open-studios/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/open-studios-2022-dec.jpg&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 02 Dec 2022 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2022/12/02/open-studios-christmas-2022/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2022/12/02/open-studios-christmas-2022/</guid>
        </item>
      
    
      
        <item>
          <title>The biggest crime in pop music?</title>
          <description>&lt;p&gt;The re-recorded version of “Ride on Time” (featuring an uncredited Heather Small on vocals) released in the UK on Deconstruction Records.&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;M0quXl_od3g&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;p&gt;It was (re)made as the original samples couldn’t be cleared. The track’s success is what gave us &lt;em&gt;M People&lt;/em&gt;, for better or worse. 😅  Sadly this version is the one you hear today on UK radio.&lt;/p&gt;

&lt;p&gt;And here’s the original version of “Ride on Time”, released in Italy by the &lt;em&gt;real&lt;/em&gt; BLACK BOX in 1989.&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;R3aW9kkfvWk&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;p&gt;The original Italian version of “Ride on Time” can be found today because the samples of the Salsoul Records classic, &lt;a href=&quot;https://www.youtube.com/watch?v=ddsO36srle0&quot;&gt;Loleatta Holloway’s “Love Sensation”&lt;/a&gt;, were eventually (finally!) cleared in 2018!&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Ride_on_Time#Sampling_dispute&quot;&gt;Read more about this on Wikipedia&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;the-sample&quot;&gt;The Sample&lt;/h2&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;ddsO36srle0&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 25 Nov 2022 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2022/11/25/the-biggest-crime-in-pop-music/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2022/11/25/the-biggest-crime-in-pop-music/</guid>
        </item>
      
    
      
        <item>
          <title>Fixing bugs using Bird on Palm OS</title>
          <description>&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hana-pixels.jpg&quot; alt=&quot;JPG&quot; title=&quot;Tenohira Hanafuda for Palm OS, running on a Sony CLIÉ PEG-SJ22&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://fudawiki.org/en/hanafuda/video-games/palm/tenohira-hanafuda-kai&quot;&gt;Tenohira Hanafuda Kai&lt;/a&gt; (掌花札 kai) is a koi-koi card game for Palm OS, created in 2001 by Hiroki Takahashi. It’s a fun game with varying difficulty, stats tracking, and lovely high-resolution (for the time!) colour graphics.&lt;/p&gt;

&lt;p&gt;But, it has one serious problem: sometimes it will forfeit the current round when you choose to continue!&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hana-buggy.gif#pixel&quot; alt=&quot;GIF&quot; title=&quot;https://youtube.com/shorts/0fZefFpGd5Y&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;analysis&quot;&gt;Analysis&lt;/h2&gt;

&lt;p&gt;After repeated play I figured out that the game would continue as intended only if I pressed the right half of the こいこい (koi-koi) button.&lt;/p&gt;

&lt;p&gt;But if I pressed the left half of the button it would not behave as expected and forfeit the round. More on that later.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hana-problem.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;The problem happens when we press the left side of the こいこい button&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;the-plan&quot;&gt;The Plan&lt;/h2&gt;

&lt;p&gt;One of the beautiful things about Palm OS is that apps and their resources are viewable, and even editable, right there on the device itself! It’s a lot like Classic Macintosh in that regard, which is no surprise as Palm took a lot of inspiration from the original Mac.&lt;/p&gt;

&lt;p&gt;And much like ResEdit on Macintosh, Palm had it’s own equivalent app in &lt;a href=&quot;https://palmdb.net/app/rsrcedit&quot;&gt;RsrcEdit&lt;/a&gt; by Quartus, though I preferred to use an app called &lt;a href=&quot;https://palmdb.net/app/bird&quot;&gt;Bird&lt;/a&gt; by Philippe Guillot. You can view strings, bitmaps, menu bars, and other user interface elements (organised as Forms).&lt;/p&gt;

&lt;h2 id=&quot;lets-do-this&quot;&gt;Let’s do this&lt;/h2&gt;

&lt;p&gt;So I launched Bird and loaded up the contents of Tenohira Hanafuda Kai, and went through all the forms until I found the one that displays the continue prompt.&lt;/p&gt;

&lt;p&gt;Interestingly the form is dual-purpose. It contains the continue/stop buttons (a List of two items) and also a single button (了解; confirm) used on a different prompt. It’s overlaid on the continue button in a close enough position to be suspect. Perhaps it’s moved slightly at run time?&lt;/p&gt;

&lt;p&gt;We can easily change the order of the controls on the form by cutting and pasting, so we do that with the List and it now comes below the button in the order and will be drawn last on the screen. Presumably the things drawn last are the first to capture interactions? Let’s see.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hana-bird.gif#pixel&quot; alt=&quot;GIF&quot; title=&quot;https://youtube.com/shorts/yRLfHoHkjTY&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;result&quot;&gt;Result&lt;/h2&gt;

&lt;p&gt;I apply all changes and they are saved directly into the app data. Launching the game again and playing enough to trigger another continue/stop prompt, I tap the left half of the button and… the game continues as expected. There is no strange forfeit. The problem has been solved!&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hana-fixed.gif#pixel&quot; alt=&quot;GIF&quot; title=&quot;https://youtube.com/shorts/3faHHcuSQv4&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;addendum&quot;&gt;Addendum&lt;/h2&gt;

&lt;p&gt;I figured this out back in 2019 and edited the app on my Sony CLIÉ device. Recently I’ve been using &lt;a href=&quot;https://cloudpilot-emu.github.io&quot;&gt;CloudPilot&lt;/a&gt; to run Palm OS apps and games on my iPhone. So to play Tenohira Hanafuda Kai I had to either find the old modified game file, or do it all over again from scratch. I chose to do it again to test my memory and so I could document the process.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 07 Oct 2022 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2022/10/07/fixing-bugs-using-bird-on-palm-os/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2022/10/07/fixing-bugs-using-bird-on-palm-os/</guid>
        </item>
      
    
      
        <item>
          <title>Playing Hanafuda on Palm OS in a web browser</title>
          <description>&lt;p&gt;I recently found out that it’s possible to run Palm OS in a web browser, using &lt;a href=&quot;https://cloudpilot-emu.github.io&quot;&gt;cloudpilot-emu.github.io&lt;/a&gt; which is optimised for use on iPhone and Android, so you can use old Palm apps and run old games and apps on your smart phone!&lt;/p&gt;

&lt;h2 id=&quot;koi-koi&quot;&gt;Koi-Koi&lt;/h2&gt;

&lt;p&gt;I play a lot of video game hanafuda and out of all platforms Palm OS has three of the most interesting games. To play these games I carry around either an old Palm OS device (Sony Clié PEG-SL10) or an Android phone (Galaxy Fame Lite S6790) that runs an old Palm OS emulator.&lt;/p&gt;

&lt;p&gt;So it’s great news that Palm OS Hanafuda games can now be played easily on modern devices.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/palmos-hanafuda-real.jpg&quot; alt=&quot;Keisuke Mitani&apos;s Koi-Koi running on Sony Clié PEG-SL10&quot; title=&quot;Keisuke Mitani&apos;s Koi-Koi running on Sony Clié PEG-SL10&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;preparation&quot;&gt;Preparation&lt;/h2&gt;

&lt;p&gt;We’re going to use CloudPilot to create two Palm OS devices, both running in Japanese, and install the games we want to play. You could create English devices, but there will be issues with some text displayed in the games as they expect Japanese text support.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Sony Clié N700C (Colour, Japanese)&lt;/li&gt;
  &lt;li&gt;Palm V (Greyscale, Japanese)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can source alternative Palm OS system files from &lt;a href=&quot;https://palmdb.net/app/palm-roms-complete&quot;&gt;PalmDB&lt;/a&gt;. You might choose to add an English device to run other Palm OS games and apps.&lt;/p&gt;

&lt;h2 id=&quot;support-files&quot;&gt;Support files&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://www.dropbox.com/s/b2obo97hlbb89n5/Palm%20OS%20Hanafuda%20games.zip?dl=0&quot;&gt;Download Palm OS Hanafuda games and required support files&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;installation&quot;&gt;Installation&lt;/h2&gt;

&lt;p&gt;Steps to play in Japanese, carry out twice to create one device each of Grey/Colour:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;add new device and pick the respective .rom file&lt;/li&gt;
  &lt;li&gt;go through first launch setup and touch screen calibration&lt;/li&gt;
  &lt;li&gt;top right button to add the .prc files to device&lt;/li&gt;
  &lt;li&gt;top left button to reset, normal boot&lt;/li&gt;
  &lt;li&gt;launch and play the games&lt;/li&gt;
  &lt;li&gt;switch devices using the Sessions button in the website toolbar&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;games&quot;&gt;Games&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Koi-Koi&lt;/strong&gt; (1999, by Keisuke Mitani/Palm Boarderz)
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://fudawiki.org/en/hanafuda/video-games/palm/koi-koi&quot;&gt;fudawiki.org/en/hanafuda/video-games/palm/koi-koi&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;my favourite&lt;/li&gt;
      &lt;li&gt;cards can be picked from the field as well as your hand&lt;/li&gt;
      &lt;li&gt;only works on old greyscale devices
&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/palmos-hanafuda-1.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;Koi-Koi&quot; /&gt;&lt;br /&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Tenohira Hanafuda Kai&lt;/strong&gt; (2001, by Hiroki Takahashi)
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://fudawiki.org/en/hanafuda/video-games/palm/tenohira-hanafuda-kai&quot;&gt;fudawiki.org/en/hanafuda/video-games/palm/tenohira-hanafuda-kai&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;low and high resolution support&lt;/li&gt;
      &lt;li&gt;multiple opponents/difficulties&lt;/li&gt;
      &lt;li&gt;tracks play history and win ratios
&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/palmos-hanafuda-2.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;Tenohira Hanafuda Kai&quot; /&gt;&lt;br /&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;palm Hanafuda&lt;/strong&gt; (2001, by Oruge/e-frontier)
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://fudawiki.org/en/hanafuda/video-games/palm/palm-hanafuda&quot;&gt;fudawiki.org/en/hanafuda/video-games/palm/palm-hanafuda&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;has 5 game types, including Mushi&lt;/li&gt;
      &lt;li&gt;I could swear this displayed in English on my real Palm OS device
&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/palmos-hanafuda-3.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;palm Hanafuda&quot; /&gt;&lt;br /&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Catch-A-Bird&lt;/strong&gt; (2003, by Juergen Bermann)
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://fudawiki.org/en/hanafuda/video-games/palm/catch-a-bird&quot;&gt;fudawiki.org/en/hanafuda/video-games/palm/catch-a-bird&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;similar to Go-stop&lt;/li&gt;
      &lt;li&gt;no idea how to get it to display in colour&lt;/li&gt;
      &lt;li&gt;doesn’t work on old greyscale devices
&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/palmos-hanafuda-4.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;Catch-a-Bird&quot; /&gt;&lt;br /&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 03 Oct 2022 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2022/10/03/playing-hanafuda-on-palm-os/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2022/10/03/playing-hanafuda-on-palm-os/</guid>
        </item>
      
    
      
        <item>
          <title>Sparrow Solitaire for Playdate (Early Access)</title>
          <description>&lt;p&gt;This post is a history of Sparrow Solitaire, my latest game for Playdate. It started out as a prototype and was later taken on by Mac Vogelsang. We’re working together to make the best ever mahjong solitaire game.&lt;/p&gt;

&lt;h3 id=&quot;2021-january-10th&quot;&gt;2021, January 10th&lt;/h3&gt;
&lt;p&gt;I’m really into Hanafuda (Japanese flower cards) and found that the 1991 Macintosh game Shanghai featured tiles based on Hanafuda. I booted it up &lt;a href=&quot;https://archive.org/details/ShanghaiIIDragonsEye&quot;&gt;at Internet Archive&lt;/a&gt; and had a quick play.&lt;/p&gt;

&lt;p&gt;For the next week or so I went down the Shanghai rabbit hole. Its history is &lt;a href=&quot;http://home.halden.net/vkp/vkp/origin.html&quot;&gt;quite interesting&lt;/a&gt; and fraught with drama so I won’t repeat it here.&lt;/p&gt;

&lt;h3 id=&quot;2021-january-19th&quot;&gt;2021, January 19th&lt;/h3&gt;

&lt;p&gt;This is the date on the first screenshot I captured of my prototype mahjong solitaire game for Playdate.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/sparrow-early-1.png#playdate&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I tested different size tiles until I found the sweet spot that could fit a whole layout on the Playdate’s 400x240 screen.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/sparrow-early-2.png#playdate&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The following day I drew a set of tiles and it started to look like a real game! I called it &lt;em&gt;Sparrow Solitaire&lt;/em&gt; because the sound of mahjong tiles rubbing together is said to sound like sparrows chirping. In fact, the original Chinese name for mahjong reused the word for sparrow. So this thing had a name at least!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/sparrow-my-tiles.gif#playdate&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I spent the next month or so, on-and-off, programming object-oriented Lua to manage the game state, tiles, layout, dealing, sound effects and I drew a handful more tile sets.&lt;/p&gt;

&lt;p&gt;Daily Driver was my focus and this little puzzle game was supposed to be a short palate cleanser to keep things interesting. When it turned out to be more involved I lost momentum and abandoned it. My todo list at that time was as follows:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Todo
[ ] calc free data per half position
[ ] sound based on free data
[ ] controls to move prev/next tiles
[ ] controls to select tiles
[ ] match tiles
[ ] face down all tiles
[ ] face up free tiles
[ ] editor
[ ] optimise animations

Done
[X] sound effects
[X] define layouts to fill screen
[X] animate tiles
[X] multi-dimension array (as autotable)
[X] ability to reinit table
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;What an optimistically short set of todo items! That’s game programmers for you.&lt;/p&gt;

&lt;h3 id=&quot;2022-april-15th&quot;&gt;2022, April 15th&lt;/h3&gt;

&lt;p&gt;When Playdate launched I bundled the game in my pack of Prototypes and tried to forget about it.&lt;/p&gt;

&lt;h3 id=&quot;2022-may-12th&quot;&gt;2022, May 12th&lt;/h3&gt;

&lt;p&gt;I couldn’t stop thinking about the game and it seemed a shame that I had put so much effort into it and then abandoned it. But I’m a realist and I knew that I would never finish it myself. So I thought it would be fun to offer it out to any interested developers and see if they wanted to finish it. No replies to &lt;a href=&quot;https://twitter.com/gingerbeardman/status/1524724007827914752&quot;&gt;this tweet&lt;/a&gt;, but the same message on the Playdate Squad Discord server had some responses. I decided to hand over to Mac Vogelsang (&lt;a href=&quot;https://twitter.com/vogelscript&quot;&gt;@vogelscript&lt;/a&gt;) as I had really enjoyed his Bird and Beans game. So a few days later he began work “finishing off” my programming. What an understatement.&lt;/p&gt;

&lt;h3 id=&quot;2022-july-13th&quot;&gt;2022, July 13th&lt;/h3&gt;

&lt;p&gt;For the last two months Mac has worked his magic on the game and I’ve tagged along for the ride. Having worked on my own for so long I wondered what it would be like working with somebody else. It was more fun and productive than I ever could have expected! Mac brought the best out of me, pushing me to achieve better results than I would have otherwise been happy with. Mac also pushed himself, creating what I believe to be a world-first method of cursor control in a mahjong solitaire game, made possible by two properties of Playdate: its fast processing speed and its lack of touch screen!&lt;/p&gt;

&lt;p&gt;Out of this partnership not only comes a great game, but some new offshoot projects like an Animation tool (from me), a board game (from Mac), and a Game Options class (Mac’s magic reworking of one of my old classes) and several new fonts some of which are used in Sparrow Solitaire. These projects should all release in the near future.&lt;/p&gt;

&lt;p&gt;At this point Sparrow Solitaire is really Mac’s game, albeit one that happens to have my graphics and some of my programming DNA in it, so it’s fitting that it will live on his itch.io page.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/sparrow-game.gif#playdate&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;launch-animation&quot;&gt;Launch Animation&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/sparrow-launch.gif#playdate&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;download&quot;&gt;Download&lt;/h2&gt;

&lt;p&gt;Update, April 2023: the full version of Sparrow Solitaire for Playdate is &lt;a href=&quot;https://vogelscript.itch.io/sparrow-solitaire&quot;&gt;available now on itch.io&lt;/a&gt; and you can also &lt;a href=&quot;https://vogelscript.itch.io/sparrow-solitaire/devlog/515286/sparrow-solitaire-v10&quot;&gt;read about what to went into the full game&lt;/a&gt;.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 13 Jul 2022 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2022/07/13/sparrow-solitaire-for-playdate/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2022/07/13/sparrow-solitaire-for-playdate/</guid>
        </item>
      
    
      
        <item>
          <title>Circular for Playdate</title>
          <description>&lt;p&gt;This concept was a typical prototype: the core action came together quickly but then making that into a game took a while.&lt;/p&gt;

&lt;p&gt;At some point soon I’ll write a devlog about the problems, solutions, questions and answers involved in its development.&lt;/p&gt;

&lt;p&gt;I’m really proud of this little gem. It’s my first time putting a lot of effort into score balancing in the style of my favourite Japanese arcade games, and I hope you have fun trying to reach 1 million points. There are sure to be some surprises along the way.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/circular-game.gif#playdate&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;download&quot;&gt;Download&lt;/h2&gt;

&lt;p&gt;Circular for Playdate is &lt;a href=&quot;https://gingerbeardman.itch.io/circular&quot;&gt;available now on itch.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Have fun!&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 30 May 2022 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2022/05/30/circular-for-playdate/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2022/05/30/circular-for-playdate/</guid>
        </item>
      
    
      
        <item>
          <title>One-click restore most recent backup of a file from Time Machine</title>
          <description>&lt;p&gt;Often I want to restore the latest version of a file from Time Machine, but using the Time Machine interface to do so is awkward and slow. So I came up with my own solution that can be triggered from the Finder context menu of any file.&lt;/p&gt;

&lt;figure&gt;&lt;img src=&quot;/images/posts/restore-time-machine-context-menu.png&quot; width=&quot;245px&quot; height=&quot;521px&quot; /&gt;&lt;/figure&gt;

&lt;h2 id=&quot;usage&quot;&gt;Usage&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;right-click on a file&lt;/li&gt;
  &lt;li&gt;select “Restore from Time Machine”&lt;/li&gt;
  &lt;li&gt;file is trashed (recoverable using Trash’s Put Back feature)&lt;/li&gt;
  &lt;li&gt;most recent backup of that file is restored from Time Machine&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This takes a seconds or two, depending on the size of the file in question. Most importantly this saves interrupting my workflow by having to opening the Time Machine interface and zooming through all those windows looking for the file.&lt;/p&gt;

&lt;h2 id=&quot;requirements&quot;&gt;Requirements&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://apps.apple.com/gb/app/context-menu/id1236813619?mt=12&quot;&gt;ContextMenu&lt;/a&gt; (paid)
    &lt;ul&gt;
      &lt;li&gt;or &lt;a href=&quot;https://github.com/Mortennn/FiScript&quot;&gt;FiScript&lt;/a&gt; (free)&lt;/li&gt;
      &lt;li&gt;or &lt;a href=&quot;https://apps.apple.com/gb/app/service-station/id1503136033?mt=12&quot;&gt;Service Station&lt;/a&gt; (limited trial, paid)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These apps let you add items to Finder’s right-click context menu, from where you can run your own scripts that do something with the full path of the file/s selected.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/morgant/tools-osx/blob/master/src/trash&quot;&gt;trash&lt;/a&gt;, a shell script to delete files with support for Put Back&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;tmutil, built-in macOS utility for interacting with Time Machine&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;contextmenuapp&quot;&gt;ContextMenu.app&lt;/h2&gt;

&lt;p&gt;Create a “New Action with Shell Script…” as follows:&lt;/p&gt;

&lt;figure&gt;&lt;img src=&quot;/images/posts/restore-time-machine-context-menu-setup.png&quot; width=&quot;578px&quot; height=&quot;485px&quot; /&gt;&lt;/figure&gt;

&lt;h2 id=&quot;scripts&quot;&gt;Scripts&lt;/h2&gt;

&lt;p&gt;There are a couple of scripts because backups are stored differently on USB and Network. Of course, you’ll also need to change the path names to suit your setup.&lt;/p&gt;

&lt;noscript&gt;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/ea0a213eb5e361ba9e7e8d004300c91b&quot;&gt;View the source code as a Gist&lt;/a&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;script src=&quot;https://gist.github.com/gingerbeardman/ea0a213eb5e361ba9e7e8d004300c91b.js&quot;&gt;&lt;/script&gt;

&lt;h2 id=&quot;other-uses&quot;&gt;Other uses&lt;/h2&gt;

&lt;p&gt;You could also install the script to enable it to be used from the command line.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 05 May 2022 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2022/05/05/one-click-restore-of-the-most-recent-time-machine-backup-of-a-file/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2022/05/05/one-click-restore-of-the-most-recent-time-machine-backup-of-a-file/</guid>
        </item>
      
    
      
        <item>
          <title>Wire Hang Redux for 64-bit macOS</title>
          <description>&lt;p&gt;I just uploaded a 64-bit macOS version of my 2004 game &lt;a href=&quot;/2004/06/20/wire-hang-redux/&quot;&gt;Wire Hang Redux&lt;/a&gt; that I had forgotten all about. So now you can play it on your 64-bit Mac. This version built using BlitzMax. I’ll try to build it for Apple Silicon some time this decade, but no promises!&lt;/p&gt;

&lt;p&gt;Read more about the game in the original &lt;a href=&quot;/2004/06/20/wire-hang-redux/&quot;&gt;blog post&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Download: &lt;a href=&quot;https://gingerbeardman.itch.io/wire-hang-redux&quot;&gt;gingerbeardman.itch.io/wire-hang-redux&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/wire-hang-redux-update-title.png&quot; alt=&quot;IMG&quot; /&gt;
&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/wire-hang-redux-update-clouds.png&quot; alt=&quot;IMG&quot; /&gt;
&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/wire-hang-redux-update-stars.png&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 23 Apr 2022 15:40:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2022/04/23/wire-hang-redux-for-64-bit-macos/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2022/04/23/wire-hang-redux-for-64-bit-macos/</guid>
        </item>
      
    
      
        <item>
          <title>Accessing Yahoo! Japan from Europe</title>
          <description>&lt;p&gt;Since 6th April 2022, &lt;a href=&quot;https://www.theverge.com/2022/2/1/22911965/yahoo-japan-europe-offline-regulations-compliance-gdpr&quot;&gt;Yahoo! Japan has blocked access to the majority of their services for anybody located in the EEA&lt;/a&gt; (European Economic Area). That means the following countries: Austria, Belgium, Bulgaria, Croatia, Republic of Cyprus, Czech Republic, Denmark, Estonia, Finland, France, Germany, Greece, Hungary, Iceland, Ireland, Italy, Latvia, Liechtenstein, Lithuania, Luxembourg, Malta, Netherlands, Norway, Poland, Portugal, Romania, Slovakia, Slovenia, Spain and Sweden.&lt;/p&gt;

&lt;p&gt;I can’t say I blame Yahoo! Japan for doing this, as the demands of GDPR, etc. are ill-considered and almost impossible for even the biggest companies to put into practice. But, regardless, here we are.&lt;/p&gt;

&lt;p&gt;My interest lies mostly in Yahoo! Japan Auctions, but the methods of access that I outline will work for any of their services. I’ll provide links where I can, and do feel free to reach out to me on Twitter, but sadly I’m unable to offer unpaid one-to-one help.&lt;/p&gt;

&lt;p&gt;With that said let’s find some workarounds!&lt;/p&gt;

&lt;h2 id=&quot;proxy-or-vpn&quot;&gt;Proxy or VPN?&lt;/h2&gt;

&lt;p&gt;We can use a couple of service to place the source of our access to Yahoo! Japan outside of the EEA blocked area, and any checks as to our physical location will get the physical location of the service instead. Neat!&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Proxy: is a middleman service that relays your accesses to/from websites, usually at an application level. It is often not secure and encrypted.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;VPN: this Virtual Private Network encompasses all access to/from your computer,at a system level. It is generally secure and encrypted.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For more information about the difference between a proxy and VPN &lt;a href=&quot;https://nordvpn.com/blog/vpn-vs-proxy/&quot;&gt;read this page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now that we know what tools we’re going to use, let’s talk about specific uses.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1-browsers&quot;&gt;1. Browsers&lt;/h2&gt;

&lt;p&gt;Certain browsers offer built in proxy/VPN, at zero cost. These will allow you to access Yahoo! Japan pretty much as you did before. But read the notes below!&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://addons.opera.com/en-gb/extensions/details/opera-vpn/&quot;&gt;Opera browser&lt;/a&gt; (desktop only)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://alohabrowser.com&quot;&gt;Aloha browser&lt;/a&gt; (mobile only)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Notes:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;whilst using a proxy all your traffic goes through it&lt;/li&gt;
  &lt;li&gt;only use proxy to access selected websites, not all sites&lt;/li&gt;
  &lt;li&gt;avoid proxy/VPN apps with free trials and expensive monthly subscriptions thereafter&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;2-standalone-vpns&quot;&gt;2. Standalone VPNs&lt;/h2&gt;

&lt;p&gt;You can use a stand-alone VPN that is installed at a system level. This will affect all apps running on your system. Such VPNs are provided by the likes of PIA, ExpressVPN, SurfShark, NordVPN. Whilst I’ll refrain from recommending any one in particular, I will say that if you hunt around you can almost always find special offer pricing.&lt;/p&gt;

&lt;p&gt;Personally I use PIA, so &lt;a href=&quot;https://www.privateinternetaccess.com/pages/buy-a-vpn/1218buyavpn?invite=U2FsdGVkX18DlbIFebZBqvJIfoIVUNXHTGwHDesd0ksu2LJWgn2ljTzF91SYnAql%2C-6K1dJvsW9WQAp6IM1xnkkTq6sM&quot;&gt;here’s a referral to save some money&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;The above solutions are all you need, but if you’re looking for more solutions then read on.&lt;/p&gt;

&lt;h2 id=&quot;3-proxy&quot;&gt;3. Proxy&lt;/h2&gt;

&lt;p&gt;You don’t really want to route all of your traffic through a proxy, especially if it’s a free proxy that you shouldn’t trust. It’s recommended to enable the proxy only for *.yahoo.co.jp URLs, which is possible using a &lt;a href=&quot;https://en.wikipedia.org/wiki/Proxy_auto-config&quot;&gt;Proxy Auto-Config&lt;/a&gt; (PAC file), an example of which is below.&lt;/p&gt;

&lt;noscript&gt;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/d02b61f86eadd29a86b3ae42082eee7f&quot;&gt;View the source code as a Gist&lt;/a&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;script src=&quot;https://gist.github.com/gingerbeardman/d02b61f86eadd29a86b3ae42082eee7f.js&quot;&gt;&lt;/script&gt;

&lt;p&gt;&lt;a href=&quot;https://thorsen.pm/proxyforurl&quot;&gt;This handy website can be used to create and test your PAC file&lt;/a&gt;, then you should host the PAC file somewhere publicly accessible on the internet (so no passwords or personal information should be in it!), and finally enter the proxy URL into your system or browser network settings. This can all be done on both iOS, macOS and likely other platforms.&lt;/p&gt;

&lt;h2 id=&quot;which-proxy&quot;&gt;Which Proxy?&lt;/h2&gt;

&lt;p&gt;There are many free proxies listed at &lt;a href=&quot;https://www.freeproxy.world&quot;&gt;freeproxy.world&lt;/a&gt; with the caveat that you may have to hunt to find one that works, find new ones when things stop working, and not trust them with any personal data.&lt;/p&gt;

&lt;p&gt;It’s possible to host your own! You could do this on your home network using a Synology NAS, Raspberry Pi or some other computer. Or you can do it on a wider scale by hosting your proxy in the cloud. This is an advanced level solution, but is currently my preferred method. I have a proxy installed on a cloud compute instance located outside of the EEA. More specifically, I am using an install of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tinyproxy&lt;/code&gt; on an &lt;em&gt;Oracle Cloud Instance&lt;/em&gt; located on a server in Switzerland. I then combine this with the PAC method on the network connection each of my devices.&lt;/p&gt;

&lt;h3 id=&quot;server-level-access&quot;&gt;Server-level access&lt;/h3&gt;

&lt;p&gt;I run a server that does automated searches of Yahoo! Japan Auctions, giving me a sort of “Saved Search” mechanism for my own hobbies and interests. I now route all accesses to Yahoo! Japan websites through my Swiss proxy by specifying its proxy URL in my server configuration.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;4-redirection&quot;&gt;4. Redirection&lt;/h2&gt;

&lt;p&gt;My main browser on macOS is Safari and regardless of the previous workarounds I still visit Yahoo! Japan Auctions pages during general browsing and image searching. This results in the dreaded error page.&lt;/p&gt;

&lt;p&gt;To workaround this I have configured the &lt;a href=&quot;https://apps.apple.com/gb/app/pageextender-for-safari/id1457557274?mt=12&quot;&gt;PageExtender extension&lt;/a&gt; (maOS) and the &lt;a href=&quot;https://apps.apple.com/sg/app/makeover-custom-css/id1602361167&quot;&gt;Makeover extension&lt;/a&gt; (iOS) to apply custom CSS and JS to Yahoo! Japan Auctions URLs.&lt;/p&gt;

&lt;p&gt;I do the following:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;CSS
    &lt;ul&gt;
      &lt;li&gt;hide everything on the page (so I don’t see the ugly error)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;JS
    &lt;ul&gt;
      &lt;li&gt;redirect the page to an alternative website so I can see details of the auction item (such as pages provided by one of the many “buy from japan” websites)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;noscript&gt;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/789bcd8786fb76578fc11c491bd5b97b&quot;&gt;View the source code as a Gist&lt;/a&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;script src=&quot;https://gist.github.com/gingerbeardman/789bcd8786fb76578fc11c491bd5b97b.js&quot;&gt;&lt;/script&gt;

&lt;p&gt;This means I can keep browsing uninterrupted, though of course you can no longer see the original pages as intended.&lt;/p&gt;

&lt;p&gt;Here is &lt;a href=&quot;https://github.com/gingerbeardman/dot-css-js/&quot;&gt;my archive of CSS and JS for modifying other sites&lt;/a&gt; in a similar way.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 07 Apr 2022 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2022/04/07/accessing-yahoo-japan-from-europe/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2022/04/07/accessing-yahoo-japan-from-europe/</guid>
        </item>
      
    
      
        <item>
          <title>Working with classic Macintosh text encodings in the age of Unicode</title>
          <description>&lt;p&gt;One of my “lockdown projects” is a collection of media from vintage Japanese Apple Macintosh magazines. These are mostly CD-ROMs but there are some floppy disks too. I started the project in July 2021 and have so far collected an archive of over 250 items spanning just over a decade, uncovering many long lost classic pieces of software in the process. I call the project &lt;a href=&quot;/2021/10/30/macintosh-magazine-media/&quot;&gt;Macintosh Magazine Media&lt;/a&gt; and contributions are always welcome.&lt;/p&gt;

&lt;h2 id=&quot;the-relentless-march-of-progress&quot;&gt;The Relentless March of Progress&lt;/h2&gt;

&lt;p&gt;Accessing vintage Macintosh media from the “classic” era is more difficult than it should be. This is largely due to Apple removing support for accessing the HFS Standard format in modern macOS, since Catalina. My guess is that the feature comprised of 32-bit code and the move to 64-bit and Apple Silicon meant it would have to be rewritten, so instead they removed it completely. You can still access HFS Standard disks in Mojave, but there are problems when exotic text encodings are used.&lt;/p&gt;

&lt;h2 id=&quot;before-unicode&quot;&gt;Before Unicode&lt;/h2&gt;

&lt;p&gt;Classic Macintosh was created before the world moved to Unicode. But of course many languages existed and people speaking those languages wanted to use Macintosh computers. So Apple were forced to provide support for those languages. They did so by offering their system software in multiple languages. If you think of how embedded Unicode is in our software today, it was the same sort of thing: only repeated for each individual language!&lt;/p&gt;

&lt;p&gt;For European, Western, or Latin-based languages you’d be forgiven for not noticing the differences as most of the characters are the same. The problem comes with non-Latin languages, like Japanese.&lt;/p&gt;

&lt;h2 id=&quot;opening-pandoras-box&quot;&gt;Opening Pandora’s Box&lt;/h2&gt;

&lt;p&gt;I figured out quickly that the correct way of viewing the contents of media containing Japanese files was to use a Japanese version of Macintosh system software. It sounds obvious in hindsight, but it was not at the time! Seeing as I prefer System 7 to later versions I installed System J-7.5.3 in the BasiliskII emulator, alongside my existing systems so I can switch to it on demand. Emulation makes the whole thing so much easier by removing the friction of old, slow, possibly failing hardware.&lt;/p&gt;

&lt;p&gt;There are many apps capable of cataloguing removable media, but it took me a long time to find one that could cope with Japanese. I learned an important lesson here: if you’re dealing with Japanese look for apps made in Japan! More on that later. &lt;a href=&quot;https://macintoshgarden.org/apps/diskcatalogmaker&quot;&gt;DiskCatalogMaker&lt;/a&gt; (formerly DiskChoboMaker) was the cataloguing app that I settled on that worked for my needs. In fact, it’s still being updated today and can even import files created with much older versions, so I can copy my database from classic Mac OS to modern macOS and “it just works”, at least it does if you do that with modern macOS set to Japanese locale. That said, as good as DiskCatalogMaker is it still has problems with some filenames resulting in missing or duplicate entries, it uses a proprietary database format, it has cumbersome way of exporting plain text listings, and does not support bulk operations. I did go so far as scripting an automated bulk export solution using &lt;a href=&quot;https://www.keyboardmaestro.com&quot;&gt;Keyboard Maestro&lt;/a&gt; but that was slow and tedious to do whenever there were changes or additions to my collection.&lt;/p&gt;

&lt;h2 id=&quot;diy&quot;&gt;DIY&lt;/h2&gt;

&lt;p&gt;With no better solutions to be found the only remaining choice was to do it myself. This decision was made in October 2021.&lt;/p&gt;

&lt;p&gt;I found two apps that can be used on modern operating systems to view HFS format media, both of which seemed like good places to start. I didn’t want to reinvent the wheel:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/unsound/hfsexplorer&quot;&gt;HFSExplorer&lt;/a&gt; - a Java GUI app&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mars.org/home/rob/proj/hfs/&quot;&gt;hfsutils&lt;/a&gt; - a command-line suite of tools&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;hfsexplorer&quot;&gt;HFSExplorer&lt;/h3&gt;

&lt;p&gt;This app opened a lot of my HFS media, but failed on others for reasons I didn’t immediately understand. &lt;a href=&quot;https://github.com/unsound/hfsexplorer/issues/15&quot;&gt;I field an issue on GitHub&lt;/a&gt; and to my surprise it was quickly resolved. This led to the discovery that the filenames on the media were in MacJapanese text encoding, so that capability was also added to HFSExplorer. Things went well for a while until certain other media failed to be read completely. Characters in certain filenames were out-of-range for MacJapanese. A &lt;a href=&quot;https://github.com/unsound/hfsexplorer/issues/26&quot;&gt;workaround&lt;/a&gt; was to read the filenames as MacJapanese and drop down to MacRoman for any filenames with out-of-range characters. This worked well enough.&lt;/p&gt;

&lt;p&gt;At this point my attention moved on to wanting to search the contents of all media. It was possible with DiskCatalogMaker but I was limited to using apps on classic Macintosh or modern macOS. Ideally I’d want the search to be web based. So I needed to generate text file listings of each disk. This was the end of the line for HFSExplorer for me, as I found no easy way of exporting full listings.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;aside-out-of-range-characters&quot;&gt;Aside: out-of-range characters&lt;/h3&gt;

  &lt;p&gt;You might be wondering: how can there be out of range characters in text of a specified encoding, and what the hell are they? Well, there are a few scenarios that cause these problem characters to appear in filenames:&lt;/p&gt;

  &lt;ol&gt;
    &lt;li&gt;Files originating on other systems that are encoded as MacRoman, Shift-JIS or some other encoding can be copied onto a computer running MacJapanese, but the filenames are not re-encoded.&lt;/li&gt;
    &lt;li&gt;Pressing forward delete key on an extended keyboard whilst renaming a file inserts an invisible DEL control character into the filename, rather than doing any actual deleting!&lt;/li&gt;
  &lt;/ol&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;hfsutils&quot;&gt;hfsutils&lt;/h3&gt;

&lt;p&gt;Next, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hfsutils&lt;/code&gt;. It’s trivial to export the contents of a disk image as a text file—using the command line tool &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hls&lt;/code&gt;—but I couldn’t make sense of the contents. It didn’t seem to adhere to any one encoding. I had no luck with the best text editors on classic Mac OS: BBEdit, Nisus, Tex-Edit Plus, even Japanese apps like LightWayText couldn’t deal with the text. The same can be said for a bespoke text conversation app called Cyclone Classic, but it hit the same problem as HFSExplorer when it encountered out-of-range characters.&lt;/p&gt;

&lt;p&gt;The modern tool &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;iconv&lt;/code&gt; couldn’t deal with the listings as it has no support for MacJapanese. I could get by processing as Shift-JIS and forcing unsupported characters to be ignored. But it wasn’t a good enough solution: MacJapanese is not Shift-JIS.&lt;/p&gt;

&lt;p&gt;Thinking back to using Japanese apps to work with Japanese text I looked for any modern Japanese text editors for macOS. There are a handful and I eventually stumbled across a modern Japanese text editor called &lt;a href=&quot;https://coteditor.com&quot;&gt;CotEditor&lt;/a&gt; which handles old Macintosh text files with aplomb. This app is now my default text file viewer and it comes highly recommended. I can’t go so far as to use it as my work editor because it doesn’t support opening folders or projects containing  multiple files. It still has problems with my directory listings but at least it’s a modern way to view the majority of Japanese text files.&lt;/p&gt;

&lt;p&gt;At this point, I was at an impasse and couldn’t think of any way to proceed. Eventually, after ruminating in the problem for some months I had a couple of breakthroughs.&lt;/p&gt;

&lt;h3 id=&quot;scummvm&quot;&gt;ScummVM&lt;/h3&gt;

&lt;p&gt;What on earth does a point-and-click video game engine have to do with text encoding? Well it turns out that in July 2021, at the same time I was trying to solve this problem, the ScummVM team were also trying to solve it! They needed a tool to be able to handle Japanese media that contained games the wanted to run on their engine. Their solution is &lt;a href=&quot;https://github.com/einstein95/scummvm/blob/master/devtools/dumper-companion.py&quot;&gt;dumper-companion&lt;/a&gt; and once it had &lt;a href=&quot;https://github.com/scummvm/scummvm/pull/3485&quot;&gt;support for MacJapanese added&lt;/a&gt;,in the same way it had been for HFSExplorer, it was a reasonable solution. But it was far too slow, reading the whole disk image into memory at once—no mean feat for a bunch of 650MB CD-ROM images—and it also had the same problem with the out-of-range characters.&lt;/p&gt;

&lt;h3 id=&quot;tickle&quot;&gt;Tickle&lt;/h3&gt;

&lt;p&gt;From time to time I would search for possible ways to deal with MacJapanese encoding. One day in November 2021 I stumbled upon Tcl (pronounced “tickle”) which has support for a whole bunch of text encodings, including MacJapanese! What’s more &lt;a href=&quot;https://opensource.apple.com/source/tcl/tcl-10/tcl/tools/encoding/macJapan.txt&quot;&gt;the encoding maps were written by Apple&lt;/a&gt; in the mid-‘90s, so it’s likely to be as correct as can be. Note: Peter Edberg, who wrote the Tcl mappings, is still working at Apple after almost 35 years!&lt;/p&gt;

&lt;p&gt;The Tcl solution to convert from MacJapanese to Unicode is a beautiful one-liner:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;puts out.txt [encoding convertfrom macJapan [read in.txt]]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;…so much effort to arrive at this simple solution!&lt;/p&gt;

&lt;h2 id=&quot;convert2unicode&quot;&gt;convert2unicode&lt;/h2&gt;

&lt;p&gt;From here I wrapped the Tcl one-liner in a bunch more script so that it can handle both files and directories, as well as wildcards and stdin. It can also list all known encodings, and can take an argument representing the source encoding (of course it defaults to MacJapanese). Essentially, I made the one-liner into a proper command-line tool.&lt;/p&gt;

&lt;noscript&gt;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/4a3b66236e018b72b32ca17953474e12&quot;&gt;View the source code as a Gist&lt;/a&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;script src=&quot;https://gist.github.com/gingerbeardman/4a3b66236e018b72b32ca17953474e12.js&quot;&gt;&lt;/script&gt;

&lt;p&gt;I have a secondary &lt;a href=&quot;https://gist.github.com/gingerbeardman/892e2c92b6fe17838a1443608c111a56&quot;&gt;shell script&lt;/a&gt; that runs &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;convert2unicode&lt;/code&gt; against my drive full of disk images, along with some housekeeping and maintenance functions. The whole process of listing the disks and converting the resulting text files takes less than 30 seconds for 250 items.&lt;/p&gt;

&lt;h3 id=&quot;let-there-be-search&quot;&gt;Let there be search&lt;/h3&gt;

&lt;p&gt;So, at this point I can generate text files with the contents of each disk, but to get sensible search results each filename would have to have its full path. So I rolled my sleeves up and &lt;a href=&quot;https://github.com/gingerbeardman/hfsutils&quot;&gt;forked hfsutils to add a “full” output mode&lt;/a&gt; to display the filenames in exactly  the way I needed. My C skills were really rusty so this work was quite a challenge.&lt;/p&gt;

&lt;p&gt;Finally, I created a fairly naïve &lt;a href=&quot;https://www.gingerbeardman.com/mmm/&quot;&gt;web-based search engine&lt;/a&gt; that can search through hundreds of files, totalling almost half a million lines of text, in a fraction of a second.&lt;/p&gt;

&lt;h2 id=&quot;future&quot;&gt;Future&lt;/h2&gt;

&lt;p&gt;I’d like to offer the ability for individual files to be extracted from a disk image so they can be downloaded by interested parties. This would be similar to the way Internet Archive allows individual files to be downloaded from inside ISO disk images. However, this involves further challenges with text encoding and I would also have to address potential bandwidth concerns.&lt;/p&gt;

&lt;p&gt;Whilst the Tcl solution is great, it is not quite perfect. Currently the behaviour of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;encoding convertfrom&lt;/code&gt; command silently ignores problem characters. &lt;a href=&quot;https://core.tcl-lang.org/tcl/info/535705ffffffffff&quot;&gt;Future versions of Tcl will have the option of displaying errors&lt;/a&gt;. I’ll keep an eye on that progress and upgrade my scripts when the time comes.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 31 Mar 2022 12:34:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2022/03/31/working-with-classic-macintosh-text-encodings-in-the-age-of-unicode/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2022/03/31/working-with-classic-macintosh-text-encodings-in-the-age-of-unicode/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: Club GTi</title>
          <description>&lt;p&gt;My &lt;a href=&quot;/2023/06/07/gti-cub-supermini-festa/&quot;&gt;GTi Club: Supermini Festa!&lt;/a&gt; obsession has bled into my game &lt;a href=&quot;/tag/dailydriver/&quot;&gt;Daily Driver&lt;/a&gt;… the “Club GTi” car features smaller wheels than the standard size, more roll during turning, and lots of detail and decoration to show off the rendering workflow I spent so many hours on. A good choice for the autotesting/motorkhana/gymkhana stages.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-club-gti.gif#playdate&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Here’s the 3D model, created in &lt;a href=&quot;https://openscad.org&quot;&gt;OpenSCAD&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-club-gti-model.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 08 Mar 2022 12:32:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2022/03/08/club-gti/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2022/03/08/club-gti/</guid>
        </item>
      
    
      
        <item>
          <title>BOSS controller shell for Nintendo Wii</title>
          <description>&lt;p&gt;If you don’t know already, I am of the opinion that the Nintendo Wii is the greatest console of all time and host to the greatest collection of games of all time. My Wii was a gift for my 30th Birthday, and still play games on it regularly to this day.&lt;/p&gt;

&lt;p&gt;I also have a love for odd controllers. On one of my searches for alternative classic controllers I found this beauty: the BOSS (Big Oversized Super Shell) by PDP. I love everything about it, from the forced acronym of its name to the colour schemes echoing famous Nintendo character colours.&lt;/p&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;b&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;c&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;d&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;e&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/boss-wii-01.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/boss-wii-01.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/boss-wii-02.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/boss-wii-02.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/boss-wii-03.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/boss-wii-03.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/boss-wii-04.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/boss-wii-04.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/boss-wii-05.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/boss-wii-05.jpg&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 100%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__staticimage,
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}

.carousel__activator:nth-of-type(3):checked ~ .carousel__track {
  -webkit-transform: translateX(-200%);
          transform: translateX(-200%);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__slide:nth-of-type(3) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__controls:nth-of-type(3) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(3) {
  opacity: 1;
}

.carousel__activator:nth-of-type(4):checked ~ .carousel__track {
  -webkit-transform: translateX(-300%);
          transform: translateX(-300%);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__slide:nth-of-type(4) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__controls:nth-of-type(4) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(4) {
  opacity: 1;
}

.carousel__activator:nth-of-type(5):checked ~ .carousel__track {
  -webkit-transform: translateX(-400%);
          transform: translateX(-400%);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__slide:nth-of-type(5) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__controls:nth-of-type(5) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(5) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(3) {
  -webkit-transform: translateX(200%) translateZ(0);
          transform: translateX(200%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(4) {
  -webkit-transform: translateX(300%) translateZ(0);
          transform: translateX(300%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(5) {
  -webkit-transform: translateX(400%) translateZ(0);
          transform: translateX(400%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(3),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(3) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(4),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(4) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(5),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(5) {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;.carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 26 Feb 2022 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2022/02/26/boss-controller-shell-for-nintendo-wii/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2022/02/26/boss-controller-shell-for-nintendo-wii/</guid>
        </item>
      
    
      
        <item>
          <title>Using RSS to create saved searches for any website</title>
          <description>&lt;p&gt;I’ve recently started using RSS again, with a couple of goals in mind.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;to read the latest interesting blog posts in a more focussed way&lt;/li&gt;
  &lt;li&gt;to assist with personal research, and that’s what this post is about&lt;/li&gt;
&lt;/ol&gt;

&lt;h1 id=&quot;internet-archive&quot;&gt;Internet Archive&lt;/h1&gt;

&lt;p&gt;You can set up an RSS feed for any search using their &lt;a href=&quot;https://archive.org/advancedsearch.php&quot;&gt;Advanced Search&lt;/a&gt; page:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;scroll half way down to “Advanced Search returning JSON, XML, and more”&lt;/li&gt;
  &lt;li&gt;enter your Query (default sort is newest first)&lt;/li&gt;
  &lt;li&gt;choose: RSS format&lt;/li&gt;
  &lt;li&gt;press Search&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You should be prompted to add the feed to your default RSS reader.&lt;/p&gt;

&lt;p&gt;I use this to track searches for items that match my hobby interests:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Hanafuda&lt;/li&gt;
  &lt;li&gt;Classic Macintosh software&lt;/li&gt;
  &lt;li&gt;Japanese magazine scans&lt;/li&gt;
  &lt;li&gt;Authors&lt;/li&gt;
  &lt;li&gt;Publishers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every time a new item appears in my RSS reader it feels like Christmas!&lt;/p&gt;

&lt;p&gt;Thanks to the generosity of the Internet Archive there is no limit to the number of RSS feeds you can generate.&lt;/p&gt;

&lt;h1 id=&quot;yahoo-japan-auctions&quot;&gt;Yahoo! Japan Auctions&lt;/h1&gt;

&lt;p&gt;Sadly, Yahoo! no longer provides RSS feeds for their Auctions website.&lt;/p&gt;

&lt;p&gt;But where there is a will, and technology, there is a way. We can use a website called &lt;a href=&quot;https://politepol.com/en/&quot;&gt;PolitePol&lt;/a&gt; to generate RSS feeds! It works on any website, especially those with generated/structured content. A search results page is perfect.&lt;/p&gt;

&lt;p&gt;PolitePol offers a free account with certain limits. At the time of writing those are: max 20 feeds, no RSS images (more on that later), and no support for websites that require scripting to load their content (so I can’t do this with Mercari), and hourly refresh. You can pay to unlock those restrictions, but I’ve not yet found a need to do so. PolitePol is also Open Source so you can host it yourself - as easy as launching a Docker container.&lt;/p&gt;

&lt;h2 id=&quot;example-usage&quot;&gt;Example usage&lt;/h2&gt;

&lt;p&gt;The first thing we need to do is craft a Yahoo! Japan Auctions URL that makes sense so that we can paste it into PolitePol.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;I’ll search for ペブルビーチ (Pebble Beach)&lt;/li&gt;
  &lt;li&gt;The default sort order is おすすめ順 (Recommended) but we need to set it to 新着順 (Newest)&lt;/li&gt;
  &lt;li&gt;We’ll limit the search to specific categories: おもちゃ、ゲーム (Toys &amp;amp; Games) followed by ゲーム (Games)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This gives us the following URL (which could be trimmed down manually but we’ll use it as-is):&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://auctions.yahoo.co.jp/search/search?va=ペブルビーチ&amp;amp;exflg=1&amp;amp;b=1&amp;amp;n=50&amp;amp;s1=new&amp;amp;o1=d&amp;amp;auccat=27727&amp;amp;tab_ex=commerce&amp;amp;ei=utf-8&amp;amp;aq=-1&amp;amp;oq=&amp;amp;sc_i=&amp;amp;exflg=1&amp;amp;p=ペブルビーチ&quot;&gt;auctions.yahoo.co.jp/search/search?va=ペブルビーチ&amp;amp;exflg=1&amp;amp;b=1&amp;amp;n=50&amp;amp;s1=new&amp;amp;o1=d&amp;amp;auccat=27727&amp;amp;tab_ex=commerce&amp;amp;ei=utf-8&amp;amp;aq=-1&amp;amp;oq=&amp;amp;sc_i=&amp;amp;exflg=1&amp;amp;p=ペブルビーチ&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, in PolitePol:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;paste in the URL in and click Go!&lt;/li&gt;
  &lt;li&gt;click the Title button and select the first of any elements you’d like to use as the title (I used the auction name)&lt;/li&gt;
  &lt;li&gt;click Description button and select the first of any elements you’d like to use as the description (I used the “table cell”)&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;b&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;c&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;d&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;e&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;f&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;g&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;g&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;f&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;g&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;f&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/rss-saved-searches-1.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/rss-saved-searches-1.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/rss-saved-searches-2.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/rss-saved-searches-2.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/rss-saved-searches-3.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/rss-saved-searches-3.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/rss-saved-searches-4.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/rss-saved-searches-4.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/rss-saved-searches-5.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/rss-saved-searches-5.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/rss-saved-searches-6.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/rss-saved-searches-6.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/rss-saved-searches-7.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/rss-saved-searches-7.png&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;f&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;g&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 100%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__staticimage,
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}

.carousel__activator:nth-of-type(3):checked ~ .carousel__track {
  -webkit-transform: translateX(-200%);
          transform: translateX(-200%);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__slide:nth-of-type(3) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__controls:nth-of-type(3) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(3) {
  opacity: 1;
}

.carousel__activator:nth-of-type(4):checked ~ .carousel__track {
  -webkit-transform: translateX(-300%);
          transform: translateX(-300%);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__slide:nth-of-type(4) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__controls:nth-of-type(4) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(4) {
  opacity: 1;
}

.carousel__activator:nth-of-type(5):checked ~ .carousel__track {
  -webkit-transform: translateX(-400%);
          transform: translateX(-400%);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__slide:nth-of-type(5) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__controls:nth-of-type(5) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(5) {
  opacity: 1;
}

.carousel__activator:nth-of-type(6):checked ~ .carousel__track {
  -webkit-transform: translateX(-500%);
          transform: translateX(-500%);
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__slide:nth-of-type(6) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__controls:nth-of-type(6) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(6) {
  opacity: 1;
}

.carousel__activator:nth-of-type(7):checked ~ .carousel__track {
  -webkit-transform: translateX(-600%);
          transform: translateX(-600%);
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__slide:nth-of-type(7) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__controls:nth-of-type(7) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(7) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(3) {
  -webkit-transform: translateX(200%) translateZ(0);
          transform: translateX(200%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(4) {
  -webkit-transform: translateX(300%) translateZ(0);
          transform: translateX(300%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(5) {
  -webkit-transform: translateX(400%) translateZ(0);
          transform: translateX(400%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(6) {
  -webkit-transform: translateX(500%) translateZ(0);
          transform: translateX(500%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(7) {
  -webkit-transform: translateX(600%) translateZ(0);
          transform: translateX(600%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(3),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(3) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(4),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(4) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(5),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(5) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(6),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(6) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(7),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(7) {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;.carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

&lt;h3 id=&quot;but-i-thought-you-said-no-images-were-allowed&quot;&gt;But I thought you said no images were allowed?&lt;/h3&gt;

&lt;p&gt;As previously mentioned a PolitePol free account does not allow selection of images for use in the RSS feed. This is a bit misleading. What it really means: you can not choose an image element to use as the thumbnail/enclosure for each item in the feed.&lt;/p&gt;

&lt;p&gt;Whilst it would be nice to have thumbnails in our list of articles, it’s not essential.&lt;/p&gt;

&lt;p&gt;Also, there’s a nice workaround: by selecting the whole table cell as the description we get all of the HTML it contains: its image, title, price, number of bids, remaining time. So we get images in the description anyway. That’ll do nicely!&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;It’s important to note that the listing details are not live; they are a snapshot taken at the time the feed was refreshed (up to an hour ago with a PolitePol free account).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here’s the final result in my RSS reader:&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/rss-saved-searches-8.png&quot; alt=&quot;PNG&quot; title=&quot;Saved Search: a generated RSS feed for a Yahoo! Japan Auctions search&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;its-up-to-you&quot;&gt;It’s up to you&lt;/h1&gt;

&lt;p&gt;You can use this technique to implement saved searches from any website. Just be sure to check the site doesn’t already have RSS feeds before you begin!&lt;/p&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;huginn&quot;&gt;Huginn&lt;/h1&gt;

&lt;p&gt;Since shortly after this blog post was published I’ve been using &lt;a href=&quot;https://github.com/huginn/huginn&quot;&gt;Huginn&lt;/a&gt; as a replacement for Politepol. There’s no real GUI so you have to scrape using CSS selectors or XPath, but it’s quite a lot more powerful. I’d say it’s a good advanced solution if you run into the limits of Politepol. Here’s &lt;a href=&quot;https://gist.github.com/gingerbeardman/e4b07db8d59dec441bc9ada1972789c4&quot;&gt;an example Huginn Website Agent&lt;/a&gt; that scrapes Yahoo! Japan Auctions search results.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 30 Jan 2022 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2022/01/30/using-rss-to-create-saved-searches-for-any-website/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2022/01/30/using-rss-to-create-saved-searches-for-any-website/</guid>
        </item>
      
    
      
        <item>
          <title>Using a proxy to speed up access to specific websites</title>
          <description>&lt;p&gt;I use &lt;a href=&quot;https://world.hoyoyo.com/member~register~code~IZhM8F&quot;&gt;world.hoyoyo.com&lt;/a&gt; quite a lot. It’s a forwarding service for buying stuff from Japan. However, I found that their website took around a minute to load a page, which became hugely annoying very quickly.&lt;/p&gt;

&lt;p&gt;HOYOYO are great as they will negotiate discount prices from Mercari sellers, which has saved me a ton of money, so I wanted to stick with them.&lt;/p&gt;

&lt;p&gt;Over time I’d resorted to accessing their website through a trusted VPN in either &lt;a href=&quot;https://www.opera.com&quot;&gt;Opera browser&lt;/a&gt; (macOS) or &lt;a href=&quot;https://readdle.com/documents&quot;&gt;Documents app&lt;/a&gt; (iOS) which both worked very well. But launching a new browser for a specific website always bothered me.&lt;/p&gt;

&lt;h1 id=&quot;its-good-to-talk&quot;&gt;It’s good to talk&lt;/h1&gt;

&lt;p&gt;I was chatting with my brother about it and he said that he was seeing reasonably quick load times. After a little investigation I found that, for reasons I don’t understand, certain websites are very slow to load through my ISP (British Telecom). At this point, it was obvious that using a VPN in a specific browser was overkill for solving the problem.&lt;/p&gt;

&lt;h1 id=&quot;proxy-to-the-rescue&quot;&gt;Proxy to the rescue&lt;/h1&gt;

&lt;p&gt;So I tried using a web proxy and the load times dropped drastically, to a handful of seconds, which is a lot more reasonable! Not quite as quick as using the specific browsers, but good enough for me.&lt;/p&gt;

&lt;p&gt;Of course, I don’t want all traffic to go through the proxy. So I set up a PAC (Proxy Auto-Configuration) file to route only requests to HOYOYO through the proxy and leave everything else untouched.&lt;/p&gt;

&lt;p&gt;In terms of which proxy to use, you’ll have to hit Google or set up your own on an external server.&lt;/p&gt;

&lt;h1 id=&quot;pac-man&quot;&gt;PAC, man&lt;/h1&gt;

&lt;p&gt;Here’s what my final PAC file looks a bit like:&lt;/p&gt;

&lt;noscript&gt;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/dd6691c2706a3d27a485a7a7dc3e5d60&quot;&gt;View the source code as a Gist&lt;/a&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;script src=&quot;https://gist.github.com/gingerbeardman/dd6691c2706a3d27a485a7a7dc3e5d60.js&quot;&gt;&lt;/script&gt;

&lt;p&gt;Note: you’ll need to substitute a valid proxy IP address and port number, and host the file on a web server you can access from your device.&lt;/p&gt;

&lt;h3 id=&quot;usage&quot;&gt;Usage&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;For iOS, you enter the URL of the file in the Proxy setting of your current Wi-Fi connection. A correct setting will be shown as “Automatic”.&lt;/li&gt;
  &lt;li&gt;macOS: enter it in System Preferences &amp;gt; Network &amp;gt; Advanced &amp;gt; Proxies, as below.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/proxy.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 29 Jan 2022 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2022/01/29/using-a-proxy-to-speed-up-access-to-specific-websites/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2022/01/29/using-a-proxy-to-speed-up-access-to-specific-websites/</guid>
        </item>
      
    
      
        <item>
          <title>Displaying Full Referrer URL in Google Analytics 4 (GA4)</title>
          <description>&lt;p&gt;Google are transitioning Analytics users to GA4, which has a different type of reporting. Previously it was very easy to see a list of referrers with their full URL. In GA4 it doesn’t seem possible, but I found a reasonable workaround.&lt;/p&gt;

&lt;p&gt;To view the full referrer URL in GA4, follow these steps:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Navigate to the &lt;strong&gt;Explore&lt;/strong&gt; section in your GA4 property.&lt;/li&gt;
  &lt;li&gt;Create a new &lt;strong&gt;Blank&lt;/strong&gt; exploration report.&lt;/li&gt;
  &lt;li&gt;In the “Variables” column, click the plus sign (+) next to &lt;strong&gt;Dimensions&lt;/strong&gt; and add the &lt;strong&gt;Page referrer&lt;/strong&gt; &lt;em&gt;and&lt;/em&gt; &lt;strong&gt;Landing page + query string&lt;/strong&gt; dimensions.&lt;/li&gt;
  &lt;li&gt;Next, click the plus sign (+) next to &lt;strong&gt;Metrics&lt;/strong&gt; and add a metric like &lt;strong&gt;Views&lt;/strong&gt; &lt;em&gt;or&lt;/em&gt; &lt;strong&gt;Event count&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;In the “Settings” column, drag and drop the &lt;strong&gt;Page referrer&lt;/strong&gt; and &lt;strong&gt;Landing page + query string&lt;/strong&gt; dimensions into the &lt;strong&gt;Rows&lt;/strong&gt; section.&lt;/li&gt;
  &lt;li&gt;Drag and drop your chosen metric (e.g., &lt;strong&gt;Views&lt;/strong&gt;) into the &lt;strong&gt;Values&lt;/strong&gt; section.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This will give you a long table of full referrer URLs along with the number of users that came from there. In my case most are domain names, but a handful are full URLs pointing to a page.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/ga4-full-referrer-url.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Originally posted &lt;a href=&quot;https://stackoverflow.com/a/70742721/28290&quot;&gt;answering my own question at stackoverflow&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 17 Jan 2022 12:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2022/01/17/displaying-full-referrer-url-in-google-analytics-4-ga4/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2022/01/17/displaying-full-referrer-url-in-google-analytics-4-ga4/</guid>
        </item>
      
    
      
        <item>
          <title>Script to quickly and automatically remux videos on Synology NAS</title>
          <description>&lt;p&gt;I recently set up an old HP ProLiant Microserver N54L as a NAS running Xpenology (Synology DSM 6) and it’s a great little device capable of a lot. It’s also fun to write scripts and configure things to add automation and extra capabilities!&lt;/p&gt;

&lt;p&gt;Here’s a script I wrote that will look for mkv and avi files and quickly copy-remux them as mp4. I do this because my playback setup across Apple devices seems to have an easier time with that type of container.&lt;/p&gt;

&lt;p&gt;As it’s only the container that is being changed: the video content remain the same so there is no change in quality, the remux process takes only seconds, and the file size remains effectively the same. I also set the faststart flag on the mp4 to help it start playing more quickly.&lt;/p&gt;

&lt;h2 id=&quot;outline&quot;&gt;Outline&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Find mkv and avi files&lt;/li&gt;
  &lt;li&gt;Remux the files with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ffmpeg&lt;/code&gt; to mp4&lt;/li&gt;
  &lt;li&gt;If successful move the old file to Recycle Bin (so it can be recovered if needed)&lt;/li&gt;
  &lt;li&gt;Log results to a file and fire off some notifications&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;usage&quot;&gt;Usage&lt;/h2&gt;

&lt;p&gt;I have set this script to run daily using &lt;em&gt;Task Scheduler &amp;gt; Scheduled Task &amp;gt; User-defined script&lt;/em&gt; using the full path to the script, which should be located in a Scripts sub-directory inside your video directory.&lt;/p&gt;

&lt;p&gt;After the first successful run I decided to comment out all notifications except the failure one, as that’s all I really need to act on. But feel free to set it up as you wish. You could even change it to remux from mp4 to mkv.&lt;/p&gt;

&lt;h2 id=&quot;source&quot;&gt;Source&lt;/h2&gt;

&lt;noscript&gt;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/508fccef1827e717d6100b2ac6dcfc37&quot;&gt;View the source code as a Gist&lt;/a&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;script src=&quot;https://gist.github.com/gingerbeardman/508fccef1827e717d6100b2ac6dcfc37.js&quot;&gt;&lt;/script&gt;

&lt;h2 id=&quot;bonus&quot;&gt;Bonus&lt;/h2&gt;

&lt;p&gt;I’ve only recently begun to set the faststart movflag on my mp4 files, which meant my older videos did not have it set. So here’s an additional script, &lt;a href=&quot;https://gist.github.com/gingerbeardman/59413f3b9d06e0d7a8ccbf3119e7dbdf&quot;&gt;faststart.sh&lt;/a&gt;, to set the faststart movflag on all mp4 files.&lt;/p&gt;

&lt;p&gt;Note: if you have a lot of videos this script will take a long time to complete. You can estimate about 30 seconds per video, for a total of (all your videos divided by two) minutes.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 12 Jan 2022 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2022/01/12/script-to-quickly-and-automatically-remux-videos-on-synology-nas/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2022/01/12/script-to-quickly-and-automatically-remux-videos-on-synology-nas/</guid>
        </item>
      
    
      
        <item>
          <title>My most popular posts of 2021</title>
          <description>&lt;p&gt;2021 was the year I got serious about blogging.&lt;/p&gt;

&lt;p&gt;Thanks to &lt;a href=&quot;http://lmnt.me&quot;&gt;Louie Mantia&lt;/a&gt; for the encouragement to do so! I set up this current incarnation of my blog on a software stack I dislike (ruby &amp;amp; jekyll), but I probably won’t change things until it breaks beyond repair. Anyway, I (re)launched the blog filled with my collected writings spanning the past ~20 years.&lt;/p&gt;

&lt;h2 id=&quot;how-many-posts&quot;&gt;How many posts?&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/search/?q=2021&quot;&gt;55 blog posts&lt;/a&gt; (up from 42 in 2020)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;most-popular-posts&quot;&gt;Most popular posts&lt;/h2&gt;
&lt;p&gt;According to Google Analytics, my 5 most popular posts in 2021 were (most popular first):&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/12/16/tomoya-ikeda-macintosh-artist/&quot;&gt;Tomoya Ikeda - Macintosh Artist&lt;/a&gt; (16 Dec) &lt;!-- 5K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/17/turning-an-ipad-pro-into-the-ultimate-classic-macintosh/&quot;&gt;Turning an iPad Pro into the Ultimate Classic Macintosh&lt;/a&gt; (17 Apr) &lt;!-- 3K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/06/05/channelling-rgb-into-1bit/&quot;&gt;Daily Driver: Channelling RGB into 1-bit&lt;/a&gt; (5 Jun) &lt;!-- 3K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/08/19/aquaplus-piece-vs-panic-playdate/&quot;&gt;Aquaplus P/ECE (vs Panic Playdate)&lt;/a&gt; (19 Aug) &lt;!-- 3K --&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/05/06/pixel-perfect-retro-gaming-in-480p/&quot;&gt;Pixel-Perfect retro gaming on LCD 480p EDTVs&lt;/a&gt; (6 May) &lt;!-- 1K --&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;looking-back&quot;&gt;Looking back&lt;/h2&gt;
&lt;p&gt;My personal faves from the year 2021 (most recent first):&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2020/12/16/band-kun/&quot;&gt;Band-kun バンドくん (1990, KOEI)&lt;/a&gt; the one where I discovered a cool old game&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2020/11/30/pc-engine-fanatics-console-mazine-electric-brain-games-amusement-pleasure/&quot;&gt;Electric Brain, et al.&lt;/a&gt; the one where I scanned a load of magazines/fanzines&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2020/11/11/the-beos-bible/&quot;&gt;The BeOS Bible&lt;/a&gt; the one where I scanned an absolutely massive book&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2020/07/04/showreel/&quot;&gt;Daily Driver: Showreel&lt;/a&gt; the one where I showed off a game&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2020/01/05/iwata-asks-downloader/&quot;&gt;Iwata Asks: Downloader&lt;/a&gt; the one where I scraped the web&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 31 Dec 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/12/31/my-most-popular-posts-of-the-year/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/12/31/my-most-popular-posts-of-the-year/</guid>
        </item>
      
    
      
        <item>
          <title>Tomoya Ikeda - Macintosh Artist</title>
          <description>&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;/images/posts/tomoya-ikeda-business-card.jpg&quot; alt=&quot;JPG&quot; title=&quot;Tomoya Ikeda - Macintosh Artist&amp;lt;br&amp;gt;(image:
Junichi Matsuda &amp;lt;a href=&amp;quot;https://twitter.com/mactechlab&amp;quot;&amp;gt;@mactechlab&amp;lt;/a&amp;gt;)&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;contents&quot;&gt;Contents&lt;/h1&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;#introduction&quot;&gt;Introduction&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#berkeley-systems&quot;&gt;Berkeley Systems&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#enzan-hoshigumi&quot;&gt;Enzan-Hoshigumi&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#macworld-expo&quot;&gt;MacWorld EXPO&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#selected-works&quot;&gt;Selected Works&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#mandala&quot;&gt;Mandala&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#the-life-and-times-of-tomoya-ikeda&quot;&gt;Timeline&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;/h2&gt;

&lt;p&gt;Tomoya Ikeda (池田友也) might not be a name you’re familiar with, but if you used a classic Macintosh computer at any time during in the 1990s you’re likely already familiar with some of his work.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/tomoya-ikeda-after-dark-flying-toasters-bw.png&quot; alt=&quot;PNG&quot; title=&quot;After Dark 2.0: Flying Toasters&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/tomoya-ikeda-after-dark-flying-toasters-about.png&quot; alt=&quot;PNG&quot; title=&quot;Flying Toasters: artwork by Tomoya Ikeda&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;berkeley-systems&quot;&gt;Berkeley Systems&lt;/h2&gt;

&lt;p&gt;Tomoya Ikeda played a key part in the evolution of After Dark’s world famous Flying Toasters. The original prototype artwork was done by Jack Eastman, at which time Ikeda-san was brought in as a contractor to draw the final 1-bit artwork. Later versions of the toasters were drawn in colour by Igor Gasowski and eventually rendered and animated in 3D by Jarir Maani.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/tomoya-ikeda-after-dark-flying-toasters-proto.png&quot; alt=&quot;PNG&quot; title=&quot;Flying Toasters: prototype artwork by Jack Eastman&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/tomoya-ikeda-after-dark-flying-toasters-color.png&quot; alt=&quot;PNG&quot; title=&quot;Flying Toasters: color artwork by Igor Gasowski&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Tomoya Ikeda also did the artwork for the Fish! screensaver module in Macintosh After Dark 2.0, once again &lt;a href=&quot;https://archive.org/details/artofdarkness00fent/page/21/mode/2up&quot;&gt;replacing existing artwork&lt;/a&gt; from its life as Mac Fish! by Tom &amp;amp; Ed’s Bogus Software.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/tomoya-ikeda-after-dark-fish.png&quot; alt=&quot;PNG&quot; title=&quot;After Dark 2.0: Fish!&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/tomoya-ikeda-after-dark-fish-about.png&quot; alt=&quot;PNG&quot; title=&quot;Fish Art by Tomoya Ikeda&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;enzan-hoshigumi&quot;&gt;Enzan-Hoshigumi&lt;/h2&gt;

&lt;p&gt;We need to travel back in time a bit, to the days before Ikeda-san was living in California. When he was in Japan he worked for a company called Enzan-Hoshigumi (演算星組). The company name is best translated as “Computer Gangsters”.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/tomoya-ikeda-eh-logo.png&quot; alt=&quot;PNG&quot; title=&quot; &quot; /&gt;&lt;/p&gt;

&lt;p&gt;They became well known on the early Macintosh scene by providing collections of extremely high quality Clipart in a traditional Japanese style, Dennou Emaki (電脳絵巻 or Cyber Picture Scroll), mostly drawn by Ikeda-san. And also their MacCalligraphy package that allowed drawing of traditional Japanese calligraphy using only the Macintosh mouse, with the thickness and subtleties of each stroke being controlled only by the speed and movement of the mouse.&lt;/p&gt;

&lt;h2 id=&quot;macworld-expo&quot;&gt;MacWorld EXPO&lt;/h2&gt;

&lt;p&gt;The 1988 MacWorld EXPO held in San Francisco was attended by over 45,000 people and hosted over 400 exhibits, one of which was Enzan-Hoshigumi. The hot topic of the time was &lt;a href=&quot;http://www.cornica.org/mac-reports/macworld-expo-1988/&quot;&gt;the new, colour and expandable Macintosh II&lt;/a&gt;. Photos courtesy of &lt;a href=&quot;https://twitter.com/haeckel&quot;&gt;Izumi Okano&lt;/a&gt;.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/tomoya-ikeda-eh-ikeda-prep.jpg&quot; alt=&quot;JPG&quot; title=&quot;Tomoya Ikeda preparing for the show in a San Francisco hotel room&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/tomoya-ikeda-eh-stand-prep.jpg&quot; alt=&quot;JPG&quot; title=&quot;Hirofumi Inoue (left), Izumi Okano (centre) and Ikeda-san (right, facing away) setting up&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/tomoya-ikeda-eh-stand-empty.jpg&quot; alt=&quot;JPG&quot; title=&quot;The Enzan-Hoshigumi range of Macintosh software&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/tomoya-ikeda-eh-ikeda-gosney.jpg&quot; alt=&quot;JPG&quot; title=&quot;Ikeda-san interviewed by Michael Gosney (Verbum Magazine) at Moscone Center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The Boston MacWorld EXPO event later that year also had an Enzan-Hoshigumi stand, accompanied by a 7x12 feet multi-panel Japanese folding screen comprised of a sheet-by-sheet assembly of thermal prints from an enlarged Tomoya Ikeda PixelPaint illustration. The screen was later &lt;a href=&quot;https://archive.org/details/verbum203unse/page/2/mode/2up&quot;&gt;shown at the “imagine” event&lt;/a&gt; organised at Boston Computer Museum by Verbum Magazine.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/tomoya-ikeda-folding-screen.jpg&quot; alt=&quot;JPG&quot; title=&quot; &quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/tomoya-ikeda-folding-screen-colour.jpg&quot; alt=&quot;JPG&quot; title=&quot;Colour crop from Enzan-Hoshigumi profile in the 1989 No. 13 issue of MAC+ CYBER magazine&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;selected-works&quot;&gt;Selected Works&lt;/h2&gt;

&lt;p&gt;Below are some of my personal favourites.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/tomoya-ikeda-hyperlib.jpg&quot; alt=&quot;PNG&quot; title=&quot;Graphic for a feature article on サイバースペースデッキ in HyperLib issue 1, Jan/Feb 1989.&quot; /&gt;&lt;/p&gt;

&lt;p&gt;“The Golden Dragon” drawn in 1987 by Tomoya Ikeda (Enzan-Hoshigumi Co., Ltd.) using PixelPaint, the first full-color paint application for the Macintosh.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/tomoya-ikeda-golden-dragon-bw.png&quot; alt=&quot;PNG&quot; title=&quot;1-bit monochrome version, from &amp;quot;Chinese Zodiac Character Series Dragon&amp;quot;, 1987.&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/tomoya-ikeda-golden-dragon-color.jpg&quot; alt=&quot;JPG&quot; title=&quot;8-bit color version from the book &amp;quot;Getting Started in Computer Graphics&amp;quot; by Gary Olsen, 1989.&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;mandala&quot;&gt;Mandala&lt;/h2&gt;

&lt;p&gt;From 1988 Ikeda-san became fascinated with mandala—the circular figures representing the universe in Hindu and Buddhist symbolism—and would go on to draw many of them. A handful have survived in print, scattered across Macintosh graphics books published at the time. I’ve scanned those that I’ve found so far.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/tomoya-ikeda-mandala-88.jpg&quot; alt=&quot;JPG&quot; title=&quot;Manadala 88. From &amp;lt;a href=&amp;quot;https://archive.org/details/verbum203unse/page/8/mode/2up&amp;quot;&amp;gt;Verbum 2.3 (Fall &apos;88).&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;Created using clipart from the Scroll &amp;quot;Heaven&amp;quot; collection, assembled and coloured in PixelPaint. &quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/tomoya-ikeda-mandala-89.jpg&quot; alt=&quot;JPG&quot; title=&quot;Mandala 89 (aka Red Mandala). From &amp;lt;a href=&amp;quot;https://archive.org/details/verbumbookofdigi0000gosn&amp;quot;&amp;gt;Verbum Book of Digital Painting (1990).&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;Created in Studio-8 and coloured using PixelPaint at full screen resolution on a 19&amp;quot; monitor. &quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/tomoya-ikeda-mandala-89-bw.png&quot; alt=&quot;PNG&quot; title=&quot;Mandala 89 blueprint. From &amp;lt;a hef=&amp;quot;https://archive.org/details/graybookdesignin00gosn&amp;quot;&amp;gt;The Gray Book (1990).&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;Created in Adobe Illustrator. This is the same design featured on Ikeda-san&apos;s business card.&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/tomoya-ikeda-mandala-goddess.jpg&quot; alt=&quot;JPG&quot; title=&quot;Oriental Goddess. From &amp;lt;a href=&amp;quot;https://archive.org/details/gettingstartedin00olse_2&amp;quot;&amp;gt;Getting Started in Computer Graphics (1989).&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;Created using PixelPaint.&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;the-life-and-times-of-tomoya-ikeda&quot;&gt;The life and times of Tomoya Ikeda&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;Timeline and memorial details taken from &lt;a href=&quot;http://p-media.jp/TomoyaIkeda/profile/index.html&quot;&gt;the p-media web site&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;dl&gt;
  &lt;dt&gt;1959&lt;/dt&gt;
  &lt;dd&gt;Born in Tokyo&lt;/dd&gt;
  &lt;dt&gt;1983&lt;/dt&gt;
  &lt;dd&gt;Graduated from Tokyo National University of Fine Arts and Music, Department of Design.&lt;/dd&gt;
  &lt;dd&gt;While studying at the University, he became interested in computer graphics, and upon graduating he began creating his own works.&lt;/dd&gt;
  &lt;dt&gt;1984&lt;/dt&gt;
  &lt;dd&gt;Won the Grand Prix at the 2nd ASCII Software Contest for &lt;a href=&quot;https://archive.org/details/logi-n-january-1985/LOGiN%20-%20January%201985/page/n99/mode/2up&quot;&gt;“Coron”&lt;/a&gt; (&lt;a href=&quot;https://ameblo.jp/koorogiyousyoku/entry-11983851960.html&quot;&gt;link&lt;/a&gt;).&lt;/dd&gt;
  &lt;dd&gt;Designed the arcade game &lt;a href=&quot;https://en.wikipedia.org/wiki/Daikaijū_no_Gyakushū&quot;&gt;“Dai-Kaiju no Gyakusou”&lt;/a&gt; for Enzan-Hoshigumi which was released by Taito.&lt;/dd&gt;
  &lt;dt&gt;1985&lt;/dt&gt;
  &lt;dd&gt;Awarded the Silver Prize at the International Exhibition of High Technology Art, for the work ‘Reincarnation’.&lt;/dd&gt;
  &lt;dd&gt;By 1988, he had designed many software products for the Macintosh, including “Dennou Emaki”, “Mac Shodo”, and “CyberSpaceDeck”.&lt;/dd&gt;
  &lt;dt&gt;1989&lt;/dt&gt;
  &lt;dd&gt;Moved to the United States.&lt;/dd&gt;
  &lt;dd&gt;Started CG production in Berkeley, California.&lt;/dd&gt;
  &lt;dd&gt;Designed “Flying Toaster” at Berkeley Systems, known for After Dark.&lt;/dd&gt;
  &lt;dt&gt;1994&lt;/dt&gt;
  &lt;dd&gt;Began translating and designing game software at the request of Palm Software in Silicon Valley.&lt;/dd&gt;
  &lt;dt&gt;1997&lt;/dt&gt;
  &lt;dd&gt;Planning and production of &lt;a href=&quot;https://appletechlab.jp/blog-entry-283.html&quot;&gt;“Type Designer”&lt;/a&gt; at Palm Software.&lt;/dd&gt;
  &lt;dt&gt;1998&lt;/dt&gt;
  &lt;dd&gt;1,000 typographic designs for the “Type Designer” are created.
Type Designer is released simultaneously in the US and Japan.&lt;/dd&gt;
  &lt;dd&gt;Sudden death from cancer in October, aged 39.&lt;/dd&gt;
  &lt;dt&gt;1999&lt;/dt&gt;
  &lt;dd&gt;Memorial exhibition &lt;a href=&quot;http://p-media.jp/TomoyaIkeda/index1.html&quot;&gt;“The World of CG: Tomoya Ikeda’s Digital Communication”&lt;/a&gt; held at the TEPCO building, Ginza, Tokyo.&lt;/dd&gt;
  &lt;dd&gt;&lt;a href=&quot;http://p-media.jp/TomoyaIkeda/ohtani.html&quot;&gt;Memorial speech&lt;/a&gt; delivered by Kazutoshi Otani (大谷和利)&lt;/dd&gt;
&lt;/dl&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/tomoya-ikeda-profile.jpg&quot; alt=&quot;PNG&quot; title=&quot;Tomoya Ikeda (1959-1998)&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;birthday-blog-post&quot;&gt;Birthday blog post?&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Check out my other &lt;a href=&quot;/tag/birthday/&quot;&gt;#birthday&lt;/a&gt; blog posts.&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 16 Dec 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/12/16/tomoya-ikeda-macintosh-artist/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/12/16/tomoya-ikeda-macintosh-artist/</guid>
        </item>
      
    
      
        <item>
          <title>Japanese text support on English Palm OS devices</title>
          <description>&lt;p&gt;There is a lot of great Japanese software for Palm OS. It has arguably the best selection of Hanafuda games on a single system, and more besides.&lt;/p&gt;

&lt;p&gt;Palm OS took a lot of inspiration from the original Macintosh system and it shows. The OS can be hacked, edited and otherwise modified at runtime which allows for a lot of cool stuff to happen. In the days where the operating systems that we use are ever increasingly locked down (“for your own good”, they cry!) this type of low level access to the system seems really exciting and daring.&lt;/p&gt;

&lt;p&gt;Anyway, Japanese Palm OS apps expect to be run on a system capable of displaying Japanese text, naturally. So running them on English Palm OS results in garbled text.&lt;/p&gt;

&lt;table class=&quot;donotsort&quot;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/palmos-japanese-1-goal.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;Official Japanese: goal&quot; /&gt;&lt;/th&gt;
      &lt;th&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/palmos-japanese-2-english.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;English: garbled&quot; /&gt;&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Official Japanese: goal&lt;/td&gt;
      &lt;td&gt;English: garbled&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;solutions&quot;&gt;Solutions&lt;/h2&gt;

&lt;p&gt;There exist a number of solutions that will allow Japanese text to be displayed correctly, though each has their own pros/cons. I originally wrote about this &lt;a href=&quot;https://github.com/meepingsnesroms/Mu/issues/60&quot;&gt;in an issue on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I had to survey them all just to be able to sleep at night! 🤣&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;app&lt;/th&gt;
      &lt;th&gt;pros&lt;/th&gt;
      &lt;th&gt;cons&lt;/th&gt;
      &lt;th&gt;availability&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;http://simple-palm.com/palmware.html&quot;&gt;J-OS&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;works,&lt;br /&gt;good bundled fonts&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;http://simple-palm.com/palmware.html&quot;&gt;multiple versions for different devices&lt;/a&gt;,&lt;br /&gt;uses multiple apps to achieve goal&lt;/td&gt;
      &lt;td&gt;discontinued,&lt;br /&gt;time-limited,&lt;br /&gt;but easy to reset trial&lt;br /&gt;(delete pref: Psys)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://www.njstar.com/cms/cjk-os-for-palm&quot;&gt;CJKOS&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;works,&lt;br /&gt;OS4 (4.23) &amp;amp; &lt;br /&gt;OS5 (4.63) versions&lt;/td&gt;
      &lt;td&gt;finding good fonts,&lt;br /&gt;managing fonts,&lt;br /&gt;bad default options&lt;/td&gt;
      &lt;td&gt;discontinued,&lt;br /&gt;time-limited,&lt;br /&gt;but &lt;a href=&quot;https://palmdb.net/app/cjkos&quot;&gt;easy to serialise&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;http://www5f.biglobe.ne.jp/~T-Pilot/PalmWares/JaPon/JaPon-ReadMe.html&quot;&gt;JaPon&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;slick installer,&lt;br /&gt;great minimal UI&lt;/td&gt;
      &lt;td&gt;doesn’t localise launcher app names,&lt;br /&gt;limited fonts with trial version,&lt;br /&gt;OS5-only&lt;/td&gt;
      &lt;td&gt;supported&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;http://yomeru5.sourceforge.net&quot;&gt; Yomeru 5&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;open source&lt;/td&gt;
      &lt;td&gt;doesn’t localise launcher app names,&lt;br /&gt;default fonts are very poor&lt;/td&gt;
      &lt;td&gt;discontinued,&lt;br /&gt;time-limited&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://web.archive.org/web/20060513185903/http://www.geocities.com:80/b_palm_ug/yomeru.html&quot;&gt;Yomeru 4&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;none&lt;/td&gt;
      &lt;td&gt;OS4 version crashes for me&lt;/td&gt;
      &lt;td&gt;discontinued,&lt;br /&gt;broken&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;results&quot;&gt;Results&lt;/h2&gt;

&lt;table class=&quot;donotsort&quot;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/palmos-japanese-3-cjkos-fjis10l.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;CJKOS + FJIS10L&quot; /&gt;&lt;/th&gt;
      &lt;th&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/palmos-japanese-1-goal.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;Official Japanese: goal&quot; /&gt;&lt;/th&gt;
      &lt;th&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/palmos-japanese-4-cjkos-mplus10.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;CJKOS + Mplus10&quot; /&gt;&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;CJKOS + FJIS10L&lt;/td&gt;
      &lt;td&gt;Official Japanese: goal&lt;/td&gt;
      &lt;td&gt;CJKOS + Mplus10&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;recommendations&quot;&gt;Recommendations&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;OS5 or CLIÉ: J-OS (choose correct variant)&lt;/li&gt;
  &lt;li&gt;OS4 or when using both OS4+5: CJKOS&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;notes&quot;&gt;Notes&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;CJKOS&lt;/strong&gt;
My only comment would be these fonts are not as legible as the official Japanese font. So, you can install additional/replacement fonts: &lt;a href=&quot;http://palm.roguelife.org/cjkos/&quot;&gt;palm.roguelife.org/cjkos/&lt;/a&gt;. And uncheck both &lt;em&gt;CJKOS &amp;gt; Support CJK boldFont&lt;/em&gt; and &lt;em&gt;Enhance &amp;gt; Add Horizontal Spacing in CJK&lt;/em&gt; for better display.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;J-OS (J-Suites for CLIÉ)&lt;/strong&gt;
Install two additional fonts: &lt;a href=&quot;https://ftp.vector.co.jp/04/19/115/elisal10.zip&quot;&gt;elisa.prc&lt;/a&gt; and &lt;a href=&quot;https://web.archive.org/web/20161024062604/http://ha4.seikyou.ne.jp/home/azipon/font/p_dasa.zip&quot;&gt;dasaji-l.prc&lt;/a&gt; and convert them to J-OS format using the option in PowerFONT. You can delete choose to delete the originals after conversion. By setting these as the standard small and large fonts for lo-res any apps that run in low-resolution will look great. The bundled J-OS fonts are already great for stuff running in hi-res.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 24 Nov 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/11/24/japanese-text-support-on-english-palm-os-devices/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/11/24/japanese-text-support-on-english-palm-os-devices/</guid>
        </item>
      
    
      
        <item>
          <title>AsistantPickle desktop toy for Macintosh</title>
          <description>&lt;p&gt;AsistantPickle was a desktop toy by Thoru Yamamoto, released for Macintosh in September 2000, featuring a suite of tiny applications:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;TinyMemo&lt;/li&gt;
  &lt;li&gt;TinySketch&lt;/li&gt;
  &lt;li&gt;TinyPiano&lt;/li&gt;
  &lt;li&gt;TinyWatch&lt;/li&gt;
  &lt;li&gt;TinySchedule&lt;/li&gt;
  &lt;li&gt;TinyEmail&lt;/li&gt;
  &lt;li&gt;TinyAddress&lt;/li&gt;
  &lt;li&gt;TinyClip&lt;/li&gt;
  &lt;li&gt;TinyTimer&lt;/li&gt;
  &lt;li&gt;TinyAudioCD&lt;/li&gt;
  &lt;li&gt;TinyCalc&lt;/li&gt;
  &lt;li&gt;TinyPrinter&lt;/li&gt;
  &lt;li&gt;TinyLauncher (use the blue arrows)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It can now be downloaded at: &lt;a href=&quot;https://macintoshgarden.org/apps/asistantpickle&quot;&gt;macintoshgarden.org/apps/asistantpickle&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This copy of the previously lost app was found on Japanese Macintosh magazine &lt;em&gt;MacPeople2000 No.22 CD-ROM&lt;/em&gt; which was recently acquired for my Macintosh Magazine Media collection.&lt;/p&gt;

&lt;p&gt;An informational web site existed at &lt;a href=&quot;https://web.archive.org/web/20010203173700/http://www.eggegg.co.jp:80/tango/rbhp/pasist2/pasist.html&quot;&gt;eggegg.co.jp&lt;/a&gt; the text of which is archived. Images and additional files &lt;a href=&quot;https://web.archive.org/web/20020528060444/http://www.eggegg.co.jp:80/tango/rbhp/pasist2/data/&quot;&gt;also existed&lt;/a&gt; but they have sadly not been archived.&lt;/p&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;b&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;c&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;d&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;e&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;f&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;g&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;h&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;i&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;j&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;k&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;l&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;m&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;m&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;f&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;g&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;f&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;h&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;g&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;i&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;h&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;j&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;i&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;k&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;j&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;l&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;k&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;m&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;l&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/AsistantPickle-icon.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/AsistantPickle-icon.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/AsistantPickle-menu.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/AsistantPickle-menu.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/AsistantPickle-memo.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/AsistantPickle-memo.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/AsistantPickle-sketch.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/AsistantPickle-sketch.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/AsistantPickle-piano.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/AsistantPickle-piano.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/AsistantPickle-watch.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/AsistantPickle-watch.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/AsistantPickle-schedule.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/AsistantPickle-schedule.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/AsistantPickle-email.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/AsistantPickle-email.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/AsistantPickle-clip.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/AsistantPickle-clip.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/AsistantPickle-timer.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/AsistantPickle-timer.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/AsistantPickle-audiocd.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/AsistantPickle-audiocd.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/AsistantPickle-calc.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/AsistantPickle-calc.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/AsistantPickle-about.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/AsistantPickle-about.png&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;f&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;g&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;h&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;i&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;j&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;k&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;l&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;m&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 100%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__staticimage,
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}

.carousel__activator:nth-of-type(3):checked ~ .carousel__track {
  -webkit-transform: translateX(-200%);
          transform: translateX(-200%);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__slide:nth-of-type(3) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__controls:nth-of-type(3) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(3) {
  opacity: 1;
}

.carousel__activator:nth-of-type(4):checked ~ .carousel__track {
  -webkit-transform: translateX(-300%);
          transform: translateX(-300%);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__slide:nth-of-type(4) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__controls:nth-of-type(4) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(4) {
  opacity: 1;
}

.carousel__activator:nth-of-type(5):checked ~ .carousel__track {
  -webkit-transform: translateX(-400%);
          transform: translateX(-400%);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__slide:nth-of-type(5) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__controls:nth-of-type(5) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(5) {
  opacity: 1;
}

.carousel__activator:nth-of-type(6):checked ~ .carousel__track {
  -webkit-transform: translateX(-500%);
          transform: translateX(-500%);
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__slide:nth-of-type(6) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__controls:nth-of-type(6) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(6) {
  opacity: 1;
}

.carousel__activator:nth-of-type(7):checked ~ .carousel__track {
  -webkit-transform: translateX(-600%);
          transform: translateX(-600%);
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__slide:nth-of-type(7) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__controls:nth-of-type(7) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(7) {
  opacity: 1;
}

.carousel__activator:nth-of-type(8):checked ~ .carousel__track {
  -webkit-transform: translateX(-700%);
          transform: translateX(-700%);
}
.carousel__activator:nth-of-type(8):checked ~ .carousel__slide:nth-of-type(8) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(8):checked ~ .carousel__controls:nth-of-type(8) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(8):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(8) {
  opacity: 1;
}

.carousel__activator:nth-of-type(9):checked ~ .carousel__track {
  -webkit-transform: translateX(-800%);
          transform: translateX(-800%);
}
.carousel__activator:nth-of-type(9):checked ~ .carousel__slide:nth-of-type(9) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(9):checked ~ .carousel__controls:nth-of-type(9) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(9):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(9) {
  opacity: 1;
}

.carousel__activator:nth-of-type(10):checked ~ .carousel__track {
  -webkit-transform: translateX(-900%);
          transform: translateX(-900%);
}
.carousel__activator:nth-of-type(10):checked ~ .carousel__slide:nth-of-type(10) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(10):checked ~ .carousel__controls:nth-of-type(10) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(10):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(10) {
  opacity: 1;
}

.carousel__activator:nth-of-type(11):checked ~ .carousel__track {
  -webkit-transform: translateX(-1000%);
          transform: translateX(-1000%);
}
.carousel__activator:nth-of-type(11):checked ~ .carousel__slide:nth-of-type(11) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(11):checked ~ .carousel__controls:nth-of-type(11) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(11):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(11) {
  opacity: 1;
}

.carousel__activator:nth-of-type(12):checked ~ .carousel__track {
  -webkit-transform: translateX(-1100%);
          transform: translateX(-1100%);
}
.carousel__activator:nth-of-type(12):checked ~ .carousel__slide:nth-of-type(12) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(12):checked ~ .carousel__controls:nth-of-type(12) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(12):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(12) {
  opacity: 1;
}

.carousel__activator:nth-of-type(13):checked ~ .carousel__track {
  -webkit-transform: translateX(-1200%);
          transform: translateX(-1200%);
}
.carousel__activator:nth-of-type(13):checked ~ .carousel__slide:nth-of-type(13) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(13):checked ~ .carousel__controls:nth-of-type(13) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(13):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(13) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(3) {
  -webkit-transform: translateX(200%) translateZ(0);
          transform: translateX(200%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(4) {
  -webkit-transform: translateX(300%) translateZ(0);
          transform: translateX(300%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(5) {
  -webkit-transform: translateX(400%) translateZ(0);
          transform: translateX(400%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(6) {
  -webkit-transform: translateX(500%) translateZ(0);
          transform: translateX(500%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(7) {
  -webkit-transform: translateX(600%) translateZ(0);
          transform: translateX(600%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(8) {
  -webkit-transform: translateX(700%) translateZ(0);
          transform: translateX(700%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(9) {
  -webkit-transform: translateX(800%) translateZ(0);
          transform: translateX(800%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(10) {
  -webkit-transform: translateX(900%) translateZ(0);
          transform: translateX(900%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(11) {
  -webkit-transform: translateX(1000%) translateZ(0);
          transform: translateX(1000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(12) {
  -webkit-transform: translateX(1100%) translateZ(0);
          transform: translateX(1100%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(13) {
  -webkit-transform: translateX(1200%) translateZ(0);
          transform: translateX(1200%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(3),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(3) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(4),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(4) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(5),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(5) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(6),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(6) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(7),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(7) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(8),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(8) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(9),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(9) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(10),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(10) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(11),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(11) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(12),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(12) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(13),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(13) {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;.carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

&lt;p&gt;Thoru also created &lt;a href=&quot;http://www.vector.co.jp/magazine/pocket/spotlight/030423/sl030423114.html&quot;&gt;PalmPickle&lt;/a&gt; a similar suite of apps for PalmOS.&lt;/p&gt;

&lt;p&gt;Pickle is probably Thoru’s most well-known character. Pickle’s Book was a masterpiece of interactive media, released for Macintosh in 1994 and &lt;a href=&quot;https://apps.apple.com/gb/app/pickles-book/id794738212&quot;&gt;available for iPhone and iPad since 2014&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Note: the typo in the title (Asistant) is as it has always been.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 20 Nov 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/11/20/asistantpickle-desktop-toy-for-macintosh/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/11/20/asistantpickle-desktop-toy-for-macintosh/</guid>
        </item>
      
    
      
        <item>
          <title>Roly-Polys World Tour (Demo)</title>
          <description>&lt;lite-youtube style=&quot;aspect-ratio: 4/3;&quot; videoid=&quot;FlMzJs8Eb8Y&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;p&gt;A previously unknown/lost demo of Roly-Polys World Tour (ローリーポーリーズの世界旅行) [aka Banabana’s First Big Adventure] has been found in my Japanese Macintosh magazine CD-ROM collection. It was featured on CD-ROM MacPeople 1998 No.2 1.15 in a folder of product demos.&lt;/p&gt;

&lt;p&gt;Creator Osamu Sato is best known for cult game &lt;a href=&quot;https://en.wikipedia.org/wiki/LSD:_Dream_Emulator&quot;&gt;LSD: Dream Emulator&lt;/a&gt; released for Sony PlayStation in 1998.&lt;/p&gt;

&lt;p&gt;Thanks to both the Shockwave and Osamu Sato Discords.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 01 Nov 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/11/01/roly-polys-world-tour-demo/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/11/01/roly-polys-world-tour-demo/</guid>
        </item>
      
    
      
        <item>
          <title>Mouse-controlled Super Mario Kart clone for classic Macintosh</title>
          <description>&lt;p&gt;It doesn’t get much more Japanese Macintosh than this!&lt;/p&gt;

&lt;p&gt;There were &lt;a href=&quot;https://www.vector.co.jp/soft/mac/edu/se067380.html&quot;&gt;only&lt;/a&gt; &lt;a href=&quot;http://neconocone.cocolog-nifty.com/blog/201/index.html&quot;&gt;two&lt;/a&gt; mentions of this game on Google at the time of writing, and only one &lt;a href=&quot;http://neconocone.cocolog-nifty.com/.shared/image.html?/photos/uncategorized/2012/09/12/emo01.jpg&quot;&gt;screenshot&lt;/a&gt;. So I felt it was worthwhile documenting the game in some detail.&lt;/p&gt;

&lt;p&gt;My copy of the game, version 1.0, came on &lt;a href=&quot;http://redump.org/disc/74826/&quot;&gt;CD-ROM MacLife No. 161&lt;/a&gt;. This disc was included with the January 2002 issue of the Japanese magazine MacLife. This specific issue was released 9 months after the launch of OS X, so it’s interesting to see the magazine staff providing content - a folder labelled “Vintage”—for users of the older Mac OS, whether that was using the Classic environment of OS X or on legacy hardware.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/emora-kart.gif#pixel&quot; alt=&quot;GIF&quot; title=&quot;えもらのカート (Emora Kart)&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;hyperkart&quot;&gt;HyperKart?&lt;/h2&gt;

&lt;p&gt;えもらのカート (Emora Kart) is a racing game created in June 1994 by &lt;a href=&quot;http://www.vector.co.jp/vpack/browse/person/an008815.html&quot;&gt;OYU!-san&lt;/a&gt; (土屋 悦男). It is named after the lead character, a somewhat dinosaur-like creature called Emora, who would go on to star in further releases by the author.&lt;/p&gt;

&lt;p&gt;The game starts with a short qualifying course, which doubles as a tutorial. Finishing first on this course will unlock four further courses that are substantially bigger and more challenging. Finishing first on all courses unlocks a special course. Whilst the speed of the game is limited by the performance of the host computer you should be able to find a speed that is neither too slow nor too fast and have an enjoyable time with the game.&lt;/p&gt;

&lt;p&gt;Your character automatically accelerates and you use the mouse to influence its direction. If the mouse pointer is too far away then it will have no effect, so it’s better if you trail the mouse pointer in front of the character at a short distance—a bit like a carrot on a stick - which gives the feeling that you’re almost pulling them around the track. The player can only move in straight lines and at 45-degrees which affects possible driving lines. And just like in Super Mario Kart there are coins littered around the track and they can be collected, not only by driving over them but also by clicking on them with the mouse pointer.&lt;/p&gt;

&lt;p&gt;It’s interesting to note that this type of pointer control feels very much like a Wii game, which was a nice surprise. In particular I’m thinking of the way you guide your player in Pro Evolution Soccer, and the way you pick up things with the pointer in Super Mario Galaxy.&lt;/p&gt;

&lt;p&gt;Fastest lap times are recorded and you need to make sure you do proper laps for them to register properly - cheating and shortcuts are discouraged! Driving off-road will cause you player to slow down and it will take time for them to accelerate back up to cruising speed once they are back on the track. Hitting track side obstacles will cause you to spin out and slow down. If your player stops completely, you’ll need to click on it to get it moving.&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;1-bit monochrome graphics&lt;/li&gt;
  &lt;li&gt;Created using HyperCard&lt;/li&gt;
  &lt;li&gt;Inspired by Super Mario Kart&lt;/li&gt;
  &lt;li&gt;Mouse-controlled aiming/steering&lt;/li&gt;
  &lt;li&gt;CPU-controlled opponent&lt;/li&gt;
  &lt;li&gt;6 characters with different stats&lt;/li&gt;
  &lt;li&gt;6 tracks of varying complexity&lt;/li&gt;
  &lt;li&gt;Construction guide included&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The construction guide is really interesting addition. It’s an illustrated document that details how the game can be comprehensively modded using nothing but the game itself running inside HyperCard.&lt;/p&gt;

&lt;h2 id=&quot;where-did-this-come-from&quot;&gt;Where did this come from?&lt;/h2&gt;

&lt;p&gt;I found this game in my collection of Japanese Macintosh Magazine CD-ROMs, which at the time of writing consists of over 120 discs and almost 500,000 files. It’s a real treasure trove of old software that has many more secrets waiting to be rediscovered! You can &lt;a href=&quot;https://www.patreon.com/gingerbeardman&quot;&gt;help me preserve more lost software by joining my Patreon&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;how-can-i-play-this-game&quot;&gt;How can I play this game?&lt;/h2&gt;

&lt;p&gt;You can play the game in your web browser at &lt;a href=&quot;https://archive.org/details/emora-kart&quot;&gt;archive.org/details/emora-kart&lt;/a&gt; though be warned it runs very slowly in this emulator.&lt;/p&gt;

&lt;p&gt;Alternatively, you can &lt;a href=&quot;https://macintoshgarden.org/games/emora-kart&quot;&gt;download it&lt;/a&gt; to play on your real Macintosh or in a different emulator.&lt;/p&gt;

&lt;h2 id=&quot;shifting-perspective&quot;&gt;Shifting perspective&lt;/h2&gt;

&lt;p&gt;A sequel of sorts was made a couple of years later, in 1996. えもらのバギー (Emora Buggy) which shifted the camera to behind the player and featured simultaneous 2-player operation. Controls are now via keyboard, the window is much smaller, and the courses are shorter. The vibe is a mix of Out Run and Micro Machines and quite different to the first game.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/emora-buggy.gif#pixel&quot; alt=&quot;GIF&quot; title=&quot;えもらのバギー (Emora Buggy)&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 31 Oct 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/10/31/mouse-controlled-super-mario-kart-clone-for-classic-macintosh/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/10/31/mouse-controlled-super-mario-kart-clone-for-classic-macintosh/</guid>
        </item>
      
    
      
        <item>
          <title>HyperCard Hanafuda</title>
          <description>&lt;p&gt;&lt;em&gt;Good news, everyone!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;For over a decade I’ve wondered if there was a 1-bit Hanafuda game for Macintosh made by somebody in Japan back in the day. It turns out there is!&lt;/p&gt;

&lt;p&gt;It’s called 花札スタック (Hanafuda Stack) and was created by Kenji Chihara (千原健次氏)in 1992/3 using HyperCard. YES! ✨🎴✨&lt;/p&gt;

&lt;p&gt;I couldn’t find a single thing about this game online. My first Googlewhack!&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hypercard-hanafuda-stack.gif#pixel&quot; alt=&quot;GIF&quot; title=&quot;花札スタック (Hanafuda Stack)&quot; /&gt;&lt;/p&gt;

&lt;p&gt;According to menu system on the disc it came on, this game was the Winner of the Miyuki Oshige Award, the judges’ prize in the “1st HyperCard Stack Contest” which was sponsored by Japanese Macintosh magazine MacPower Monthly.&lt;/p&gt;

&lt;h2 id=&quot;where-did-this-come-from&quot;&gt;Where did this come from?&lt;/h2&gt;

&lt;p&gt;I found this game in my collection of Japanese Macintosh Magazine CD-ROMs, which at the time of writing consists of over 120 discs and almost 500,000 files. It’s a real treasure trove of old software that has many more secrets waiting to be rediscovered! You can &lt;a href=&quot;https://www.patreon.com/gingerbeardman&quot;&gt;help me preserve more lost software by joining my Patreon&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;how-can-i-play-this-game&quot;&gt;How can I play this game?&lt;/h2&gt;

&lt;p&gt;You can play it in your web browser right now at: &lt;a href=&quot;https://archive.org/details/hanafuda-stack&quot;&gt;archive.org/details/hanafuda-stack&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Alternatively, you can &lt;a href=&quot;https://macintoshgarden.org/games/hanafuda-stack&quot;&gt;download it&lt;/a&gt; to play on your real Macintosh or in an emulator.&lt;/p&gt;

&lt;h2 id=&quot;version-history&quot;&gt;Version history&lt;/h2&gt;

&lt;p&gt;This page refers to version 0.6. However, the DOS game HP-華時雨 (HP-Hana Shigure) from 1997 says that it reuses, with permission, the card images from version 0.8 of Hanafuda Stack.&lt;/p&gt;

&lt;h2 id=&quot;hanafuda-resources&quot;&gt;Hanafuda Resources&lt;/h2&gt;

&lt;p&gt;If you’re into Hanafuda, be sure to check out the &lt;a href=&quot;https://discord.com/invite/mKbdwy9&quot;&gt;Hanafuda Discord&lt;/a&gt; and &lt;a href=&quot;https://www.fudawiki.org/&quot;&gt;Fuda Wiki&lt;/a&gt; where a fantastic group of people from around the world are building a comprehensive resource for these traditional Japanese flower cards. There are &lt;a href=&quot;https://www.fudawiki.org/en/hanafuda/games&quot;&gt;rules for a multitude of different games&lt;/a&gt; (not just Koi-Koi), a list of over 300 &lt;a href=&quot;https://www.fudawiki.org/en/hanafuda/video-games&quot;&gt;Hanafuda video games&lt;/a&gt; and so much more. Come on!&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 31 Oct 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/10/31/hypercard-hanafuda/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/10/31/hypercard-hanafuda/</guid>
        </item>
      
    
      
        <item>
          <title>I’m preserving vintage Macintosh magazine media</title>
          <description>&lt;p&gt;For a while now I’ve been collecting CD-ROMs and Floppy Disks that came with Japanese Macintosh magazines for the sake of preservation of classic Macintosh software and games.&lt;/p&gt;

&lt;p&gt;These magazines were released before widespread adoption of the internet, when it was tricky to discover new software and even more difficult to obtain it. Buying a magazine with a disc containing hundreds or sometimes thousands of files was an easy way of getting the latest software. Of course, more than twenty years have now passed and software that was once common has all but disappeared. These magazine discs provide time capsules inside which live many long forgotten secrets.&lt;/p&gt;

&lt;p&gt;This is such an amazing treasure trove of files, containing many long lost files of both English and Japanese origin. The scatter chart shows the range of date coverage of the collection, full file listings are searchable by file/directory name, file type, creator code at &lt;a href=&quot;https://www.gingerbeardman.com/mmm/&quot;&gt;gingerbeardman.com/mmm/&lt;/a&gt;, by content at &lt;a href=&quot;https://discmaster.textfiles.com&quot;&gt;DiscMaster&lt;/a&gt;, and all files are uploaded to &lt;a href=&quot;https://archive.org/details/@gingerbeardman&quot;&gt;Internet Archive&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;archive-status-report&quot;&gt;Archive status report&lt;/h2&gt;

&lt;p&gt;The archive as it stands (updated March 2025):&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;date range: 1991–2002&lt;/li&gt;
  &lt;li&gt;total media: 500 discs&lt;/li&gt;
  &lt;li&gt;total files: 1,086,536 files&lt;/li&gt;
&lt;/ul&gt;

&lt;!--
The archive as it stands (updated July 2024):

*   date range: 1991–2002
*   total media: 461 discs
*   total files: 998,512 files
--&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/mmm-scatter.png&quot; alt=&quot;PNG&quot; title=&quot;Distribution of discs by month&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;notable-finds-so-far&quot;&gt;Notable finds so far&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/japanease&quot;&gt;JapanEase&lt;/a&gt; rolling demos of two gorgeous language learning &lt;em&gt;HyperCard&lt;/em&gt; stacks from the early 1990s (one previously lost)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/10/31/hypercard-hanafuda/&quot;&gt;Hanafuda Stack&lt;/a&gt; from 1992/3 (previously zero google search results)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/10/31/mouse-controlled-super-mario-kart-clone-for-classic-macintosh/&quot;&gt;Emora Kart&lt;/a&gt; from 1994 (previously three google search results)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/games/unyo-2&quot;&gt;Unyo! 2&lt;/a&gt; the infamous &lt;em&gt;HyperCard&lt;/em&gt; stack version of the famous UNO card game, from 1995 (previously lost)&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Tower Xmas Demo&lt;/em&gt;, a demo version of &lt;em&gt;Yoot Saito&lt;/em&gt;’s &lt;em&gt;Tower ~Christmas Disc~&lt;/em&gt; add-on from December 1995 (previously lost)&lt;/li&gt;
  &lt;li&gt;Fans of &lt;em&gt;Macromedia Shockwave&lt;/em&gt; and &lt;em&gt;Osamu Sato&lt;/em&gt; uncovered a 1997/8 &lt;a href=&quot;https://www.youtube.com/watch?v=FlMzJs8Eb8Y&quot;&gt;demo of Roly-Polys World Tour&lt;/a&gt; which is hugely exciting as the complete game remained lost to time (it has since been found, May 2023)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/pickles-pocket&quot;&gt;Pickle’s Pocket&lt;/a&gt; from 1998 is the first desktop toy and suite of tiny apps by &lt;em&gt;Thoru Yamamoto&lt;/em&gt; (previously lost with zero screen grabs online)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/maccalligraphy-sansui&quot;&gt;MacCalligraphy Sansui Demo&lt;/a&gt;, version of Japanese calligraphy tool by &lt;em&gt;Enzan-Hoshigumi&lt;/em&gt; from 1999 (previously lost) I also uncovered a promotional leaflet and demo guide from Wayback Machine&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/asistantpickle&quot;&gt;AsistantPickle&lt;/a&gt; from 2000 is a more advanced desktop toy and suite of tiny apps by &lt;em&gt;Thoru Yamamoto&lt;/em&gt; (previously lost with zero screen grabs online)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My &lt;a href=&quot;https://www.patreon.com/gingerbeardman&quot;&gt;Patreon&lt;/a&gt; enables me to buy more discs to build out the database, finding more lost gems and sharing them once again with the world. I add missing discs to &lt;em&gt;Internet Archive&lt;/em&gt; and the &lt;em&gt;redump&lt;/em&gt; project and upload individual games to various Classic Macintosh archives.&lt;/p&gt;

&lt;p&gt;Thanks for being on this journey with me!&lt;/p&gt;

&lt;h3 id=&quot;further-reading&quot;&gt;Further reading&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2022/03/31/working-with-classic-macintosh-text-encodings-in-the-age-of-unicode/&quot;&gt;Working with classic Macintosh text encodings in the age of Unicode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 30 Oct 2021 12:34:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/10/30/macintosh-magazine-media/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/10/30/macintosh-magazine-media/</guid>
        </item>
      
    
      
        <item>
          <title>T&amp;E SOFT 3D Golf Simulation Series Dokuhon (1993/04/30)</title>
          <description>&lt;p&gt;This is a Special Appendix that came with the 1993-04-30 issue of Japanese magazine Theスーパーファミコン (The Super Famicom)&lt;/p&gt;

&lt;p&gt;This guide book shows tips for all 18 holes on each the four T&amp;amp;E SOFT golf games available on SNES:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Harukanaru Augusta&lt;/li&gt;
  &lt;li&gt;Pebble Beach no Hatou&lt;/li&gt;
  &lt;li&gt;Waialae no Kiseki&lt;/li&gt;
  &lt;li&gt;Devil’s Course&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These courses were also featured in games on other platforms so the guide has much broader usefulness.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/t-e-soft-3d-golf-simulation-series-dokuhon-sfc&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/t-and-e-golf-dokuhon.jpg&quot; alt=&quot;JPG&quot; title=&quot;T&amp;amp;E SOFT 3D Golf Simulation Series Dokuhon SFC&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 30 Oct 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/10/30/t-and-e-soft-3d-golf-simulation-series-dokuhon/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/10/30/t-and-e-soft-3d-golf-simulation-series-dokuhon/</guid>
        </item>
      
    
      
        <item>
          <title>FAQ: Pebble Beach no Hatou</title>
          <description>&lt;p&gt;I wrote a video game FAQ and uploaded it to GameFAQs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/pc98/256450-pebble-beach-no-hatou/faqs&quot;&gt;www.gamefaqs.com/pc98/256450-pebble-beach-no-hatou/faqs&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 20 Sep 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/09/20/faq-pebble-beach-no-hatou/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/09/20/faq-pebble-beach-no-hatou/</guid>
        </item>
      
    
      
        <item>
          <title>Japanese stop-motion anime: Pui Pui Molcar</title>
          <description>&lt;p&gt;My favourite new TV discovery is this Japanese felt-stop-motion guinea-pig-car thing on Netflix called &lt;a href=&quot;https://twitter.com/molcar_anime&quot;&gt;Pui Pui Molcar&lt;/a&gt;. It’s brilliant. Saying any more would spoil it.&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;7Dr14FJvYmw&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;p&gt;And don’t miss the OST on your favourite streaming service:&lt;/p&gt;

&lt;h2 id=&quot;apple-music&quot;&gt;Apple Music&lt;/h2&gt;
&lt;iframe allow=&quot;autoplay *; encrypted-media *; fullscreen *&quot; frameborder=&quot;0&quot; height=&quot;450&quot; style=&quot;width:100%;overflow:hidden;background:transparent;&quot; sandbox=&quot;allow-forms allow-popups allow-same-origin allow-scripts allow-storage-access-by-user-activation allow-top-navigation-by-user-activation&quot; src=&quot;https://embed.music.apple.com/gb/album/pui-pui%E3%83%A2%E3%83%AB%E3%82%AB%E3%83%BC-sound-track-album/1571435566&quot;&gt;&lt;/iframe&gt;

&lt;h2 id=&quot;spotify&quot;&gt;Spotify&lt;/h2&gt;
&lt;iframe src=&quot;https://open.spotify.com/embed/album/74aJ8QuaOQbWWRfczIT6a7&quot; width=&quot;100%&quot; height=&quot;380&quot; allowfullscreen=&quot;&quot; allow=&quot;autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture&quot;&gt;&lt;/iframe&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 20 Sep 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/09/20/japanese-stop-motion-animation-pui-pui-molcar/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/09/20/japanese-stop-motion-animation-pui-pui-molcar/</guid>
        </item>
      
    
      
        <item>
          <title>Ace Mega Blaster controller for Sega Mega Drive</title>
          <description>&lt;p&gt;I recently did a teardown and clean of one of my Japanese Mega Drive controllers. When I received it I notices that it had some sticky residue in the inside of the the d-pad causing up and right to feel a bit sticky.&lt;/p&gt;

&lt;p&gt;The controller is called the BLASTER, sometimes MEGA BLASTER, and was released by ACE which was a sort of hardware sub-brand of the game developer &lt;a href=&quot;https://gingerbeardman.creator-spring.com/listing/sur-de-wave-back-print?product=387&quot;&gt;Sur Dé Wave&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This particular controller is one of two colours that were available for the Sega Mega Drive, though you could buy an equivalent for PC-Engine and maybe some other platforms.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Rapid fire for all three buttons (off/fast/faster)&lt;/li&gt;
  &lt;li&gt;Slow does the usual rapid pressing of the start button (off/on)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The bottom half of the shell is held together with three small Philips screws, all visible, and three clips on the bottom and sides that need to be carefully pressed to release the shell.&lt;/p&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;b&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;c&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;d&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/ace-mega-blaster-1.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/ace-mega-blaster-1.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/ace-mega-blaster-2.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/ace-mega-blaster-2.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/ace-mega-blaster-3.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/ace-mega-blaster-3.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/ace-mega-blaster-4.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/ace-mega-blaster-4.jpg&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 100%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__staticimage,
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}

.carousel__activator:nth-of-type(3):checked ~ .carousel__track {
  -webkit-transform: translateX(-200%);
          transform: translateX(-200%);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__slide:nth-of-type(3) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__controls:nth-of-type(3) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(3) {
  opacity: 1;
}

.carousel__activator:nth-of-type(4):checked ~ .carousel__track {
  -webkit-transform: translateX(-300%);
          transform: translateX(-300%);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__slide:nth-of-type(4) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__controls:nth-of-type(4) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(4) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(3) {
  -webkit-transform: translateX(200%) translateZ(0);
          transform: translateX(200%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(4) {
  -webkit-transform: translateX(300%) translateZ(0);
          transform: translateX(300%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(3),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(3) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(4),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(4) {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;.carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/ace-mega-blaster-ad.jpg&quot; alt=&quot;Print ad&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 16 Sep 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/09/16/ace-mega-blaster-controller-for-sega-mega-drive/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/09/16/ace-mega-blaster-controller-for-sega-mega-drive/</guid>
        </item>
      
    
      
        <item>
          <title>Playing old 32-bit iOS games in 2021</title>
          <description>&lt;p&gt;With the introduction of iOS 11 in 2017 Apple stopped supporting 32-bit apps on iOS. This event came to be known as the app-ocalypse with users forced to stay on iOS 10 to keep their apps or upgrade and abandon them. I seem to remember I stuck around on iOS 10 for a while but eventually succumbed to the upgrade and said good by to a bunch of stuff.&lt;/p&gt;

&lt;p&gt;At this time, I was still managing my iPhone and app updates through iTunes, with a weird ritual of downloading the latest updates to my Mac. It was useful for keeping on top of what I had installed and deleting apps I was no longer interested in. Around the same time Llamasoft were disillusioned with the App Store and pulled all of their games.&lt;/p&gt;

&lt;p&gt;Anyway, I took one or both of those things as a sign to download and backup a couple of games in particular: Llamasoft’s &lt;a href=&quot;http://www.minotaurproject.co.uk/Minotaur/minotron.php&quot;&gt;Minotron: 2112&lt;/a&gt; and &lt;a href=&quot;http://www.minotaurproject.co.uk/Minotaur/gridrunner.php&quot;&gt;Gridrunner&lt;/a&gt;, part of their &lt;a href=&quot;http://www.minotaurproject.co.uk/Minotaur/minotaurprj2.php&quot;&gt;Minotaur Project&lt;/a&gt; series of games. I bought a few more from that series but I only kept my two favourites.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/2021/03/08/two-old-llamasoft-iphone-and-ipad-games/&quot;&gt;Earlier this year&lt;/a&gt; I uploaded them to internet archive as an act of preservation. Somebody recently downloaded them and was trying to make them work on their devices, without much luck. It seemed that the apps were tied to my account and I’d have to share decrypted versions. I’d need an old device capable of running iOS 10 or older, and one susceptible to jailbreaking. I figured that would be a fun afternoon. Here’s the process I went through:&lt;/p&gt;

&lt;h2 id=&quot;restore-working-system&quot;&gt;Restore working system&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Bought a used &lt;a href=&quot;https://en.wikipedia.org/wiki/IOS_10#Supported_devices&quot;&gt;device that supports iOS 10&lt;/a&gt; (or earlier, if you prefer)&lt;/li&gt;
  &lt;li&gt;Downgraded my device to iOS 10.3.3 using &lt;a href=&quot;https://github.com/rA9stuff/LeetDown&quot;&gt;leetdown&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Installed &lt;a href=&quot;/2021/03/08/two-old-llamasoft-iphone-and-ipad-games/&quot;&gt;my two .ipa files&lt;/a&gt; using &lt;a href=&quot;https://support.apple.com/en-gb/apple-configurator&quot;&gt;Apple Configurator 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Confirmed that the games work by playing a little of each&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;jailbreaking-the-device&quot;&gt;Jailbreaking the device&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Installed &lt;a href=&quot;https://github.com/SongXiaoXi/sockH3lix/releases/latest&quot;&gt;sockH3lix&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Did jailbreak with sockH3lix (only takes a second or two!)&lt;/li&gt;
  &lt;li&gt;Noted that Cydia has been installed&lt;/li&gt;
  &lt;li&gt;Installed Clutch (took a couple of tries to find a &lt;a href=&quot;https://sharerepo.stkc.win/?repo=https://stek29.rocks/cyrepo/&quot;&gt;working repo&lt;/a&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;decrypt-the-minotron-game&quot;&gt;Decrypt the Minotron game&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Installed &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;OpenSSH&lt;/code&gt; via Cydia&lt;/li&gt;
  &lt;li&gt;Logged in over SSH from my Mac&lt;/li&gt;
  &lt;li&gt;Ran &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Clutch -b uk.co.llamasoft.minotron&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;SFTP in from my Mac and copy the decrypted .ipa to my Mac&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;video&quot;&gt;Video&lt;/h2&gt;

&lt;p&gt;I could capture the attract loop using QuickTime Player but for some reason the recording crashed whenever a sound was played.&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 4/3;&quot; videoid=&quot;RZSjR4dIykU&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;p&gt;And &lt;a href=&quot;https://www.instagram.com/p/CTwautQAXUp/&quot;&gt;here’s an Instagram video of me playing the main game&lt;/a&gt;, albeit quite badly is I’m only using one hand!&lt;/p&gt;

&lt;h2 id=&quot;gridrunner&quot;&gt;Gridrunner&lt;/h2&gt;

&lt;p&gt;For some reason Clutch and other decrypting apps don’t work for me with Gridrunner. Since then, &lt;a href=&quot;https://archive.org/details/gridrunner-ios&quot;&gt;somebody was kind enough to create a decrypted version and upload it to Internet Archive&lt;/a&gt;.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 13 Sep 2021 23:59:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/09/13/playing-old-32-bit-ios-games-in-2021/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/09/13/playing-old-32-bit-ios-games-in-2021/</guid>
        </item>
      
    
      
        <item>
          <title>Macintosh Story: Sweet or Sour Apple?</title>
          <description>&lt;p&gt;Macintosh Story “Sweet or Sour Apple?” (マッキントッシュ物語 リンゴ甘いか酸っぱいか) is a comic strip drawn by Hitoshi Tanaka for the 1993-11-25 “MacBoy” issue of Japanese men’s lifestyle magazine POPEYE (widely known as the “Magazine for City Boys”).&lt;/p&gt;

&lt;p&gt;The comic strip details the history of Apple and the Macintosh from 1970 through to 1993, and features a whole lot of history over its four pages:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;reality-distorting Steve Jobs&lt;/li&gt;
  &lt;li&gt;angry Steve Wozniak&lt;/li&gt;
  &lt;li&gt;a strangely ginger-bearded Doug Engelbart&lt;/li&gt;
  &lt;li&gt;Xerox PARC&lt;/li&gt;
  &lt;li&gt;Dynabook-dreaming Alan Kay&lt;/li&gt;
  &lt;li&gt;Bill Gates in shorts&lt;/li&gt;
  &lt;li&gt;a strangely blonde Bill Atkinson&lt;/li&gt;
  &lt;li&gt;Pepsi-sipping John Sculley&lt;/li&gt;
  &lt;li&gt;hand-drawn renditions of the 1984 ad, MacPaint and HyperCard&lt;/li&gt;
  &lt;li&gt;the break-up&lt;/li&gt;
  &lt;li&gt;NeXT&lt;/li&gt;
  &lt;li&gt;Knowledge Navigator&lt;/li&gt;
  &lt;li&gt;DynaMac (a Macintosh 512K marketed by Canon in Japan)&lt;/li&gt;
  &lt;li&gt;successors to the Macintosh&lt;/li&gt;
  &lt;li&gt;Apple prototypes&lt;/li&gt;
  &lt;li&gt;Newton&lt;/li&gt;
  &lt;li&gt;and more&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I scanned these images today from my copy of the original magazine.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.patreon.com/gingerbeardman&quot;&gt;Thanks to my patrons&lt;/a&gt; for making this possible. More patrons means more cool stuff can be preserved/released.&lt;/p&gt;

&lt;p&gt;High-resolution scans are available to my patrons.&lt;/p&gt;

&lt;p&gt;Hope you enjoy it.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/macintosh-story-1.jpg&quot; alt=&quot;1 of 4&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/macintosh-story-2.jpg&quot; alt=&quot;2 of 4&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/macintosh-story-3.jpg&quot; alt=&quot;3 of 4&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/macintosh-story-4.jpg&quot; alt=&quot;4 of 4&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 07 Sep 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/09/07/macintosh-story/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/09/07/macintosh-story/</guid>
        </item>
      
    
      
        <item>
          <title>A movie made using MSX2 computers: The Flying Luna Clipper</title>
          <description>&lt;p&gt;The Flying Luna Clipper (フライング ルナ クリッパー) is an animated movie produced by Kan Tsuzurahara at Sony and directed by &lt;a href=&quot;https://www.instagram.com/ikko_nikko_kekko/&quot;&gt;Ikko Ohno&lt;/a&gt;. It was released—only in Japan—on 8mm, Betamax, VHS, and Laser Disc, in &lt;a href=&quot;https://www.lddb.com/laserdisc/36908/88LS-85004/Flying-Luna-Clipper&quot;&gt;October 1987&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It’s a quite surreal but relaxing 55 minutes, and well worth a viewing. If you plan to watch it, I’d suggest to do so now before reading any possible spoilers below. Come back later to read the rest of this post.&lt;/p&gt;

&lt;hr /&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 4/3;&quot; videoid=&quot;P2TNZyCWA-Q&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;hr /&gt;

&lt;p&gt;In 1987 Ikko Ohno was an illustrator and contributor at MSX Magazine and was well respected and well connected in the Japanese creative and computer industries. The artwork featured in the movie is typical of Ikko’s style at the time, visible in his frequent MSX Magazine column &lt;a href=&quot;https://archive.org/details/MSXmagazine198703S/page/n95/mode/2up&quot;&gt;Ikko’s Theatre&lt;/a&gt;. Indeed, various artwork from The Flying Luna Clipper was featured in MSX Magazine as teasers, features and advertorials around the time of the movie’s release. It was announced after Ikko’s Theatre had been running for 6 months, as a 5th Anniversary Project of MSX Magazine, and was dedicated to Ichiro “お探り” Furutachi&lt;!-- perhaps a reference to the 1984 anime [Kakkun Cafe](https://ja.wikipedia.org/wiki/カッくんカフェ) --&gt;.&lt;/p&gt;

&lt;p&gt;To me the piece feels like an extended intro sequence to a non-existent video game, a strange visual novel on automatic playback, a surreal slideshow, or &lt;a href=&quot;https://en.wiktionary.org/wiki/megademo&quot;&gt;megademo&lt;/a&gt;. There are several intermissions that can leave the viewer confused, unsettled, pondering the meaning of life itself. I feel that is quite apt as The Flying Luna Clipper was planned to celebrate the birth of Ikko’s first child, with work commencing shortly after he learned of the pregnancy. The movie was completed one month before the birth. Ikko told me: “I love this work like my child”.&lt;/p&gt;

&lt;p&gt;The movie was created, incredibly, using only an MSX2. All artwork was drawn on that type of computer, and post production completed with additional video editing equipment attached to such a computer. I won’t go into the plot specifically, but it features a travelling snowman, performing bananas, the titular Flying Luna Clipper, and plenty of sun, sea and surf. It’s one of those things that could only come from &lt;a href=&quot;https://en.wikipedia.org/wiki/Japanese_asset_price_bubble&quot;&gt;bubble era&lt;/a&gt; Japan, and as the final credits rolled I felt incredibly lucky to have been able to witness it.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/flying-luna-clipper-storyboard.jpg&quot; alt=&quot;The Flying Luna Clipper, exclusive storyboard photo&quot; title=&quot; The Flying Luna Clipper, exclusive storyboard photo&quot; /&gt;&lt;/p&gt;

&lt;p&gt;In 2004 an elaborate effort was made to promote a sequel to The Flying Luna Clipper, with an article in &lt;a href=&quot;https://archive.org/details/MSXMAGAZINE2&quot;&gt;MSX Magazine Permanent Revival 2&lt;/a&gt; that laid out the story alongside still images and included a set of calendar postcard, all curiously missing the month of October. Production of the follow-up movie never went any further due to issues with the feasibility of using the ancient MSX graphics tools. Though Ikko has since told me he dreams that someday Luna Clipper will fly again！&lt;/p&gt;

&lt;p&gt;In 2015 Matt Repetski and Matt Hawkins at &lt;a href=&quot;https://medium.com/attract-mode/about&quot;&gt;Attract Mode&lt;/a&gt; were kind enough to share a copy of the movie that had been ripped from Laser Disc by an anonymous source. Thanks to all involved for preserving this wonderful work for all time. And, of course, arigatou gozaimasu Ohno-san! 🙌&lt;/p&gt;

&lt;h3 id=&quot;watch-the-movie&quot;&gt;Watch the movie&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=P2TNZyCWA-Q&quot;&gt;Watch at YouTube&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/the-flying-luna-clipper-complete&quot;&gt;Download at Internet Archive&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;b&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;c&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;d&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;e&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;f&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;g&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;g&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;f&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;g&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;f&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/flying-luna-clipper-msx-magazine-1987-05.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/flying-luna-clipper-msx-magazine-1987-05.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/flying-luna-clipper-msx-magazine-1987-06.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/flying-luna-clipper-msx-magazine-1987-06.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/flying-luna-clipper-msx-magazine-1987-07.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/flying-luna-clipper-msx-magazine-1987-07.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/flying-luna-clipper-msx-magazine-1987-08.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/flying-luna-clipper-msx-magazine-1987-08.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/flying-luna-clipper-msx-magazine-1987-09.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/flying-luna-clipper-msx-magazine-1987-09.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/flying-luna-clipper-msx-magazine-1987-10.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/flying-luna-clipper-msx-magazine-1987-10.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/flying-luna-clipper-msx-magazine-1987-11.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/flying-luna-clipper-msx-magazine-1987-11.jpg&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;f&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;g&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 128%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__staticimage,
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}

.carousel__activator:nth-of-type(3):checked ~ .carousel__track {
  -webkit-transform: translateX(-200%);
          transform: translateX(-200%);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__slide:nth-of-type(3) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__controls:nth-of-type(3) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(3) {
  opacity: 1;
}

.carousel__activator:nth-of-type(4):checked ~ .carousel__track {
  -webkit-transform: translateX(-300%);
          transform: translateX(-300%);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__slide:nth-of-type(4) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__controls:nth-of-type(4) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(4) {
  opacity: 1;
}

.carousel__activator:nth-of-type(5):checked ~ .carousel__track {
  -webkit-transform: translateX(-400%);
          transform: translateX(-400%);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__slide:nth-of-type(5) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__controls:nth-of-type(5) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(5) {
  opacity: 1;
}

.carousel__activator:nth-of-type(6):checked ~ .carousel__track {
  -webkit-transform: translateX(-500%);
          transform: translateX(-500%);
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__slide:nth-of-type(6) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__controls:nth-of-type(6) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(6) {
  opacity: 1;
}

.carousel__activator:nth-of-type(7):checked ~ .carousel__track {
  -webkit-transform: translateX(-600%);
          transform: translateX(-600%);
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__slide:nth-of-type(7) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__controls:nth-of-type(7) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(7) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(3) {
  -webkit-transform: translateX(200%) translateZ(0);
          transform: translateX(200%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(4) {
  -webkit-transform: translateX(300%) translateZ(0);
          transform: translateX(300%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(5) {
  -webkit-transform: translateX(400%) translateZ(0);
          transform: translateX(400%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(6) {
  -webkit-transform: translateX(500%) translateZ(0);
          transform: translateX(500%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(7) {
  -webkit-transform: translateX(600%) translateZ(0);
          transform: translateX(600%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(3),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(3) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(4),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(4) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(5),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(5) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(6),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(6) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(7),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(7) {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;.carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

&lt;h3 id=&quot;further-reading&quot;&gt;Further reading&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;1987-05: &lt;a href=&quot;https://archive.org/details/MSXmagazine198705S/page/n105/mode/2up&quot;&gt;Announcement in MSX Magazine, detailing the 5th Anniversary project&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;1987-06: &lt;a href=&quot;https://archive.org/details/MSXmagazine198706S/page/n85/mode/2up&quot;&gt;Preview in MSX Magazine, detailing Polynesia destination&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;1987-07: &lt;a href=&quot;https://archive.org/details/MSXmagazine198707S/page/n139/mode/2up&quot;&gt;Preview in MSX Magazine, detailing the starring characters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;1987-08: &lt;a href=&quot;https://archive.org/details/MSXmagazine198708S/page/n137/mode/2up&quot;&gt;Preview in MSX Magazine, detailing the chapter locations&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;1987-09: &lt;a href=&quot;https://issuu.com/msxblog/docs/msx_magazine_1987_09/134&quot;&gt;Preview in MSX Magazine, detailing related merch&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;1987-10: &lt;a href=&quot;https://archive.org/details/MSXmagazine198710S/page/n145/mode/2up&quot;&gt;Feature in MSX Magazine, showing storyboard timeline of all chapters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;1987-11: &lt;a href=&quot;https://archive.org/details/MSXmagazine198711S/page/n137/mode/2up&quot;&gt;Promotiomal feature in MSX Magazine, stating the movie is for sale&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2012-05: &lt;a href=&quot;https://ja6nqo.blog.ss-blog.jp/search/?keyword=luna&quot;&gt;Blog posts by producer Kan Tsuzurahara about the enduring nature of the movie&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2015-12: &lt;a href=&quot;https://blog.attractmo.de/post/134913165050/review-the-flying-luna-clipper-part-1-my-love&quot;&gt;Parts 1&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://blog.attractmo.de/post/134976251900/review-the-flying-luna-clipper-part-2-ladies&quot;&gt;2 of a review at the Attract Mode blog&lt;/a&gt;, the first Western mention I’ve found&lt;/li&gt;
  &lt;li&gt;2017-03: &lt;a href=&quot;https://twitter.com/VtheWanderer/status/846784959859830784&quot;&gt;Twitter thread by Victor Navarro Remesal&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2017-04: &lt;a href=&quot;https://web.archive.org/web/20170401011626/http://abcdefghijklmn-pqrstuvwxyz.com/the-flying-luna-clipper-el-cine-chiptune-que-pudo-ser/&quot;&gt;Article by Victor Navarro Remesal&lt;/a&gt; in Spanish&lt;/li&gt;
  &lt;li&gt;2019-01: &lt;a href=&quot;https://twitter.com/gingerbeardman/status/1080504185106386946&quot;&gt;My discovery of The Flying Luna Clipper&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2020-08: &lt;a href=&quot;https://medium.com/attract-mode/dream-flight-interpreted-the-possible-flying-luna-clipper-origin-11c1ee5ebe1f&quot;&gt;Follow-up article at Attract Mode blog&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2020-08: &lt;a href=&quot;https://www.wonderville.nyc/events/luna-clipper&quot;&gt;The Flying Luna Clipper is screened at Wonderville, NYC, and on Twitch&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://letterboxd.com/film/the-flying-luna-clipper/&quot;&gt;Reviews on Letterboxd&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 03 Sep 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/09/03/the-flying-luna-clipper/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/09/03/the-flying-luna-clipper/</guid>
        </item>
      
    
      
        <item>
          <title>Aquaplus P/ECE: Game Reviews Vol. 2</title>
          <description>&lt;p&gt;If you’ve not yet read &lt;a href=&quot;/2021/08/19/aquaplus-piece-vs-panic-playdate/&quot;&gt;my review of the P/ECE&lt;/a&gt; hardware comparing it to Playdate, now is the time to catch up! It includes my 6 favourite games on the system.&lt;/p&gt;

&lt;p&gt;Below I cover more of the interesting and unique games that I enjoy on the system.&lt;/p&gt;

&lt;hr /&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;44SKkmpJqlA&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;h3 id=&quot;delta-star-by-black-ftz&quot;&gt;Delta Star, by BLACK FTZ&lt;/h3&gt;

&lt;p&gt;A new game for P/ECE in 2021! Well, technically it’s a re-release but I’ll take what I can get after all these years. Especially for only &lt;a href=&quot;https://booth.pm/en/items/3223530&quot;&gt;500¥ at BOOTH&lt;/a&gt; (pixiv account required).&lt;/p&gt;

&lt;p&gt;At first glance you might think this is a simple Asteroids clone, but you’d be wrong. Whilst it does share much with that concept it adds in enough of its own ideas to make it unique.&lt;/p&gt;

&lt;p&gt;First, the big differences: you can pass through enemies if you’re careful, and you can shoot down enemy bullets. That’s right, these aren’t lifeless hunks of rock floating around in space! There are multiple types of enemies some of which will fire either normal bullets or homing missiles. Your ship has forwards and reverse thrust, forward dash (a predictable and much more enjoyable equivalent of Asteroid’s teleport), sideways strafing (which I should use more often), and emergency braking. You can fire multiple shots at once, as expected, but they’re limited in number and have a short range of roughly a quarter of the width of the screen.&lt;/p&gt;

&lt;p&gt;There are 52 levels, with 4 boss encounters, and continue points. Gameplay is against the clock with remaining time being converted into points. Extra lives are awarded at key point milestones and greeted with one of many great sound effects. The initial levels are easy and can be completed quickly, almost like a tutorial, and after that difficulty ramps up quite nicely. As an example, enemy bullets aren’t seen until level 9. And I adore for the motivational messages at the end of each level that let you know how you did “don’t mind, nobody is perfect”.&lt;/p&gt;

&lt;p&gt;The game features smooth 60fps vector graphics with sub-pixel accuracy, plus some nice effects using multiple lines of different shades of grey. And amazing chip tunes. Listen to the high score entry tune at the end of the above video!&lt;/p&gt;

&lt;p&gt;I’ve been playing the free “Gratuitous Version” which has only one boss type and lacks music, so I’m excited to spend more time with this fleshed out version now that it’s available once again. Awesome work by BLACK FTZ team, what a lovely surprise for 2021.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/piece-speed-barricade.gif#piece&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;speed-barricade-by-kenta-cho-aba-games&quot;&gt;Speed Barricade, by Kenta Cho (ABA Games)&lt;/h3&gt;

&lt;p&gt;This was previously shown in my blog post comparing the P/ECE with Playdate, but I neglected to mention one cool thing…&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;9h_m_Yz-PUc&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;h3 id=&quot;speed-barricade-live-by-kenta-cho-aba-games&quot;&gt;Speed Barricade LIVE, by Kenta Cho (ABA Games)&lt;/h3&gt;

&lt;p&gt;If you play with your P/ECE connected using USB cable to your Windows PC you can use a special client app, &lt;a href=&quot;http://www.asahi-net.or.jp/\~cs8k-cyu/piece/sbrg.html&quot;&gt;Speed Barricade LIVE&lt;/a&gt;, to show real-time 3D footage of your game in full colour at high resolution! A true spectator sport.&lt;/p&gt;

&lt;hr /&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;szQSOMhH0uQ&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;h3 id=&quot;majang-project-by-hiroshi-makabe&quot;&gt;Majang Project, by Hiroshi Makabe&lt;/h3&gt;

&lt;p&gt;This game came out of the first of two P/ECE Hand Books written by &lt;a href=&quot;https://twitter.com/sinpen&quot;&gt;Hiroshi Makabe&lt;/a&gt;. The development of the game was outlined in the book and on an &lt;a href=&quot;https://web.archive.org/web/20021215064406/http://www.jc2.co.jp/p/contents2.html&quot;&gt;accompanying website&lt;/a&gt;. It has impressive greyscale graphics, nice animation, wonderful chip tune music, sampled voice clips, win/lose scenes, and hosts a nice VS CPU game of Mahjong. And that’s Riichi/Japanese Mahjong, not the Solitaire type you might associate with the name. I’d say this game is definitely of retail-release quality and was a good showcase for what is possible on the platform.&lt;/p&gt;

&lt;hr /&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;YLcG_G5s8R8&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;h3 id=&quot;alert-アラート-by-jumpei-isshiki-hello-world-project&quot;&gt;ALERT (アラート), by Jumpei Isshiki (HELLO WORLD PROJECT)&lt;/h3&gt;

&lt;p&gt;A nice little barrage shmup with procedurally generated boss fights! Prize winner in the &lt;a href=&quot;https://www.coremagazine.co.jp/megastore/piece/result.html&quot;&gt;Megastore Cup official contest&lt;/a&gt;. There’s a lot going on here, not just the bullets but also the gameplay logic and music. Remaining enemy bullets turn to points which offers an engaging risk/reward mechanic. Three game modes, Easy, Hard, and ENDLESS. Let’s go for the high score!&lt;/p&gt;

&lt;p&gt;I read that there was once a &lt;a href=&quot;https://mao.5ch.net/test/read.cgi/linux/1262615084&quot;&gt;port of this game&lt;/a&gt; to Dingux-based devices, and found it on a &lt;a href=&quot;https://www.axfc.net/u/976888.zip&quot;&gt;download site&lt;/a&gt; (I guessed “alert” was the password, how lucky!).&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/piece-delivery-bird.gif#piece&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;delivery-bird-by-hafupon&quot;&gt;Delivery Bird, by Hafupon&lt;/h3&gt;

&lt;p&gt;This is a Sokoban that shifts the view to side-on rather than top-down, which allows for height and gravity to enter into the puzzles. As with many of the best games on P/ECE, it was entered into one of the official game development &lt;a href=&quot;https://aquaplus.jp/piece/contest/index.html&quot;&gt;contests run by Aquaplus&lt;/a&gt;. This game won a runner-up prize.&lt;/p&gt;

&lt;p&gt;There’s also a &lt;a href=&quot;https://www.vector.co.jp/magazine/softnews/050608/n0506085.html&quot;&gt;Windows version&lt;/a&gt; that expands on the concept.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/piece-norito.gif#piece&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;norito-by-gorujii&quot;&gt;Norito, by Gorujii&lt;/h3&gt;

&lt;p&gt;Another runner-up in the &lt;a href=&quot;https://www.coremagazine.co.jp/megastore/piece/result.html&quot;&gt;Megastore Cup official contest&lt;/a&gt;. A great looking game featuring fluid wire-frame 3D with dithering for distant objects. It’s a strange sort of shmup that makes me think of both Jumping Flash and Battlezone. Controls take some getting used to but after that score attack is quite a challenge. The game system and stages are intertwined with a story, and things like the “one-shot” fortune-telling add extra flair.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;In the next volume of reviews I’ll cover the official bundled games in addition to some homebrew ports of popular games from other systems.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 28 Aug 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/08/28/aquaplus-piece-game-reviews-vol-2/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/08/28/aquaplus-piece-game-reviews-vol-2/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: Teaser Artwork</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-artwork.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I commissioned the talented &lt;a href=&quot;https://www.instagram.com/vxclhd/&quot;&gt;@vxclhd&lt;/a&gt; to create a clay-style diorama of Daily Driver!&lt;/p&gt;

&lt;p&gt;There are a few things in this scene that I’ve not yet shown in game footage. Imagine this is a box shot teaser in a game magazine, while you wait for the Playdate and its game to release.&lt;/p&gt;

&lt;p&gt;“Please understand”, as Satoru Iwata used to say.&lt;/p&gt;

&lt;blockquote class=&quot;twitter-tweet&quot; data-conversation=&quot;none&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;It&amp;#39;s inspired by a style of plasticine modelling I often see in old 1980s Japanese computer/games promotional art. &lt;br /&gt;&lt;br /&gt;Examples that come to mind: box art on some of the Fujitsu FM-Towns Free Software Collection and select covers of MSX•FAN, but there are too many to mention. &lt;a href=&quot;https://t.co/aAdSEVL4yA&quot;&gt;pic.twitter.com/aAdSEVL4yA&lt;/a&gt;&lt;/p&gt;&amp;mdash; Matt Sephton🎴 (@gingerbeardman) &lt;a href=&quot;https://twitter.com/gingerbeardman/status/1428772256239476740?ref_src=twsrc%5Etfw&quot;&gt;August 20, 2021&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 23 Aug 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/08/23/daily-driver-teaser-artwork/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/08/23/daily-driver-teaser-artwork/</guid>
        </item>
      
    
      
        <item>
          <title>Aquaplus P/ECE (vs Panic Playdate)</title>
          <description>&lt;p&gt;The P/ECE was a Japan-only handheld/mobile gaming console released in late-2001. It was created by Aquaplus, a company better known for visual novels, so it carries with it a certain oddball charm. After 20 years I find it heart-warming to see that the &lt;a href=&quot;https://aquaplus.jp/piece/&quot;&gt;official website&lt;/a&gt; is still online!&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/piece.jpg&quot; alt=&quot;Aquaplus P/ECE&quot; title=&quot; Aquaplus P/ECE, launch edition&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;what-is-it&quot;&gt;What is it?&lt;/h2&gt;

&lt;p&gt;An &lt;a href=&quot;https://game.watch.impress.co.jp/docs/20011203/piece.htm&quot;&gt;early preview of the P/ECE&lt;/a&gt; referred to the P/ECE as a portable game console though the water was somewhat muddied by the fact that one of the built in apps, Picket, was a PIM (Personal Information Manager). This means it was often referred to as a PDA. It has a d-pad, start and select buttons, and you can play games on it—that makes it a console in my eyes. But a console where each unit could be used as a development device by connecting it to a desktop computer.&lt;/p&gt;

&lt;p&gt;Looking back at the P/ECE it was ahead of its time in many ways. To get a feel for what was going on when it came out:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;the most popular phone manufacturers were Nokia and Sony Ericsson&lt;/li&gt;
  &lt;li&gt;the battle between the PlayStation 2 and Dreamcast was ongoing&lt;/li&gt;
  &lt;li&gt;ICO was the latest PlayStation 2 game&lt;/li&gt;
  &lt;li&gt;Rez was the latest Dreamcast game&lt;/li&gt;
  &lt;li&gt;the iPod and Game Boy Advance had both just launched&lt;/li&gt;
  &lt;li&gt;YouTube and Facebook had yet to be created&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…it really was a different era!&lt;/p&gt;

&lt;h2 id=&quot;discovery&quot;&gt;Discovery&lt;/h2&gt;

&lt;p&gt;I learned of the P/ECE several years ago when looking at the output of one of my favourite video game developers, Kuniake “kuni” Watanabe. He’s probably best known for &lt;a href=&quot;https://www.siliconera.com/panekit-the-infinitive-crafting-toy-case-game-finally-sees-profits-after-13-years/&quot;&gt;Panekit&lt;/a&gt;, and open-world sandbox game on PlayStation. Though my favourite of his games is &lt;a href=&quot;/2013/06/29/maboshi/&quot;&gt;MaBoShi&lt;/a&gt; on Wii (and DS via download play) which is a razor sharp focussed set of three games that interact with each other in an innovative (and &lt;a href=&quot;https://www.google.com/patents/US20090093314&quot;&gt;patented&lt;/a&gt;) way. I’d go so far as to say that &lt;a href=&quot;https://www.youtube.com/watch?v=MiVbBi0jdhw&quot;&gt;Circle mode in MaBoShi&lt;/a&gt; is my favourite game concept of all time.&lt;/p&gt;

&lt;p&gt;The same preview article I mentioned above also says “in terms of specs, (P/ECE) comes above the PocketStation and below the Game Boy” though I think that’s selling the P/ECE a little short. The CPU was quite fast and efficient for its time, and the fact that it had no specific graphics hardware meant that people had to get creative and optimise. Some of the results, seen below, would have been very tricky or impossible to achieve on the original Game Boy.&lt;/p&gt;

&lt;p&gt;Over its short term of popularity the P/ECE platform had a vibrant homebrew scene and received ports or demakes of everything from Mitchell Corp’s masterpiece Polarium, through arcade gems like Flipull (aka Plotting), to console classics Panel de Pon (aka Tetris Attack) and more besides. It was home to proper Japanese RPGs and small arcade games and the number of games stretch into triple figures.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;selected-games-by-kuniake-watanabe&quot;&gt;Selected Games by Kuniake Watanabe&lt;/h2&gt;

&lt;p&gt;Anyway! During his indie days, Kuni developed for a &lt;a href=&quot;https://k-u.hatenadiary.org/entries/1970/01/01&quot;&gt;range of platforms&lt;/a&gt; and in a variety of languages and wrote several games for the P/ECE. Here are my favourites:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/piece-spout.gif#piece&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;spout&quot;&gt;spout&lt;/h3&gt;

&lt;p&gt;A lunar lander style game where your thrust can destroy the scenery. Your task is to get as high as possible, though that is much easier said than done as the scenery becomes gradually more complex and time is always ticking away.&lt;/p&gt;

&lt;p&gt;This is perhaps the most famous P/ECE game as it was released with source code for an SDL version and received ports to GP32 and related platforms. There’s a &lt;a href=&quot;http://microtrip-game.com/spout/&quot;&gt;modern remake for iOS and Android&lt;/a&gt; by a different developer, though it keeps the same title.&lt;/p&gt;

&lt;p&gt;edit: &lt;a href=&quot;https://twitter.com/k_u/status/1429654871532212224?s=21&quot;&gt;kuni’s game design notes&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/piece-fencer.gif#piece&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;fencer&quot;&gt;fencer&lt;/h3&gt;

&lt;p&gt;A snake type game where your head has momentum and your tail length depends on your speed, allowing fine and fluid movement. The goal is to avoid bombs and use your tail as a barrier that will destroy them. Chaining together multiple explosions is the key to high scores.&lt;/p&gt;

&lt;p&gt;There was an official updated version for iOS, titled fencell, but it’s not longer on the App Store due to Apple removing all 32-bit games back in 2017. Yet the 20-year-old P/ECE version is &lt;a href=&quot;http://www.susami.co.jp/kuni/junk/junk.htm&quot;&gt;still available for download&lt;/a&gt;. There’s a lesson for us all.&lt;/p&gt;

&lt;p&gt;edit: &lt;a href=&quot;https://twitter.com/k_u/status/1429654873574830080?s=21&quot;&gt;kuni’s game design notes&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/piece-interground.gif#piece&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;interground&quot;&gt;interground&lt;/h3&gt;

&lt;p&gt;In this game you must use a rotating stick to push sand around in an attempt to bury the little people running on top of it. If the stick touches a moving enemy or you run out of time that means game over.&lt;/p&gt;

&lt;p&gt;edit: &lt;a href=&quot;https://twitter.com/k_u/status/1429654875755802631?s=21&quot;&gt;kuni’s game design notes&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;selected-games-by-kenta-cho-aba-games&quot;&gt;Selected Games by Kenta Cho (ABA Games)&lt;/h2&gt;

&lt;p&gt;Whilst digging into P/ECE forgotten history, I also found several old games by Kenta Cho (then: Saba, now: ABA Games) who even today continues to &lt;a href=&quot;http://www.asahi-net.or.jp/\~cs8k-cyu/browser.html&quot;&gt;crank out brilliant little games&lt;/a&gt; at an inspiring rate.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/piece-barrage-reactor.gif#piece&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;barrage-reactor&quot;&gt;Barrage Reactor&lt;/h3&gt;

&lt;p&gt;A twin-stick shmup played with a d-pad and two buttons! The d-pad moves your ship around and the buttons rotate your aim as you fire automatically. Waves of enemies appear and a surprisingly tactical game ensues.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/piece-speed-barricade.gif#piece&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;speed-barricade&quot;&gt;Speed Barricade&lt;/h3&gt;

&lt;p&gt;A 3D “Tron” light cycles game where the aim is to stay alive for as long as possible whilst outwitting an increasing number of computer controlled players. Quick reflexes are definitely needed for this one!&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/piece-re.gif#piece&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;re-w32badtrance&quot;&gt;Re: W32/Badtrance&lt;/h3&gt;

&lt;p&gt;A 3D demake of Rez where the Microsoft Outlook(!) icon produces waves of enemies that need to be shot down as efficiently as possible by locking on to multiple enemies before firing your missiles. With the strap line “Gentlemen, open your Outlook. Go to Cyberterrorism.” maybe Kenta Cho was sick of email back in 2001?&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;If there’s enough interest I’ll feature more P/ECE games in a future blog post. Let me know on the comments link at the bottom of the page.&lt;/p&gt;

&lt;h2 id=&quot;20-years-later&quot;&gt;20 years later&lt;/h2&gt;

&lt;p&gt;Here we are in 2021 and Panic’s Playdate will soon be shipping. By now I’m sure you’ve spotted several similarities between the P/ECE and Playdate. The main one being that both devices offer immediate, unfettered access to developers wishing to make their own games, and those games can be side-loaded.&lt;/p&gt;

&lt;p&gt;Of course, 20 years is a long time in technology so the Playdate has many improvements compared to what the P/ECE achieved in 2001. More storage, faster CPU, better connectivity, plus a bigger and better screen. Playdate offers cross-platform development using either C or Lua and, and you won’t need a device to develop for the platform. In contrast, P/ECE offered development only for Windows and only in C, plus you needed a device to test your code. A &lt;a href=&quot;https://github.com/autch/piemu&quot;&gt;homebrew emulator&lt;/a&gt; was eventually released, which is what I’ve used for the screen recordings shown earlier.&lt;/p&gt;

&lt;p&gt;Oh, and both devices have names that make web searches a bit tricky. 😅&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/piece-vs-playdate.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;specifications-comparison&quot;&gt;Specifications Comparison&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt; &lt;/th&gt;
      &lt;th&gt;Playdate&lt;/th&gt;
      &lt;th&gt;P/ECE&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Manufacturer&lt;/td&gt;
      &lt;td&gt;Panic&lt;/td&gt;
      &lt;td&gt;Aquaplus&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Release date&lt;/td&gt;
      &lt;td&gt;2021&lt;/td&gt;
      &lt;td&gt;2001&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Battery (active)&lt;/td&gt;
      &lt;td&gt;8h&lt;/td&gt;
      &lt;td&gt;2h&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Battery (standby)&lt;/td&gt;
      &lt;td&gt;2w&lt;/td&gt;
      &lt;td&gt;1w&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Battery (type)&lt;/td&gt;
      &lt;td&gt;Rechargeable internal battery&lt;/td&gt;
      &lt;td&gt;1×AA&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;CPU (type)&lt;/td&gt;
      &lt;td&gt;STMicroelectronics STM32F746&lt;br /&gt;(ARM Cortex-M7F)&lt;/td&gt;
      &lt;td&gt;EPSON S1C33209&lt;br /&gt;(32-bit RISC)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;CPU (speed)&lt;/td&gt;
      &lt;td&gt;180 MHz&lt;/td&gt;
      &lt;td&gt;24 Mhz&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Storage (RAM)&lt;/td&gt;
      &lt;td&gt;16MB&lt;/td&gt;
      &lt;td&gt;256KB&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Storage (Flash)&lt;/td&gt;
      &lt;td&gt;4GB (3.9GB usable)&lt;/td&gt;
      &lt;td&gt;512KB (348KB usable)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Device (colour)&lt;/td&gt;
      &lt;td&gt;Yellow&lt;/td&gt;
      &lt;td&gt;Silver&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Device (dimensions)&lt;/td&gt;
      &lt;td&gt;76×74×9mm&lt;/td&gt;
      &lt;td&gt;101×65×17mm&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Device (inputs)&lt;/td&gt;
      &lt;td&gt;D-pad, A, B, Menu, Sleep, Accelerometer, Crank&lt;/td&gt;
      &lt;td&gt;D-pad, A, B, Start, Select&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Device (weight)&lt;/td&gt;
      &lt;td&gt;85g&lt;/td&gt;
      &lt;td&gt;92g&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Data connection (wired)&lt;/td&gt;
      &lt;td&gt;USB-C to A&lt;/td&gt;
      &lt;td&gt;USB-B to A&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Data connection (wireless)&lt;/td&gt;
      &lt;td&gt;Wi-Fi &amp;amp; Bluetooth&lt;/td&gt;
      &lt;td&gt;Infrared (IR)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Sound (type)&lt;/td&gt;
      &lt;td&gt;Software synthesis, Digital audio&lt;/td&gt;
      &lt;td&gt;Software synthesis&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Sound (speaker)&lt;/td&gt;
      &lt;td&gt;Mono&lt;/td&gt;
      &lt;td&gt;Mono&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Sound (headphone)&lt;/td&gt;
      &lt;td&gt;Stereo&lt;/td&gt;
      &lt;td&gt;Mono&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Display (technology)&lt;/td&gt;
      &lt;td&gt;Sharp Memory LCD&lt;/td&gt;
      &lt;td&gt;FSTN LCD&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Display (size)&lt;/td&gt;
      &lt;td&gt;59×35mm&lt;br /&gt;(2.7” diagonal)&lt;/td&gt;
      &lt;td&gt;45×31mm&lt;br /&gt;(2.15” diagonal)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Display (resolution)&lt;/td&gt;
      &lt;td&gt;400×240&lt;/td&gt;
      &lt;td&gt;128×88&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Display (colours)&lt;/td&gt;
      &lt;td&gt;2 (1-bit)&lt;/td&gt;
      &lt;td&gt;4 (2-bit greyscale)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Display (rendering)&lt;/td&gt;
      &lt;td&gt;Software&lt;/td&gt;
      &lt;td&gt;Software&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Software (bundled)&lt;/td&gt;
      &lt;td&gt;24&lt;/td&gt;
      &lt;td&gt;6&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Software (SDK)&lt;/td&gt;
      &lt;td&gt;C &amp;amp; Lua&lt;/td&gt;
      &lt;td&gt;C&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Launch price&lt;/td&gt;
      &lt;td&gt;$179 (¥19000)&lt;/td&gt;
      &lt;td&gt;¥11000 ($100)&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;related-posts&quot;&gt;Related Posts&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/08/28/aquaplus-piece-game-reviews-vol-2/&quot;&gt;Aquaplus P/ECE: Game Reviews Vol. 2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 19 Aug 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/08/19/aquaplus-piece-vs-panic-playdate/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/08/19/aquaplus-piece-vs-panic-playdate/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: How big is a sprite sheet?</title>
          <description>&lt;p&gt;Since the early days of the project I’ve been generating the car sprites by rotating the 3D model 360 degrees in a sequence of 32 steps. It works well and I hadn’t given it much thought. Until over on the &lt;a href=&quot;https://discord.gg/zFKagQ2&quot;&gt;unofficial Playdate Discord server&lt;/a&gt; user Jono showed of a hot-dog trick rendered using 64 steps which looked super smooth! This got me thinking about increasing the number of rotation steps used in my workflow for Daily Driver.&lt;/p&gt;

&lt;h2 id=&quot;code-changes&quot;&gt;Code changes&lt;/h2&gt;

&lt;p&gt;I had to do a bit of code changing as I had used the value &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;32&lt;/code&gt;, or the angular equivalent of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;11.25&lt;/code&gt; (degrees), in a few places throughout my code. Once I’d changed those to refer to a single variable I was set. I can now run the game with sprites of any number of steps.&lt;/p&gt;

&lt;h2 id=&quot;rendering-changes&quot;&gt;Rendering changes&lt;/h2&gt;

&lt;p&gt;Similar changes were also needed in my rendering workflow, moving any hardcoded steps or angle values into a variable. After replacing hard-coded magic numbers with variables, I spent way too long figuring out why angles were being rounded down to the nearest integer. Eventually I realised that in shell scripts the calculation &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$( 360/64 )&lt;/code&gt; gives an integer result of 5, whereas  &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$( 360.0/64 )&lt;/code&gt; gives the more accurate floating point result of 5.625.&lt;/p&gt;

&lt;p&gt;Interestingly, I also needed to increase my filename pattern from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%03d&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%04d&lt;/code&gt; as there are now thousands of images being processed.&lt;/p&gt;

&lt;h2 id=&quot;how-high&quot;&gt;How high?&lt;/h2&gt;

&lt;p&gt;After making the necessary changes to my workflow it is very easy to render a new set of sprites. But what number of steps to use? My immediate thought was to simply double it to 64, which is higher than the frame rate I’m using and the result was definitely smoother.&lt;/p&gt;

&lt;p&gt;After this &lt;a href=&quot;https://twitter.com/mrgan&quot;&gt;Neven Mrgan&lt;/a&gt; asked if I’d explored whether there was a performance limit or upper boundary? I hadn’t but it sounded like a fun thing to explore.&lt;/p&gt;

&lt;p&gt;But why go higher? Well, even if we have more frames of animation that than refresh rate, we can still gain in terms of accuracy. The more steps there are the more discrete angles we can show the car pointing. That was good enough reason for me to try it out.&lt;/p&gt;

&lt;p&gt;I spent some time exporting a sprite at 32, 64, 90, 128, 180, 256, 360-steps to compare not only the smoothness of the animation but also other related implications.&lt;/p&gt;

&lt;h2 id=&quot;selected-results&quot;&gt;Selected results&lt;/h2&gt;

&lt;p&gt;Most modern browsers are well-behaved enough to only play an Animated GIF if it is on the page. So you’ll probably need to force reload the page (hold shift and click reload) to synchronise one or more of the below animations.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-rotation-steps-32.gif#playdate&quot; alt=&quot;32 rotation steps&quot; title=&quot;Above: 32 rotation steps. After I&apos;ve mentioned looking for the &amp;quot;judder&amp;quot; you won&apos;t be able to unsee it&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-rotation-steps-64.gif#playdate&quot; alt=&quot;64 rotation steps&quot; title=&quot;Above: Even with twice as many rotation steps there&apos;s still a slight judder&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-rotation-steps-90.gif#playdate&quot; alt=&quot;90 rotation steps&quot; title=&quot;Above: 90 rotation steps give us one sprite every 4 degrees, judder becomes less noticable&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-rotation-steps-180.gif#playdate&quot; alt=&quot;180 rotation steps&quot; title=&quot;Above: 180 rotation steps give us one sprite every 2 degrees, judder is even less noticable&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-rotation-steps-360.gif#playdate&quot; alt=&quot;360 rotation steps&quot; title=&quot;Above: 360 rotation steps give us one sprite for every degree, as good as it gets&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;stats&quot;&gt;Stats&lt;/h2&gt;

&lt;div class=&quot;table-wrapper&quot;&gt;
  &lt;table&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th&gt;steps #&lt;/th&gt;
        &lt;th&gt;render time Secs&lt;/th&gt;
        &lt;th&gt;frames #&lt;/th&gt;
        &lt;th&gt;width PX&lt;/th&gt;
        &lt;th&gt;pixels W×H&lt;/th&gt;
        &lt;th&gt;png KB&lt;/th&gt;
        &lt;th&gt;pdt KB&lt;/th&gt;
        &lt;th&gt;ram Bytes&lt;/th&gt;
        &lt;th&gt;ram MB&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;32&lt;/td&gt;
        &lt;td&gt;30s&lt;/td&gt;
        &lt;td&gt;704&lt;/td&gt;
        &lt;td&gt;1216&lt;/td&gt;
        &lt;td&gt;1016576&lt;/td&gt;
        &lt;td&gt;48&lt;/td&gt;
        &lt;td&gt;39&lt;/td&gt;
        &lt;td&gt;147404&lt;/td&gt;
        &lt;td&gt;0.15&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;64&lt;/td&gt;
        &lt;td&gt;59s&lt;/td&gt;
        &lt;td&gt;1408&lt;/td&gt;
        &lt;td&gt;2432&lt;/td&gt;
        &lt;td&gt;2033152&lt;/td&gt;
        &lt;td&gt;64&lt;/td&gt;
        &lt;td&gt;78&lt;/td&gt;
        &lt;td&gt;294807&lt;/td&gt;
        &lt;td&gt;0.29&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;90&lt;/td&gt;
        &lt;td&gt;82s&lt;/td&gt;
        &lt;td&gt;1980&lt;/td&gt;
        &lt;td&gt;3420&lt;/td&gt;
        &lt;td&gt;2859120&lt;/td&gt;
        &lt;td&gt;111&lt;/td&gt;
        &lt;td&gt;107&lt;/td&gt;
        &lt;td&gt;414572&lt;/td&gt;
        &lt;td&gt;0.41&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;128&lt;/td&gt;
        &lt;td&gt;114s&lt;/td&gt;
        &lt;td&gt;2816&lt;/td&gt;
        &lt;td&gt;4864&lt;/td&gt;
        &lt;td&gt;4066304&lt;/td&gt;
        &lt;td&gt;143&lt;/td&gt;
        &lt;td&gt;140&lt;/td&gt;
        &lt;td&gt;589614&lt;/td&gt;
        &lt;td&gt;0.59&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;180&lt;/td&gt;
        &lt;td&gt;159s&lt;/td&gt;
        &lt;td&gt;3960&lt;/td&gt;
        &lt;td&gt;6840&lt;/td&gt;
        &lt;td&gt;5718240&lt;/td&gt;
        &lt;td&gt;174&lt;/td&gt;
        &lt;td&gt;188&lt;/td&gt;
        &lt;td&gt;829145&lt;/td&gt;
        &lt;td&gt;0.83&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;256&lt;/td&gt;
        &lt;td&gt;192s&lt;/td&gt;
        &lt;td&gt;5632&lt;/td&gt;
        &lt;td&gt;9728&lt;/td&gt;
        &lt;td&gt;8132608&lt;/td&gt;
        &lt;td&gt;209&lt;/td&gt;
        &lt;td&gt;227&lt;/td&gt;
        &lt;td&gt;1179228&lt;/td&gt;
        &lt;td&gt;1.18&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;360&lt;/td&gt;
        &lt;td&gt;285s&lt;/td&gt;
        &lt;td&gt;7920&lt;/td&gt;
        &lt;td&gt;13680&lt;/td&gt;
        &lt;td&gt;11436480&lt;/td&gt;
        &lt;td&gt;240&lt;/td&gt;
        &lt;td&gt;264&lt;/td&gt;
        &lt;td&gt;1658290&lt;/td&gt;
        &lt;td&gt;1.66&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;

&lt;/div&gt;

&lt;h2 id=&quot;charts&quot;&gt;Charts&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-rotation-steps-charts.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;implications&quot;&gt;Implications&lt;/h2&gt;

&lt;p&gt;The increase from 32-steps to 360-steps is echoed by an increase of around a factor of ten across each of rendering time, number of frames and memory usage.&lt;/p&gt;

&lt;p&gt;In the above table we can see that related stats increase pretty much linearly, with a slight downward trend for file sizes and a slight upward trend for everything else.&lt;/p&gt;

&lt;p&gt;The increased smoothness is great, and very easy to notice. The benefits of the increased smoothness becomes less noticeable with each increase in step count. However, it’s important to remember there are other implications:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Rendering time&lt;/li&gt;
  &lt;li&gt;File size&lt;/li&gt;
  &lt;li&gt;Memory usage&lt;/li&gt;
  &lt;li&gt;Performance in-game&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;rendering-time&quot;&gt;Rendering time&lt;/h3&gt;
&lt;p&gt;This increases from what I would call a quick 30 seconds per render at 32-steps, to an extremely slow 284 seconds (4m45s) at 360-steps. For a full set of renders it’s not as easy as multiplying that number, there is some overhead that goes with it. This means a real world increase from ~20 minutes to multiple hours, which could be a problem. Cars aren’t generally re-rendered very frequently but when I do render them I do it many times as I make minor tweaks. So, at this point all numbers of steps are on the table but with a preference for those with shorter rendering times.&lt;/p&gt;

&lt;h3 id=&quot;file-size&quot;&gt;File size&lt;/h3&gt;
&lt;p&gt;Playdate’s compiled image format is very similar in file size to an optimised PNG. The file size increases by slightly more than double as the number of steps is doubled. Even the largest size at 360-steps is only 264KB (0.26MB) which seems OK in the grand scheme of things. All numbers of steps are on the table.&lt;/p&gt;

&lt;h3 id=&quot;memory-usage&quot;&gt;Memory usage&lt;/h3&gt;
&lt;p&gt;As we can see by the table below, memory usage is quite optimised on Playdate. The system is clever enough to trim transparent areas from cells of sprite sheets and store the offset of the image instead of the complete raw bitmap data. For this example sprite memory usage is roughly &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;(W×H÷8)*1.16&lt;/code&gt; rather than the expected &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;(W×H÷8)*2.0&lt;/code&gt;. The car sprite is my largest occupier of memory. Only one is loaded at a time and even at 360-steps it fits comfortably in the Playdate’s 16MB RAM. All numbers of steps are on the table.&lt;/p&gt;

&lt;h3 id=&quot;performance-in-game&quot;&gt;Performance in-game&lt;/h3&gt;
&lt;p&gt;I’m targeting a refresh rate of 60fps on the device, so it’s important for me to check that any changes to rendering don’t have an adverse effect on performance. At 32-steps the car sprite was changed roughly every second update, with 64-steps and higher the car sprite will be changed every update. Looking at performance in broad terms, there does seem to be a small hit when using the large numbers of steps. It doesn’t prevent me hitting 60fps, but it does leave me less time to do other things I have planned.&lt;/p&gt;

&lt;h2 id=&quot;final-choice&quot;&gt;Final choice?&lt;/h2&gt;
&lt;p&gt;If you’ve read this far you’re probably wanting to know my choice. How many steps did I choose? Well, the jury is out. This is the sort of thing I’ll have to live with for a while before I settle on a choice.&lt;/p&gt;

&lt;p&gt;I’ll probably end up going somewhere in the middle with a choice that gives increased smoothness and accuracy, renders fairly quickly and doesn’t affect performance in-game.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 07 Aug 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/08/07/how-big-is-a-sprite-sheet/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/08/07/how-big-is-a-sprite-sheet/</guid>
        </item>
      
    
      
        <item>
          <title>Playdate 1-bit illustration postmortem</title>
          <description>&lt;p&gt;Yesterday saw the opening of pre-orders for &lt;a href=&quot;https://play.date&quot;&gt;Playdate&lt;/a&gt;, a new handheld gaming device that I’m developing some games for. To celebrate the occasion I drew an illustration in 1-bit with dither patterns using Macintosh System 7.&lt;/p&gt;

&lt;p&gt;This kind of style is most associated with HyperCard, which provides a bunch of great drawing tools and modes, and can be seen in many period pieces of interactive media, animations, art and video games.&lt;/p&gt;

&lt;p&gt;I’ve been revisiting the artwork of &lt;a href=&quot;https://archive.org/search.php?query=creator%3A%22Thoru+Yamamoto%22&amp;amp;sort=titleSorter&quot;&gt;Thoru Yamamoto&lt;/a&gt; recently, which I think influenced the style of this piece.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Toolbox&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My tool of choice on System 7 is &lt;a href=&quot;/2021/04/25/mixing-external-tools-across-deneba-software/&quot;&gt;Deneba artWORKS&lt;/a&gt; because it supports multiple layers, a ton of external tools (plugins), and has a good workflow for vector and pixels. Plus, I use it on &lt;a href=&quot;/2021/04/17/turning-an-ipad-pro-into-the-ultimate-classic-macintosh/&quot;&gt;iPad Pro with Apple Pencil&lt;/a&gt; which makes the whole experience an absolute pleasure.&lt;/p&gt;

&lt;p&gt;Some established Macintosh artists have questioned both my use of modern technology and my drawing techniques. Hopefully this post will give a little more insight into how I go about things.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/playdate-during.jpg&quot; alt=&quot;Using Deneba artWORKS on iPad Pro&quot; title=&quot;Deneba artWORKS in Macintosh System 7 running on iPad Pro&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;playdate&quot;&gt;Playdate&lt;/h3&gt;

&lt;p&gt;I first drew the body of the Playdate using Rounded Rectangles for the perimeter, screen, crank, d-pad, speaker grille and using Ovals for the buttons and corner screws. This was all done by eye, no measuring.&lt;/p&gt;

&lt;p&gt;Afterwards I grouped all those shapes and used the Point Rotate external tool to rotate the group by an arbitrary amount until it looked like a fun enough jaunty angle.&lt;/p&gt;

&lt;p&gt;Next, in the Layers Manager I set the shape layer to be greyed out and created a new layer to do some drawing. I used the Paintbrush tool with small circular brush to draw over the shapes by hand, erasing any mistakes and redrawing some sections of lines until I was happy.&lt;/p&gt;

&lt;h3 id=&quot;colouring&quot;&gt;Colouring&lt;/h3&gt;

&lt;p&gt;Given the nature of 1-bit there is no concept of colours only patterns of black and white to simulate different shades of grey. I could have drawn in colour and had the system convert to dither patterns, but I want to have manual control over the shades.&lt;/p&gt;

&lt;p&gt;I first picked the dither pattern for the main “yellow” body and then picked the paler, more sparse, dither patterns for the steel crank handle, drop shadows and background. Fills were applied to closed areas using the Paint Can (flood fill) tool.&lt;/p&gt;

&lt;h3 id=&quot;details&quot;&gt;Details&lt;/h3&gt;

&lt;p&gt;I used the Paintbrush and Pencil tools to add in some details like the dots on the buttons and my hand-drawn version of the Playdate logo. The shadow was drawn freehand using the Paintbrush tool with a larger circular brush size. The background pattern is a simple sparse dither pattern applied using the Paint Can tool.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/playdate-before@2x.png&quot; alt=&quot;Just the Playdate&quot; title=&quot;Just the Playdate looking a little bemused&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;party-up&quot;&gt;Party Up!&lt;/h2&gt;

&lt;p&gt;For pre-order day I thought it would be fun to add an extra layer to the illustration making it more celebratory. I had the idea to replicate the 🥳 emoji (Face with Party Horn and Party Hat) with the Playdate I’d already drawn.&lt;/p&gt;

&lt;h3 id=&quot;horn&quot;&gt;Horn&lt;/h3&gt;

&lt;p&gt;This was drawn using a combination of freehand Brush tool and filled vector Polygons. Some extra shading is done using the Brush tool and a sparse dither pattern. I must have drawn a handful of different style horns, settling on the one that looked least like Playdate was smoking!&lt;/p&gt;

&lt;h3 id=&quot;hat&quot;&gt;Hat&lt;/h3&gt;

&lt;p&gt;This was drawn as a vector path using the Polygon tool, and filled with a dithered pattern using the Gradient Fill tool. The frilly stuff on top of the hat is a handful of Arcs drawn in various directions, always starting from the tip.&lt;/p&gt;

&lt;h3 id=&quot;confetti&quot;&gt;Confetti&lt;/h3&gt;

&lt;p&gt;For the confetti I didn’t want to draw each one by hand, and I wanted them to be vectors rather than pixels so they remained as editable as possible. I found that drawing very short curved strokes using the Pressure Pen tool produced shapes that looked a lot like tiny squares of paper bent at some 3D angle. Using this tool without any pressure means it performs as a dynamic, vector calligraphic pen. A nice little trick!&lt;/p&gt;

&lt;p&gt;Afterwards I applied one of the many standard fill patterns to each piece of confetti to give them a bit of individual flavour. Any confetti overlaying the Playdate body was duplicated, made white, and offset by a pixel or two to help make it stand out from the body. You can see this most clearly on the coil shape at the right side of the Playdate screen.&lt;/p&gt;

&lt;h3 id=&quot;jazz&quot;&gt;Jazz&lt;/h3&gt;

&lt;p&gt;The extra geometric shapes in amongst the confetti are my attempt at bringing a bit of 1980s Memphis Group design aesthetic to the illustration. I use a variety of different external tools for this: Spiral (length 2), Fractals (default wiggle and density), Coil and Resistor. The later two tools are meant for drawing electrical circuits! The moral of the story: know your tools and use them!&lt;/p&gt;

&lt;h3 id=&quot;positioning&quot;&gt;Positioning&lt;/h3&gt;

&lt;p&gt;After adding all the confetti and jazz, I adjusted the positions and sizes of many of the objects to produce what I thought was the most pleasing distribution. The benefits of all of these objects being vectors becomes clear at this point!&lt;/p&gt;

&lt;h3 id=&quot;motion&quot;&gt;Motion&lt;/h3&gt;

&lt;p&gt;I used the Arc tool to add motion lines to the party horn and crank. Lastly I added some straight lines to imply that the light on the power button is flashing.&lt;/p&gt;

&lt;h2 id=&quot;pixel-or-vector&quot;&gt;Pixel or Vector?&lt;/h2&gt;

&lt;p&gt;Looking at the objects that make up the drawing, I’d say that the split is around 75% vector to 25% pixel, which is the same across most of my drawings.&lt;/p&gt;

&lt;p&gt;Pixels make up large freeform areas, filled vector shapes make up large defined areas. Small objects that will remain static use pixels, and those that I think will need to be moved or resized use vectors.&lt;/p&gt;

&lt;p&gt;I tend to draw on the base layer with pixels and then use higher layers as rough groups for sets of vector shapes. For example, the confetti was all drawn on one layer.&lt;/p&gt;

&lt;h2 id=&quot;post-processing&quot;&gt;Post-processing&lt;/h2&gt;

&lt;p&gt;I saved out the image as a GIF (another external tool provides this capability) and loaded it into DeBabelizer, or sometimes Photoshop 3.0. Here I resized using simple sampling to 990px square from the original size of 330px square.&lt;/p&gt;

&lt;p&gt;Finally, I copied the file to BasiliskII emulator File Sharing drive at which point it became accessible in Files in iPadOS, and from here I sent it to my iPhone via AirDrop, after which I used the Twitter app to add the image to a tweet and hit send!&lt;/p&gt;

&lt;p&gt;Job done.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/playdate-after@2x.png&quot; alt=&quot;Celebrate good times!&quot; title=&quot;🥳 Playdate with Party Horn and Party Hat&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;keyboard-craving&quot;&gt;Keyboard craving&lt;/h2&gt;

&lt;p&gt;I drew this late at night and was too lazy to go and find my Bluetooth keyboard. Next time I’ll definitely make the effort to find it. That way I can use my spare hand do keyboard shortcuts and to nudge positions using the cursor keys. I should really add cursor keys to the emulator’s custom keyboard.&lt;/p&gt;

&lt;p&gt;Let me know your thoughts on Twitter using the comments link below.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 30 Jul 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/07/30/playdate-1-bit-illustration-postmortem/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/07/30/playdate-1-bit-illustration-postmortem/</guid>
        </item>
      
    
      
        <item>
          <title>The catch with iTunes Match and Apple Music</title>
          <description>&lt;p&gt;Last week I briefly entertained buying a MiniDisc bookshelf system, before I came to my senses. These days all my music playback happens digitally so, as much as a MiniDisc system would look cool and fill me with warmth and light, I know I would never use it.&lt;/p&gt;

&lt;p&gt;I play most music through the Music app on my Mac or iPhone, new releases through Apple Music and old stuff from my own rips. When I got my first iPod I ripped hundreds, if not thousands, of my own physical CDs using iTunes (version 2, according to some old files I’ve just looked at!) and they’ve lived on my computer ever since. Yes, I feel like a digital dinosaur.&lt;/p&gt;

&lt;p&gt;Apple introduced iTunes Match in 2011 and year or so later I signed up for the yearly subscription to enable me to sync my music library to the cloud and be able to play my collection from other devices than my Mac. And when Apple Music was introduced in 2015 I subscribed so I could more easily access both new music releases and their entire library that is far larger than my own collection. And that brings us to the present.&lt;/p&gt;

&lt;p&gt;So! Where where we? Ah, yes, I was chatting to a friend—lamenting MiniDisc and explaining how I access my music in the year 2021. I was about to send a link to explain iTunes Match and there on the page I noticed &lt;a href=&quot;https://support.apple.com/en-us/HT204146&quot;&gt;a pullout mentioning Apple Music&lt;/a&gt; (emphasis mine):&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;If you have an Apple Music membership, you get all of the benefits of iTunes Match&lt;/strong&gt;, plus access to the entire Apple Music catalog. You can also get a Family Membership to share the catalog with your family members. Learn more about joining Apple Music.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hang on a minute!? If this is true, then why have I been subscribing to iTunes Match for the last 6 years? And how many other people are in the same boat?&lt;/p&gt;

&lt;p&gt;Indeed, all the common reasons for why you would need iTunes Match, such as DRM-free music or the ability to sync bootlegs, are possible in Apple Music in addition to iTunes Match.&lt;/p&gt;

&lt;p&gt;I dug a little further and, finally, hidden behind a popup that is only revealed if you click on the &lt;a href=&quot;https://support.apple.com/en-gb/guide/music/musa3dd5209/mac&quot;&gt;dotted underlined iTunes Match keyword&lt;/a&gt;, was the reason iTunes Match still exists (emphasis mine):&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;If you subscribe to Apple Music, you don’t need to subscribe to iTunes Match&lt;/strong&gt; unless you still need to access your music on Apple TV (2nd or 3rd generation).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Pretty certain, then!&lt;/p&gt;

&lt;p&gt;So where does this leave me? Well, my iTunes Match was set to renew at the end of this month so I simply cancelled it. Lesson learned, I guess.&lt;/p&gt;

&lt;p&gt;But I am wondering if I can get a refund for the years I’ve been paying for a service that I am not using? I chatted with Apple Support through Messages and over the phone, but was told that they cannot refund anything purchased more than 60 days ago. “Computer says no”. iTunes Match is an annual subscription so it’s unlikely you’ll get a full refund, and that’s before we start thinking about the previous handful of years that have gone by. However, I have heard that &lt;a href=&quot;https://twitter.com/thisguise/status/1416802253416108043&quot;&gt;Apple have given pro-rata refunds&lt;/a&gt; for iTunes Match subscriptions that have more time remaining.&lt;/p&gt;

&lt;p&gt;I’ve checked my emails and there’s never been any advice from Apple that iTunes Match has been superseded by Apple Music. The only warnings you find that imply you probably don’t want both are in the support documents linked above. I find that very curious.&lt;/p&gt;

&lt;p&gt;Finally, I’m left wondering why Apple didn’t automatically cancel, or roll-up, iTunes Match subscriptions for people who took out subscriptions to Apple Music, like they do with Apple Music/Arcade/TV+/News/etc subscriptions when you sign up for a Apple One subscription. I don’t suppose we’ll ever get an answer to that one.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 22 Jul 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/07/22/the-catch-with-itunes-match-and-apple-music/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/07/22/the-catch-with-itunes-match-and-apple-music/</guid>
        </item>
      
    
      
        <item>
          <title>Kururin Paradise: Translation Guide, Save &amp; Credits</title>
          <description>&lt;p&gt;Kururin Paradise is the Japan-only sequel to Kuru Kuru Kururin.&lt;/p&gt;

&lt;p&gt;To encourage people to revisit this masterpiece of a game I’ve put together a Translation Guide that should help people navigate the menu and understand what the game offers.&lt;/p&gt;

&lt;p&gt;I’ve also uploaded one of my Game Saves which has all mini-games and magic-tricks unlocked.&lt;/p&gt;

&lt;p&gt;A full set of credits from the staff roll were also submitted to GameFAQs.&lt;/p&gt;

&lt;h2 id=&quot;translation-guide&quot;&gt;Translation Guide&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/gba/582341-kururin-paradise/faqs/79375&quot;&gt;gamefaqs.gamespot.com/gba/582341-kururin-paradise/faqs/79375&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;save&quot;&gt;Save&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/gba/582341-kururin-paradise/saves&quot;&gt;gamefaqs.gamespot.com/gba/582341-kururin-paradise/saves&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/gba/582341-kururin-paradise/credit&quot;&gt;gamefaqs.gamespot.com/gba/582341-kururin-paradise/credit&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 20 Jul 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/07/20/kururin-paradise-translation-guide-save-and-credits/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/07/20/kururin-paradise-translation-guide-save-and-credits/</guid>
        </item>
      
    
      
        <item>
          <title>FAQ: Kururin Paradise</title>
          <description>&lt;p&gt;I wrote a video game FAQ and uploaded it to GameFAQs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/gba/582341-kururin-paradise/faqs&quot;&gt;www.gamefaqs.com/gba/582341-kururin-paradise/faqs&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 16 Jul 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/07/16/faq-kururin-paradise/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/07/16/faq-kururin-paradise/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: To GIF and Back</title>
          <description>&lt;p&gt;When rendering my vehicles I generate a single PNG containing all frames. Playdate SDK calls these image tables, or more specifically matrix image tables. You could also call them sprite-sheets, with the one qualification that every sprite has the same dimensions.&lt;/p&gt;

&lt;p&gt;Given that these are plain old images they can be viewed easily. Showing a grid on top of the image makes the layout obvious. You can edit the image as a whole easily enough, but what if you want to adjust the size of every cell? Then we have a problem.&lt;/p&gt;

&lt;p&gt;There are a few apps that can load image tables, asking for the cell size during loading. My favourite such app is &lt;a href=&quot;https://www.piskelapp.com&quot;&gt;Piskel&lt;/a&gt; which has good options for import, editing, and export.&lt;/p&gt;

&lt;p&gt;However there is another type of image that consists of multiple frames of the same dimensions: the Animated GIF. There are far more apps that can deal with this format, such as Acorn or Adobe Photoshop.&lt;/p&gt;

&lt;h2 id=&quot;problem&quot;&gt;Problem&lt;/h2&gt;

&lt;p&gt;How can we convert a matrix image table to Animated GIF, and back again?&lt;/p&gt;

&lt;h2 id=&quot;thinking&quot;&gt;Thinking&lt;/h2&gt;

&lt;p&gt;We could use Piskel, but its GUI isn’t the most straightforward so using it twice at separate points in the conversion process gets old fast.&lt;/p&gt;

&lt;p&gt;So I had the idea of writing a couple of small shell scripts that leverage imagemagick and can be run from my Makefile, the command-line, macOS context menu, or all of the above.&lt;/p&gt;

&lt;h2 id=&quot;solution&quot;&gt;Solution&lt;/h2&gt;

&lt;p&gt;Below are both scripts, be sure to grab the Gist versions as they have error checking and “help” usage display.&lt;/p&gt;

&lt;h3 id=&quot;convert-image-table-to-animated-gif&quot;&gt;Convert image table to Animated GIF&lt;/h3&gt;

&lt;noscript&gt;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/b85367a8e6b3d139d9c85f49e146af38&quot;&gt;View the source code as a Gist&lt;/a&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;script src=&quot;https://gist.github.com/gingerbeardman/b85367a8e6b3d139d9c85f49e146af38.js&quot;&gt;&lt;/script&gt;

&lt;h3 id=&quot;convert-animated-gif-to-image-table&quot;&gt;Convert Animated GIF to image table&lt;/h3&gt;

&lt;noscript&gt;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/15a8e1e72745848190c0e7d583ca24e1&quot;&gt;View the source code as a Gist&lt;/a&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;script src=&quot;https://gist.github.com/gingerbeardman/15a8e1e72745848190c0e7d583ca24e1.js&quot;&gt;&lt;/script&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 14 Jul 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/07/14/image-table-animated-gif/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/07/14/image-table-animated-gif/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: Teaser Trailer</title>
          <description>&lt;p&gt;To celebrate today’s Playdate update video here is a Daily Driver teaser trailer. Yay!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-teaser-trailer.gif#playdate&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 08 Jun 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/06/08/teaser-trailer/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/06/08/teaser-trailer/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: Channelling RGB into 1-bit</title>
          <description>&lt;p&gt;After successfully splitting out dark and light elements of the sprites and rendering them in a HDR style, I figured: why stop there? Maybe I could squeeze another colour into the render - some specific shade of grey - that I could treat in a different way to introduce dithered areas to the sprite.&lt;/p&gt;

&lt;p&gt;This came together very quickly but it resulted in my Makefile, yet again, becoming too complicated. So I decided to rethink my approach.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-rgb-1bit.gif&quot; alt=&quot;GIF&quot; title=&quot;Dither layer: specifying areas that should have a dither pattern applied, here the rear grille&quot; /&gt;&lt;/p&gt;

&lt;p&gt;If only there was a way to encode information about three different colours in a single bitmap image. Hang on a minute, there already is: RGB!&lt;/p&gt;

&lt;h2 id=&quot;channels&quot;&gt;Channels&lt;/h2&gt;

&lt;p&gt;So my new idea was to use red, green and blue as the colours for my render, then split the image into those colour channels and process each individually to get separate light, dark and dithered elements.&lt;/p&gt;

&lt;p&gt;Using imagemagick it is easy to separate a single channel from an image:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;magick render.png -channel G -separate green.png
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;From this simple start things quickly become more complex. I always find building imagemagick commands a very time consuming process. Indeed, it took me a long time to arrive at a workflow that was just right. But I think of it as time well-spent as it will result in much quicker and easier iterations when designing vehicles.&lt;/p&gt;

&lt;p&gt;Overall, I did a few more tricks:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;threshold convert the channels to 1-bit colour&lt;/li&gt;
  &lt;li&gt;apply a dither pattern to the green channel&lt;/li&gt;
  &lt;li&gt;composite select layers back together as the final image&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the process worked a treat!&lt;/p&gt;

&lt;p&gt;The resulting workflow takes half as long to execute as my previous workflow, with all vehicles rendering in ~8 minutes compared to ~16 minutes before that.&lt;/p&gt;

&lt;p&gt;Here are some example hi-res images showing the journey from initial render to final composite:&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-rgb-1bit-1-render.png&quot; alt=&quot;PNG&quot; title=&quot;Render, 8-bit colour&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-rgb-1bit-2-red.png&quot; alt=&quot;PNG&quot; title=&quot;Red channel, inverted, 1-bit colour&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-rgb-1bit-3-green.png&quot; alt=&quot;PNG&quot; title=&quot;Green channel, 1-bit colour&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-rgb-1bit-4-blue.png&quot; alt=&quot;PNG&quot; title=&quot;Blue channel, 1-bit colour&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-rgb-1bit-5-alpha.png&quot; alt=&quot;PNG&quot; title=&quot;Alpha channel, 1-bit colour&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-rgb-1bit-6-dither.png&quot; alt=&quot;PNG&quot; title=&quot;Green channel with Dither pattern applied&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-rgb-1bit-7-composite.png&quot; alt=&quot;PNG&quot; title=&quot;Final composite, 1-bit colour&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;elsewhere&quot;&gt;Elsewhere&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;2021-06-06—&lt;a href=&quot;https://news.ycombinator.com/item?id=27409371&quot;&gt;Hacker News&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 05 Jun 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/06/05/channelling-rgb-into-1bit/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/06/05/channelling-rgb-into-1bit/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: Pseudo-HDR</title>
          <description>&lt;p&gt;I love OpenSCAD “the programmer’s solid 3D CAD modeller”, despite its idiosyncrasies. One of the quirks that causes me most pain is the lack of controls for scene lighting in the Preview render. Unfortunately, I use that very Preview render as my main output!&lt;/p&gt;

&lt;p&gt;This lighting issue manifests as shadows cast on the model. As I rotate the car some white “highlight” elements become darker. At this point the model is made up of many more shades of grey than I’d like.&lt;/p&gt;

&lt;p&gt;The problem escalates when I take the Preview renders and convert them to 1-bit (black and white) ready for display on Playdate. I use a simple threshold conversion where any pixels darker than the threshold value become black, and any lighter become white. The highlight elements that have been cast in shadow are now grey and in many cases after the threshold conversion they end up as black pixels when they should be white. The net visual result is a loss of detail as well as flashing elements as they disappearing on certain frames.&lt;/p&gt;

&lt;p&gt;My first attempt at solving this problem was to set model-specific threshold levels. This worked to a degree but there were still elements that would flash on and off as the car rotated, with headlights being the most noticeable. Whilst I lived with the issue for a long time it always bothered me as it did make the sprite feel buggy. Deep down I knew that the results could be better. However, looking at the OpenSCAD development roadmap made it clear that any improvements would have to come from me.&lt;/p&gt;

&lt;p&gt;One day, out of the blue, I realised that if black pixels are more reliably rendered then why don’t I take advantage of that and render the model in opposite colours so that the highlights are now black. After rendering I could simply negate the colours in the resulting image and the highlights would become white again. I tried a quick test and the results were good!&lt;/p&gt;

&lt;p&gt;Of course this means an additional render stage is added to my workflow, but that’s of little consequence since the Makefile is doing all the hard work. I also had to make some changes to my render scripts so that the normal and negative images are composited together into the final image. The resulting sprites have no flashing elements, maintain more fine detail, and appear a lot more solid as a result. Excellent!&lt;/p&gt;

&lt;p&gt;Afterwards it struck me that this process is similar to HDR photography where multiple photographs are combined to increase the dynamic range in the final image. So, just for kicks, I’m referring to this technique as HDR 1-bit rendering.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-prerendered-sprites-old.gif&quot; alt=&quot;GIF&quot; title=&quot;Old rendering workflow: note the disappearing headlights&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-prerendered-sprites-new.gif&quot; alt=&quot;GIF&quot; title=&quot;New rendering workflow: headlights are present and correct&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 21 May 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/05/21/pseudo-hdr/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/05/21/pseudo-hdr/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: Makefile</title>
          <description>&lt;p&gt;During the shadow rendering changes I was generating new sprites quite frequently, and I quickly realised that my mess of shell scripts just wasn’t a good enough system to be used in anger. I would have to call my scripts manually, with a variety of parameters, and remember a bunch of stuff unique to each script.&lt;/p&gt;

&lt;p&gt;So I spent a day converting the script system into a Makefile, with rules for:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;rendering&lt;/li&gt;
  &lt;li&gt;stitching&lt;/li&gt;
  &lt;li&gt;post-processing&lt;/li&gt;
  &lt;li&gt;copying&lt;/li&gt;
  &lt;li&gt;cleaning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also improved the scripts to make them touch all their output files with the last-modified timestamp of the original 3D model, meaning the scripts could become self-aware and know which output files are up-to-date and which need re-rendering.&lt;/p&gt;

&lt;p&gt;With this system I can generate a full set of renders of all vehicles in ~minutes, or render just a single car in ~seconds. This is such a huge time saver and has enabled me to iterate on car designs more quickly and easily than ever before. I’m already seeing the gains in much better sprites.&lt;/p&gt;

&lt;p&gt;Believe it or not this was the first Makefile I’ve ever needed to write from scratch. I knew enough about them to know that they would be a good fit for this task, and it was fun to learn more about something I only knew in passing.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 19 May 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/05/19/makefile/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/05/19/makefile/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: Pre-rendering Ranger</title>
          <description>&lt;p&gt;Since very early on shadows in Daily Driver have just been simple rectangles: one size fits all, rendered from a single 3D model, and post-processed to add dithering. &lt;abbr title=&quot;Minimum Viable Product&quot;&gt;MVP&lt;/abbr&gt;, you know? Over time I decided to do multiple shadows, one each for short cars and long cars.&lt;/p&gt;

&lt;p&gt;Sometime later I threw caution to the wind and decided to render per-car shadows. However, the OpenSCAD &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;projection()&lt;/code&gt; command that I was using was so slow! In fact it zapped my desire to finish implementing the feature. Instead, I let it sit for many months.&lt;/p&gt;

&lt;p&gt;Recently, I picked things up again to get the a new trailer and demo out. And then it hit me, that if I flatten a car on the z-axis—as if Looney Tunes dropped a heavy weight on it—then that flat thing will be a close enough equivalent of a shadow for my use. So I did just that and the results were great, and more importantly very quick to render!&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-prerendered-shadows-anim.gif&quot; alt=&quot;GIF&quot; title=&quot;Animation showing the theory of a model being squished down into its shadow&quot; /&gt;&lt;/p&gt;

&lt;p&gt;So I went all in and decided to not only render one shadow per-car but to render shadows for each individual frame. So now the direction of the front wheels and details of the body shape are reflected in the shadow. It might sound like a small thing but it really makes a big difference. You can see old vs new shadows in the image carousel below.&lt;/p&gt;

&lt;p&gt;It’s in situations like these that I’m really proud I put a ton of early effort into the tooling and build process that generates my sprites.&lt;/p&gt;

&lt;p&gt;Result!&lt;/p&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;b&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/daily-driver-prerendered-shadows-old.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-prerendered-shadows-old.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/daily-driver-prerendered-shadows-new.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-prerendered-shadows-new.png&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 82%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__staticimage,
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2) {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;.carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 18 May 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/05/18/prerendering-ranger/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/05/18/prerendering-ranger/</guid>
        </item>
      
    
      
        <item>
          <title>Pixel-Perfect retro gaming on LCD 480p EDTVs</title>
          <description>&lt;p&gt;I recently saw a feature on &lt;a href=&quot;https://www.racketboy.com/retro/the-best-43-square-lcd-monitors-for-retro-gaming-classic-pc-use&quot;&gt;Racketboy&lt;/a&gt; about “The Best 4:3 LCD Monitors for Retro Gaming” which is an interesting list that misses the mark for one reason: it ignores scaling.&lt;/p&gt;

&lt;p&gt;LCDs are best at their native resolution and all the listed monitors in that article are odd PC resolutions so most images will be scaled by uneven, non-integer amounts. If we think about retro gaming display outputs then we’re squarely sub-480p. Anything higher will mean the image gets scaled and the results will be suboptimal.&lt;/p&gt;

&lt;p&gt;What we need is a display with a native resolution of 480p. Do such things exist? Why, yes, they do!&lt;/p&gt;

&lt;h2 id=&quot;lcd-480p-edtvs&quot;&gt;LCD 480p EDTVs&lt;/h2&gt;

&lt;p&gt;For a handful of years I’ve been using a 20” LCD 480p EDTV which offers great support for 240p and 480p with zero scaling. These types of TVs mean you get pixel-perfect (1:1 PAR) results for PC, Dreamcast, Xbox, Xbox 360, and as near as dammit for Wii/GC, PS3/2/1 and other consoles without native PC output. PAL resolution 576p games are a fly in the ointment and won’t fit, so we won’t be playing those here. For resolutions lower than 640x480 you still get integer scaling with the output in the centre of the display, for example Mega Drive (Genesis) has a resolution of 320×224px that maps with scan lines to 640×448px with small black bars top and bottom. RetroArch users will be very familiar with this kind of pixel mapping technique. Seeing the 480p output of a Wii on this kind of display is a real shock and truly amazing.&lt;/p&gt;

&lt;p&gt;I also use my modern emulation PC to output at 640×480p using a DisplayPort to VGA adapter. This gives me perfect video output from Windows, and from RetroArch for everything up to and including 480p, which covers what I consider the golden period of arcade and console gaming. On occasion I’ve run some PC software (Dolphin emulator, Richard Burns Rally) at much the higher UXGA resolution and used a scaler to supersample it back down to 640×480 which gives fantastic, smooth results for specific games where I feel that might be worth doing.&lt;/p&gt;

&lt;p&gt;The pixel density of a 20” IPS panel like this is such that the sub-pixel gaps look a little like an aperture grille. Adding a 640×480px scan-line overlay image in RetroArch brings me very close to the look of my PVM but with a display that is much easier to manage. That said, CRT emulation isn’t really the goal here—we just want a display that is able to display these low resolutions without any scaling.&lt;/p&gt;

&lt;p&gt;The 480p EDTV also proves unremarkable to my wife, I guess because unlike my PVM it doesn’t like a microwave, which means it can happily live in the lounge.&lt;/p&gt;

&lt;h2 id=&quot;which-one-to-get&quot;&gt;Which one to get?&lt;/h2&gt;

&lt;p&gt;Philips made the best 20” 480p EDTVs: they have an LG/Philips IPS panel (yes, in 2006!) and PC input connector. The trick is to find a set with DVI/VGA input so you can use the PC mode which does not have any image processing applied to it. I’m in Europe so I use the Philips 20PF4121, which is simply glorious. Response time is less than one frame, and there is little to no motion blur on my TV, as measured by the EIZO monitor test. It has a hardware scaler by Genesis Logic that can handle 240p and is pretty good at deinterlacing (though I use a GBS-Control for better deinterlacing on PS2).&lt;/p&gt;

&lt;p&gt;Connections: you want to use DVI and whatever adaptors you need to get your signal there. Analogue signals over VGA and Component (YPbPr) can be used with a simple pin adaptor. Digital signals like HDMI and DisplayPort, or even those modern HDMI dongles for old consoles, can be used with a suitable signal converter (pick a good one to avoid lag) to get to VGA and then go from there. TVs with HDMI input are different in that it is not used for PC mode.&lt;/p&gt;

&lt;p&gt;Notes: some other manufacturers used the same LG/Philips IPS panel. Be aware that Sharp used their own panel technology, and Samsung used a different panel again, neither of which are IPS and so not as good. Sharp also use their own scaler hardware which is not as good as the scaler in my Philips. Scalers by MStar are used in certain EDTVs - including some later Philips sets - and do not support 240p.&lt;/p&gt;

&lt;p&gt;I’m yet to find a 16:9 aspect LCD 480p EDTV with PC input. Though I continue to look for one!&lt;/p&gt;

&lt;h2 id=&quot;the-hit-list&quot;&gt;The Hit List&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://docs.google.com/spreadsheets/d/1HOEvXkjMTum_Vd1CJ0RrpvgH0a_Uo0zJc9RwUtfZVZ0/edit?usp=sharing&quot;&gt;Here’s a Google Docs spreadsheet&lt;/a&gt; that should help you find a suitable LCD 480p EDTV. The top and most well-tested EDTVs from that list are displayed in the smaller table below.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;BRAND&lt;/th&gt;
      &lt;th&gt;MODEL&lt;/th&gt;
      &lt;th&gt;REGION&lt;/th&gt;
      &lt;th&gt;CHASSIS&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;IPS&lt;/th&gt;
      &lt;th&gt;SCALER&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;240P&lt;/th&gt;
      &lt;th&gt;INPUT&lt;/th&gt;
      &lt;th&gt;YEAR&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Philips&lt;/td&gt;
      &lt;td&gt;20PF4121&lt;/td&gt;
      &lt;td&gt;EU&lt;/td&gt;
      &lt;td&gt;LC4.1E&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Y&lt;/td&gt;
      &lt;td&gt;Genesis&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Y&lt;/td&gt;
      &lt;td&gt;DVI&lt;/td&gt;
      &lt;td&gt;2006&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Philips&lt;/td&gt;
      &lt;td&gt;20PF5121&lt;/td&gt;
      &lt;td&gt;EU&lt;/td&gt;
      &lt;td&gt;LC4.1E&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Y&lt;/td&gt;
      &lt;td&gt;Genesis&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Y&lt;/td&gt;
      &lt;td&gt;DVI&lt;/td&gt;
      &lt;td&gt;2006&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Philips&lt;/td&gt;
      &lt;td&gt;20HF5474&lt;/td&gt;
      &lt;td&gt;EU&lt;/td&gt;
      &lt;td&gt;LC4.1HE&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Y&lt;/td&gt;
      &lt;td&gt;Genesis&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Y&lt;/td&gt;
      &lt;td&gt;DVI&lt;/td&gt;
      &lt;td&gt;2006&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Philips&lt;/td&gt;
      &lt;td&gt;20PF4110&lt;/td&gt;
      &lt;td&gt;EU&lt;/td&gt;
      &lt;td&gt;LC4.1E&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Y&lt;/td&gt;
      &lt;td&gt;Genesis&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Y&lt;/td&gt;
      &lt;td&gt;DVI&lt;/td&gt;
      &lt;td&gt;2005&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Philips&lt;/td&gt;
      &lt;td&gt;20HF5473&lt;/td&gt;
      &lt;td&gt;EU&lt;/td&gt;
      &lt;td&gt;LC4.1E&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Y&lt;/td&gt;
      &lt;td&gt;Genesis&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Y&lt;/td&gt;
      &lt;td&gt;DVI&lt;/td&gt;
      &lt;td&gt;2005&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Toshiba&lt;/td&gt;
      &lt;td&gt;20LS30&lt;/td&gt;
      &lt;td&gt;JP&lt;/td&gt;
      &lt;td&gt;—&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Y&lt;/td&gt;
      &lt;td&gt;Genesis&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Y&lt;/td&gt;
      &lt;td&gt;VGA, D2&lt;/td&gt;
      &lt;td&gt;2005&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Toshiba&lt;/td&gt;
      &lt;td&gt;20DL75&lt;/td&gt;
      &lt;td&gt;US&lt;/td&gt;
      &lt;td&gt;—&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Y&lt;/td&gt;
      &lt;td&gt;Genesis&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Y&lt;/td&gt;
      &lt;td&gt;VGA&lt;/td&gt;
      &lt;td&gt;2005&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Note: three Philips EDTV available in the USA have been removed from this list as they only offer processed YPbPr over the VGA connector via a cinch to VGA cable.&lt;/p&gt;

&lt;p&gt;When looking for one of these you need to check the following:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;DVI or VGA connector?&lt;/strong&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;em&gt;quick check: specification brochure&lt;/em&gt;&lt;/li&gt;
      &lt;li&gt;&lt;em&gt;long check: take a look physically&lt;/em&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;IPS panel?&lt;/strong&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;em&gt;quick check: spec brochure, viewing angle ~178 degrees&lt;/em&gt;&lt;/li&gt;
      &lt;li&gt;&lt;em&gt;long check: service manual parts list, check panel part number manually&lt;/em&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Genesis Logic scaler?&lt;/strong&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;em&gt;quick check: parts list or PCB photo&lt;/em&gt;&lt;/li&gt;
      &lt;li&gt;&lt;em&gt;long check: check PCB manually, feed it a 240p signal&lt;/em&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Places to get this info are: photos of spare parts, specification brochure, service manual parts list. It’s useful to cross-reference LCD panel numbers on &lt;a href=&quot;https://www.panelook.com/modelsearch.php?keyword=LC201V02&quot;&gt;panelook.com&lt;/a&gt; and browse for 480p EDTVs using the &lt;a href=&quot;https://www.google.com/search?q=%22640+x+480+pixels%22+tv+site%3Ahttps%3A%2F%2Ficecat.biz&quot;&gt;icecat&lt;/a&gt; or &lt;a href=&quot;https://www.google.com/search?q=%22Resolution+640,480%22+tv+site%3Ahttps%3A%2F%2Fproductz.com&quot;&gt;productz&lt;/a&gt; websites.&lt;/p&gt;

&lt;p&gt;Feel free to contact me &lt;a href=&quot;https://twitter.com/gingerbeardman&quot;&gt;@gingerbeardman&lt;/a&gt; on twitter with details of your buying choice and experiences and I’ll be sure to update the spreadsheet.&lt;/p&gt;

&lt;h2 id=&quot;photos&quot;&gt;Photos&lt;/h2&gt;

&lt;p&gt;I also use the &lt;a href=&quot;https://www.instagram.com/explore/tags/20pf4121/&quot;&gt;#20PF4121 tag on Instagram&lt;/a&gt; to share photos and video footage.&lt;/p&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;b&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;c&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/pixel-perfect-480p-edtv-3.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/pixel-perfect-480p-edtv-3.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/pixel-perfect-480p-edtv-4.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/pixel-perfect-480p-edtv-4.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/pixel-perfect-480p-edtv-5.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/pixel-perfect-480p-edtv-5.jpg&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 82%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__staticimage,
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}

.carousel__activator:nth-of-type(3):checked ~ .carousel__track {
  -webkit-transform: translateX(-200%);
          transform: translateX(-200%);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__slide:nth-of-type(3) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__controls:nth-of-type(3) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(3) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(3) {
  -webkit-transform: translateX(200%) translateZ(0);
          transform: translateX(200%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(3),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(3) {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;.carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

&lt;h2 id=&quot;connections&quot;&gt;Connections&lt;/h2&gt;

&lt;p&gt;The goal is to get the video output from your gaming system into VGA or DVI, depending on the input your TV has.&lt;/p&gt;

&lt;p&gt;Specifically when using the EDTV’s PC input we need DVI-A (Analogue), rather than DVD-D (Digital) even if the TV supports both via DVI-I (integrated analogue and digital).&lt;/p&gt;

&lt;p&gt;Here’s how to connect the most common systems. Let me know if you connect one that’s not on the list!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Straight VGA cable&lt;/strong&gt; (with VGA to DVI adapter if needed)&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Dreamcast&lt;/li&gt;
  &lt;li&gt;Xbox 360&lt;/li&gt;
  &lt;li&gt;Xbox&lt;/li&gt;
  &lt;li&gt;Vintage Mac/PC&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Component cable to VGA/DVI adapter&lt;/strong&gt; (analogue pass-through)&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Wii&lt;/li&gt;
  &lt;li&gt;GameCube&lt;/li&gt;
  &lt;li&gt;PS3/2 (and PS1 via backwards compatibility)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;HDMI/DisplayPort/Thunderbolt to VGA/DVI&lt;/strong&gt; (digital to analogue conversion)&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Xbox One&lt;/li&gt;
  &lt;li&gt;Wii U&lt;/li&gt;
  &lt;li&gt;PS4/3&lt;/li&gt;
  &lt;li&gt;Mac&lt;/li&gt;
  &lt;li&gt;PC&lt;/li&gt;
  &lt;li&gt;Other systems using HDMI output&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;SCART/Composite to VGA/DVI adapter&lt;/strong&gt; (analogue to analogue conversion)&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Most other systems (those not mentioned above)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An example external scaler that can take SCART/Composite to VGA would be the &lt;a href=&quot;https://github.com/ramapcsx2/gbs-control&quot;&gt;GBS-Control&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;deinterlacing-quality&quot;&gt;Deinterlacing quality&lt;/h2&gt;

&lt;p&gt;To improve deinterlacing for 480i content (eg. PS2) you might consider using a scaler that has motion adaptive deinterlacing and good 480p output, such as &lt;a href=&quot;https://github.com/ramapcsx2/gbs-control&quot;&gt;GBS-Control&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;alignment-of-multiple-sources&quot;&gt;Alignment of multiple sources&lt;/h2&gt;

&lt;p&gt;A scaler such as the Extron DVS 304 is useful when using a &lt;a href=&quot;https://en.wikipedia.org/wiki/KVM_switch&quot;&gt;VGA KVM Switch&lt;/a&gt; as it will align the position of all different inputs, so you will not have to do Auto Adjust on the EDTV to centre the display when switching from system to system.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 06 May 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/05/06/pixel-perfect-retro-gaming-in-480p/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/05/06/pixel-perfect-retro-gaming-in-480p/</guid>
        </item>
      
    
      
        <item>
          <title>FAQ: Kururin Squash!</title>
          <description>&lt;p&gt;I wrote a video game FAQ and uploaded it to GameFAQs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/gamecube/922054-kururin-squash/faqs&quot;&gt;www.gamefaqs.com/gamecube/922054-kururin-squash/faqs&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 04 May 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/05/04/faq-kururin-squash/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/05/04/faq-kururin-squash/</guid>
        </item>
      
    
      
        <item>
          <title>About the interoperability of System 7 and iOS</title>
          <description>&lt;p&gt;It never fails to amaze me how at home System 7 feels on an iPad. In fact, I’d go so far as to say I’ve never felt more capable than when I’m using it this way. &lt;em&gt;What a time to be alive!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Still, there are times when it makes sense to lean on the features of the host device to get your job done more easily. In this post I detail common tasks that involve “crossing the streams”.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;file-conversions&quot;&gt;File Conversions&lt;/h2&gt;

&lt;p&gt;When transferring files to/from System 7 you’re going to need to convert them to/from suitable formats to make your life easier. Below I’ve listed my approach to the most common file types. Of course, your task may differ but I hope this gives you some useful hints.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bitmap files&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I use &lt;a href=&quot;https://pixaki.com&quot;&gt;Pixaki&lt;/a&gt; which is a fantastic native iPad app for creating pixel art. It will load either layered Photoshop or flat PNG files, both of which are easy to generate in System 7:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;PSD: Photoshop 3.0&lt;/li&gt;
  &lt;li&gt;PNG: GraphicConverter 4.1&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Vector files&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Dealing with vector artwork produced in the Deneba apps that I use is a little trickier. We have to jump use a stepping stone or two. First we export a file that keeps the vector data—I tend to choose Illustrator 88—and then we load that into the majestic FreeHand and export an EPS from there.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;I88: Illustrator 88 (aka version 1.7)&lt;/li&gt;
  &lt;li&gt;EPS: FreeHand 3/4/5&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Textual data&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I generally type in Markdown so plain-text TXT files work just fine and require no conversion. Programming source code files such as C, Pascal, or otherwise also transfer without incident.&lt;/p&gt;

&lt;p&gt;You may have some luck with Rich Text RTF files, and also with some versions of the Microsoft Word DOC file format, to transfer formatted text both ways without having to convert it to other file formats.&lt;/p&gt;

&lt;p&gt;More exotic document formats will be trickier, but &lt;a href=&quot;https://www.libreoffice.org&quot;&gt;LibreOffice&lt;/a&gt; can open number of older formats as read-only files. Examples are: AppleWorks, ClarisWorks, Nisus Writer, WordPerfect, and more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tabular data&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Excel&lt;/em&gt; 4.0 has you covered for CSV, XLS and more.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;file-io&quot;&gt;File I/O&lt;/h2&gt;

&lt;p&gt;To get files out of System 7 simply drop them onto the File Sharing drive, open Files, and long press on the file to get a list of the available actions. The exact options that iOS will give you will depend on the apps you have installed. Don’t be a stranger over at the App Store!&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;printing&quot;&gt;Printing&lt;/h2&gt;

&lt;p&gt;To print any type of document from System 7, I make use of software that allows printing to a PDF. It’s worth noting that the result is a bitmap PDF, not vector, but it’s good enough to get hold of a quick hardcopy.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;PDF: Acrobat PDFWriter 3.0&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Of course, if you are working with vector files you’ll have a proper scalable vector PDF file that you can print in exactly the same way.&lt;/p&gt;

&lt;p&gt;Once the PDF is in File Sharing, use iOS to print it wirelessly to an AirPrint compatible printer.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;multitasking&quot;&gt;Multitasking&lt;/h2&gt;

&lt;p&gt;iOS is only a swipe away, so remember that you can access iOS apps and services and swipe System 7 away at any time.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Split View&lt;/strong&gt; (if you enabled it when building BasiliskII) for side-by-side browsing in Safari&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Slide Over&lt;/strong&gt; for quick access to Files, Photos, Safari, etc.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Background&lt;/strong&gt; to listen to Music or Podcasts&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Picture-in-Picture&lt;/strong&gt; for YouTube or other video playback&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;downloading-files&quot;&gt;Downloading files&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Safari&lt;/em&gt; will let you download classic Macintosh file formats. Even though it doesn’t know how to handle them, they will automatically be saved on your iPad in Downloads.&lt;/p&gt;

&lt;p&gt;From there you can use Files to copy the file into BasiliskII’s File Sharing folder, or use the iOS Share Sheet to copy the file into BasiliskII and simultaneously open the emulator! Very handy. I use one or the other depending on my goal.&lt;/p&gt;

&lt;p&gt;Some file formats you are likely to come across:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;.hqx&lt;/strong&gt;—BinHex file&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;.bin&lt;/strong&gt;—MacBinary file&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;.sit&lt;/strong&gt;—StuffIt archive&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;.cpt&lt;/strong&gt;—CompactPro archive&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;.sea&lt;/strong&gt;—self-extracting archive&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The above files can be converted or extracted using StuffIt, MindExpander, or CompactPro. You might also see files with more than one extension, in which case don’t worry the file has been treated twice for good measure, you may have to open it twice in System 7 to get it into its final/original form.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;.dsk&lt;/strong&gt;—disk image&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;.img&lt;/strong&gt;—disk image&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;.smi&lt;/strong&gt;—self-mounting disk image&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The above disk images can be mounted using StuffIt, ShrinkWrap, DiskCopy 6. You could also mount them in the BasiliskII interface, but I tend not to do so for disk images that I won’t have mounted for very long.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;.iso&lt;/strong&gt;—standard CD-ROM disk image&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;.toast&lt;/strong&gt;—proprietary CD-ROM disk image&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The above optical disk images should be mounted using the BasiliskII settings interface (shown at first launch, or whenever you shake your device). Disks mounted in this way will be available at every boot, and can only be removed by shutting down the system and restarting the emulator.&lt;/p&gt;

&lt;h3 id=&quot;related-posts&quot;&gt;Related posts&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/17/turning-an-ipad-pro-into-the-ultimate-classic-macintosh&quot;&gt;Turning an iPad Pro into the Ultimate Classic Macintosh&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/21/building-basiliskii-for-ios/&quot;&gt;How to install BasiliskII on your iPad&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/19/automating-interactions-using-apple-events/&quot;&gt;Exploring Custom Keyboards and Automation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/03/28/changing-the-size-of-toolbar-items-using-resedit/&quot;&gt;Optimising Macintosh app toolbars for touch&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/24/macintosh-drawing-software-compared/&quot;&gt;Macintosh drawing software compared&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/25/mixing-external-tools-across-deneba-software/&quot;&gt;Mixing External Tools across Deneba software&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/30/my-system-7-software-choices/&quot;&gt;My System 7 software choices&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;About the interoperability of System 7 and iOS&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 03 May 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/05/03/interoperability-of-system-7-and-ios/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/05/03/interoperability-of-system-7-and-ios/</guid>
        </item>
      
    
      
        <item>
          <title>My System 7 software choices</title>
          <description>&lt;p&gt;System 7 is a great operating system. The experience using it today remains very close to modern macOS. It’s surprising how little has changed on our Desktop in the 30 years since. That said, the experience can be improved with the judicious use of additional software.&lt;/p&gt;

&lt;p&gt;When adding things to the system my goal is always to increase quality of life and improve user experience. Functionality is key and nothing is added without careful consideration. If I can install one package to add several functions I’d rather do that than add several individual packages. If I can install software to match modern macOS features or muscle memory then I’ll do so.&lt;/p&gt;

&lt;p&gt;Below are my personal choices that improve my time spent using System 7.&lt;/p&gt;

&lt;h2 id=&quot;control-panels&quot;&gt;Control Panels&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/better-edit-keys&quot;&gt;Better Edit Keys&lt;/a&gt; - adds modern text editing and selection keyboard controls, such as the ability to grow the selection by word&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/capture-402&quot;&gt;Capture&lt;/a&gt; - screen grabbing software&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/capture-ae&quot;&gt;Capture AE&lt;/a&gt; - logger for Apple Events calls&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/aladdin-desktop-tools&quot;&gt;Desktop Makeover&lt;/a&gt; - provides custom Finder features such as menu shortcuts, enhanced diskette icons, allows you to hide Balloon Help&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/draganywindow&quot; title=&quot;https://macintoshgarden.org/apps/draganywindow&quot;&gt;DragAnyWindow&lt;/a&gt; - adds solid dragging of any window, apps can be excluded&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/hidden-finder-features&quot;&gt;Hidden Finder Features&lt;/a&gt; - enables hidden Finder keyboard shortcuts to create aliases by dragging, reveal alias original, and move file to Trash&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/keyquencer&quot;&gt;KeyQuencer&lt;/a&gt; - macro and automation utility, the ultimate tool for power-users&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/popup-folder-201&quot;&gt;PopupFolder&lt;/a&gt; - allows access to folder contents from hierarchical pop-up menu without having to drill down into folders&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/quickeys-353&quot;&gt;QuicKeys&lt;/a&gt; - macro and automation utility, I use it only for composing Apple Event calls&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/smart-scroll&quot;&gt;Smart Scroll&lt;/a&gt; - live scrolling and proportionally sized scrollbar thumb&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/smartlaunch-308&quot;&gt;SmartLaunch&lt;/a&gt; - application launcher, I launch this using Cmd+Return KeyQuencer macro&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/snitch&quot;&gt;Snitch&lt;/a&gt; - Get Info extender, can do batch type/creator changes by summoning whilst holding Shift&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/symbionts-286&quot;&gt;Symbionts&lt;/a&gt; - occasionally used to troubleshoot Control Panels and Extensions&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/windowshade&quot;&gt;WindowShade&lt;/a&gt; - collapse a window into its title bar by double-clicking&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/yesnocancel-121&quot;&gt;YesNoCancel&lt;/a&gt; - adds modern keyboard control to dialog boxes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;extensions&quot;&gt;Extensions&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/2020patch&quot;&gt;2020Patch&lt;/a&gt; - fixes year 2020 date bug&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/about&quot;&gt;About&lt;/a&gt; - replacement for About This Macintosh window, with task manager features&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/apollo&quot;&gt;Apollo&lt;/a&gt; - pop-up menu at any location to select and launch apps&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/copypaste-33&quot;&gt;CopyPaste&lt;/a&gt; - multiple clipboard manager, works everywhere but ResEdit!&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macgui.com/downloads/?file_id=26327&quot;&gt;DirtyDesk&lt;/a&gt; - disables Clean Up Desktop menu item&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/natural-order&quot;&gt;Natural Order&lt;/a&gt; - improves sorting order in Finder&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;text-editors&quot;&gt;Text Editors&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://macgui.com/downloads/?file_id=20966&quot;&gt;Alpha&lt;/a&gt; - programmer’s editor, includes TCL scripting&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/anarcho-16&quot;&gt;Anarcho&lt;/a&gt; - has a few unique features&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/bbedit-5&quot;&gt;BBEdit&lt;/a&gt; - packed with features&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macgui.com/downloads/?file_id=21218&quot;&gt;Eddan&lt;/a&gt; - has a way to summon THINK References&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;word-processors&quot;&gt;Word Processors&lt;/h2&gt;

&lt;p&gt;Take your pick of the best:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/macwrite-pro-15&quot;&gt;MacWritePro&lt;/a&gt; 1.5&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/nisus-writer-4&quot;&gt;Nisus Writer&lt;/a&gt; 4&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/microsoft-word&quot;&gt;Word&lt;/a&gt; 5.1&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/wordperfect-35-novell&quot;&gt;WordPerfect&lt;/a&gt; 3.5&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/writenow&quot;&gt;WriteNow&lt;/a&gt; 4&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-utilities&quot;&gt;Other Utilities&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/compact-pro&quot;&gt;CompactPro&lt;/a&gt; - file compressor/decompressor&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/graphicconverter-4x&quot;&gt;GraphicConverter&lt;/a&gt; - image file converter&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/disktop-453&quot;&gt;DiskTop&lt;/a&gt; - file manager desk accessory&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/gregs-browser&quot;&gt;Greg’s Browser&lt;/a&gt; - file manager with StuffIt integration&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/masterfinder-13-fat&quot;&gt;MasterFinder&lt;/a&gt; - multi-column file manager&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/mindexpander&quot;&gt;MindExpander&lt;/a&gt; - file decompressor&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/super-resedit-213&quot;&gt;(Super) ResEdit&lt;/a&gt; - resource editor with built-in code viewer&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/resorcerer-125&quot;&gt;Resorcerer&lt;/a&gt; - resource editor with built-in code viewer&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/shrinkwrap-21&quot;&gt;ShrinkWrap&lt;/a&gt; - disk and archiving helper&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.macgui.com/downloads/?file_id=23652&quot;&gt;ShowSizes&lt;/a&gt; - disk usage analyser&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/type-resolve-201&quot;&gt;Type Resolve&lt;/a&gt; - drag-and-drop type/creator changer&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;operating-system&quot;&gt;Operating System&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/macintosh-os-755&quot;&gt;System 7.5.3 plus updates&lt;/a&gt; - Apple released this version for free!&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/japanese-language-kit-v12&quot;&gt;Japanese Language Kit&lt;/a&gt; - adds support for Japanese, I use this on a duplicate System folder&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/system-picker&quot;&gt;System Picker&lt;/a&gt; - choose which system folder to boot from&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://macintoshgarden.org/apps/applescript-11&quot;&gt;AppleScript 1.1&lt;/a&gt; - to enable Finder Scripting on &lt;em&gt;System 7.1&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;related-posts&quot;&gt;Related posts&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/17/turning-an-ipad-pro-into-the-ultimate-classic-macintosh&quot;&gt;Turning an iPad Pro into the Ultimate Classic Macintosh&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/21/building-basiliskii-for-ios/&quot;&gt;How to install BasiliskII on your iPad&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/19/automating-interactions-using-apple-events/&quot;&gt;Exploring Custom Keyboards and Automation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/03/28/changing-the-size-of-toolbar-items-using-resedit/&quot;&gt;Optimising Macintosh app toolbars for touch&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/24/macintosh-drawing-software-compared/&quot;&gt;Macintosh drawing software compared&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/25/mixing-external-tools-across-deneba-software/&quot;&gt;Mixing External Tools across Deneba software&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;My System 7 software choices&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/05/03/interoperability-of-system-7-and-ios/&quot;&gt;About the interoperability of System 7 and iOS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 30 Apr 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/04/30/my-system-7-software-choices/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/04/30/my-system-7-software-choices/</guid>
        </item>
      
    
      
        <item>
          <title>Modern replacements for old Wacom tablet pens</title>
          <description>&lt;p&gt;Whilst researching the &lt;em&gt;Wacom ArtPad II&lt;/em&gt; for my Macintosh Classic, I stumbled across some information that the &lt;em&gt;Samsung Galaxy Note S-Pen&lt;/em&gt; is compatible with the pen used on the &lt;em&gt;Wacom ArtPad&lt;/em&gt; and other tablets from that period. I love that the same technology is being used almost 30 years on.&lt;/p&gt;

&lt;p&gt;So after buying a &lt;em&gt;Wacom ArtPad II&lt;/em&gt;, which came with an original pen, out of curiosity I bought a few different types of &lt;em&gt;S-Pen&lt;/em&gt; to confirm the information I had read.&lt;/p&gt;

&lt;p&gt;I hope his is useful to somebody who has an old &lt;em&gt;Wacom&lt;/em&gt; tablet but is missing a pen.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/wacom-replacements.jpg&quot; alt=&quot;JPG&quot; title=&quot;A selection of pens compatible with my &amp;lt;em&amp;gt;Wacom ArtPad II&amp;lt;/em&amp;gt;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;From top to bottom:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The original pen that came with my &lt;em&gt;Wacom ArtPad II&lt;/em&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;“Samsung S-Pen with Eraser”&lt;/em&gt; (here black, with eraser, about three quarters of the size of the original pen) cost £10. Works well, including the eraser. I would class it as a very good replacement for the original pen.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;“S-Pen For Samsung Galaxy Note 10.1”&lt;/em&gt; (here black, a little smaller again, about a third or so the size of the original pen) cost £5. This works just fine with my &lt;em&gt;ArtPad II&lt;/em&gt;. The nib has ever so slightly more friction than the original pen but it’s a good stand in. The shape is slightly flattened so it’s comfortable for pointing, but not for drawing.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;“S-Pen NOTE 1”&lt;/em&gt; (here white, about the size of a &lt;em&gt;Nintendo DS&lt;/em&gt; stylus) cost £2. Too small to use for writing. However the one I received was broken, in that it was always clicking.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;notes&quot;&gt;Notes&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;Toshiba Tablet-PC&lt;/em&gt; pens are also known to be compatible&lt;/li&gt;
  &lt;li&gt;There are many other third party &lt;em&gt;Samsung&lt;/em&gt;-compatible pens available&lt;/li&gt;
  &lt;li&gt;You might be able to rehouse the &lt;em&gt;S-Pen&lt;/em&gt;, for example in a larger, 3D-printed body&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;pen-compatibility-between-models&quot;&gt;Pen compatibility between models&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;UltraPen&lt;/em&gt;, &lt;em&gt;Cintiq&lt;/em&gt; pen, &lt;em&gt;“Penabled”&lt;/em&gt; pen, &lt;em&gt;ArtPad / UD / CT&lt;/em&gt; pen, or &lt;em&gt;S-Pen&lt;/em&gt; are interchangeable (this is what I needed)&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Bamboo&lt;/em&gt; pens and &lt;em&gt;Graphire&lt;/em&gt; pens are interchangeable&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Intuos3&lt;/em&gt; pens can only be swapped with other &lt;em&gt;Intuos3&lt;/em&gt; pens&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://68kmla.org/forums/topic/62386-modern-replacements-for-old-wacom-tablet-pens/?tab=comments#comment-669264&quot;&gt;68kMLA forum topic&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://greg-kennedy.com/wordpress/2014/11/19/wacom-artpad-ii-kt-0405-r-to-usb/&quot;&gt;greg-kennedy.com&lt;/a&gt; (plus comments)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://web.archive.org/web/20150922033442/http://wiki.bongofish.co.uk/doku.php?id=bongofish:tablets&quot;&gt;Bongofish wiki&lt;/a&gt; (archived page)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://web.archive.org/web/20120710075320/http://www.wacom-asia.com/aptky/607/pen.pdf&quot;&gt;Wacom Asia&lt;/a&gt; (archived PDF)&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 30 Apr 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/04/30/modern-replacements-for-old-wacom-tablet-pens/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/04/30/modern-replacements-for-old-wacom-tablet-pens/</guid>
        </item>
      
    
      
        <item>
          <title>Changing the text size of a list using Resorcerer</title>
          <description>&lt;p&gt;I sometimes use an app called KeyQuencer Launcher that is part of the KeyQuencer software. The app presents a simple window containing a list of macros allowing quick and easy access.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/changing-textsize-1.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;KeyQuencer Launcher window&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The text in the window is very small, which makes sense as you want to see multiple macros in as little space as possible. However, my use case in System 7 on iPad is a little different as I’d like to see fewer, larger items that are easy to select by touch.&lt;/p&gt;

&lt;p&gt;Knowing a little about how Macintosh apps are put together I thought it should be easy enough to change the text size in the window by modifying the app’s binary code directly. This can be done using a tool called Resorcerer (you could also use Super ResEdit, or ResEdit with the CODE viewer resources installed).&lt;/p&gt;

&lt;p&gt;By searching for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0xA88A&lt;/code&gt; (the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_TextSize&lt;/code&gt; toolbox call) I was lucky enough to find a single place in the app where the text size is set. I changed the value passed to the preceding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;move.m&lt;/code&gt; from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0E&lt;/code&gt; (decimal 14) to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;12&lt;/code&gt; (decimal 18) and the text size was increased.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/changing-textsize-2.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;Toolbox Trap 0xA88A&quot; /&gt;&lt;/p&gt;

&lt;p&gt;That was enough of a solution for me, though it is possible to change the font or to increase text size more dramatically if required.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/changing-textsize-3.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;KeyQuencer Launcher window with increased text size&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;related-posts&quot;&gt;Related posts&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/17/turning-an-ipad-pro-into-the-ultimate-classic-macintosh&quot;&gt;Turning an iPad Pro into the Ultimate Classic Macintosh&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/21/building-basiliskii-for-ios/&quot;&gt;How to install BasiliskII on your iPad&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/19/automating-interactions-using-apple-events/&quot;&gt;Exploring Custom Keyboards and Automation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Optimising Macintosh app toolbars for touch&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/24/macintosh-drawing-software-compared/&quot;&gt;Macintosh drawing software compared&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/25/mixing-external-tools-across-deneba-software/&quot;&gt;Mixing External Tools across Deneba software&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/30/my-system-7-software-choices/&quot;&gt;My System 7 software choices&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/05/03/interoperability-of-system-7-and-ios/&quot;&gt;About the interoperability of System 7 and iOS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 28 Apr 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/04/28/changing-the-text-size-of-a-list-using-resorcerer/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/04/28/changing-the-text-size-of-a-list-using-resorcerer/</guid>
        </item>
      
    
      
        <item>
          <title>Mixing External Tools across Deneba software</title>
          <description>&lt;p&gt;One of the most interesting things about Deneba’s early 1990s Macintosh drawing apps is that they were built in a modular way with additional files adding specific features. These days we call those Plugins but back in 1990 Deneba referred to them as External Tools.&lt;/p&gt;

&lt;p&gt;They are first seen in UltraPaint and later in Canvas 3.0, artWORKS and Canvas 3.5. Tools are categorised as several types: Effect, I/O, Manager, Modifier, Object, Setting and Other. Each adds functionality and/or user interface to the app in its own way.&lt;/p&gt;

&lt;p&gt;Amongst the Deneba material on an AppleLink archive disk from Spring 1993 there are a bunch of “non-shipping” tools labelled for use with Canvas 3.0. Interestingly, they are listed individually and also as a combined set. If we extract the combined set of tools there’s a single additional tool that is somewhat out of place: the Waco Tool (for Wacom pressure sensitive pen) which is marked with UltraPaint’s type and creator information.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/deneba-external-tools-0.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;Spot the odd one out&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I can confirm this that this tool - which I don’t believe was ever included with UltraPaint - allows my Wacom ArtPad II to work. Bonus! But why was this tool meant for UltraPaint included in a download for Canvas. Could it work in Canvas?&lt;/p&gt;

&lt;p&gt;I put the additional files in the Canvas Tools folder and started the app with the Space Bar held down. This starts the Tool Picker allowing you to select which tools you want to use for that session.&lt;/p&gt;

&lt;p&gt;Boom! There it was.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/deneba-external-tools-1.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;A wild Waco Tool appears in the Tool Picker&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;experimentation&quot;&gt;Experimentation&lt;/h2&gt;

&lt;p&gt;I tried copying some tools from Canvas to UltraPaint and artWORKS. They didn’t work. What was the difference? In ResEdit they looked largely the same. On a whim I looked at the type/creator codes using Snitch’s Get Info extension. I noticed that disabled tools had a different type code. If the app is using type to store information like that, maybe it’s only accepting certain type codes?&lt;/p&gt;

&lt;p&gt;So I copied a tool from Canvas over to artWORKS, being careful to pick one that already exists so it was as much like for like as it could be. It didn’t show up. Then I changed the type/creator codes and… it did show up! And not only that, but the tool worked in the app!&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/deneba-external-tools-2.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;External Tool type/creator codes&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I was surprised, and also impressed. Deneba did a really great job with the architecture and API of these apps for things to remain this compatible over the course of several years. All three apps share code and resources. If you take a look at both UltraPaint and artWORKS in ResEdit you’ll see that they share a lot of DNA, artWORKS is basically an enhanced version of UltraPaint. I’d bet all three apps were built from the same code base.&lt;/p&gt;

&lt;h2 id=&quot;how-far-can-we-go&quot;&gt;How far can we go?&lt;/h2&gt;

&lt;p&gt;Some questions remained: how many tools could this be done with? Would they install and function? Could I use tools in artWORKS that were meant only for the more expensive Canvas? There was only one way to find out: try all the tools!&lt;/p&gt;

&lt;p&gt;I set about copying the tools from one app to artWORKS, my favourite app, changing the creator and type codes to match. To make bulk changes to type/creator I used Get Info (with Snitch) on multiple items, but I could have used software such as FileTyper.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Year&lt;/th&gt;
      &lt;th&gt;Software&lt;/th&gt;
      &lt;th&gt;Type&lt;/th&gt;
      &lt;th&gt;Creator&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;1990&lt;/td&gt;
      &lt;td&gt;UltraPaint&lt;/td&gt;
      &lt;td&gt;TOOL&lt;/td&gt;
      &lt;td&gt;ULTR&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;1992&lt;/td&gt;
      &lt;td&gt;Canvas 3.0&lt;/td&gt;
      &lt;td&gt;TOL2&lt;/td&gt;
      &lt;td&gt;DAD2&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;1993&lt;/td&gt;
      &lt;td&gt;artWORKS&lt;/td&gt;
      &lt;td&gt;TOL4&lt;/td&gt;
      &lt;td&gt;DAD3&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;very-far&quot;&gt;Very far!&lt;/h2&gt;

&lt;p&gt;The result was quite amazing with artWORKS total tools increasing from 59 to 92—that’s 33 additional tools! This is not counting a handful of tools that install but do not present themselves in the user interface. I’ll need to investigate those further at a later date.&lt;/p&gt;

&lt;p&gt;Doing the same for Canvas 3.0 takes us from 74 to an even higher total of 97 tools! It’s worth noting there are a couple of tools that go by the same internal name: PANTONE™ Colors (Color Manager) and Separations (PostScript) but I’ve chosen not to merge those rows of the table as there are some subtle differences in their capabilities. Also the functionality of the Grids &amp;amp; Rulers tool is built-in.&lt;/p&gt;

&lt;p&gt;The table below shows tools present in each of the apps, each with their own symbol, and then the final combined column shows all tools that are compatible with artWORKS with the symbols showing which app that tool originated from.&lt;/p&gt;

&lt;h1 id=&quot;external-tools&quot;&gt;External Tools&lt;/h1&gt;

&lt;div class=&quot;table-wrapper&quot;&gt;
  &lt;table id=&quot;deneba-external-tools&quot;&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th&gt;Software Name&lt;/th&gt;
        &lt;th style=&quot;text-align: center&quot;&gt;UltraPaint&lt;/th&gt;
        &lt;th style=&quot;text-align: center&quot;&gt;Canvas 3.0&lt;/th&gt;
        &lt;th style=&quot;text-align: center&quot;&gt;artWORKS&lt;/th&gt;
        &lt;th style=&quot;text-align: center&quot;&gt;artWORKS+&lt;/th&gt;
        &lt;th style=&quot;text-align: center&quot;&gt;Canvas 3.0+&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt; Tool Loader&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt; ToolPicker&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Alignment Specs&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Antialias&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Arrowhead Manager&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Auto Trace&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Balloon Help&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Bézier Text&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Bind&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Blend Objects&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Blotter Pen&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Brush Manager&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Canvas 1.0 I/O&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Canvas 2.1 I/O&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;CGM I/O&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Chalk&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Charcoal&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Coil&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Color Manager&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Combine Objects&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Concentric Circles&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Contrast&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Convert To&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Cube&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Cylinder&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Dash Manager&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Dimensioning&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Doughnuts&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Drawing Size&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Dropper&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Duplication Specs&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;DXF I/O&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Filters&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Fingertip&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Fractals&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Fuzz lasso/Soften Edges&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;GIF I/O&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Gradient Fill&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Gray Scale Manager&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Grid Specs&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Grid Tool/Maker&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Grids &amp;amp; Rulers&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Hatch Patterns&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;IGES I/O&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Illustrator I/O&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Imported Filters&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Impressionist&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Layer Specs&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Luminance&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MacDraw I/O&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MacPaint I/O&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Magic Wand&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Masking&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Mover&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Multigon&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;NameStamp&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Object Specs&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Object Tint&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PANTONE™ Colors&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;○&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Parallel Lines&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Pattern Manager&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Pen Manager&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Place&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Point Rotate&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PostScript&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Preferences&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Pressure Pen&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;QuickTime&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Quill Pen&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Registration Marks&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Resistor&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;RGB Color Manager&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Rubber Stamp&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Ruler Specs&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Scale Specs&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Search &amp;amp; Replace&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Selection Specs&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;○&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Separations&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;○&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Sharpen and Blur&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Size Other&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Slides&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Smart Mouse&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;○&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Sounder&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Spacing Other&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Spelling&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Spiral&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Split&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Spray Manager&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;StartupScreen I/O&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;System 7.0 Options&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Text Ruler&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;○&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Text Utilities&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Textures&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Three Color Airbrush&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;TIFF I/O&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;TimeStamp&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Tool Info&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;UltraPaint 1.0 I/O&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Undo Killer&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;○&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Water Droplet&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;▲&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;■&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
    &lt;tfoot&gt;
      &lt;tr&gt;
        &lt;td&gt;Total Tools&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;30&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;74&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;58&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;92&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;97&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tfoot&gt;
  &lt;/table&gt;

  &lt;p&gt;Key:&lt;/p&gt;

  &lt;p&gt;▲ UltraPaint tool
  ● Canvas 3.0 tool
  (○ that installs but doesn’t show any interface)
  ■ artWORKS tool&lt;/p&gt;

  &lt;h2 id=&quot;result&quot;&gt;Result&lt;/h2&gt;

  &lt;p&gt;So after all this I now have an install of artWORKS (let’s call it artWORKS+) that includes additional tools from both UltraPaint and Canvas 3.0 and I had a ton of fun figuring all this out. And I’m only 30 years late!&lt;/p&gt;

  &lt;p&gt;Here’s a download of my artWORKS Tools folder containing all the combined tools (use StuffIt! Expander 5.5 to extract): &lt;a href=&quot;/files/artWORKS-Tools-Combined.sit&quot;&gt;artWORKS-Tools-Combined.sit&lt;/a&gt; [1.1MB]&lt;/p&gt;

  &lt;h3 id=&quot;footnote&quot;&gt;Footnote&lt;/h3&gt;

  &lt;p&gt;A note about later versions of Canvas: version 3.5 provides roughly the same tools as version 3.0. The handful of unique tools in version 3.5 are not compatible with artWORKS. Version 5.0 features similar tools but they’re no longer compatible with the earlier apps.&lt;/p&gt;

  &lt;h3 id=&quot;related-posts&quot;&gt;Related posts&lt;/h3&gt;

  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;/2021/04/17/turning-an-ipad-pro-into-the-ultimate-classic-macintosh&quot;&gt;Turning an iPad Pro into the Ultimate Classic Macintosh&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;/2021/04/21/building-basiliskii-for-ios/&quot;&gt;How to install BasiliskII on your iPad&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;/2021/04/19/automating-interactions-using-apple-events/&quot;&gt;Exploring Custom Keyboards and Automation&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;/2021/03/28/changing-the-size-of-toolbar-items-using-resedit/&quot;&gt;Optimising Macintosh app toolbars for touch&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;/2021/04/24/macintosh-drawing-software-compared/&quot;&gt;Macintosh drawing software compared&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;Mixing External Tools across Deneba software&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;/2021/04/30/my-system-7-software-choices/&quot;&gt;My System 7 software choices&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;/2021/05/03/interoperability-of-system-7-and-ios/&quot;&gt;About the interoperability of System 7 and iOS&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;

&lt;/div&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 25 Apr 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/04/25/mixing-external-tools-across-deneba-software/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/04/25/mixing-external-tools-across-deneba-software/</guid>
        </item>
      
    
      
        <item>
          <title>Macintosh drawing software compared</title>
          <description>&lt;p&gt;Below is a list of various drawing applications that are available to use with System 7 (68K).&lt;/p&gt;

&lt;p&gt;I’m mostly interested in apps that can do both pixel and vector, and that support layers and transparency. The table below might be useful for at-a-glance comparisons. Apps run in both mono or colour, unless stated otherwise.&lt;/p&gt;

&lt;p&gt;Deneba artWORKS can do both pixel and vector, has layers and partial transparency. The bottom layer is opaque and all layers on top are transparent. Collections of pixels are managed as a special object, and there’s a limit of 8 layers. The user interface is brilliant.&lt;/p&gt;

&lt;p&gt;SuperPaint has two layers: pixel and vector with transparency in all but the base layer. Though it allows cut/copy and paste from the pixel layer to the vector layer at which point those collections of pixels are managed as SuperBits objects and can be edited in isolation.&lt;a href=&quot;https://twitter.com/tumult/status/1432279388519763972&quot;&gt;ref&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Freehand is king of the vector apps. It really was so much better than Illustrator. Such a shame that it’s no longer around. To use it on iPad is quite something!&lt;/p&gt;

&lt;p&gt;Also interesting is how many early versions of successful apps didn’t support layers (Photoshop, Freehand) or full transparency (Photoshop).&lt;/p&gt;

&lt;p&gt;Almost every app has only a single level undo, with only Expression and Freehand offering multi-level undo. This is probably why everybody was using Freehand when I started work in graphic design in the mid-late 1990s.&lt;/p&gt;

&lt;p&gt;One small disappointment: Macromedia Fireworks requires the PPC architecture so won’t run on my iPad System 7 setup. Sad face. (But we can use &lt;a href=&quot;https://infinitemac.org&quot;&gt;infinitemac.org&lt;/a&gt;)&lt;/p&gt;

&lt;div class=&quot;table-wrapper&quot;&gt;
  &lt;table id=&quot;macintosh-drawing-software&quot;&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th&gt;APP&lt;/th&gt;
        &lt;th style=&quot;text-align: center&quot;&gt;PIXEL&lt;/th&gt;
        &lt;th style=&quot;text-align: center&quot;&gt;VECTOR&lt;/th&gt;
        &lt;th style=&quot;text-align: center&quot;&gt;LAYERS&lt;/th&gt;
        &lt;th style=&quot;text-align: center&quot;&gt;TRANSP.&lt;/th&gt;
        &lt;th style=&quot;text-align: center&quot;&gt;UNDO&lt;/th&gt;
        &lt;th&gt;NOTES&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;artWORKS&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;○&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td&gt;Many layers, many objects&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;BluePaint&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;○&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td&gt;PPC-only&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Canvas&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;○&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td&gt;Many layers, many objects&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;ClarisDraw&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td&gt;Pixel drawing within specific objects&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Cricket Draw&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Draw It Again Sam&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Drawing Table&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Expression&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td&gt;Colour required&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Freehand 1.0–2.0&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;○&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td&gt;Layers not managed visually&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Freehand 3.1–5.5&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Illustrator 88–3.0&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;ImageStudio 0.6&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td&gt;Custom brushes&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;LightningPaint&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td&gt;Polite palettes&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MacDraw Pro&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MacPaint&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;MacroPaint&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;○&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td&gt;Transparent patterns&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Photoshop 1.0–2.5&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Photoshop 3.0&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td&gt;Full alpha channel transparency&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;PixelPaint&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td&gt;Special brush effects&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;ShareDraw&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Studio/1&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td&gt;Animation, 1-bit&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Studio/8&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td&gt;Animation, 8-bit&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;SuperPaint&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;○&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td&gt;Two layers, many objects&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;UltraPaint&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;○&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td&gt;Eight layers, many objects&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Zeus&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt;●&lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
        &lt;td&gt;Animation&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;

&lt;/div&gt;
&lt;p&gt;Key: ● full support, ○ partial support&lt;/p&gt;

&lt;h3 id=&quot;related-posts&quot;&gt;Related posts&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/17/turning-an-ipad-pro-into-the-ultimate-classic-macintosh&quot;&gt;Turning an iPad Pro into the Ultimate Classic Macintosh&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/21/building-basiliskii-for-ios/&quot;&gt;How to install BasiliskII on your iPad&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/19/automating-interactions-using-apple-events/&quot;&gt;Exploring Custom Keyboards and Automation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/03/28/changing-the-size-of-toolbar-items-using-resedit/&quot;&gt;Optimising Macintosh app toolbars for touch&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Macintosh drawing software compared&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/25/mixing-external-tools-across-deneba-software/&quot;&gt;Mixing External Tools across Deneba software&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/30/my-system-7-software-choices/&quot;&gt;My System 7 software choices&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/05/03/interoperability-of-system-7-and-ios/&quot;&gt;About the interoperability of System 7 and iOS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 24 Apr 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/04/24/macintosh-drawing-software-compared/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/04/24/macintosh-drawing-software-compared/</guid>
        </item>
      
    
      
        <item>
          <title>Level viewer for Pang (Nintendo DS)</title>
          <description>&lt;p&gt;I’m a huge fan of the Pang series of video games. In my experienced and humble opinion the best game in the series is the one on Nintendo DS. It takes the core Pang concept—refined from the original game in 1990 through to Mighty! Pang in 2000—and turns everything it up to 11. It makes full use of the dual screens to add in some novel level layouts, with a near perfect difficulty curve across the 60 levels that make up Tour mode.&lt;/p&gt;

&lt;p&gt;Back in 2017 I tried to reverse engineer it, with the goal of creating custom levels. I got so far as to extract all 256 levels from the ROM and wrote some software to process those into more human-readable formats:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Extract stages tile maps from ROM (using PHP)&lt;/li&gt;
  &lt;li&gt;Convert stage data to JSON (using PHP)&lt;/li&gt;
  &lt;li&gt;Level viewer (using JavaScript and HTML canvas)&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gingerbeardman/pang-ds&quot;&gt;Source code at GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;level-viewer&quot;&gt;Level Viewer&lt;/h2&gt;

&lt;p&gt;Below is an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;iframe&lt;/code&gt; containing a web page hosted on my server:&lt;/p&gt;

&lt;iframe class=&quot;pang&quot; src=&quot;https://www.gingerbeardman.com/pangds/&quot;&gt;&lt;/iframe&gt;

&lt;h2 id=&quot;notes&quot;&gt;Notes&lt;/h2&gt;

&lt;p&gt;The levels are stored in the standard format for Nintendo DS tile-based levels, so these scripts could well work for levels from other games.&lt;/p&gt;

&lt;p&gt;It was interesting to find one of the levels shown on the back of the box, seen in the top right of the image below, which is not featured in the main game. My theory is that this level was created to make the game seem more appealing to anybody looking at these supposedly in-game screenshots.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/pang-ds-box.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;performance&quot;&gt;Performance&lt;/h3&gt;

&lt;p&gt;The performance of the level viewer at the time was much better in Chrome than in Safari, so &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=181244&quot;&gt;I raised a bug at WebKit&lt;/a&gt;. Several years on bug lays dormant, but things don’t seem quite so bad today. Though there have been three major browser upgrades, one major macOS update and a computer upgrade since!&lt;/p&gt;

&lt;h3 id=&quot;to-do&quot;&gt;To do&lt;/h3&gt;

&lt;p&gt;I never did figure out where the definitions for the various balls and other objects on each level were stored. Maybe one day.&lt;/p&gt;

&lt;h2 id=&quot;you-need-to-play-this-game&quot;&gt;You need to play this game!&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/pang-ds.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 21 Apr 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/04/21/level-viewer-for-pang-nintendo-ds/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/04/21/level-viewer-for-pang-nintendo-ds/</guid>
        </item>
      
    
      
        <item>
          <title>Building BasiliskII for iOS</title>
          <description>&lt;p&gt;I’ve had numerous requests for a guide to building BasiliskII on iOS. Let me know of anything is unclear or would benefit from more details!&lt;/p&gt;

&lt;p&gt;February 2024: Updated for building with Xcode 15.2 on macOS 14.3 to iOS 17.3. YMMV.&lt;/p&gt;

&lt;h2 id=&quot;building&quot;&gt;Building&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Install &lt;a href=&quot;https://apps.apple.com/gb/app/xcode/id497799835?mt=12&quot;&gt;Xcode from Mac App Store&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Clone &lt;a href=&quot;https://github.com/zydeco/macemu/tree/ios/BasiliskII/src/iOS&quot;&gt;project source from GitHub&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Switch to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ios&lt;/code&gt; branch&lt;/li&gt;
  &lt;li&gt;Open .xcodeproj file&lt;/li&gt;
  &lt;li&gt;Set &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Product &amp;gt; Destination&lt;/code&gt; to point to your device&lt;/li&gt;
  &lt;li&gt;Run&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;optional-changes&quot;&gt;Optional Changes&lt;/h2&gt;

&lt;p&gt;These are changes I made that give a better experience on my specific iPad.&lt;/p&gt;

&lt;h3 id=&quot;adding-chunky-screen-resolutions&quot;&gt;Adding chunky screen resolutions&lt;/h3&gt;

&lt;p&gt;I added chunky “half resolution” screen modes to increase the size of user interface elements so that buttons, menu items and so on are all around the 44pt recommended in the Apple iOS HIG.&lt;/p&gt;

&lt;p&gt;For iPad Pro 12.9” these changes were:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[self addVideoMode:CGSizeMake(512, 496) to:videoModes]; // portrait minus keyboard
[self addVideoMode:CGSizeMake(512, 672) to:videoModes]; // portrait &quot;full&quot; screen
[self addVideoMode:CGSizeMake(683, 502) to:videoModes]; // landscape &quot;full&quot; screen
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Enter those after &lt;a href=&quot;https://github.com/zydeco/macemu/blob/9b90ebad780f35afb9f0001109bdca9c7e1cb478/BasiliskII/src/iOS/BasiliskII/B2ScreenView.mm#L56-L61&quot;&gt;line 61 in file B2ScreenView.mm&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;disabling-graphics-smoothing&quot;&gt;Disabling graphics smoothing&lt;/h3&gt;

&lt;p&gt;My personal preference is to disable filtering/smoothing on all graphics scaling, but only because I’ve dialled in resolutions that fit exactly so there will be no scaling happening anyway:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;NSString *filter = kCAFilterNearest;
videoLayer.magnificationFilter = filter;
videoLayer.minificationFilter = filter;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Make this change at &lt;a href=&quot;https://github.com/zydeco/macemu/blob/9b90ebad780f35afb9f0001109bdca9c7e1cb478/BasiliskII/src/iOS/BasiliskII/B2ScreenView.mm#L108&quot;&gt;line 108 in file B2ScreenView.mm&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;custom-keyboard-layouts&quot;&gt;Custom Keyboard Layouts&lt;/h3&gt;

&lt;p&gt;These are defined in JSON and &lt;a href=&quot;https://github.com/zydeco/macemu/tree/ios/BasiliskII/src/iOS/Keyboard%20Layouts&quot;&gt;compiled&lt;/a&gt; to a custom format:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/zydeco/macemu/tree/ios/BasiliskII/src/iOS/BasiliskII/Keyboard%20Layouts&quot;&gt;source file location on GitHub&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;several regional layouts are already provided&lt;/li&gt;
  &lt;li&gt;you don’t have to make your own!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gingerbeardman/artworks-keyboard&quot;&gt;Here’s one that I made&lt;/a&gt;, based on the British layout, for use with Deneba artWORKS/UltraPaint. To install it you should copy the file &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;artWORKS.nfkeyboardlayout&lt;/code&gt; to BasiliskII’s &lt;em&gt;Keyboard Layout&lt;/em&gt; folder using the Files app on your iPad.&lt;/p&gt;

&lt;h3 id=&quot;enable-split-view-support&quot;&gt;Enable Split View Support&lt;/h3&gt;

&lt;p&gt;This can be enabled by changing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BasiliskII-Info.plist&lt;/code&gt;: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UIRequiresFullScreen&lt;/code&gt; should be &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;false&lt;/code&gt; in &lt;a href=&quot;https://github.com/zydeco/macemu/blob/ios/BasiliskII/src/iOS/BasiliskII/BasiliskII-Info.plist#L114&quot;&gt;BasiliskII-Info.plist&lt;/a&gt; but be wary of the following problem:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;the very top of the screen (where you’d expect the iOS status bar to be, and where part of the System 7 menu bar is) will become unresponsive to touch due to the Slide Over indicator&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This would need to be managed/avoided by the screen layout of BasiliskII, but when I attempted this it raised more issues.&lt;/p&gt;

&lt;p&gt;However, you can still use Slide Over to position Safari, Files, etc. along the edge of your screen.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;notes&quot;&gt;Notes&lt;/h2&gt;

&lt;p&gt;There are additional capabilities that come with the emulator integration. I go further into these, and more besides, in a additional posts listed at the bottom of the page.&lt;/p&gt;

&lt;h3 id=&quot;keyboard&quot;&gt;Keyboard&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Swipe up/down with two fingers to show/hide the on-screen keyboard&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;settings&quot;&gt;Settings&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Spread 4 or 5 fingers to show the &lt;em&gt;BasiliskII Settings&lt;/em&gt; pop-up&lt;/li&gt;
  &lt;li&gt;Tap outside of the &lt;em&gt;BasiliskII Settings&lt;/em&gt; pop-up to hide it&lt;/li&gt;
  &lt;li&gt;Settings can also be invoked through the app menu, long press the app icon&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;custom-screen-size&quot;&gt;Custom screen size&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Pinch with 2 fingers to dynamically resize screen&lt;/li&gt;
  &lt;li&gt;Separate tracking for horizontal and vertical resizing&lt;/li&gt;
  &lt;li&gt;Double-tap for full size screen&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;file-sharing&quot;&gt;File Sharing&lt;/h3&gt;

&lt;p&gt;A drive appears on the desktop that is mapped to the iOS file sharing folder of the app.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;You can use Files to transfer files into or out of the emulated machine&lt;/li&gt;
  &lt;li&gt;Share Sheet also works for getting files into the emulated machine&lt;/li&gt;
  &lt;li&gt;You can organise the files into folders using the Files app&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;apple-pencil&quot;&gt;Apple Pencil&lt;/h3&gt;

&lt;p&gt;This is supported the same way as regular touch so it acts as a mouse. Drawing works well and is very responsive, even at lower Hz.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Palm rejection is missing&lt;/li&gt;
  &lt;li&gt;Pressure sensitivity is missing&lt;/li&gt;
  &lt;li&gt;Multi touch seems to be missing&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;related-posts&quot;&gt;Related posts&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/17/turning-an-ipad-pro-into-the-ultimate-classic-macintosh&quot;&gt;Turning an iPad Pro into the Ultimate Classic Macintosh&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;How to install BasiliskII on your iPad&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/19/automating-interactions-using-apple-events/&quot;&gt;Exploring Custom Keyboards and Automation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/03/28/changing-the-size-of-toolbar-items-using-resedit/&quot;&gt;Optimising Macintosh app toolbars for touch&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/24/macintosh-drawing-software-compared/&quot;&gt;Macintosh drawing software compared&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/25/mixing-external-tools-across-deneba-software/&quot;&gt;Mixing External Tools across Deneba software&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/30/my-system-7-software-choices/&quot;&gt;My System 7 software choices&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/05/03/interoperability-of-system-7-and-ios/&quot;&gt;About the interoperability of System 7 and iOS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 21 Apr 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/04/21/building-basiliskii-for-ios/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/04/21/building-basiliskii-for-ios/</guid>
        </item>
      
    
      
        <item>
          <title>Interest-specific Search Engines</title>
          <description>&lt;p&gt;One of my favourite Google products is their Custom Search Engine (CSE) feature. It allows you to create walled-garden search engines that return results only for chosen selection of websites. This is ideal for creating interest-specific search engines.&lt;/p&gt;

&lt;p&gt;These days they seem to be calling the feaure Google Programmable Search, though I’m not quite sure where the programmable aspect comes in? Back in 2006 the feature was introduced as Google Co-op, but whatever. I mention those only for SEO purposes! Cheeky.&lt;/p&gt;

&lt;p&gt;I’ve been using CSEs for years to help with finding files related to my various hobby interests, mostly retro gaming and computing. Heck, for a few years a decade ago my way of downloading music files was through a CSE I called “one click wonder”. They work really well.&lt;/p&gt;

&lt;p&gt;Given the nature of the web, and the fact that CSEs benefit from continued maintenance, a lot of mine have gradually withered away. But a few of them have survived the test of time.&lt;/p&gt;

&lt;p&gt;Listed below are a handful of what I would consider are the most useful CSEs I’ve created, I won’t list the domains involved because the information would need to be updated over time, but you can try each one and use the top tabs to get a handle on exactly which sites are being indexed.&lt;/p&gt;

&lt;h2 id=&quot;classic-macintosh&quot;&gt;Classic Macintosh&lt;/h2&gt;
&lt;p&gt;Software and PDF books downloads for pre-OSX Macintosh systems.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://bit.ly/searchclassicmac&quot; title=&quot;https://bit.ly/searchclassicmac&quot;&gt;bit.ly/searchclassicmac&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;palmos&quot;&gt;PalmOS&lt;/h2&gt;
&lt;p&gt;Software downloads for PalmOS-based devices.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://bit.ly/searchpalmos&quot; title=&quot;https://bit.ly/searchpalmos&quot;&gt;bit.ly/searchpalmos&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;japanese-software&quot;&gt;Japanese Software&lt;/h2&gt;
&lt;p&gt;Software downloads for vintage systems: Windows, Macintosh, Sharp X68000, PC-98, Palm, etc.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://bit.ly/searchjapansoft&quot; title=&quot;https://bit.ly/searchjapansoft&quot;&gt;bit.ly/searchjapansoft&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;rom-finder&quot;&gt;ROM Finder&lt;/h2&gt;
&lt;p&gt;Classic/retro video game ROMs, ISOs, disc images.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://bit.ly/searchroms&quot; title=&quot;http://bit.ly/searchroms&quot;&gt;bit.ly/searchroms&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;manuals&quot;&gt;Manuals&lt;/h2&gt;
&lt;p&gt;Consumer Electronics operation manual or user guide PDFs.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://bit.ly/searchmanuals&quot; title=&quot;https://bit.ly/searchmanuals&quot;&gt;bit.ly/searchmanuals&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;ace-answers&quot;&gt;Ace Answers&lt;/h2&gt;
&lt;p&gt;Vintage FAQs and repair guides for the Toyota TownAce and Space Cruiser vehicles.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://bit.ly/searchaceanswers&quot; title=&quot;https://bit.ly/searchaceanswers&quot;&gt;bit.ly/searchaceanswers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 20 Apr 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/04/20/interest-specific-search-engines/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/04/20/interest-specific-search-engines/</guid>
        </item>
      
    
      
        <item>
          <title>Automating interactions using Apple Events</title>
          <description>&lt;p&gt;&lt;a href=&quot;/2021/04/17/turning-an-ipad-pro-into-the-ultimate-classic-macintosh/&quot;&gt;As I’ve previously mentioned&lt;/a&gt;, UltraPaint and artWORKS share a lot of DNA so their structure is effectively identical, including the tool palette. This is a good thing as I intend to automate tool selection in both apps and I’ll take any help 30-year-old software wants to send my way!&lt;/p&gt;

&lt;p&gt;Chapter 6 in the book “The Automatic Mac” (1992, &lt;a href=&quot;https://vintageapple.org/macbooks/&quot;&gt;download&lt;/a&gt;) details a number of ways of scripting graphics programs. They use Canvas as an example, which is great because that is a very close relative to the artWORKS and UltraPaint apps that I use. The book informed a lot of what I’m doing here, though my approach differs because of my available tools and personal preference.&lt;/p&gt;

&lt;h2 id=&quot;simply-clicking&quot;&gt;Simply Clicking&lt;/h2&gt;

&lt;p&gt;My first thought was to try the naive way of selecting tools by just clicking them! If the tool palettes are positioned in the same place (this can also be automated) then macros can simply click at specific screen locations to select a tool. This approach works well for both apps. But this is a very fragile way of automating interactions—if windows are inadvertently moved the automation will break. So, there’s definitely room for improvement.&lt;/p&gt;

&lt;h2 id=&quot;going-deeper&quot;&gt;Going Deeper&lt;/h2&gt;

&lt;p&gt;According to period Apple documentation (&lt;a href=&quot;https://www.google.co.uk/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=&amp;amp;ved=2ahUKEwiIr_OAzYXwAhXErHEKHR_sAcYQFjAAegQIChAD&amp;amp;url=https%3A%2F%2Fdeveloper.apple.com%2Flegacy%2Flibrary%2Fdocumentation%2Fmac%2Fpdf%2FInterapplication_Communication%2FIntro_to_IAC.pdf&amp;amp;usg=AOvVaw0WKA5J59562fzTuOMZ58PG&quot;&gt;PDF&lt;/a&gt;, &lt;a href=&quot;http://mirror.informatimago.com/next/developer.apple.com/documentation/mac/IAC/IAC-94.html&quot;&gt;HTML&lt;/a&gt;) a means of automation was introduced in System 7:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The interapplication communication (IAC) architecture provides a standard and extensible mechanism for communication among Macintosh applications. The IAC architecture makes it possible for your application to&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;provide automated copy and paste operations between your application and other applications&lt;/li&gt;
    &lt;li&gt;be manipulated by means of scripts&lt;/li&gt;
    &lt;li&gt;send and respond to Apple events&lt;/li&gt;
    &lt;li&gt;send and respond to high-level events other than Apple events&lt;/li&gt;
    &lt;li&gt;read and write blocks of data between applications&lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sounds perfect—my idea of a good time!&lt;/p&gt;

&lt;h2 id=&quot;apple-events&quot;&gt;Apple Events&lt;/h2&gt;

&lt;p&gt;To support AppleScript, apps were required to offer suites of supported messages and mechanisms. These are advertised through the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;aete&lt;/code&gt; resource. ResEdit shows this data as raw hex, unless you install a template to enable it to make sense of it. Resorcerer supports it out of the box. There are a bunch of other tools that can display the data in a human readable way such an Apple-created &lt;a href=&quot;https://staticky.com/mirrors/ftp.apple.com/developer/Development_Kits/AppleScript/Development_Tools/Aete_Editor_Stack_1.0b3/&quot;&gt;HyperCard stack&lt;/a&gt;, a third-party app called &lt;a href=&quot;https://macintoshgarden.org/apps/eightyrez&quot;&gt;EightyRez&lt;/a&gt;, and automation tool &lt;a href=&quot;https://macintoshgarden.org/apps/quickeys-353&quot;&gt;QuicKeys&lt;/a&gt; to name just a few.&lt;/p&gt;

&lt;p&gt;QuicKeys sounded ideal as it lets me query the data, using a set of dropdown menus, and use it to specify automation to try out the Apple Events way of selecting a tool. It worked first time! But it was slow, and there was a distracting loss of window focus as the macro was executed.&lt;/p&gt;

&lt;p&gt;In search of something better turned to my favourite classic automation tool: KeyQuencer. I’d previously searched trough various archives for any available macros, so had a vague memory there was something out there I might be able to use. I dug up AESend, an Apple Events extension for KeyQuencer.&lt;/p&gt;

&lt;p&gt;I used QuicKeys GUI to set up the initial Apple Events call, as it allows you to pick options from drop-down lists. Then I used the Capture AE control panel to decode the Apple Events call into something human readable that I could adapt for use in KeyQuencer. I’d still take that approach for any new Apple Events.&lt;/p&gt;

&lt;p&gt;The result was much faster Apple Events sending and no distracting window focus flickering.&lt;/p&gt;

&lt;h2 id=&quot;two-in-one&quot;&gt;Two-in-One&lt;/h2&gt;

&lt;p&gt;The end result is a macro of two parts: the first section operates artWORKS using Apple Events, continuing without complaint if the app is not open, and the second section operates UltraPaint using simple mouse clicks.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/automating-apple-events.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;Example of a KeyQuencer Macro that works in both artWORKS and UltraPaint&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I plan to adding support for Canvas 3.x at some point as this shares Apple Events support with artWORKS.&lt;/p&gt;

&lt;h2 id=&quot;investigation&quot;&gt;Investigation&lt;/h2&gt;

&lt;p&gt;According to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;aete&lt;/code&gt; resource description in both artWORKS and Canvas, selection of Internal Tools using Apple Events is limited to 10 seemingly random tools. This made no sense to me, so I tried specifying higher tools and this experimentation proved that all 18 internal tools are indeed available. I guess the description had been truncated at some point?&lt;/p&gt;

&lt;p&gt;Some time later I read “The Automatic Mac” again and it shows a more complete list of tool values! The order seems to be based on the tool palette in Canvas.&lt;/p&gt;

&lt;p&gt;Even so, I went the extra mile to complete a list of both internal and external tools, shown below.&lt;/p&gt;

&lt;h3 id=&quot;internal-tools-btol&quot;&gt;Internal Tools (btol)&lt;/h3&gt;

&lt;table id=&quot;deneba-btol&quot;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Name&lt;/th&gt;
      &lt;th&gt;shor&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;ArcRect&lt;/td&gt;
      &lt;td&gt;7&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Arrow&lt;/td&gt;
      &lt;td&gt;1&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;BezierCurve&lt;/td&gt;
      &lt;td&gt;10&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Brush&lt;/td&gt;
      &lt;td&gt;14&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Eraser&lt;/td&gt;
      &lt;td&gt;17&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Free Hand&lt;/td&gt;
      &lt;td&gt;8&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Lasso&lt;/td&gt;
      &lt;td&gt;11&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Line&lt;/td&gt;
      &lt;td&gt;3&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Marquee&lt;/td&gt;
      &lt;td&gt;12&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Oval&lt;/td&gt;
      &lt;td&gt;6&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Paint Bucket&lt;/td&gt;
      &lt;td&gt;15&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Paint Object Creator&lt;/td&gt;
      &lt;td&gt;18&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Pencil&lt;/td&gt;
      &lt;td&gt;16&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Polygon&lt;/td&gt;
      &lt;td&gt;9&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Rect&lt;/td&gt;
      &lt;td&gt;4&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;RoundRect&lt;/td&gt;
      &lt;td&gt;5&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Spray Can&lt;/td&gt;
      &lt;td&gt;13&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Text&lt;/td&gt;
      &lt;td&gt;2&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;external-tools-etol&quot;&gt;External Tools (etol)&lt;/h3&gt;

&lt;table id=&quot;deneba-etol&quot;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Name&lt;/th&gt;
      &lt;th&gt;long&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Coil&lt;/td&gt;
      &lt;td&gt;CoiL&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Concentric Circles&lt;/td&gt;
      &lt;td&gt;CCir&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Cube&lt;/td&gt;
      &lt;td&gt;Cube&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Cylinder&lt;/td&gt;
      &lt;td&gt;cyln&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Dimensioning&lt;/td&gt;
      &lt;td&gt;DIMN&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Doughnuts&lt;/td&gt;
      &lt;td&gt;doug&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Fractals&lt;/td&gt;
      &lt;td&gt;Flin&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Gradient Fill&lt;/td&gt;
      &lt;td&gt;ObFl&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;GridMaker&lt;/td&gt;
      &lt;td&gt;grid&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Mover&lt;/td&gt;
      &lt;td&gt;MovE&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Multigon&lt;/td&gt;
      &lt;td&gt;NGON&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Namestamp&lt;/td&gt;
      &lt;td&gt;NamE&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Parallel Lines&lt;/td&gt;
      &lt;td&gt;Paln&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Point Rotate&lt;/td&gt;
      &lt;td&gt;PtRt&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;QuickTime&lt;/td&gt;
      &lt;td&gt;QkTm&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Registration Marks&lt;/td&gt;
      &lt;td&gt;regP&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Resistor&lt;/td&gt;
      &lt;td&gt;ResT&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Sounder&lt;/td&gt;
      &lt;td&gt;sndT&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Spiral&lt;/td&gt;
      &lt;td&gt;Spir&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Split&lt;/td&gt;
      &lt;td&gt;Splt&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Star&lt;/td&gt;
      &lt;td&gt;STAR&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Timestamp&lt;/td&gt;
      &lt;td&gt;TimE&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;related-posts&quot;&gt;Related posts&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/17/turning-an-ipad-pro-into-the-ultimate-classic-macintosh&quot;&gt;Turning an iPad Pro into the Ultimate Classic Macintosh&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/21/building-basiliskii-for-ios/&quot;&gt;How to install BasiliskII on your iPad&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Exploring Custom Keyboards and Automation&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/03/28/changing-the-size-of-toolbar-items-using-resedit/&quot;&gt;Optimising Macintosh app toolbars for touch&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/24/macintosh-drawing-software-compared/&quot;&gt;Macintosh drawing software compared&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/25/mixing-external-tools-across-deneba-software/&quot;&gt;Mixing External Tools across Deneba software&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/30/my-system-7-software-choices/&quot;&gt;My System 7 software choices&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/05/03/interoperability-of-system-7-and-ios/&quot;&gt;About the interoperability of System 7 and iOS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 19 Apr 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/04/19/automating-interactions-using-apple-events/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/04/19/automating-interactions-using-apple-events/</guid>
        </item>
      
    
      
        <item>
          <title>Turning an iPad Pro into the Ultimate Classic Macintosh</title>
          <description>&lt;p&gt;I’ve started work on the next in my &lt;a href=&quot;/tag/1bitwoodblocks/&quot;&gt;1-bit Woodblocks&lt;/a&gt; series: “Tekagami” (Ito Shinsui’s “Hand Mirror”). So it’s a good time to talk about how I turned an iPad Pro into the ultimate Classic Macintosh.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/ultimate-classic-macintosh-1.jpg&quot; alt=&quot;JPG&quot; title=&quot;One of my drawings in Deneba UltraPaint on System 7, running in a Macintosh emulator on an iPad Pro&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;emulators&quot;&gt;Emulators&lt;/h2&gt;

&lt;p&gt;Both Macintosh emulators available on iOS we’re ported by &lt;a href=&quot;https://Twitter.com/maczydeco&quot; title=&quot;@maczydeco&quot;&gt;@maczydeco&lt;/a&gt; who has done an amazing job making them feel truly at home on iOS. Many thanks! They need to be built from source using Xcode but it’s a pretty straight forward process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mini vMac&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Supports System 1.1 to 7.5.5&lt;/li&gt;
  &lt;li&gt;Limited RAM and CPU emulation&lt;/li&gt;
  &lt;li&gt;File Sharing via bespoke method&lt;/li&gt;
  &lt;li&gt;No dynamic screen resolution changing&lt;/li&gt;
  &lt;li&gt;Odd interface using Control key shortcuts&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/zydeco/minivmac4ios&quot;&gt;Source code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;BasiliskII&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Supports System 7.0 to 8.1&lt;/li&gt;
  &lt;li&gt;Advanced RAM and CPU emulation&lt;/li&gt;
  &lt;li&gt;File Sharing via mapped folder&lt;/li&gt;
  &lt;li&gt;Dynamic screen resolutions through Monitors control panel, or automation&lt;/li&gt;
  &lt;li&gt;Native iOS interface for settings panel, negating all the issues with the desktop GUI&lt;/li&gt;
  &lt;li&gt;We have a winner!&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/zydeco/macemu/wiki/BasiliskII-for-iOS&quot;&gt;Source code&lt;/a&gt; (use the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ios&lt;/code&gt; branch)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;file-sharing&quot;&gt;File Sharing&lt;/h2&gt;

&lt;p&gt;This works a treat in both emulators, but the experience is better in BasiliskII.&lt;/p&gt;

&lt;p&gt;With Mini vMac you need to run a special file import app, and then whilst it’s open use iOS Share Sheet to send a file to Mini vMac. These extra steps are just enough friction to make the emulator annoying to use.&lt;/p&gt;

&lt;p&gt;With BasiliskII things are easier as it has a drive mapped to the app’s file sharing folder. You can use the Share Sheet in the same way as Mini vMac, but you can also simply copy/move a file to the BasiliskII folder and it will be accessible inside the emulator. The only gotcha with this approach is that you’re best moving the file to the emulated system’s main disk drive otherwise you’ll encounter various oddities with certain apps that don’t know how to cope with files located on this type of drive.&lt;/p&gt;

&lt;h2 id=&quot;screen-resolutions&quot;&gt;Screen Resolutions&lt;/h2&gt;

&lt;p&gt;The original Macintosh had a native screen resolution of 512×342.&lt;/p&gt;

&lt;p&gt;Conceptually, the iPad has a logical screen resolution of 1024×768, which when running in pixel doubled mode equates to 512×384. A pretty good match. Specifically, the native resolution varies according to the model of iPad or iPhone you are using.&lt;/p&gt;

&lt;p&gt;I use an iPad Pro 12.9” which has a native resolution of 2732×2048, pixel doubled that means 1366×1024, and pixel quadrupled 683×512. Targeting this ballpark of resolution means user interface elements will be around the &lt;a href=&quot;https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/adaptivity-and-layout/&quot;&gt;magic 44pt tappable area&lt;/a&gt;, so that fingertip interactions are accurate, predictable and enjoyable.&lt;/p&gt;

&lt;p&gt;Of course the iPad can flip between landscape and portrait orientations on demand, which means BasiliskII supporting the Monitors control panel is a big win.&lt;/p&gt;

&lt;p&gt;So I added a bunch of custom resolutions to the BasiliskII soure code to add support for both pixel-doubled and pixel-quadrupled resolutions, in both portrait and landscape, with and without room for the software keyboard. I can switch between these resolutions with keyboard shortcuts. Which leads nicely on to…&lt;/p&gt;

&lt;h2 id=&quot;custom-keyboards&quot;&gt;Custom Keyboards&lt;/h2&gt;

&lt;p&gt;Both emulators share the same software keyboard mechanism. The keyboard layouts are user-editable as JSON and &lt;a href=&quot;https://github.com/zydeco/macemu/tree/ios/BasiliskII/src/iOS/Keyboard%20Layouts&quot;&gt;compiled&lt;/a&gt; into a custom format.&lt;/p&gt;

&lt;p&gt;So I put together a &lt;a href=&quot;https://github.com/gingerbeardman/artworks-keyboard&quot;&gt;custom keyboard layout&lt;/a&gt; that can be used in either emulator that gives me quick thumb access to tools and shortcuts in my most used apps: artWORKS and UltraPaint. It works for both apps as they are closely related, sharing a lot of code and resources.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/ultimate-classic-macintosh-2.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;With this keyboard layout I’m not only relabelling the function keys, but also replacing some key codes to reposition keys for my own purposes. The apps don’t respond to function keys so I use macros and Apple Events to get things to work &lt;a href=&quot;/2021/04/19/automating-interactions-using-apple-events/&quot;&gt;as detailed in another post&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;how-does-the-experience-compare-to-a-real-macintosh&quot;&gt;How does the experience compare to a real Macintosh?&lt;/h2&gt;

&lt;p&gt;The most important aspect of this setup is that it runs System 7 and the various apps I use. That is the core of my classic Macintosh experience and the goal I had in mind. The hardware running System 7 is merely a conduit.&lt;/p&gt;

&lt;p&gt;That said, the iPad Pro is more portable, reliable and capable than my real Macintosh. That’s 30 years of hardware progress for you.&lt;/p&gt;

&lt;p&gt;The iPad’s display in particular is a huge differentiator—it can assume so many different resolutions it should be thought of as a collection of displays rather than just a single one.&lt;/p&gt;

&lt;p&gt;Apple Pencil is very similar in feel to my Wacom ArtPad II, but with the single huge improvement that you’re drawing directly on the screen. Drawing with an Apple Pencil on System 7 is every bit as good as drawing in a native iPad app.&lt;/p&gt;

&lt;p&gt;iOS is only a swipe away: download classic software using a modern web browser like Safari, expand archives more quickly with Files or Documents, watch videos picture-in-picture, search your Inside Macintosh PDFs in Books, listen to streaming music, and so many other things that aren’t doable (or at least are extremely difficult to do) on a real classic Macintosh.&lt;/p&gt;

&lt;p&gt;Bluetooth keyboards just work. The new/recent mouse pointer support in iOS also works. You could even plug the iPad into an external display to go full circle back to a desktop computer.&lt;/p&gt;

&lt;p&gt;This setup gives me the best of both old and new worlds, and that’s why I refer to it as the Ultimate Classic Macintosh.&lt;/p&gt;

&lt;h3 id=&quot;related-posts&quot;&gt;Related posts&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Turning an iPad Pro into the Ultimate Classic Macintosh&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/21/building-basiliskii-for-ios/&quot;&gt;How to install BasiliskII on your iPad&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/19/automating-interactions-using-apple-events/&quot;&gt;Exploring Custom Keyboards and Automation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/03/28/changing-the-size-of-toolbar-items-using-resedit/&quot;&gt;Optimising Macintosh app toolbars for touch&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/24/macintosh-drawing-software-compared/&quot;&gt;Macintosh drawing software compared&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/25/mixing-external-tools-across-deneba-software/&quot;&gt;Mixing External Tools across Deneba software&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/04/30/my-system-7-software-choices/&quot;&gt;My System 7 software choices&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2021/05/03/interoperability-of-system-7-and-ios/&quot;&gt;About the interoperability of System 7 and iOS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;elsewhere&quot;&gt;Elsewhere&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;2021-03-29—&lt;a href=&quot;https://www.macobserver.com/cool-stuff-found/emulating-mac-plus-ios/&quot;&gt;The Mac Observer&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2021-04-18—&lt;a href=&quot;https://news.ycombinator.com/item?id=26854990&quot;&gt;Hacker News&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2021-04-19—&lt;a href=&quot;https://boingboing.net/2021/04/19/ipad-pro-turned-into-the-best-classic-mac-there-ever-was.html&quot;&gt;Boing Boing&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2021-04-19—&lt;a href=&quot;https://www.idownloadblog.com/2021/04/19/ipad-pro-classic-macintosh-emulator/&quot;&gt;iDownloadBlog&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2021-04-19—&lt;a href=&quot;https://www.loopinsight.com/2021/04/19/turning-an-ipad-pro-into-the-ultimate-classic-macintosh/&quot;&gt;The Loop&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2021-04-22—&lt;a href=&quot;https://www.fredzone.org/et-si-vous-transformiez-votre-ipad-en-macintosh-portable-2828&quot;&gt;FredZone&lt;/a&gt; (in French)&lt;/li&gt;
  &lt;li&gt;2021-04-23—&lt;a href=&quot;https://gizmodo.com/this-artist-turned-their-ipad-pro-into-a-classic-macint-1846749495&quot;&gt;Gizmodo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2021-04-23—&lt;a href=&quot;https://pxlnv.com/linklog/classic-macintosh-painting/&quot;&gt;Pixel Envy&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;2021-04-26—&lt;a href=&quot;https://www.igen.fr/ipad/2021/04/un-ipad-pro-sous-systeme-7-pour-dessiner-en-noir-et-blanc-122071&quot;&gt;iGeneration&lt;/a&gt; (in French)&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 17 Apr 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/04/17/turning-an-ipad-pro-into-the-ultimate-classic-macintosh/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/04/17/turning-an-ipad-pro-into-the-ultimate-classic-macintosh/</guid>
        </item>
      
    
      
        <item>
          <title>History of DenebaCAD</title>
          <description>&lt;p&gt;I recently stumbled across a series of Facebook posts about the origins of DenebaCAD, from humble beginnings as MasterCAD on Atari ST, of all unlikely places. The app still exists today as DCAD VectorSpace. Here I provide the story translated from Spanish into English.&lt;/p&gt;

&lt;!--more--&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Year&lt;/th&gt;
      &lt;th&gt;Title&lt;/th&gt;
      &lt;th&gt;Platform&lt;/th&gt;
      &lt;th&gt;Distribution&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;1988&lt;/td&gt;
      &lt;td&gt;MasterCAD&lt;/td&gt;
      &lt;td&gt;Atari ST&lt;/td&gt;
      &lt;td&gt;Retail&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;1989&lt;/td&gt;
      &lt;td&gt;User’s CAD&lt;/td&gt;
      &lt;td&gt;Macintosh&lt;/td&gt;
      &lt;td&gt;Beta&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;1991&lt;/td&gt;
      &lt;td&gt;ArchiDOT 2.0&lt;/td&gt;
      &lt;td&gt;Macintosh&lt;/td&gt;
      &lt;td&gt;Retail&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;1992&lt;/td&gt;
      &lt;td&gt;ArchiDOT 3.0&lt;/td&gt;
      &lt;td&gt;Macintosh&lt;/td&gt;
      &lt;td&gt;Retail&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;1997&lt;/td&gt;
      &lt;td&gt;DenebaCAD&lt;/td&gt;
      &lt;td&gt;Macintosh&lt;/td&gt;
      &lt;td&gt;Retail&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;This breakthrough CAD software was created by Hernán Pisani at INDI C.A. (Calle Madrid, Qta. El Pilar, Las Mercedes, Caracas, Venezuela).&lt;/p&gt;

&lt;p&gt;The below is taken from &lt;a href=&quot;https://www.facebook.com/page/226466162072375/search/?q=archidot&quot;&gt;Metamorfosis 3D on Facebook&lt;/a&gt; with the text presented in full below, albeit translated from Spanish using DeepL.&lt;/p&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;b&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;c&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;d&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;e&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;f&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;f&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;f&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/history-of-deneba-cad-1.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/history-of-deneba-cad-1.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/history-of-deneba-cad-2.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/history-of-deneba-cad-2.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/history-of-deneba-cad-3.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/history-of-deneba-cad-3.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/history-of-deneba-cad-4.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/history-of-deneba-cad-4.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/history-of-deneba-cad-5.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/history-of-deneba-cad-5.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/history-of-deneba-cad-6.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/history-of-deneba-cad-6.jpg&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;f&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 82%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__staticimage,
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}

.carousel__activator:nth-of-type(3):checked ~ .carousel__track {
  -webkit-transform: translateX(-200%);
          transform: translateX(-200%);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__slide:nth-of-type(3) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__controls:nth-of-type(3) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(3) {
  opacity: 1;
}

.carousel__activator:nth-of-type(4):checked ~ .carousel__track {
  -webkit-transform: translateX(-300%);
          transform: translateX(-300%);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__slide:nth-of-type(4) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__controls:nth-of-type(4) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(4) {
  opacity: 1;
}

.carousel__activator:nth-of-type(5):checked ~ .carousel__track {
  -webkit-transform: translateX(-400%);
          transform: translateX(-400%);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__slide:nth-of-type(5) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__controls:nth-of-type(5) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(5) {
  opacity: 1;
}

.carousel__activator:nth-of-type(6):checked ~ .carousel__track {
  -webkit-transform: translateX(-500%);
          transform: translateX(-500%);
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__slide:nth-of-type(6) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__controls:nth-of-type(6) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(6) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(3) {
  -webkit-transform: translateX(200%) translateZ(0);
          transform: translateX(200%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(4) {
  -webkit-transform: translateX(300%) translateZ(0);
          transform: translateX(300%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(5) {
  -webkit-transform: translateX(400%) translateZ(0);
          transform: translateX(400%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(6) {
  -webkit-transform: translateX(500%) translateZ(0);
          transform: translateX(500%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(3),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(3) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(4),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(4) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(5),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(5) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(6),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(6) {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;.carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

&lt;blockquote&gt;
  &lt;p&gt;In 1988 and MasterCAD was sold to the world by several @ATARI distributors.
MasterCAD was present in several industrialized countries and version 2.0 was presented at the COMDEX in Las Vegas from November 14 to 19, 1988.
In that year the program was reviewed in different specialized publications such as ST WORLD of England, ST INFORMER, STAR, CURRENT NOTES of the United States totaling 17 pages of dedication by them.
Due to the limited presence of Atari computers in the professional world, despite the power of the Atari 1040 ST, it was decided to opt for the support of the Apple Latin America initiative for local developers and an agreement was reached with Atari Venezuela leaving them the MasterCAD product in the ATARI environment as far as the development had reached and continue with the technology they had developed in Macintosh, which was undoubtedly a larger market.
Thus began the development of a beta version of ArchiDOT which they called User’sCAD, a considerably more powerful and user friendly product.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;In 1989 the development of the pilot project of a product that was thought to be called user User’sCAD and that later would be launched on the market under the name of ArchiDOT (Architectural Design Oriented Tool) began.
Already here it was realized that the development of the product should be oriented only to architectural design and not pretend to solve problems of other engineering, in order not to complicate the tool pretending to also solve different thought processes and running the risk that the tool would no longer be intuitive.
The program was based on Mac II and Mac SE hardware with the support of the A.C.E. program of APPLE Corp represented in Venezuela by PLUS SISTEMAS.
This development, still in Alpha phase, was presented at the WORLWIDE DEVELOPERS CONFERENCE held in San Jose California in May 1989, receiving comments of praise from the representative of APPLE Latin America and other members of the Apple Staff as well as from the representatives of the Tecnológico de Monterrey.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;In 1990 the CADD Room was inaugurated at the Simon Bolivar University.
Hernan to date had spent 20,000.00 architect-hours of analysis and 11,000.00 hours of programming accumulated from the origin to User’sCAD, an architecture-oriented CAD.
Its version ß3 participated in the Latin American Software contest in May 1990, competing with the finished applications and being in sixth place with mention (first place in CAD), receiving comments of praise from Apple Computer’s staff representatives. In December 1990 it was presented with a booth at the DATA 90 exhibition in Miami, Florida. User’sCAD was selected in 1991 as the resident application in the laboratories of advanced design techniques at the School of Architecture of the Simon Bolivar University, Caracas, as a subject of the curriculum for two quarters.
At that time the application, for marketing and identification reasons, the name User’sCAD was replaced by ArchiDOT 2.0 (Architectural Design Oriented Tool).
In Venezuela alone, 150 architecture and construction companies successfully produced drawings with the program and
successfully with Hernán’s program and consulting services.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;In 1992 a work done in ArchiDOT was presented at Harvard University.
Diego Diaz, using a Mac IIci of the time and ArchiDOT version 3.0, presented his independent study work as part of his master’s degree at Harvard University and received an evaluation and recommendation of the software by the computer lab of the GSD (Graduate School of Design).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;In 1993 CADSOFT, the company founded by Hernan, starts again the international marketing with the opening of the Spanish market and ArchiDOT passes the necessary quality control tests for this demanding market.
Our distributor in Spain: The company Microgestió in Barcelona is in charge of distributing the software in their authorized Apple stores.
On the other hand, also in 1993, Architect Carlos Pollak (Head of CADD USB Room) recently presented a paper at the World Congress of Architectural Education (Prague 1993) on the use of ArchiDOT in design education. As a result of the good role played by the product, Apple Czech Republic showed interest in distributing it in that country.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;Between 1994 and 1995 ArchiDOT was shown to several software houses in the United States and attracted the interest of Deneba Software.
ArchiDOT was written up to that time in Symantec Pascal, a good language that was used to its full potential but was clearly insufficient for the development of a world class CAD version.
They ported, through the use of the PtoC converter, the Pascal code and the mathematical algorithms of ArchiDOT to the C++ language in its implementation “Code Warrior” of Metrowerks, to give birth to a much superior application in speed and performance, generating laboratory versions that were tested by several users among which I was. It was amazing at that time the image quality that we could achieve with that version that could only be surpassed with render engines years later.
The conversion process from Pascal to C++ was in charge of Eng. Federico Zappi.
The next step was the development of the new interface that was in charge of Architect Hernan Pisani and Mr. Doug Levy, vice-president of Deneba Software. All this happened after signing a publishing contract with Deneba Software, which gave birth to Deneba CAD.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 09 Apr 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/04/09/history-of-deneba-cad/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/04/09/history-of-deneba-cad/</guid>
        </item>
      
    
      
        <item>
          <title>Phosphor Essence</title>
          <description>&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Photoshop 3.0 (1994) Monitor Setup, Phosphors reads like a wish list of the professional CRTs now adored by retro gamers:&lt;br /&gt;&lt;br /&gt;- Barco&lt;br /&gt;- Hitachi&lt;br /&gt;- Ikegami&lt;br /&gt;- Trinitron &lt;a href=&quot;https://t.co/VJLkRl7WgR&quot;&gt;pic.twitter.com/VJLkRl7WgR&lt;/a&gt;&lt;/p&gt;&amp;mdash; Matt Sephton🎴 (@gingerbeardman) &lt;a href=&quot;https://twitter.com/gingerbeardman/status/1379843828992069632?ref_src=twsrc%5Etfw&quot;&gt;April 7, 2021&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 07 Apr 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/04/07/phosphor-essence/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/04/07/phosphor-essence/</guid>
        </item>
      
    
      
        <item>
          <title>UltraPaint Manual</title>
          <description>&lt;p&gt;I received a package from America: the 30-year-old manual for UltraPaint, Deneba Systems’ Macintosh graphics program. It doesn’t get much more exciting for me than this!&lt;/p&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div id=&quot;carousel0&quot; class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0b&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0c&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;0d&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0d&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0c&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0d&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;0c&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;0a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/ultrapaint-manual-1.JPG&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/ultrapaint-manual-1.JPG&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/ultrapaint-manual-2.JPG&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/ultrapaint-manual-2.JPG&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/ultrapaint-manual-3.JPG&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/ultrapaint-manual-3.JPG&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/ultrapaint-manual-4.JPG&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/ultrapaint-manual-4.JPG&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0b&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0c&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;0d&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 100%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}

.carousel__activator:nth-of-type(3):checked ~ .carousel__track {
  -webkit-transform: translateX(-200%);
          transform: translateX(-200%);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__slide:nth-of-type(3) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__controls:nth-of-type(3) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(3) {
  opacity: 1;
}

.carousel__activator:nth-of-type(4):checked ~ .carousel__track {
  -webkit-transform: translateX(-300%);
          transform: translateX(-300%);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__slide:nth-of-type(4) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__controls:nth-of-type(4) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(4) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(3) {
  -webkit-transform: translateX(200%) translateZ(0);
          transform: translateX(200%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(4) {
  -webkit-transform: translateX(300%) translateZ(0);
          transform: translateX(300%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(3),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(3 {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(4),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(4 {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;#carousel0 .carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

&lt;p&gt;I love how the Option key in printed material from this era looks more like a 2-way switch symbol from an electrical circuit diagram than it does today.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/ultrapaint-manual-option-key.JPG&quot; alt=&quot;JPG&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;similar-books&quot;&gt;Similar Books&lt;/h2&gt;

&lt;p&gt;The contents of the manual are very naïve compared to today, talking you through how to use menu items and dialog boxes. UltraPaint (and it’s follow-up artWORKS) was a sister app to Canvas. If you’re looking for something with the same tone and content as the manual, check out Deke McClelland’s &lt;a href=&quot;https://archive.org/details/canvas30book00mccl&quot;&gt;Canvas 3.0: The Book&lt;/a&gt; over at Internet Archive.&lt;/p&gt;

&lt;h2 id=&quot;dear-reader&quot;&gt;Dear Reader&lt;/h2&gt;

&lt;p&gt;If by chance you have some old Deneba Systems software for Macintosh that you’d be happy to sell then please &lt;a href=&quot;https://www.gingerbeardman.com&quot;&gt;get in touch&lt;/a&gt;. Specifically I’d like to buy copies of UltraPaint, artWORKS and Canvas 3.0 or 3.5. I don’t mind what condition they are in, I’m sure it adds character!&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 06 Apr 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/04/06/ultrapaint-manual/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/04/06/ultrapaint-manual/</guid>
        </item>
      
    
      
        <item>
          <title>Changing the size of toolbar items using ResEdit</title>
          <description>&lt;p&gt;I just finished increasing the size of toolbar icons in Deneba artWorks from 24x16 to 24x24.&lt;/p&gt;

&lt;p&gt;Easily done by finding the dialog that contains these icons, and resizing the canvas of each related PICT.&lt;/p&gt;

&lt;p&gt;Several trips between ResEdit and Photoshop (version 1.0!) and I was done.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/macintosh-toolbar-resedit-1.png&quot; alt=&quot;PNG&quot; title=&quot;Toolbar size before and after editing&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This is to make the tool buttons easier to tap with my thumb when running System 7 on iPad.&lt;/p&gt;

&lt;p&gt;I love this “hackable” nature of early Macintosh systems. Palm OS is very similar in that regard.&lt;/p&gt;

&lt;p&gt;Why moan about an app not being to your liking when you can DIY!?&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/macintosh-toolbar-resedit-3.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;Editing the image of a toolbar item using ResEdit&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 28 Mar 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/03/28/changing-the-size-of-toolbar-items-using-resedit/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/03/28/changing-the-size-of-toolbar-items-using-resedit/</guid>
        </item>
      
    
      
        <item>
          <title>Asanegami (Morning Hair)</title>
          <description>&lt;p&gt;Second in my series &lt;a href=&quot;/tag/1bitwoodblocks/&quot;&gt;1-bit Woodblocks&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I’ve just finished “Asanegami” (Morning Hair) so I thought I’d go into a few of my favourite details!&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;eyes&lt;/li&gt;
  &lt;li&gt;eyebrows&lt;/li&gt;
  &lt;li&gt;background&lt;/li&gt;
  &lt;li&gt;lips&lt;/li&gt;
  &lt;li&gt;comb/history&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I spent a long time adding and refining eye details, my reasoning being that these are the first thing you look at.&lt;/p&gt;

&lt;p&gt;Also I went without “blusher” skin tone shading around the eyes, the amount of which varies depending on which impression of the original you’re looking at.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/compare-1bit-asanegami-eye.png#compare&quot; alt=&quot;PNG&quot; /&gt; &lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/compare-1bit-asanegami-eye-orig.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The eyebrows were quite tricky, I tried layering multiple dither patterns but was never happy with how they looked. In the end I cheated by copying sections from the shadowy area lower down the image that had just the right gradient! Everything is a remix.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/compare-1bit-asanegami-eyebrow.png#compare&quot; alt=&quot;PNG&quot; /&gt; &lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/compare-1bit-asanegami-eyebrow-orig.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The original background is quite busy. I tried being faithful to it but I was never happy with how it looked. Too noisy.&lt;/p&gt;

&lt;p&gt;So I used one of my own “noise” dithered patterns. I’m quite proud of these patterns and wonder if they are unique? They strike a good balance of order/chaos.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/compare-1bit-asanegami-bg.png#compare&quot; alt=&quot;PNG&quot; /&gt; &lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/compare-1bit-asanegami-bg-orig.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;On most impressions of Morning Hair the lips are a graduated pink fade, so I spent a while finding two complementary dither patterns that would give the same effect. Getting the exact shape of the lips was the moment I realised I was on the home straight with this drawing.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/compare-1bit-asanegami-lips.png#compare&quot; alt=&quot;PNG&quot; /&gt; &lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/compare-1bit-asanegami-lips-orig.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;In 1930 authorities considered “Morning Hair” too provocative and banned it under the Peace Preservation Law. Seventy of its hundred copies had sold and the remaining thirty were destroyed. 😱&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/compare-1bit-asanegami-comb.png#compare&quot; alt=&quot;PNG&quot; /&gt; &lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/compare-1bit-asanegami-comb-orig.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I thought it would be a fun modern twist to replace the comb with an iPhone showing Instagram!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/compare-1bit-asanegami-comb-ophone.png#compare&quot; alt=&quot;PNG&quot; /&gt; &lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/compare-1bit-asanegami-comb.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;As always I used a mix of old and new technology to create this piece.&lt;/p&gt;

&lt;p&gt;Old: UltraPaint on Macintosh System 7.1
New: Macintosh emulator on iPad Pro 12.9”&lt;/p&gt;

&lt;p&gt;My interpretation of Torii Kotondo’s “Morning Hair” will be available to purchase as print “1-bit Woodblock: Asanegami” very soon.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/1bit-asanegami.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 22 Mar 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/03/22/asanegami-morning-hair/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/03/22/asanegami-morning-hair/</guid>
        </item>
      
    
      
        <item>
          <title>Kamisuki (Woman Combing her Hair)</title>
          <description>&lt;p&gt;Woman Combing her Hair (Portrait of Kodaira Tomi) original by Hashiguchi Goyô, 1920. This work-in-progress by me, 2020–date. First in my &lt;a href=&quot;/tag/1bitwoodblocks/&quot;&gt;1-bit Woodblocks&lt;/a&gt; series.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/1bit-kamisuki-ultrapaint.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;My process involves both modern software (custom image processing tool &amp;amp; custom build of a Macintosh emulator) and old technology (1992 Macintosh Classic &amp;amp; period Wacom ArtPad II tablet, Deneba UltraPaint, Dave Theurer’s DeBabelizer) it’s such a zen experience.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/EwW7GeQWEAYXbGt.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This piece will be for sale as a print very soon.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/1bit-kamisuki.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;A little more about the back story of this piece. I was inspired by &lt;a href=&quot;https://twitter.com/SusanKare&quot;&gt;@SusanKare&lt;/a&gt;’s interpretation of Goyo’s “Woman Combing her Hair” drawn on the original Macintosh, featured as part of its launch, and later on the MacPaint packaging.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 15 Mar 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/03/15/kamisuki-woman-combing-her-hair/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/03/15/kamisuki-woman-combing-her-hair/</guid>
        </item>
      
    
      
        <item>
          <title>1-bit Woodblocks</title>
          <description>&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Classic Mac on iPad is also great in Portrait!&lt;br /&gt;&lt;br /&gt;Double height resolution scales to fit very closely.&lt;br /&gt;&lt;br /&gt;iPad Pro 12.9&amp;quot; = 2048x2732&lt;br /&gt;Macintosh Portrait @ 4x = 2048x2760&lt;br /&gt;&lt;br /&gt;Install Mini vMac on your iPad from the source on GitHub:&lt;a href=&quot;https://t.co/5t1iXBv0kc&quot;&gt;https://t.co/5t1iXBv0kc&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Thanks &lt;a href=&quot;https://twitter.com/maczydeco?ref_src=twsrc%5Etfw&quot;&gt;@maczydeco&lt;/a&gt;! &lt;a href=&quot;https://twitter.com/hashtag/MARCHintosh?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#MARCHintosh&lt;/a&gt; &lt;a href=&quot;https://t.co/yDj0MqkC5F&quot;&gt;pic.twitter.com/yDj0MqkC5F&lt;/a&gt;&lt;/p&gt;&amp;mdash; Matt Sephton🎴 (@gingerbeardman) &lt;a href=&quot;https://twitter.com/gingerbeardman/status/1375215086806138885?ref_src=twsrc%5Etfw&quot;&gt;March 25, 2021&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 13 Mar 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/03/13/1bit-woodblocks/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/03/13/1bit-woodblocks/</guid>
        </item>
      
    
      
        <item>
          <title>Two Old Llamasoft iPhone &amp; iPad games</title>
          <description>&lt;p&gt;Back in 2017 a large number of games and apps were rendered obsolete when iOS 11 removed 32-bit compatibility: the appocalypse. At that time I was still downloading apps into iTunes as backups, and seem to have put aside these two great Llamasoft games. What foresight!&lt;/p&gt;

&lt;p&gt;You should be able to side load them onto any jailbroken iOS device running iOS 10 or earlier, like an iPad mini (1st generation will be usable as-is; later generations may need to be downgraded), iPod touch (1st to 5th generation will be usable as-is; later generations may need to be downgraded) or similar iPhone.&lt;/p&gt;

&lt;p&gt;I’m still hoping for an easy way to play these on modern devices, so let me know if such a thing exists!&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/minotron-2112&quot;&gt;Minotron: 2112&lt;/a&gt;  (iPhone, iPod touch &amp;amp; iPad)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/gridrunner-ios&quot;&gt;Gridrunner&lt;/a&gt; (iPhone, iPod touch &amp;amp; iPad)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/playing-old-32-bit-ios-games-in-2021.jpg&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Edit, 2021-09-13: I’ve added a decrypted version of Minotron that should be easier to install on a jailbroken device.&lt;/p&gt;

&lt;p&gt;Edit, 2025-02-06: I can’t remember when exactly, but a kind somebody provided me with a decrypted version of Gridrunner which I’ve now uploaded to its page.&lt;/p&gt;

&lt;p&gt;For more info on generating a decrypted IPA file: &lt;a href=&quot;/2021/09/13/playing-old-32-bit-ios-games-in-2021/&quot;&gt;/2021/09/13/playing-old-32-bit-ios-games-in-2021/&lt;/a&gt; &lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 08 Mar 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/03/08/two-old-llamasoft-iphone-and-ipad-games/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/03/08/two-old-llamasoft-iphone-and-ipad-games/</guid>
        </item>
      
    
      
        <item>
          <title>Samurai Mech</title>
          <description>&lt;p&gt;I’ve been digging up old Macintosh games, and this search has resulted in &lt;a href=&quot;https://samuraimech.net&quot;&gt;the website for the classic Japanese game Samurai Mech&lt;/a&gt; coming back online after over a decade! Thanks Ritsuko! See: &lt;a href=&quot;https://www.patreon.com/posts/48174477&quot;&gt;patreon.com/posts/48174477&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Samurai Mech サムライ・メック is a Japanese sci-fi RPGs set in a future-medieval-space Japan. You assume the role of the eponymous Samurai Mech over the course of 40h of exploration/battle/puzzle gameplay.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/EvZTzbRXMAwX9t5.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;You can practice your swordsmanship at the dojo, and upgrade your Samurai Mech suit with parts obtained through winning battles. The first game has a whole city to explore whilst you solve a mystery involving a group of ninjas.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/EvZVB64XYAYlNZW.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Here is Samurai Mech running on my 1992 Macintosh Classic, using System 7.1.0 with Japanese Language Kit installed.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/EvZjDQmXAAkwY3K.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;In the sequel Samurai Mech II: Heaven サムライ・メックII・天 you are a bounty hunter in an archipelago colony at the edge of the universe. The setting includes an ancient castle, an amusement park, an adult ballroom, and a giant corporation. An all new scenario, more freedom, improved mech system, improved combat, and a choice of colour or mono graphics!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/EvZYUntWYAAtfuk.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;staff&quot;&gt;Staff&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Samurai Mech&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yukito Morikawa (森川幸人) &lt;br /&gt;
Shūji Nomaguchi (野間口修二)&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Star Odyssey&lt;/li&gt;
  &lt;li&gt;Jumping Flash series&lt;/li&gt;
  &lt;li&gt;Astronōka&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Akihiko Miura (三浦明彦)&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Otocky&lt;/li&gt;
  &lt;li&gt;Bombliss&lt;/li&gt;
  &lt;li&gt;Pokémon series&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Minoru Mukaiya (向谷実)&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Romance of the Three Kingdoms 2/3&lt;/li&gt;
  &lt;li&gt;Samurai Warriors 2&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Samurai Mech II adds the following notable Staff:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hitomi Amakawa (天川ひとみ)&lt;br /&gt;
Shigenori Miyamoto (宮本茂則)&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Jumping Flash series&lt;/li&gt;
  &lt;li&gt;Astronōka&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;timeline-of-related-games&quot;&gt;Timeline of related games&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;1992: Samurai Mech (HuLINKS)&lt;/li&gt;
  &lt;li&gt;1994: Samurai Mech II: Heaven (HuLINKS)&lt;/li&gt;
  &lt;li&gt;1994: Geograph Seal (EXACT)&lt;/li&gt;
  &lt;li&gt;1995: Jumping Flash! (EXACT)&lt;/li&gt;
  &lt;li&gt;1996: Jumping Flash! 2 (EXACT, MuuMuu Co Ltd)&lt;/li&gt;
  &lt;li&gt;1997: Ghost in the Shell (EXACT, Production I.G.)&lt;/li&gt;
  &lt;li&gt;1999: Pocket MuuMuu (Sugar &amp;amp; Rockets)&lt;/li&gt;
  &lt;li&gt;1999: Robbit Mon Dieu (Sugar &amp;amp; Rockets)&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 01 Mar 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/03/01/samurai-mech/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/03/01/samurai-mech/</guid>
        </item>
      
    
      
        <item>
          <title>Macintosh Classic logic board recap</title>
          <description>&lt;ul&gt;
  &lt;li&gt;Difficulty: 7/10&lt;/li&gt;
  &lt;li&gt;Cost: &amp;lt; £20&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I last used my Macintosh Classic a few years ago. At that point everything worked OK. Switching it on this month I find there’s no sound and it won’t boot. This is par for the course with these 30-year-old machines. Time for a service!&lt;/p&gt;

&lt;p&gt;I decided quite early on that I would not rush any part of this, which turned out to be the right decision!&lt;/p&gt;

&lt;p&gt;The first thing to do is to check that the PRAM battery hasn’t leaked or worse, exploded, which would cover the logic board in acid and would be uneconomical to repair.&lt;/p&gt;

&lt;p&gt;Took me a while to find my long torx bit to open up the Macintosh case. But good news - no battery leakage!&lt;/p&gt;

&lt;p&gt;I removed the 30-year-old battery and bought a replacement.&lt;/p&gt;

&lt;p&gt;Surprisingly the replacement battery (not pictured) was already 5 years old, manufactured 2017. Not ideal, but it’ll do for now.&lt;/p&gt;

&lt;p&gt;Next, I figured I would make a quick system disk as I had figured out that I could boot it from floppy disk if I held down Cmd+Alt+Shift+Del, which is the first odd thing.&lt;/p&gt;

&lt;p&gt;Trying to reset PRAM on boot resulting in nothing happening, and there was no startup chime. Two more odd things.&lt;/p&gt;

&lt;p&gt;Somebody suggested maybe the keyboard wasn’t working. I booted the System floppy and tested all keys and they were fine.&lt;/p&gt;

&lt;p&gt;Next, I disconnected the hard drive to see if anything changed and I was able to boot using the system ROM (a feature only ever found on this specific model). This gets me into a bare-bones System 6 and from here there’s a hidden way to reset PRAM. I did that and there was no change to symptoms.&lt;/p&gt;

&lt;p&gt;Time to stop delaying the inevitable and take a look at the capacitors. Having never seen a leaking capacitor before I thought that everything looked fine from a cursory glance at the PCB. But with some guidance from &lt;a href=&quot;https://68kmla.org/forums/&quot;&gt;68KMLA forum&lt;/a&gt;, and a bit more time, I could see that there was a thin film of almost transparent dried residue surrounding almost all the caps, and some corrosion at the caps near the main power connector. Recap is needed!&lt;/p&gt;

&lt;p&gt;Removing the capacitors is the big challenge. I don’t have any dedicated soldering stations or heat flow gear, just a portable soldering iron, a pencil soldering iron and a twinkle in my eye.&lt;/p&gt;

&lt;p&gt;I spent a few days looking at YouTube videos and asking for opinions on methods of removing capacitors. Under advice, I found a practice board in a dead AV AMP that had a gazillion capacitors and I used that to practice. In the end I decided I would use the “twist and go” method (that’s what I’m calling it!) which involved using long nose pliers to grab the capacitor from above, and whilst pushing towards the board gently rotating the capacitor back and forth around its centre point. On the practice board some caps were more difficult that others, but I never lifted a pad in some 20 or so capacitors.&lt;/p&gt;

&lt;p&gt;I’ve no doubt you could lift a pad if you used a different technique or you went about it recklessly, but I found this seemingly brutal method worked very well. In years gone by I would have rushed this part!&lt;/p&gt;

&lt;p&gt;If I can do it on a practice board successfully, on-demand, with one hand, it should be more than believable that it’s possible to do it successfully in better circumstances.&lt;/p&gt;

&lt;p&gt;On the Macintosh board they were much easier, and fewer, and I also never lifted a pad. I was left with the odd leg that was easily removed with some excess solder during the cleanup phase.&lt;/p&gt;

&lt;p&gt;In total 8 capacitors were in need of replacement, and I swapped them with tantalum capacitors which I understand will never need replacing in future. They look different, but I don’t mind that it makes it more obvious that they have been replaced IMHO.&lt;/p&gt;

&lt;p&gt;Oh, and I bought some new rosin/flux-core solder of a reputable brand, and that really improved my soldering technique and results compared to when I was using the old/cheap/free solder I had in my tool box. You get what you pay for!&lt;/p&gt;

&lt;p&gt;The results are not my finest work, but I would say above average and the machine is now booting well with sound and a faster replacement drive so we’re good to go!&lt;/p&gt;

&lt;p&gt;I picked up an extra 2MB of RAM from eBay to take this machine to a maximum of 4MB! That’s megabytes!&lt;/p&gt;

&lt;p&gt;All that remains is for me to configure my SD card with the apps and games I like to have around. I’m going for multiple System installs that I can switch between after a quick reboot. Plus Japanese support. This task is made easier and quicker by using emulators to do the hard work many times faster than hardware, and finally copy the prepared disk image onto the SD card.&lt;/p&gt;

&lt;p&gt;Then, at last, I will be able to play games on this little thing once more!&lt;/p&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;b&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;c&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;d&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/macintosh-classic-recap-1.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/macintosh-classic-recap-1.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/macintosh-classic-recap-2.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/macintosh-classic-recap-2.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/macintosh-classic-recap-3.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/macintosh-classic-recap-3.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/macintosh-classic-recap-4.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/macintosh-classic-recap-4.jpg&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 82%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__staticimage,
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}

.carousel__activator:nth-of-type(3):checked ~ .carousel__track {
  -webkit-transform: translateX(-200%);
          transform: translateX(-200%);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__slide:nth-of-type(3) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__controls:nth-of-type(3) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(3) {
  opacity: 1;
}

.carousel__activator:nth-of-type(4):checked ~ .carousel__track {
  -webkit-transform: translateX(-300%);
          transform: translateX(-300%);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__slide:nth-of-type(4) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__controls:nth-of-type(4) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(4) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(3) {
  -webkit-transform: translateX(200%) translateZ(0);
          transform: translateX(200%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(4) {
  -webkit-transform: translateX(300%) translateZ(0);
          transform: translateX(300%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(3),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(3) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(4),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(4) {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;.carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 20 Feb 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/02/20/macintosh-classic-logic-board-recap/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/02/20/macintosh-classic-logic-board-recap/</guid>
        </item>
      
    
      
        <item>
          <title>Review: A Little Bit of... Nintendo Touch Golf</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/546aa32a2609ee8acd21f7af1c614fc0/e67b3d718f0a17b4-6f/s2048x3072/20144b929630388d0f929e09819d0db65a3c614a.jpg&quot; data-orig-height=&quot;408&quot; data-orig-width=&quot;272&quot; data-media-key=&quot;546aa32a2609ee8acd21f7af1c614fc0:e67b3d718f0a17b4-6f&quot; alt=&quot;A Little Bit of... Nintendo Touch Golf&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Less is more.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A Little Bit of…&lt;/em&gt; was series of previously released retail DS games adapted to suit Nintendo’s &lt;em&gt;DSiWare&lt;/em&gt; download service. The idea for these “Chotto” games came from &lt;em&gt;Satoru Iwata&lt;/em&gt;, who said “I thought it would be good if there were a Chotto game series that you could play with little by little and interact with little by little in your life.”&lt;/p&gt;

&lt;p&gt;The games were adapted by refining one or more elements of the core gameplay to suit the concept of playing a little bit at a time over a long period. These changes were either overlooked by the press, or described as a bad thing, but closer inspection shows that the changes were well considered and well executed. And in the case of this particular game by a largely different team than the original game.&lt;/p&gt;

&lt;p&gt;I played through the &lt;em&gt;DSiWare&lt;/em&gt; version of this golf game some 10 years after it was released as I was intrigued how different it might be to the original cartridge release.&lt;/p&gt;

&lt;p&gt;The answer was a lot. And it turns out this &lt;em&gt;DSiWare&lt;/em&gt; version is a much better game as a result. It features a proper interactive tutorial rather than the still screens of the original, as well as a refined user interface with simpler power and putting display, an updated and improved version of the game engine with a higher frame-rate due do the increased CPU speed of the &lt;em&gt;Nintendo DSi&lt;/em&gt;, and an all new Challenge mode.&lt;/p&gt;

&lt;p&gt;Challenge mode, which replaces Championship Tour mode, introduces a method of levelling up that is focused on improving your golf technique. This adds a lot to the game and provides a method of increasing your player stats and unlocking additional courses. It includes 100 challenges at each of several different difficulty levels, totalling over 300 different challenges. They include such variations as: nearest to the pin, chip-in, limited strokes, single putt, total distance, limited time, competition (vs CPU), and limited clubs.&lt;/p&gt;

&lt;p&gt;This little version is also missing a bunch of courses and their associated music, replays, special shot, Wi-Fi features, and a few other small things. But they’re not essential to the experience so it’s not a big deal.&lt;/p&gt;

&lt;p&gt;With this tweaked version &lt;em&gt;T&amp;amp;E SOFT&lt;/em&gt; took a look at the existing game with fresh eyes, removed the stuff that made it needlessly complicated, and added a new mode that reinforces the core gameplay. It’s a more focused and better game as a result.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Ch5Ui4RLFbk&quot;&gt;Watch &lt;em&gt;Nintendo Touch Golf&lt;/em&gt; on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/true-swing-golf&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://t.umblr.com/redirect?z=https%3A%2F%2Fwww.nintendo.co.uk%2FIwata-Asks%2FIwata-Asks-Nintendo-DSi%2FVolume-6-A-little-bit-of-brain-training%2F1-Chotto-%2F1-Chotto--1049361.html&amp;amp;t=ZTM3ZTJjM2IzZmI4MWRjMTBkMmQwZGM0ZGU4YzZiMWUyM2E5MzZiZSwzYzY0NDgzMzgzMTMyZDY0M2ZmM2I2MWM5NGZjZjU4YmQ3MjA0YmFj&amp;amp;ts=1613041554&quot;&gt;Read the Iwata Asks about the Chotto series&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/download/no-intro-nintendo-nintendo-dsi-digital&quot;&gt;Download the DSiWare game at archive.org&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 08 Feb 2021 23:16:18 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/02/08/a-little-bit-of-nintendo-touch-golf/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/02/08/a-little-bit-of-nintendo-touch-golf/</guid>
        </item>
      
    
      
        <item>
          <title>Dither Studio update</title>
          <description>&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Added Ordered Dithering to my tool:&lt;br /&gt;&lt;br /&gt;- 2x2 Bayer&lt;br /&gt;- 3x3 Bayer&lt;br /&gt;- 4x4 Bayer *&lt;br /&gt;- 8x8 Bayer&lt;br /&gt;- 16x16 Bayer&lt;br /&gt;- 3x3 Dispersed&lt;br /&gt;- 4x4 Horizontal&lt;br /&gt;- 4x4 Vertical&lt;br /&gt;- 2x2 Crosshatch&lt;br /&gt;- 3x3 Crosshatch&lt;br /&gt;- 4x4 Crosshatch&lt;br /&gt;&lt;br /&gt;Noticed it makes JPG artefacts more visible, so I redid my test images as PNG! &lt;a href=&quot;https://t.co/fdUYzs9jeh&quot;&gt;pic.twitter.com/fdUYzs9jeh&lt;/a&gt;&lt;/p&gt;&amp;mdash; Matt Sephton🎴 (@gingerbeardman) &lt;a href=&quot;https://twitter.com/gingerbeardman/status/1357765389065854979?ref_src=twsrc%5Etfw&quot;&gt;February 5, 2021&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 05 Feb 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/02/05/dither-studio-update/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/02/05/dither-studio-update/</guid>
        </item>
      
    
      
        <item>
          <title>Nintendo’s first US trademark</title>
          <description>&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Nintendo&amp;#39;s first USA trademark, dated 4 Oct 1955: &lt;a href=&quot;https://t.co/9ONME6pgTL&quot;&gt;https://t.co/9ONME6pgTL&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The first use of the word &lt;a href=&quot;https://twitter.com/Nintendo?ref_src=twsrc%5Etfw&quot;&gt;@Nintendo&lt;/a&gt; in US press is a description of this trademark in the 8 Oct 1955 issue of &lt;a href=&quot;https://twitter.com/nytimes?ref_src=twsrc%5Etfw&quot;&gt;@nytimes&lt;/a&gt; (see quoted tweet)&lt;br /&gt;&lt;br /&gt;thanks to &lt;a href=&quot;https://twitter.com/suryongchan?ref_src=twsrc%5Etfw&quot;&gt;@suryongchan&lt;/a&gt; for digging digging this up! &lt;a href=&quot;https://t.co/XZhiotm5ZA&quot;&gt;https://t.co/XZhiotm5ZA&lt;/a&gt; &lt;a href=&quot;https://t.co/Uscxvbv0DP&quot;&gt;pic.twitter.com/Uscxvbv0DP&lt;/a&gt;&lt;/p&gt;&amp;mdash; Matt Sephton🎴 (@gingerbeardman) &lt;a href=&quot;https://twitter.com/gingerbeardman/status/1349755208813993989?ref_src=twsrc%5Etfw&quot;&gt;January 14, 2021&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 14 Jan 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/01/14/nintendo-s-first-us-trademark/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/01/14/nintendo-s-first-us-trademark/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: Happy New Year!</title>
          <description>&lt;p&gt;I hope you’re safe and well and wish you a great 2021. I’m back at it, and am confident this year will be the year of Daily Driver and more besides!&lt;/p&gt;

&lt;p&gt;Recent work on the game includes improvements to the physics of in-game objects and creation of yet more vehicles and levels.&lt;/p&gt;

&lt;p&gt;“The car’s the star”, as they say, so I have sunk untold hours into both the physics and graphics of many different cars to ensure that the depth of control and animation is enough to hold a players interest for the time I hope they will spend with my game. There’s no final vehicle line-up, as often some cars don’t look unique enough after the first rough model is tested in the game. But these two are keepers!&lt;/p&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;b&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/daily-driver-happy-new-year-a.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-happy-new-year-a.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/daily-driver-happy-new-year-b.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-happy-new-year-b.png&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 82%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__staticimage,
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2) {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;.carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

&lt;p&gt;Interestingly, both these vehicles show off one aspect of the game that I’ve not really talked about so far: reference and nods to classic games. Here we can see an RC car (whose antenna wobbles!) that is a nod to games like Re-volt, RC Revenge, Smash Cars, RC de Go!, Excite Truck, RC Pro-Am etc. And the forklift is a nod to Shenmue and the infamous New Yokosuka Harbor District.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-happy-new-year.gif#playdate&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 09 Jan 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/01/09/happy-new-year/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/01/09/happy-new-year/</guid>
        </item>
      
    
      
        <item>
          <title>Famicom Mahjong/Hanafuda controller USB keyboard mod</title>
          <description>&lt;ul&gt;
  &lt;li&gt;Difficulty: 7/10&lt;/li&gt;
  &lt;li&gt;Cost: &amp;lt; £20&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I play a lot of Hanafuda games. In the arcade these games share a control panel with Mahjong. It’s basically a keyboard featuring the first half of the alphabet, presented as a long row of keys in alphabetical order. This makes playing Arcade Hanafuda games a bit of a chore without a bunch of keyboard remapping and emulator faff.&lt;/p&gt;

&lt;p&gt;Some people were using arcade control panels connected to their PC. In Japan you can buy a custom electronics kit to make a USB Mahjong/Hanafuda controller, but it’s expensive at about €85 plus shipping and import duty. There had to be a better way!&lt;/p&gt;

&lt;p&gt;I saw that a couple of old Famicom Mahjong games by Capcom were bundled with a custom controller. It was essentially two controllers in one, so won’t work with my controller adapter cables. So I wondered how easy it would be to convert one to USB? Posting on a NES developer forum helped me verify that it should be possible.&lt;/p&gt;

&lt;p&gt;Christmas 2019 I bought a bunch of games from Japan and added a Famicom Mahjong controller to my order. It arrived, I put it on my to-do list, then a global pandemic happened.&lt;/p&gt;

&lt;p&gt;Almost a year later I picked it up and decided to figure it out. I would need a little Arduino, a usb cable with data and power, and I’d have to write some Arduino code to poll the buttons a couple of times every update. Back in 2019 nobody had done this mod so I was in my own.&lt;/p&gt;

&lt;p&gt;Just before I started to write code, I figured I’d do a quick Google search to see if anything had changed. And, unbelievably, somebody else had done this exact mod in February 2020 and open sourced their code. I thanked them and that meant the project was instantly half done.&lt;/p&gt;

&lt;p&gt;I bought an additional Pro Micro (Arduino compatible) and set it up on a breadboard that made it easier for me to wire up a prototype and check everything was working.&lt;/p&gt;

&lt;p&gt;Finally I cut the old controller cord and wired my new setup into the controller. It worked perfectly. I went back in to trim some supports and add some alternative reinforcements to prevent the controller bending and creaking.&lt;/p&gt;

&lt;p&gt;Using this controller makes playing these games so much easier, and I’ve discovered a couple of games that have made this well worth the time and investment.&lt;/p&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;b&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;c&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;d&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/hanafuda-controller-a-1.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/hanafuda-controller-a-1.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/hanafuda-controller-a-2.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/hanafuda-controller-a-2.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/hanafuda-controller-b-1.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/hanafuda-controller-b-1.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/hanafuda-controller-b-2.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/hanafuda-controller-b-2.jpg&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 82%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__staticimage,
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}

.carousel__activator:nth-of-type(3):checked ~ .carousel__track {
  -webkit-transform: translateX(-200%);
          transform: translateX(-200%);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__slide:nth-of-type(3) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__controls:nth-of-type(3) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(3) {
  opacity: 1;
}

.carousel__activator:nth-of-type(4):checked ~ .carousel__track {
  -webkit-transform: translateX(-300%);
          transform: translateX(-300%);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__slide:nth-of-type(4) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__controls:nth-of-type(4) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(4) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(3) {
  -webkit-transform: translateX(200%) translateZ(0);
          transform: translateX(200%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(4) {
  -webkit-transform: translateX(300%) translateZ(0);
          transform: translateX(300%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(3),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(3) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(4),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(4) {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;.carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 09 Jan 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/01/09/famicom-mahjong-hanafuda-controller-usb-keyboard-mod/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/01/09/famicom-mahjong-hanafuda-controller-usb-keyboard-mod/</guid>
        </item>
      
    
      
        <item>
          <title>Extracting images from Band-kun</title>
          <description>&lt;p&gt;I loaded the GRX file from Band-kun into GraphicConverter (macOS) as RAW 1-bit data and was delighted to see the graphics are uncompressed.&lt;/p&gt;

&lt;p&gt;This made it somewhat trivial to extract all the graphics, including some I’m yet to see in the game!&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Eqz2NbCXIAAf8O5.jpg&quot; alt=&quot;JPG&quot; title=&quot;GraphicConverter RAW import dialog&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 03 Jan 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/01/03/extracting-images-from-band-kun/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/01/03/extracting-images-from-band-kun/</guid>
        </item>
      
    
      
        <item>
          <title>Top 10 Games Played in 2020</title>
          <description>&lt;p&gt;Single tweet reviews of the best games I’ve played this year.&lt;/p&gt;

&lt;p&gt;All old, but gold.&lt;/p&gt;

&lt;h2 id=&quot;digitalglider-airman-ps1&quot;&gt;DigitalGlider Airman (PS1)&lt;/h2&gt;

&lt;p&gt;Immensely rewarding glider simulation with perfect difficulty progression and a lovely, mysterious vibe. Trying to play this as an arcade game won’t get you far - it requires minimal, accurate input with a lot of thinking and forward planning. My GOTY.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/EqrzuYzXcAA5kMy.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;touge-max-g-ps1&quot;&gt;Touge MAX G (PS1)&lt;/h2&gt;

&lt;p&gt;I’ve completed the Gymkhana mode in this: a set of driving skill challenges requiring precise control and faultless maneuvering around small courses laid out with gates and cones. I intend to go back for the main race mode. A superb (and difficult) game.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Eqr0SgbXcAIU5IT.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;the-italian-job-gc&quot;&gt;The Italian Job (GC)&lt;/h2&gt;

&lt;p&gt;The first game I played entirely through Dolphin emulator: glorious supersampled down to 640x480p over VGA. The game plays very well and has a story mode and an obstacle course “stunt” mode. Great driving and handling model at 60fps. An overlooked classic!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Eqr0jjBXAAAJqen.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;runabout-3-ps2--runabout-3d-3ds&quot;&gt;Runabout 3 (PS2) &amp;amp; Runabout 3D (3DS)&lt;/h2&gt;

&lt;p&gt;Reviewing these together because the 3DS game is effectively a remake of the PS2 one, with almost identical goals but with cleaner presentation and slightly less content. The PS2 game has slightly more humour and more collectables. Pick one.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Eqr1ODeXAAAmto4.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;flying-circus-ps2&quot;&gt;Flying Circus (PS2)&lt;/h2&gt;

&lt;p&gt;Radio controlled helicopter game with simulation and arcade handling models. Lots of fun secrets. My biggest gripe is that you need to play it through in one sitting to complete the main mode. But with one of the better copters that takes less than an hour.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Eqr19ZTXAAAZuBj.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;wrc-rally-evolved-ps2&quot;&gt;WRC Rally Evolved (PS2)&lt;/h2&gt;

&lt;p&gt;Astonishing attention to detail, plus a lot of things I’ve not seen before or since. Phenomenal handling. Can be persuaded to run in 480p using GSM and external scaler. Uneven computer results/timings lose it a little love.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Eqr2oGlXYAAVz9n.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;super-runabout-dc&quot;&gt;Super Runabout (DC)&lt;/h2&gt;

&lt;p&gt;The craziest in the series. I held off playing this for so long because the PAL version is slow, the NTSC-U version is faster and far more enjoyable. Features 2 scenarios with similar, but different, levels and goals. Marginally better than the PS2/3DS games.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Eqr3SX0XUAIIJ1c.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;sideswiped-ds&quot;&gt;Sideswiped (DS)&lt;/h2&gt;

&lt;p&gt;A little known game only released in Japan/USA. Crazy fast at times, manic, 60fps all the way. There’s racing, plus so much more. Some modes feel more like soccer. Great mini games. Tons of content. I wish they’d made Excite Truck DS with this engine!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Eqr4dpmW4AIDigu.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;runabout-2-ps1&quot;&gt;Runabout 2 (PS1)&lt;/h2&gt;

&lt;p&gt;The first Runabout was an innovative concept in a short, underdeveloped game. The sequel (made by Graphic Research, rather than Climax Ent.) fulfilled the promise of the original and took it to great heights, delivering an almost perfect game. Joint GOTY.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Eqr4nkCXEAABYB7.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 01 Jan 2021 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2021/01/01/top-10-games-played-in-2020/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2021/01/01/top-10-games-played-in-2020/</guid>
        </item>
      
    
      
        <item>
          <title>SkateBoarder Magazine</title>
          <description>&lt;p&gt;&lt;a href=&quot;https://archive.org/search.php?query=creator%3A%22TransWorld+Skateboarding%22&amp;amp;sort=titleSorter&amp;amp;and%5B%5D=mediatype%3A%22texts%22&quot;&gt;SkateBoarder Magazine (1964–1980) scans at Internet Archive&lt;/a&gt;, these include pages missing from the official website.&lt;/p&gt;

&lt;p&gt;Here’s a quick link to the famous Dogtown articles in these specific 9 issues: &lt;a href=&quot;https://archive.org/search.php?query=creator%3A%22TransWorld+Skateboarding%22&amp;amp;sort=titleSorter&amp;amp;and%5B%5D=mediatype%3A%22texts%22&amp;amp;and%5B%5D=subject%3A%22dogtown%20article%22&quot;&gt;2-2/5/6, 3-2/4/5/6, 4-1, 5-7&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 30 Dec 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/12/30/skateboarder-magazine/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/12/30/skateboarder-magazine/</guid>
        </item>
      
    
      
        <item>
          <title>EPOCH Instruction Manuals</title>
          <description>&lt;p&gt;A recent friendly nudge from &lt;a href=&quot;https://twitter.com/textfiles&quot;&gt;Jason Scott&lt;/a&gt; at the Internet Archive let me know that somebody had lost their manual for their 1981 Epoch Cassette Vision and tweeted EPOCH to see if they could help. But EPOCH did more than that, spending time to scan and upload &lt;a href=&quot;https://sv.epoch.jp/manuals&quot;&gt;manuals for all of their vintage consoles&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Mirroring these at Internet Archive was a nice bite-sized task to help burn off some of the Christmas fat and get things moving again over here. I went about it as follows (high level information only, comment or @ me on twitter if you’d like to know more):&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Download all PDFs locally using jDownloader (total=240)&lt;/li&gt;
  &lt;li&gt;Copy titles from Japanese listing, store in a file&lt;/li&gt;
  &lt;li&gt;DeepL translate Japanese titles to English, store in a second file&lt;/li&gt;
  &lt;li&gt;Write shell script to loop through filenames and collate titles etc into CSV ready for batch upload&lt;/li&gt;
  &lt;li&gt;Check CSV for errors and fix (there were mistakes in the original Japanese titles and/or DeepL translation)&lt;/li&gt;
  &lt;li&gt;Test batch upload using a single file, tweak script&lt;/li&gt;
  &lt;li&gt;Do the full batch upload using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ia&lt;/code&gt; CLI tool&lt;/li&gt;
  &lt;li&gt;Confirm any failures, fix and reprocess those in a second pass&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;My script ended up like this:&lt;/p&gt;

&lt;noscript&gt;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/0d665dff0d400af913ced679810544bd&quot;&gt;View the source code as a Gist&lt;/a&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;script src=&quot;https://gist.github.com/gingerbeardman/0d665dff0d400af913ced679810544bd.js&quot;&gt;&lt;/script&gt;

&lt;p&gt;After the first pass there were only a few errors: 2 corrupt PDFs that needed to be uploaded manually, 2 duplicate identifiers that I had failed to spot looking through the translations, and 1 identifier that had trailing spaces that I had missed during my finessing of the titles. Pretty good going, though!&lt;/p&gt;

&lt;p&gt;They’re now accessible at: &lt;a href=&quot;https://archive.org/search.php?query=identifier%3Aepoch-manual%2A&quot;&gt;archive.org/search.php?query=identifier%3Aepoch-manual%2A&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Have fun &amp;amp; stay safe!&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 26 Dec 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/12/26/epoch-instruction-manuals/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/12/26/epoch-instruction-manuals/</guid>
        </item>
      
    
      
        <item>
          <title>Band-kun バンドくん musician simulator (1990, KOEI)</title>
          <description>&lt;p&gt;I’ve been playing an old (1990, KOEI Co Ltd) Japanese NEC PC-9801 game バンドくん [Band-kun; Mr. Band; Band Man] where you start a band and have to recruit members, make some recordings and live a life of sex, drugs and rock’n’roll. It was also available for the Fujitsu FM Towns and Sharp X68000 Japanese personal computers.&lt;/p&gt;

&lt;h2 id=&quot;band-what&quot;&gt;Band-what?&lt;/h2&gt;

&lt;p&gt;Band-kun is a hybrid simulation/adventure/rhythm game. You explore a fictional city taking to various inhabitants, learning about the music and the music industry, recruiting band members and performing and recording music. You perform the music using mouse gestures, so it’s possible to ad-lib and receive better/worse results a little like playing a musical instrument. After recording you need mix the song in a studio, then get your friend Bob Marley to sell your CDs on the street corner, or figure out how to get the music played on the local radio station which is, of course, broadcasting from a zeppelin riding high above the city.&lt;/p&gt;

&lt;p&gt;You need to work dead-end jobs to pay your way, and repeat the recording/gigging process to work your way up through soul-destroying small club gigs to a big arena gig, and allegedly you can even die from the excess partying.&lt;/p&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;b&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;c&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;d&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;e&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;f&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;g&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;g&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;f&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;g&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;f&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/band-kun-01.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/band-kun-01.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/band-kun-02.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/band-kun-02.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/band-kun-03.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/band-kun-03.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/band-kun-04.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/band-kun-04.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/band-kun-05.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/band-kun-05.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/band-kun-06.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/band-kun-06.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/band-kun-07.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/band-kun-07.png&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;f&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;g&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 63%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__staticimage,
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}

.carousel__activator:nth-of-type(3):checked ~ .carousel__track {
  -webkit-transform: translateX(-200%);
          transform: translateX(-200%);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__slide:nth-of-type(3) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__controls:nth-of-type(3) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(3) {
  opacity: 1;
}

.carousel__activator:nth-of-type(4):checked ~ .carousel__track {
  -webkit-transform: translateX(-300%);
          transform: translateX(-300%);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__slide:nth-of-type(4) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__controls:nth-of-type(4) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(4) {
  opacity: 1;
}

.carousel__activator:nth-of-type(5):checked ~ .carousel__track {
  -webkit-transform: translateX(-400%);
          transform: translateX(-400%);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__slide:nth-of-type(5) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__controls:nth-of-type(5) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(5) {
  opacity: 1;
}

.carousel__activator:nth-of-type(6):checked ~ .carousel__track {
  -webkit-transform: translateX(-500%);
          transform: translateX(-500%);
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__slide:nth-of-type(6) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__controls:nth-of-type(6) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(6) {
  opacity: 1;
}

.carousel__activator:nth-of-type(7):checked ~ .carousel__track {
  -webkit-transform: translateX(-600%);
          transform: translateX(-600%);
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__slide:nth-of-type(7) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__controls:nth-of-type(7) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(7) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(3) {
  -webkit-transform: translateX(200%) translateZ(0);
          transform: translateX(200%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(4) {
  -webkit-transform: translateX(300%) translateZ(0);
          transform: translateX(300%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(5) {
  -webkit-transform: translateX(400%) translateZ(0);
          transform: translateX(400%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(6) {
  -webkit-transform: translateX(500%) translateZ(0);
          transform: translateX(500%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(7) {
  -webkit-transform: translateX(600%) translateZ(0);
          transform: translateX(600%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(3),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(3) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(4),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(4) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(5),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(5) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(6),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(6) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(7),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(7) {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;.carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

&lt;h2 id=&quot;playdate-version&quot;&gt;Playdate version?&lt;/h2&gt;

&lt;p&gt;It’s originally B&amp;amp;W so I figured it would look great on Playdate, so I made a little proof of concept.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/band-kun-playdate.gif#playdate&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Band-kun required a MIDI-capable sound card PLUS an external MIDI sound module - a very expensive 30,000JPY piece of equipment back in 1990. So it wasn’t a success and was forgotten about. But it eventually led to Guitaroo Man and the birth of the music game genre on PlayStation.&lt;/p&gt;

&lt;p&gt;Anyway! I’d love to licence Band-kun and re-release it on a modern device that can do the original concept justice. The Playdate crank and accelerometer could be used to perform the music!&lt;/p&gt;

&lt;p&gt;I wondered if anybody knows KOEI founder Youichi Erikawa (aka “Kou Shibusawa”)? Hook a brother up! バンドを組んでメンバーを集め、レコーディングをして、セックスとドラッグとロックンロールの生活を送るという昔（1990年、KOEI）のPC-9801のゲーム「バンドくん」をプレイしています。@koeitecmogames からライセンスしたいので、襟川 陽一 に協力をお願いします。&lt;/p&gt;

&lt;p&gt;Edit: since I originally wrote this twitter thread and blog post, contact has been made with KOEI’s licensing department. 🤞&lt;/p&gt;

&lt;h2 id=&quot;period-reviews&quot;&gt;Period reviews&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Detailed review from the 1991-01 issue of #マイコンBASIC micomBASIC&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Courtesy of a &lt;a href=&quot;https://archive.org/details/micomBASIC_1991-01/page/n77/mode/2up&quot;&gt;scan at Internet Archive&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/band-kun-review-micomBASIC-1991-01.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Super Soft Hot Information: Band-kun #バンドくん in &lt;a href=&quot;https://twitter.com/hashtag/micomBASIC?src=hash&quot;&gt;#micomBASIC&lt;/a&gt;1990/12&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Courtesy of a &lt;a href=&quot;https://archive.org/details/micomBASIC_1990-12/page/n237/mode/2up&quot;&gt;scan at Internet Archive&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“SLG in which you form a band, gain experience through practice and live house performances, and aim to win a contest. After winning, the game turns into a highly flexible session software. MIDI compatible.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/band-kun-review-micomBASIC-1990-12.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Review of Band-kun #バンドくん in Technopolis #テクノポリス 1991/01&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Courtesy of a &lt;a href=&quot;https://archive.org/details/technopolis-1991-01/01_journal_1991-01/page/136/mode/2up&quot;&gt;scan at Internet Archive&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;“We borrowed a studio and practiced hard with our friends to win the contest. Hone your skills!”&lt;/p&gt;

&lt;p&gt;“In the city, you’ll try to win a fight against a band member. It’s hard to get them to play with you at first.”&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/band-kun-review-technopolis-1991-01.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;translation-wip&quot;&gt;Translation (WIP)&lt;/h2&gt;

&lt;p&gt;I’ve been poking around in the Band-kun game files.&lt;/p&gt;

&lt;p&gt;Everything is stored uncompressed in very simple structures across a few files. I’ve not figured them all out, yet, but can see graphics (done), dialogue (partial), music (to-do). Band-kun ships with Scenario 1 “ZAP CITY 1991” and is able to play additional scenarios, but none were released.&lt;/p&gt;

&lt;p&gt;Regardless: it should be easy to create a translated version of the included scenario. And maybe even create a new scenario (varying difficulty depending on changes).&lt;/p&gt;

&lt;h2 id=&quot;user-manual&quot;&gt;User Manual&lt;/h2&gt;

&lt;p&gt;A scanned PDF for Band-kun #バンドくん is available with thanks to the Neo Kobe project &lt;a href=&quot;https://archive.org/details/band-kun-manual&quot;&gt;archive.org/details/band-kun-manual&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/band-kun-cover.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;promotional-leaflet&quot;&gt;Promotional leaflet&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/band-kun-leaflet-front.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/band-kun-leaflet-back.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;download-the-game&quot;&gt;Download the game&lt;/h2&gt;

&lt;p&gt;Get the disk image at Internet Arcchive for &lt;a href=&quot;https://ia600100.us.archive.org/view_archive.php?archive=/22/items/NeoKobe-NecPc-98012017-11-17/Koei.zip&quot;&gt;PC-9801&lt;/a&gt; or FM-Towns&lt;/p&gt;

&lt;h2 id=&quot;all-the-faces&quot;&gt;All the faces&lt;/h2&gt;

&lt;p&gt;Here are all 120 “famous” faces, extracted from PC-9801 Band-kun, thanks to &lt;a href=&quot;https://twitter.com/fukui_keeekn/status/1223375503710539776&quot;&gt;@fukui_keeekn on Twitter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/band-kun-faces.png#pixel&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;birthday-blog-post&quot;&gt;Birthday blog post?&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Check out my other &lt;a href=&quot;/tag/birthday/&quot;&gt;#birthday&lt;/a&gt; blog posts.&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 16 Dec 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/12/16/band-kun-musician-simulator-1990-koei/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/12/16/band-kun-musician-simulator-1990-koei/</guid>
        </item>
      
    
      
        <item>
          <title>デイリードライバー</title>
          <description>&lt;p&gt;The last couple of months have been tough going for a couple of reasons.&lt;/p&gt;

&lt;p&gt;Firstly, a new version of the Playdate SDK broke my game in a couple of important ways: my method of targeting 60fps stopped working, and more seriously the controls stopped working. The workaround for both of these issues was long and drawn out, but here’s a quick summary:&lt;/p&gt;

&lt;p&gt;Until this point I was waiting for the next frame update using the SDK &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;wait()&lt;/code&gt; function: one line of code that waits for a required amount of time. A change in how this works meant I was stuck. My workaround was do it in a more naïve way - just constantly checking the system timestamp to see if the allowed time for the current frame has passed. Keep it simple, I guess.&lt;/p&gt;

&lt;p&gt;The overhead of idling the CPU—the time it takes for it to wind down, do the wait, and then wind back up—is actually quite substantial when it takes a few milliseconds and you only have sixteen of them for each update!&lt;/p&gt;

&lt;p&gt;The end result is that the game is now running… better than ever. Even after these issues were resolved at a higher level by the Playdate SDK team, I have kept using my workarounds as the game runs faster. So, silver linings and all that!&lt;/p&gt;

&lt;p&gt;Secondly, an important issue that remains unresolved is exactly how—and when—Daily Driver will be released. I’m hopeful that will be as part of a Playdate Season, where games are delivered to the device on a schedule and you don’t know what game you’ll be playing until you see the light flash and you pick up and wake up your device. That’s the magic I want my players to have a piece of. That might turn out to be later rather than sooner, so we’ll have to be patient.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-katakana.png#playdate&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Anyway, other news: I’ve been trying to decide how to render the name of the game in Japanese. The English title uses &lt;em&gt;&lt;strong&gt;Futura Bold Oblique&lt;/strong&gt;&lt;/em&gt; which is a style that does not translate directly into non-Roman typefaces. I had found some bold Japanese fonts, with a little bit of character, but they seemed too cute and not geometric enough. After much investigation and many mockups I opted to draw the necessary katakana characters by hand, on a grid, and it’s turned out rather well. I’d love to expand this into a full typeface, but that’s a project for another time.&lt;/p&gt;

&lt;p&gt;Doing this sort of graphics work, or car design/rendering, are my goto procrastination tasks when I don’t have enough mojo to dive into the code and tackle the remaining work. So I’m sort of treading water on the final push of work needed to get the game over the line.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 14 Dec 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/12/14/daily-driver/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/12/14/daily-driver/</guid>
        </item>
      
    
      
        <item>
          <title>Dreamcast GDEMU installation</title>
          <description>&lt;ul&gt;
  &lt;li&gt;Difficulty: 5/10&lt;/li&gt;
  &lt;li&gt;Cost: ~ £100&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My Dreamcast is an NTSC-U model that I bought in the middle of the Dreamcast’s short life. It was a special order from UK mail order firm &lt;a href=&quot;https://twitter.com/gingerbeardman/status/1595050453322141696&quot;&gt;Madeira Games based out of King’s Lynn, Norfolk&lt;/a&gt;, and is chipped to play import games. It has a replacement UK PSU and has served me well over the years. I’d resisted GDEMU, making do with a serial USB Micro SD adapter. But I eventually decided the ease of use and ability to play certain WinCE games like Super Runabout was enough reason to upgrade.&lt;/p&gt;

&lt;p&gt;I ordered a bunch of stuff and then fitted it. There’s not much to say. The replacement lid release mechanism was the most difficult part to fit.&lt;/p&gt;

&lt;p&gt;After install I wasn’t impressed by the noise reduction but after measurement it is as advertised on the fan box. But it’s far from “silent”. So, I’d say that the GDEMU is the only essential upgrade. You can probably live without the fan, riser, etc.&lt;/p&gt;

&lt;p&gt;Whilst trying a few things I noticed when putting the lid on that it increases the noise levels due to echo in the now much emptier shell. Quick measurements showed somewhere around 3dB. So I put some plastic board along the edge of the GDEMU effectively halving the inside space whilst creating a direct passage from the fan directly to the PSU. This idea isn’t mine, it was something I’d seen/read that came back to me when I heard the noise increase as I put on the lid. I believe it’s done for air flow reasons but I did it for echo noise reduction reasons. New fan noise measurement &amp;lt;20dB which is as Noctua advertise.&lt;/p&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;b&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;c&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;d&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;e&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/dreamcast-gdemu-1.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/dreamcast-gdemu-1.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/dreamcast-gdemu-2.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/dreamcast-gdemu-2.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/dreamcast-gdemu-3.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/dreamcast-gdemu-3.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/dreamcast-gdemu-4.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/dreamcast-gdemu-4.jpg&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/dreamcast-gdemu-5.jpg&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/dreamcast-gdemu-5.jpg&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 82%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__staticimage,
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}

.carousel__activator:nth-of-type(3):checked ~ .carousel__track {
  -webkit-transform: translateX(-200%);
          transform: translateX(-200%);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__slide:nth-of-type(3) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__controls:nth-of-type(3) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(3) {
  opacity: 1;
}

.carousel__activator:nth-of-type(4):checked ~ .carousel__track {
  -webkit-transform: translateX(-300%);
          transform: translateX(-300%);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__slide:nth-of-type(4) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__controls:nth-of-type(4) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(4) {
  opacity: 1;
}

.carousel__activator:nth-of-type(5):checked ~ .carousel__track {
  -webkit-transform: translateX(-400%);
          transform: translateX(-400%);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__slide:nth-of-type(5) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__controls:nth-of-type(5) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(5) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(3) {
  -webkit-transform: translateX(200%) translateZ(0);
          transform: translateX(200%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(4) {
  -webkit-transform: translateX(300%) translateZ(0);
          transform: translateX(300%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(5) {
  -webkit-transform: translateX(400%) translateZ(0);
          transform: translateX(400%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(3),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(3) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(4),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(4) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(5),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(5) {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;.carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 03 Dec 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/12/03/dreamcast-gdemu-installation/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/12/03/dreamcast-gdemu-installation/</guid>
        </item>
      
    
      
        <item>
          <title>PC Engine Fanatics, Console Ma’zine, Electric Brain &amp; Games&amp;nbsp;Amusement Pleasure</title>
          <description>&lt;p&gt;This collection is a British video game fanzine/magazine that ran from 1989 to 1993 for an almost uninterrupted total of 35 issues.&lt;/p&gt;

&lt;p&gt;The first 8 issues went by the name PC Engine Fanatics which was a hand made fanzine/newsletter that was &lt;a href=&quot;https://archive.org/details/TheGamesMachineIssue21Aug89?q=%22pc+engine+fanatics%22&quot;&gt;promoted in period magazines&lt;/a&gt;. The following 10 issues received a name change to Console Ma’zine along with expanded coverage of Sega’s Mega Drive, Atari’s Lynx, and Nintendo’s Game Boy as well as NEC’s PC Engine. The “final” 17 issues went by the name Electric Brain (taken from the Chinese word for computer) and it was during this run that, at least for a brief handful of issues, the fanzine turned into a proper magazine that was available to purchase from major newsagents on the high street.&lt;/p&gt;

&lt;p&gt;After Electric Brain there was a year silence until GAP (Games Amusement Pleasure) followed for one last 5 issue finale, by which time the Internet had started to go mainstream and editor Onn Lee’s momentum finally waned after more than 15 magnificent years.&lt;/p&gt;

&lt;p&gt;This publication is little known even in its native United Kingdom, but it is notable for featuring an &lt;a href=&quot;https://www.nintendolife.com/news/2019/05/forgotten_interview_with_miyamoto_sheds_light_on_a_classic_zelda_production&quot;&gt;English translation of an interview with Shigeru Miyamoto&lt;/a&gt; from the time of The Legend of Zelda: A Link to the Past_. This interview was next translated into English &lt;a href=&quot;http://shmuplations.com/zeldalttp/&quot;&gt;over 20 years later&lt;/a&gt;. There was a wiki page about these publications, but it fell victim to deletionists—but that’s a story for another day.&lt;/p&gt;

&lt;p&gt;I’d like take this opportunity to thank Andy Harris for loaning me the majority of his collection of issues so I could scan and share the complete run rather than my few issues. I tracked him down a couple of years ago and thankfully managed to persuade him I wasn’t trying to steal his stuff! Thanks for trusting me Andy.&lt;/p&gt;

&lt;p&gt;Enjoy! &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/search.php?query=%22electric+brain%22+%22Onn+Lee%22&amp;amp;sort=titleSorter&quot;&gt;archive.org/search.php?query=%22electric+brain%22+%22Onn+Lee%22&amp;amp;sort=titleSorter&lt;/a&gt; &lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/electric-brain-31.jpg&quot; alt=&quot;JPG&quot; title=&quot;Electric Brain, issue 31, from 1993&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 30 Nov 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/11/30/pc-engine-fanatics-console-mazine-electric-brain-games-amusement-pleasure/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/11/30/pc-engine-fanatics-console-mazine-electric-brain-games-amusement-pleasure/</guid>
        </item>
      
    
      
        <item>
          <title>My “Bubble Era” T-shirt Store</title>
          <description>&lt;p&gt;I’m relaunching my “bubble era” T-shirt store on &lt;a href=&quot;https://twitter.com/teespring&quot;&gt;@teespring&lt;/a&gt; with international shipping in time for Christmas! &lt;a href=&quot;https://teespring.com/stores/gingerbeardman&quot; title=&quot;https://teespring.com/stores/gingerbeardman&quot;&gt;teespring.com/stores/gingerbeardman&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Retro games, computers, scooters and other cool logos on your favourite colour T-shirts!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/En7hM0SXMAMs_g8.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;These T-shirts have been a side-project of mine for many years—I redraw old logos as vector art, just for kicks! The oldest designs—CHOP and SPRINT—date back over 15 years to the time when I realised how easy it was to get T-shirts printed&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/En7hzWRWMAQZBL4.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Every so often I pick a design out of my folder of ideas and draw it up as vectors. I find the process of redrawing shapes with “good paths” quite relaxing and therapeutic, kind of like an open-ended puzzle game. &lt;a href=&quot;https://glyphsapp.com/learn/drawing-good-paths&quot;&gt;(glyphsapp.com/learn/drawing-…)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hachisuke (ハチ助 in Japan; Hu-bee in USA) was the mascot of HUDSON SOFT. Apparently a mixture of bee and mouse or cat! Sometimes referred to as “a fanciful depiction of a bee”. After seeing this vintage T-shirt I set about redrawing it using old photo ref&lt;/p&gt;

&lt;p&gt;The main outlines of Hachisuke were easy enough to draw, but the halftone dots on the hat took some thinking. Eventually I achieved the effect using a series of dotted lines. And I found a bug in &lt;a href=&quot;https://twitter.com/affinitybyserif&quot;&gt;@affinitybyserif&lt;/a&gt; Designer whilst doing it! &lt;a href=&quot;https://teespring.com/stores/gingerbeardman&quot;&gt;(teespring.com/stores/gingerb…)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/En7iqFmXIAE6EwM.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;One of my other favourite logos is for an old game called BILLIARDS which features a balloon style typeface. At this time magazine layout and graphic design was likely to have been done using phototypesetting rather than using computer. &lt;a href=&quot;https://teespring.com/stores/gingerbeardman&quot;&gt;(teespring.com/stores/gingerb…)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/En7jBQ7XUAAbSpF.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;DENGEKI G’s ENGINE magazine evolved from covering just the PC-Engine and games by NEC, to a broader range of games. The G in the title refers to Gals and Games which means there is often a broad range of content in the magazine, if you get what I mean. 🍑 &lt;a href=&quot;https://teespring.com/stores/gingerbeardman&quot;&gt;(teespring.com/stores/gingerb…)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/En7jKJMXYAEilHt.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;HIPPON SUPER! magazine was known for having a different tone than its main competitors, such as (Weekly) Famitsu and GAMEST. It had a whole bunch of logos over its lifetime, but I think the first one is by far the best. &lt;a href=&quot;https://teespring.com/stores/gingerbeardman&quot;&gt;(teespring.com/stores/gingerb…)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/En7jhToW8AYmsHz.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;As much as I enjoy figuring out the best paths to represent a shape that was probably originally drawn/cut by hand, I’m happy to take some short cuts at times. Here on MSX・FAN I use two rectangles to cut into neighbouring shapes when I should have just used thick strokes&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/En7jxA3WEAE4W1g.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The “Oh!” series of home cpmouter magazines are some of my favourites, and each of them (there are dozens!) had wonderful logos. I redrew a handful of them in black and white so they work on dark or light coloured T-shirts. &lt;a href=&quot;https://teespring.com/stores/gingerbeardman&quot;&gt;(teespring.com/stores/gingerb…)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/En7j7dLWEAMEa5i.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Oh! MZ is probably my favourite of the bunch, featuring amazing cover art including Syd Mead’s Blade Runner concept art for no reason other than it looked cool.&lt;/p&gt;

&lt;p&gt;The Sharp MZ-series of computers couldn’t do bitmap graphics so everything had to be done using the character set, which lead to this genius set of Hanafuda cards:&lt;/p&gt;

&lt;p&gt;Oh! HIT BIT is a magazine specific to Sony’s line of MSX computers and was a real joy to redraw as it’s geometric nature allowed me to use a grid! I LOVE GRIDS. &lt;a href=&quot;https://teespring.com/stores/gingerbeardman&quot;&gt;(teespring.com/stores/gingerb…)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/En7kviqXYAATHQ6.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Speaking of grids, there’s a cool app for macOS called KARO GRAPH which is a “graph paper” vector drawing tool with always-on grid and snapping to encourage structured drawing. I really dig it; you might too: &lt;a href=&quot;https://apps.apple.com/gb/app/karo-graph/id557536642?mt=12&quot;&gt;(apps.apple.com/gb/app/karo-gr…)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This next logo, for PASOCON SUNDAY, was spotted in a YouTube video of an old PC-focussed TV show. After spotting it there I managed to find higher resolution versions of it in Japanese magazines from the same era: &lt;a href=&quot;https://youtu.be/Bwpsbg6j0DI?t=17&quot;&gt;(youtu.be/Bwpsbg6j0DI?t=…)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/En7k4U4XcAQ2rEH.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I should mention the custom type old Japanese video game magazines used to headline articles about various games. SO COOL. &lt;a href=&quot;https://teespring.com/stores/gingerbeardman&quot;&gt;(teespring.com/stores/gingerb…)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/En7lUxaXUAI9MCL.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Articles often contained custom illustrations. I chose to take them out of their original context and surroundings and place them as large as possible on the front of a T-shirt. &lt;a href=&quot;https://teespring.com/stores/gingerbeardman&quot;&gt;(teespring.com/stores/gingerb…)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/En7lp99XIAAhb_h.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Another love of mine are “bubble era” Japanese vehicles, from crazy vans with skylite roofs to cute scooters. All of which seem to have the coolest names. &lt;a href=&quot;https://teespring.com/stores/gingerbeardman&quot;&gt;(teespring.com/stores/gingerb…)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/En7mC98WEAITxcn.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;If you’re into those check out my collection of old Honda scooter brochures: &lt;a href=&quot;https://www.flickr.com/photos/emsef/sets/72157594288027610/&quot;&gt;(flickr.com/photos/emsef/s…)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/En7mRx9W8AEfGUB.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Moving from Japan to USA &lt;a href=&quot;https://twitter.com/scottekim&quot;&gt;@scottekim&lt;/a&gt; has kindly given me permission to reproduce some T-shirts he designed in the 80s for CGDC (Computer Games Developer Conference, which became GDC after they realised games are also on consoles) and HACKERS’ CONFERENCE (as worn by &lt;a href=&quot;https://twitter.com/AndyHertzfeld&quot;&gt;@AndyHertzfeld&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/En7mpMLXMAE7h0w.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Back in the UK 80s music TV series “The Tube” had a logo that was actually a neon tube light. Drawing this was similar to the previous BILLIARDS logo, but its more freeform nature actually made it more difficult! &lt;a href=&quot;https://teespring.com/stores/gingerbeardman&quot;&gt;(teespring.com/stores/gingerb…)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/En7nL08W8AY5Rl_.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;UNITS “digital stimulation” is the album cover for the 1980 release but I added to the bottom of the design to make it look better on a T-shirt. The original artwork was created with strips of translucent plastic and the print on the T has the same effect! &lt;a href=&quot;https://www.discogs.com/Units-Digital-Stimulation/release/234909&quot;&gt;(discogs.com/Units-Digital-…)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/En7nlsiW4AE8u3Y.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 28 Nov 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/11/28/bubble-era-t-shirts/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/11/28/bubble-era-t-shirts/</guid>
        </item>
      
    
      
        <item>
          <title>Atari ST: Music Software Manuals</title>
          <description>&lt;p&gt;I scanned these a while ago, but dealing with a troll in an online Atari ST community made me forget about them for a while. Not out of spite, but more because I don’t have time for toxic people so I just dropped what I was doing and changed direction when I encountered this particular person. Remember: be excellent to each other! Be nice.&lt;/p&gt;

&lt;p&gt;Anyway! Three manuals were scanned from my ring binder hard copies, as always they are uploaded to Internet Archive as Searchable PDFs:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/cubeat-2-manual-for-atari-st&quot;&gt;Cubeat 2.0&lt;/a&gt; (338 pages)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/notator-alpha-manual-atari-st&quot;&gt;Notator Alpha 1.1&lt;/a&gt; (258 pages)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/notator-sl-creator-sl-manual-atari-st&quot;&gt;Notator SL/Creator SL 3.1&lt;/a&gt; (770 pages)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Plus a disk image and zip of the relatively rare Cubeat 2.0:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/cubeat-2-disk-atari-st&quot;&gt;Cubeat 2.0 Disk&lt;/a&gt; (720kb)&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 28 Nov 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/11/28/atari-st-music-software-manuals/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/11/28/atari-st-music-software-manuals/</guid>
        </item>
      
    
      
        <item>
          <title>Honda ICVS Concept (1994–2008)</title>
          <description>&lt;p&gt;Honda ICVS Concept “Intelligent Community Vehicle System” emphasising vehicle sharing over owning.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;1994 introduction&lt;/li&gt;
  &lt;li&gt;1996 concepts presented&lt;/li&gt;
  &lt;li&gt;1998 public test (Japan)&lt;/li&gt;
  &lt;li&gt;1999 World Good Design award&lt;/li&gt;
  &lt;li&gt;2002 real world application (Singapore)&lt;/li&gt;
  &lt;li&gt;2008 discontinued (&lt;a href=&quot;https://global.honda/newsroom/worldnews/1998/c980910.html&quot;&gt;Honda Newsroom&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/EmqP2PTXIAIgk-m.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Video: &lt;a href=&quot;https://www.youtube.com/watch?v=q3XR8pXminc&quot; title=&quot;https://www.youtube.com/watch?v=q3XR8pXminc&quot;&gt;www.youtube.com/watch?v=q3XR8pXminc&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Archived website: &lt;a href=&quot;https://web.archive.org/web/20001109052600/http://www.honda.co.jp/ICVS/icvs/index.html&quot; title=&quot;https://web.archive.org/web/20001109052600/http://www.honda.co.jp/ICVS/icvs/index.html&quot;&gt;web.archive.org/web/20001109052600/http://www.honda.co.jp/ICVS/icvs/index.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 12 Nov 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/11/12/honda-icvs-concept-1994-2008/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/11/12/honda-icvs-concept-1994-2008/</guid>
        </item>
      
    
      
        <item>
          <title>The BeOS Bible</title>
          <description>&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;I spent a few hours last night unbinding The BeOS Bible (1999, &lt;a href=&quot;https://twitter.com/ScotHacker?ref_src=twsrc%5Etfw&quot;&gt;@ScotHacker&lt;/a&gt;) using a hairdryer and putting it through a feed scanner, making light work of 994 pages!&lt;br /&gt;&lt;br /&gt;The resulting 100MB Searchable PDF is now on &lt;a href=&quot;https://twitter.com/internetarchive?ref_src=twsrc%5Etfw&quot;&gt;@InternetArchive&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://twitter.com/openlibrary?ref_src=twsrc%5Etfw&quot;&gt;@OpenLibrary&lt;/a&gt; &lt;a href=&quot;https://twitter.com/hashtag/preservation?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#preservation&lt;/a&gt; &lt;a href=&quot;https://t.co/b8ypsCNHwZ&quot;&gt;https://t.co/b8ypsCNHwZ&lt;/a&gt; &lt;a href=&quot;https://t.co/vN1cQ487OO&quot;&gt;pic.twitter.com/vN1cQ487OO&lt;/a&gt;&lt;/p&gt;&amp;mdash; Matt Sephton🎴 (@gingerbeardman) &lt;a href=&quot;https://twitter.com/gingerbeardman/status/1326582785604284418?ref_src=twsrc%5Etfw&quot;&gt;November 11, 2020&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 11 Nov 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/11/11/the-beos-bible/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/11/11/the-beos-bible/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: Automation Improvements</title>
          <description>&lt;p&gt;The recent automation was really just help with organisation. As soon as I started looking at running OpenSCAD from the shell/command-line it became obvious that I could do the rendering and organisation in one step without having to use external apps like Hazel.&lt;/p&gt;

&lt;p&gt;So, that’s now done. I render all the frames, with more sensible filenames, to a single folder.&lt;/p&gt;

&lt;p&gt;If I run all the renders one after the other, maxing out a single CPU core (99% CPU usage), time taken:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;~17 seconds 🐢&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But, using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;amp;&lt;/code&gt; directive and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;wait&lt;/code&gt; command, I can run the renders in parallel (well, technically it’s one process each; and batches of 32 works best) using all 6 CPU cores (~485% CPU usage), time taken:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;~10 seconds 🐇&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;…the beauty of the command line!&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Note to self: don’t publish a post about an automation breakthrough until the dust has settled.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 09 Oct 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/10/09/automation-improvements/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/10/09/automation-improvements/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: Automation</title>
          <description>&lt;p&gt;In preparation for regenerating my many cars with x3 the number of sprites, I thought I’d try to sort the rendered frames automatically into named folders because this is fiddly manual work I really don’t enjoy, and a bit of a bottleneck in my asset generation. For each pose I have to render the frames then group the new image files into a folder that describes that pose, as these multiple folders are later be used for batch processing.&lt;/p&gt;

&lt;p&gt;I could use macOS Folder Actions for this, but I’ve been using an app called &lt;a href=&quot;https://www.noodlesoft.com/&quot;&gt;Hazel&lt;/a&gt; for many years to do this sort of thing, so that was my first choice.&lt;/p&gt;

&lt;p&gt;The hard work is done with a shell script, as I’m quite comfortable writing those.&lt;/p&gt;

&lt;h2 id=&quot;flow&quot;&gt;Flow&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;get most recently saved .scad file&lt;/li&gt;
  &lt;li&gt;parse filename to capture car name&lt;/li&gt;
  &lt;li&gt;parse file contents for left/right/forward/backward tilt values&lt;/li&gt;
  &lt;li&gt;concatenate all this information as our new folder name&lt;/li&gt;
  &lt;li&gt;create new folder&lt;/li&gt;
  &lt;li&gt;move matching file into new folder&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This means that the folder name will change based on the render settings in the file—perfect!&lt;/p&gt;

&lt;p&gt;I still have to make 9 small sets of manual text changes to render each car pose, so that’s the next thing I’ll try to automate by running OpenSCAD from the command line.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-automation.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 07 Oct 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/10/07/automation/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/10/07/automation/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: Weight Transfer</title>
          <description>&lt;p&gt;I’ve been playing old Japanese PlayStation game &lt;a href=&quot;https://digitaldriftracer.wordpress.com/2019/06/09/touge-max-series-overview/&quot;&gt;Touge Max G&lt;/a&gt; and besides this having a gymkhana mode similar to aspects of Daily Driver, it also has a realistic handling model. One of the things that struck me about that was how the car rocks back and forth when accelerating and braking/reversing. One of the other games in the Touge series also has a school mode that talks you through this concept of weight transfer. It’s realistic and adds some level of dynamics to the car, making it feel less like a solid block sliding around.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-weight-transfer.gif#playdate&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;p&gt;So I’ve added this effect to Daily Driver and will be refining it going forward. I find it breathes extra life into the car just as it does in other games with full 3D physics modelling. It requires 3x the number of car sprites but because I render them from 3D it’s not much extra work and I think it’s well worth the effort.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-weight-transfer.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 03 Oct 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/10/03/weight-transfer/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/10/03/weight-transfer/</guid>
        </item>
      
    
      
        <item>
          <title>Found whilst backing up an old PC</title>
          <description>&lt;p&gt;Backed up a very old laptop and found a bunch of cool old stuff from 15-20 years ago! &lt;a href=&quot;https://twitter.com/hashtag/thread?src=hash&quot;&gt;#thread&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2003-04-25: Custom Fruit Labels for a Zelda: Wind Waker competition (I think in Official Nintendo Magazine?) I sent them a fake plastic pear with one of these these stuck on.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/EjaSuHAXkAAV91O.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;2005-01-18: grid-based music puzzle game called BEAT HIT&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/EjaTe86WAAAnz7d.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;2004-12-24: game mockup “Katamari Christmasy” 2D side-scroller&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/EjaUBBPWkAAiM7-.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;2004-07-11: reverse engineering “Mini Golf” JAVA cell phone game to make custom levels. w/ hyphz&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/EjaUjB5WkAYp9k7.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;2004-03-10: Atari arcade game Super Sprint themed T-shirt&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/EjaVQKVXYAA5fP-.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;2004-07-22: source code (Blitz Basic, Windows PC) for my game Wire Hang Redux, which you can still grab and play for free at &lt;a href=&quot;https://gingerbeardman.itch.io/wire-hang-redux&quot;&gt;(gingerbeardman.itch.io/wire-hang-redux)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/EjaWOLWXkAEjkAo.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;2004-12-21: various themes for Sony Ericsson K700i cell phone&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/EjaWoAnWsAEbbFn.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;2002-01-15: source code for my Futurama-themed Robotron clone “Bendertron”&lt;/p&gt;

&lt;p&gt;2001-04-24: WIP Mode 7 style kart game “Manga Kart”&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/EjaZPz9WsAEnBIT.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;2002-03-04: source code for Pang style bouncing ball physics&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/EjaZaRrXcAAZ-Zz.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;2003-07-02: beach-themed QIX clone “QUARTZ”&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/EjaaT7tXcAAOD-2.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;2003-07-02: source code for rainbow block matching puzzler “ROY” - it’s not balanced, or much fun, but it’s still downloadable at &lt;a href=&quot;http://www.gingerbeardman.com/archive/roy/&quot;&gt;(gingerbeardman.com/archive/roy/)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/EjabK4dXcAETDJN.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;2000-2003: source code for my Sensible Soccer clone “Simple Soccer” &lt;a href=&quot;http://www.gingerbeardman.com/archive/soccer/&quot;&gt;(gingerbeardman.com/archive/soccer/)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/EjabtL9WoAMi2G6.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;2002-09-17: source code for aborted attempt at bringing &lt;a href=&quot;https://twitter.com/armyoftrolls&quot;&gt;@armyoftrolls&lt;/a&gt; mockup “Space Squad 5” to life&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/EjacK5YX0AQ2UfE.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;2002-08-23: source code for my entry into the BlitzCoder Stupidest Game competition, Summer 2002. “Terra Firma” still available to download and play at &lt;a href=&quot;http://www.gingerbeardman.com/archive/terrafirma/&quot;&gt;(gingerbeardman.com/archive/terraf…)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Ejac_qtXYAEWnIG.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;2002-08-24: source code for my kayaking simulator “yaking”&lt;/p&gt;

&lt;p&gt;hurrah! was hoping i’d find this. will rinstate working download ASAP at &lt;a href=&quot;http://www.gingerbeardman.com/archive/yaking/&quot;&gt;(gingerbeardman.com/archive/yaking/)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Ejadk2tWsAIM8Rg.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;2000-06-10: photos from my first digital camera (a Fujifilm FinePix 1400 Zoom) including some of my first car (a 1972 FIAT 500)&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/EjafAs2XYAAMpze.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;1995-1998: my University Comp Sci directory photos (I was age 18-21)&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/EjagkQgXYAA1Slr.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;2002-05-23: original artwork for my Sensible Soccer T-shirt that was sold in River Island stores across the UK (still a shame they didn’t print the lines on the neck and shoulders!)&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/EjahgN2XsAE9eVU.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;2000-08-06: email attachment ATT09176.jpeg a photo of forest fire. (Bitterroot National Forest, Montana, on Aug. 6, 2000) &lt;a href=&quot;https://earthobservatory.nasa.gov/images/843/bitterroot-inferno&quot;&gt;(earthobservatory.nasa.gov/images/843/bit…)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/EjaieMTX0AIMt5x.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;…plus tons of work files, game screenshots and ROMs, failed prototypes, and random stuff I found interesting. Which goes to show that half a lifetime ago I was exactly the same person I am today. Phew. &lt;a href=&quot;https://twitter.com/hashtag/end?src=hash&quot;&gt;#end&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;OK, a couple more…&lt;/p&gt;

&lt;p&gt;2003-06-29: me taking photos of a big old widescreen CRT showing the Samsung N504 Virtual Light Machine (VLM-2) - still got it the NUON - no it’s not for sale ;)&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Ejam_NMXkAAJ5Cu.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;2005-09-05: my favourite game at the time was a Japanese skill game called “Pendulumania” (version 1.3 A) still downloadable from &lt;a href=&quot;https://www.vector.co.jp/magazine/softnews/000126/n0001261.html&quot;&gt;(vector.co.jp/magazine/softn…)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/Ejap3gFWsAICWEJ.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;2000-10-16: the original Fontographer .fog .fon .ttf files for my font BLOCKOUT (inspired by The Designers Republic but - contrary to their threatening legal letter - actually designed on a completely different grid system!) &lt;a href=&quot;https://www.flickr.com/photos/emsef/5706680402/&quot;&gt;(flickr.com/photos/emsef/5…)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/EjarqSNWoAICnYG.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 03 Oct 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/10/03/found-whilst-backing-up-an-old-pc/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/10/03/found-whilst-backing-up-an-old-pc/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: Social Update</title>
          <description>&lt;p&gt;The launch of this Patreon for Daily Driver also sees the game’s &lt;a href=&quot;https://forums.tigsource.com/index.php?topic=70808.msg1428724#msg1428724&quot;&gt;topic on TIGSource Forums&lt;/a&gt; as the first Playdate game!&lt;/p&gt;

&lt;p&gt;And also &lt;a href=&quot;https://www.indiedb.com/games/daily-driver&quot;&gt;on IndieDB&lt;/a&gt; as perhaps the first Playdate game? Though I do see fellow devs and Patreon Creators &lt;a href=&quot;https://www.patreon.com/rngparty&quot;&gt;RNG Party&lt;/a&gt; are already listed but they are yet to add their current Playdate game.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 05 Sep 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/09/05/social-update/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/09/05/social-update/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: Cannonball Run</title>
          <description>&lt;p&gt;Accidental new game mode discovered?&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;“Cannonball Run”&lt;/strong&gt;&lt;/p&gt;

  &lt;p&gt;Collect stuff whilst a barrage of heavy things bounce around the screen!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This was a result of my continued work implementing different surface frictions, and I mistakenly set the cones to not be affected by friction and thus never slow down. Hitting them a few times was enough to get them moving at a good speed, and then I drove around the screen.&lt;/p&gt;

&lt;p&gt;What I didn’t appreciate is that my collision model uses elastic collision, which allows the car to knock stuff over in a quite pleasing way where the car takes a little bit of a knock. But if those things are moving fast enough, as the cones are here, then any collision will also affect the car to a larger degree. You can see the car being pushed around by the out of control traffic cones.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-one-cannonball-run.gif#playdate&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 31 Aug 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/08/31/cannonball-run/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/08/31/cannonball-run/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: One Shade of Grey?</title>
          <description>&lt;p&gt;Since I am targeting 60fps one of the things I can do is flash a black sprite every other frame to get a shade of grey. Yes! Grey on a black and white screen.&lt;/p&gt;

&lt;p&gt;It only works at high frame rates (note: 50fps isn’t high enough!) because the screen is &lt;em&gt;so damned good&lt;/em&gt; that flashing at a slower rate simply looks like… an image flashing. The effects is also visible on device for the same reason.&lt;/p&gt;

&lt;p&gt;So I’m not sure I’ll use it, as all other shadows are dithered and flashing them all will hit the frame rate. But it was fun to try! One for another game, perhaps?&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I believe this technique was used on other systems with limited colours, such as Game Boy and Palm (to get 4 shades), certain Commodore 64 games (eg. Creatures 2) did it to get never-before-seen colours, and of course old arcade and video games often did exactly my trick to get their semi-opaque shadows.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-one-shade-grey.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 19 Aug 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/08/19/one-shade-of-grey/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/08/19/one-shade-of-grey/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: Eight-Six</title>
          <description>&lt;p&gt;When you get a crazy idea that you’ll probably never be able to use, but you do it anyway, just to scratch the itch.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-eight-six.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-eight-six.gif#playdate&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 18 Aug 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/08/18/eight-six/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/08/18/eight-six/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: Playable Demo</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-playable-demo.gif#playdate&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;p&gt;A made a demo build of Daily Driver. It is based on code a couple weeks old (dated &lt;strong&gt;30 July 2020&lt;/strong&gt;) so whilst not representative of where I am right now with the game it does show my progress since the last build I shared at the start of June.&lt;/p&gt;

&lt;p&gt;Controls&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;any combination of d-pad, A/B, Crank&lt;/li&gt;
  &lt;li&gt;d-pad U/D, or A/B = accelerate/brake&lt;/li&gt;
  &lt;li&gt;d-pad L/R, or Crank = steer left/right&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Notes&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;runs at 60fps on device (50fps in Simulator)&lt;/li&gt;
  &lt;li&gt;pressing Menu twice will reset the current stage layout&lt;/li&gt;
  &lt;li&gt;pressing Menu then Options will load the next stage&lt;/li&gt;
  &lt;li&gt;19 different stages (all cone layouts in this build)&lt;/li&gt;
  &lt;li&gt;includes level editor!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Debug Keys for game (simulator only):&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;E = open level editor&lt;/li&gt;
  &lt;li&gt;F = toggle fps indicator&lt;/li&gt;
  &lt;li&gt;J = jump!&lt;/li&gt;
  &lt;li&gt;L = list all sprites&lt;/li&gt;
  &lt;li&gt;N = next stage&lt;/li&gt;
  &lt;li&gt;P = play replay data&lt;/li&gt;
  &lt;li&gt;R = print replay data to console&lt;/li&gt;
  &lt;li&gt;T = toggle telemetry&lt;/li&gt;
  &lt;li&gt;U = toggle frame limiter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Controls for editor (simulator only):&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;d-pad = move cursor&lt;/li&gt;
  &lt;li&gt;A = place an object or increment object under the cursor&lt;/li&gt;
  &lt;li&gt;B = toggle precision mode
    &lt;ul&gt;
      &lt;li&gt;cursor moves in smaller increments (5px vs 20px)&lt;/li&gt;
      &lt;li&gt;drag/move item under cursor&lt;/li&gt;
      &lt;li&gt;A = delete item under cursor&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Debug Keys for editor (simulator only):&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;B = new blank stage&lt;/li&gt;
  &lt;li&gt;D = dump stage JSON to console (for copy and pasting)&lt;/li&gt;
  &lt;li&gt;E = exit level editor&lt;/li&gt;
  &lt;li&gt;O = output stage as “m-edited.json” in game Sandbox directory&lt;/li&gt;
  &lt;li&gt;Z = undo (deletes last item placed)&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 15 Aug 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/08/15/playable-demo/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/08/15/playable-demo/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: Post-processing workflow</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-post-processing.gif#playdate&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;p&gt;My post-processing to 1-bit is fairly simple. I use a bespoke tool that allows me to have “live” (realtime) manual control over a bunch of image filters so I can see the results immediately.&lt;/p&gt;

&lt;p&gt;But essentially it’s:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;convert to greyscale, using one of many algorithms&lt;/li&gt;
  &lt;li&gt;reduce colours to 1-bit, decide on dithering or threshold level on case-by-case basis&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The grey shades that I applied to my model in OpenSCAD give an element of control during this conversion process. Greys can be pushed either way, towards black or white, depending on my need with the specific model I am working on.&lt;/p&gt;

&lt;p&gt;In this instance I desaturated the greys which blows them out to nearer white. And then I chose to threshold to reduce to b/w.&lt;/p&gt;

&lt;p&gt;I also have the wheels as a separate finished image so I don’t have to worry if their detail is lost during this phase, I can just paste over the accurate/finished wheels.&lt;/p&gt;

&lt;p&gt;Final result, unedited:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-post-processing.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I would later touch up the sprite by hand to reinforce any details I think have been lost. I use Piskel for edited sprites because it has really nice sprite sheet support, drag and drop loading, and quick and versatile exporting.&lt;/p&gt;

&lt;p&gt;Aside: 32 is a number that is a leftover from a different prototype and it’s stuck. I guess it should really be 36? or 24? or 18?. But it’s too late now! Actually it would be relatively easy to change but I have bigger fish to fry.&lt;/p&gt;

&lt;p&gt;The animations alone could run at 99fps—it’s anything that causes more drawing which slow things down. Collisions, not because they are computationally heavy, but because they cause a lot of sprite updates - which means drawing moving things - to happen. I’m working hard to maintain 60fps on device (50fps in simulator for… reasons) and am excited I’ve managed to get here.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 10 Aug 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/08/10/post-processing-workflow/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/08/10/post-processing-workflow/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: Retrobatch workflow</title>
          <description>
&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;b&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;c&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;d&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/daily-driver-retrobatch-workflow-1.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-retrobatch-workflow-1.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/daily-driver-retrobatch-workflow-2.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-retrobatch-workflow-2.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/daily-driver-retrobatch-workflow-3.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-retrobatch-workflow-3.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/daily-driver-retrobatch-workflow-4.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-retrobatch-workflow-4.png&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 82%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__staticimage,
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}

.carousel__activator:nth-of-type(3):checked ~ .carousel__track {
  -webkit-transform: translateX(-200%);
          transform: translateX(-200%);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__slide:nth-of-type(3) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__controls:nth-of-type(3) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(3) {
  opacity: 1;
}

.carousel__activator:nth-of-type(4):checked ~ .carousel__track {
  -webkit-transform: translateX(-300%);
          transform: translateX(-300%);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__slide:nth-of-type(4) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__controls:nth-of-type(4) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(4) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(3) {
  -webkit-transform: translateX(200%) translateZ(0);
          transform: translateX(200%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(4) {
  -webkit-transform: translateX(300%) translateZ(0);
          transform: translateX(300%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(3),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(3) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(4),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(4) {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;.carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

&lt;h2 id=&quot;retrobatch&quot;&gt;Retrobatch&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;process dumped frames x 32
    &lt;ul&gt;
      &lt;li&gt;once each for left, right and straight directions&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;stitch processed frames together as sprite-sheets x 3
    &lt;ul&gt;
      &lt;li&gt;we end up with three long images&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;stitch 3x sprite-sheets together
    &lt;ul&gt;
      &lt;li&gt;we end up with our final image ready for post-processing&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Edit, August 2020: since writing this post I’ve been able to condense this process into 1 single workflow that executes much faster. See image 4. Thanks to Gus, maker of Retrobatch!&lt;/p&gt;

&lt;p&gt;Edit, June 2021: I replaced my all uses of Retrobatch with imagemagick commands.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 09 Aug 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/08/09/retrobatch-workflow/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/08/09/retrobatch-workflow/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: OpenSCAD workflow</title>
          <description>
&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;b&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;c&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;d&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;e&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/daily-driver-openscad-workflow-1.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-openscad-workflow-1.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/daily-driver-openscad-workflow-2.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-openscad-workflow-2.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/daily-driver-openscad-workflow-3.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-openscad-workflow-3.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/daily-driver-openscad-workflow-4.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-openscad-workflow-4.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/daily-driver-openscad-workflow-5.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-openscad-workflow-5.png&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 82%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__staticimage,
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}

.carousel__activator:nth-of-type(3):checked ~ .carousel__track {
  -webkit-transform: translateX(-200%);
          transform: translateX(-200%);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__slide:nth-of-type(3) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__controls:nth-of-type(3) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(3) {
  opacity: 1;
}

.carousel__activator:nth-of-type(4):checked ~ .carousel__track {
  -webkit-transform: translateX(-300%);
          transform: translateX(-300%);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__slide:nth-of-type(4) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__controls:nth-of-type(4) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(4) {
  opacity: 1;
}

.carousel__activator:nth-of-type(5):checked ~ .carousel__track {
  -webkit-transform: translateX(-400%);
          transform: translateX(-400%);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__slide:nth-of-type(5) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__controls:nth-of-type(5) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(5) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(3) {
  -webkit-transform: translateX(200%) translateZ(0);
          transform: translateX(200%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(4) {
  -webkit-transform: translateX(300%) translateZ(0);
          transform: translateX(300%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(5) {
  -webkit-transform: translateX(400%) translateZ(0);
          transform: translateX(400%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(3),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(3) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(4),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(4) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(5),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(5) {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;.carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

&lt;p&gt;I took the plunge and upgraded to a Mac mini and 4K display so had to migrate my setup and then figure out why my workflow was broken (spoiler: retina!) compared to my old rMBP with non-retina display.&lt;/p&gt;

&lt;p&gt;So, my workflow uses the following apps:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://openscad.org&quot;&gt;OpenSCAD&lt;/a&gt; “The Programmers Solid 3D CAD Modeller”&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://flyingmeat.com/retrobatch/&quot;&gt;Retrobatch&lt;/a&gt; “a unique application for automating actions on multiple images at the same time”&lt;/li&gt;
  &lt;li&gt;post-processing “greyscale and dithering tool” (I use my own realtime tool, but any image editor would do it to a degree, see this other thread)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is so I can re-run a workflow at any point (maybe in a make file) which I often do during development. These become executable assets, of sorts, in my project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenSCAD&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;define 3D models (I get a feeling like coding CSS in a strange way)&lt;/li&gt;
  &lt;li&gt;animate the model spinning through one 360-degree rotation&lt;/li&gt;
  &lt;li&gt;dump frames out as PNG files&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here’s the model definition to try out:&lt;/p&gt;

&lt;noscript&gt;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/a0a0b967c480ab973d40aaf5e78fd47f&quot;&gt;View the source code as a Gist&lt;/a&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;script src=&quot;https://gist.github.com/gingerbeardman/a0a0b967c480ab973d40aaf5e78fd47f.js&quot;&gt;&lt;/script&gt;

&lt;p&gt;I love building 3D this way, it’s kind of like LEGO. I use basic geometric building blocks (cube, sphere, cylinder, polygon, etc) and some boolean operations (difference, intersection, union). There are some other cool things (hull, minkowski). I have the commands in &lt;a href=&quot;https://dash.app/&quot;&gt;Dash.app&lt;/a&gt;alongside the Playdate SDK docs.&lt;/p&gt;

&lt;p&gt;In the image 2 you can see what the model looks like with all the blocks I have used to make it visible at once.&lt;/p&gt;

&lt;p&gt;My particular approach is &lt;em&gt;subtractive&lt;/em&gt;— kind of like sculpting—I start with large blocks and cut away at them using other shapes and the &lt;em&gt;difference&lt;/em&gt; function. When finding the exact placement for a block I use the &lt;em&gt;#&lt;/em&gt; precedent which makes the blocks show up as semi-opaque red blocks. See main image.&lt;/p&gt;

&lt;p&gt;I colour each block in a one or two shades of grey, black and white. This is to help with the conversion to 1-bit later on. It’s not so obvious here as the lighting makes the colours look many different shades - for example the wheels are black with white centre but look grey here. See image 3.&lt;/p&gt;

&lt;p&gt;Using some simple programming constructs and variables I can add booleans to trigger different states, I use this for angled front wheels and tilted car body. See image 4.&lt;/p&gt;

&lt;p&gt;And also to set the distance and rotation of the camera relative to the model when in animation mode. In this mode I enter a speed (doesn’t matter but higher the better) number of frames = 32, and the tick the box to dump the images. The tick disappears when the images are all done. See image 5.&lt;/p&gt;

&lt;p&gt;I also rendered the skid marks, car shadow, and some other elements.&lt;/p&gt;

&lt;p&gt;There is a lot that is annoying about this app&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;not retina-optimised (so I run it in Low Resolution, set using Get Info on the app)&lt;/li&gt;
  &lt;li&gt;runs maxed out on a single core&lt;/li&gt;
  &lt;li&gt;doesn’t have configurable lighting (I’d prefer uniform or no lighting)&lt;/li&gt;
  &lt;li&gt;Qt Framework app, so not really macOS-native&lt;/li&gt;
  &lt;li&gt;etc&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…but I still use it! I am not aware of anything else quite like it.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 08 Aug 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/08/08/openscad-workflow/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/08/08/openscad-workflow/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: Shine Get!</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-shine-get.gif#playdate&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Added steering assist, which locks your final steering direction to one of 16 directions, rather than allowing any angle. This prevents over steer when trying to turn to the specific directions required in a level. Of course this is optional; it is variable and can be switched off if the player does not want it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;25 July 2020.&lt;/strong&gt; I added another type of object, one that disappears upon collision meaning that it is collectable. It’s a kind of coin with a coin-collecting sound effect.&lt;/p&gt;

&lt;p&gt;No changes to physics have been made in a long time, but I guess on this level there are no collisions so the car is mostly at full throttle and so seems a bit more responsive than previously?&lt;/p&gt;

&lt;p&gt;I’ve already done multiple car types with different handling and sprites. Still more to do though.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 21 Jul 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/07/21/shine-get/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/07/21/shine-get/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: Instant Replay</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-instant-replay.gif#playdate&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I guess this looks like a looped GIF, but it’s not!&lt;/p&gt;

&lt;p&gt;I added some quite simple code to record every button press and the tick time at which it happened. The beauty of this approach is that most frames there are no button presses so the recorded data is very small. The work I’ve previously put in structuring the game in an Object-Oriented way really paid off.&lt;/p&gt;

&lt;p&gt;The game engine is completely deterministic—it has no random elements—so playing back the data is also very simple and the result is an exact frame by frame replay.&lt;/p&gt;

&lt;p&gt;Seeing this for the first time felt like magic. This is why I love developing games!&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 17 Jul 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/07/17/instant-replay/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/07/17/instant-replay/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: High Frame Rates are Best Frame Rates</title>
          <description>&lt;p&gt;Over the course of development I’d been unhappy with the game running at 30fps, as it did not feel responsive enough. I’m a big believer that if a gamer features fast action gameplay and requires quick reactions then higher frame rates and lower response time are what is needed.&lt;/p&gt;

&lt;p&gt;Over the lifetime of the project I had beeb experimenting with running the game at a higher frame rate, as the maximum frame rate supported by Playdate SDK is 50fps. When I wrote my physics I did so in a way that it was not tied to one specific frame rate. Actually, it’s more correct to say that it is tied to the highest frame rate of 50fps but is done so in a way that it can be adapted to any frame rate.&lt;/p&gt;

&lt;p&gt;Anyway, after a round of optimisations and general improvements to the way I did both the skid marks (draw direct to background image rather as sprites) and sound effects (not attaching the whole sound engine to each object!) my game was running at max frame rate.&lt;/p&gt;

&lt;p&gt;So, I decided to see how high the game would run if I removed the frame limiter (which the SDK allows) and to my surprise my hame was running between 60 and 75fps. At this point I had the crazy idea of running my game at 60fps, because… why not? I wrote my own simple frame limiter (which would be more precise if the SDK allowed finer grained time reporting) and now the game runs faster and smoother than games should on Playdate.&lt;/p&gt;

&lt;p&gt;One interesting thing I noticed was that if I used my frame limiter code to limit the game to 50fps, I actually had a bunch more time, ~3ms, to do stuff per frame update than if I used the SDK frame limiter! I can only assume that every frame update the SDK frame limiter is doing something I am not doing.&lt;/p&gt;

&lt;p&gt;So, writing my own frame limiter clawed back some time from the SDK and also allowed me to go harder, better, faster, stronger. Double win!&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 14 Jul 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/07/14/high-frame-rates/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/07/14/high-frame-rates/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: Showreel</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-showreel.gif#playdate&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Trying out some different things: a grab bag of scenarios.&lt;/p&gt;

&lt;p&gt;This long GIF shows several scenarios, different physics, and more! Essential viewing.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 04 Jul 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/07/04/showreel/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/07/04/showreel/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: Chequered Flag</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-chequered-flag.gif#playdate&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Bit of fun at lunch today.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 24 Jun 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/06/24/chequered-flag/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/06/24/chequered-flag/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: Influences</title>
          <description>&lt;p&gt;Some fellow Playdate developers commented that at this point the game reminded them of &lt;em&gt;Ivan “Ironman” Stewart’s Super Off Road&lt;/em&gt;, &lt;em&gt;Super Sprint&lt;/em&gt; and even &lt;em&gt;Rocket League&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;A few of my influences for vibe:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Atari’s &lt;em&gt;Sprint&lt;/em&gt; series, including &lt;em&gt;Badlands&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Ivan “Ironman” Stewart’s Super Off Road&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Wild Wheels&lt;/em&gt; (a &lt;a href=&quot;https://www.mobygames.com/game-group/ball-sports-with-vehicles&quot;&gt;car soccer game&lt;/a&gt; that pre-dates &lt;em&gt;Rocket League&lt;/em&gt; by ~20 years)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And for gameplay:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;ExciteBots: Trick Racing&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Mario Kart DS/Wii&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Power Drive&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Richard Burns Rally&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;The Italian Job: LA Heist&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Pro Rally&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Runabout&lt;/em&gt; series&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;GTi Club&lt;/em&gt; series&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;1080°&lt;/em&gt; series&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…so many more, some of which are not even driving games!&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 18 Jun 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/06/18/influences/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/06/18/influences/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: Off Road</title>
          <description>&lt;p&gt;&lt;strong&gt;6 June 2020.&lt;/strong&gt; Finally found and fixed a bug in my collision code - needed to use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;math.abs()&lt;/code&gt; in one place to avoid some double negatives messing up collision rebound direction. D’oh!&lt;/p&gt;

&lt;p&gt;And now it’s time to Play Ball! I added a lap timer and a cool little LCD font.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-off-road.gif#playdate&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9 June 2020.&lt;/strong&gt; The core flow of the game has been decided: there will be daily driving challenges with online leaderboards. So the game has found a name: Daily Driver.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;12 June 2020.&lt;/strong&gt; Video of gameplay footage and sound effects: &lt;a href=&quot;https://www.youtube.com/watch?v=I57JxBp4kBM&quot;&gt;www.youtube.com/watch?v=I57JxBp4kBM&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 06 Jun 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/06/06/off-road/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/06/06/off-road/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: Gameplay</title>
          <description>&lt;p&gt;I have redone the collision/rebound physics, and car visual and steering is now affected when colliding - makes collisions feel really physical. Tyres and Cone obstacles have different collision properties so they feel different when you hit them. It’s a lot of fun to simply drive around and knock into things, which makes me confident I’m onto something good here.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-gameplay.gif#playdate&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1 June 2020.&lt;/strong&gt; I’m now happy enough with the handling, time to get some gameplay in here. At this point the game is running at the Playdate SDK default of 30fps.&lt;/p&gt;

&lt;p&gt;First playable demo released to Playdate Developer Preview group!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Fastest Time Challenge”&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;hit all 8 cones as quickly as possible&lt;/li&gt;
  &lt;li&gt;obstacles getting stuck under your car will slow you down!&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 31 May 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/05/31/gameplay/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/05/31/gameplay/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: Obstacles</title>
          <description>&lt;p&gt;At this point I have three rows of rotated cars in the sprite sheet: each has wheels pointing in different directions.&lt;/p&gt;

&lt;p&gt;I’m currently doing the skid marks as sprites (which is why they disappear over time) partly because it was easy to get going, and partly to try to figure out some performance limits (~350 sprites in the GIF below, 25 of which are collidable and have my custom physics applied). Will be drawing skids marks straight to screen at some point in the future.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-obstacles.gif#playdate&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Short term goal is to have some lap races/time-trials, plus a “driving test” or “stunt driving” mode which is what you’re seeing here.&lt;/p&gt;

&lt;p&gt;Codename is currently: Crank Turismo&lt;/p&gt;

&lt;p&gt;At this point you can’t hear my great synth-powered car engine and skidding sfx!&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 30 May 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/05/30/obstacles/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/05/30/obstacles/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: from 3D to 2D</title>
          <description>&lt;p&gt;At this point, the only thing that remained of the prototype was the car sprite so I wondered about creating a new one myself. It uses 32 different images of the car with different rotations, making for smooth animation and movement on screen.&lt;/p&gt;

&lt;p&gt;Whilst I could draw all those frames by hand, I decided to go down a path that could produce assets on demand. That way if I change my mind I can reprocess the assets whenever I feel like it. The initial process was easy to setup, but I’ve been taking and simplifying the automation process ever since.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-from-3d-to-2d-a.png&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I’d previously used OpenSCAD to create 3D models, so it was a natural and easy choice. Also, it’s the only 3D app I’ve ever used—not even Blender! Models are created using a definition language (think of it as a bit like CSS) where you can define shapes and how they interact. I also use the animation function to set the viewpoint and rotate the car whilst automatically saving the images.&lt;/p&gt;

&lt;p&gt;In OpenSCAD I lock the view angle and zoom. I tie rotation to the animation value &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$t&lt;/code&gt;. Then I run the animation and click a box to have the app spit out all the rotated images for me.&lt;/p&gt;

&lt;p&gt;The output images need a little post-processing, so I use a single Retrobatch workflow to: crop, add transparency, invert, a few other things, and finally stitch the 32 images into one long sprite sheet. (On Windows you can use &lt;a href=&quot;http://photobat.clientside.jp&quot;&gt;Photobat&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-from-3d-to-2d-b.png#playdate&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Finally, I run the sprite sheet through a bespoke dithering tool that allows for “live” manual tweaking to convert the greyscale images to 1-bit.&lt;/p&gt;

&lt;p&gt;That’s good enough for my current requirements. Later on I would want extra detail in the renders, either through texturing or by hand.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-from-3d-to-2d-c.png&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;p&gt;29 May 2020. Soon after I would start rendering the wheels turning and after that the body so it rocks from side to side.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 27 May 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/05/27/from-3d-to-2d/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/05/27/from-3d-to-2d/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: Physics</title>
          <description>&lt;p&gt;Now that I was convinced that a driving game could be fun, I was unhappy with the controls and very rudimentary “physics” that the car had. It just didn’t feel very real or compelling; there wasn’t enough depth to the control scheme.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-physics.gif#playdate&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;p&gt;So I used &lt;a href=&quot;https://asawicki.info/Mirror/Car%20Physics%20for%20Games/Car%20Physics%20for%20Games.html&quot;&gt;Marco Monster’s Car Physics article&lt;/a&gt; (and looked at &lt;a href=&quot;https://github.com/search?q=2d+car+physics&amp;amp;type=repositories&quot;&gt;source code&lt;/a&gt; for various implementations of his technique) to implement more realistic car physics including drifting and skid marks. This was a bit of a watershed moment: this was the game I wanted to spend all my time on.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 24 May 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/05/24/physics/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/05/24/physics/</guid>
        </item>
      
    
      
        <item>
          <title>Shinji and Good Friends: Second Hanafuda Impact</title>
          <description>&lt;p&gt;Shinji and Good Friends: Second Hanafuda Impact is a hanafuda video game for Windows, released by Gainax in 1999. You can unlock wallpapers though beating each of the characters in the game.&lt;/p&gt;

&lt;p&gt;Just for fun I reverse engineered and edited the save game to unlock all the wallpapers. The save game data is not very big so I decided on a brute force approach: I beat one character to get enough save data and then set about changing and reloading it to figure out the location of everything else.&lt;/p&gt;

&lt;p&gt;I was surprised to find the 10th image, shown large in this post, as it did not have a typical placeholder like the others. Also surprising are the reserved save slots for more (seemingly abandoned) unlockable wallpapers.&lt;/p&gt;

&lt;p&gt;Anyway, these wallpapers are probably new material for most Evangelion fans!&lt;/p&gt;

&lt;p&gt;Whilst doing this hacking, I found a debug mode (dialog/speech tester) which is now documented at &lt;a href=&quot;https://tcrf.net/Shinji_and_Good_Friends:_Second_Hanafuda_Impact&quot;&gt;The Cutting Room Floor&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;carousel__holder&quot;&gt;
    &lt;div class=&quot;carousel&quot;&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;a&quot; checked=&quot;checked&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;b&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;c&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;d&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;e&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;f&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;g&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;h&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;i&quot; /&gt;
        
          &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel&quot; id=&quot;j&quot; /&gt;
        
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;j&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;f&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;g&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;f&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;h&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;g&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;i&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;h&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;j&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
          
          
          
          
          &lt;div class=&quot;carousel__controls&quot;&gt;
              &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;i&quot;&gt;&lt;/label&gt;
              &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
          &lt;/div&gt;
        
        &lt;div class=&quot;carousel__track&quot;&gt;
          &lt;ul&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/shinji-1.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/shinji-1.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/shinji-2.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/shinji-2.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/shinji-3.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/shinji-3.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/shinji-4.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/shinji-4.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/shinji-5.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/shinji-5.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/shinji-6.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/shinji-6.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/shinji-7.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/shinji-7.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/shinji-8.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/shinji-8.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/shinji-9.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/shinji-9.png&quot; /&gt;&lt;/li&gt;
            
            &lt;li class=&quot;carousel__slide&quot; style=&quot;background-image: url(&apos;https://cdn.gingerbeardman.com/images/posts/shinji-10.png&apos;);&quot;&gt;&lt;img class=&quot;carousel__staticimage&quot; src=&quot;https://cdn.gingerbeardman.com/images/posts/shinji-10.png&quot; /&gt;&lt;/li&gt;
            
          &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div class=&quot;carousel__indicators&quot;&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;a&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;b&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;c&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;d&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;e&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;f&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;g&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;h&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;i&quot;&gt;&lt;/label&gt;
            
              &lt;label class=&quot;carousel__indicator&quot; for=&quot;j&quot;&gt;&lt;/label&gt;
            
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.carousel__holder {width: 100%; position: relative; padding-bottom: 75%; margin: 1rem 0 1rem;}
.carousel {
  height: 100%;
  width: 100%;
  overflow: hidden;
  text-align: center;
  position: absolute;
  padding: 0;
}
.carousel__staticimage,
.carousel__controls,
.carousel__activator {
  display: none;
}

.carousel__activator:nth-of-type(1):checked ~ .carousel__track {
  -webkit-transform: translateX(-000%);
          transform: translateX(-000%);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
  opacity: 1;
}

.carousel__activator:nth-of-type(2):checked ~ .carousel__track {
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
  opacity: 1;
}

.carousel__activator:nth-of-type(3):checked ~ .carousel__track {
  -webkit-transform: translateX(-200%);
          transform: translateX(-200%);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__slide:nth-of-type(3) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__controls:nth-of-type(3) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(3):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(3) {
  opacity: 1;
}

.carousel__activator:nth-of-type(4):checked ~ .carousel__track {
  -webkit-transform: translateX(-300%);
          transform: translateX(-300%);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__slide:nth-of-type(4) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__controls:nth-of-type(4) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(4):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(4) {
  opacity: 1;
}

.carousel__activator:nth-of-type(5):checked ~ .carousel__track {
  -webkit-transform: translateX(-400%);
          transform: translateX(-400%);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__slide:nth-of-type(5) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__controls:nth-of-type(5) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(5):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(5) {
  opacity: 1;
}

.carousel__activator:nth-of-type(6):checked ~ .carousel__track {
  -webkit-transform: translateX(-500%);
          transform: translateX(-500%);
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__slide:nth-of-type(6) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__controls:nth-of-type(6) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(6):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(6) {
  opacity: 1;
}

.carousel__activator:nth-of-type(7):checked ~ .carousel__track {
  -webkit-transform: translateX(-600%);
          transform: translateX(-600%);
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__slide:nth-of-type(7) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__controls:nth-of-type(7) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(7):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(7) {
  opacity: 1;
}

.carousel__activator:nth-of-type(8):checked ~ .carousel__track {
  -webkit-transform: translateX(-700%);
          transform: translateX(-700%);
}
.carousel__activator:nth-of-type(8):checked ~ .carousel__slide:nth-of-type(8) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(8):checked ~ .carousel__controls:nth-of-type(8) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(8):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(8) {
  opacity: 1;
}

.carousel__activator:nth-of-type(9):checked ~ .carousel__track {
  -webkit-transform: translateX(-800%);
          transform: translateX(-800%);
}
.carousel__activator:nth-of-type(9):checked ~ .carousel__slide:nth-of-type(9) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(9):checked ~ .carousel__controls:nth-of-type(9) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(9):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(9) {
  opacity: 1;
}

.carousel__activator:nth-of-type(10):checked ~ .carousel__track {
  -webkit-transform: translateX(-900%);
          transform: translateX(-900%);
}
.carousel__activator:nth-of-type(10):checked ~ .carousel__slide:nth-of-type(10) {
  transition: opacity 0.5s, -webkit-transform 0.5s;
  transition: opacity 0.5s, transform 0.5s;
  transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
}
.carousel__activator:nth-of-type(10):checked ~ .carousel__controls:nth-of-type(10) {
  display: block;
  opacity: 1;
}
.carousel__activator:nth-of-type(10):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(10) {
  opacity: 1;
}


.carousel__control {
  height: 30px;
  width: 30px;
  margin-top: -15px;
  top: 50%;
  position: absolute;
  display: block;
  cursor: pointer;
  border-width: 5px 5px 0 0;
  border-style: solid;
  opacity: 0.35;
  opacity: 1;
  outline: 0;
  z-index: 3;
  color: #fafafa;
  mix-blend-mode: difference;
}
.carousel__control:hover {
  opacity: 1;
}
.carousel__control--backward {
  left: 20px;
  -webkit-transform: rotate(-135deg);
          transform: rotate(-135deg);
}
.carousel__control--forward {
  right: 20px;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
}
.carousel__indicators {
  position: absolute;
  bottom: 20px;
  width: 100%;
  text-align: center;
}
.carousel__indicator {
  height: 10px;
  width: 10px;
  border-radius: 100%;
  display: inline-block;
  z-index: 2;
  cursor: pointer;
  opacity: 0.35;
  margin: 0 2.5px 0 2.5px;
}
.carousel__indicator:hover {
  opacity: 0.75;
}
.carousel__track {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 0;
  margin: 0;
  transition: -webkit-transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s;
  transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
}
.carousel__track .carousel__slide {
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 1;
}

.carousel__track .carousel__slide:nth-of-type(1) {
  -webkit-transform: translateX(000%) translateZ(0);
          transform: translateX(000%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(2) {
  -webkit-transform: translateX(100%) translateZ(0);
          transform: translateX(100%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(3) {
  -webkit-transform: translateX(200%) translateZ(0);
          transform: translateX(200%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(4) {
  -webkit-transform: translateX(300%) translateZ(0);
          transform: translateX(300%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(5) {
  -webkit-transform: translateX(400%) translateZ(0);
          transform: translateX(400%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(6) {
  -webkit-transform: translateX(500%) translateZ(0);
          transform: translateX(500%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(7) {
  -webkit-transform: translateX(600%) translateZ(0);
          transform: translateX(600%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(8) {
  -webkit-transform: translateX(700%) translateZ(0);
          transform: translateX(700%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(9) {
  -webkit-transform: translateX(800%) translateZ(0);
          transform: translateX(800%) translateZ(0);
}

.carousel__track .carousel__slide:nth-of-type(10) {
  -webkit-transform: translateX(900%) translateZ(0);
          transform: translateX(900%) translateZ(0);
}


.carousel--scale .carousel__slide {
  -webkit-transform: scale(0);
          transform: scale(0);
}
.carousel__slide {
  height: 100%;
  position: absolute;
  opacity: 0;
  overflow: hidden;
}
.carousel__slide .overlay {height: 100%;}
.carousel--thumb .carousel__indicator {
  height: 30px;
  width: 30px;
}
.carousel__indicator {
  background-color: #fafafa;
}

.carousel__slide:nth-of-type(1),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(2),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(3),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(3) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(4),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(4) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(5),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(5) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(6),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(6) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(7),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(7) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(8),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(8) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(9),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(9) {
  background-size: cover;
  background-position: center;
}

.carousel__slide:nth-of-type(10),
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(10) {
  background-size: cover;
  background-position: center;
}

&lt;/style&gt;

&lt;script&gt;
  function isVisible(el) {
        while (el) {
            if (el === document) {
                return true;
            }

            var $style = window.getComputedStyle(el, null);

            if (!el) {
                return false;
            } else if (!$style) {
                return false;
            } else if ($style.display === &apos;none&apos;) {
                return false;
            } else if ($style.visibility === &apos;hidden&apos;) {
                return false;
            } else if (+$style.opacity === 0) {
                return false;
            } else if (($style.display === &apos;block&apos; || $style.display === &apos;inline-block&apos;) &amp;&amp;
                $style.height === &apos;0px&apos; &amp;&amp; $style.overflow === &apos;hidden&apos;) {
                return false;
            } else {
                return $style.position === &apos;fixed&apos; || isVisible(el.parentNode);
            }
        }
  }
  
  setInterval(function(){
    var j=0;
    var elements = document.querySelectorAll(&apos;.carousel__control--forward&apos;);
    for(i=(elements.length - 1);i&gt;-1;i--) {
      if(isVisible(elements[i])) j=i;
    }
    elements[j].click();
  },7000);
  
&lt;/script&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/shinji-new.png&quot; alt=&quot;PNG&quot; title=&quot;New/empty save game file contents&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/shinji-hacked.png&quot; alt=&quot;PNG&quot; title=&quot;Hacked save game file contents&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 22 May 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/05/22/shinji-and-good-friends-second-hanafuda-impact/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/05/22/shinji-and-good-friends-second-hanafuda-impact/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: Racer</title>
          <description>&lt;p&gt;The Collector prototype didn’t end up being as fun as I had hoped, but I thought it was interestingly that it felt a little like driving. So I wondered whether it would change the feeling by putting some different graphics on top of it. I ripped some temporary graphics from the Atari arcade game Badlands and added one simple collision detection rule and there it was! The first recognisable driving game that would serve as the basis for Daily Driver.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-racer.gif#playdate&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;racer&quot;&gt;Racer&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Uses off screen collision map&lt;/li&gt;
  &lt;li&gt;Crank or buttons to steer&lt;/li&gt;
  &lt;li&gt;Buttons to accelerate&lt;/li&gt;
  &lt;li&gt;Variable maximum speeds&lt;/li&gt;
  &lt;li&gt;Lap counter with checkpoints&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 20 May 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/05/20/racer/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/05/20/racer/</guid>
        </item>
      
    
      
        <item>
          <title>Daily Driver: The Beginning</title>
          <description>&lt;p&gt;After receiving access to the Playdate SDK I took a while to read the docs, and play around with small code samples, eventually starting to create my own prototypes in April and May 2020. One prototype in particular was the genesis of Daily Driver.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/daily-driver-the-beginning.gif#playdate&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;collector&quot;&gt;Collector&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Everything is drawn using graphics primitives (circle, rect, line)&lt;/li&gt;
  &lt;li&gt;Pattern fills rather than pixel dithering&lt;/li&gt;
  &lt;li&gt;Crank or buttons to aim&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 01 May 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/05/01/the-beginning/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/05/01/the-beginning/</guid>
        </item>
      
    
      
        <item>
          <title>Credits: MaBoShi (WiiWare)</title>
          <description>&lt;p&gt;One of the best (according to &lt;a href=&quot;https://www.metacritic.com/game/wii/maboshis-arcade&quot;&gt;MetaCritic&lt;/a&gt;, and &lt;a href=&quot;/2013/06/29/maboshi/&quot;&gt;IMHO&lt;/a&gt;) Wii games is a WiiWare game called MaBoShi that is now mostly lost to time in that Nintendo have closed the Wii Shop Channel. Of course, there are other more nefarious means to procure the game, but I’m not going to go into those here.&lt;/p&gt;

&lt;p&gt;Anyway, I still play this game regularly (still not managed 1Million on Wii but have on the DS download version) and recently unlocked the Staff Credits (Staff Roll).&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 1/1;&quot; videoid=&quot;3z5Hlj2nof4&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;staff-credits&quot;&gt;Staff Credits&lt;/h2&gt;

&lt;p&gt;Producers&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Mikito Ichikawa&lt;/li&gt;
  &lt;li&gt;Satoshi Kira&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Director&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Mikito Ichikawa&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;System Design&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Mikito Ichikawa&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Game Design&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Kuniaki Watanabe&lt;/li&gt;
  &lt;li&gt;Mikito Ichikawa&lt;/li&gt;
  &lt;li&gt;Jun Shimizu&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Programming&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Kotori Yoshimura&lt;/li&gt;
  &lt;li&gt;Tadashi Itō&lt;/li&gt;
  &lt;li&gt;Kuniaki Watanabe&lt;/li&gt;
  &lt;li&gt;Jun Shimizu&lt;/li&gt;
  &lt;li&gt;Mikito Ichikawa&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Design&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Reiko Sato&lt;/li&gt;
  &lt;li&gt;Hiroki Takahashi&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Artwork&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Toki Kando&lt;/li&gt;
  &lt;li&gt;Takanao Kondo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sound&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Daisuke Shiiba&lt;/li&gt;
  &lt;li&gt;Johan Krafft&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;European Localisation&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Edoardo Dodd&lt;/li&gt;
  &lt;li&gt;Miguel Ángel García Segovia&lt;/li&gt;
  &lt;li&gt;Carsten Harmans&lt;/li&gt;
  &lt;li&gt;Kay Hermann&lt;/li&gt;
  &lt;li&gt;Geraint Howells&lt;/li&gt;
  &lt;li&gt;Sonya Mazet&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;NOE Localisation Management&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;William Romick&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Debug&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;DIGITAL Hearts CO. LTD&lt;/li&gt;
  &lt;li&gt;Super Mario Club&lt;/li&gt;
  &lt;li&gt;Shigeo Kimura&lt;/li&gt;
  &lt;li&gt;NOA Product Testing&lt;/li&gt;
  &lt;li&gt;NOE Testing Team&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Project Management&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Hiroshi Sato&lt;/li&gt;
  &lt;li&gt;Toshiharu Izuno&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Special Thanks&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Koji Sato&lt;/li&gt;
  &lt;li&gt;Toru Inage&lt;/li&gt;
  &lt;li&gt;Kenta Tanaka&lt;/li&gt;
  &lt;li&gt;Kozo Makino&lt;/li&gt;
  &lt;li&gt;Rumiko Hoshino&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Executive Producer&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Satoru Iwata&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All Rights, including the copyrights of Game, Scenario, Music and Program reserved by&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Nintendo&lt;/li&gt;
  &lt;li&gt;Mindware&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;addendum&quot;&gt;Addendum&lt;/h2&gt;

&lt;p&gt;During a chat with Kuniaki Watanabe by Twitter DMs, he outlined the responsibilities of the team:&lt;/p&gt;

&lt;p&gt;Programming&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Kotori Yoshimura (Wii system, Bar game)&lt;/li&gt;
  &lt;li&gt;Mikito Ichikawa (NDS system)&lt;/li&gt;
  &lt;li&gt;Tadashi Ito (Square game)&lt;/li&gt;
  &lt;li&gt;Jun Shimizu (procedural level generator for Bar game)&lt;/li&gt;
  &lt;li&gt;Kuniaki Watanabe (Circle game)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Game Design&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Kuniaki Watanabe (original game prototypes)&lt;/li&gt;
  &lt;li&gt;Mikito Ichikawa (reconstruct for Wii)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Level Design&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Mikito Ichikawa (Bar game)&lt;/li&gt;
  &lt;li&gt;Kuniaki Watanabe (Circle game)&lt;/li&gt;
  &lt;li&gt;Jun Shimizu (procedural level generator for Bar game)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Graphic Design&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Reiko Sato&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 28 Mar 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/03/28/credits-maboshi-wiiware/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/03/28/credits-maboshi-wiiware/</guid>
        </item>
      
    
      
        <item>
          <title>FAQ: Junclassic C.C. &amp; Rope Club</title>
          <description>&lt;p&gt;I wrote a video game FAQ and uploaded it to GameFAQs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/ps/573058-junclassic-cc-and-rope-club/faqs&quot;&gt;www.gamefaqs.com/ps/573058-junclassic-cc-and-rope-club/faqs&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 25 Mar 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/03/25/faq-junclassic-cc-rope-club/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/03/25/faq-junclassic-cc-rope-club/</guid>
        </item>
      
    
      
        <item>
          <title>Japanese Windows 98 SE (VMWare)</title>
          <description>&lt;p&gt;I recently created this Virtual Machine of Windows 98 SE (Japanese) because one did not exist. Download should be on winworldpc.com soon, but you can grab it now at: &lt;a href=&quot;https://archive.org/details/windows-98-se-japanese-vmware&quot;&gt;archive.org/details/windows-98-se-japanese-vmware&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 13 Mar 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/03/13/japanese-windows-98-se-vmware/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/03/13/japanese-windows-98-se-vmware/</guid>
        </item>
      
    
      
        <item>
          <title>FAQ: Maboshi’s Arcade</title>
          <description>&lt;p&gt;I wrote a video game FAQ and uploaded it to GameFAQs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/wii/946472-maboshis-arcade/faqs&quot;&gt;www.gamefaqs.com/wii/946472-maboshis-arcade/faqs&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 11 Mar 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/03/11/faq-maboshis-arcade/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/03/11/faq-maboshis-arcade/</guid>
        </item>
      
    
      
        <item>
          <title>POPEYE Big 100th issue (1981-04-10)</title>
          <description>&lt;p&gt;This is a special 100th issue of POPEYE a Japanese lifestyle “Magazine for City Boys”: &lt;a href=&quot;https://archive.org/details/popeye-magazine-for-city-boys-1981-04-10/mode/2up&quot;&gt;archive.org/details/popeye-magazine-for-city-boys-1981-04-10/mode/2up&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Only very minor game related things in this, but I thought it worth posting. There’s a Game &amp;amp; Watch as a selectable reward/prize in a competition by Puma. Plus a “how to” for Hanafuda (the reason I bought the issue) and reviews of various physical card games. Plus lots more besides!&lt;/p&gt;

&lt;p&gt;If you don’t have time to flick through 276 pages, then I created a twitter thread that summarises the most interesting stuff: &lt;a href=&quot;https://twitter.com/gingerbeardman/status/1235585813137756161&quot;&gt;twitter.com/gingerbeardman/status/1235585813137756161&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/popeye-magazine-for-city-boys-1981-04-10/mode/2up&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/popeye-big-100th-issue.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 06 Mar 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/03/06/popeye-big-100th-issue/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/03/06/popeye-big-100th-issue/</guid>
        </item>
      
    
      
        <item>
          <title>Searching for: The Claque Beignet</title>
          <description>&lt;p&gt;Yesterday on Twitter I spotted &lt;a href=&quot;https://twitter.com/Le_Toulousaing/status/1234770480554553344&quot;&gt;a plea for more information on an old Flash game “The Claque Beignet”&lt;/a&gt; - a game in which you slap singing characters with an extended arm. Apparently there was no maker’s mark on the game nor ties to any website. I was intrigued! &lt;/p&gt;

&lt;p&gt;Here are the steps I took to trace the creator of the game.&lt;/p&gt;

&lt;h2 id=&quot;1-searching-with-limited-knowledge&quot;&gt;1. Searching with Limited Knowledge&lt;/h2&gt;

&lt;p&gt;The earliest mentions of the game I could find with a simple date-range google search were from 2004 and 2005.  The game had been pegged as possibly from 2003 so I was not happy and kept on going!&lt;/p&gt;

&lt;h2 id=&quot;2-obtaining-the-game&quot;&gt;2. Obtaining the Game&lt;/h2&gt;

&lt;p&gt;I did a simple Google search for the game and found a site with the game, then saved the SWF file locally by inspecting the source to grab the URL of the SWF file. Here I assumed that the game was a self-contained single file. &lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;You can check that assumption by playing the game in Chrome (at least whilst it still supports Flash!) and checking the web inspector network tab to see if any other files are loaded during play.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;3-decompiling-the-swf&quot;&gt;3. Decompiling the SWF&lt;/h2&gt;

&lt;p&gt;I have the tools to decompile SWF files so this was an easy fist step for me. I found minimal interesting information, but it turned out to be enough. &lt;/p&gt;

&lt;p&gt;There were indeed no maker’s details or credits, but some interesting variable naming (noise spelled noize) and some relative URLs for the online high score system. These URLs involved the .php3 file extension, which was a good clue. &lt;/p&gt;

&lt;p&gt;PHP3 was around from 1997–2000, followed by PHP4 from 2000–2004. One thing we can assume is that the developer was active during the lifetime of PHP3, so it gave us a window of years to look at. &lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;The online high score system could have pre-dated the game, so it was not safe to assume the game was developed in that period.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;4. Searching with Learned Knowledge&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So, armed with some idea of the year the game was made it was simple enough task. Let’s start with the last year PHP3 was available. I went to Google and entered: &lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;“The Claque Beignet” 2000&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Halfway down the first page of results:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/the-claque-baignet.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Bingo! &lt;/p&gt;

&lt;p&gt;The game was published on 21 November 2000 by &lt;a href=&quot;https://www.raoulsinier.com&quot;&gt;Raoul Sinier&lt;/a&gt;. His older website domain is &lt;a href=&quot;https://web.archive.org/web/20011205085956/http://www.raspage.com/pages/mainframe.html&quot;&gt;on archive.org going back to 2001&lt;/a&gt;, so it can be confirmed.&lt;/p&gt;

&lt;p&gt;And there we have it. C’est ça!&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 04 Mar 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/03/04/searching-for-the-claque-beignet/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/03/04/searching-for-the-claque-beignet/</guid>
        </item>
      
    
      
        <item>
          <title>Music: T&amp;E SOFT “New 3D Golf Simulation” games</title>
          <description>&lt;p&gt;I’m a huge fan of the music in T&amp;amp;E SOFT’s “New 3D Golf Simulation” series, so I have spent some time to digitise the music from those games in the series I did not have in my music library. That makes 13 new soundtracks!&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Devil’s Course (PC-98, 3DO)&lt;/li&gt;
  &lt;li&gt;Eight Lakes G.C. (PC-98, X68000)&lt;/li&gt;
  &lt;li&gt;Harukanaru Augusta (PC-98, X68000)&lt;/li&gt;
  &lt;li&gt;Harukanaru Augusta HD (PC-98)&lt;/li&gt;
  &lt;li&gt;Masters: Harukanaru Augusta 2 (PC-98)&lt;/li&gt;
  &lt;li&gt;Masters: Harukanaru Augusta 3 (3DO)&lt;/li&gt;
  &lt;li&gt;Pebble Beach no Hatou (3DO)&lt;/li&gt;
  &lt;li&gt;T&amp;amp;E Selection (PC-98)&lt;/li&gt;
  &lt;li&gt;Waialae no Kiseki (PC-98 + 3DO)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For PC-98 and X68000 I used a Windows app called HOOT to play back the “chip” music and export it as WAV, then I trimmed any loops and added fades, then finally converted to FLAC and MP3.&lt;/p&gt;

&lt;p&gt;For 3DO I extracted the filesystem from CD-ROM ISOs, then converted files containing audio into WAV and then FLAC. For AIFF/AIFC files I converted using command line ffmpeg, and for Stream files I used ZStream CHUNKS Reader (version 0.96).&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.mediafire.com/folder/tcm6u1rhz1xsy/vgm&quot;&gt;www.mediafire.com/folder/tcm6u1rhz1xsy/vgm&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;They should make it on to the Video Game Music website soon, but they are available first here. Enjoy!&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 01 Mar 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/03/01/music-t-and-e-soft-new-3d-golf-simulation-games/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/03/01/music-t-and-e-soft-new-3d-golf-simulation-games/</guid>
        </item>
      
    
      
        <item>
          <title>Iwata Asks Downloader</title>
          <description>&lt;p&gt;This tool downloads the Iwata Asks series of interviews, saving as Markdown and HTML with images. ePub files are optional and can be generated in a secondary post-process phase.&lt;/p&gt;

&lt;p&gt;I created this tool in Spring/Summer 2019 so that I could more easily read and search the Iwata Asks interviews.&lt;/p&gt;

&lt;p&gt;More details: &lt;a href=&quot;https://github.com/gingerbeardman/iwata-asks-downloader&quot; title=&quot;https://github.com/gingerbeardman/iwata-asks-downloader&quot;&gt;github.com/gingerbeardman/iwata-asks-downloader&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 05 Jan 2020 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2020/01/05/iwata-asks-downloader/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2020/01/05/iwata-asks-downloader/</guid>
        </item>
      
    
      
        <item>
          <title>FAQ: Soreyuke!! Hanafuda Doujou</title>
          <description>&lt;p&gt;I wrote a video game FAQ and uploaded it to GameFAQs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/ngpc/916535-soreyuke-hanafuda-doujou/faqs&quot;&gt;www.gamefaqs.com/ngpc/916535-soreyuke-hanafuda-doujou/faqs&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 10 Dec 2019 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2019/12/10/faq-soreyuke-hanafuda-doujou/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2019/12/10/faq-soreyuke-hanafuda-doujou/</guid>
        </item>
      
    
      
        <item>
          <title>FAQ: Hanafuda</title>
          <description>&lt;p&gt;I wrote a video game FAQ and uploaded it to GameFAQs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/ps2/921032-hanafuda/faqs&quot;&gt;www.gamefaqs.com/ps2/921032-hanafuda/faqs&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 04 Dec 2019 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2019/12/04/faq-hanafuda/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2019/12/04/faq-hanafuda/</guid>
        </item>
      
    
      
        <item>
          <title>FAQ: Hanafuda Shiyouyo</title>
          <description>&lt;p&gt;I wrote a video game FAQ and uploaded it to GameFAQs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/wonderswan/577014-hanafuda-shiyouyo/faqs&quot;&gt;www.gamefaqs.com/wonderswan/577014-hanafuda-shiyouyo/faqs&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 04 Dec 2019 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2019/12/04/faq-hanafuda-shiyouyo/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2019/12/04/faq-hanafuda-shiyouyo/</guid>
        </item>
      
    
      
        <item>
          <title>FAQ: Hana to Ryuu</title>
          <description>&lt;p&gt;I wrote a video game FAQ and uploaded it to GameFAQs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/ps/572974-hana-to-ryuu/faqs&quot;&gt;www.gamefaqs.com/ps/572974-hana-to-ryuu/faqs&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 03 Dec 2019 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2019/12/03/faq-hana-to-ryuu/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2019/12/03/faq-hana-to-ryuu/</guid>
        </item>
      
    
      
        <item>
          <title>FAQ: Bomberman Blast</title>
          <description>&lt;p&gt;I wrote a video game FAQ and uploaded it to GameFAQs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/wii/945463-bomberman-blast/faqs&quot;&gt;www.gamefaqs.com/wii/945463-bomberman-blast/faqs&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 03 Dec 2019 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2019/12/03/faq-bomberman-blast/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2019/12/03/faq-bomberman-blast/</guid>
        </item>
      
    
      
        <item>
          <title>Hanafuda by ZAT SOFT</title>
          <description>&lt;p&gt;These beautiful cards were created in 1983 using only characters, without bitmap graphics. This was because the Sharp MZ-700, like many home computers of its era, couldn’t do bitmap graphics.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hanafuda-zat-soft.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;Hanafuda on Sharp MZ-700. By ZAT SOFT, 1983.&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Here is a download of the &lt;a href=&quot;http://vectorpoem.com/playscii/&quot;&gt;Playscii&lt;/a&gt; art files for the above cards: &lt;a href=&quot;https://www.dropbox.com/s/7j8lyoi6twdderl/Sharp%20MZ-700%20Hanafuda.zip?dl=0&quot;&gt;Sharp MZ-700 Hanafuda.zip&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also included are a set of blank cards so you can try creating something yourself.&lt;/p&gt;

&lt;p&gt;I encourage you to at least try as you’ll encounter some of the genius design decisions made by the original creator!&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hanafuda-zat-soft-playscii.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;Hanafuda October month recreated in Playscii using Sharp MZ-700 character set&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 02 Dec 2019 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2019/12/02/hanafuda-by-zat-soft/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2019/12/02/hanafuda-by-zat-soft/</guid>
        </item>
      
    
      
        <item>
          <title>“Game Machine” magazine archive</title>
          <description>&lt;p&gt;343 issues of Japanese arcade magazine GAME MACHINE spanning 1974/08 to 1988/12: https://onitama.tv/gamemachine/archive.html&lt;/p&gt;

&lt;p&gt;Mirrored as one archive: https://archive.org/details/game-machine
And as a collection at: https://archive.org/details/game_machine_magazine_jp&lt;/p&gt;

&lt;p&gt;Interesting issues:&lt;/p&gt;

&lt;p&gt;Yoshikazu Endo honors Special Issue (No. 72 May 15, 1977)
https://archive.org/details/game-machine-magazine-19770515p
 Invaders boom heyday (No. 117 April 15, 1979)
https://archive.org/details/game-machine-magazine-19790415p
 Video game machine Special Issue (No. 201 November 29, 1982)
https://archive.org/details/game-machine-magazine-19821129p
Thanks to the fine folks at ONION software / onitama and Amusement Press Inc. for making these available. The scans are well done with OCR selectable/searchable Japanese text.&lt;/p&gt;

&lt;p&gt;I took some time to mirror the collection at the Internet Archive. Enjoy!&lt;/p&gt;

&lt;p&gt;Update, May 2023: A further 269 issues of Japanese arcade magazine GAME MACHINE spanning 1991/01 to 2002/06 have been uploaded to Internet Archive, which brings the current total to 612!&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 20 Nov 2019 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2019/11/20/game-machine-magazine-archive/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2019/11/20/game-machine-magazine-archive/</guid>
        </item>
      
    
      
        <item>
          <title>List of video games featuring Moai</title>
          <description>&lt;p&gt;I created a website mashing up a bunch of things that I love:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Moai&lt;/li&gt;
  &lt;li&gt;Videogames&lt;/li&gt;
  &lt;li&gt;Lists&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://moai.games&quot; title=&quot;https://moai.games&quot;&gt;moai.games&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 14 Aug 2019 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2019/08/14/moai-games/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2019/08/14/moai-games/</guid>
        </item>
      
    
      
        <item>
          <title>FAQ: Suujin Taisen</title>
          <description>&lt;p&gt;I wrote a video game FAQ and uploaded it to GameFAQs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/ds/939118-suujin-taisen/faqs&quot;&gt;www.gamefaqs.com/ds/939118-suujin-taisen/faqs&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 25 Jul 2019 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2019/07/25/faq-suujin-taisen/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2019/07/25/faq-suujin-taisen/</guid>
        </item>
      
    
      
        <item>
          <title>Verbum “The Journal of Personal Computer-Aesthetics”</title>
          <description>&lt;p&gt;Verbum “The Journal of Personal Computer-Aesthetics” (1986–1991) was an early computer lifestyle magazine focusing on interactive art and computer graphics.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;All issues (well, except issue 4.3): &lt;a href=&quot;https://archive.org/details/verbummagazine?&amp;amp;sort=date&quot;&gt;archive.org/details/verbummagazine?&amp;amp;sort=date&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Table of contents for all issues: &lt;a href=&quot;https://en.wikipedia.org/wiki/Verbum_(magazine)&quot;&gt;en.wikipedia.org/wiki/Verbum_(magazine)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Podcast interview with its creator Michael Gosney: &lt;a href=&quot;https://www.drfutureshow.com/drfutureblog/interview-media-pioneer-michael-gosney-on-the-renaissance-of.html&quot;&gt;www.drfutureshow.com/drfutureblog/interview-media-pioneer-michael-gosney-on-the-renaissance-of.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/verbum-the-journal-of-personal-computer-aesthetics.jpg&quot; alt=&quot;Verbum issue 5.2 front cover&quot; title=&quot;Verbum issue 5.2 front cover&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 10 Jul 2019 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2019/07/10/verbum-journal-of-personal-computer-aesthetics/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2019/07/10/verbum-journal-of-personal-computer-aesthetics/</guid>
        </item>
      
    
      
        <item>
          <title>FAQ: Youkai Hana Asobi</title>
          <description>&lt;p&gt;I wrote a video game FAQ and uploaded it to GameFAQs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/ps/583577-youkai-hana-asobi/faqs&quot;&gt;www.gamefaqs.com/ps/583577-youkai-hana-asobi/faqs&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 04 Jul 2019 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2019/07/04/faq-youkai-hana-asobi/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2019/07/04/faq-youkai-hana-asobi/</guid>
        </item>
      
    
      
        <item>
          <title>Replacing bitmap graphics in a PlayStation game</title>
          <description>&lt;blockquote&gt;
  &lt;p&gt;A version of this article was &lt;a href=&quot;https://www.patreon.com/posts/28136581&quot;&gt;originally posted on my Patreon&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I found an old Hanafuda Koi-Koi game that I can no longer easily play due to… sigh… what they call progress? It’s called Koikoi Komachi and was released around 2005 for Mac OS X (initially for PPC, and later Intel).&lt;/p&gt;

&lt;p&gt;I really like the cards images that it has, and was able to extract them using &lt;a href=&quot;https://echoone.com/filejuicer/&quot;&gt;File Juicer&lt;/a&gt; which is a kind of Swiss Army Knife for easily extracting files that might be embedded in an app, archive or disk image.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hanafuda-card-transplant-1.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;The original cards as a sprite sheet extract from Koikoi Komachi&quot; /&gt;&lt;/p&gt;

&lt;p&gt;But just looking at the cards is not enough. I really needed to play a video game with them, you know? So I thought it would be cool to transplant them into the PlayStation game Youkai Hana Asobi.&lt;/p&gt;

&lt;h2 id=&quot;heres-what-i-did&quot;&gt;Here’s what I did&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Split the new card image into individual cards&lt;/li&gt;
  &lt;li&gt;Resize/shrink the individual cards to the dimensions used in the PS1 game&lt;/li&gt;
  &lt;li&gt;Extract the images I want to edit from the PS1 game&lt;/li&gt;
  &lt;li&gt;Edit the extracted images to add the new cards and make any other changes&lt;/li&gt;
  &lt;li&gt;Replace the images in the PS1 game with the new ones&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;image-manipulation&quot;&gt;Image Manipulation&lt;/h2&gt;

&lt;p&gt;To do the image splitting and resizing I used &lt;a href=&quot;https://flyingmeat.com/retrobatch/&quot;&gt;Retrobatch&lt;/a&gt; which makes this kind of stuff really easy. I created a workflow to crop out the individual cards and do the resizing all in one batch. Very cool!&lt;/p&gt;

&lt;h2 id=&quot;image-editing&quot;&gt;Image Editing&lt;/h2&gt;

&lt;p&gt;PlayStation images are palette-based so you need to use an image editor that respects the embedded indexed colour palette. There may be other capable editors, but Adobe Photoshop is very good at this sort of thing so that’s what I used. Any old version will do, you definitely do not need the latest version.&lt;/p&gt;

&lt;p&gt;I pasted each of my small card images into the two images used by the game, replacing the spectre/monster cards that are default. I also took time to change the options screen to modify the thumbnail that signifies which card design you’re using, and I also added a “NEW” label to the title screen.&lt;/p&gt;

&lt;p&gt;I stopped short of changing the “help” card images because that would have been a lot more work and I do not personally look at those whilst playing.&lt;/p&gt;

&lt;h2 id=&quot;rom-hacking&quot;&gt;ROM Hacking&lt;/h2&gt;

&lt;p&gt;There are many ways to get images out of a PS1 game, but I settled on &lt;a href=&quot;https://www.romhacking.net/utilities/799/&quot;&gt;Tim2View&lt;/a&gt; because it offers an all-in-one solution for extraction and insertion. It is as easy as:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Export PNG… (F4)&lt;/li&gt;
  &lt;li&gt;(do your image editing elsewhere)&lt;/li&gt;
  &lt;li&gt;Import PNG… (F5)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Warning:&lt;/strong&gt; Tim2View writes to your PS1 bin file at each operation—without prompting—so always keep a backup just in case something goes wrong!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gotcha:&lt;/strong&gt; be sure to respect whatever colour is marked as transparent when making your image edits. In my case this was the colour black (0,0,0) so I had to make sure to use an almost-black colour in my new graphics to avoid unwanted transparent pixels. You can quickly check the state of your image by toggling the background transparency type at the bottom of the window. If it’s wrong just tweak and re-import.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hanafuda-card-transplant-2.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;A composite image showing the various graphics that were replaced or edited&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;that-was-fun&quot;&gt;That was fun!&lt;/h2&gt;

&lt;p&gt;I then used &lt;a href=&quot;https://projects.sappharad.com/tools/multipatch.html&quot;&gt;MultiPatch&lt;/a&gt; to create an IPS patch file from the changes, so I could make this mod easy for other gamers to enjoy.&lt;/p&gt;

&lt;p&gt;The finished patch is available at: &lt;a href=&quot;https://www.romhacking.net/hacks/4593/&quot;&gt;www.romhacking.net/hacks/4593/&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;screenshot&quot;&gt;Screenshot&lt;/h2&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hanafuda-card-transplant-3.png#pixel&quot; alt=&quot;PNG&quot; title=&quot;The final graphics being used whilst playing a game of Koi-Koi&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 04 Jul 2019 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2019/07/04/replacing-bitmap-graphics-in-a-playstation-game/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2019/07/04/replacing-bitmap-graphics-in-a-playstation-game/</guid>
        </item>
      
    
      
        <item>
          <title>Redumping Discs</title>
          <description>&lt;p&gt;Redump is a Disc Preservation Project that requires multiple verified dumps of the same game disc before it is marked as good. It’s a worthy endeavour that secures the future for disc-based games. Their data is public and downloadable, and I’ve heard that the game data is available at archive.org.&lt;/p&gt;

&lt;p&gt;To get involved with such dumping and verification, you’ll need:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;a compatible disc drive/reader (mine is a Plextor PX-716UF)&lt;/li&gt;
  &lt;li&gt;some free/open-source software (and a Windows install)&lt;/li&gt;
  &lt;li&gt;time (most discs take a quite a few minutes)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I started out dumping my rarest discs, some titles for the ill-fated NUON system. More recently I’ve been dumping my collection of obscure Japanese PS1 games, amongst others.&lt;/p&gt;

&lt;p&gt;You can check out my dumps so far at &lt;a href=&quot;http://redump.org/discs/dumper/gingerbeardman/&quot;&gt;redump.org/discs/dumper/gingerbeardman/&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 14 Jun 2019 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2019/06/14/redumping-discs/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2019/06/14/redumping-discs/</guid>
        </item>
      
    
      
        <item>
          <title>FAQ: Devil’s Course</title>
          <description>&lt;p&gt;I wrote a video game FAQ and uploaded it to GameFAQs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/genesis/570461-devils-course/faqs&quot;&gt;www.gamefaqs.com/genesis/570461-devils-course/faqs&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 13 Jun 2019 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2019/06/13/faq-devils-course/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2019/06/13/faq-devils-course/</guid>
        </item>
      
    
      
        <item>
          <title>What a FAQ up!</title>
          <description>&lt;p&gt;If, like me, you can’t read katakana and hiragana then Japanese games can take a fair bit of deciphering to be able to play and enjoy. I use the Google Translate iOS app and some other tricks (which I’ll save for another post) to translate game menus and text, and have mostly kept notes of my findings.&lt;/p&gt;

&lt;p&gt;With my most recent game translation, I realised that I should make more of an effort to share that work so it can help others enjoy these amazing games. So I went through my notes and pulled out several translations of various obscure Japanese games that I’d done in the past for myself. No apologies that they’re mostly golf and hanafuda games—my catnip.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/msx/953282-the-golf/faqs/77373&quot;&gt;The Golf&lt;/a&gt; (1988, MSX)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/genesis/586373-pebble-beach-golf-links/faqs/77377&quot;&gt;New 3D Golf Simulation: Pebble Beach no Hatou&lt;/a&gt; (1993, SMD)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/genesis/570460-harukanaru-augusta/faqs/77379&quot;&gt;New 3D Golf Simulation: Harukanaru Augusta&lt;/a&gt; (1993, SMD)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/genesis/570461-devils-course/faqs/77380&quot;&gt;New 3D Golf Simulation: Devil’s Course&lt;/a&gt; (1994, SMD)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/genesis/570462-new-3d-golf-simulation-waialae-no-kiseki/faqs/77378&quot;&gt;New 3D Golf Simulation: Waialae no Kiseki&lt;/a&gt; (1994, SMD)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/ps/572768-cross-romance-koi-to-mahjong-to-hanafuda-to/faqs/77382&quot;&gt;Cross Romance: Koi to Mahjong to Hanafuda to&lt;/a&gt; (1997, PS1)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/ps/573058-junclassic-cc-and-rope-club/faqs/77381&quot;&gt;Jun Classic C.C. &amp;amp; Rope Club&lt;/a&gt; (1998, PS1)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/ps/566070-the-hanafuda-jarin-ko-chie/faqs/77376&quot;&gt;Simple Characters 2000 Series Vol.04 - Jarinko Chie - The Hanafuda&lt;/a&gt; (2001, PS1)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/ds/997750-pang-magical-michael/faqs/77375&quot;&gt;Pang: Magical Michael&lt;/a&gt; (2010, NDS)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can find them all at GameFAQs: &lt;a href=&quot;https://gamefaqs.gamespot.com/community/msephton/contributions/faqs&quot;&gt;gamefaqs.gamespot.com/community/msephton/contributions/faqs&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;GameFAQs happens to have a fantastic new (to me) editor that makes creating a guide as easy as typing a WordPress or Patreon post. &lt;/p&gt;

&lt;p&gt;Also crazy to see that &lt;a href=&quot;https://gamefaqs.gamespot.com/ps/572737-penny-racers/faqs/4459&quot;&gt;I submitted my first FAQ in August 1996&lt;/a&gt;—some 23 years and almost half a lifetime ago!&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 22 May 2019 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2019/05/22/what-a-faq-up/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2019/05/22/what-a-faq-up/</guid>
        </item>
      
    
      
        <item>
          <title>FAQ: Pebble Beach Golf Links</title>
          <description>&lt;p&gt;I wrote a video game FAQ and uploaded it to GameFAQs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/genesis/586373-pebble-beach-golf-links/faqs&quot;&gt;www.gamefaqs.com/genesis/586373-pebble-beach-golf-links/faqs&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 21 May 2019 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2019/05/21/faq-pebble-beach-golf-links/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2019/05/21/faq-pebble-beach-golf-links/</guid>
        </item>
      
    
      
        <item>
          <title>FAQ: The Golf</title>
          <description>&lt;p&gt;I wrote a video game FAQ and uploaded it to GameFAQs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/msx/953282-the-golf/faqs&quot;&gt;www.gamefaqs.com/msx/953282-the-golf/faqs&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 20 May 2019 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2019/05/20/faq-the-golf/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2019/05/20/faq-the-golf/</guid>
        </item>
      
    
      
        <item>
          <title>FAQ: Pang: Magical Michael</title>
          <description>&lt;p&gt;I wrote a video game FAQ and uploaded it to GameFAQs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/ds/997750-pang-magical-michael/faqs&quot;&gt;www.gamefaqs.com/ds/997750-pang-magical-michael/faqs&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 20 May 2019 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2019/05/20/faq-pang-magical-michael/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2019/05/20/faq-pang-magical-michael/</guid>
        </item>
      
    
      
        <item>
          <title>FAQ: New 3D Golf Simulation: Waialae no Kiseki</title>
          <description>&lt;p&gt;I wrote a video game FAQ and uploaded it to GameFAQs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/genesis/570462-new-3d-golf-simulation-waialae-no-kiseki/faqs&quot;&gt;www.gamefaqs.com/genesis/570462-new-3d-golf-simulation-waialae-no-kiseki/faqs&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 20 May 2019 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2019/05/20/faq-new-3d-golf-simulation-waialae-no-kiseki/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2019/05/20/faq-new-3d-golf-simulation-waialae-no-kiseki/</guid>
        </item>
      
    
      
        <item>
          <title>FAQ: Harukanaru Augusta</title>
          <description>&lt;p&gt;I wrote a video game FAQ and uploaded it to GameFAQs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/genesis/570460-harukanaru-augusta/faqs&quot;&gt;www.gamefaqs.com/genesis/570460-harukanaru-augusta/faqs&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 20 May 2019 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2019/05/20/faq-harukanaru-augusta/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2019/05/20/faq-harukanaru-augusta/</guid>
        </item>
      
    
      
        <item>
          <title>FAQ: Cross Romance: Koi to Mahjong to Hanafuda to</title>
          <description>&lt;p&gt;I wrote a video game FAQ and uploaded it to GameFAQs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/ps/572768-cross-romance-koi-to-mahjong-to-hanafuda-to/faqs&quot;&gt;www.gamefaqs.com/ps/572768-cross-romance-koi-to-mahjong-to-hanafuda-to/faqs&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 20 May 2019 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2019/05/20/faq-cross-romance-koi-to-mahjong-to-hanafuda-to/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2019/05/20/faq-cross-romance-koi-to-mahjong-to-hanafuda-to/</guid>
        </item>
      
    
      
        <item>
          <title>Back In Time: Vintage Maps of Akihabara (1976–2001)</title>
          <description>&lt;p&gt;I often browse old Japanese console and computer magazines. I’m mainly searching for old &lt;a href=&quot;https://en.wikipedia.org/wiki/Hanafuda&quot;&gt;Hanafuda Koi-Koi&lt;/a&gt; video games, but sometimes I stumble across something else that is interesting in a totally different way. &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://twitter.com/gingerbeardman/status/1126978608562679808&quot;&gt;In May 2019&lt;/a&gt;, whilst browsing an old issue of &lt;a href=&quot;https://ja.wikipedia.org/wiki/ポプコム&quot;&gt;POPCOM&lt;/a&gt; over at the wonderful Internet Archive, I found a period map of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Akihabara&quot;&gt;Akihabara&lt;/a&gt; 秋葉原 district—famous for its multitude of stores selling electronics, video games and other otaku goods. &lt;/p&gt;

&lt;p&gt;I shared the map on Twitter, where it was well received, so I decided to go into this a bit more deeply here. Every so often I add any maps I find and there are now over 20 covering almost every year throughout the 1980s and 1990s.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://twitter.com/gingerbeardman&quot;&gt;Get in touch&lt;/a&gt; if you have a map of Akihabara from the missing years. The Japanese あきはばら地図 or 秋葉原マップ mean “Akihabara map”.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Further reading in Japanese:&lt;/strong&gt; there’s a &lt;a href=&quot;https://www.nikkei.com/article/DGXMZO76881870Q4A910C1000000/&quot;&gt;great article at NIKKEI&lt;/a&gt; that’s well worth a read. If you want something heavier, there’s &lt;a href=&quot;http://blog.livedoor.jp/mouseunit/archives/55039621.html&quot;&gt;a blog post with history of the area&lt;/a&gt; and its name change.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Thanks&lt;/strong&gt; to &lt;a href=&quot;https://www.patreon.com/gingerbeardman&quot;&gt;my Patreon&lt;/a&gt; supporters for funding this research. New supporters are always appreciated!&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;browse-by-year&quot;&gt;Browse by Year&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;#1976&quot;&gt;1976&lt;/a&gt;
…
&lt;a href=&quot;#1981&quot;&gt;1981&lt;/a&gt; 
&lt;a href=&quot;#1982&quot;&gt;1982&lt;/a&gt; 
&lt;a href=&quot;#1983&quot;&gt;1983&lt;/a&gt; 
&lt;a href=&quot;#1984&quot;&gt;1984&lt;/a&gt; 
&lt;a href=&quot;#1985&quot;&gt;1985&lt;/a&gt; 
&lt;a href=&quot;#1987&quot;&gt;1987&lt;/a&gt; 
&lt;a href=&quot;#1988&quot;&gt;1988&lt;/a&gt;
…
&lt;a href=&quot;#1991&quot;&gt;1991&lt;/a&gt;
…
&lt;a href=&quot;#1994&quot;&gt;1994&lt;/a&gt; 
&lt;a href=&quot;#1995&quot;&gt;1995&lt;/a&gt; 
&lt;a href=&quot;#1996&quot;&gt;1996&lt;/a&gt; 
&lt;a href=&quot;#1997&quot;&gt;1997&lt;/a&gt; 
&lt;a href=&quot;#1998&quot;&gt;1998&lt;/a&gt; 
&lt;a href=&quot;#1999&quot;&gt;1999&lt;/a&gt; 
&lt;a href=&quot;#2000&quot;&gt;2000&lt;/a&gt; 
&lt;a href=&quot;#2001&quot;&gt;2001&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;1976&quot;&gt;1976&lt;/h3&gt;

&lt;p&gt;The November 1976 issue of I/O magazine included a map of Akihabara which at this point was mostly radio electronics shops, with only very early signs of DIY computers.&lt;/p&gt;

&lt;p&gt;Two maps can be seen in the combined book of issues from 1976 and 1977 that is available at Internet Archive. Hurrah!&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/Io197611-19772/page/n19/mode/2up&quot;&gt;archive.org/details/Io197611-19772/page/n19/mode/2up&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/Io197611-19772/page/n215/mode/2up&quot;&gt;archive.org/details/Io197611-19772/page/n215/mode/2up&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/Io197611-19772/page/n19/mode/2up?view=theater&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/akihabara-1976.jpg&quot; alt=&quot;Akihabara, 1976&quot; width=&quot;740&quot; height=&quot;1086&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1981&quot;&gt;1981&lt;/h2&gt;

&lt;p&gt;A map was featured in だからいまマイコン “So now Microcomputer” by the University of Tokyo Microcomputer Club, Shueisha, 1981. &lt;a href=&quot;https://www.amazon.co.jp/だからいまマイコン-1981年/dp/B000J7SD6W&quot;&gt;Amazon Japan link&lt;/a&gt;. Thanks to a &lt;a href=&quot;https://twitter.com/skuma919/status/1674288156336885762&quot;&gt;generous Twitter user&lt;/a&gt; for posting this photo at my request.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/images/posts/akihabara-1981.jpg&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/akihabara-1981.jpg&quot; alt=&quot;Akihabara, 1981&quot; width=&quot;740&quot; height=&quot;555&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;1982&quot;&gt;1982&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Missing:&lt;/strong&gt; another &lt;a href=&quot;https://twitter.com/gds2546/status/956432325155237888&quot;&gt;one from 1982 on Twitter&lt;/a&gt;, if I’m reading correctly it’s from the book こんにちわマイコンに載 “Konichiwa Microcomputer”. &lt;a href=&quot;https://www.amazon.co.jp/こんにちはマイコン―まんが版-1982年-ワンダーライフコミックス-すがや-みつる/dp/B000J7IP74&quot;&gt;Amazon Japan link&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here’s a map from the &lt;a href=&quot;https://archive.org/details/io-198201/page/316/mode/1up?view=theater&quot;&gt;January 1982 issue of I/O&lt;/a&gt;, also featured in the &lt;a href=&quot;https://archive.org/details/io-198203/page/326/mode/1up?view=theater&quot;&gt;March 1982 issue&lt;/a&gt; which has different article about the shops so both are worth reading. Contrast with the much expanded map that appears further down this page in the &lt;a href=&quot;#1984&quot;&gt;1984&lt;/a&gt; section.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/io-198201/page/316/mode/1up?view=theater&quot;&gt;archive.org/details/io-198201/page/316/mode/1up&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/io-198203/page/326/mode/1up?view=theater&quot;&gt;archive.org/details/io-198203/page/326/mode/1up&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/io-198201/page/316/mode/1up?view=theater&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/akihabara-1982-01.jpg&quot; alt=&quot;Akihabara, January 1982&quot; width=&quot;740&quot; height=&quot;490&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first ever issue of Technopolis, in August 1982, featured a lovely map.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/technopolis-volume-1-august-1982/Technopolis%20-%20Volume%201%20-%20August%201982/page/154/mode/2up&quot;&gt;archive.org/details/technopolis-volume-1-august-1982/Technopolis%20-%20Volume%201%20-%20August%201982/page/154/mode/2up&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/technopolis-volume-1-august-1982/Technopolis%20-%20Volume%201%20-%20August%201982/page/154/mode/2up?view=theater&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/akihabara-1982-technopolis.jpg&quot; alt=&quot;Akihabara, August 1982&quot; width=&quot;740&quot; height=&quot;490&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Such maps make frequent appearances in Technopolis &lt;a href=&quot;https://archive.org/details/technopolis-volume-4-november-1982/page/101/mode/2up&quot;&gt;the one below is from an issue dated November 1982&lt;/a&gt;. Given its illustrated nature the map is somewhat stylised but the landmarks are easily recognised.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/technopolis-volume-4-november-1982/page/101/mode/2up&quot;&gt;archive.org/details/technopolis-volume-4-november-1982/page/101/mode/2up&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/technopolis-volume-4-november-1982/page/101/mode/2up?view=theater&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/akihabara-1982.jpg&quot; alt=&quot;Akihabara, November 1982&quot; width=&quot;740&quot; height=&quot;490&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;1983&quot;&gt;1983&lt;/h3&gt;

&lt;p&gt;A map was included with the January 1983 issue of Micom BASIC magazine. The below image is saved from a &lt;a href=&quot;https://page.auctions.yahoo.co.jp/jp/auction/x1060034656&quot;&gt;Yahoo! Japan Auction listing&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/images/posts/akihabara-1983-micom.jpg&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/akihabara-1983-micom.jpg&quot; alt=&quot;Akihabara, January 1983&quot; width=&quot;740&quot; height=&quot;526&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The map below is from &lt;a href=&quot;https://archive.org/details/POPCOM198305/page/n73&quot;&gt;POPCOM 1983-05&lt;/a&gt; and is followed by 4 pages of listings that refer to the map using the A/J–1/10 key along its edge just in case you want to look some things up.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/POPCOM198305/page/n73/mode/2up&quot;&gt;archive.org/details/POPCOM198305/page/n73/mode/2up&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/POPCOM198305/page/n73/mode/2up?view=theater&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/akihabara-1983.jpg&quot; alt=&quot;Akihabara, May 1983&quot; width=&quot;740&quot; height=&quot;548&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1984&quot;&gt;1984&lt;/h2&gt;

&lt;p&gt;This one from I/O 1984 May issue was found through &lt;a href=&quot;http://hirax.net/diaryweb/2010/06/15.html&quot;&gt;Google&lt;/a&gt; and &lt;a href=&quot;https://web.archive.org/web/20140810174816/http://hirax.net/diaryweb/2010/06/15.html&quot;&gt;Wayback Machine&lt;/a&gt;, and I was lucky enough to be able to find matching scans on from Internet Archive. Compare with the earlier &lt;a href=&quot;#1982&quot;&gt;1982&lt;/a&gt; map from the same magazine.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://web.archive.org/web/20100408004407/http://nhh.mo-blog.jp/ttt/2007/09/post_6a5d.html&quot;&gt;web.archive.org/web/20100408004407/http://nhh.mo-blog.jp/ttt/2007/09/post_6a5d.html&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/Io19845/page/n365/mode/2up&quot;&gt;archive.org/details/Io19845/page/n365/mode/2up&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/Io19845/page/n365/mode/2up?view=theater&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/akihabara-1984.jpg&quot; alt=&quot;Akihabara, May 1984&quot; width=&quot;740&quot; height=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1985&quot;&gt;1985&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Missing:&lt;/strong&gt; Weekly GENDAI 週刊現代 featured a map in issue 206, 13th July 1985. &lt;a href=&quot;https://page.auctions.yahoo.co.jp/jp/auction/1067115599&quot;&gt;Auction link&lt;/a&gt; and &lt;a href=&quot;/images/posts/akihabara-1985-gandai.jpg&quot;&gt;image here&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This one &lt;a href=&quot;https://twitter.com/yoshinokentarou/status/1578567956249706496&quot;&gt;I found referenced on Twitter&lt;/a&gt;, a lovely map from the April 1985 issue of POPCOM (complete with cover artwork by Hiroshi Okamoto)&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/popcom-198504/page/122/mode/2up&quot;&gt;archive.org/details/popcom-198504/page/122/mode/2up&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/popcom-198504/page/122/mode/2up?view=theater&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/akihabara-1985.jpg&quot; alt=&quot;Akihabara, April 1985&quot; width=&quot;740&quot; height=&quot;535&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1987&quot;&gt;1987&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Missing:&lt;/strong&gt; I found mention of maps in a 1987 issue of Be-VAP　ビ・バップ magazine, in fact there seem to be two. &lt;a href=&quot;https://aucview.com/yahoo/k406890612/&quot;&gt;Auction archive is here&lt;/a&gt; with &lt;a href=&quot;/images/posts/akihabara-1987-be-vap.jpg&quot;&gt;incomplete image one&lt;/a&gt; and &lt;a href=&quot;/images/posts/akihabara-1987-be-vap-2.jpg&quot;&gt;incomplete image two&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href=&quot;https://twitter.com/gantaro_junker/status/956173893730889735&quot;&gt;One from 1987 on Twitter&lt;/a&gt;. This one I have tracked down as being from &lt;a href=&quot;https://junkmouse.net/product/ラジオ技術%E3%80%801987年6月号/&quot;&gt;ラジオ技術　1987年6月号&lt;/a&gt; the June 1987 issue of Radio Technology.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/images/posts/akihabara-1987.jpg&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/akihabara-1987.jpg&quot; alt=&quot;Akihabara, June 1987&quot; width=&quot;740&quot; height=&quot;1155&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1988&quot;&gt;1988&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Missing:&lt;/strong&gt; I found one on &lt;a href=&quot;https://twitter.com/QBi389/status/1556213046993108993&quot;&gt;Twitter&lt;/a&gt; from a 1988 issue of ぴあ “Pia” magazine, but so far I’ve been unable to find scans of it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This one from Google, but thankfully also present on Internet Archive. From I/O アイ・オー 1988年07月号 the July 1988 issue of I/O magazine.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://dad-aslan.hatenablog.com/entry/2022/01/06/190000&quot;&gt;dad-aslan.hatenablog.com/entry/2022/01/06/190000&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/Io19887/page/n301/mode/2up&quot;&gt;archive.org/details/Io19887/page/n301/mode/2up&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/Io19887/page/n301/mode/2up?view=theater&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/akihabara-1988.jpg&quot; alt=&quot;Akihabara, July 1988&quot; width=&quot;740&quot; height=&quot;1081&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1991&quot;&gt;1991&lt;/h2&gt;

&lt;p&gt;Through Google I found a map featured in “AK gazette” from Winter 1991.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://asahirom.blog28.fc2.com/blog-entry-58.html&quot;&gt;asahirom.blog28.fc2.com/blog-entry-58.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;/images/posts/akihabara-1991.jpg&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/akihabara-1991.jpg&quot; alt=&quot;Akihabara, Winter 1991&quot; width=&quot;740&quot; height=&quot;522&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1994&quot;&gt;1994&lt;/h2&gt;

&lt;p&gt;A partial map is featured in &lt;a href=&quot;https://www.nikkei.com/article/DGXMZO76881870Q4A910C1000000/&quot;&gt;this article by NIKKEI&lt;/a&gt; which details the history of Akihabara and the phases of changes that happened throughout the 1980s and 1990s. &lt;em&gt;Essential reading!&lt;/em&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1995&quot;&gt;1995&lt;/h2&gt;

&lt;p&gt;There are three really cool maps in ゲームウララ Vol.1より Game Urara Vol. 1 featuring PC, video game and food/amenities. One was &lt;a href=&quot;https://twitter.com/yoshinokentarou/status/1537452086979223552&quot;&gt;seen on Twitter&lt;/a&gt; and the other two were a happy discovery after finding the scans on Internet Archive.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/gameurara-vol1-1995-600DPI/Game%20Urara%20-%20Vol.%201/page/n101/mode/2up&quot;&gt;archive.org/details/gameurara-vol1-1995-600DPI/Game%20Urara%20-%20Vol.%201/page/n101/mode/2up&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/gameurara-vol1-1995-600DPI/Game%20Urara%20-%20Vol.%201%20%28Searchable%29/page/n101/mode/2up?view=theater&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/akihabara-1995.jpg&quot; alt=&quot;Akihabara, 1995&quot; width=&quot;740&quot; height=&quot;349&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;1996&quot;&gt;1996&lt;/h3&gt;

&lt;p&gt;Whilst searching my ever-growing archive of &lt;a href=&quot;https://www.gingerbeardman.com/mmm/&quot;&gt;Japanese Macintosh Media&lt;/a&gt; I found  an archived copy of the &lt;a href=&quot;https://www.akiba.or.jp&quot;&gt;Akiba organisation&lt;/a&gt; website on the &lt;a href=&quot;https://archive.org/details/nikkei-mac-cd-vol-09-1997-02-15&quot;&gt;Nikkei MAC CD Vol. 9, from 1997-02-15&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;「ボーナスは大切にネ！!　秋葉原を上手に歩こう」 (“Take care of your bonus! Walk well in Akihabara.”) is a copy of the Akiba website dated June 1996, some four months before &lt;a href=&quot;https://web.archive.org/web/19961029015522/http://www.akiba.or.jp/&quot;&gt;the earliest version in the Wayback Machine&lt;/a&gt;. A lot of the files that comprise the website are dated 1993, which I assume is when the site was first created. This sort of hand-built site really brings back some fond memories of the websites I built in the mid-90s: image maps, optimised GIFs, no content management system. Ah! The good old days.&lt;/p&gt;

&lt;p&gt;The 250+ maps it contains are hyperlinked in a multitude of ways and the website navigates quite well considering its age. I’ve had most luck browsing using Netscape Navigator 3.01 (ja). The whole thing is quite comprehensive: maps are split into geographical zones and are detailed to a building floor level. Alternative lists by category and product type are also included. There are a total of 221 stores, of which 68 are member stores and receive more in-depth coverage with their own page and photos.&lt;/p&gt;

&lt;p&gt;Check out screenshots of the website &lt;a href=&quot;/images/posts/akihabara-1996-home.png&quot;&gt;home page&lt;/a&gt; and &lt;a href=&quot;/images/posts/akihabara-1996-map.png&quot;&gt;main map page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/images/posts/akihabara-1996.png&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/akihabara-1996.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another &lt;a href=&quot;http://misoji-no-wakaremiti.cocolog-nifty.com/blog/2012/08/201208171995-fe.html&quot;&gt;one from 1996 via Google&lt;/a&gt;, which was featured in the 「ASCII-DATES 1996」 notebook.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/images/posts/akihabara-1996-ascii-dates.jpg&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/akihabara-1996-ascii-dates.jpg&quot; alt=&quot;JPG&quot; width=&quot;740&quot; height=&quot;705&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;1997&quot;&gt;1997&lt;/h3&gt;

&lt;p&gt;From Google, I found a map featured in either PC自作派 “PC DIY” Vol.1 (1997) or Vol.8 (late-1998).&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://setoalpha.hatenablog.com/entry/2019/08/12/024509&quot;&gt;setoalpha.hatenablog.com/entry/2019/08/12/024509&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://setoalpha.hatenablog.com/entry/2019/08/12/024509&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/akihabara-1997.jpg&quot; alt=&quot;JPG&quot; width=&quot;740&quot; height=&quot;1082&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;1998&quot;&gt;1998&lt;/h3&gt;

&lt;p&gt;This new discovery reminded me of another vintage map of Akihabara that I had seen recently, only this time it was digital and available for platforms that were popular at the time: Palm OS (as a native app), Macintosh and Windows (as a FileMaker Pro interactive database).&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/images/posts/akihabara-1998.png&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/akihabara-1998.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All versions of these interactive maps can be downloaded at the following links:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://web.archive.org/web/19981202125237/http://www.dogcow.com/akibamap/index.html&quot;&gt;web.archive.org/web/19981202125237/http://www.dogcow.com/akibamap/index.html&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.vector.co.jp/vpack/browse/person/an009155.html&quot;&gt;www.vector.co.jp/vpack/browse/person/an009155.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I think of this map as the &lt;em&gt;DogCow Map&lt;/em&gt; due to the domain it was hosted on at the time, but its official name is &lt;em&gt;Kosapi’s Akiba Map&lt;/em&gt; 「こさぴーの秋葉マップ」named after the group of fans that created and curated it by documenting their trips to Akihabara.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://web.archive.org/web/20041207024829/http://homepage1.nifty.com:80/akiba/index.html&quot;&gt;web.archive.org/web/20041207024829/http://homepage1.nifty.com:80/akiba/index.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;1999&quot;&gt;1999&lt;/h3&gt;

&lt;p&gt;This one found on Twitter. A 1998/1999 issue of PC magazine DOS/V POWER REPORT featured a &lt;a href=&quot;https://twitter.com/fattyfatty2001/status/1466207648869601281/photo/1&quot;&gt;detailed map&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/fattyfatty2001/status/1466213841159680001/photo/1&quot;&gt;list of stores&lt;/a&gt;. It would be really interesting to see if any of those stores still exist.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://twitter.com/fattyfatty2001/status/1466207648869601281&quot;&gt;twitter.com/fattyfatty2001/status/1466207648869601281&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://twitter.com/fattyfatty2001/status/1466213841159680001&quot;&gt;twitter.com/fattyfatty2001/status/1466213841159680001&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://twitter.com/fattyfatty2001/status/1466207648869601281/photo/1&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/akihabara-1999.jpg&quot; alt=&quot;JPG&quot; width=&quot;740&quot; height=&quot;554&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;2000&quot;&gt;2000&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Missing:&lt;/strong&gt; around this time you could buy the 秋葉原攻略ハンドブック Akihabara Strategy Handbook which included comprehensive maps and shop guides across hundreds of pages.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The HTML version was typical of websites at the time: way too many &lt;em&gt;HTML&lt;/em&gt; files and &lt;em&gt;images&lt;/em&gt; with &lt;em&gt;image-maps&lt;/em&gt; presented as a &lt;em&gt;frameset&lt;/em&gt; that makes specific pages pretty much impossible to bookmark. Ah, the heady days of Y2K web development! &lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://web.archive.org/web/20050212144103/http://homepage1.nifty.com/akiba/akibaweb2kr1.zip&quot;&gt;web.archive.org/web/20050212144103/http://homepage1.nifty.com/akiba/akibaweb2kr1.zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;/images/posts/akihabara-2000.png&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/akihabara-2000.png&quot; alt=&quot;PNG&quot; width=&quot;740&quot; height=&quot;414&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;2001&quot;&gt;2001&lt;/h3&gt;

&lt;p&gt;The digital download versions of Kosapi’s Akiba Map were updated until around 2001, when I guess easy access to the internet made offline maps like this somewhat less useful.&lt;/p&gt;

&lt;p&gt;But the FileMaker Pro database is interesting, as it can still be loaded and viewed on modern macOS. Using a vintage Trial version of FileMaker Pro 11 from 2010 which &lt;em&gt;just about&lt;/em&gt; manages to run on macOS 10.13.6—the database can be converted to a more modern format. You can click around hyperlinks to navigate and view business details in a very CD-ROM kind of way. &lt;/p&gt;

&lt;p&gt;Anyway, I did a bunch of image grabbing and assembling to put together this large 27.8 megapixel version of the map (click the image below):&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/images/posts/akihabara-2001.png&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/akihabara-2001-small.png&quot; alt=&quot;PNG&quot; width=&quot;740&quot; height=&quot;496&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;aside-19992009&quot;&gt;Aside: 1999–2009&lt;/h3&gt;

&lt;p&gt;For 10 years, an interactive online map was published by Impress Corporation under the title of &lt;em&gt;AKIBA PC Hotline!&lt;/em&gt; It’s similar to &lt;em&gt;Kosapi’s Akiba Map&lt;/em&gt; and arguably better made.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://web.archive.org/web/19991012053357/http://watch.impress.co.jp/akiba/map/index.html&quot;&gt;web.archive.org/web/19991012053357/http://watch.impress.co.jp/akiba/map/index.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;/images/posts/akihabara-1999-2009.png&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/akihabara-1999-2009.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;more&quot;&gt;More?&lt;/h3&gt;

&lt;p&gt;I’ll be sure to add to this post if any other interesting vintage maps of Akihbara come to light. Especially for the years we’re currently missing maps.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 11 May 2019 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2019/05/11/back-in-time-vintage-maps-of-akihabara/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2019/05/11/back-in-time-vintage-maps-of-akihabara/</guid>
        </item>
      
    
      
        <item>
          <title>Recovered: Forgotten SEGA Exclusives on Palm OS</title>
          <description>&lt;p&gt;As part of my ongoing efforts to uncover lost gems from Japan, I recovered two exclusive games made by SEGA in their brief flirtation with Palm OS back in 2002. These games were presented by their Smilebit division at PalmSource Japan Forum 2002. This was around the time SEGA were abandoning consoles and Palm OS seems to have been part of an effort to figure out “what next?”.&lt;/p&gt;

&lt;p&gt;My journey to these games started with the my purchase of a GC10 game controller adapter and playing its bundled games, one of which featured an old website URL. I then fell deep down the &lt;a href=&quot;https://web.archive.org/web/20020408142525/http://pda.sega.co.jp/&quot;&gt;archive.org&lt;/a&gt; rabbit hole and managed to find mention of the two games—one had screenshots but neither had downloads—on an old SEGA website. From here I managed to find the PRC files in a set of just over 100 on &lt;a href=&quot;http://chip.de&quot;&gt;chip.de&lt;/a&gt;, a German computer magazine and software download website, the only place they still resided and where they had been long forgotten for decades. Finally, I used the Mu Palm emulator and my Sony CLIÉ SJ22 to try them out and take some screen grabs!&lt;/p&gt;

&lt;h3 id=&quot;triangle-magic-トライアングル-マジック&quot;&gt;Triangle Magic トライアングル マジック&lt;/h3&gt;

&lt;p&gt;Use the stylus to position triangles on a grid, the aim is to deflect a ball to the goal and collect coins on the way.&lt;/p&gt;

&lt;p&gt;This one feels quite familiar today, I can remember several games with a similar concept. Edit: Sega’s 1990 arcade game &lt;a href=&quot;https://www.mobygames.com/game/arcade/borench&quot;&gt;Borench&lt;/a&gt; features a very similar concept.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/sega-palm-triangle-magic-1.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/sega-palm-triangle-magic-2.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;borkov-ボルコフ&quot;&gt;Borkov ボルコフ&lt;/h3&gt;

&lt;p&gt;Use the hardware buttons, or stylus, to make an overweight red-haired man eat chunks of chocolate to match the goal shape.&lt;/p&gt;

&lt;p&gt;It’s reminiscent of COMPILE’s 2001 GBA game &lt;a href=&quot;https://www.mobygames.com/game/guru-logi-champ&quot;&gt;Guru Logi Champ&lt;/a&gt;, in that you rotate the play field and shoot/suck blocks from the middle. Pretty cool.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/sega-palm-borkov-1.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/sega-palm-borkov-2.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Columns for CLIÉ&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The only commercial result from this particular period at SEGA was a version of Columns bundled only with a game controller accessory for Sony’s CLIÉ range of Palm OS “personal entertainment organisers”.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/sega-palm-clie.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;download&quot;&gt;Download&lt;/h3&gt;

&lt;p&gt;You can grab Borkov and Triangle Magic at &lt;a href=&quot;https://palmdb.net/?s=sega&quot;&gt;palmdb.net/?s=sega&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Columns for CLIÉ can be found in the All Games or GC10 downloads at &lt;a href=&quot;https://www.sonyclie.org/drivers.html&quot;&gt;sonyclie.org/drivers.html&lt;/a&gt; &lt;/p&gt;

&lt;h3 id=&quot;references&quot;&gt;References&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://web.archive.org/web/20020616095557/http://www.pdalive.com/forums/printthread.php?threadid=699&quot;&gt;web.archive.org/web/20020616095557/http://www.pdalive.com/forums/printthread.php?threadid=699&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://games.slashdot.org/story/02/04/05/1448214/sega-doing-palmos-games#comments&quot;&gt;games.slashdot.org/story/02/04/05/1448214/sega-doing-palmos-games#comments&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 24 Apr 2019 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2019/04/24/recovered-forgotten-sega-exclusives-on-palm-os/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2019/04/24/recovered-forgotten-sega-exclusives-on-palm-os/</guid>
        </item>
      
    
      
        <item>
          <title>Hanafuda Discord</title>
          <description>&lt;p&gt;I created a Discord server for discussion of traditional Japanese flower cards.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://discord.com/invite/mKbdwy9&quot;&gt;discord.com/invite/mKbdwy9&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 28 Feb 2019 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2019/02/28/hanafuda-discord/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2019/02/28/hanafuda-discord/</guid>
        </item>
      
    
      
        <item>
          <title>Door Door redrawn</title>
          <description>&lt;p&gt;I redrew the box art from &lt;a href=&quot;https://en.wikipedia.org/wiki/Door_Door&quot;&gt;Door Door&lt;/a&gt; (1985, Famicom). It’s a great game and worthy of your time.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Door Door was designed by &lt;a href=&quot;https://en.wikipedia.org/wiki/Koichi_Nakamura&quot;&gt;Koichi Nakamura&lt;/a&gt;, known as one of the creators of &lt;a href=&quot;https://en.wikipedia.org/wiki/Dragon_Quest&quot;&gt;Dragon Quest&lt;/a&gt;. The game was the runner-up in the Enix-sponsored “First Game and Hobby Program Contest” in 1982, winning the “Outstanding Program Award” with a prize of 500,000 yen. Enix was given the rights to the game and ported the game to several Japanese home computers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Out of all the versions I think the Famicom one plays best, even though it has an annoying squeaky walking sound. I just lower or mute the audio.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/door-door-redrawn-colour.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/door-door-original.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Affinity Designer is my tool of choice for doing most of my vector illustration work. Below are the vector outlines for the above drawing. As you can see I like to keep things fairly minimal! Lots of gradients were used, and the noise function to give things a bit of texture.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/door-door-redrawn-outline.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The coloured image was originally posted on my &lt;a href=&quot;https://dribbble.com/shots/5872857-Door-Door-Redrawn&quot;&gt;Dribbble account&lt;/a&gt;, but the outline image is new for this blog post. I hope you like it!&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 19 Jan 2019 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2019/01/19/door-door-redrawn/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2019/01/19/door-door-redrawn/</guid>
        </item>
      
    
      
        <item>
          <title>File hash calculator app for macOS</title>
          <description>&lt;p&gt;I often need to calculate the hash of a file for verification purposes, to confirm that a download has completed successfully or that an ISO I have dumped from a CD is a correct match with known good dumps.&lt;/p&gt;

&lt;p&gt;I couldn’t find a nice easy to use app for this so I put together my own app. Download it here: &lt;a href=&quot;https://github.com/sunjw/fhash/files/2302036/Hash.app.zip&quot;&gt;Hash.app.zip&lt;/a&gt; (version 1.3).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/hash-app.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Auto clear text field on each operation&lt;/li&gt;
  &lt;li&gt;Finder “Open with…”&lt;/li&gt;
  &lt;li&gt;Select file on first launch&lt;/li&gt;
  &lt;li&gt;Drag and drop after window is open&lt;/li&gt;
  &lt;li&gt;Single or multiple files&lt;/li&gt;
  &lt;li&gt;Accepts many binary file types&lt;/li&gt;
  &lt;li&gt;Resizable window&lt;/li&gt;
  &lt;li&gt;Hold alt/option to only calculate quickest hashes (CRC32, XHH, MD5)&lt;/li&gt;
  &lt;li&gt;Default is to calculate all hash types, including slower hashes (SHA1, SHA256)&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 06 May 2018 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2018/05/06/file-hash-calculator-app-for-macos/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2018/05/06/file-hash-calculator-app-for-macos/</guid>
        </item>
      
    
      
        <item>
          <title>Sony Reader “Exceptional internal memory state: formatting” workaround</title>
          <description>&lt;p&gt;I get a strange error from time-to-time on my Sony Reader (PRS-650).&lt;/p&gt;

&lt;p&gt;After the Reader powers up, or comes out of transfer mode, it does the busy spinner and then says:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;+---------------------------------------+
| Exceptional internal memory state     |
| Formatting                            |
|                              [  OK  ] |
+---------------------------------------+
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;At this point pressing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;OK&lt;/code&gt; will format the device. Yikes!&lt;/p&gt;

&lt;h2 id=&quot;short-workaround&quot;&gt;Short Workaround&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Do not press&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;OK&lt;/code&gt; on the format warning&lt;/li&gt;
  &lt;li&gt;Press hardware &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RESET&lt;/code&gt; button with paperclip&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If this does not work, try the following:&lt;/p&gt;

&lt;h2 id=&quot;longer-workaround&quot;&gt;Longer Workaround&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Do not press&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;OK&lt;/code&gt; on the format warning&lt;/li&gt;
  &lt;li&gt;Instead, plug device into your computer&lt;/li&gt;
  &lt;li&gt;Backup &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;READER&lt;/code&gt; partition (optional, but recommended)&lt;/li&gt;
  &lt;li&gt;Press hardware &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RESET&lt;/code&gt; button with paperclip&lt;/li&gt;
  &lt;li&gt;Wait for Reader to reboot (no PRS+ features when booting with USB connected)&lt;/li&gt;
  &lt;li&gt;Unplug from computer&lt;/li&gt;
  &lt;li&gt;Shutdown/restart reader (PRS+ features will be re-enabled)&lt;/li&gt;
  &lt;li&gt;Problem is gone!&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;cause&quot;&gt;Cause&lt;/h2&gt;

&lt;p&gt;My theory: PRS+ doesn’t like the device being “dirty” when it is unmounted or ejected improperly.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 05 May 2018 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2018/05/05/sony-reader-exceptional-internal-memory-state-formatting-workaround/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2018/05/05/sony-reader-exceptional-internal-memory-state-formatting-workaround/</guid>
        </item>
      
    
      
        <item>
          <title>Better custom font sizes on Sony Reader devices</title>
          <description>&lt;p&gt;Below are details of a script to generate custom CSS to make sure custom fonts all appear at similar sizes when they are used as the display fonts on Sony Readers running PRS+ custom firmware. &lt;em&gt;Without this script certain custom fonts will appear much bigger or smaller than others.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I use this with my PRS-650, but it probably applies to most Sony Readers and perhaps some other eReaders. Get in touch if you have an idea how it can apply to other eReaders.&lt;/p&gt;

&lt;h2 id=&quot;source-code&quot;&gt;Source Code&lt;/h2&gt;

&lt;noscript&gt;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/f07d9e033dab453b56afee9829828ed1&quot;&gt;View the source code as a Gist&lt;/a&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;script src=&quot;https://gist.github.com/gingerbeardman/f07d9e033dab453b56afee9829828ed1.js&quot;&gt;&lt;/script&gt;

&lt;h3 id=&quot;installation&quot;&gt;Installation&lt;/h3&gt;
&lt;p&gt;Requirements:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;php&lt;/li&gt;
  &lt;li&gt;python&lt;/li&gt;
  &lt;li&gt;pip&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dependencies:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;font-line&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Useful incantations:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo -H python -m ensurepip
sudo -H pip install font-line
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;location&quot;&gt;Location&lt;/h3&gt;
&lt;p&gt;Script should be alongside the folders of font families in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/READER/fonts&lt;/code&gt;&lt;/p&gt;

&lt;h3 id=&quot;usage&quot;&gt;Usage&lt;/h3&gt;
&lt;p&gt;Run from the command line without any arguments.&lt;/p&gt;

&lt;h3 id=&quot;output&quot;&gt;Output&lt;/h3&gt;
&lt;p&gt;One custom CSS file for each font family is written to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/READER/database/system/PRSPlus/epub/&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&quot;how-does-it-work&quot;&gt;How does it work?&lt;/h2&gt;
&lt;p&gt;Using the python tool &lt;a href=&quot;https://github.com/source-foundry/font-line&quot;&gt;font-line&lt;/a&gt; I get the sum of Ascender+Descender from the font metrics for each family. Dividing 1 by that number normalises the font size by making larger fonts slightly smaller, and smaller fonts slightly larger. The script finally writes the new size information into the CSS in the expected format at the correct location.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 07 Dec 2017 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2017/12/07/better-custom-font-sizes-on-sony-reader-devices/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2017/12/07/better-custom-font-sizes-on-sony-reader-devices/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Disc</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/c5bd6f3cbec609f5147294cd9f6e6c63/tumblr_nn5nygSVoF1qc57zgo1_540.png&quot; alt=&quot;Disc&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A future sports game that aims high but struggles to hit the mark.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the era of the 16-bit home computers, there was a trend to take concepts that had made an impression at the arcade and create a version of them for home release that neatly sidestepped any licence that may have otherwise been required. And so &lt;em&gt;Disc&lt;/em&gt;, whilst not being a straight copy, is obviously inspired by the arcade game &lt;em&gt;Discs of Tron&lt;/em&gt; which was itself based on a sequence in the 1982 cult sci-fi movie &lt;em&gt;Tron&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disc&lt;/em&gt; presents a futuristic sport where competitors throw discs of light at each other in gladiator-style, with the goal of being the last man standing. This can be achieved in two ways: by knocking your opponent out into the abyss by destroying the tiles that make up the platform they stand on, or by hitting your opponent with the disc enough times so their energy is reduced to zero.&lt;/p&gt;

&lt;p&gt;In reality, this plays out like a somewhat awkward cross between &lt;em&gt;Breakout&lt;/em&gt; and &lt;em&gt;Shufflepuck Café&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The gameplay is enhanced in a number of ways: ownership of the disc can be transferred by catching it, or avoided by deflecting it with your shield; power-ups can increase the speed or damage capability of your disc; extra discs can be awarded, allowing for multiple discs to be in play at once; and tiles that need to be hit multiple times before they disappear. Increasingly difficult opponents also introduce new tricks that require different play styles to be learnt and used to beat them. All this is set against a timer which, if it reaches zero, awards victory to the player with the most tiles remaining in their area.&lt;/p&gt;

&lt;p&gt;The original &lt;em&gt;Discs of Tron&lt;/em&gt; game featured analogue aiming using a spinner, and 8-way movement of the player using the joystick. The programmers at Loriciel came up with an ingenious way of mapping these controls to an 8-way joystick with single fire button: without the fire button pressed the joystick controls the movement of the player, with the fire button pressed the joystick controls throwing of the disc or use of the shield. It takes a little getting used to, and even then you’ll likely make some timing mistakes in the heat of the moment and do something unintentionally. But it worked well enough.&lt;/p&gt;

&lt;p&gt;The graphics are something else though. They effuse that particular French quality I am so fond of, with a firm dose of science fiction that sits somewhere between the helmet-wearing ostrich riders of &lt;em&gt;Joust&lt;/em&gt; and the inside-the-mainframe look of &lt;em&gt;Tron&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The only issue I have with the game is that it can get repetitive. The difficulty curve is too long and this can lead to boredom setting in. But for a few short rounds, the game is great to look at and fun to play.&lt;/p&gt;

&lt;p&gt;Historical note: the Atari ST version was first to be released, and later ported well to Amiga and PC, and to the Amstrad CPC with surprisingly little loss of fidelity.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=JNBxMzeNY-0&quot;&gt;Watch &lt;em&gt;Disc&lt;/em&gt; on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=QoI98lv5Xh8&quot;&gt;Watch &lt;em&gt;Discs of Tron&lt;/em&gt; on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/atari-st/disc&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/cpc/disc/screenshots/gameShotId,145094/&quot;&gt;Screenshots of Disc on the Amstrad CPC&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/msdos_Disc_1990&quot;&gt;Play the PC version at archive.org&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 07 Jul 2017 13:03:42 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2017/07/07/disc/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2017/07/07/disc/</guid>
        </item>
      
    
      
        <item>
          <title>Feeling for the headphone socket</title>
          <description>&lt;p&gt;This is how I easily feel where the headphone socket is around the back of my iMac.&lt;/p&gt;

&lt;p&gt;I stuck a little felt circle around the socket which has the benefit of being easy to physically feel as well as acting as a guide for the headphone jack.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/feeling-for-the-headphone-socket.jpg&quot; alt=&quot;JPG&quot; title=&quot;The headphone socket with felt circle and 3.5mm headphone jack&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 05 Jul 2017 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2017/07/05/feeling-for-the-headphone-socket/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2017/07/05/feeling-for-the-headphone-socket/</guid>
        </item>
      
    
      
        <item>
          <title>Koi-Koi by KIN SOFT for MSX (1994)</title>
          <description>&lt;p&gt;I &lt;a href=&quot;https://msx-fan-wiki.appspot.com/view/1099&quot;&gt;read about an old doujin user-created Koi-Koi game&lt;/a&gt; 花札こいこい made by KIN SOFT in 1994. This is my document of the hunt I went on to be able to find and play it!&lt;/p&gt;

&lt;h2 id=&quot;msxfan&quot;&gt;MSX・FAN&lt;/h2&gt;

&lt;p&gt;Firstly, the game came with &lt;a href=&quot;https://archive.org/details/MSXFAN199406/page/n29/mode/2up&quot;&gt;MSX・FAN Issue 26&lt;/a&gt; (1994/06) and by that I mean in the pages and on one of the two cover disks. So I had to find them in the existing archives. I found them on a Spanish website that I’ve since lost the link to. The game could be installed on a blank .dsk, which of course you have to &lt;a href=&quot;https://www.msx.org/wiki/How_to_make_a_floppy_disk_image&quot;&gt;generate and format&lt;/a&gt;. The resulting .dsk played just fine in OpenMSX but not fMSX. 🤔&lt;/p&gt;

&lt;h2 id=&quot;dsk2rom&quot;&gt;dsk2rom&lt;/h2&gt;

&lt;p&gt;After some thought I figured out that using the Windows tool &lt;a href=&quot;https://github.com/joyrex2001/dsk2rom&quot;&gt;dsk2rom.exe&lt;/a&gt; I could convert the .dsk into a .rom file that would boot straight into the game when using fMSX.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;dsk2rom.exe -6d blank.dsk boot.rom
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Those command-line options:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6&lt;/code&gt; = use 60Hz video (the Japanese standard)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;d&lt;/code&gt; = allow booting of other diskroms (was required for compatibility)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But there were still some errors in certain situations:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;without MSXDOS2 or TurboR: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;Syntax error in 40&quot;&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;with fMSX in RetroArch: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;Disk full in 40&quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With &lt;a href=&quot;https://www.msx.org/forum/msx-talk/emulation/help-running-converted-dsk-as-rom-in-retroarch-fmsx&quot;&gt;some help from my &lt;em&gt;MSX&lt;/em&gt; friends&lt;/a&gt; it became clear the game required:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RAMDISK&lt;/code&gt; command (part of MSXDOS2)&lt;/li&gt;
  &lt;li&gt;256KB RAM&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note: I think I had to create a .dsk containing both MSXDOS2 and then install the game onto to that. The MSX Turbo R has MSXDOS2 built-in.&lt;/p&gt;

&lt;h2 id=&quot;retroarch&quot;&gt;RetroArch&lt;/h2&gt;

&lt;p&gt;But fMSX in RetroArch doesn’t allow you to set RAM and VRAM and in fact its defaults for those were wrong for some types of &lt;em&gt;MSX&lt;/em&gt;. I &lt;a href=&quot;https://github.com/libretro/fmsx-libretro/pull/14&quot;&gt;made some changes to fmsx-libretro core&lt;/a&gt; and whilst I was in there made &lt;a href=&quot;https://github.com/libretro/fmsx-libretro/pulls?q=is%3Apr+author%3Agingerbeardman+is%3Aclosed+is%3Amerged&quot;&gt;several more improvements&lt;/a&gt;. I even &lt;a href=&quot;https://github.com/libretro/fmsx-libretro/pull/25&quot;&gt;updated the core to fMSX version 4.9&lt;/a&gt; for all RetroArch users. I’m skipping over the huge effort that all these changes took, but it was fun hacking on libretro!&lt;/p&gt;

&lt;p&gt;After all this I had a test build of the fmsx-libretro core for 3DS that I could use to play the game. 🎴&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;the-game&quot;&gt;The Game&lt;/h3&gt;

&lt;p&gt;The game is really interesting because of the yaku (card combos) it contains, and the fact that it has a Special Card Shop where you can use points to buy Special cards for cheating in imaginative ways against the CPU.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Peek at Deck: Check the next card in the deck&lt;/li&gt;
  &lt;li&gt;Peek at Opponent: View the opponent’s hand&lt;/li&gt;
  &lt;li&gt;Card Explosion: Destroy a card on the table + force the opponent to skip a turn&lt;/li&gt;
  &lt;li&gt;Card Swap: Swap cards in your hand&lt;/li&gt;
  &lt;li&gt;Landmine Card: Explodes if the opponent takes it&lt;/li&gt;
  &lt;li&gt;Deck Collapse: Turn over two cards from the deck consecutively&lt;/li&gt;
  &lt;li&gt;Time Reversal: Reset the game&lt;/li&gt;
  &lt;li&gt;Lightning Card: Prioritise acquiring 20-point cards&lt;/li&gt;
  &lt;li&gt;Electric Vortex Card: Makes it easier to take 20-point cards from the board&lt;/li&gt;
  &lt;li&gt;Storm: Swap the cards you are about to take&lt;/li&gt;
  &lt;li&gt;Bamboo Cutter Card: Probability effect allowing you to acquire any card&lt;/li&gt;
  &lt;li&gt;Atomic Bomb Card: Significantly reduces the opponent’s available cards&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;download&quot;&gt;Download&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;A .zip of both the .dsk and .rom file: &lt;a href=&quot;https://cdn.gingerbeardman.com/files/koikoi-kin-soft-1994.zip&quot;&gt;koikoi-kin-soft-1994.zip&lt;/a&gt; (247 KB)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;If you are interested in Hanafuda video games or cards, why not join the &lt;a href=&quot;/2019/02/28/hanafuda-discord/&quot;&gt;Hanafuda Discord server&lt;/a&gt;?&lt;/em&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/msx-koikoi-by-kin-soft-1994.jpg&quot; alt=&quot;IMG&quot; title=&quot;Koi-Koi by KIN SOFT (1994) running in fmsx-libretro on Nintendo 3DS (2017)&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;a href=&quot;https://archive.org/details/MSXFAN199406/page/n29/mode/2up&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/msx-fan-magazine-1994-06.jpg&quot; alt=&quot;IMG&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;figcaption&gt;Magazine spread feature detailing the game, its controls, hanafuda, and valid yaku (card combos)&lt;/figcaption&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 28 Jun 2017 11:13:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2017/06/28/koikoi-by-kin-soft-for-msx-1994/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2017/06/28/koikoi-by-kin-soft-for-msx-1994/</guid>
        </item>
      
    
      
        <item>
          <title>Why is the iOS PayPal app so big?</title>
          <description>&lt;p&gt;The size reported on the App Store (204MB as of today for PayPal version 6.8.0) does not take into account App Thinning.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;http://developer.apple.com/library/content/documentation/IDEs/Conceptual/AppDistributionGuide/AppThinning/AppThinning.html&quot;&gt;App Thinning&lt;/a&gt; process only delivers the parts of the app required by the device. For example, the launch screen for iPad would not be downloaded onto my iPhone; and the 32-bit binary would not be downloaded on a 64-bit device. For my iPhone 6s, the actual installed size is 131.7MB (see &lt;em&gt;Settings &amp;gt; General &amp;gt; Storage &amp;amp; iCloud Storage &amp;gt; Manage Storage&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;If I download the PayPal app through iTunes it is delivered as a compressed .ipa archive of 85.8MB. I can inspect this archive as detailed in another answer of mine: &lt;a href=&quot;http://www.quora.com/What-is-the-iOS-url-scheme-for-Apples-Numbers-app&quot;&gt;What is the iOS url scheme for Apple’s Numbers app?&lt;/a&gt; Doing so I can see that the extracted app total of 152MB is composed as follows:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://miro.medium.com/max/1400/0*fcZ1UW9u2lGjdGKs.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;http://grandperspectiv.sourceforge.net/&quot;&gt;GrandPerspective app&lt;/a&gt; can also give a visual representation of the number of files that comprise the app and how they vary in size:&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://miro.medium.com/max/1400/0*hjm0UTia4RBEHqpp.png&quot; alt=&quot;&quot; title=&quot;Grand Perspective: a graphical representation of file sizes and quantity&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at&lt;/em&gt; &lt;a href=&quot;https://www.quora.com/Why-is-the-iOS-Paypal-app-so-big-195-Mb&quot;&gt;&lt;em&gt;www.quora.com&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 26 Jan 2017 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2017/01/26/why-is-the-ios-paypal-app-so-big/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2017/01/26/why-is-the-ios-paypal-app-so-big/</guid>
        </item>
      
    
      
        <item>
          <title>How to push an update to the App Store without building a new binary</title>
          <description>&lt;p&gt;This post details how to easily deal with a request from Apple to update an old app that is still working perfectly—without having to setup a development environment to build it from source.&lt;/p&gt;

&lt;h2 id=&quot;tldr&quot;&gt;TL;DR&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Bump the version in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Info.plist&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Create a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.icns&lt;/code&gt; icon&lt;/li&gt;
  &lt;li&gt;Do a fresh &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;codesign&lt;/code&gt; on the app bundle&lt;/li&gt;
  &lt;li&gt;Use Application Loader to get it into iTunes Connect&lt;/li&gt;
  &lt;li&gt;Submit for approval&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;background&quot;&gt;Background&lt;/h2&gt;

&lt;p&gt;There’s an App Store cleanup going on under the banner of “Improving the App Store”. I approve of this, in principle: removing apps that no longer launch, crash or otherwise operate incorrectly is a Good Thing™.&lt;/p&gt;

&lt;p&gt;However, I’ve had a request to update an app that still functions perfectly despite not having been updated since 2011. That’s Snow Leopard vintage for all the old timers that are reading!&lt;/p&gt;

&lt;h2 id=&quot;next-steps&quot;&gt;Next Steps&lt;/h2&gt;

&lt;p&gt;First thing to know is that you can appeal such a request. You probably won’t have much luck—I didn’t. “Computer says no.”&lt;/p&gt;

&lt;p&gt;A much easier way is to take the old, bug-free binary—easily downloaded from the App Store—and repackage it so that it appears to be new. Sounds like a plan!&lt;/p&gt;

&lt;h2 id=&quot;a-new-icon&quot;&gt;A new icon&lt;/h2&gt;

&lt;p&gt;The old icon was made before Retina displays existed, and even before multiple images in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.icns&lt;/code&gt; files was enforced. So I had to make a new one. However, Apple has removed &lt;em&gt;Icon Composer&lt;/em&gt; from their Developer Tools because it doesn’t support the 1024px icons required for the latest Retina displays. This makes things a little trickier.&lt;/p&gt;

&lt;p&gt;As of today there are two options to create a valid Retina compatible &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.icns&lt;/code&gt;:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;On the command line from a folder full of correctly named PNG files: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;iconutil -c icns &amp;lt;foldername&amp;gt;&lt;/code&gt; (see &lt;a href=&quot;https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/iconutil.1.html&quot;&gt;man page&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Using the the third-party, open-source app &lt;a href=&quot;https://github.com/lemonmojo/IconComposer2x&quot;&gt;Icon Composer 2x&lt;/a&gt; which is almost a drop-in replacement for the old Apple app. Nice work Lemon Mojo!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Final packaging shell script:&lt;/p&gt;

&lt;noscript&gt;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/gingerbeardman/eb080bb29bfcf71f829e5ff9107f1d4a&quot;&gt;View the source code as a Gist&lt;/a&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;script src=&quot;https://gist.github.com/gingerbeardman/eb080bb29bfcf71f829e5ff9107f1d4a.js&quot;&gt;&lt;/script&gt;

&lt;p&gt;So, what exactly are we doing here?&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Bash &lt;em&gt;shebang&lt;/em&gt; (see &lt;a href=&quot;https://en.wikipedia.org/wiki/Shebang_%28Unix%29&quot;&gt;wiki&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Set &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DATE&lt;/code&gt; to a formatted date string, eg. 20170119164510&lt;/li&gt;
  &lt;li&gt;Set &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CFBundleVersion&lt;/code&gt; string in .plist to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$DATE&lt;/code&gt; string&lt;/li&gt;
  &lt;li&gt;Copy &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.plist&lt;/code&gt; into app&lt;/li&gt;
  &lt;li&gt;Copy &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.icns&lt;/code&gt; into app&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Touch&lt;/em&gt; app to set modified date&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Prune&lt;/em&gt; the resource fork, Finder information, and similar detritus&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Codesign&lt;/em&gt; app bundle with my current certificates&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Package&lt;/em&gt; app as installer .pkg&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Assess/test&lt;/em&gt; installer .pkg (see &lt;a href=&quot;https://developer.apple.com/library/content/qa/qa1940/_index.html&quot;&gt;docs&lt;/a&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;application-loader&quot;&gt;Application Loader&lt;/h2&gt;

&lt;p&gt;Uploading to iTunes Connect outside of Xcode requires Application Loader. I tried using the version that comes with the latest Xcode, but it was giving me some nonsensical, badly written error messages:&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/update-app-no-new-binary-app-loader-1.png&quot; alt=&quot;PNG&quot; title=&quot;Error: The Info.plist indicates a iOS app, but submitting a pkg or mpkg.&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/update-app-no-new-binary-app-loader-2.png&quot; alt=&quot;PNG&quot; title=&quot;Error: No version found for ‘adamId—platform’ (485354734—iOS App). If this problem persists for more than 24 hours, please contact your Apple representative.&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Some Googling found a &lt;a href=&quot;http://stackoverflow.com/questions/32659970/upload-to-app-store-failed-no-version-found-for-adamid-platform&quot;&gt;StackOverflow post&lt;/a&gt; that recommended using &lt;a href=&quot;https://itunesconnect.apple.com/apploader/ApplicationLoader_3.0.dmg&quot;&gt;Application Loader 3.0&lt;/a&gt;. After downloading this older version (interestingly it’s the one Apple link to from iTunes Connect) everything went smoothly!&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/update-app-no-new-binary-app-loader-3.png&quot; alt=&quot;PNG&quot; title=&quot;SUCCESS!&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;re-submission&quot;&gt;Re-submission&lt;/h2&gt;

&lt;p&gt;After these simple changes you can resubmit. But what to write in the version change log? I tried the following:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;A new build with no changes because Apple asked for it, despite the game still working perfectly after all these years!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I was bitter.
Metadata Rejected.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;New build required due to the App Store Improvements process.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I was perfectly honest.
Metadata Rejected.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Improvements for Retina displays.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Got to love that new icon.
Application Approved!&lt;/p&gt;

&lt;h2 id=&quot;thats-all-folks&quot;&gt;That’s all folks&lt;/h2&gt;

&lt;p&gt;Hopefully you can get your app back on the App Store without too much effort. Of course, you should only do this for apps that you know are functioning correctly. Good luck!&lt;/p&gt;

&lt;p&gt;Final thanks to Mark Sibly of &lt;a href=&quot;https://en.wikipedia.org/wiki/Blitz_BASIC#BlitzMax&quot;&gt;Blitz Research&lt;/a&gt; for making a tool that produces game binaries that stand the test of time! I can’t believe those binaries still run without error all these years later.&lt;/p&gt;

&lt;h2 id=&quot;a-note-to-apple-developer-relations&quot;&gt;A note to Apple Developer Relations&lt;/h2&gt;

&lt;p&gt;Rather than drawing an arbitrary line by date, how about investing in automated testing of apps? Developers would appreciate Apple taking on that burden, rather than asking developers to do new builds of apps that don’t really need it. Thanks for reading.&lt;/p&gt;

&lt;h2 id=&quot;2022-update&quot;&gt;2022 update&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Wire Hang Redux&lt;/em&gt;, the game I did this for, is no longer listed on the Mac App Store. The reason being that I didn’t have a 64-bit version ready-to-go for the 2017 deadline Apple set for removal of 32-bit-only apps.&lt;/p&gt;

&lt;p&gt;Since then I’ve been selling it elsewhere with better results. &lt;a href=&quot;https://gingerbeardman.itch.io/wire-hang-redux&quot;&gt;You can grab it from itch.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I’m republishing this article to help developers dealing with similar requests from Apple over 5 years later.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 19 Jan 2017 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2017/01/19/how-to-push-an-update-to-the-app-store-without-building-a-new-binary/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2017/01/19/how-to-push-an-update-to-the-app-store-without-building-a-new-binary/</guid>
        </item>
      
    
      
        <item>
          <title>Look Up</title>
          <description>&lt;p&gt;One of my favourite little touches in macOS: &lt;a href=&quot;https://support.apple.com/kb/PH25145&quot;&gt;Look Up&lt;/a&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://miro.medium.com/max/1400/1*o0qDHgYheXx7f5-hIf7Fvw.png&quot; alt=&quot;PNG&quot; title=&quot;Example of the Context Menu in Safari showing “Look Up”&quot; /&gt;&lt;/p&gt;

&lt;p&gt;And don’t forget that you can add look up support for Emoji symbols using my &lt;a href=&quot;http://emojipedia.org/app/&quot;&gt;Emojipedia Dictionary&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;detecting-data&quot;&gt;Detecting Data&lt;/h2&gt;

&lt;p&gt;On iOS (since version 10) and macOS (since 10.5 Leopard) there’s a feature called &lt;a href=&quot;https://support.apple.com/kb/PH25702&quot;&gt;Data Detectors&lt;/a&gt; that helps recognise various forms of data in text, such as phone numbers, street addresses, contacts, and so on.&lt;/p&gt;

&lt;p&gt;A simple version of this is the use of capitalised words as markers to detect phrases during &lt;em&gt;Look Up&lt;/em&gt;. It’s not foolproof, as we can see in my video, but it works well more often than not.&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 9/10;&quot; videoid=&quot;4yTATXHic_c&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 08 Dec 2016 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2016/12/08/look-up/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2016/12/08/look-up/</guid>
        </item>
      
    
      
        <item>
          <title>Adding Markdown Support to Safari</title>
          <description>&lt;p&gt;I recently created a Safari Extension that renders plain text Markdown files as good looking HTML right in your browser. I also added a context menu item so you can swap between the rendered HTML and the original Markdown text.&lt;/p&gt;

&lt;h2 id=&quot;download&quot;&gt;Download&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://www.gingerbeardman.com/safari/Doctor.safariextz&quot;&gt;gingerbeardman.com/safari/Doctor.safariextz&lt;/a&gt; (25Kb)&lt;/p&gt;

&lt;p&gt;To install: double click the file after it has downloaded.&lt;/p&gt;

&lt;h2 id=&quot;why&quot;&gt;Why?&lt;/h2&gt;

&lt;p&gt;Recently my buddy and fellow Former Apple Technology Evangelist @&lt;a href=&quot;https://medium.com/u/35a6b2e3855b?source=post_page-----c19f3d74f728--------------------------------&quot;&gt;TDRBY&lt;/a&gt; asked if there was an extension available for rendering Markdown files in Safari. I had a quick look—there wasn’t—and that got me thinking.&lt;/p&gt;

&lt;p&gt;On macOS you can use Quick Look plugins to add support for new file types to Finder’s Quick Look preview popup. These plugins are great, I use a bunch of them, but they only apply in Finder and not in Safari. Maybe I could do something similar?&lt;/p&gt;

&lt;p&gt;So, knowing that Safari renders plain text files by wrapping them in simple &lt;em&gt;HTML&lt;/em&gt; &amp;gt; &lt;em&gt;BODY&lt;/em&gt; &amp;gt; &lt;em&gt;PRE&lt;/em&gt; markup, I thought that an extension should be able to modify such files. That was enough to pique my interest—so I got to work!&lt;/p&gt;

&lt;h2 id=&quot;how&quot;&gt;How?&lt;/h2&gt;

&lt;p&gt;The extension took less than an hour to put together. This blog post took me a lot more time to write! Anyway, here’s how I did it:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Create new extension using &lt;em&gt;Safari&lt;/em&gt; &amp;gt; &lt;em&gt;Develop&lt;/em&gt; &amp;gt; &lt;em&gt;Extension Builder&lt;/em&gt; &amp;gt; &lt;em&gt;+ button&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Set website access level to &lt;em&gt;All&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Confirm extensions run on plain text files in Safari by adding a CSS file containing only &lt;em&gt;body { background-color: red !important; }&lt;/em&gt;—success, they do!&lt;/li&gt;
  &lt;li&gt;Find a suitable JavaScript Markdown to HTML converter &lt;a href=&quot;https://github.com/showdownjs/showdown&quot;&gt;showdown.js&lt;/a&gt;—this ticks two important boxes: it is easy to use, and is still being actively developed&lt;/li&gt;
  &lt;li&gt;Write a few lines of JavaScript to run &lt;em&gt;showdown.js&lt;/em&gt; on the page text and replace it with the generated HTML&lt;/li&gt;
  &lt;li&gt;Add &lt;a href=&quot;https://github.com/sindresorhus/github-markdown-css&quot;&gt;github-markdown.css&lt;/a&gt; and apply the &lt;em&gt;markdown-body&lt;/em&gt; class to make things look better&lt;/li&gt;
  &lt;li&gt;Configure the extension to run only on URLs ending in &lt;a href=&quot;http://superuser.com/a/285878&quot;&gt;common Markdown file extensions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Manually add &lt;em&gt;https://&lt;/em&gt; variations of the Markdown file extensions to the &lt;em&gt;Info.plist&lt;/em&gt; (far quicker than using the Extension Builder user interface)&lt;/li&gt;
  &lt;li&gt;Edit the .map file reference out of the minimised &lt;em&gt;showdown.js&lt;/em&gt; to avoid a runtime access warning&lt;/li&gt;
  &lt;li&gt;Build the release package&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At this point I’d like to mention a couple of great open-source projects that made this task so much easier: &lt;a href=&quot;https://github.com/sindresorhus/github-markdown-css&quot;&gt;github-markdown.css&lt;/a&gt; by &lt;em&gt;Sindre Sorhus&lt;/em&gt;, and &lt;a href=&quot;https://github.com/showdownjs/showdown&quot;&gt;showdown.js&lt;/a&gt; by &lt;em&gt;Estevão Soares dos Santos&lt;/em&gt;—nice work guys!&lt;/p&gt;

&lt;h2 id=&quot;testing&quot;&gt;Testing&lt;/h2&gt;

&lt;p&gt;There are Markdown files all over the internet, but two notable source stand out.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Almost every GitHub project has a README.md file. View the RAW version to have the extension render it as HTML. Here’s &lt;a href=&quot;https://raw.githubusercontent.com/primer/primer-markdown/master/README.md&quot;&gt;the one I used&lt;/a&gt; for testing.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/u/182e1a455da3?source=post_page-----c19f3d74f728--------------------------------&quot;&gt;John Gruber&lt;/a&gt;’s excellent &lt;a href=&quot;http://daringfireball.net&quot;&gt;daringfireball.net&lt;/a&gt; blog is written using Markdown, and the source of each post can be seen by appending .text to the URL. Here are &lt;a href=&quot;http://daringfireball.net/linked/2016/11/15/designed-by-apple-in-california.text&quot;&gt;two&lt;/a&gt; &lt;a href=&quot;http://daringfireball.net/2016/11/new_touch_bar_equipped_macbook_pros.text&quot;&gt;posts&lt;/a&gt; that I used to test. Of course, John is also the creator of Markdown. Thanks, John! 👍&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;postmortem&quot;&gt;Postmortem&lt;/h2&gt;

&lt;p&gt;After the initial build, a period of testing revealed some issues:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Strikethrough, and some other non-standard but frequently used Markdown, was not being rendered. This was fixed by enabling some options in the &lt;em&gt;showdown.js&lt;/em&gt; file.&lt;/li&gt;
  &lt;li&gt;Rendering quirks due to using &lt;em&gt;github-markdown.css&lt;/em&gt; outside of the GitHub page structure required few manual CSS tweaks. Mainly this was to make tables look better.&lt;/li&gt;
  &lt;li&gt;Markdown on GitHub that was already rendered as HTML was being processed a second time, resulting in corrupted pages. This was fixed by blacklisting the &lt;em&gt;github.com&lt;/em&gt; domain.&lt;/li&gt;
  &lt;li&gt;Sometimes I wanted to see the plain text Markdown. I fixed this by spending an inordinate amount of time adding a context menu item that allows you to &lt;em&gt;Show&lt;/em&gt; or &lt;em&gt;Render Markdown&lt;/em&gt;. I hope it was worth it! 😬&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;safari-wish-list&quot;&gt;Safari Wish List&lt;/h2&gt;

&lt;p&gt;Despite the brief development, I noticed a few quirks to do with Safari that I did not expect to encounter:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;You can’t open the Web Inspector whilst viewing a plain text file. But if you open the inspector on a blank tab, or an existing HTML page, you can then navigate to the plain text file and the inspector will remain open. Phew!&lt;/li&gt;
  &lt;li&gt;Due to the way Safari Extension access permissions work, I have had to enable the extension for all pages and then reduce its power by whitelisting a range of Markdown file extensions. This feels like cracking a nut with a sledgehammer.&lt;/li&gt;
  &lt;li&gt;Extensions do not run on local &lt;em&gt;file:///&lt;/em&gt; documents. 😩&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Please join me in &lt;a href=&quot;http://bugreport.apple.com&quot;&gt;filing enhancement requests with Apple&lt;/a&gt; if you’d like to add your support to any of the above points.&lt;/p&gt;

&lt;h2 id=&quot;thanks-for-reading&quot;&gt;Thanks for reading!&lt;/h2&gt;

&lt;p&gt;If you have any questions feel free to get in touch using &lt;a href=&quot;http://twitter.com/gingerbeardman&quot;&gt;twitter&lt;/a&gt; or &lt;a href=&quot;http://www.gingerbeardman.com&quot;&gt;my website&lt;/a&gt;. I’m interested to see more extensions that add support for other file formats in Safari. And I’m available to help you make better products!&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 25 Nov 2016 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2016/11/25/adding-markdown-support-to-safari/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2016/11/25/adding-markdown-support-to-safari/</guid>
        </item>
      
    
      
        <item>
          <title>Apple Event: September 2016</title>
          <description>&lt;p&gt;This is my first iPhone launch since leaving Apple, and that’s the only excuse I need to take a guess as to what today’s announcement might feature.&lt;/p&gt;

&lt;p&gt;Given the amount of rumours and leaks, I think we’re set for a substantially improved iPhone 7 with no headphone socket—my guess is for reasons of waterproofing more than anything else. In addition to those changes the iPhone 7 plus will feature a dual lens camera plus the improved capabilities and photography it enables. The iPhone 7 plus might even have Apple Pencil support, a feature that I expect to reach all touch screen Apple devices as time goes on.&lt;/p&gt;

&lt;p&gt;With the removal of the 3.5mm socket we’re set to see wireless ear buds, perhaps using a custom, Apple-designed chipset to provide better-than-Bluetooth performance. Maybe with a cool name that somehow riffs on the Thunderbolt and Lightning to start a new lineage of wireless transfer protocols.&lt;/p&gt;

&lt;p&gt;If laptops are featured—and I’m not sure they will be—then it’ll be with speed bumps due you the latest Intel processors, and a new design including the configurable touch screen OLED bar in place of the row of function keys that has been leaked numerous times.&lt;/p&gt;

&lt;p&gt;So, that leaves us with the Apple Watch 2. This is rumoured to feature improved battery life and GPS. What better app to show that off with than the biggest game in the world right now: Pokémon Go? With a revised app the Watch could become your very own Pokémon Go Plus—notifying you when there’s something happening nearby. Game changer. Interestingly the standalone version of the Pokémon Go Plus controller hardware device was delayed from July to September and is iOS-only. I’m sure Apple would much rather feature their own device rather than one from Google/Nintendo.&lt;/p&gt;

&lt;p&gt;Well, that was fun!&lt;/p&gt;

&lt;p&gt;Less than one hour to go until the #AppleEvent&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 07 Sep 2016 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2016/09/07/apple-event-september-2016/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2016/09/07/apple-event-september-2016/</guid>
        </item>
      
    
      
        <item>
          <title>Game Archaeology: No Man’s Sky</title>
          <description>&lt;p&gt;Video game news outlets are currently abuzz with articles about &lt;a href=&quot;https://en.wikipedia.org/wiki/No_Man%27s_Sky&quot;&gt;No Man’s Sky&lt;/a&gt;, one of the most eagerly awaited and massively hyped games in recent years. The game sees you dropped somewhere in space with the goals of exploration, resource management, trading and combat.&lt;/p&gt;

&lt;p&gt;The dubious matter of how closely the released game resembles the one that was hyped over the past few years will no doubt be hotly debated for many months or years to come.&lt;/p&gt;

&lt;p&gt;Regardless, I think the premise of the game is worth talking about because of its influences. Let’s take a trip back through space and time…&lt;/p&gt;

&lt;h2 id=&quot;merchant-of-venus-1982&quot;&gt;Merchant of Venus (1982)&lt;/h2&gt;

&lt;p&gt;The oldest space trading game I know of, this took the form of a menu driven interface where you could buy your first ship and then transport and trade cargo at a number of different spaceports. Very much a resource management game, but with manual landings akin to &lt;a href=&quot;http://www.mobygames.com/game/arcade/lunar-lander__&quot;&gt;Lunar Lander (1979)&lt;/a&gt; that were drawn on screen using groups and combinations of letters from the character set. You can &lt;a href=&quot;http://www.zx81stuff.org.uk/zx81/emulate.php?track=MerchantOfVenus.tzx.zip%400&amp;amp;title=Merchant+of+Venus&quot;&gt;play &lt;em&gt;Merchant of Venus&lt;/em&gt; online now&lt;/a&gt; or &lt;a href=&quot;http://www.mobygames.com/game/merchant-of-venus&quot;&gt;read more about it&lt;/a&gt;.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://miro.medium.com/max/1400/1*_LWM7U4tMEuqhXuj-cvJgw.png&quot; alt=&quot;&quot; title=&quot;Merchant of Venus: choosing your ship&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;elite-1984&quot;&gt;Elite (1984)&lt;/h2&gt;

&lt;p&gt;The grandfather of space exploration games: &lt;a href=&quot;https://en.wikipedia.org/wiki/Elite_(video_game)&quot;&gt;Elite&lt;/a&gt;. This featured 3D graphics, a whole procedurally generated Universe (8 galaxies, each containing 256 planets), exploration, trading, combat, hyperspace jumps, manual docking to refuel, missions, multiple ship types and space pirates. All in 32KB of RAM!&lt;/p&gt;

&lt;p&gt;But there was no landing on the surface of planets. Also, somewhat bizarrely, the cassette version lacks the preset missions and has fewer types of ships. You can’t have everything, I suppose.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.mobygames.com/game/bbc-micro_/elite&quot;&gt;Read more about the game&lt;/a&gt;.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://miro.medium.com/max/1400/1*IZJDEtHnxtQkbdXPR2sQog.png&quot; alt=&quot;&quot; title=&quot;Elite: attempting to dock&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;explorer-1986&quot;&gt;Explorer (1986)&lt;/h2&gt;

&lt;p&gt;We now come to a game that allows exploration on land, thanks to its scenario of crash-landing on an unknown, unexplored planet. The game features an overhead map and procedurally generated screens as you explore the surface, where you make contact with alien species and are able to open portals to get around more easily.&lt;/p&gt;

&lt;p&gt;The graphics were quite impressive for the time, though the fact you’re on one planet was a cunning way to get around the limitations of the procedural generation and the similarities between screens of the various land types. Still worth playing.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.mobygames.com/game/zx-spectrum/explorer&quot;&gt;Read more about the game&lt;/a&gt;.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://miro.medium.com/max/1400/1*wrpLsl4j7qYehDweLuPrFQ.png&quot; alt=&quot;&quot; title=&quot;Explorer: a procedurally generated planet surface&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;starflight-1986&quot;&gt;Starflight (1986)&lt;/h2&gt;

&lt;p&gt;Whilst Explorer was being released in the UK, over in the USA a development studio called Binary Systems were releasing an all-encompasing space exploration, trading and combat game called Starflight. Arguably even more comprehensive than Elite, it offered exploration, trading, combat but graphically was missing 3D graphics instead going for a hybrid menu-based system with panels of 2D animated graphics to give context to the current objective.&lt;/p&gt;

&lt;p&gt;It was released on a range of 8-bit and 16-bit home computers, and also the &lt;a href=&quot;https://en.wikipedia.org/wiki/Sega_Genesis&quot;&gt;Sega Genesis/Mega Drive&lt;/a&gt;. Game designer &lt;a href=&quot;https://en.wikipedia.org/wiki/Greg_Johnson_(game_designer)&quot;&gt;Greg Johnson&lt;/a&gt; went on to co-create the cult &lt;a href=&quot;https://en.wikipedia.org/wiki/ToeJam_%26_Earl&quot;&gt;ToeJam &amp;amp; Earl&lt;/a&gt; series of games. But, for me, Starflight is his &lt;a href=&quot;https://en.wikipedia.org/wiki/Magnum_opus&quot;&gt;magnum opus&lt;/a&gt;. It’s easy to &lt;a href=&quot;https://www.gog.com/game/starflight_1_2&quot;&gt;play the game (and its sequel) today on PC thanks to a re-release by GOG&lt;/a&gt;  or &lt;a href=&quot;http://www.mobygames.com/game/dos/starflight&quot;&gt;read more about it&lt;/a&gt;.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://miro.medium.com/max/1400/1*vpjQoieWmqTkk0Oc_u_rgA.png&quot; alt=&quot;&quot; title=&quot;Starflight: docking in progress&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;starglider-2-1988&quot;&gt;Starglider 2 (1988)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Argonaut_Games&quot;&gt;Argonaut Games&lt;/a&gt;, a studio best known for creating &lt;a href=&quot;https://en.wikipedia.org/wiki/Star_Fox_(video_game)&quot;&gt;Star Fox&lt;/a&gt; and the &lt;a href=&quot;https://en.wikipedia.org/wiki/Super_FX&quot;&gt;Super FX&lt;/a&gt; coprocessor chip with/for Nintendo, have an interesting part to play in this story. They’d forged ahead with software-driven 3D engines on computers that had very limited processing power, culminating in &lt;a href=&quot;https://en.wikipedia.org/wiki/Starglider_2&quot;&gt;Starglider 2&lt;/a&gt; for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Amiga&quot;&gt;Amiga&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_ST&quot;&gt;Atari ST&lt;/a&gt; and PC. A tour de force of cutting edge technology, the game allowed exploration of a solar system, planetary surfaces and everywhere in between. Whilst it was set in an open world, the game featured a plot and overall goal for the player: to collect the parts of a neutron bomb and use it to blow up an enemy space station.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.mobygames.com/game/atari-st/starglider-2&quot;&gt;Read more about the game&lt;/a&gt;.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://miro.medium.com/max/1400/1*HGOyD_2zW6YD-Ueh0vdjkg.png&quot; alt=&quot;&quot; title=&quot;Starglider 2: rudely interrupted by some space pirates&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;hunter-1991&quot;&gt;Hunter (1991)&lt;/h2&gt;

&lt;p&gt;The final game I want to mention doesn’t involve space, but it does involve a huge open world to be explored and a mission to complete. &lt;a href=&quot;https://en.wikipedia.org/wiki/Hunter_(video_game)&quot;&gt;Hunter&lt;/a&gt; was the perfect example of an open world game where you could use many different types of transport to get around the world, from bicycles to boats and helicopters. You could enter buildings, amass an inventory of collected items that can be used to solve puzzles and progress towards your ultimate goal.&lt;/p&gt;

&lt;p&gt;The game had three modes: &lt;em&gt;Hunter&lt;/em&gt; (a long story-based mission), &lt;em&gt;Missions&lt;/em&gt; (a series of smaller missions), and &lt;em&gt;Action&lt;/em&gt; (against the clock search and destroy around the map). The game was the most convincing depiction of a real world I had seen at that point, and remained that way for some years until the often compared &lt;a href=&quot;https://en.wikipedia.org/wiki/Grand_Theft_Auto&quot;&gt;Grand Theft Auto series&lt;/a&gt; of games.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.mobygames.com/game/hunter&quot;&gt;Read more about the game&lt;/a&gt;.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://miro.medium.com/max/1400/1*yipfL0Qm7KNYyMKNxgcUgw.png&quot; alt=&quot;&quot; title=&quot;Hunter: you have boarded a bicycle&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;no-mans-sky-2016&quot;&gt;No Man’s Sky (2016)&lt;/h2&gt;

&lt;p&gt;My hopes for &lt;a href=&quot;https://en.wikipedia.org/wiki/No_Man&apos;s_Sky&quot;&gt;No Man’s Sky&lt;/a&gt; were that it would combine the best features of all the space exploration games that went before it. It could take the Universe, trading, combat and missions from &lt;em&gt;Elite&lt;/em&gt;; procedural generation from &lt;em&gt;Explorer&lt;/em&gt;; plot-driven goal from &lt;em&gt;Starglider 2&lt;/em&gt;; the land exploration and variety of vehicles in &lt;em&gt;Hunter&lt;/em&gt;. Heck, maybe it would just be &lt;em&gt;Starflight&lt;/em&gt; with a veneer of wonderful 3D graphics.&lt;/p&gt;

&lt;p&gt;But the released version of &lt;em&gt;No Man’s Sky&lt;/em&gt; is different. Whilst it has all the trappings of a great game, it falls short in several key areas: balance, plot and—most importantly of all—gameplay. So, in a lot of ways the game is actually no more advanced than the 30-or-so year old games I’ve mentioned.&lt;/p&gt;

&lt;p&gt;Stylistically, of course, &lt;em&gt;No Man’s Sky&lt;/em&gt; is light years ahead. Gameplay wise it’s no better than &lt;em&gt;Elite&lt;/em&gt; or &lt;em&gt;Starglider 2&lt;/em&gt;, in fact it could be described as being worse. It appears to be rushed, hurried, incomplete, unbalanced.&lt;/p&gt;

&lt;p&gt;Most interestingly, the released game lacks a host of features that had been repeatedly mentioned to the press and shown to the public over the last several years. It almost seems as if they’ve chopped huge important chunks off the game in the last few months.&lt;/p&gt;

&lt;h1 id=&quot;the-gameplay-is-in-another-galaxy&quot;&gt;The Gameplay is in Another Galaxy&lt;/h1&gt;

&lt;p&gt;So what happens next? In my experience it’s uncommon for such deficiencies in the game to be patched or updated after a few initial patches that correct serious bugs and game-breaking features.&lt;/p&gt;

&lt;p&gt;To that end, I wouldn’t be surprised if &lt;a href=&quot;https://twitter.com/NoMansSky&quot;&gt;Hello Games&lt;/a&gt; and Sony roll out a different—more and capable—version of &lt;em&gt;No Man’s Sky&lt;/em&gt; for the soon to be revealed &lt;a href=&quot;https://www.google.co.uk/search?q=PlayStation+4+Neo&quot;&gt;PlayStation 4 Neo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In a funny way that would make the game even closer to &lt;em&gt;Elite&lt;/em&gt; with a different game depending on the platform you choose to play it on.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 19 Aug 2016 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2016/08/19/game-archaeology-no-mans-sky/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2016/08/19/game-archaeology-no-mans-sky/</guid>
        </item>
      
    
      
        <item>
          <title>The Great Photos Heist</title>
          <description>&lt;p&gt;Right now Google is in the process of pulling off &lt;a href=&quot;http://daringfireball.net/linked/2016/08/08/google-photos-sick-burn&quot;&gt;one of the greatest technology heists in recent memory&lt;/a&gt;. They’re using the global juggernaut that is the &lt;a href=&quot;https://www.google.co.uk/search?q=Rio+Olympics&quot;&gt;Rio Olympics&lt;/a&gt;—with the mind bogglingly large number of eyes that are following it on TV screens around the world—as an opportunity to advertise &lt;a href=&quot;https://itunes.apple.com/gb/app/google-photos-free-photo-video/id962194608?mt=8&quot;&gt;Google Photos&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;That may seem like an odd choice, until you realise that the reason for the advertising campaign lies elsewhere: iOS.&lt;/p&gt;

&lt;p&gt;Many iOS users own devices with limited storage space, either through lack of &lt;a href=&quot;https://support.apple.com/en-gb/HT204247&quot;&gt;housekeeping&lt;/a&gt; or the inherent limitations of the device they have chosen to buy. These users have a daily battle with alerts that tell them they are out of storage space and they no longer have room to store any photos.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://miro.medium.com/max/1000/1*5PdvNaYPq7IwMPcv0MOGVw.png&quot; alt=&quot;&quot; title=&quot;D’oh!&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;up-in-the-cloud&quot;&gt;Up in the Cloud&lt;/h2&gt;

&lt;p&gt;Google has been clever enough to market their &lt;a href=&quot;https://itunes.apple.com/gb/app/google-photos-free-photo-video/id962194608?mt=8&quot;&gt;Photos app&lt;/a&gt; as a solution to this all too common problem. It has a new feature called &lt;em&gt;Free Up Space&lt;/em&gt; that can backup your photos to the cloud and then, automagically, remove your photos and video from your device to, well, free up space. Cool.&lt;/p&gt;

&lt;p&gt;The deal is almost as good as it sounds, as you only get unlimited cloud storage for your photos if you’re OK with Google compressing them (perhaps with something like &lt;a href=&quot;http://www.jpegmini.com&quot;&gt;JPEGmini&lt;/a&gt;). If you want to store the unmodified originals then they impose a limit. I think that’s fair.&lt;/p&gt;

&lt;p&gt;This feature will sound sweet to anybody who has ever seen the nag that they’re out of storage. I’d hazard a guess that that’s pretty much most people with a 16GB or smaller iOS device and any sort of passion for photography, &lt;a href=&quot;http://www.whatsapp.com&quot;&gt;WhatsApp&lt;/a&gt;, &lt;a href=&quot;http://www.snapchat.com&quot;&gt;Snapchat&lt;/a&gt;, selfies, or whatever else.&lt;/p&gt;

&lt;h2 id=&quot;how-do-you-like-them-apples&quot;&gt;How do you like them Apples?&lt;/h2&gt;

&lt;p&gt;So now that we’ve understood the problem, and the proposed solution, it’s time to think about what Apple could do about it. Of course their solution will be reactive, with iOS 10 already in beta and Google Photos going strong, but a native solution would be more than welcome.&lt;/p&gt;

&lt;p&gt;Currently Apple give every user 5GB of storage. Whilst that’s a decent amount of space for some types of files, it’s just not enough for large files like digital photos and videos.&lt;/p&gt;

&lt;p&gt;It’s also worth remembering that most users will already be close to capacity if they’ve activated iCloud Backup. These backups could use up most, or even all, of your 5GB and leave little or no room for anything else.&lt;/p&gt;

&lt;h2 id=&quot;turn-back-time&quot;&gt;Turn Back Time&lt;/h2&gt;

&lt;p&gt;The enhancement request I would file—where I still working at Apple—would be to increase the storage each user gets, make it so that backups do not take up any storage space and of course switch on iCloud Photos by default so free space is regained.&lt;/p&gt;

&lt;p&gt;But why stop there? Apple could implement a sort of &lt;a href=&quot;https://en.wikipedia.org/wiki/Time_Machine_%28OS_X%29&quot;&gt;Time Machine&lt;/a&gt; feature for iOS, with the option to restore the whole device or individual apps, with or without their data. That would be very cool.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 09 Aug 2016 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2016/08/09/the-great-photo-heist/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2016/08/09/the-great-photo-heist/</guid>
        </item>
      
    
      
        <item>
          <title>A Brief History of TV Guides</title>
          <description>&lt;p&gt;With the news that Apple are courting TV programmers with the idea of an all-encompassing TV Guide, I thought it would be fun to recap my personal history of TV Guide usage and think about where it might be going next.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclaimer: whilst I am a former Apple employee, I know of less than nothing about any current or future plans for iOS or tvOS.&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;i-get-my-kicks-on-channel-6&quot;&gt;I get my kicks on Channel 6&lt;/h2&gt;

&lt;p&gt;For a long time in the UK—during the pre-internet era, when computers loaded their software from tape cassettes and floppy disks—the Great British public turned to their Televisions for more than just TV shows. We had teletext information services which were kind of like having a limited but nonetheless powerful intranet built into your TV.&lt;/p&gt;

&lt;p&gt;The BBC had what they called &lt;a href=&quot;https://en.wikipedia.org/wiki/Ceefax&quot;&gt;Ceefax&lt;/a&gt; (cf. “See facts”) whilst their main competitor ITV had &lt;a href=&quot;https://en.wikipedia.org/wiki/ORACLE_(teletext)&quot;&gt;Oracle&lt;/a&gt;, which was eventually replaced by a service called Teletext (with a capital T) run by &lt;a href=&quot;https://en.wikipedia.org/wiki/Teletext_Ltd.&quot;&gt;Teletext Limited&lt;/a&gt; that went on to become a hugely popular service that dwarfed even the BBC’s offering.&lt;/p&gt;

&lt;p&gt;All of these teletext services provided general information, such as news, weather, recipes and reviews, stored in a carousel of hundreds of sequential pages. You might want to imagine the &lt;a href=&quot;https://www.bbc.co.uk&quot;&gt;bbc.co.uk&lt;/a&gt; website shrunk down to several hundred pages, each containing no more than about one hundred words. These pages would be transmitted with the broadcast picture and refreshed in a repeating cycle. Your TV’s inbuilt decoder would look at a few lines of the broadcast image and convert the data into screens of &lt;a href=&quot;https://en.wikipedia.org/wiki/ANSI_escape_code&quot;&gt;ANSI&lt;/a&gt;-like coloured characters that form pages of text and blocky graphics. You’d select your desired page by punching in a three digit page number on your remote control and waiting for it to come round in the carousel.&lt;/p&gt;

&lt;p&gt;All the teletext services I used provided a TV Guide. This was an EPG before the acronym had even been coined. Roughly equivalent to popular printed TV guides of the time they presented succinct information about the day’s programmes over several pages. Here’s a screenshot of a TV listing from BBC’s Ceefax:&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://miro.medium.com/max/1008/1*WSph9kUyJtT2L_onAyGAXA.png&quot; alt=&quot;&quot; title=&quot;TV Guide: BBC Ceefax&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Additionally, a Now &amp;amp; Next feature could be overlaid on top of the TV picture, occupying the bottom half of the screen, leaving the moving image visible in the top half. Close caption subtitles were done in the same way.&lt;/p&gt;

&lt;h2 id=&quot;digital-love&quot;&gt;Digital Love&lt;/h2&gt;

&lt;p&gt;Even at the time of its introduction to the UK, the technology powering teletext was old, so it was inevitable that it would eventually be replaced. That happened with the switch off of &lt;a href=&quot;https://en.wikipedia.org/wiki/Analogue_television_in_the_United_Kingdom&quot;&gt;analogue television&lt;/a&gt; and the switchover to &lt;a href=&quot;https://en.wikipedia.org/wiki/Digital_television&quot;&gt;digital terrestrial services&lt;/a&gt; that were eventually ratified into a standard known as &lt;a href=&quot;https://en.wikipedia.org/wiki/Freeview_(UK)&quot;&gt;Freeview&lt;/a&gt; (and, sometime later, &lt;a href=&quot;https://en.wikipedia.org/wiki/Freeview_(UK)#Freeview_HD&quot;&gt;Freeview HD&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;The chunky pixel pages of teletext were replaced by slightly less pixelated screens of &lt;a href=&quot;https://en.wikipedia.org/wiki/MHEG-5&quot;&gt;MHEG&lt;/a&gt; content which, despite it actually being a declarative programming language, could render images and data in a more freeform and structured way than the columns of characters teletext was limited to. The flip side of this brave new world was that the onus now fell on hardware manufacturers to implement the MHEG engine themselves, which resulted in a wide variety of compatibility issues similar to how things were with web browsers before &lt;a href=&quot;https://webkit.org&quot;&gt;WebKit&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Trying to find a decent Freeview box was a real challenge and I went through a whole host: from software built in to my TV, cheap supermarket own-brand boxes, through to a box made by Korean satellite TV specialists &lt;a href=&quot;https://en.wikipedia.org/wiki/Topfield&quot;&gt;Topfield&lt;/a&gt; that had its own API and App ecosystem resulting in extensive user customisation. Eventually I discovered a &lt;a href=&quot;https://www.youtube.com/watch?v=qenPqNwjazk&quot;&gt;strange looking box&lt;/a&gt; made in Wales by a small company named &lt;a href=&quot;https://en.wikipedia.org/wiki/TVonics&quot;&gt;TVonics&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;TVonics: the box that’s not a box&lt;/p&gt;

&lt;p&gt;The guys at TVonics were clever enough to notice that a recently built Sony fabrication plant in southern Wales could produce their HD-capable boxes on home soil, and had partnered with then-fledgling London design company &lt;a href=&quot;https://www.ustwo.com&quot;&gt;ustwo&lt;/a&gt; to create the user interface for their Freeview software. This was a master stroke and resulted in the most usable Freeview software I’d ever had the pleasure of using.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://miro.medium.com/max/1400/1*91Qy90glqxsJQoGFWC41CQ.jpeg&quot; alt=&quot;&quot; title=&quot;TV Guide: TVonics&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Even though this was only 5 years ago, it was still a time where the remote control was the long accepted method of input when watching TV. The user interface created by ustwo was simple but effective, form following function. The only real personalisation was the ability to change the colour scheme. The rest of the interface seemed very obvious, but therein lies great design: everything was where you expected it to be and every screen adhered to the same design principles. It had been thought about, and more importantly it had been executed well. Not just in terms of the design, but also in terms of the software that TVonics created. Every aspect of the Freeview HD spec was present, implemented to a higher standard than they had been described in the specifications. The interface was more performant than other boxes and the whole thing was a real joy to use. At this time TiVo may have had extra features, but TVonics version of Freeview was streets ahead in terms of user interface and experience.&lt;/p&gt;

&lt;h2 id=&quot;knowing-me-knowing-you&quot;&gt;Knowing Me, Knowing You&lt;/h2&gt;

&lt;p&gt;Today Freeview continues in one form or another. There are a small number of middleware providers that have made the MHEG headaches largely disappear. But Freeview now has a number of competitors, the most interesting of which—when it comes to TV Guides at least—is &lt;a href=&quot;https://en.wikipedia.org/wiki/YouView&quot;&gt;YouView&lt;/a&gt;. YouView is both the name of the platform and the partnership that own it.&lt;/p&gt;

&lt;p&gt;The most interesting feature of YouView, as a platform, is the way it combines catch-up content with scheduled content in its EPG. This allows you to &lt;a href=&quot;http://www.youview.com/features/&quot;&gt;scroll backwards through the timeline to get to the tv shows you’ve missed&lt;/a&gt;. But it seems that making a longer timeline isn’t the solution to the problem of there being too much on TV.&lt;/p&gt;

&lt;h2 id=&quot;oranges-and-apples&quot;&gt;Oranges and Apples&lt;/h2&gt;

&lt;p&gt;So what’s next? Apple seems to think that the days of scheduled content are over. They probably have a point. The rise of on-demand services from Netflix, Hulu, Amazon, HBO, BBC—and almost every other TV programmer—means that it’s no longer as simple as putting all available channels on a timeline. Sky TV has an interface that has been struggling under the weight of this problem for decades, and their latest &lt;a href=&quot;http://www.sky.com/shop/tv/sky-q/overview/&quot;&gt;Sky Q&lt;/a&gt; product doesn’t do much to ease the problem, let alone solve it.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://miro.medium.com/max/1400/1*2eklqpXtNnroW_oQ9AhZIA.jpeg&quot; alt=&quot;&quot; title=&quot;TV Guide: Sky Q&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;wishing-on-a-star&quot;&gt;Wishing on a Star&lt;/h2&gt;

&lt;p&gt;A better approach would be to make the TV guide more intelligent. Categorising all available content from all providers with the same taxonomy would help get things to a usable point. I don’t think the iTunes taxonomy would be enough here, but I’d imagine there are some clever people over in Cupertino working on a better one right now. If they haven’t already finished it.&lt;/p&gt;

&lt;p&gt;My guess is that Apple’s intentions for a TV Guide can be summed up in one word: Siri.&lt;/p&gt;

&lt;p&gt;Already present on the current Apple TV software, tvOS has added content providers to Siri’s knowledge at an increasing rate—as long as you live in the USA. The rest of us are stuck being able to search only iTunes and Netflix. Regardless, the Siri efforts in the USA could be seen as laying the groundwork for a unified TV Guide feature.&lt;/p&gt;

&lt;p&gt;However, asking Siri to show you the latest episode of Stranger Things, a movie starring Peter Dinklage, or a movie featuring a VW Beetle, can only go so far. More often than not I find myself looking at my Apple TV home screen clutching the Siri remote—a thing of beautiful symmetry and dubious usability—with no idea what I should watch, and fearful that the brief window of time that I have will be over before it’s even begun. Why can’t Siri decide?&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://miro.medium.com/max/1400/1*1w4mMS-TuykT96eTqumcdQ.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Suggestions similar to those provided by Netflix could be combined with the data gleaned from my Apple TV and iTunes usage, search history and past purchases. This isn’t an easy task, of course. Netflix have previously invested millions into refining their suggestions accuracy through their &lt;a href=&quot;https://en.wikipedia.org/wiki/Netflix_Prize&quot;&gt;Netflix Prize&lt;/a&gt;, which ended in a law suit and some concerns from the FTC about privacy.&lt;/p&gt;

&lt;p&gt;Interestingly Apple have already planted the seed of a solution to similar issues, with their introduction of &lt;a href=&quot;https://en.wikipedia.org/wiki/Differential_privacy&quot;&gt;differential privacy&lt;/a&gt; at &lt;a href=&quot;https://developer.apple.com/wwdc/&quot;&gt;WWDC 2016&lt;/a&gt;. I thought the introduction of this feature was somewhat vague, though perhaps this was by design. To recap, differential privacy is &lt;a href=&quot;https://www.wired.com/2016/06/apples-differential-privacy-collecting-data/&quot;&gt;the statistical science of trying to learn as much as possible about a group while learning as little as possible about any individual in it&lt;/a&gt;. It’s also a way of describing the collection of huge amounts of personal data whilst still being able to refer to it as privacy. Handy, that!&lt;/p&gt;

&lt;p&gt;If the rumours are true regarding the next generation Siri’s vastly improved ability to both interpret speech and form responses, then no better time to put it to the test than a feature that could very well turn the tables on yet another market.&lt;/p&gt;

&lt;h2 id=&quot;up-to-eleven&quot;&gt;Up to eleven&lt;/h2&gt;

&lt;p&gt;The timing of these rumours doesn’t seem like a coincidence to me. I think it’s a typical &lt;a href=&quot;https://en.wikipedia.org/wiki/Eddy_Cue&quot;&gt;Eddy Cue&lt;/a&gt; play, throwing a tidbit of knowledge to his preferred news/media outlets and have them whip up a bit of a storm, one that will hopefully bring the TV execs around to his way of thinking. It’s not subtle, but I suppose if it has worked for him in the past he’s going to keep doing it.&lt;/p&gt;

&lt;p&gt;Importantly, if a TV Guide feature is agreed soon it would allow just enough time for it to make the cut for inclusion into version &lt;a href=&quot;https://en.wikipedia.org/wiki/Up_to_eleven&quot;&gt;11&lt;/a&gt; of iOS and tvOS. And there’s nothing like a deadline to get things moving.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://miro.medium.com/max/1246/1*NMys6bsxcP3Eo-8vIFgndQ.jpeg&quot; alt=&quot;&quot; title=&quot;“These go to eleven.” —Nigel Tuffnell (This is Spinal Tap)&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 05 Aug 2016 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2016/08/05/a-brief-history-of-tv-guides/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2016/08/05/a-brief-history-of-tv-guides/</guid>
        </item>
      
    
      
        <item>
          <title>How to prevent an individual iOS app from updating, forever</title>
          <description>&lt;blockquote&gt;
  &lt;p&gt;Note, August 2023: this method is outdated, for the latest &lt;a href=&quot;/2023/08/17/going-back-to-the-old-pre-x-twitter-ios-app/&quot;&gt;please see this newer blog post&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Change is the only constant. Nowhere is this more visible than on the App Store. &lt;a href=&quot;http://www.statista.com/statistics/258160/number-of-new-apps-submitted-to-the-itunes-store-per-month/&quot;&gt;Thousands of new apps and games appear every day&lt;/a&gt; and existing apps receive regular updates to add features and fix bugs. This will only accelerate further now that the App Store is firing on all cylinders and review times are &lt;a href=&quot;http://appreviewtimes.com&quot;&gt;measured in hours rather than days&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But what if you want to continue to use an old version of an app for your own reasons? Perhaps the old version has a better user interface, or the new version has some bugs? I can remember both of these issues affecting me numerous times over the years. The eBay app is the example that springs to mind.&lt;/p&gt;

&lt;p&gt;General consensus of opinion is that the only thing you can do is switch off automatic updates in iOS and avoid updating that particular app manually, which is easier said than done.&lt;/p&gt;

&lt;h2 id=&quot;there-has-to-be-a-better-way&quot;&gt;There has to be a better way&lt;/h2&gt;

&lt;p&gt;It’s a little known fact that there is actually a way to install an old version of an app on your iOS device which will prevent it from being checked for updates. Read on to find out how this can be done. This tutorial uses eBay as the example app, but I’ve also carried out this process on Gmail, Instagram, VSCO and more.&lt;/p&gt;

&lt;p&gt;You will need:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;good old iTunes,&lt;/li&gt;
  &lt;li&gt;the iOS device you want to install it on,&lt;/li&gt;
  &lt;li&gt;the USB cable for your iOS device.&lt;/li&gt;
  &lt;li&gt;a backup of the old version of the app as an .ipa file on your Mac. You’ll only have this if you use iTunes to sync your iOS device or download app updates. Have a look in your Time Machine or other backups in the following location:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;~/Music/iTunes/iTunes Music/Mobile Applications&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Warning: as part of this process you will be required to delete the current version of the app that you have installed on your iOS device. So be sure to backup any data from the app that is not stored in the cloud!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;enay&quot;&gt;eNay&lt;/h2&gt;

&lt;p&gt;eBay introduced a disastrous fourth version of &lt;a href=&quot;https://itunes.apple.com/gb/app/ebay-shop-search-buy-sell./id282614216?mt=8&quot;&gt;their app&lt;/a&gt; back in September 2015. It was a complete rewrite of the app that made it much more cumbersome to use, and was also missing key functionality and information that were present in the previous app. It was, understandably, &lt;a href=&quot;https://community.ebay.com/t5/eBay-Mobile-App-iOS/gp-p/Mobile-iOS&quot;&gt;met with a user revolt&lt;/a&gt;. eBay are now up to version 5.0 and it is arguably still not as good as the old version I like to use.&lt;/p&gt;

&lt;h2 id=&quot;vsc-no&quot;&gt;VSC-NO!&lt;/h2&gt;

&lt;p&gt;The photo editing app &lt;a href=&quot;https://itunes.apple.com/gb/app/vsco/id588013838?mt=8&quot;&gt;VSCO&lt;/a&gt; is another app that has enraged users with an update that destroys the usability of the app. Strangely enough that is also version 5.x and users are also outraged over the change.&lt;/p&gt;

&lt;h2 id=&quot;gfail&quot;&gt;Gfail&lt;/h2&gt;

&lt;p&gt;Yes again another disaserous version 5.x! This tim it is Gmail, the new version being very similar to the “Inbox by Gmail” app that has been bad and stayed bad for some time now. Gmail v5 is at one-star on the App Store.&lt;/p&gt;

&lt;h2 id=&quot;to-the-time-machine&quot;&gt;To the Time Machine!&lt;/h2&gt;

&lt;p&gt;Due to the fact I frequently do a manual update of all my apps through iTunes on my Mac, I had a backup of eBay 3.6.1 for iPhone and VCO 4.6.1 sitting in my Time Machine backup on my external drive.&lt;/p&gt;

&lt;h2 id=&quot;how-to-install-an-old-app-and-prevent-it-from-updating&quot;&gt;How to install an old app and prevent it from updating&lt;/h2&gt;

&lt;p&gt;Before we begin, remove the app you want to downgrade from your device by tapping and holding on it. Make sure to backup any data you need from it!&lt;/p&gt;

&lt;p&gt;This example uses the eBay app, but applies equally well to VSCO.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Copy your &lt;em&gt;backup&lt;/em&gt; of .ipa somewhere where you can work on it.&lt;/li&gt;
  &lt;li&gt;Open the .ipa with &lt;em&gt;Archive Utility&lt;/em&gt; to decompress it.&lt;/li&gt;
  &lt;li&gt;Expand the folder until you get to the &lt;em&gt;Payload&lt;/em&gt;.&lt;/li&gt;
  &lt;li&gt;Drop the &lt;em&gt;eBay.app from the Payload folder&lt;/em&gt; onto iTunes “My Apps”. It’s the one whose icon has a “no entry” on it.&lt;/li&gt;
  &lt;li&gt;If prompted, &lt;em&gt;replace the newer version&lt;/em&gt; of the app in iTunes (you can always download the latest version again from the App Store).&lt;/li&gt;
  &lt;li&gt;Check that iTunes recognises the app payload (for this to work apps must have been downloaded with an Apple ID that is authorised on this Mac). Don’t worry about the missing app icon, that’s OK.&lt;/li&gt;
  &lt;li&gt;Go into your iOS device screen, Apps section, find the app through search and press &lt;em&gt;Install&lt;/em&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Apply&lt;/em&gt; changes to Sync, and you’re done!&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;just-let-me-look-at-some-screenshots-to-figure-this-out-ok&quot;&gt;“Just let me look at some screenshots to figure this out”. OK!&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://miro.medium.com/max/1520/1*gUV9EY1MRIoiXxbCDlTm7Q.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://miro.medium.com/max/1520/1*3Kwyf5B9csphNzx-3GH2IA.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://miro.medium.com/max/1520/1*Jf9vqIDutU0YZiuUMpXQ9g.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps 1, 2 &amp;amp; 3:&lt;/strong&gt; Work on a copy of your .ipa backup, extract it, find the payload app.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://miro.medium.com/max/1520/1*vLWOprl3ADFZ1YqrbWpL5w.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://miro.medium.com/max/1204/1*P1K_MTvZbHjCNdRpI21BeA.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://miro.medium.com/max/1520/1*6kOllWf4Bsvve3cBE1SRgw.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps 4, 5 &amp;amp; 6:&lt;/strong&gt; Drop the payload app onto iTunes, replace the newer version if prompted, check that the app is listed without an icon.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://miro.medium.com/max/1400/1*XjEi0Yc59GdO6uhiEJpMzQ.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7:&lt;/strong&gt; Browse to the apps on your phone, find the app you just added, mark it for install. &lt;strong&gt;Step 8:&lt;/strong&gt; Sync, you’re done!&lt;/p&gt;

&lt;h2 id=&quot;so-how-does-this-work&quot;&gt;So how does this work?&lt;/h2&gt;

&lt;p&gt;What we are doing here is installing the app on the iOS device &lt;em&gt;without the associated app receipt&lt;/em&gt;, so the App Store app is not aware the old version is on the device and so will never prompt you to update it.&lt;/p&gt;

&lt;h2 id=&quot;how-do-i-undo-this-kind-of-install&quot;&gt;How do I undo this kind of install?&lt;/h2&gt;

&lt;p&gt;If you want to get things back to normal, simply delete the app from your iOS device and reinstall a newer version of the app without doing this trick.&lt;/p&gt;

&lt;h2 id=&quot;limitations&quot;&gt;Limitations&lt;/h2&gt;

&lt;p&gt;The one limitation of this is how long the developer will support the infrastructure that powers the old version of the app. For eBay this hasn’t been a problem to date, but there are no guarantees. Enjoy it whilst it lasts.&lt;/p&gt;

&lt;p&gt;Have fun keeping it old school! If you have any questions you as me on twitter @&lt;a href=&quot;https://twitter.com/gingerbeardman&quot;&gt;gingerbeardman&lt;/a&gt;.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 19 Jul 2016 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2016/07/19/how-to-prevent-an-individual-ios-app-from-updating-forever/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2016/07/19/how-to-prevent-an-individual-ios-app-from-updating-forever/</guid>
        </item>
      
    
      
        <item>
          <title>Emoji Dictionary 🤓 📖</title>
          <description>&lt;p&gt;One of my favourite features of Mac OS X is the ability to point the mouse cursor at a word and press &lt;em&gt;Command+Control+D&lt;/em&gt; to quickly see a popup definition courtesy of Dictionary.app:&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://miro.medium.com/max/804/1*z1FhHq7vt1X2oNOsnsH9xg.png&quot; alt=&quot;&quot; title=&quot;(you can also get this popup through a Force Click, or three-finger click/tap)&quot; /&gt;&lt;/p&gt;

&lt;p&gt;It annoys me when I use this feature on an Emoji and it doesn’t work. 😠&lt;/p&gt;

&lt;h2 id=&quot;diy&quot;&gt;D.I.Y.&lt;/h2&gt;

&lt;p&gt;During my job as a Technology Evangelist at Apple, I took great pride in learning as much as possible about the frameworks and tools that are provided to developers. One such toolkit allowed the creation of custom dictionaries for Mac OS X.&lt;/p&gt;

&lt;p&gt;So I thought it would be fun to use the Dictionary Development Kit to create a simple dictionary of Emoji and their meanings. It was! You can grab the finished dictionary here: &lt;a href=&quot;https://github.com/gingerbeardman/Emojipedia&quot;&gt;github.com/gingerbeardman/Emojipedia&lt;/a&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://miro.medium.com/max/1282/1*1zrc24g1nE6yyEVfjUHW5g.png&quot; alt=&quot;&quot; title=&quot; &quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;how-it-works&quot;&gt;How it works&lt;/h1&gt;

&lt;p&gt;I grabbed a comprehensive list of &lt;a href=&quot;http://unicode.org/emoji/charts/emoji-list.html&quot;&gt;Emoji Data&lt;/a&gt; from the Unicode website, and then set about converting it. The process was as follows:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Convert Emoji Data table to plain text (select all &amp;amp; copy in Chrome).&lt;/li&gt;
  &lt;li&gt;Write some simple PHP to parse the text file and write out the XML.&lt;/li&gt;
  &lt;li&gt;Setup build process.&lt;/li&gt;
  &lt;li&gt;Test and repeat many times.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For each Emoji I store the name and emoji itself, along with a list of keywords and aliases. That way you can search by word or theme and more easily find the emoji you’re looking for. I also list the keywords in the definition, which Dictionary.app automatically converts into hyperlinks allowing you to browse the Emojipedia dictionary just like a website.&lt;/p&gt;

&lt;h2 id=&quot;emojipedia&quot;&gt;Emojipedia&lt;/h2&gt;

&lt;p&gt;There’s only one place to go to find out information on any Emoji and that’s &lt;a href=&quot;http://emojipedia.org&quot;&gt;Emojipedia&lt;/a&gt;, a fantastic resource created by Jeremy Burge. I put a link to Emojipedia in every definition, so you can easily click through to find out more and continue learning about Emoji. I plan to work even closer with Emojipedia to include even more information in the dictionary file.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://miro.medium.com/max/840/1*Pn7tHXghkM3yK1YPGJTBkQ.png&quot; alt=&quot;&quot; title=&quot; &quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;for-hire&quot;&gt;For Hire&lt;/h2&gt;

&lt;p&gt;I offer a consultancy service that helps companies make better use of technology; from low level tools through to user interface and experience. &lt;a href=&quot;http://www.gingerbeardman.com&quot;&gt;Get in touch with me&lt;/a&gt; if you’d like to work together.&lt;/p&gt;

&lt;p&gt;It only remains for me to wish you a Happy &lt;a href=&quot;https://twitter.com/search?q=%23WorldEmojiDay&quot;&gt;#WorldEmojiDay&lt;/a&gt;! 🌍&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 17 Jul 2016 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2016/07/17/emoji-dictionary/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2016/07/17/emoji-dictionary/</guid>
        </item>
      
    
      
        <item>
          <title>Game Archaeology: Rocket League</title>
          <description>&lt;p&gt;One of the most successful console games of 2016 has been &lt;a href=&quot;http://www.rocketleaguegame.com/&quot;&gt;Rocket League&lt;/a&gt;. It features cars playing football (soccer) rather than people. Cool!&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;r4iT0yZEwk8&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;p&gt;Some would say it’s both a surprise hit, apparently coming out of nowhere, and also a novel concept. A while go I was chatting with &lt;a href=&quot;http://www.spaceapegames.com/about/board-of-directors/&quot;&gt;Simon Hade&lt;/a&gt;, COO and Co-Founder of &lt;a href=&quot;http://www.spaceapegames.com/&quot;&gt;Space Ape Games&lt;/a&gt;, who made exactly these observations. At this point the game librarian in me couldn’t help but correct him, so I mentioned that it wasn’t novel at all. 😱&lt;/p&gt;

&lt;p&gt;During my formative years I had played a game called &lt;a href=&quot;http://www.mobygames.com/game/wild-wheels&quot;&gt;Wild Wheels&lt;/a&gt; on my teenage crush computer—the Atari ST—some time around 1990, and I’d also played Konami’s &lt;a href=&quot;https://en.wikipedia.org/wiki/GTI_Club&quot;&gt;GTi Club&lt;/a&gt; on my Wii in 2010. Both of these games offer a take on car soccer, and I was sure there had to be even more car soccer games I wasn’t aware of.&lt;/p&gt;

&lt;p&gt;On my way home I put together a list. I do love lists.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.mobygames.com/game-group/ball-sports-with-vehicles&quot;&gt;www.mobygames.com/game-group/ball-sports-with-vehicles&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can see that Rocket League is the latest in a long line of car soccer games, and the sequel of &lt;a href=&quot;https://en.wikipedia.org/wiki/Supersonic_Acrobatic_Rocket-Powered_Battle-Cars&quot;&gt;Supersonic Acrobatic Rocket-Powered Battle-Cars&lt;/a&gt; from seven years prior. The earliest game of this type is from 1977 and there are at least a couple of dozen others between then and Rocket League.&lt;/p&gt;

&lt;h2 id=&quot;the-secret-of-success&quot;&gt;The Secret of Success&lt;/h2&gt;

&lt;p&gt;So what made Rocket League a success in light of all the preceding games? Perhaps it was a well executed online mode? But you could then argue that half of the games in the list also had online play.&lt;/p&gt;

&lt;p&gt;The most important differentiator is that &lt;em&gt;Rocket League&lt;/em&gt; was released on the right platforms to target the right users. The trifecta of PS4/PC/Xbox One means every platform that is home to those “hardcore” gamers who play online seriously. In that respect I think of Rocket League as being more similar to FIFA than you might first expect.&lt;/p&gt;

&lt;p&gt;Apparently there are signs of life outside of mobile after all.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 01 Jul 2016 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2016/07/01/game-archaeology-rocket-league/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2016/07/01/game-archaeology-rocket-league/</guid>
        </item>
      
    
      
        <item>
          <title>Post-processing Animated GIFs</title>
          <description>&lt;blockquote&gt;
  &lt;p&gt;This article was originally posted on &lt;a href=&quot;https://www.lexaloffle.com/bbs/?tid=3614&quot;&gt;pico8 BBS in 2016&lt;/a&gt;, and on &lt;a href=&quot;https://devforum.play.date/t/post-processing-animated-gifs/1074&quot;&gt;Playdate devforum in 2020&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I was interested to see how easy/difficult it is to edit the animated GIF recordings. My goal was to trim some frames from the beginning and end to make a more succinct video.&lt;/p&gt;

&lt;p&gt;After much trial, error and experimentation here are my findings using Mac OS X.&lt;/p&gt;

&lt;p&gt;The game shown in the GIFs is &lt;a href=&quot;https://www.lexaloffle.com/bbs/?tid=3547&quot;&gt;Worm Nom Nom by ilkkke &amp;amp; kometbomb&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;overview&quot;&gt;Overview&lt;/h2&gt;

&lt;p&gt;Animated GIFs can be:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;viewed frame-by-frame using system Preview.app&lt;/li&gt;
  &lt;li&gt;manipulated using “gifsicle”, “imagemagick”, “graphicsmagick” command line tools&lt;/li&gt;
  &lt;li&gt;converted using “ffmpeg” command line tool&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Notes&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;useful tools need to be installed, you may wish to use the “brew” command line tool or similar.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;viewing&quot;&gt;Viewing&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Open the GIF in Preview.app and it will show you all frames.&lt;/li&gt;
  &lt;li&gt;Preview calls the first frame 1 (one), but other tools usually call it 0 (zero).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;original/source animated GIF:
&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/post-processing-animated-gifs-01.gif&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;un-optimising&quot;&gt;Un-Optimising&lt;/h2&gt;

&lt;p&gt;Warning: If you have previously optimised your GIF to reduce filesize, &lt;a href=&quot;https://devforum.play.date/t/optimising-gifs-from-mb-to-kb/788&quot;&gt;as in this other thread&lt;/a&gt;, and you want to edit the GIF further then be sure to first use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gifsicle -U&lt;/code&gt; to unoptimise it, otherwise the editing commands won’t work as expected.&lt;/p&gt;

&lt;h2 id=&quot;trimming&quot;&gt;Trimming&lt;/h2&gt;

&lt;p&gt;required: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gifsicle&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;then this is how you trim&lt;/p&gt;
&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;gifsicle anim.gif &lt;span class=&quot;s2&quot;&gt;&quot;#212-238&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; trimmed.gif
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;note: this makes a copy of the GIF and keep frames 213 to 239 (gifsicle uses zero based frame count)&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/post-processing-animated-gifs-02.gif&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;resizing&quot;&gt;Resizing&lt;/h2&gt;

&lt;p&gt;if you want to double size of the image:&lt;/p&gt;
&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;gifsicle &lt;span class=&quot;nt&quot;&gt;--scale&lt;/span&gt; 2 trimmed.gif &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; resized.gif
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/post-processing-animated-gifs-03.gif&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;captioning&quot;&gt;Captioning&lt;/h2&gt;

&lt;p&gt;if you want to add an overlay to caption the animation&lt;/p&gt;

&lt;p&gt;required: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;imagemagick&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;graphicsmagick&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;then use this bash script:&lt;/p&gt;
&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;#!/bin/bash&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;source&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$1&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;caption&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$2&lt;/span&gt;
: &lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Usage: &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$0&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; anim.gif overlay.gif [output.gif]&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;
: &lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Usage: &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$0&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; anim.gif overlay.gif [output.gif]&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;nv&quot;&gt;fnsource&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;basename&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$source&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; .gif&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;fncaption&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;basename&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$caption&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; .gif&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;nv&quot;&gt;output&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;:-&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$fnsource&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$fncaption&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.gif&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;

gifsicle &lt;span class=&quot;nt&quot;&gt;-E&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$source&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;f &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.gif.&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do &lt;/span&gt;composite &lt;span class=&quot;nv&quot;&gt;$caption&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$f&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;done
&lt;/span&gt;gifsicle &lt;span class=&quot;nt&quot;&gt;--loopcount&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.gif.&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$output&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;rm&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.gif.&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;how to run the command&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;./caption.sh anim.gif overlay.gif &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;output.gif]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;note: if you do not specify an output name, it will be named using original filenames, eg. anim-overlay.gif&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/images/posts/post-processing-animated-gifs-04.gif&quot;&gt;overlay.gif&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/post-processing-animated-gifs-05.gif&quot; alt=&quot;GIF&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;converting-to-video-for-youtube&quot;&gt;Converting to Video for YouTube&lt;/h2&gt;

&lt;p&gt;required: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ffmpeg&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;to convert the GIF to MP4:&lt;/p&gt;
&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ffmpeg &lt;span class=&quot;nt&quot;&gt;-i&lt;/span&gt; trimmed.gif &lt;span class=&quot;nt&quot;&gt;-movflags&lt;/span&gt; faststart &lt;span class=&quot;nt&quot;&gt;-pix_fmt&lt;/span&gt; yuv420p video.mp4
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;video uploaded to YouTube:&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 1/1;&quot; videoid=&quot;Ydeg4bNHn08&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 16 Jun 2016 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2016/06/16/post-processing-animated-gifs/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2016/06/16/post-processing-animated-gifs/</guid>
        </item>
      
    
      
        <item>
          <title>WWDC 2016: Platforms State of the Union</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://miro.medium.com/max/1400/1*nYYr_EvVxQ-aDKUoVqKTVw.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The second half of WWDC Day One is a different sort of keynote. Not as glitzy or glamorous as the one with the Apple SVPs you know, and almost definitely not as well rehearsed and exciting for the general public. But for developers, this is the where they find out how much work they’re going to have to do to take advantage of all the new technologies and features that Tim, Craig and team talked about.&lt;/p&gt;

&lt;p&gt;Here’s a recap.&lt;/p&gt;

&lt;h2 id=&quot;extensions&quot;&gt;Extensions&lt;/h2&gt;

&lt;p&gt;So much of what’s new in iOS 10 revolves around the revamped extensions system. You’ll see this phrase crop up again and again in areas such as Sharing, Calls, Spotlight, Photos, Siri, Documents, Notifications, Maps, Widgets, Keyboards and iMessage.&lt;/p&gt;

&lt;h2 id=&quot;imessage&quot;&gt;iMessage&lt;/h2&gt;

&lt;p&gt;These sit in place of the keyboard after you invoke them, and you can interact with the app they represent or use their content in an iMessage. A huge opportunity to change the way people communicate here. You could say that Facebook Messenger has done this already, but for me the Apple method is better due to the fact that there’s already a huge ecosystem of apps that can add these extensions quite easily.&lt;/p&gt;

&lt;h2 id=&quot;sirikit&quot;&gt;SiriKit&lt;/h2&gt;

&lt;p&gt;Leverage the power of Siri easily through your app. Limited to 6 domains to start off with: Messaging, VoIP calling, Payments, Ride booking, Photo search, Workouts. They’re the areas with the most use, but I think others will follow over time.&lt;/p&gt;

&lt;h2 id=&quot;swift-3&quot;&gt;Swift 3&lt;/h2&gt;

&lt;p&gt;Apple’s great new programming language that is taking the world by storm. It’s now Open Source and being used across many different platforms. This third revision sees much simplification and streamlining, at the expense of breaking code written in previous versions. Xcode 8 has a tool to automatically upgrade your code, if you’d like, or you can carry on using Swift 2.3 which is still included.&lt;/p&gt;

&lt;h2 id=&quot;swift-playgrounds&quot;&gt;Swift Playgrounds&lt;/h2&gt;

&lt;p&gt;Learn to program the easy way. These interactive programming tutorials are the sort of thing I wish I had age 12. The best news about this is that the playgrounds can be shared with Xcode on a Mac, and Apple is releasing theirs under a reuse licence so people can create more tutorials in the same style. It has a really great interface that is capable of so much without the need to actually type anything. So cool.&lt;/p&gt;

&lt;p&gt;It’s similar to third-party app &lt;a href=&quot;http://twolivesleft.com/Codea/&quot;&gt;Codea&lt;/a&gt;, but as Playgrounds is made by Apple it’s so much better. I do hope that—eventually—apps can be created or published from Playgrounds.&lt;/p&gt;

&lt;h2 id=&quot;xcode&quot;&gt;Xcode&lt;/h2&gt;

&lt;p&gt;The app you use to build apps. It’s a monster of an app, with a steep earning curve and a penchant to changing its user interface every year around this time.&lt;/p&gt;

&lt;p&gt;This year the documentation team have been hard at work combining and reducing the documentation package which is now apparently a tenth of the previous size. Xcode itself gets Extensions allowing developers to hook onto it in an approved way to supplement its features with tricks and tools of their own. Yes, the Xcode interface changes yet again but for definite good, allowing you to layout an app in an almost WYSIWYG way.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;More, better debugging tools some of which happen at runtime meaning you can save time not having to run your code to find your bugs.&lt;/li&gt;
  &lt;li&gt;Stalwart system Console.app also sees improved logging and live streaming during debug.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Provisioning finally sees much improvement. This is the process you have to go through to be entitled to run code on your device and also be able to upload it to iTunes Connect so it can be be sold on the App Store. I’ve banged my head against the problems this could cause many times, so this is a very welcome change.&lt;/p&gt;

&lt;h2 id=&quot;differential-privacy&quot;&gt;Differential Privacy&lt;/h2&gt;

&lt;p&gt;Apple seems to be using this as a setup for some big changes in the future regarding Privacy. It will require a bunch more education for people to be comfortable with it. The mentions I’ve seen of it are a bit fluffy on where exactly this is being used, but I’d bet it’s everywhere in iOS in order to better learn from user behaviour and make better decisions. I’d hazard a guess that data has been collecting in a similar way since the beginning of iOS, but now it’s time to double down on it for certain iOS 10 features that would otherwise appear to compromise your privacy.&lt;/p&gt;

&lt;h2 id=&quot;ios&quot;&gt;iOS&lt;/h2&gt;

&lt;p&gt;iOS is now most definitely grown up. This year sees so much built on the groundwork of the past several years. Software this complicated takes time to build, and even longer to build it well, so it’s very exciting to see the fruits of labour pay off with so many awesome new features coming to iOS 10.&lt;/p&gt;

&lt;h2 id=&quot;watchos&quot;&gt;watchOS&lt;/h2&gt;

&lt;p&gt;A whole bunch of popular frameworks such as SpriteKit, SceneKit and CloudKit come to the watchOS to enable better apps. Let’s not forget the much talked about speed improvements. Fingers crossed.&lt;/p&gt;

&lt;h2 id=&quot;tvos&quot;&gt;tvOS&lt;/h2&gt;

&lt;p&gt;Similar to watchOS, tvOS is a relatively new branch of iOS and continues to receive a bunch new frameworks and technologies to bring it closer to iOS in capability.&lt;/p&gt;

&lt;p&gt;Game controller changes, supporting up to 4 simultaneous controllers. Plus, developers can now mark their game as requiring a game controller. No longer do you have to find a way for the game to work on the Siri remote.&lt;/p&gt;

&lt;h2 id=&quot;macos&quot;&gt;macOS&lt;/h2&gt;

&lt;p&gt;Better inegration with watchOS, including the ability to unlock your Mac by just being nearby. Window tabs for free in mukti-document apps. Picture in Picture for video playback. The same changes to Messages, Photos and Apple Music that we see on iOS.&lt;/p&gt;

&lt;p&gt;LZFSE—Apple’s more efficient and less power-hungry compression library has gone Open Source.&lt;/p&gt;

&lt;p&gt;Apple File System—a Next-Generation File System for Apple Products optimised for current and future technologies, replaces 18-year-old HFS that was built when we all carried around floppy disks.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 15 Jun 2016 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2016/06/15/wwdc-2016-platforms-state-of-the-union/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2016/06/15/wwdc-2016-platforms-state-of-the-union/</guid>
        </item>
      
    
      
        <item>
          <title>WWDC 2016: thoughts on the keynote</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://miro.medium.com/max/1400/1*iexhcn9uFh8cBUPkshnC4A.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;June is the highlight of the year for any Apple fan, with &lt;a href=&quot;https://developer.apple.com/wwdc/&quot;&gt;WWDC&lt;/a&gt; being the focal point of all eyes on Apple. Having recently left Apple it was interesting to view the event as an outsider for the first time in a while, with no prior knowledge of anything that was announced.&lt;/p&gt;

&lt;p&gt;This year I also had the company of a nice a cold drink in my hand as it’s a warm evening in London, UK, the day is winding down just as the conference is ramping up.&lt;/p&gt;

&lt;p&gt;If you missed it you can watch a recording of the keynote at &lt;a href=&quot;http://www.apple.com/apple-events/june-2016/&quot;&gt;www.apple.com/apple-events/june-2016/&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;fast-and-fun&quot;&gt;Fast and fun&lt;/h2&gt;

&lt;p&gt;For me that was a markedly better keynote than last year. More focussed, more features, more new faces. Some really great presenters appeared on stage—other than &lt;a href=&quot;http://www.apple.com/uk/pr/bios/craig-federighi.html&quot;&gt;Craig Federighi&lt;/a&gt;, of course—I remember at least five that really made an impression. I hope that trend continues as the old guard make way for the new.&lt;/p&gt;

&lt;h2 id=&quot;watchos&quot;&gt;watchOS&lt;/h2&gt;

&lt;p&gt;This had to go first, in my mind, for a couple of reasons. First, it’s the platform in need of the most change. And second, it’s the hardware the most users need convincing of. That said, if it heralds the performance increases that were demonstrated on stage it could finally be time the watch fulfils expectations.&lt;/p&gt;

&lt;p&gt;The system software changes that bring these speedups will no doubt require apps to be updated to use the new APIs, or at least be changed to cope with the new view hierarchies. I am interested in how many of these improvements will come for free, from the perspective of an app developer and user.&lt;/p&gt;

&lt;p&gt;It’s great to see the OS become simpler and more iPhone-like, much needed. This is for me the type of watchOS that the device should have shipped with: familiar, fluid and fast.&lt;/p&gt;

&lt;h2 id=&quot;tvos&quot;&gt;tvOS&lt;/h2&gt;

&lt;p&gt;A bit odd that Remote.app was mentioned as it’s been out for a while, but the changes it is receiving are quite substantial. &lt;a href=&quot;https://en.wikipedia.org/wiki/Single_sign-on&quot;&gt;Single Sign-On&lt;/a&gt; is a really nice time saving feature that acknowledges the inherent issues with TV and related input mechanisms, and helps things become easier. More frameworks arrive from iOS, all very welcome. APIs and features to make the Cable companies happy. Lots of changes, too many to mention here. Feels like a catch-up update to me.&lt;/p&gt;

&lt;h2 id=&quot;macos&quot;&gt;macOS&lt;/h2&gt;

&lt;p&gt;Name change! But for those of us who have been around the block a few times, everything old is new again as we return to a variation of the &lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_Mac_OS&quot;&gt;classic Mac OS name&lt;/a&gt; that saw us through the 1990s.&lt;/p&gt;

&lt;p&gt;Universal Clipboard, for me as a heavy user of a clipboard management app (Alfred) is a real killer feature that only the OS can provide at the level of integration it needs to be done. I thought the demo of this was great. Craig was excellent once again. Apple Pay in Safari, huge news that didn’t raise many eyebrows. A tool to help people free up space on their Mac, I suspect a reaction to the glut of mediocre apps that proclaim to do similar tasks filling up the Mac App Store charts.&lt;/p&gt;

&lt;p&gt;Tabs everywhere—done at an OS-level so multi-window apps get the feature for free—my hunch is that this, along with PiP, is the start of a push to get more users using full screen mode. But why might that be? Hmm.&lt;/p&gt;

&lt;p&gt;Siri! Very impressive demos. Let’s see if I’m ready to talk to my machine.&lt;/p&gt;

&lt;h2 id=&quot;ios&quot;&gt;iOS&lt;/h2&gt;

&lt;p&gt;Less than half way into the keynote and we are already at iOS. This reaffirmed the sheer amount of new stuff in iOS—let’s not forget that it’s the most important platform by far for Apple.&lt;/p&gt;

&lt;p&gt;The new lock screen and associated integration looks exactly what it should have been all along. Sliding to the right to get to Camera might take a bit of getting used to, but I appreciate the issue that TouchID now being so fast that something had to change with the lock screen UI.&lt;/p&gt;

&lt;p&gt;Developers now get API hooks into more of iOS, which can only be a good thing to herald in new types of apps. I’m excited to see what might come of an API that can search through the objects found in photos.&lt;/p&gt;

&lt;p&gt;Apple Music—what a demo! I loved Boz’s style. Interesting new design language being used in Music and News, perhaps trying to adjust the target audience to a younger demographic? Certainly made both apps feel less stuffy to me. Big changes after only a year.&lt;/p&gt;

&lt;p&gt;The demo of Messages was another favourite, despite the technical hiccups half way through. Cupertino looking firmly and squarely at Menlo Park. Integration with extensions mean stock apps like Maps and Messages stand a good chance at becoming real competition to Facebook’s &lt;a href=&quot;https://itunes.apple.com/gb/app/messenger/id454638411?mt=8&quot;&gt;Messenger&lt;/a&gt; and &lt;a href=&quot;https://itunes.apple.com/gb/app/snapchat/id447188370?mt=8&quot;&gt;Snapchat&lt;/a&gt; apps.&lt;/p&gt;

&lt;p&gt;Swift Playgrounds for iPad for me is a real killer app. It will sell iPads into schools at an astonishing rate. Another great demo, too. I hope the programmers keyboard can be used outside of the app, as some of the features like swiping to quickly get numbers and punctuation are lifted straight out of the popular &lt;a href=&quot;https://itunes.apple.com/gb/app/touchpal-keyboard-type-fun/id909654683?mt=8&quot;&gt;TouchPal keyboard&lt;/a&gt;, which I currently use. Though of course I’d rather use a stock keyboard if at all possible.&lt;/p&gt;

&lt;p&gt;All-in-all some amazing integration of apps into pretty much every asect of iOS from Maps through Photos to Messages. Users should be ecstatic.&lt;/p&gt;

&lt;h2 id=&quot;more&quot;&gt;More…&lt;/h2&gt;

&lt;p&gt;Other things I spotted that weren’t called out in the keynote but that I’ll be looking into over the course of the week:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://developer.apple.com/library/prerelease/content/documentation/FileManagement/Conceptual/APFS_Guide/Introduction/Introduction.html&quot;&gt;Apple File System&lt;/a&gt;—a Next-Generation File System for Apple Products, replaces HFS and optimised for current and future technologies.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://techcrunch.com/2016/06/13/apple-unbundles-its-native-apps-like-mail-maps-music-and-more-puts-them-in-the-app-store/&quot;&gt;Removal of stock apps&lt;/a&gt;—more control for the user, and more frequent updates from Apple.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://developer.apple.com/safari/&quot;&gt;Safari Extensions on the Mac App Store&lt;/a&gt;—very cool new avenue for developers to make money.&lt;/li&gt;
  &lt;li&gt;I’m sure more new features will come to light this week.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;teaser-websites&quot;&gt;Teaser websites&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://developer.apple.com/ios/&quot;&gt;iOS 10&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://developer.apple.com/macos/&quot;&gt;macOS Sierra&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://developer.apple.com/tvos/&quot;&gt;tvOS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://developer.apple.com/watchos/&quot;&gt;watchOS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 14 Jun 2016 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2016/06/14/wwdc-2016-thoughts-on-the-keynote/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2016/06/14/wwdc-2016-thoughts-on-the-keynote/</guid>
        </item>
      
    
      
        <item>
          <title>Game Critique: Frantic Architect</title>
          <description>&lt;p&gt;&lt;a href=&quot;https://itunes.apple.com/gb/app/frantic-architect/id1062825120?mt=8&quot;&gt;Frantic Architect&lt;/a&gt; for iOS and Android is a great casual game by &lt;a href=&quot;https://bulkypix.com/games/frantic-architect/&quot;&gt;Will Kwan/BulkyPix&lt;/a&gt; in which you have to build as tall a tower as possible, with the kicker being that you have limited control of where exactly the next building block will go. A video will help explain better:&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;hkLiQ17KNRE&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;p&gt;The game has a high degree of polish and the user interface design and screen layout is excellent. However, play of more than a few minutes will lead to frustration, which is something that really needs to be managed by the developer. Too much frustration and the player will go away and never open the game again.&lt;/p&gt;

&lt;p&gt;I think there’s one change that could be made that would make the game easier and less frustrating to play:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The block should lock into place on the “touch up” event, rather than on the “touch down” event as it is now.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This simple change would enable the player to reduce their reaction time by keeping their finger on the screen until they exact moment they want to lock a block in place.&lt;/p&gt;

&lt;p&gt;The physical movement of lifting the finger off the screen is a lot faster than the the double movement of first touching the screen followed by lifting the finger off again.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 10 Jun 2016 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2016/06/10/game-critique-frantic-architect/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2016/06/10/game-critique-frantic-architect/</guid>
        </item>
      
    
      
        <item>
          <title>Game Critique: Hill Racer 2</title>
          <description>&lt;p&gt;&lt;em&gt;From time to time I’ll be posting critique of video games in this way. It’s meant as constrictive criticsm in the nicest possible way. It also goes to show the type of feedback I give to developers when asked to test or review their games.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Recently I’ve been playing a fair bit of &lt;a href=&quot;https://itunes.apple.com/gb/app/hill-racer-2-extreme-speed/id946433365?mt=8&quot;&gt;Hill Racer 2&lt;/a&gt; on my Apple TV. It’s kind of like &lt;a href=&quot;https://itunes.apple.com/gb/app/tiny-wings/id417817520?mt=8&quot;&gt;Tiny Wings&lt;/a&gt;, but with cars. Right up my street! Check it out:&lt;/p&gt;

&lt;lite-youtube style=&quot;aspect-ratio: 16/9;&quot; videoid=&quot;3fPDJZz3whY&quot; params=&quot;start=0&amp;amp;modestbranding=2&quot;&gt;
&lt;/lite-youtube&gt;

&lt;p&gt;It’s quite well done, but there are a few small details that the developers could look at to easily improve both user experience and engagement.&lt;/p&gt;

&lt;h2 id=&quot;game-over-man&quot;&gt;Game over, man!&lt;/h2&gt;

&lt;p&gt;When you run out of gas (or petrol as we say in the UK) the game ends immediately. This is quite jarring, and it would be much better if the accelerator stopped working and the car could then slowly come to a halt under its own moment. The benefit of this would be twofold:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;the experience would be smoother and less jarring for the player,&lt;/li&gt;
  &lt;li&gt;the player stands a chance of reclaiming their game as they might be able to reach the next checkpoint even when they have run out of fuel. I have fond memories of clinching victory from the jaws of defeat like this in SEGA’s arcade classic &lt;a href=&quot;https://en.wikipedia.org/wiki/Out_Run&quot;&gt;Out Run&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;caught-in-a-trap&quot;&gt;Caught in a trap&lt;/h2&gt;

&lt;p&gt;Once you upgrade your car a few times you’ll have quite a decent top speed. This should be a good thing, but in fact it’s not. This is because the car body moves about a bit and can actually get stuck in bridges as you drive across them. This should be an easy fix by adjusting the collision of bridges against the car body only whilst the wheels are touching it.&lt;/p&gt;

&lt;h2 id=&quot;grinder&quot;&gt;Grinder&lt;/h2&gt;

&lt;p&gt;You can tell that the game is an iOS port, as it’s built around &lt;a href=&quot;https://en.wikipedia.org/wiki/Grinding_%28video_gaming%29&quot;&gt;grinding&lt;/a&gt;, in this case that’s earning in-game currency to be able to upgrade your car or buy a new one. On iOS this keeps users in the game and means that the developer can run more ads, and earn more money. On Apple TV ads in games are not an option, so I think the developer should have rebalanced the game to favour less grinding. This last one is a judgment call, though, as it would mean the game would be different across platforms.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 09 Jun 2016 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2016/06/09/game-critique-hill-racer-2/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2016/06/09/game-critique-hill-racer-2/</guid>
        </item>
      
    
      
        <item>
          <title>Game Analysis: Boom Dots</title>
          <description>&lt;p&gt;&lt;em&gt;One thing I occasionally do is a sort of third-person-post-mortem of a game I’ve been playing a lot of. I think about how it might have been put together from a game design and programming perspective. Of course this sort of analysis is just my opinion, but I do try to think things through far enough to prove my point. Often I go so far as to recreate the core game mechanic as a rapid prototype, just to be sure that my thinking is correct.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://umbrella.wtf/boomdots/&quot;&gt;Boom Dots by Umbrella Games&lt;/a&gt; is a great minimalist, arcade-style game that has enjoyed continued success on the App Store. What struck me about the game—other than how well it has been put together—was how simple and elegant the concept is. I see it as a simplified version of Space Invaders. The developer has sucessfully reduced an already simple concept to its bare essentials, doing away with both player movement and enemy formation in the process. You might think that removing those two keys elements would remove the fun, but you’d be wrong. I think it actually &lt;em&gt;amplifies&lt;/em&gt; the fun!&lt;/p&gt;

&lt;p&gt;Anyway, I was playing Boom Dots, marvelling at the elegance of the concept and wishing I’d come up with it first, and I began to think about how it might be put together. That’s either a blessing or a curse, but I can’t help but think about games in that way after they get a hold of me. Boom Dots is a great game with which to start this occasional series of posts, as it’s a very simple mechanic.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;There’s an Enemy Dot. And there’s a Player Dot.&lt;/p&gt;

  &lt;p&gt;The Player Dot can be released at which point it will move upwards. Meanwhile the Enemy Dot is moving back and forth across the screen.&lt;/p&gt;

  &lt;p&gt;If the Dots collide, you score and a new Enemy Dot appears. If you miss, it’s Game Over.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Testing whether the two dots, or circles, overlap is as easy as testing whether the distance between their centre points is less than the sum of their respective radiuses. A little bit of trigonometry is required. Easy.&lt;/p&gt;

&lt;p&gt;Tapping the Player Dot gives it some velocity to it, and sends it on its way. Super easy.&lt;/p&gt;

&lt;p&gt;Now to the Enemy Dot. The way this comes on the screen is really nice: such a smooth curve! And the way it moves back and forth: so smooth! Surely this is difficult to replicate? Well, yes, if you’re doing it from scratch. But absolutely not if you have the ability to perform &lt;a href=&quot;https://en.wikipedia.org/wiki/Inbetweening&quot;&gt;tweening&lt;/a&gt; animations, which I tend to do using a set of tried and tested &lt;a href=&quot;http://easings.net&quot;&gt;Easing functions&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Easing functions allow you to specify a curve that the speed of the animation should follow on its way from the start value to the end value. Normally it would move at a constant speed from start to end: Linear. But by adjusting the how fast we go using a mathematical formula, we can make the animation play at a different speeds depending on how far along between we are.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Perfect.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Types of curves that can be applied in this way are: Quadratic, Cubic, Quartic, Quintic, Sinusoidal, Exponential and Circular. Then there’s even Elastic and Bounce, which add a bit of wobble to proceedings.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Easings are easier to understand by looking at &lt;a href=&quot;http://easings.net&quot;&gt;interactive visualisations&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So, back to the Enemy Dot moving side to side. We want the animation to start slowly, speed up, then slow down. Looking at the visualisations we see that easeInOutSine will do that, and it’s not as severe as some of the others so it’d be a good one to try first. By applying the easeInOutSine Easing function to the Enemy Dot as it travels back and forth we can get just the effect we require. We can apply a similar function to animate the dot as it comes down onto the screen. When both animations happen at once a smooth curve emerges—mathematics is great!&lt;/p&gt;

&lt;p&gt;At its core Boom Dots is as easy as that: two tweens, some velocity on tap, and a simple collision detection check. Cool, huh?&lt;/p&gt;

&lt;p&gt;That’s all well and good, but there’s only one way to really know if the analysis is correct: to make a game that way. So that’s what I did.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.gingerbeardman.com/boomdots/&quot;&gt;Play the game right now in your browser&lt;/a&gt; or &lt;a href=&quot;https://vimeo.com/169931918&quot;&gt;watch a short video of it&lt;/a&gt;.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://miro.medium.com/max/750/1*AHPucF97JYxZj2uJC8FfNA.png&quot; alt=&quot;&quot; title=&quot;Add the game to your iPhone home screen for the best experience.&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I chose the &lt;a href=&quot;http://phaser.io&quot;&gt;Phaser JavaScript framework&lt;/a&gt; for this particular prototype. I’d been reading its documentation and it looked well suited to the task at hand. For example, it has the Easing functions that I wanted to use to get the dots moving smoothly. SpriteKit, to contrast, doesn’t have built-in Easing functions—though of course you could write your own or port some code across if you wanted to do this natively on iOS. I tend to experiment with a variety of frameworks and tools just to keep things interesting.&lt;/p&gt;

&lt;p&gt;Phaser is great because it takes care of the dull boilerplate work enabling you to concentrate on the actual game. It uses WebGL or the HTML Canvas depending on what is best for the device it is running on, and also provides some useful shortcuts for loading of assets, managing game states, easily adding physics and lots more. Explosions, for another example, also come for free. I used a small plugin to add the “screen shake” effect. The circle-to-circle collision I talked about earlier is also made even easier using Phaser:&lt;/p&gt;

&lt;p&gt;Is the distance between the two centre points less than the sum of the two radiuses?&lt;/p&gt;

&lt;p&gt;The prototype took me a few hours from start to finish, with another few the following day balancing, polishing and adding high score saving. I tend to do these reconstructions a few times a year, mostly on Bank Holidays.&lt;/p&gt;

&lt;p&gt;The complete source code for my version of Boom Dots is &lt;a href=&quot;https://github.com/gingerbeardman/boomdots&quot;&gt;on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Of course, Boom Dots goes a lot further than the core simple mechanic. It has a thick layer of presentation varnish. It tracks every bit of gameplay and uses them to give a steady stream of meta challenges to the player. These “missions” encourage the player to approach the game in different ways; to achieve certain goals in the gameplay such as getting a perfect hit, or surviving for a certain amount of time. It also introduces graphical themes that can be unlocked with extended play. These things keep the player in the game and the developer earning money through ads and in-app purchases.&lt;/p&gt;

&lt;p&gt;The developer, &lt;a href=&quot;https://twitter.com/mudloop&quot;&gt;Sven Magnus&lt;/a&gt;, certainly knows how to &lt;a href=&quot;http://www.youtube.com/watch?v=Fy0aCDmgnxg&quot;&gt;juice up a game&lt;/a&gt;. That’s a topic for another post.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 01 Jun 2016 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2016/06/01/game-analysis-boom-dots/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2016/06/01/game-analysis-boom-dots/</guid>
        </item>
      
    
      
        <item>
          <title>FAQ: The Hanafuda: Jarin-Ko Chie</title>
          <description>&lt;p&gt;I wrote a video game FAQ and uploaded it to GameFAQs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/ps/566070-the-hanafuda-jarin-ko-chie/faqs&quot;&gt;www.gamefaqs.com/ps/566070-the-hanafuda-jarin-ko-chie/faqs&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 08 Sep 2015 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2015/09/08/faq-the-hanafuda-jarin-ko-chie/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2015/09/08/faq-the-hanafuda-jarin-ko-chie/</guid>
        </item>
      
    
      
        <item>
          <title>Boom Matt</title>
          <description>&lt;p&gt;This is my version of the mobile game &lt;a href=&quot;/2016/06/01/game-analysis-boom-dots/&quot;&gt;Boom Dots by Umbrella Games&lt;/a&gt;, made this one Saturday evening in 2015 using Phaser HTML5 game framework just to see what it was like.&lt;/p&gt;

&lt;p&gt;Works on mobile, of course.&lt;/p&gt;

&lt;p&gt;Play in your browser: &lt;a href=&quot;https://gingerbeardman.itch.io/boom-matt&quot;&gt;gingerbeardman.itch.io/boom-matt&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/boom-matt-title.png&quot; alt=&quot;IMG&quot; /&gt; &lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/boom-matt-game.png&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 14 Mar 2015 23:59:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2015/03/14/boom-matt/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2015/03/14/boom-matt/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Fly Guy</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_lanbrgXWQe1qbfpni.png&quot; alt=&quot;Fly Guy&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Raise da Roof!!!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Fly Guy&lt;/em&gt; takes me back—way back. Whilst 2002 seems so long ago, it comes as no surprise that it &lt;em&gt;is&lt;/em&gt; so long ago. Screens were smaller, computers were slower, web browsers were much less capable and had to be helped along by plugins; so long ago that there was no iPhone! It was also the year I met the girl who would become my wife. Good times.&lt;/p&gt;

&lt;p&gt;To give the timeframe a bit of context, the consoles of the day were the GameCube, PlayStation 2 and Xbox. How strange it must have seemed when &lt;em&gt;Fly Guy&lt;/em&gt; appeared in web browsers using the once popular Macromedia Flash plugin to provide animation, sound and keyboard control in the small browser windows of the time.&lt;/p&gt;

&lt;p&gt;Purposefully eschewing 2002-era graphics, and opting for monochrome pixel artwork reminiscent of the original Apple Macintosh, turns &lt;em&gt;Fly Guy&lt;/em&gt; into something timeless. Trevor Van Meter also injects a good dose of humour on top of his excellent animations. A chilled, looping melody, and various spot sound effects round out the package. This is one stylish and psychedelic game.&lt;/p&gt;

&lt;p&gt;But &lt;em&gt;Fly Guy&lt;/em&gt; is more of a multimedia piece, or an interactive work of art, than a game. There is a goal, of course, and various things happen along the way (I won’t spoil it by telling you what they are), but there is no high score and no fire button. Everything that appears in the game serves a purpose, and it’s the exploration and discovery that brings a smile to your face in the few minutes you should take out of your day to play through this forgotten gem.&lt;/p&gt;

&lt;p&gt;Let’s hope it’s not too long before we enjoy a new trip in &lt;em&gt;Fly Guy 2&lt;/em&gt;?&lt;/p&gt;

&lt;p&gt;July 2016: some 14 years after it was originally launched &lt;em&gt;Fly Guy&lt;/em&gt; has been re-released on mobile! Links below.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://apple.co/2aPvN1N&quot;&gt;Get &lt;em&gt;Fly Guy&lt;/em&gt; for iOS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.tvmstudio.flyguy&quot;&gt;Get &lt;em&gt;Fly Guy&lt;/em&gt; for Android&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.trevorvanmeter.com/flyguy/&quot;&gt;Play &lt;em&gt;Fly Guy&lt;/em&gt; online&lt;/a&gt; (Flash plugin required)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.trevorvanmeter.com&quot;&gt;See more of Trevor’s work&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.twitter.com/heytvm&quot;&gt;Follow @heytvm on Twitter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 30 Sep 2014 21:15:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2014/09/30/fly-guy/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2014/09/30/fly-guy/</guid>
        </item>
      
    
      
        <item>
          <title>Polarium Advance: Daily Puzzle Challenge</title>
          <description>&lt;p&gt;I started a new job at Apple in June 2013, and seeing as I was living away from home a fair bit I had a bit of free time and the hunger for a big puzzle game to get my teeth into. So I bought an extra copy of Polarium Advance. I’d played the game before but had never finished all of the puzzles.&lt;/p&gt;

&lt;p&gt;It’s a typically brilliant game by &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Mitchell_Corporation&quot;&gt;Mitchell Corporation&lt;/a&gt;&lt;/em&gt; which was &lt;a href=&quot;https://web.archive.org/web/20041204110943/http://www.nintendo.co.jp/nom/0412/pick/1_int/index.html&quot;&gt;in development for Game Boy Advance when Nintendo saw it&lt;/a&gt; and requested &lt;a href=&quot;https://en.wikipedia.org/wiki/Polarium&quot;&gt;a version for their new handheld: the Nintendo DS&lt;/a&gt;. After that version was released the team returned to &lt;a href=&quot;https://en.wikipedia.org/wiki/Polarium_Advance&quot;&gt;the GBA version&lt;/a&gt;, which probably explains why it’s a more fully featured and all round better game than the DS version.&lt;/p&gt;

&lt;p&gt;The game’s Daily Puzzle mode has 365 puzzles and I started playing them on &lt;a href=&quot;https://twitter.com/gingerbeardman/status/365553568012455936&quot;&gt;8th August 2013&lt;/a&gt;. I made quick progress: &lt;a href=&quot;https://twitter.com/gingerbeardman/status/367398889692737536&quot;&gt;by 13th August I’d done 87 puzzles&lt;/a&gt; and after a week I’d done more than one hundred. The half way point of puzzles was reached within two weeks! Things slowed down during September as the puzzles became more difficult.&lt;/p&gt;

&lt;p&gt;I’m writing this looking back and the first mention of finishing it by New Year was on &lt;a href=&quot;https://twitter.com/gingerbeardman/status/388766818770644992&quot;&gt;11th October 2013&lt;/a&gt;. But I have to think I’d considered before that point.&lt;/p&gt;

&lt;p&gt;Anyway, it was a &lt;a href=&quot;https://twitter.com/gingerbeardman/status/414923359588462593&quot;&gt;bit of a squeeze&lt;/a&gt; in between Christmas and New Year but &lt;a href=&quot;https://twitter.com/gingerbeardman/status/418107154793762817&quot;&gt;I managed it&lt;/a&gt;!&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;You can &lt;a href=&quot;/files/Polarium-Advance.csv&quot;&gt;download CSV data&lt;/a&gt; of my progress.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/polarium-advance-progress-chart.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/polarium-advance-screen-almost.jpg&quot; alt=&quot;PNG&quot; class=&quot;screen&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/polarium-advance-screen-done.jpg&quot; alt=&quot;PNG&quot; class=&quot;screen&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 01 Jan 2014 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2014/01/01/polarium-advance-daily-puzzle-challenge/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2014/01/01/polarium-advance-daily-puzzle-challenge/</guid>
        </item>
      
    
      
        <item>
          <title>Review: MaBoShi</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/6ed65b81ec6d6def8f3ce0224b5bc1ae/tumblr_inline_perux2EuJE1qbfpni_540.jpg&quot; alt=&quot;MaBoShi&quot; data-orig-height=&quot;345&quot; data-orig-width=&quot;500&quot; data-orig-src=&quot;https://64.media.tumblr.com/tumblr_lacmhxVTeN1qbfpni.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Three games for the price of one in this innovative WiiWare title. Six if you count the fact that you can download a version of the game over Wi-Fi to your Nintendo DS to play on the move.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;WiiWare is the downloadable game service on Nintendo’s Wii home console. It lets you download smaller sized and lower priced games direct to your console, and offers a distinctly different range of games than you can pick up through more traditional retail outlets. The channel showcases game concepts that may not have been profitable to release elsewhere. It’s astonishing that without WiiWare, &lt;em&gt;MaBoShi&lt;/em&gt; may never have seen the light of day. Each of its three game concepts are so unconventional and slight that I think most gamers might not give them a second glance, even at this very affordable price.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;MaBoShi&lt;/em&gt; takes advantage of few of the Wii’s features but still delivers a solid and innovative experience. It allows players to use their Miis as avatars in the game, send replays to other players via WiiConnect24, and also has the previously mentioned Wi-Fi &lt;a href=&quot;#links&quot;&gt;download to Nintendo DS&lt;/a&gt;. But there is no sign of motion control. In fact, whilst the wii remote is used as a pointer for the game menu, &lt;em&gt;MaBoShi&lt;/em&gt; is firmly a one button game. Or perhaps that be three one button games, as there are actually three main game modes: Circle, Bar and Square. Each mode is played differently, but with the same objective - to score one million points. In the Wii version there are three game panels on screen, allowing simultaneous multi-player.&lt;/p&gt;

&lt;p&gt;With multiple players the game adds an extra feature into the mix, known simply as the Effect System. Destroying an enemy will cause a bubble to appear. This bubble moves across the screen and over other game panels where it can affect other games in progress. This means that players managing their own separate games may be influenced by these effects eminating from other game panels, and players may therefore choose whether they wish to help or hinder their fellow players. It’s not often you get to choose whether to play cooperatively or competitively, and I really like this aspect of the gameplay.&lt;/p&gt;

&lt;p&gt;Circle mode - my personal favourite - finds you in control of a constantly rotating circle, able to switch the direction in which it is spinning by pressing the A button. By controlling the speed and momentum of the circle, you must guide it around the screen. You can use the variety of dynamic obstacles that appear on screen as a means to achieving the precise movement required to collide with the enemies and collect bonus multipliers. The aim of each round is to collide with all enemies as they appear onscreen, before they move off the game area. It is game over as soon as one enemy leaves the play field. The depth of control in this game mode is simply astonishing, and infrequent taps of the A button allow almost analog control of speed and momentum. Special mention must also go to the level design in this game, as it is balanced to perfection. In fact, if you’re good enough to score a million you will most likely do so near the end of all available 40 levels.&lt;/p&gt;

&lt;p&gt;Bar mode sees you manoeuvring a rotating bar through a vertically scrolling level. The bar rotates around a core, which only moves using the momentum created by the bar and only when the A button is held. The bar can be used to defeat enemies and smash blocks, but if the core touches an enemy or a block the game ends. There are also pinballs, powerups and much more to contend with. I find this game the most difficult of the three.&lt;/p&gt;

&lt;p&gt;Square mode sees the player controlling a single block that leaves a trail of fire behind. This trail of fire can burn obstacles, and can even set other parts of the trail alight. You must navigate around the screen, at your own pace, setting fire to all the obstacles with the help of the occasional bomb, whilst keeping an eye out for bonus multipliers. The screen scrolls when the player moves, and if an obstacle or part of the trail of fire hits the bottom of the screen, the game ends.&lt;/p&gt;

&lt;p&gt;Created by Japanese pinball experts &lt;a href=&quot;http://www.pinball.co.jp&quot;&gt;Mindware Corp&lt;/a&gt;, and based on pre-existing prototypes created by team member &lt;em&gt;Kuniaki Watanabe&lt;/em&gt;, &lt;em&gt;MaBoShi&lt;/em&gt; is a triumph of game design and deserves your attention. If you fancy a challenge I can heartily recommend trying to reach one million points in one or all of the game modes (I’ve only &lt;a href=&quot;http://www.flickr.com/photos/emsef/3010745864/&quot;&gt;managed to do it myself&lt;/a&gt; in circle mode on the DS download version) - the game has a lot to offer if you’re willing to give it a try. Nintendo seem to be of the same mind, as they recently released an updated and expanded version of the Square game for their DSiWare download service under the name of &lt;a href=&quot;http://dsiware.nintendolife.com/games/dsiware/flametail&quot;&gt;Flametail (USA)&lt;/a&gt; also known as Trailblaze: Puzzle Incinerator (EU) and Moyasu Puzzle: Flametail (JPN).&lt;/p&gt;

&lt;h2 id=&quot;how-to-play&quot;&gt;How to play&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/wii/946472-maboshis-arcade/faqs&quot;&gt;MaBoShi WiiWare Manual&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/wii/946472-maboshis-arcade/faqs&quot;&gt;MaBoShi Guide at GameFAQs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/maboshi-instructions.png&quot; alt=&quot;PNG&quot; title=&quot;Brief instructions for each of MaBoShi&apos;s three game modes&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=2BvygeP0O4g&quot;&gt;Watch the Wii game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=HVdZ-Nm9J_Q&quot;&gt;Watch the DS game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/download/wiiware-roms/Maboshi%27s%20Arcade.wad&quot;&gt;Download MaBoShi as a WAD file to play on a modded Wii&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/download/maboshi-nintendo-ds/MaBoShi.nds.zip&quot;&gt;Download MaBoShi as an NDS file to play in an emulator or modded DS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/download/maboshi-nintendo-ds/MaBoShi.cia&quot;&gt;Download MaBoShi as a CIA file to play on a modded Nintendo 3DS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/maboshis-arcade&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://dsiware.nintendolife.com/games/dsiware/flametail&quot;&gt;Find out more about Flametail for DSiWare&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2024/04/18/per-game-skins-in-the-delta-classic-video-game-emulator-for-ios/&quot;&gt;Play MaBoShi on your iPhone&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 29 Jun 2013 00:25:58 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2013/06/29/maboshi/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2013/06/29/maboshi/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Chip’s Challenge</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_ma8ibkYAVK1qbfpni.png&quot; alt=&quot;Chip&apos;s Challenge&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sokoban for the 20th century.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.mobygames.com/game/soko-ban&quot;&gt;Sokoban&lt;/a&gt; was a Japanese puzzle game created in 1981 by Hiroyuki Imabayashi in which the player pushes boxes around a warehouse onto a number of designated goal locations. It’s a game whose depth and complexity rivals chess, and which has been used as a testbed for Artificial Intelligence applications and other science research. It’s up there with &lt;a href=&quot;http://www.mobygames.com/game/tetris&quot;&gt;Tetris&lt;/a&gt; as one of the purest gameplay concepts ever created. Indeed, you might wonder how such a solid concept could be improved upon. Many had tried and either failed or ended up with a game that didn’t vary from Sokoban in any meaningful way. I expect &lt;a href=&quot;http://chipschallenge.wikia.com/wiki/Chuck_Sommerville&quot;&gt;Chuck Sommerville&lt;/a&gt; was pretty pleased with himself as he refined the Sokoban concept and ended up with &lt;a href=&quot;http://www.mobygames.com/game/chips-challenge&quot;&gt;Chip’s Challenge&lt;/a&gt; for the Atari Lynx. Even more amazing is that the programming for the final version was completed in a mater of &lt;a href=&quot;http://www3.telus.net/~nfield/ChipChallenge/message.htm&quot;&gt;weeks&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Chip’s Challenge took the core Sokoban concept of pushing things around and injected it with a good dose of humour and a bunch of extra gameplay elements, such as conveyor belts, keys, enemies, transporters, destroyable tiles, switches, power ups and more. And of course computer chips that need to be picked up to complete a level. These extra features meant that levels could vary greatly in difficulty and also in play style - some would be puzzles and others would focus more on action. Level passwords allowed the player to resume their game before battery backup game saving was the norm. The game became fiendishly difficult as you progressed through just under 150 extremely well designed levels.&lt;/p&gt;

&lt;p&gt;The game was subsequently released on multiple home computer platforms, culminating in a version produced by Microsoft for Windows 95. This well-known version has different graphics and some errors in the gameplay logic, meaning it isn’t really the best one to play. I recommend playing the &lt;a href=&quot;http://www.mediafire.com/?talh908rucozuwg&quot;&gt;DOS version&lt;/a&gt; (shown above), Commodore Amiga, Atari ST or Atari Lynx version through an emulator.&lt;/p&gt;

&lt;p&gt;Chuck Sommerville apparently completed work on Chip’s Challenge 2, but it has never been published due to the fact he didn’t retain the copyright on the game name. But you can see &lt;a href=&quot;http://www.youtube.com/watch?v=MLB43Mu4HgY&quot;&gt;a video of what might have been on YouTube&lt;/a&gt;. He has also gone on to reuse a lot of the same ideas in &lt;a href=&quot;http://www.chuckschallenge.com&quot;&gt;Chuck’s Challenge&lt;/a&gt;, a pseudo sequel to the original game which keeps the majority of the gameplay elements but changes the scenario to one with much less personality. For me the master stroke of Chip’s Challenge is the more interesting scenario - kids growing up with the Atari Lynx would have much more affinity with a nerd trying to get into a computer club than with a guy pushing boxes around a warehouse with no real aim.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=lnMsCySN5IQ&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=MLB43Mu4HgY&quot;&gt;Watch footage of Chip’s Challenge 2 on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/chips-challenge&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://chipschallenge.wikia.com&quot;&gt;Read all about the game at the official Wikia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 12 Sep 2012 11:27:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2012/09/12/chips-challenge/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2012/09/12/chips-challenge/</guid>
        </item>
      
    
      
        <item>
          <title>iStock: Download large comp</title>
          <description>&lt;p&gt;Back in 2012, before my time at Apple, I was a contract developer and would often work with designers on specific projects. Over the course of those projects, we’d have to find stock photos for the apps or websites we were building and generally turned to &lt;a href=&quot;https://www.istockphoto.com&quot;&gt;iStockPhoto&lt;/a&gt; as our main resource.&lt;/p&gt;

&lt;p&gt;During the design phase we would go through number of different image options, using the watermarked thumbnail images from iStock as temporary placeholders, or &lt;a href=&quot;https://en.wikipedia.org/wiki/Comprehensive_layout&quot;&gt;comps&lt;/a&gt;, before settling on the final image that we would buy.&lt;/p&gt;

&lt;p&gt;As well as the thumbnail, iStock also offered a zoom function that let you scroll around a large version of the photo. It occurred to me that I might be able to use this to get a larger watermarked comp for download?&lt;/p&gt;

&lt;h2 id=&quot;version-1&quot;&gt;Version 1&lt;/h2&gt;

&lt;p&gt;In 2012, iStock’s zoom function loaded in the larger image split in tiles. My hunch is that this was to prevent people from downloading the larger version, as I doubt it would be much of a bandwidth saving mechanism.&lt;/p&gt;

&lt;p&gt;Regardless, I was undaunted and up for the challenge. My first attempt at solving the problem, to prove that it was possible, was a UserScript. This is a snippet of JavaScript that can be run using an extension like &lt;a href=&quot;http://www.greasespot.net&quot;&gt;GreaseMonkey&lt;/a&gt; or &lt;a href=&quot;https://github.com/os0x/NinjaKit&quot;&gt;NinjaKit&lt;/a&gt; in much the same way as a native browser extension. They’re a very quick way to prototype an idea.&lt;/p&gt;

&lt;p&gt;After the concept was proven I wrote extensions for both Safari and Chrome. When triggered—via a modified link on the page—the extension would zoom the image to the highest level, then programmatically grab each tile, composite the tiles together on a HTML5 canvas element, and finally convert the canvas into a large JPEG image that can easily be downloaded.&lt;/p&gt;

&lt;p&gt;A lot of effort, you might say, but it worked very well and became quite popular throughout the design community.&lt;/p&gt;

&lt;h2 id=&quot;version-2&quot;&gt;Version 2&lt;/h2&gt;

&lt;p&gt;In early 2013 iStock changed their website to remove the zoom feature, allowing the large comp to be accessed directly without having to stitch together a bunch of tiles. I updated my extensions to cope with these changes, which of course involved throwing out most of the code I’d written for the first version.&lt;/p&gt;

&lt;p&gt;As a software developer you learn to be ready to &lt;a href=&quot;http://c2.com/cgi/wiki?KillYourDarlings&quot;&gt;kill your darlings&lt;/a&gt; during any sort of refactoring.&lt;/p&gt;

&lt;h2 id=&quot;version-3&quot;&gt;Version 3&lt;/h2&gt;

&lt;p&gt;Today I release the third version of the extension, rewritten to work with the current iStock website. The extension becomes even simpler, but remains incredibly useful. You can &lt;a href=&quot;http://www.gingerbeardman.com/safari/&quot;&gt;download it at my website&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This version adds a link—a green “Download large comp” button—below the existing, red “Download this photo” button. The beauty of this new link is that it is more usable and friendly than the previous versions of the tool.&lt;/p&gt;

&lt;p&gt;The download can be triggered in a few different ways:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Clicking the green button will open the zoomed image in a new tab.&lt;/li&gt;
  &lt;li&gt;Option-clicking the green button to download the large comp immediately.&lt;/li&gt;
  &lt;li&gt;Right-clicking on the green button will to show a contextual menu with further options, such as the ability to copy the web address.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This version will hopefully last for a while, but I’ll be keeping my eye on it. &lt;a href=&quot;https://github.com/gingerbeardman/iStockLargeComp.safariextension&quot;&gt;The source code is, of course, on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://miro.medium.com/max/1400/1*LdtRYi2Bv7oBTKTpLtXC-w.jpeg&quot; alt=&quot;&quot; title=&quot;iStockLargeComp: notice the new green button&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;final-thoughts&quot;&gt;Final thoughts&lt;/h2&gt;

&lt;p&gt;I have a lot of fun building extensions. Not just because it involves programming, DOM manipulation using JavaScript, and some HTML and CSS for styling. For me, the real fun comes out of deconstructing the inner workings of the webpage—I guess you could call it reverse engineering—and then implementing a solution that will not only work well, but be resistant to breaking at the slightest changes to the page it is modifying.&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 30 Jul 2012 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2012/07/30/istockphoto-download-large-comp/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2012/07/30/istockphoto-download-large-comp/</guid>
        </item>
      
    
      
        <item>
          <title>Music from the 3DS game Pullblox/Pushmo/Hiku-Osu</title>
          <description>&lt;p&gt;Music from the 3DS game Pullblox (EU), Pushmo (USA), Hiku-Osu (JP).&lt;/p&gt;

&lt;p&gt;© 2011 Nintendo/Intelligent Systems.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://soundcloud.com/gingerbeardman/sets/pullblox/&quot;&gt;soundcloud.com/gingerbeardman/sets/pullblox/&lt;/a&gt;&lt;/p&gt;

&lt;iframe src=&quot;https://w.soundcloud.com/player/?url=https%3A%2F%2Fapi.soundcloud.com%2Fplaylists%2F1449053&amp;amp;visual=true&amp;amp;liking=false&amp;amp;sharing=false&amp;amp;auto_play=false&amp;amp;show_comments=false&amp;amp;continuous_play=false&amp;amp;origin=tumblr&quot; frameborder=&quot;0&quot; allowtransparency=&quot;true&quot; class=&quot;soundcloud_audio_player&quot; width=&quot;540&quot; height=&quot;540&quot;&gt;&lt;/iframe&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 21 Dec 2011 14:18:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2011/12/21/music-from-the-3ds-game-pullblox-pushmo-hikuosu/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2011/12/21/music-from-the-3ds-game-pullblox-pushmo-hikuosu/</guid>
        </item>
      
    
      
        <item>
          <title>Wire Hang Redux: update</title>
          <description>&lt;p&gt;An update to Wire Hang Redux my version of the Java game Wire Hang, with improved controls and graphics. This version was built using BlitzMax.&lt;/p&gt;

&lt;p&gt;Read more about the game in the original &lt;a href=&quot;/2004/06/20/wire-hang-redux/&quot;&gt;blog post&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Download: &lt;a href=&quot;https://gingerbeardman.itch.io/wire-hang-redux&quot;&gt;gingerbeardman.itch.io/wire-hang-redux&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/wire-hang-redux-update-title.png&quot; alt=&quot;IMG&quot; /&gt;
&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/wire-hang-redux-update-clouds.png&quot; alt=&quot;IMG&quot; /&gt;
&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/wire-hang-redux-update-stars.png&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 12 Dec 2011 14:54:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2011/12/12/wire-hang-redux-update/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2011/12/12/wire-hang-redux-update/</guid>
        </item>
      
    
      
        <item>
          <title>Flicky (1984)</title>
          <description>&lt;p&gt;I own a Bally/Midway arcade cabinet of the SEGA game Flicky from 1984.&lt;/p&gt;

&lt;p&gt;So, I decided to make a Tumblr blog all about the game.&lt;/p&gt;

&lt;p&gt;Check it out &lt;a href=&quot;https://flicky1984.tumblr.com&quot;&gt;flicky1984.tumblr.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/flicky-1984.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 26 Oct 2011 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2011/10/26/flicky-1984/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2011/10/26/flicky-1984/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Wizkid</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_lo8v27iIHY1qbfpni.png&quot; alt=&quot;Wizkid&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The greatest video game ever sold?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.mobygames.com/game/wizkid-the-story-of-wizball-ii&quot;&gt;Wizkid&lt;/a&gt; was born in a time when British video game developers ruled the world. That such a time existed may seem strange today, as developers from Japan and the USA roll out one blockbuster game after another whilst British development companies quietly wonder where it all went wrong. Back in the early 90s a video game could be made by a small team of individuals rather than a team of hundreds - it was a much simpler time. To put things into perspective, at the time Wizkid was released the home computer scene was in decline and video game consoles such as the &lt;a href=&quot;http://en.wikipedia.org/wiki/Super_Nintendo_Entertainment_System&quot;&gt;Super Nintendo Entertainment System&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Mega_Drive&quot;&gt;Sega Mega Drive&lt;/a&gt; were invading UK homes.&lt;/p&gt;

&lt;p&gt;A product of bedroom-based development house &lt;a href=&quot;http://en.wikipedia.org/wiki/Sensible_Software&quot;&gt;Sensible Software&lt;/a&gt; during the peak of their creative output, Wizkid was an ode to everything British. It was Monty Python, seaside arcades, Fawlty Towers, tabloid newspapers, The Young Ones, punk rock, Viz and so much more – all wrapped up in a game that can only be described as, well, completely bonkers. It was fun, but perhaps more importantly it was funny. My initial play session left me bewildered, but as I settled into the weirdness it dawned on me that I was witnessing the most wonderful game I’d ever seen.&lt;/p&gt;

&lt;p&gt;At this point in time Sensible Software were a household name, an established company and burgeoning brand who were coming off the back of a string of considerable successes. Most recently they had scored a hit with &lt;a href=&quot;http://www.mobygames.com/game/mega-lo-mania&quot;&gt;Mega-lo-Mania&lt;/a&gt; and were deep into the development of &lt;a href=&quot;http://www.mobygames.com/game/championship-soccer-94&quot;&gt;Sensible Soccer&lt;/a&gt;, the game that would turn out to be their &lt;em&gt;magnum opus&lt;/em&gt;. Wizkid may seem like an unlikely stop gap, not helped by the fact there are only a tenuous link to &lt;a href=&quot;http://www.mobygames.com/game/wizball&quot;&gt;Wizball&lt;/a&gt; - the older game by the company mentioned in the subtitle. You’d be right to wonder how such a crazy concept was sold to the executives at &lt;a href=&quot;http://en.wikipedia.org/wiki/Ocean_Software&quot;&gt;Ocean&lt;/a&gt;, but back then it was quite common for a publisher to sign a developer on the strength of their previous games with nothing but blind faith - or perhaps just trust - in their capability to deliver. A lot like the music industry works - the record company or publisher sign an artist to make an album before they ever hear it. Jon Hare – one half of the original Sensible Software team – has described Wizkid as a game that shows the height of the team’s collective expression and imagination, a game that was undiluted by the publisher and showed just how much they were capable of achieving. The result is a game so quirky it feels almost Japanese in its execution.&lt;/p&gt;

&lt;p&gt;Right from the off you’re in no doubt that the game is a little bit left of centre, as you witness Wizkid conduct a pair of cannon to an excerpt from &lt;a href=&quot;http://en.wikipedia.org/wiki/1812_Overture&quot;&gt;Tchaikovsky’s “1812 Overture”&lt;/a&gt;. You can’t help but raise a smile - perhaps as a reaction to the confusion that’s slowly setting in, or maybe just because the act of conduction a pair of cannon looks so damned fun - in much the same way as the &lt;a href=&quot;http://www.youtube.com/watch?v=vltUWa_tOhE&quot;&gt;parade scene in Ferris Bueller’s Day Off&lt;/a&gt;. The game combines two decidedly old-school concepts: &lt;a href=&quot;http://www.mobygames.com/game-group/breakout-variants&quot;&gt;block-breaking&lt;/a&gt; and the &lt;a href=&quot;http://www.mobygames.com/genre/sheet/adventure/&quot;&gt;adventure game&lt;/a&gt;. You play an odd variation of &lt;a href=&quot;http://www.mobygames.com/game/breakout&quot;&gt;Breakout&lt;/a&gt;, where instead of a paddle you control a disembodied head whose job is to dislodge blocks so they collide with enemies. Success results in the appearance of a musical note, of which there’s a whole tune’s worth to collect. Once you complete the melody the game switches into adventure mode, where you gain control of the fully formed Wizkid and can walk him around a series of platform-based adventure screens, collecting items and solving a series of obtuse puzzles. Between these two forms of gameplay, you’ll collect a bunch of cats, solve some crosswords, buy some useful and not-so-useful items from a shop, row a boat, ride a donkey and much more besides. If ever there was a case where a game was more than the sum of its parts this is it. The game is unforgiving at times and if you’re not careful you’ll do well enough get to the end, but not well enough to see the “real” ending. You’re unlikely to see everything the game has to offer in your first play-through so there’s a chance to discover more in subsequent replays. If you’re not going to be able to play it, make sure you at least watch the play-through videos linked below.&lt;/p&gt;

&lt;p&gt;Could a game like Wizkid be successful today? It’s hard to say, but it would have its work cut out. The types of games it’s comprised of have long since fallen out of favour. Publishers don’t take risks any more, preferring to instead push out identikit games that cater the latest trend. On the other hand, there does still seem to be occasional room for off-the-wall presentation and humour in a game, as shown by the likes of &lt;a href=&quot;http://www.mobygames.com/game/peggle&quot;&gt;Peggle&lt;/a&gt; and &lt;a href=&quot;/2010/10/21/tomba/&quot;&gt;Tomba!&lt;/a&gt; - a combination of which would be a pretty good match to the madness of the world of Wizkid.&lt;/p&gt;

&lt;p&gt;Whilst it’s not my favourite game, or even anywhere near what you might consider to be a perfect game, the sheer scope and ambition seen in Wizkid means it’s my choice as the greatest game ever sold.&lt;/p&gt;

&lt;p&gt;(That’s not to say it’s the end of this blog, though!)&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/playlist?list=PL9A3F29BDCF2E48AF&quot;&gt;Watch a play-through of the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.lemonamiga.com/games/docs.php?id=1805&quot;&gt;Read the game manual at lemonamiga.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/wizkid-the-story-of-wizball-ii&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=oJxnXyBwXYw&quot;&gt;Watch an interview with Jon Hare about Sensible Software&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 21 Jul 2011 12:02:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2011/07/21/wizkid/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2011/07/21/wizkid/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Pilotwings</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_la4kbnQL8m1qbfpni.png&quot; alt=&quot;Pilotwings&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Take to the skies in one of the most relaxing video games of all time.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.mobygames.com/game/pilotwings&quot;&gt;Pilotwings&lt;/a&gt; is best described as an arcade flight simulator. The game enrolls you in a flying school and gives you a series of missions of increasing difficulty using a variety of aircraft from hang glider and airplane to rocket pack. Gaining enough points in each set of missions allows you to qualify for a flying licence and rewards you with a password that can be used to resume from that level on subsequent play-throughs. The game makes use of SNES graphics &lt;a href=&quot;http://en.wikipedia.org/wiki/Mode_7&quot;&gt;Mode 7&lt;/a&gt;, allowing a flat image to be transformed and skewed to give the illusion of 3D. These days the look might seem a little primitive, but back in 1992 this was awe inspiring stuff.&lt;/p&gt;

&lt;p&gt;Like many classics it was easy to pick up yet difficult to master, but rewarded extended play by giving the player secret characters or missions if they were skillful enough to land their aircraft on moving platforms. You could fly a bird man across a series of trampolines, or take control of a penguin jumping from a sky high diving board - all for a handful of bonus points. It turned the serious simulation on it’s head and infused it with a great sense of humour.&lt;/p&gt;

&lt;p&gt;The subtle jazz-pop music and idyllic island locations lent themselves to flying without a purpose. It was so much fun to take to the skies and just fly around. So much so that my Dad used to ask me to put on one of the hang gliding levels and he’d fly around catching thermals and just enjoying the view. When his time was about to run out he’d restart the level and do it all over again. It says a lot that the game was that much fun without actually competing any of the objectives.&lt;/p&gt;

&lt;p&gt;The game saw a sequel in &lt;a href=&quot;http://www.mobygames.com/game/pilotwings-64&quot;&gt;Pilotwings 64&lt;/a&gt; on the Nintendo 64, courtesy of Nintendo and &lt;a href=&quot;http://en.wikipedia.org/wiki/Paradigm_Entertainment&quot;&gt;Paradigm Simulation&lt;/a&gt;. This version of the game added fully 3D environments and more realistic vehicle behaviour. As much as I hate to say it, this version has not dated anywhere near as well as the SNES original. It feels very clunky and slow and I really don’t enjoy playing it these days.&lt;/p&gt;

&lt;p&gt;So it was great to find out that, after 15 years of waiting, an all-new Pilotwings game - &lt;a href=&quot;http://en.wikipedia.org/wiki/Pilotwings_Resort&quot;&gt;Pilotwings Resort&lt;/a&gt; - was to be a launch title for the &lt;a href=&quot;http://en.wikipedia.org/wiki/Nintendo_3DS&quot;&gt;Nintendo 3DS&lt;/a&gt;. I’ve played the game extensively and it’s just sublime - every bit the sequel I’d wished for. Whilst it’s not without faults - there’s only one location, a handful of vehicles, less variety of landing areas and no funny bonus modes. But it is in 3D, has it’s fair share of novel rewards and bags of gameplay. It’s also a far more accessible game than either of the two previous games. It’s evident that the Nintendo of today can put out games of a higher quality than they have ever done before. Even if it takes them a while to get around to it.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=mc4IyxvJTKs&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/pilotwings&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 26 Mar 2011 17:36:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2011/03/26/pilotwings/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2011/03/26/pilotwings/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Enthusia Professional Racing</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_lfv72zwTxp1qbfpni.jpg&quot; alt=&quot;Enthusia Professional Racing&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It’s brave to go up against an established franchise, but that’s just what Konami tried to do with &lt;em&gt;Enthusia Professional Racing&lt;/em&gt;. In many ways it’s a better game than &lt;em&gt;Gran Turismo&lt;/em&gt; but that wasn’t enough to take any substantial market share.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first thing you’ll notice about the game is that it looks every bit as good as PS2 rival &lt;a href=&quot;http://www.mobygames.com/game/gran-turismo-4&quot;&gt;Gran Turismo 4&lt;/a&gt;, especially when your PS2 is connected using component cables. Courses and scenery are definitely set in more varied and interesting locales. But there’s no support for widescreen display, which is a slight annoyance especially when playig on modern equipment. Most noticeable is that the load times are very fast indeed, restarting a race is instantaneous as it should be in every game.&lt;/p&gt;

&lt;p&gt;The game features a total of 211 cars and take a different approach to proceedings, in that you win cars rather than having to earn money to buy them. Plus, it has one of the strangest introductory movies I’ve ever seen - it includes CGI of fast cars, a dinky toy Morris Mini, a female photographer, a necklace and… an orgasm. So strange.&lt;/p&gt;

&lt;p&gt;There are three main sections to the game. &lt;em&gt;Driving Revolution&lt;/em&gt; gives you various driving scenarios and allows you test your driving skills and in return unlock cars for use in Free Race mode. &lt;em&gt;Free Race&lt;/em&gt; mode allows you to race with your newly unlocked cars on any course, just for kicks. Finally we have &lt;em&gt;Enthusia Life&lt;/em&gt; - you start off with a small number of cars in your garage, and are given a number of themed races to take part in, winning a random competing car as a prize, along with points and ranking. Quite RPG like, in some ways especially the random nature of winning a car after the race has ended. One tip - which sounds kind of obvious - is to make sure you pick a race where the odds are in your favour, with your car around the same skill level as the other competitors.&lt;/p&gt;

&lt;p&gt;Not one for the feint hearted, you lose points for driving badly - crashing, colliding or going off road - pretty much opposite to the Kudos system seen in &lt;a href=&quot;http://www.mobygames.com/game/metropolis-street-racer&quot;&gt;Metropolis Street Racer&lt;/a&gt;. This is probably the biggest issue with the game, as it can be a little bit too eager to deduct points especially when you also lose them in collisions that are caused by the AI.&lt;/p&gt;

&lt;p&gt;These days I think most people would consider the game closer to the &lt;a href=&quot;http://www.mobygames.com/game-group/forza-motorsport-series&quot;&gt;Forza&lt;/a&gt; series than the &lt;a href=&quot;http://www.mobygames.com/game-group/gran-turismo-series&quot;&gt;Gran Turismo&lt;/a&gt; series. However, I can see a lot of other games in there too: handling is very good with offroad sections feeling a lot like &lt;a href=&quot;/2010/10/11/rallisport-challenge-2/&quot;&gt;RalliSport Challenge 2&lt;/a&gt;, scenery is full of character a lot like another of Konami’s games &lt;a href=&quot;http://en.wikipedia.org/wiki/GTI_Club&quot;&gt;GTi Club&lt;/a&gt; or even &lt;a href=&quot;http://www.mobygames.com/game/metropolis-street-racer&quot;&gt;Metropolis Street Racer&lt;/a&gt;, and the attention required whilst driving is very reminiscent of &lt;a href=&quot;/2010/09/27/vanishing-point/&quot;&gt;Vanishing Point&lt;/a&gt;. So, elements of a handful of my favourite ever racers, which can be no bad thing.&lt;/p&gt;

&lt;p&gt;I’d love to see a sequel to &lt;em&gt;Enthusia&lt;/em&gt;, but I doubt Konami would ever consider it. They made an admirable effort but the game just didn’t excite the punter in any lasting way. Shame. Look out for a future review of Konami’s &lt;em&gt;Kaidō Battle&lt;/em&gt; game for their take on another style of driving game.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=H1sPL5ZmZb8&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=9Pwh_UPUxdc&quot;&gt;Watch the crazy intro on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.igcd.net/movie.php?id=10000082&quot;&gt;View images of all the cars at IGCD.net&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/enthusia-professional-racing&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 01 Feb 2011 15:15:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2011/02/01/enthusia-pro-racing/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2011/02/01/enthusia-pro-racing/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Split/Second Velocity</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_lfwnqqhjQ31qbfpni.jpg&quot; alt=&quot;Split/Second: Velocity&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It’s common knowledge that video game movie tie-ins generally result in disappointing games. So it’s interesting to see a game that takes so much inspiration from the big screen and manages to wrap it up in a great game. And all without a movie licence in sight.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The look of &lt;em&gt;Split/Second: Velocity&lt;/em&gt; will be instantly familiar to many. It will remind you of Jerry Bruckheimer action movies and super slick TV gameshows with it’s high gloss production values and all out assault on the senses.&lt;/p&gt;

&lt;p&gt;A few minutes into the game you’ll probably wonder what the hell is going on. Your car is being throw all over the track, parts of the scenery exploding in astonishing fashion all around and all you get as a reward is a position near the bottom of the results when, or if, you cross the finishing line. But the game, with it’s completely over the top explosions, has drawn you in enough and you’ll keep playing. Just one more race.&lt;/p&gt;

&lt;p&gt;A few hours later, you’ll have realised that whilst it’s a racing game at heart, there’s also a great deal of strategy involved. It’s very much a thinking man’s racer. You need to build up enough “juice” to be able to detonate parts of the scenery, which can be used to wreck fellow racers and change the balance of play and indeed in some cases the path of the course on which your driving. Your choice of cars will begin to grow, at a pace perfectly matched to the difficulty curve of the levels available.&lt;/p&gt;

&lt;p&gt;A few days in, you’ll be progressing through the chapters, raced most of the courses and memorised where each of the powerplays are. You’ll have begun to form tactics or favourites ways to play certain sections allowing you to influence the race in many ways other than simply driving well. You’ll still be slack jawed at the variety of destruction on display and perhaps you’ll even have settled on a car that suits your driving style and allows you to go back and mop up a few of the gold medals you failed to get in the early chapters. The poker-like gamble of whether to spend time building up more juice for a large powerplay or use what you have on smaller explosions will sit in your mind long after you’ve switched off the game. Feeling in control is knowing you’ve got enough juice to make a change and knowing where you can make those changes.&lt;/p&gt;

&lt;p&gt;A few weeks in and you’re skills will really be tested. You’ll be having some very close races whilst having to make judicious use of your powerplays. You’ll be approaching the end of the available chapters and wondering just how the explosions and set pieces can get any bigger or better. But they do. If you’re playing for achievements there are only a couple that cause any real problem - where you have to beat times set by members of the development team. The times are beatable, but it’s a task that really will separate the men from the boys - very difficult, perhaps even requiring fundamental changes to the way you’ve been driving the course involved, but always remaining fun.&lt;/p&gt;

&lt;p&gt;Thinking about how a particular explosion and the chain of events that follow might be able to change the race is one thing, but the absolute joy that greets you when you manage to pull it off is another. &lt;em&gt;Split/Second: Velocity&lt;/em&gt; is undoubtedly my Game of the Year 2010 and I’m looking forward to the inevitable sequel. Very nicely done indeed.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=3IViDE0YmKM&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/splitsecond&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 31 Jan 2011 21:51:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2011/01/31/split-second-velocity/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2011/01/31/split-second-velocity/</guid>
        </item>
      
    
      
        <item>
          <title>Review: The Wind Waker</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_lab1sxZXJa1qbfpni.jpg&quot; alt=&quot;The Wind Waker&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I’m not one for traditional adventure games - ones with a long, drawn-out main quest, lots of optional sub quests, experience points, levelling up, random battles and all of that sort of stuff. I need more direction in what to do next, although I still want to have fun figuring out how to do it and on the journey getting there.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My first &lt;em&gt;Zelda&lt;/em&gt; experience was playing &lt;a href=&quot;http://www.mobygames.com/game/legend-of-zelda-a-link-to-the-past&quot;&gt;A Link to the Past&lt;/a&gt; on my SNES. It’s a great game and it has some clever touches throughout the story. But I can’t remember finishing it. That, in a nutshell, is my problem with &lt;em&gt;The Legend of Zelda&lt;/em&gt; series - although it took a while for me to realise, mainly because of &lt;em&gt;The Wind Waker&lt;/em&gt;. Whilst it’s your typical &lt;em&gt;Zelda&lt;/em&gt; game, it looks so different to any of the previous games in the series with its cell-shaded graphical style that’s more akin to a Disney animation than a video game. The graphics alone meant I could put up with the annoyances the series had become bogged down with - the needless backtracking and relentless dungeon crawling. I know those things epitomise &lt;em&gt;Zelda&lt;/em&gt; but &lt;em&gt;The Wind Waker&lt;/em&gt; made me forget about them - for the better. It coated all that boring &lt;em&gt;Zelda&lt;/em&gt; stuff in visuals to die for - visuals that would make many movie animators slack jawed. And that was enough to see me through to the final credits.&lt;/p&gt;

&lt;p&gt;Just prior to playing &lt;em&gt;The Wind Waker&lt;/em&gt; I’d read &lt;em&gt;Paulo Coelho’s&lt;/em&gt; &lt;a href=&quot;http://en.wikipedia.org/wiki/The_Alchemist_(novel)&quot;&gt;The Alchemist&lt;/a&gt; which is a beautiful novel about realising your dreams. The book moved me a great deal and I never hesitate to recommend it. Whilst playing &lt;em&gt;The Wind Waker&lt;/em&gt; it struck me that there are a number of parallels between it and &lt;em&gt;The Alchemist&lt;/em&gt;, and whilst I’d love to see a video game - or movie - based on The Alchemist, Nintendo had done enough to satiate my desire.&lt;/p&gt;

&lt;p&gt;I’ve tried every &lt;em&gt;Zelda&lt;/em&gt; since and they’ve not held my attention as much as &lt;em&gt;The Wind Waker&lt;/em&gt;. Only as recently as &lt;a href=&quot;http://www.mobygames.com/game/legend-of-zelda-twilight-princess&quot;&gt;The Twilight Princess&lt;/a&gt;, with it’s more grown-up look, I decided that I’m pretty much wasting my time trying to find a Zelda game that hits me quite as hard as &lt;em&gt;The Wind Waker&lt;/em&gt; did. But there’s a special place in my heart for this story and I look forward to playing the game through again in 1080p High Definition when Nintendo give us capable hardware. I trust even more glorious visuals will once again help me see the final credits.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=IyxTw_AlRaA&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=LG9rN1zMNd0&quot;&gt;Watch the game at 1080p on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/legend-of-zelda-the-wind-waker&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 25 Nov 2010 03:28:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2010/11/25/the-wind-waker/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2010/11/25/the-wind-waker/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Bubble Bobble</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_l9th9beLOS1qbfpni.png&quot; alt=&quot;Bubble Bobble&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;His and hers gaming at it’s finest.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Bubble Bobble&lt;/em&gt; is one of those old-school arcade games that stands up well today. It’s single screen platform mechanics haven’t aged one bit. Capturing monsters in bubbles and then popping them to collect fruit is a supremely addictive pursuit. Things are constantly kept fresh with power ups, expert level design and a variety of bad guys to learn how to deal with. It’s interesting that when playing with a friend the natural tendency is to play cooperatively to clear the screen in an effort to see just how far you can get, allowing for some great team building.&lt;/p&gt;

&lt;p&gt;There have been a number of versions of the game released across most home formats but none have managed to capture the intricacies of the original game. This is a problem inherent in ports of any game - great care has to be taken to remain faithful to the original. If the developers responsible for the port do not have access to the original source code the quality of the resulting game will only be as good as their attention to detail and ability to figure out what is actually happening in the game behind the scenes. In the case of &lt;em&gt;Bubble Bobble&lt;/em&gt;, this has resulted in levels that are laid out wrongly, bad guys that move incorrectly, power-ups that don’t work as expected and more. Some of the issues probably have more to do with the fact that the arcade runs in an odd screen resolution making a 1:1 conversion impossible. Also interesting is that, in 1996, Taito announced that they had lost the original source code to Bubble Bobble following a reorganisation. So when they were creating further ports and sequels they on had to work from program disassembly, playing the game and from other ports that had already been made. Whilst the arcade version is the blueprint, with the number of subsequent versions of the game it’s no longer obvious what exactly constitutes the core game. I do wonder why with the power of today’s machines an emulated version of the game hasn’t been released?&lt;/p&gt;

&lt;p&gt;Bub and Bob - the dinosaur characters featured in the game - returned to human form for the game’s sequel &lt;a href=&quot;http://www.mobygames.com/game/rainbow-islands&quot;&gt;Rainbow Islands&lt;/a&gt; and whilst it had some gameplay features in common with the original it was effectively a new concept. A more traditional sequel came somewhat later in the form of &lt;a href=&quot;http://www.mobygames.com/game/bubble-symphony&quot;&gt;Bubble Symphony&lt;/a&gt; which stayed faithful to the gameplay of the original whilst added a few new elements. it also featured a rousing brass band version of the fantastic &lt;em&gt;Bubble Bobble&lt;/em&gt; theme music. Other than using MAME to play the original under emulation, the WiiWare or PlayStation versions are probably the best home versions.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=inAAItNuFaE&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/bubble-bobble&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 08 Nov 2010 08:54:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2010/11/08/bubble-bobble/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2010/11/08/bubble-bobble/</guid>
        </item>
      
    
      
        <item>
          <title>Review: GoldenEye 007</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_lbesk3S1rp1qbfpni.jpg&quot; alt=&quot;GoldenEye: 007&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I’d love to see somebody calculate just how much time was wasted by University students playing &lt;em&gt;GoldenEye: 007&lt;/em&gt;. Or, perhaps, how better off industry might be had we used that time to study rather than shoot each other in the face for hours on end.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;GoldenEye&lt;/em&gt; is one of the most lauded games in history, being lavished with heaps of praise that might be considered ridiculous were the game not able to deliver on all counts. Best FPS, best multi-player game, best movie-licence - the list goes on. Being regarded as the best Nintendo 64 game ever is a commendation not many people would argue with. The game was released on the N64 which supported four players each with analog control for precise movement. The game took advantage of everything the N64 had to offer, serving up a split-screen multi-player experience with enough depth to allow for hours, days, weeks or even years of repeat play. It was a game that showed just how good Rare was at it’s peak - &lt;a href=&quot;http://www.zoonami.com/briefing/2004-09-02.php&quot;&gt;the story of it’s development&lt;/a&gt; is a fascinating insight into the whole process.&lt;/p&gt;

&lt;p&gt;In 2008 rumours appeared online about a HD port of the original game for XBLA, but it never saw the light of day apparently due to financial disagreements between Microsoft and Nintendo. I’m not sure how that game would have been received, though. Whilst the original game still plays very well, especially in multi-player, it’s not without problems - control settings are not per player, levels are small in size, A.I. is limited and predictable, to name just a few. I feel that a port would have been looked at not through the rose-tinted glasses the original is regarded in but rather through the critical eye of today’s discerning gamer.&lt;/p&gt;

&lt;p&gt;So, it’s no surprise why the game didn’t receive the sequel it so obviously deserved. Lots of people tried and failed to recreate the magical formula that defined the sublime experience of the original. What it was exactly that made &lt;em&gt;GoldenEye&lt;/em&gt; so great became the stuff of legend. A few Bond games came along and were quickly forgotten about, most notable was the excellent &lt;a href=&quot;http://www.mobygames.com/game/007-nightfire&quot;&gt;007 Nightfire&lt;/a&gt; - developed by Eurocom and released by Electronic Arts - which was a great game but failed to capture the attention of the press or public. Interesting then, that it’s the same development team that bring us the new &lt;a href=&quot;http://en.wikipedia.org/wiki/GoldenEye_007_(2010_video_game)&quot;&gt;GoldenEye: 007 for Wii&lt;/a&gt;, which is a remake but one that takes numerous story and gameplay cues from the much loved original and brings it bang up-to-date in terms of graphics, gameplay and production values. Fans of the original shouldn’t worry at all - the game is as worthy successor as we are ever likely to see and an essential purchase for those yearning to relive their multi-player student days. Perhaps it’s time to settle those old grudges online?&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=Bj1z7F5BkyM&quot;&gt;Watch the original game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=RhlM1wu0V1Q&quot;&gt;Watch the new Wii game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/goldeneye-007&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.zoonami.com/briefing/2004-09-02.php&quot;&gt;Read about the development of the original game at Zoonami.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 05 Nov 2010 11:55:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2010/11/05/goldeneye-007/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2010/11/05/goldeneye-007/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Tempest 2000</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_lb96yaePVj1qbfpni.png&quot; alt=&quot;Tempest 2000&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;As far as “zone” games go, there are none finer than &lt;a href=&quot;http://en.wikipedia.org/wiki/Jeff_Minter&quot;&gt;Jeff Minter&lt;/a&gt;’s remake of arcade classic Tempest. It built on the solid foundation of the original and added all manner of power-ups and tripped-out graphics.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There’s no doubting that the original Tempest arcade game is as much of a classic today as it was in 1980, the concept apparently appearing to it’s creator &lt;a href=&quot;http://en.wikipedia.org/wiki/Dave_Theurer&quot;&gt;Dave Theurer&lt;/a&gt; in a dream. So it’s no mean feat that one man could bring the game kicking and screaming into the 90s in the form of &lt;em&gt;Tempest 2000&lt;/em&gt; or &lt;em&gt;T2K&lt;/em&gt;. Released on the &lt;a href=&quot;http://en.wikipedia.org/wiki/Atari_Jaguar&quot;&gt;Atari Jaguar&lt;/a&gt; it was pretty much the only game worth owning on the machine, but was not enough to prevent the machine performing poorly at retail.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;T2K&lt;/em&gt; modifies the gameplay of the original Tempest by adding in bonus levels, collectible power-ups, more sophisticated enemy types, and wildly varying level (“web”) designs. The game contains a total of 100 webs, with new frame colors and variations every 15 levels. Your progress is saved every couple of levels, and the game allows you to restart from the last stage the game saved at, albeit with your score zeroed out. Power-ups appear after shooting a certain number of enemies, floating up the web towards you. Collecting these power-ups will reward you with one of a number of items: a better laser, bonus points, the ability to jump up off the web, a helper “A.I.” droid, a warp token and a smart bomb. If a power-up is collected during your exit from a level, you’ll hear the phrase “Yes! Yes! Yes!” and the first power-up you receive in the next stage will be the A.I. Droid which is just the sort of thing you need to try to get through some of the more difficult levels, such as the infamous level 64, which punctuates a reasonably well balanced difficult curve. The game is pretty frantic, and may leave you wondering what the hell is going on but perseverance is rewarded by a fantastic experience - both in the gaming sense but also in emotional and psychological senses. It really is a trip.&lt;/p&gt;

&lt;p&gt;A version of &lt;em&gt;T2K&lt;/em&gt; was released for other machines under the name of &lt;a href=&quot;http://www.mobygames.com/game/tempest-x3&quot;&gt;Tempest-X3&lt;/a&gt; but featured a number of changes amongst was a change that saw your AI Droid all but labotomised. A second remake was created by Minter in the form of &lt;a href=&quot;http://www.mobygames.com/game/tempest-3000&quot;&gt;Tempest 3000&lt;/a&gt; which was released for the &lt;a href=&quot;http://en.wikipedia.org/wiki/Nuon&quot;&gt;Nuon&lt;/a&gt; - another machine that failed to makr an impact at retail. &lt;em&gt;T3K&lt;/em&gt; remains one of the most beautiful looking games I’ve ever played, but suffered from the fact that it didn’t play quite as well as &lt;em&gt;T2K&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;These days you can play &lt;em&gt;T2K&lt;/em&gt; using an &lt;a href=&quot;http://www.yakyak.org/viewtopic.php?t=41691&quot;&gt;emulator&lt;/a&gt; or go one better and pick up a copy of the game with the machine to play it on for next to nothing on eBay. You might want to set aside a good part of your weekend to play it, as time passes a lot faster when you’re in the zone.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=Zw9Hh8j0ra4&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/tempest-2000&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 02 Nov 2010 11:16:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2010/11/02/tempest-2000/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2010/11/02/tempest-2000/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Bishi Bashi Special</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_lab17u3uMy1qbfpni.png&quot; alt=&quot;Bishi Bashi Special&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Attention! Ready? Go!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Bishi Bashi Special&lt;/em&gt; is a set of games originally found on a pair of Konami arcade machines, the PlayStation version of which allowed up to 8 players using two multi-taps and featured 85 completely mental minigames. This was all years before &lt;a href=&quot;http://www.mobygames.com/game/warioware-inc-mega-microgame&quot;&gt;Wario Ware, Inc.&lt;/a&gt;, &lt;a href=&quot;http://www.mobygames.com/game/wii-party&quot;&gt;Wii Party&lt;/a&gt; or any other mini-game compilations came along.&lt;/p&gt;

&lt;p&gt;The games featured such things as body builders on pogo sticks jumping for a piece of meat (“Meat Catcher”), a dance-off to get the biggest afro (“Perm Mania”), a bride throwing wedding cake down the aisle (“Hyper Pie”), juggling cavemen eating different colored balls (“Uncle Bean”), and others with names like “Uncle Launcher”, “Robo Docking” and “Touch Tone Mania”. The games used control schemes that will be familiar to many a game player - for example button bashing like &lt;a href=&quot;http://www.mobygames.com/game/track-field&quot;&gt;Track and Field&lt;/a&gt;, pattern repetition like &lt;a href=&quot;http://www.mobygames.com/game/simon&quot;&gt;Simon&lt;/a&gt;, and rhythm action button pressing in time with the music. &lt;a href=&quot;http://en.wikipedia.org/wiki/Digitiser&quot;&gt;Digitiser&lt;/a&gt;, a video game fanzine written by &lt;a href=&quot;http://en.wikipedia.org/wiki/Paul_Rose_(writer)&quot;&gt;Paul Rose&lt;/a&gt; provided by Channel 4 as part of their Teletext service had this to say about &lt;em&gt;Bishi Bashi Special&lt;/em&gt; “utterly, utterly dreadful–but… probably one of the best games I’ve ever had the pleasure of playing.” That sums things up better than I ever could.&lt;/p&gt;

&lt;p&gt;I used to play &lt;em&gt;Bishi Bashi Special&lt;/em&gt; whilst I was lived in my first house share - the perfect place for it really. Having that many people all laughing manically at what was happening on screen was a fantastic experience. Interestingly, the few people I’ve spoken to about the game all have such fond memories but nobody could actually remember too many details so the video linked to below brought them all flooding back. In fact, I’d forgotten that a multi-player game could be so much fun until the exact same atmosphere appeared when I was recently at a friend’s house playing &lt;em&gt;Wii Party&lt;/em&gt;, which takes what was done so well in &lt;em&gt;Bishi Bashi Special&lt;/em&gt; and dresses it up in that special way only Nintendo seem to be able to do.&lt;/p&gt;

&lt;p&gt;So if you’re not consumed by &lt;em&gt;Wii Party&lt;/em&gt; and it’s horse racing mode, or sick to death of &lt;em&gt;Wario Ware, Inc.&lt;/em&gt;, and you’re hungry for more social multi-player gaming, then it might be time to revisit &lt;em&gt;Bishi Bashi Special&lt;/em&gt;. It can currently be picked up for £3.49 on the PlayStation Store. That works out at less than 5p a game, making it quite possibly the bargain of the century.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=AYYtiIicCkI&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/bishi-bashi-special&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 01 Nov 2010 19:17:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2010/11/01/bishi-bashi-special/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2010/11/01/bishi-bashi-special/</guid>
        </item>
      
    
      
        <item>
          <title>Review: DS Spirits Hanafuda</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_lb0pxhXMCu1qbfpni.png&quot; alt=&quot;DS Spirits Hanafuda&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nintendo started out in the entertainment business by manufacturing Hanafuda, or flower cards. There are a number of games that are commonly played with these cards the most popular of which is Koi-Koi, a game of surprising depth and one of my vices.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A Hanafuda deck consists of 48 cards split into twelve suits - one for each month. Each is designated a flower, and each suit has four cards. Typically, there are two “normal” cards, one poetry ribbon card, and a final special card. Familiarising yourself with the Hanafuda deck is the first obstacle to playing a game with them.&lt;/p&gt;

&lt;p&gt;The object of Koi-Koi is to form special card combinations (“yaku”) from cards accumulated in a point pile. Players can gain cards in their point piles by matching cards in their hands, or cards drawn from the draw pile, with cards on the table. Once a yaku has been made, a player can stop to cash in points, or keep going (“koi-koi”) to form additional yaku for more points. Different yaku are worth different numbers of points, roughly matching how difficult it is to collect that particular combination of cards. Memorising the dozen or so valid yaku is the second obstacle to the game.&lt;/p&gt;

&lt;p&gt;I first played Koi-Koi as part of the &lt;a href=&quot;http://www.mobygames.com/game/clubhouse-games&quot;&gt;42 All-Time Classics&lt;/a&gt; compilation of parlour games that Nintendo released for the DS. The game really intrigued me and I played it a lot to try to memorise the yaku. By then, though, the game had well and truly sunk it’s teeth into me. I search high and low for alternative versions of the game, amassing quite a collection in the process. I have Hanafuda/Koi-Koi games on pretty much every platform from older systems such as the WonderSwan, PlayStation and Dreamcast to more recent systems such as the iPhone, Wii and Nintendo DS. The main benefit of playing the game electronically is that you don’t have to keep score, but I find it fascinating that there can be such a range of quality and implementation when the rules of the game are so fixed. Some versions lay the cards on the table in a very confusing way, others over-complicate the controls so that it’s tricky to manipulate the cards or even see whose turn it is next or what your possible choices are. Then there are the games that dress up the game with licenced characters or graphics, such as &lt;a href=&quot;http://psxdata.snesorama.us/games/J/Y/SLPM-86857.html&quot;&gt;Youkai Hana Asobi&lt;/a&gt;, in an attempt to add a story around the game.&lt;/p&gt;

&lt;p&gt;So, after much searching I was overjoyed to find &lt;em&gt;DS Spirits Hanafuda&lt;/em&gt;, which for me is pretty much the perfect Hanafuda game. It looks good, controls well, lays out the cards logically and has a multitude of game modes including a Mission mode in which you have to play in a variety of ways such as winning without conceding a point, by collecting certain yaku or within a certain number of rounds. This mode in particular shows the great depth to the game and I’m still to finish the final challenge. The only bad thing about this version of the game is that it features only Japanese text. Dealing with Japanese is the third obstacle with the game, as the traditional Japanese nature of the game means that there’s very little Western interest and very few versions released that are English-friendly.&lt;/p&gt;

&lt;p&gt;But obstacles are there to be overcome. If you’ve not got a Nintendo DS, then the next best Koi-Koi game is on the iPhone. This version by Hidetoshi Hayakawa plays a great game of cards, supports wireless multi-player and also features a progressive mode versus the computer. Whilst not as polished or complete as &lt;em&gt;DS Spirits Hanafuda&lt;/em&gt; it features full English interface and instructions so it’s as probably the best starting point. Perhaps Koi-Koi will capture your heart as much as it has mine? Give the game a go and find out.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=xxx&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.flickr.com/photos/emsef/sets/72157614337766883/&quot;&gt;Read the objectives of DS Spirits Hanafuda’s Koi-Koi Mission&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://fudawiki.org&quot;&gt;Find out more about Hanafuda at fudawiki.org&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 29 Oct 2010 06:12:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2010/10/29/ds-spirits-hanafuda/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2010/10/29/ds-spirits-hanafuda/</guid>
        </item>
      
    
      
        <item>
          <title>Review: ChuChu Rocket!</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_lab0jaa6l61qbfpni.jpg&quot; alt=&quot;ChuChu Rocket!&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Dreamcast was the first truly online home video game console, and brought with it the first wave of fantastic online multi-player games that could be played on your TV. &lt;em&gt;ChuChu Rocket!&lt;/em&gt; was one of the best, an outstanding action puzzler with a glorious multi-player mode.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The aim of the game is to guide mice (“ChuChus”) around the screen into one or more goals (Rockets) whilst avoiding any cats (“KapuKapus”) that are roaming about. Both the mice and cats move in predictable ways - they always turn right when reaching a wall, they follow corners and they turn around when they encounter a dead end. The player places up to three arrows on the play field, which will direct anything that passes over them - both mice and cats. Arrows cannot be laid on top of other arrow or obstacles, and disappear over time and the oldest is removed if the player lays a fourth arrow. Special mice frequently appear, golden mice being worth many times more than regular mice and pink mice randomly changing gameplay in one of a number of ways. Such a simple premise quickly results in a maddening procession of mice and cats and all manner of confusion as players try to outwit each the positioning of arrows.&lt;/p&gt;

&lt;p&gt;Single player mode saw you play against the computer or in puzzle mode where you have to figure out the solution to puzzles by placing your arrows in the correct locations to get the mice to the exit, which was an excellent part of the game in itself. Local multi-player is an absolute riot and has to be seen to be believed - there simply aren’t many other games that are this much fun played with a few friends. Online multi-player was a great backup option to have as you’d never be short of people to play against. It’s something we’re used to these days with things like Xbox Live and as we have all grown up and got on with our own lives it’s often the preferred way to experience multi-player gaming.&lt;/p&gt;

&lt;p&gt;With the demise of the Dreamcast the game slowly faded away, briefly reentering the public eye a year later with a release on the Game Boy Advance. This handheld version matched the Dreamcast original feature for feature, with the exception of online play. However it did have slightly simplified graphics and an extra 2,5000 user-generated puzzles taken from the Dreamcast version’s online hub. There was a fan remake for the Atari ST which was an accurate but unofficial version of the game.&lt;/p&gt;

&lt;p&gt;Recently a version of the game was released on the App Store, but with features being spread across an iPhone version and an iPad version and it not feat as much content as the older GameBoy Advance version. It’s great to see such an original game get a new lease of life, but sad that it’s still missing important features from the original, showing just how far ahead of it’s time the Dreamcast was. Hopefully the iOS versions of the game will gain multi-player support in the future and finally give us the experience that was so enthralling those 10 years ago.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This review is dedicated to my good friend Morgan, without whom I’d have never bought a Dreamcast. He will always be Mr Sega to me.&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=WHBsA-PZXiA&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/chuchu-rocket&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://rg.atari.org/chuchu.htm&quot;&gt;Find out more about the Atari ST version at Atari.org&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 28 Oct 2010 14:01:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2010/10/28/chuchu-rocket/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2010/10/28/chuchu-rocket/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Joust</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_l9th1rc9IQ1qbfpni.png&quot; alt=&quot;Joust&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Joust&lt;/em&gt; was the first arcade game I ever played, at Royal Video on Breckfield Road North in Liverpool in the mid-80s. Those were the days. It’s a fascinating, old-school arcade game that still holds up well today.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;During the peak of video game arcades, most games were based on abstract or fantasy concepts with a small amount of realism thrown in the make the audience feel involved. These days everything is trying so hard to be lifelike and I often long for the days where games were more interested in offering something out of the ordinary. Williams’ &lt;em&gt;Joust&lt;/em&gt; was one such game. It put the player in the game as a futuristic knight sitting astride a flying bird, armed only with a lance, on a mission to defeat a number of adversaries and collect some eggs along the way. Every young boy has, at one point, wanted to be a knight in shining armour and this game gave you the ability to do that albeit in a world closer to the one in &lt;a href=&quot;http://en.wikipedia.org/wiki/Tron_(film)&quot;&gt;Tron&lt;/a&gt; than a medieval tale.&lt;/p&gt;

&lt;p&gt;The only controls are left and right and flap - you gain height by pressing the flap button repeatedly. That was enough to do some skilful flying and manoeuvring around the wave, using the platforms that are dotted around to help you on your way. The levels increase in difficulty with the addition of more bad guys, different platform layouts - some of which crumble away mid-wave - and a lava pit along the bottom which will pull you in if you get too close. You can rebound off platforms which is a strategy that should be used to your advantage as bad guys can be turned into collectible eggs by descending on them from above - a somewhat less risky strategy than the lancing them. Take too long to kill the bad guys and a shrieking pterodactyl will arrive to wreak havoc - you can only defeat it by lancing it in the mouth which is a task that requires pixel perfect precision.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Joust&lt;/em&gt; is a typical arcade game in that it’s easy to pick up but tricky to master, a trademark Williams game if ever there was one. It’s a difficult game because it was designed to take have you play for short periods of time and keep taking money from players. There are a lot of tactics to be discovered and a surprising amount of depth with bonus points being given for completing the level in various unspoken ways. A second player can join in on a different bird and it’s up to you to decide whether or not to play cooperatively or against each other, often resulting in hilarious duels or short-term falling out.&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;Joust&lt;/em&gt; world record was recently broken by John McAllister after a marathon 53 hours, 47 minutes of play - racking up a score of 107,301,150. The previous record had lasted for 26 years and John made the decision to stop playing as soon as he broke it. He had 105 spare lives at that point so I’d imagine he could have gone on as long as he was physically able. An astonishing achievement, especially when you see how difficult the game is in this &lt;a href=&quot;http://www.youtube.com/watch?v=8mKJc4JHp-o&quot;&gt;clip of wave 31&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The core gameplay concept was used by Nintendo a couple of years later for their NES game &lt;a href=&quot;http://www.mobygames.com/game/balloon-fight&quot;&gt;Balloon Fight&lt;/a&gt;, and there have been a number of unofficial versions and fan remakes of &lt;em&gt;Joust&lt;/em&gt; since. I’d love to see a modern day interpretation of the game. Whilst I doubt it would work in 3D I’m sure there are enough ideas to give the game a new lease of life.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=JBfs5FqNyq0&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=8mKJc4JHp-o&quot;&gt;Watch a clip of the world record at YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/joust&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 27 Oct 2010 11:29:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2010/10/27/joust/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2010/10/27/joust/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Speed Freaks</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_la4jqeOxgi1qbfpni.png&quot; alt=&quot;Speed Freaks&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nintendo seem reluctant to release more than one &lt;a href=&quot;http://www.mobygames.com/game-group/mario-kart-series&quot;&gt;Mario Kart&lt;/a&gt; per console, so fans of the game will often seek out a new challenge by playing one of its many clones. It’s often a futile exercise as it makes painfully clear how far ahead of the competition Nintendo are.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That said, there have been a handful of games that manage to capture enough of the ever-elusive Nintendo magic to deliver an enjoyable and challenging racing game: Rare’s &lt;a href=&quot;http://www.mobygames.com/game/diddy-king-racing&quot;&gt;Diddy King Racing&lt;/a&gt; was the first contender of note, followed closely by &lt;a href=&quot;http://www.mobygames.com/game/crash-team-racing&quot;&gt;Crash Team Racing&lt;/a&gt;. In fact, it was the later that caused &lt;em&gt;Speed Freaks&lt;/em&gt; to fly under the radar of most PlayStation gamers - it was delayed by Sony Computer Entertainment to make way for &lt;em&gt;Crash Team Racing&lt;/em&gt; at retail. I suppose it’s one thing to try to take sales away from &lt;em&gt;Mario Kart&lt;/em&gt; on a competing platform but another to cannibalise sales of your own games on your own platform. The game was given a later release in North America under the name of &lt;em&gt;Speed Punks&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The game has some really nice handling, with some subtle additions to the staple kart racer mechanics including an interesting turbo system. It has a nice enough range of power-ups and weapons that offer something new compared to &lt;em&gt;Mario Kart&lt;/em&gt; at the expense of being quite as balanced. There are shortcuts on every track, as you might expect, which are essential when trying to beat some of the more difficult levels or challenges the game has to offer. As well as the usual tournament and time trial modes the game also offers split screen multi-player and a range of bonus characters and modes that are unlocked by playing through the game. Whilst the difficulty level is a little high you have three retry attempts that can be used to restart particular races and recover from any catastrophic errors. Compared to &lt;a href=&quot;/2010/09/27/vanishing-point/&quot;&gt;Vanishing Point&lt;/a&gt; - another of my favourite racers - this really is a most welcome feature.&lt;/p&gt;

&lt;p&gt;A distinctly British sense of humour pervades the whole game, especially obvious in the naming of two bonus characters - Cosworth and Beamer. If &lt;em&gt;Mario&lt;/em&gt; had grown up in Essex he’d fit perfectly into this game, and that’s a compliment. The graphics look really great and have a fantastic cartoon feel to them, character design is interesting and unusual, and track design has more going on than the standard scenarios you seem to get in kart racers like this. As with other games of this vintage, the computer AI is prone to stretching the laws physics somewhat, most noticeable in severe rubber-banding and predictable routing. However, despite these minor issues, it remains a fun and rewarding game and one well worth seeking out.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=9HpDT0dmoyc#t=4m26&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/speed-punks&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 26 Oct 2010 10:37:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2010/10/26/speed-freaks/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2010/10/26/speed-freaks/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Orbital</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_laazl23qhh1qbfpni.png&quot; alt=&quot;Orbital&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Drifting through space without a care in the universe.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;During the final days of the Game Boy Advance a series of games were released by Nintendo in their home territory of Japan under the &lt;a href=&quot;http://en.wikipedia.org/wiki/Bit_Generations&quot;&gt;bit Generations&lt;/a&gt; label. A set of seven games featuring basic but stylish graphics and somewhat experimental gameplay.&lt;/p&gt;

&lt;p&gt;My favourite of the bunch was &lt;em&gt;Orbital&lt;/em&gt;, or sometimes &lt;em&gt;Orbient&lt;/em&gt;, the objective of which is to control a white star which can grow larger by absorbing other stars. Similarly sized stars are coloured blue, smaller stars are grey and larger stars are red. Collecting blue or grey stars forms the basis of progression in the game, though there are some subtleties to gameplay as it is possible to gain satellites by approaching smaller stars at an angle that will cause them to orbit you - orbit range is shown by a ring around the star. Red stars and asteroids must be avoided at all costs, adding a subtle but necessary level of danger to proceedings. Once your star has grown big enough a final star will begin to glow orange and capturing it in your orbit will clear the stage.&lt;/p&gt;

&lt;p&gt;The method of control is really interesting - two buttons are used to either attract or repel your star from the nearest object. This may sound limiting but it allows for an almost analog level of precision from a distinctly digital method of control. Limited lives and other non-collectible obstacles round off the game perfectly. Imagine &lt;a href=&quot;http://www.mobygames.com/game/katamari-damacy&quot;&gt;Katamari Damacy&lt;/a&gt; pared down to the essential elements and you’ll be on your way to understanding the vibe.&lt;/p&gt;

&lt;p&gt;The beauty of any game built around such a simple set of rules is in the level design, and &lt;em&gt;Orbital&lt;/em&gt; is no exception. The difficulty curve - how the levels increase in complexity - is just right, meaning you’ll never feel cheated. New methods of play will need to be discovered if you are to stand any chance of being able to manoeuvre your star with the precision demanded in some of the later levels. Playing the game is a very relaxing experience, and you may find yourself floating around losing hours in the process. It’s as much of a zone game as &lt;a href=&quot;http://www.mobygames.com/game/tempest-2000&quot;&gt;Tempest 2000&lt;/a&gt;, &lt;a href=&quot;http://www.mobygames.com/game/f-zero&quot;&gt;F-Zero&lt;/a&gt; or the &lt;a href=&quot;http://www.mobygames.com/game-group/wipeout-series&quot;&gt;Wipeout series&lt;/a&gt; but more of a thinking mans game than a twitch experience. Though there’s still opportunity for it to sink it’s claws in deep enough to have you screaming at the TV - trying to beat your previous best for any level and numerous minor objectives reward repeated play. In other words: this game has real depth.&lt;/p&gt;

&lt;p&gt;The game was later given a re-release on WiiWare under the name of &lt;em&gt;Orbient&lt;/em&gt;. Graphics and sound were given extra definition for the big screen and there were a few minor additions to the gameplay, meaning that it’s well worth playing even if you’ve played the original. Both versions of the game are a triumph, showing that beauty and simplicity in gameplay can lead to an engrossing game with a fantastic atmosphere.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=YTktCOAxxQg&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/orbient&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 26 Oct 2010 00:28:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2010/10/26/orbital/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2010/10/26/orbital/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Pushover</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_la50zpgYmo1qbfpni.png&quot; alt=&quot;Pushover&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This game was a real time sink for me during my formative years, with its simple rules hiding a fiendishly difficult set of puzzles that chewed through the hours as if they were minutes. It has to be said, however, that the Quavers crisps licence attached to the game was a very odd marketing move.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Each stage in the game consists of a number of platforms - interconnected by ladders - on which there are a series of dominoes. Each type of domino has a different pattern which dictates how it will react when toppled over. The dominoes must be arranged, one at a time, in the correct sequence so that when all dominoes topple in one chain reaction. At this point the exit will open and you can go on to the next stage. The first set of stages are a well-paced introduction to the different types of dominoes.&lt;/p&gt;

&lt;p&gt;Various problems present themselves as soon as you start playing - you can only carry one domino at a time, and there is limited space to swap dominoes around. Platforms and even the dominoes themselves can be destroyed. If a domino blocks the exit then you’ll not be able to get out. Your character, G.I. Ant, can also die if he falls too far or is crushed by a falling domino. So it’s a lot more complicated than a simple game of dominoes.&lt;/p&gt;

&lt;p&gt;Things are kept interesting by the number of different types of dominoes lending themselves to a variety of puzzles involving some real lateral thinking and planning ahead. Stages are set throughout nine different themed worlds all of which have their own unique graphical style and background music. Almost as an afterthought, a packet of Quavers is awarded to the player upon completing each world, tying things in loosely to the licence. Upon finishing an individual stage a token is awarded, which can be used as an undo function to save time that would be spent laying out the dominoes again. Completing all 100 stages in one session would be a ridiculous challenge, so the game uses a password system allowing you to easily resume from any stage.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Pushover&lt;/em&gt; is the perfect example of a one hit wonder. It was a great, original idea but it’s difficulty meant that you’d end up throwing your joystick at the wall because you’d had enough if you weren’t banging on the publisher’s door asking for more. The satisfaction gained from figuring out a puzzle that you’d been struggling with for some time was as addictive as any game.&lt;/p&gt;

&lt;p&gt;The game was well received and a sequel - &lt;em&gt;One Step Beyond&lt;/em&gt; - was released a year later which featured an entirely new game mechanic. Whilst it was a good game in it’s own right it can’t be held in as high regard as the original.&lt;/p&gt;

&lt;p&gt;Whilst you can still play the original game on handful of platforms it was released on, there’s an excellent, modern and authentic remake by Ishisoft that is more enjoyable to play these days.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=LzHPbo_ZPX0&quot;&gt;Watch the original game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=B7MlVHitcSE&quot;&gt;Watch the sequel on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/pushover&quot;&gt;Find out more about the original game at mobygames.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/one-step-beyond&quot;&gt;Find out more about the sequel at mobygames.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://ishisoft.com/archives/126&quot;&gt;Download a remake of the original game ishisoft.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 22 Oct 2010 07:04:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2010/10/22/pushover/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2010/10/22/pushover/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Tomba!</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_l9z1juGbcy1qbfpni.png&quot; alt=&quot;Tomba!&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Evil pigs, giant eggs, farting flowers, butterflies, mushrooms, a hungry monkey, a lost dwarf child, a thousand year-old wise man and a pink-haired feral boy. Yes, &lt;em&gt;Tomba!&lt;/em&gt; may not be your average game but it’s certainly an overlooked gem.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sony’s PlayStation brought gaming kicking and screaming into the third dimension. Before the introduction of such a powerful console we’d only seen small glimpses of 3D gaming. The SNES had Mode 7 which allowed for the pseudo-3D effects seen in games such as &lt;a href=&quot;http://www.mobygames.com/game/pilotwings&quot;&gt;Pilotwings&lt;/a&gt; and &lt;a href=&quot;http://www.mobygames.com/game/super-mario-kart&quot;&gt;Super Mario Kart&lt;/a&gt; whilst the Super FX chip allowed slightly more convincing 3D worlds like those in &lt;a href=&quot;http://www.mobygames.com/game/star-fox_&quot;&gt;Star Fox&lt;/a&gt; and &lt;a href=&quot;http://www.mobygames.com/game/stunt-race-fx&quot;&gt;Stunt Race FX&lt;/a&gt;. But the PlayStation took things to another dimension - allowing fully textured 3D worlds. But where did that leave traditional 2D concepts?&lt;/p&gt;

&lt;p&gt;Whoopee Camp had some ideas. They took the platform game and stretched it into something that sits somewhere between 2D and 3D - sort of 2.5D. Action takes place on a 2D plane and the characters are 2D sprites, but the level is rendered in 3D. This gives everything the benefit of depth and perspective but keeps gameplay recognisable, simple and straightforward. As well as the platforming aspect, gameplay also borrowed elements from adventure games such as Coktel Vision’s &lt;a href=&quot;http://www.mobygames.com/game/gobliiins&quot;&gt;Gobliiins&lt;/a&gt; or LucasArts’ &lt;a href=&quot;http://www.mobygames.com/game/secret-of-monkey-island&quot;&gt;The Secret of Monkey Island&lt;/a&gt; where you have to collect and use items in specific ways in order to progress. It even borrows some RPG elements in that there are multiple, overlapping events or tasks to be completed - only a fraction of which are essential for progression of the story – for which you’re rewarded with adventure points. I guess the most accurate description of &lt;em&gt;Tomba!&lt;/em&gt; would be a platform adventure game, but that would be to simple a definition.&lt;/p&gt;

&lt;p&gt;You can see from the graphics that the game has a unique visual style - full of bold, neon colours more reminiscent of the late-80s rather than the late-90s. You might think the cartoon aesthetic would cover up game meant for kids, but beneath the bright veneer you’ll find a very challenging game that will take you far longer to complete than many more modern ones. &lt;em&gt;Tomba!&lt;/em&gt; has a great sense of humour and a somewhat bizarre story but it nevertheless oozes charm and character.&lt;/p&gt;

&lt;p&gt;The game received a sequel that moved things on even further - the characters as well as the levels were fully 3D - whilst keeping the core gameplay largely the same. &lt;em&gt;Tomba!&lt;/em&gt; creator Tokuro Fujiwara - best known for creating Ghosts ‘n Goblins and producing the Mega Man series - now works at Platinum Games whose recent &lt;a href=&quot;http://www.mobygames.com/game/vanquish&quot;&gt;Vanquish&lt;/a&gt; garnered rave reviews. Perhaps they’ll revisit one of gaming’s most misunderstood icons for a third time? A new adventure of the pink-haired little oik would be perfectly suited to modern download services such as DSiWare, WiiWare, XBLA or PSN. Here’s hoping.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=Tl_rB-yTD9s&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/tomba&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 21 Oct 2010 14:02:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2010/10/21/tomba/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2010/10/21/tomba/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Sensible Soccer</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_la4nmaT4lB1qbfpni.png#pixel&quot; alt=&quot;Sensible Soccer&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The beautiful game.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When people mention football (soccer) games these days there are probably mean one of two games: &lt;a href=&quot;http://www.mobygames.com/game-group/ea-fifa-series&quot;&gt;FIFA&lt;/a&gt; and &lt;a href=&quot;http://www.mobygames.com/game-group/pro-evolution-soccerwinning-eleven-series&quot;&gt;Pro Evolution Soccer&lt;/a&gt;. These games have evolved year-on-year, from when they were originally poles apart to today where they are very much the same sort of game: photorealistic players, recognisable stadiums, team kits, tournaments and commentary from your most loved (or hated) TV sports commentator. They really feel like you’re at a football match. But I often ask myself why they feel like you’re watching a football match rather than playing a football match?&lt;/p&gt;

&lt;p&gt;Back in the days when pixel graphics ruled the world - well my world at least - the computer football game was an entirely different beast. The power of the machines at the time imposed limits on what was possible in terms of graphics and anything else superfluous to the gameplay. Football was rendered at a much more abstract level and the rest was left wide open ready to be filled in by your imagination.&lt;/p&gt;

&lt;p&gt;In this story it all started with &lt;a href=&quot;http://www.mobygames.com/game/microprose-pro-soccer&quot;&gt;Microprose Soccer&lt;/a&gt; - created for Microprose by a couple of Essex boys: Chris Yates and Jon Hare, who later went in to form Sensible Software. It literally flipped football games on their head - displaying the action from a top down viewpoint which allowed for easy control of both player and ball, and also let you influence the path of the ball after a kick using aftertouch. From humble beginnings come great things, as they say, and that was definitely true in this instance.&lt;/p&gt;

&lt;p&gt;The story goes that in the middle of developing their “god simulator” &lt;a href=&quot;http://www.mobygames.com/game/mega-lo-mania&quot;&gt;Mega-lo-mania&lt;/a&gt;, the guys at Sensible Software started dressing up the tiny characters in football kits for fun. Reflecting on their addiction to Anco’s &lt;a href=&quot;http://www.mobygames.com/game/kick-off-2&quot;&gt;Kick Off 2&lt;/a&gt; at the time, they realised that they had the basis for a new football game of their own: &lt;em&gt;Sensible Soccer&lt;/em&gt; - or &lt;em&gt;Sensi&lt;/em&gt; as it is affectionately known.&lt;/p&gt;

&lt;p&gt;What set &lt;em&gt;Sensi&lt;/em&gt; apart from its competitors was that you could see so much more of the pitch at once, allowing for an unparalleled level of forward planning. Control of players and ball was more accurate than ever and meant that it really felt like you were on the pitch playing as part of a team. Although the graphics may seem purely functional they possessed an ability to show remarkable likeness for the players they were representing, regardless of the fact they were only composed of hair colour, skin colour and shirt number it was completely obvious who each player was.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.mobygames.com/game-group/sensible-soccer-games&quot;&gt;Subsequent revisions&lt;/a&gt; of the game made small, incremental improvements including the addition of red and yellow cards and an on-screen referee, as well as improved goalkeeper behaviour and other tweaks. International teams were added along with the World Cup Tournament in a version that also made it onto most consoles at the time, but it remained the same game. A year later came &lt;a href=&quot;http://www.mobygames.com/game/sensible-world-of-soccer&quot;&gt;Sensible World of Soccer&lt;/a&gt;, which proved to be the ultimate version of the game. It added further refinements to the core gameplay and a comprehensive manager mode giving the game so much more depth. It also featured an amazing amount of player data - all of the players in all of the teams from all of the professional leagues in the world at that time were included - over 1,500 teams and 27,000 players in total. Add to that all national and international competitions for all club and national teams around the world and you have an most perfect representation of football.&lt;/p&gt;

&lt;p&gt;But you know what? All that data doesn’t really matter - all you need is a couple of joysticks, a second player and a few minutes to enjoy one of the finest videogame experiences every made. In fact, in 2007 the game was included in a list of the&lt;a href=&quot;http://www.nytimes.com/2007/03/12/arts/design/12vide.html?ex=1331352000&amp;amp;en=380fc9bb18694da5&amp;amp;ei=5124&amp;amp;partner=permalink&amp;amp;exprod=permalink&quot;&gt;ten most important video games of all time&lt;/a&gt;. The fact it plays as well today as it did all those years ago is testament to it’s quality. It remains a truly beautiful game.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=NNyU4xc-G6Y&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/sensible-soccer&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 20 Oct 2010 10:35:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2010/10/20/sensible-soccer/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2010/10/20/sensible-soccer/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Excite Truck</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_lahvrnsZK41qbfpni.jpg&quot; alt=&quot;Excite Truck&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating a sequel to a game is a tricky thing. It’s often difficult to retain the essence of the original game, meaning a lot of sequels keep things safe and don’t stray too far from the concept along the way. This usually leads to an average game, which is why it was such a shock to find that this one goes up to 11.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the most well remembered NES games is &lt;a href=&quot;http://www.mobygames.com/game/excite-bike&quot;&gt;Excite Bike&lt;/a&gt; - an arcade-style dirt bike game in which you jump over a series of hills whilst going fast and avoiding obstacles. The game received a sequel on the Nintendo 64 which took concept into the third dimension, adding a few game new modes along the way, but otherwise remaining quite faithful to the original.&lt;/p&gt;

&lt;p&gt;After that, not much was heard from the series until a surprise announcement of &lt;em&gt;Excite Truck&lt;/em&gt; as a launch title for the Nintendo Wii. It traded in bikes for trucks and multiplied pretty much everything else in the game by a huge factor. Courses are no longer set in a stadium but rather around vast landscapes based on countries from around the world that lend themselves to the standard themes for driving game environments: Mexico for deserts and canyons, Finland for snow and ice, Fiji for beaches and volcanoes, not to mention Canada, Scotland and China. The core gameplay is the same, in that you must race around a course getting big air and beating your opponents, making good use of your turbo which is prone to overheating. Also thrown into the mix is the ability to crash into your opponents, or indeed the scenery. Crashing into the scenery sees you having to pound a button repeatedly to restart your car, a great nod of the head to gamers who do this anyway during cut scenes and delays in many other games. On the other hand, crashing into opponents leads to a new mechanic - receiving stars - which can also be gained by performing mid-air spins and driving dangerously. Winning a race is not simply a matter of coming first - you also have to receive a certain number of stars, which adds a nice extra layer of subtlety to play.&lt;/p&gt;

&lt;p&gt;Just like it’s predecessors, racing is still very much an arcade experience. There’s no hint of simulation anywhere in the game and that’s no bad thing. The game starts off easy enough and then gets more and more of an adrenalin rush as it continues through various difficulty levels and challenges. There’s a great sense of speed throughout, too. The game remains finely balanced at all times and you’re never left feeling hard done by and are always hungry for one more go. Racing hard and fast and getting ridiculously big air really is one of life’s greatest gaming pleasures.&lt;/p&gt;

&lt;p&gt;The game offered local multi-player only, something that was addressed in it’s madcap sequel &lt;a href=&quot;http://www.mobygames.com/game/excite-bots&quot;&gt;Excitebots: Trick Racing&lt;/a&gt; which adds a whole range of crazy mini-games and power-ups to proceedings whilst trading in the trucks for transforming robot animal cars. Yes. Whilst not as charming as &lt;em&gt;Excite Truck&lt;/em&gt;, &lt;em&gt;Excitebots&lt;/em&gt; is every bit as good a game. It may even be better if you like to play your racing games online. Sadly, &lt;em&gt;Excite Bots&lt;/em&gt; was only ever released in the USA so you’ll have to look for it on import.&lt;/p&gt;

&lt;p&gt;For those that don’t own a Wii, &lt;a href=&quot;http://www.mobygames.com/game/smash-cars&quot;&gt;Smash Cars&lt;/a&gt; on the PlayStation 3 is a pretty decent copy of &lt;em&gt;Excite Truck&lt;/em&gt; but has you racing radio controlled cars around oversized locations. It’s not quite as good a game as either &lt;em&gt;Excite Truck&lt;/em&gt; or &lt;em&gt;Excite Bots&lt;/em&gt;, and it brings little of it’s own to the table, but it plays well enough.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=cxN0vshSuoY&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/excite-truck&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 18 Oct 2010 20:05:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2010/10/18/excite-truck/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2010/10/18/excite-truck/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Binary Land</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_l9tivxpF6i1qbfpni.png&quot; alt=&quot;Binary Land&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A tale of enduring love, spiders and spray cans. This charming little maze game is interesting for one major reason - you control both characters simultaneously.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It’s not as difficult as it sounds, though, so don’t worry. Both characters walk up and down the screen as directed, but when you attempt sideways movement the first character does as directed and the other does the opposite - making for some interesting brain work. The characters start on opposite sides the screen and you have to figure out how to navigate the maze so that the characters arrive at the goal at the same time. Judicious use of dead-ends and the maze walls can prevent movement of one or the other characters and allow you to move them one at a time, albeit only in a limited way. Things get more difficult with the addition of spider enemies that need to be avoided, and also spider’s webs that will trap either character if walked into. At this point you’ll have to get to them and then use a spray can to destroy the web and free them.&lt;/p&gt;

&lt;p&gt;As with most games of this age, the graphics are functional at best but they do have a certain charm of their own. The music is &lt;a href=&quot;http://en.wikipedia.org/wiki/Je_te_veux&quot;&gt;Eric Satie’s “Je te veux” (I want you)&lt;/a&gt; - a sentimental, slow waltz that lends itself wonderfully to the NES chip music stylings. But the game is really all about the puzzles provided by the maze layouts of which there many - the first three are always the same but after that the rest of the mazes are presented in a random order.&lt;/p&gt;

&lt;p&gt;Hudson Soft first released &lt;em&gt;Binary Land&lt;/em&gt; in 1983 for the MSX and a bunch of other Japan-only home computers and this version of the game featured a boy and a girl. The game was later released in 1985 for the NES/Famicom with the two main characters replaced by penguins, which whilst being reminiscent of &lt;a href=&quot;http://www.mobygames.com/game/pengo&quot;&gt;Pengo&lt;/a&gt; adds a lot of charm to the game. Even more so when you look at &lt;a href=&quot;http://www.famicom.biz/all/htmls/6800000003926.html&quot;&gt;the cover&lt;/a&gt;. The MSX version saw release in Europe by Kuma Computers Ltd in 1984, but the NES version never made it out of Japan.&lt;/p&gt;

&lt;p&gt;More recently a poor java mobile phone version was made and the game was released as &lt;em&gt;Hudson Best Collection Vol. 4&lt;/em&gt; on Game Boy Advance, which contains a bunch of NES games running under emulation. Whilst emulation is the most convenient way to play the original game these days, there have also been a couple of fan remakes which can be played on your desktop computer.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=NLI415emLzQ&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/binary-land&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.famicom.biz/all/htmls/6800000003926.html&quot;&gt;Take a look at the Japanese game cover&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 14 Oct 2010 18:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2010/10/14/binary-land/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2010/10/14/binary-land/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Gunpey</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_la97watyMC1qbfpni.png&quot; alt=&quot;Gunpey&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This game was dedicated to the memory of Gunpei Yokoi - genius creator of Nintendo’s Game &amp;amp; Watch and Game Boy handheld consoles. A fitting tribute that means his name will live on.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The game was released for the &lt;a href=&quot;http://en.wikipedia.org/wiki/WonderSwan&quot;&gt;WonderSwan&lt;/a&gt; an odd little machine available only in Japan and created by Bandai to compete with the Neo Geo Pocket and - of course - the Game Boy. It featured a strange layout of buttons including two d-pads at one end of the screen meaning that it could be used to play games in either landscape or portrait orientations - a feature used recently on the Nintendo DS. Just like the Game Boy, the WonderSwan received a colour upgrade during it’s lifetime but it was too little too late and it didn’t really challenge the Game Boy at all. It did, however, have a handful of great games of which &lt;em&gt;Gunpey&lt;/em&gt; is one.&lt;/p&gt;

&lt;p&gt;A puzzle game with a number of similarities to &lt;a href=&quot;/2010/10/12/tetris-attack/&quot;&gt;Tetris Attack&lt;/a&gt;. It uses a two-block cursor - but here it swaps two vertically adjacent pieces - and the player is trying to clear pieces that are moving up the screen, trying to avoid any of them reaching the top and the subsequent game over.&lt;/p&gt;

&lt;p&gt;Clearing pieces is done by moving small sections of line up and down within their own column so as to form a complete line that spans across the whole play area from left to right. Longer lines mean bigger scores, and it’s even possible to extend the line with extra pieces for a short time after the line has been made and before it disappears from play. This means you can chain together lines for even bigger scores and skilful play is rewarded with huge scores. Special block types are steadily introduced throughout play to add strategy to proceedings, and there’s a range of game modes available: Endless, Stage, Story, Free and Puzzle.&lt;/p&gt;

&lt;p&gt;There are three versions of &lt;em&gt;Gunpey&lt;/em&gt; for the WonderSwan - the first video game version, with a Wild West themed game, &lt;a href=&quot;http://www.mobygames.com/game/tarepanda-no-gunpey&quot;&gt;Tare Panda No Gunpey&lt;/a&gt; which is based on a popular Japanese cartoon, and &lt;a href=&quot;http://www.mobygames.com/game/gunpey-ex&quot;&gt;Gunpey EX&lt;/a&gt; a colour version of the game. A PlayStation version was later released which adhered to the Wild West theme of the WonderSwan version, but with more detailed graphics and multi-player. More recently Q Entertainment of &lt;a href=&quot;/2010/10/08/meteos/&quot;&gt;Meteos&lt;/a&gt; fame created two different versions of the game for Nintendo DS and PlayStation Portable.&lt;/p&gt;

&lt;p&gt;Really though, all subsequent versions haven’t added much since the first video game version of the concept, which remains a great puzzle game that will keep you coming back for more. A game every bit worthy of it’s name.&lt;/p&gt;

&lt;p&gt;For the true fans, the original version of the concept was an LCD game called Professor Henoheno (プロフェッサー へのへの) or Henoheno, created by Koto (Gunpei Yokoi’s company) in conjunction with LCD game manufacturers HIRO.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=I65jHURTfeE&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/gunpey&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 14 Oct 2010 11:29:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2010/10/14/gunpey/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2010/10/14/gunpey/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Tetris Attack</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_la832qEWKE1qbfpni.png&quot; alt=&quot;Tetris Attack&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When does a &lt;a href=&quot;http://www.mobygames.com/game/tetris&quot;&gt;Tetris&lt;/a&gt; game have nothing to do with Tetris? When you’re trying to market a fantastic but niche Japanese game to the rest of the world, of course.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Tetris Attack&lt;/em&gt; has a strange heritage, starting out life as a Japan-only release &lt;a href=&quot;http://www.mobygames.com/game/panel-de-pon&quot;&gt;Panel de Pon&lt;/a&gt;. It was successful in Japan and prompted Nintendo to wonder how well it might do with a worldwide release. This resulted in them doing a quick rebrand of the game, adding in a bunch of characters from their SNES masterpiece &lt;a href=&quot;http://www.mobygames.com/game/snes/super-mario-world-2-yoshis-island&quot;&gt;Yoshi’s Island&lt;/a&gt; in an effort to make it more appealing to gamers outside of Japan. It was a great marketing decision and the game was a success. As mentioned earlier on the core gameplay has nothing in common with &lt;a href=&quot;http://www.mobygames.com/game/tetris&quot;&gt;Tetris&lt;/a&gt;, but it does feature blocks so I guess that was a bit of artistic licence on Nintendo’s part. Lucky that they had the handheld Tetris rights at this particular time and were able to persuade Tetris Company founder Henk Rogers to let them use the name in this way. Perhaps proof that a great game concept won’t sell well if it doesn’t have a recognisable brand name attached?&lt;/p&gt;

&lt;p&gt;Blocks continually rise up from the bottom of the screen, the player controlling a two block wide cursor that swaps the pair of blocks horizontally when the action button is pressed. Making a row or column of three or more blocks of the same colour will clear them from the play field, potentially creating chains of combos as new blocks falling to take their place. If the blocks reach the top of the screen it’s game over. The game offers a variety of both single and multi-player modes. In these versus modes, combos will send large garbage blocks to your opponent, which must be eliminated by clearing a piece that is touching it, turning it into a bunch of normal blocks.&lt;/p&gt;

&lt;p&gt;One thing the game does have in common with Tetris is that it’s fiendishly addictive. The simple gameplay mechanic and depth of the rules of play mean that it sinks its teeth into you fast and hard and refuses to let go. In that respect, the game is up there as one of the best puzzle games of all time.&lt;/p&gt;

&lt;p&gt;Playing the game today is easy, as there have been so many versions released over the years. The concept received a second rebranding a few years later in the form of the &lt;a href=&quot;http://www.mobygames.com/game-group/panel-de-ponpuzzle-league-games&quot;&gt;Puzzle League&lt;/a&gt; series which has appeared on every subsequent Nintendo console. The DS version even adds touch control to the game making it even more accessible.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=EhHAQsUIAeM&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/tetris-attack&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 12 Oct 2010 11:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2010/10/12/tetris-attack/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2010/10/12/tetris-attack/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Sheep, Dog ‘n’ Wolf</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_la544c18r21qbfpni.jpg&quot; alt=&quot;Sheep, Dog &apos;n&apos; Wolf&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In a sea of badly realised licenced games French company Infogrames made a daring move to buck the trend, creating this cartoon stealth ‘em up set in the Looney Tunes world. The result is a fabulous game as imaginative as the source material it’s based on.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You play a Ralph Wolf – a Looney Tunes character the double of Wile E. Coyote from their Road Runner series of cartoons. The story goes that you’re starring in a game show hosted by Daffy Duck in which you have to steal sheep from under the nose of Sam Sheepdog. Using ACME products such as rockets, dynamite and giant elastic bands ordered from mailboxes conveniently placed around each level - as well as a variety of items that make up the scenery - you have to figure out how to get to a sheep without being seen. After that, it’s usually - but not always - an easier task to get it to the level exit. It’s a brilliantly inventive mix of stealth, puzzle, platform and adventure genres that really brings a breath of fresh air.&lt;/p&gt;

&lt;p&gt;The pace of the game encourages a thoughtful and sedate approach. With it’s electro-jazz music you’re left largely to your own devices as you survey the lay of the land, sneak around, collect items and figure out how to approach the problem of sheep stealing with the tools you have at hand.&lt;/p&gt;

&lt;p&gt;The game is slickly presented with short tutorials to introduce every new gameplay mechanic and has all the hallmarks of a Looney Tunes cartoon: a cast of well known characters all of whom have their proper voices, a luscious cell-shaded 3D realisation of the cartoon world, and the famously comical over-the-top deaths.&lt;/p&gt;

&lt;p&gt;Even today - almost 10 years after it was released – it’s rare to get a game this simple, fun and challenging. In fact, there are few games on the original PlayStation that holds up so well after so many years. Plus, it’s as cheap as chips on eBay and you can even get a graphically improved version that will run on Windows that might be more convenient to obtain and play these days.&lt;/p&gt;

&lt;p&gt;Replay value is limited once you’ve figured out the puzzles, but I still enjoy revisiting levels from time to time.&lt;/p&gt;

&lt;p&gt;I’d love to see a follow-up to this game, or alternatively another game that treads the same ground as I’m hungry for more.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=-eNwFgiGx1A&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/looney-tunes-sheep-raider&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 11 Oct 2010 19:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2010/10/11/sheep-dog-n-wolf/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2010/10/11/sheep-dog-n-wolf/</guid>
        </item>
      
    
      
        <item>
          <title>Review: RalliSport Challenge 2</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_la0zwhKO3I1qbfpni.jpg&quot; alt=&quot;RalliSport Challenge 2&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You’d be forgiven for not having heard of &lt;a href=&quot;http://www.mobygames.com/game/rallisport-challenge&quot;&gt;RalliSport Challenge&lt;/a&gt; - a rally racing game for the original Xbox, and Windows PC. But don’t go away without playing the sequel - the best rally racing game ever made.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I missed out on the Xbox during it’s ascent to online gaming console of choice, picking one up only recently when a friend of mine gave me his old one to use as a media centre. I took the opportunity to catch up on the best bits of the Xbox back catalogue and was pleased to find some absolute gems. Including a few titles released under Microsoft’s now defunct &lt;a href=&quot;http://en.wikipedia.org/wiki/XSN_Sports&quot;&gt;XSN Sports&lt;/a&gt; label: &lt;a href=&quot;http://www.mobygames.com/game/links-2004&quot;&gt;Links 2004&lt;/a&gt; and &lt;em&gt;RalliSport Challenge 2&lt;/em&gt;. I love a good driving game so I settled down for the ride.&lt;/p&gt;

&lt;p&gt;In order for a rally game to work in needs to recreate everything that makes the sport what it is. As well as fast cars and precise handling, it needs to simulate the environment, terrain, atmosphere, speed and exhilaration. That’s a lot of factors and it’s understandable why so many rally games end up so average - they undoubtedly get something wrong along the way. It could be dodgy graphics, unconvincing weather effects, unbelievable scenery or – worse – handling that feels unrealistic. Or maybe the game just doesn’t feel like you’re going very fast. &lt;em&gt;RalliSport Challenge 2&lt;/em&gt; makes no such mistakes. Forget &lt;a href=&quot;http://www.mobygames.com/game-group/colin-mcrae-rally-series&quot;&gt;Colin McRae/DiRT&lt;/a&gt;, &lt;a href=&quot;http://www.mobygames.com/game-group/sega-rally-series&quot;&gt;Sega Rally&lt;/a&gt;, &lt;a href=&quot;http://www.mobygames.com/game-group/v-rally-series&quot;&gt;V-Rally&lt;/a&gt;, &lt;a href=&quot;http://www.mobygames.com/game-group/fia-wrc-licensees&quot;&gt;WRC&lt;/a&gt; - this is the only rally game you’ll ever need.&lt;/p&gt;

&lt;p&gt;It features a great range of cars, course, locations and race types – which can be unlocked through a novel tree structure where you choose which branch to race next. This means you have the luxury of skipping a race you may be finding difficult so you can still progress. The graphics are great given the limitations of the Xbox - cars and scenery are very detailed and everything looks lifelike. Environmental effects - time of day and weather in particular – are brilliant and really add to the feeling of being there. Track design is inspired, with even the longest of courses remaining distinct over their length and not looking like they’re put together from repeated elements or building blocks. Cars show damage in real time so you’ll see windows smash and body parts fly off when you inevitably collide with trees or walls, which brings me to my only gripe about the game. In the years that have passed since the game was released we’ve been spoilt with destructible scenery and all sort of fancy effects, but in &lt;em&gt;RalliSport Challenge 2&lt;/em&gt; everything is pretty much static. You can crash into a house or a fence and everything – apart from your own car – remains untouched. Still, in a game where you’re making every effort to stay pointing the right way it’s not much of a problem - in fact it’s often a bit of a help. Vibration and sound varies according to the type of road you’re driving on, again adding to the immersion. In terms of difficulty racing can be a struggle at times but it’s always fun. There’s also some DLC available - 4 new cars, 2 new careers and some new car livery.&lt;/p&gt;

&lt;p&gt;Everything screams along at breakneck speed and the game engine doesn’t miss a beat at 60fps, a goal of visual fidelity that seems to have been forgotten about in the race for photorealism on modern machines like the Xbox 360 and PlayStation 3. You’ll want to hook your Xbox up using a component connection so that you get progressive scan. RGB SCART just isn’t up to the job of displaying detailed images so quickly - the interlaced output will mean you’ll struggle to see the finer details of the fast moving track somewhere around the half way point in the game.&lt;/p&gt;

&lt;p&gt;It’s sad to think that we may never get a third game in the series - Microsoft simply have no idea what hot property they’re sitting on. Sadly it’s in their hands as developer DICE – of &lt;a href=&quot;http://www.mobygames.com/game/mirrors-edge&quot;&gt;Mirror’s Edge&lt;/a&gt; fame – have no control over the situation. To add insult to injury the game doesn’t run on the Xbox 360 so you’re going to have to fire up your old original Xbox to play it, and Microsoft recently discontinued Xbox Live support for their original machine and so you’re no longer able to play through official means. It is possible using a third party service such as &lt;a href=&quot;http://www.teamxlink.co.uk/&quot;&gt;XLink Kai&lt;/a&gt; and the DLC is available for download if you google it.&lt;/p&gt;

&lt;p&gt;Some feelings are hard to describe in words and that’s true here - there’s never been a game that felt so right and so complete.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=oBmxhmOfVu8&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/rallisport-challenge-2&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.igcd.net/movie.php?id=19842082&quot;&gt;View images of all the cars at IGCD.net&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 11 Oct 2010 10:14:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2010/10/11/rallisport-challenge-2/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2010/10/11/rallisport-challenge-2/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Meteos</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_l9y1mehfkr1qbfpni.jpg&quot; alt=&quot;Meteos&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It’s easy to forget that when dual screen feature of the DS was announced some corners of the gaming world thought Nintendo had lost the plot. Whilst a reasonable number of launch games used the lower, touch-sensitive screen in novel ways, it was important that games continued to do so as the console matured.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Meteos was the DS’s second big-name puzzle game, after the excellent &lt;a href=&quot;http://www.mobygames.com/game/polarium&quot;&gt;Polarium&lt;/a&gt; from Mitchell Corp. The scenario is fairly simple: meteors of various colours rain down towards the bottom of the screen and pile up into columns as they land on top of one another, whilst the player moves any block up and down within it’s own column. When three or more meteors of the same colour are arranged either vertically or horizontally they ignite and rocket up towards the top screen, carrying with them any other meteors that get in the way. Skilful play chaining together multiple ignitions means you can lift lots more blocks at once and make things easier for yourself. Push as many meteors as you can of the bottom screen, and watch out for the bottom screen filling up or it will be game over.&lt;/p&gt;

&lt;p&gt;The constant barrage of blocks raining down the screen and the continuous chain of reactions blasting blocks back up the screen can result in absolute pandemonium. Coupled with a riot of sound effects, some players find the whole thing sensory overload. Indeed, the multi-tasking required by the player means that playing the game is both a mental and physical exercise that is never short of tension. It’s the initial confusion that comes with playing such a manic game that I think prevented the game reaching &lt;a href=&quot;http://www.mobygames.com/game/tetris&quot;&gt;Tetris&lt;/a&gt;-style fever.&lt;/p&gt;

&lt;p&gt;Nevertheless Meteos is accommodating to new players, featuring a multitude of “planets” each with subtle variations. For example reduced gravity will affecting the pace of the gameplay. Throw into the mix a finely balanced difficulty curve, a bunch of single and multi-player game modes and you’ve got a pretty much perfectly realised game.&lt;/p&gt;

&lt;p&gt;The game is commonly credited to Tetsuya Mizuguchi, given that it hails from the Q Entertainment stable, but it was in fact designed by Masahiro Sakurai who had previously been the creative force behind both the &lt;a href=&quot;http://www.mobygames.com/game/kirby&quot;&gt;Kirby&lt;/a&gt; and the &lt;a href=&quot;http://www.mobygames.com/game/super-smash-brothers-series&quot;&gt;Super Smash Bros.&lt;/a&gt; series of games for Nintendo whilst at HAL Laboratory. Nintendo fans are hoping he brings the midas touch to his next project - &lt;em&gt;Kid Icarus: Uprising&lt;/em&gt; for the 3DS.&lt;/p&gt;

&lt;p&gt;A pseudo-sequel to the game was released under the name &lt;a href=&quot;http://www.mobygames.com/game/meteos-disney-magic&quot;&gt;Meteos: Disney Magic&lt;/a&gt; which introduced branded graphics, the ability to move blocks sideways and the a change in screen orientation allowing for a taller play area. All changes are considered to have been for the worse, so if you’re looking to buy the game go for the original version.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=-NRJzhZL_i8&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/meteos&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 08 Oct 2010 08:02:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2010/10/08/meteos/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2010/10/08/meteos/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Flicky</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_lqg56oZ49r1qbfpni.png&quot; alt=&quot;Flicky&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flicky is one of those games that’s been released so many times on so many compilations that you probably already own it without even realising. It’s also a typical 1980s arcade game—simple to pick up, difficult to master, and a lot of fun along the way.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’m a bit too young to have encountered &lt;a href=&quot;http://www.mobygames.com/game/flicky&quot;&gt;Flicky&lt;/a&gt; in the arcades. I actually stumbled across the game by accident—it came in a double game cartridge alongside &lt;a href=&quot;http://www.mobygames.com/game/gunstar-heroes&quot;&gt;Gunstar Heroes&lt;/a&gt; on the Mega Drive. Quite why those two games were put together I have no idea. Designed by Yoji Ishii—later part of Sonic Team—Flicky can be considered spiritual precursor to the Sonic the Hedgehog series.&lt;/p&gt;

&lt;p&gt;The aim of the game is, as a blue sparrow named Flicky, to collect a bunch of lost chicks from around each stage and lead them to the exit. It may sound easy but there are a lot of things that can get in your way. Enemies take the form of various animals that emerge from air vents—one touch and you’ll lose a life, as well as your trail of chicks. Chicks will also stop following you if an enemy crosses their path, at which point you’ll need to pick them up again. You’re not totally defenceless though, as you can collect plant pots and things from around each stage. These things are autmatically thrown as you jump, so judicious timing of jumps can be key. The stages in the game are single screens that scroll horizontally to keep Flicky centred. Each stage is loosely decorated to look like an apartment with windows, shelves, pot plants, home-wares, and of course the exit door.&lt;/p&gt;

&lt;p&gt;There are more nice touches—some chicks are blind, and if set loose from your trail will wander around aimlessly making them much more difficult to pick up. You can spot those chicks easily as they wear Stevie Wonder style sunglasses. Every few stages a bonus round appears, in which chicks are flung into the air leaving you to catch them in a net. Flicky’s inertia makes collecting all of them pretty tricky, but doing so will gain a lot more points. More points not only means a higher score, but also the chance of extra lives. Doing really well will result in a series of pixel girls appearing in the odd looking window on the level as your end of level bonus is added to your score. Quite a task, if you’re looking for a challenge.&lt;/p&gt;

&lt;p&gt;What I love so much about Flicky is that it’s such a pure, zen gaming experience. It’s possible to plan a route around the stage in away that you can pick up all chicks in one go, avoiding/killing any enemies en route, before depositing them at the exit. All in less than 20 seconds in order to get maximum bonus points. The satisfaction from such a perfect run is immense. However, messing up will result in the stage becoming very difficult indeed, as you attempt to pick up the chicks who are, of course, now moving around.&lt;/p&gt;

&lt;p&gt;I love the way the game does so much with so little. A true classic.&lt;/p&gt;

&lt;p&gt;Over the years Flicky has been re-released as part of various Sega Mega Drive/Genesis compilations and is available, in one form or another, for pretty much every recent platform, including GameCube, PC, PSP, PS2, PS3, Xbox, Xbox 360 and even some mobile phones. And that’s just the official emulated versions. MAME would be the best place to play the original arcade version. So there’s no shortage of places to get your Flicky on.&lt;/p&gt;

&lt;p&gt;Since writing this review I’ve been lucky enough to become owner of an original Flicky arcade cabinet, which is now the star of its own blog: &lt;a href=&quot;https://www.flicky1984.com&quot;&gt;www.flicky1984.com&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://youtu.be/3C0FGxzWm0E&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/arcade/flicky&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 07 Oct 2010 08:35:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2010/10/07/flicky/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2010/10/07/flicky/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Vijay Singh 3D</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_l9tpw5Xh1V1qbfpni.jpg&quot; alt=&quot;Vijay Singh 3D&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It seems a long time ago when mobile phones functioned more as a phone than anything else. You could download games for them, of course, but the whole experience was hard work and underwhelming at best. In fact, you’d be forgiven for wondering why you’d even bother. And then along came Vijay Singh.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’ve always loved golf video games, even if I have no real affinity with the sport. First there was &lt;a href=&quot;http://www.mobygames.com/game/leader-board&quot;&gt;Leader Board&lt;/a&gt; which gave us the first real taste of golf from the player’s viewpoint, albeit rendered to screen at a glacial pace. Still, it laid down the triple-click power and snap control mechanic that remained the default golf game control scheme for years to come.&lt;/p&gt;

&lt;p&gt;That was more than enough for me for a while, until I read about a new golf on its way. One that offered a fully 3D world and accurate simulation of the game – multiple courses, camera angles, tournaments and your own player profile. It was &lt;a href=&quot;http://www.mobygames.com/game/microprose-golf&quot;&gt;Microprose Golf&lt;/a&gt; and it offered something truly new. It was the stuff dreams are made of, or at least it’s the stuff that keeps a family of gamers glued to a 14” portable TV for months on end. It was real golf, on your computer. More about that in a forthcoming review.&lt;/p&gt;

&lt;p&gt;In the following years, many great golf games graced my TV screen: &lt;a href=&quot;http://www.mobygames.com/game/mario-golf&quot;&gt;Mario Golf&lt;/a&gt;, &lt;a href=&quot;http://www.mobygames.com/game/everybodys-golf&quot;&gt;Everybody’s Golf&lt;/a&gt;, &lt;a href=&quot;http://www.mobygames.com/game-group/links-series&quot;&gt;Links&lt;/a&gt;, &lt;a href=&quot;http://www.mobygames.com/game-group/tiger-woods-pga-series&quot;&gt;Tiger Woods&lt;/a&gt;. As arcade representations of the game they were all good games that were a lot of fun to play, but none of them captured the essence of the sport quite as much as &lt;a href=&quot;http://www.mobygames.com/game/microprose-golf&quot;&gt;Microprose Golf&lt;/a&gt;. But then along came Vijay Singh.&lt;/p&gt;

&lt;p&gt;It came pre-installed on a Sony Ericsson phone I’d upgraded to and was, in short, all that is or ever has been great about golf games distilled into one beautiful 375kb java archive. Obviously a labour of love for it’s creators it played like a dream. It was a modern &lt;a href=&quot;http://www.mobygames.com/game/microprose-golf&quot;&gt;Microprose Golf&lt;/a&gt; in the palm of your hand. An astonishing achievement for a mobile phone of the time.&lt;/p&gt;

&lt;p&gt;The game added some great new touches of it’s own: putting featured the now standard grid that maps the contours of the green, with the addition of small particles that flow along the grid lines showing the the direction and severity of any slope. Also (and this is the bit that really made me smile) at certain points - more often than not when you’ve landed yourself in a bit of a pickle - the game goes into TV mode. This put you in certain money making scenarios such as “our sponsors will give you $25,000 if you chip the ball in from this bunker” which, coupled with a vibration heart beat effect, really kept you on the edge of your seat. The vibration effect was also used sometimes when putting to make you that little bit more anxious as to whether or not you’ve got your angles right. I played it to completion and then hoped for downloadable courses which had been hinted at, but they sadly never materialised. And that was that…&lt;/p&gt;

&lt;p&gt;Until, in September 2010, Gameloft released &lt;a href=&quot;http://itunes.com/apps/realgolf2011&quot;&gt;Real Golf 2011&lt;/a&gt; for iPhone/iPod touch and iPad. It’s a next generation incarnation of Vijay Singh in all but name and it plays like a dream. Of course, Vijay is featured in the game’s roster of real golfers. It just wouldn’t be the same without him.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=Ailq7IapCK4&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.gameloft.com/mobile-games/pro-golf-2007-3d-feat-vijay-singh/&quot;&gt;Find out more about the old game at gameloft.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.gameloft.com/iphone-games/real-golf-2011/&quot;&gt;Find out more about the new game at gameloft.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://itunes.com/apps/realgolf2011&quot;&gt;Buy Real Golf 2011 on the App Store&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 06 Oct 2010 08:52:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2010/10/06/vijay-singh-3d/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2010/10/06/vijay-singh-3d/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Kuru Kuru Kururin</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/d1f917b282b1c4379ac367d431ee190e/tumblr_inline_pk2sfuvSBT1qbfpni_540.png&quot; alt=&quot;Kuru Kuru Kururin&quot; data-orig-height=&quot;320&quot; data-orig-width=&quot;480&quot; data-orig-src=&quot;https://64.media.tumblr.com/tumblr_l9rsuyTLXx1qbfpni.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kuru Kuru Kururin sums up what I think is so great about the sort of games Nintendo publish. It’s an unorthodox action/puzzle/maze game made by a third party best known for their scrolling shoot ’em ups. No other company would have the balls to release a game like this, never mind as part of a console launch line-up.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The launch of a console is always an interesting event, the launch line-up of games can be make or break for the system. So instead of rushing out and buying the latest iteration of long running series (Mario, Tony Hawk’s, F-Zero, Castlevania) I was intrigued to find a quintessential Japanese game in the European GBA launch lineup. It had my name written all over it.&lt;/p&gt;

&lt;p&gt;In Kuru Kuru Kururin, you’re a rabbit, piloting a helicopter rotor blade, in search of a mother’s lost children. What this means in terms of gameplay is that you have to guide a constantly spinning stick around a series of mazes, avoiding the walls, to get to the exit. The concept becomes fun as you have to judge the position of your spinning stick when manoeuvring around corners, through gaps and past moving obstacles and enemies. Getting to the goal is a nail biting experience, and there’s nothing quite like the feeling of getting a perfect run through the level. Well, except perhaps getting a perfect run whilst breaking your personal best for that level.&lt;/p&gt;

&lt;p&gt;What’s brilliant about the game is that you can play it in so many different ways:&lt;/p&gt;

&lt;p&gt;Want it easy, play with the short stick.
Want it regular, play with the long stick.
Want it hard, go for all the fastest times.
Want it extra hard, go for all perfect (no collisions).&lt;/p&gt;

&lt;p&gt;Whilst Nintendo were brave enough to release the game in Europe, it must not have sold very well as the two sequels (&lt;a href=&quot;http://www.mobygames.com/game/kururin-paradise&quot;&gt;Kururin Paradise&lt;/a&gt; for GBA and &lt;a href=&quot;http://www.mobygames.com/game/kururin-squash&quot;&gt;Kururin Squash!&lt;/a&gt; for GameCube) were only released in Japan. I was such a fan of the first game that I bought the other two regardless.&lt;/p&gt;

&lt;p&gt;I even took the two GBA versions of the game on holiday one year to Corfu, just to give me something to do whilst sunbathing. My girlfriend might argue against me when I say was possibly one of the greatest gaming decisions I’ve ever made. I sat for a few hours every day on the beach for the whole week we were away and managed to ace both games - I think I’m a bit gaming OCD like that. Even so, completing all levels perfectly and breaking all records remains one of my greatest gaming achievements to date. Though I think I drew the line at the secret, super-difficult levels that were unlocked for doing so. Perhaps I can do them on my next holiday?&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=78eHxHYUmJs&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/gba/kuru-kuru-kururin&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://users.telenet.be/twin-dreams/Portable/GameBoy_Advance/Kururin_Paradise.html&quot;&gt;Read about Kururin Paradise&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://users.telenet.be/twin-dreams/GameCube/Kururin_Squash.html&quot;&gt;Read about Kururin Squash!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 05 Oct 2010 09:41:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2010/10/05/kuru-kuru-kururin/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2010/10/05/kuru-kuru-kururin/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Pang</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_l9rzapUgmJ1qbfpni.png&quot; alt=&quot;Pang&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I like to think that this game taught me as much about world geography as school did, but that’s probably a slight exaggeration. Still, it remains to this day one of my all time favourite games.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You’re a little dude in a white safari suit on an around-the-world quest to destroy bouncing balloons at various well known locations. A second player can join in wearing a pink safari suit. Starting at the magnificent Mt Fuji in Japan and ending at Easter Island in the Pacific Ocean, you must fire your grappling gun up into the air to make contact with a balloon, which will then split into two smaller balloons. Hitting the smallest sized balloons will make them disappear. Hitting the same size balloons one after the other will multiple how many points they’re worth.&lt;/p&gt;

&lt;p&gt;There are a number of power-ups to help and hinder: different weapons, freeze time, slow time, invincibility and dynamite. There are also hidden bonus points in the form of fruit and animals. The levels are expertly designed using different types of platforms, ladders and so on. You might think that not much can be done with some bouncing balls, some platforms and the odd ladder but you’d be wrong. It’s the sign of a great game where a simple gameplay mechanic can be used in so many different ways.&lt;/p&gt;

&lt;p&gt;Some people say that the game is far too hard, but I think it has a perfect balance of risk/reward gameplay and I’m always left with the desire to have just one more go. The sign of a great arcade game.&lt;/p&gt;

&lt;p&gt;As a final note, &lt;a href=&quot;http://www.risingstargames.com/games/pang-magical-michael-nds.html&quot;&gt;Pang: Magical Michael&lt;/a&gt; was recently released for Nintendo DS – hoorah! I think it’s the best version of the game to date and definitely worth the wait.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=OeYIeaHjewU&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/pang&quot;&gt;Find out more about &lt;em&gt;Pang&lt;/em&gt; at mobygames.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mobygames.com/game/pang-magical-michael&quot;&gt;Find out more about &lt;em&gt;Pang DS&lt;/em&gt; at mobygames.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 04 Oct 2010 12:28:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2010/10/04/pang/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2010/10/04/pang/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Guru Logi Champ</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_l9rnm9prQN1qbfpni.png&quot; alt=&quot;Guru Logi Champ&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I’ve been playing this on-and-off for years and still haven’t finished all the puzzles. It’s one of those games that I love so much that I sort of don’t want to finish it. Possibly the greatest puzzler of all time – disregarding &lt;a href=&quot;http://www.mobygames.com/game/tetris&quot;&gt;Tetris&lt;/a&gt;, of course.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Each stage sees you having to complete the image by placing and removing blocks on the board. The puzzles are set up so that there is no simple solution; a position may be blocked by other immovable areas, so you have to improvise a solution by constantly constructing and deconstructing scaffolding in order to get a piece into the correct position. As well as controls to add or remove blocks from the board, you can also rotate the board to enable you to approach the problem from any side.&lt;/p&gt;

&lt;p&gt;As well as having bags of gameplay the game also features some completely bonkers characters, over-the-top stage clear screens and the craziest of cutscenes. It’s a shame to say it but these are the sorts of things you only seem to get in Japanese games, as the rest of the world seems too scared to make a game with a sense of humour.&lt;/p&gt;

&lt;p&gt;Game developer Compile went bust a short time after releasing the game, though some of their staff went on to work at Eighting, working on &lt;a href=&quot;/2010/10/05/kuru-kuru-kururin/&quot;&gt;Kuru Kuru Kururin&lt;/a&gt; amongst other games. A version was made for Japanese mobile phones, and there were unofficial versions made for MSX, PC, and PopCap even out out a version under the name &lt;a href=&quot;http://www.mobygames.com/game/pixelus-deluxe&quot;&gt;Pixelus&lt;/a&gt; but that was discontinued – I hope for reasons of IP infringement.&lt;/p&gt;

&lt;p&gt;The game is quite expensive to buy these days if you can even find it outside of Japan. But worry not because as of 2nd December 2009, thanks to Nintendo’s DSiWare download service, Japanese DSi owners can play a modern reworking of the game under the name of &lt;a href=&quot;http://www.nintendo.co.jp/ds/dsiware/ktyj/index.html&quot;&gt;Spinning Logic&lt;/a&gt; (ぐるぐるロジック gurugururojikku) whilst in the USA as of October 18th 2010 it’s available as Snapdots.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=dAbt1L3n1ow&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/guru-logi-champ&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 01 Oct 2010 12:02:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2010/10/01/guru-logi-champ/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2010/10/01/guru-logi-champ/</guid>
        </item>
      
    
      
        <item>
          <title>Review: Vanishing Point</title>
          <description>&lt;p&gt;&lt;img src=&quot;https://64.media.tumblr.com/tumblr_l9fhhoKbTj1qbfpni.jpg&quot; alt=&quot;Vanishing Point&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I’ve recently come back to this game in an attempt to complete it 100%, picking up my 10 year old save game. It’s a great game, though the sensitivity of the controls can be unforgiving at times. But it’s definitely worth persevering with. Think of it like a modern day &lt;a href=&quot;http://www.mobygames.com/game/stunt-car-racer&quot;&gt;Stunt Car Racer&lt;/a&gt; and you’ll be fine – laying off the accelerator is just as important as keeping the pedal to the metal.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Straddling the narrow line between flat-out arcade racer and flat-tyre simulation, Vanishing Point offered a wealth of cars, locations and driving modes that still stand up today. Time Trial, Single Races and Tournaments as well as a novel Stunt Mode in which you had to throw the cars around various non-race challenges with pinpoint precision. The recent &lt;a href=&quot;http://www.mobygames.com/game/trials-hd&quot;&gt;Trials HD&lt;/a&gt; on the 360 brings back a lot of memories of Stunt Mode for me, except Vanishing Point had more cones, balloons and chequered flags.&lt;/p&gt;

&lt;p&gt;Multi-player modes were Head-to-Head split-screen for two, and Knock-out, League and Winner-Stays-On for up to eight player sessions. The game also took advantage of the Dreamcast’s online function and allowed you to send Challenge Times back and forth with your mates.&lt;/p&gt;

&lt;p&gt;Sitting somewhere between &lt;a href=&quot;http://www.mobygames.com/game/gran-turismo&quot;&gt;Gran Turismo&lt;/a&gt; and &lt;a href=&quot;http://www.mobygames.com/game/ridge-racer&quot;&gt;Ridge Racer&lt;/a&gt; the range of cars available was broad but also quite unique. As well as fast cars like the Shelby Cobra and Dodgy Viper, the game also featured alternative choices like the world famous Mini, VW camper van and even some American muscle cars. You had to start with just two default cars and unlock the rest through your own driving skill. The game wasn’t afraid to do things its own way.&lt;/p&gt;

&lt;p&gt;All of this was dressed up in high resolution 60fps graphics that made it’s contemporaries look positively old school. It’s a crying shame Clockwork Games didn’t survive long enough to make a sequel. Perhaps it exists in the same alternate dimension where the Dreamcast is still selling millions? Yes, I’d like to go there.&lt;/p&gt;

&lt;p&gt;The thorn in the game’s side was it’s overly sensitive default controls, which caused many gamers to not even give the game a chance. But those that did would find a truly complete and supremely rewarding driving game.&lt;/p&gt;

&lt;p&gt;Update: I finally completed the game in May 2015. Woop!&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/results?search_query=vanishing+point+dreamcast&amp;amp;sm=3&quot;&gt;Watch the game on YouTube.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mobygames.com/game/dreamcast/vanishing-point&quot;&gt;Find out more at mobygames.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.igcd.net/game.php?id=268739&quot;&gt;View images of all the cars at IGCD.net&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 27 Sep 2010 22:57:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2010/09/27/vanishing-point/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2010/09/27/vanishing-point/</guid>
        </item>
      
    
      
        <item>
          <title>Hacking the Becker Cascade navigation CF card</title>
          <description>&lt;p&gt;I just had my tonsils removed and whilst recovering at home I decided to try to figure out how I could use larger CF cards in my &lt;a href=&quot;https://ifdesign.com/en/winner-ranking/project/becker-traffic-pro-7949/2069&quot;&gt;Becker Traffic Pro 7949&lt;/a&gt; car audio and navigation system, a close relative to the Becker Cascade.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/becker-7949.png&quot; alt=&quot;PNG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The unit came with maps on a 2GB card which is barely big enough for the maps, leaving not much room for MP3 files. Later map distributions increased the size of the card to 4GB as the map quality increased, but still not much room remaining for music.&lt;/p&gt;

&lt;h2 id=&quot;lets-go-bigger&quot;&gt;Let’s go bigger&lt;/h2&gt;

&lt;p&gt;I bought a new CF card of the same type (SanDisk), opting for a SanDisk Ultra 8GB, and copied the files and volume name over. It didn’t work.&lt;/p&gt;

&lt;p&gt;Next, I cloned the smaller card onto the larger card and that worked! Then I expanded the size of the partition and it stopped working.&lt;/p&gt;

&lt;p&gt;What’s going on?&lt;/p&gt;

&lt;h2 id=&quot;partition-magic&quot;&gt;Partition Magic&lt;/h2&gt;

&lt;p&gt;At the time I had a ThinkPad laptop with a built in CF reader. This allowed me to look at the card contents at a device/block level rather than the filesystem level. I noticed that there was the usual space after the main partition, and low and behold what did I see at the start of that “unused” space? Some magic text!&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;HARMANBECKER BECKER V4
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I even figured out the magic text for Ferrari branded units with the assistance of a helpful owner.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;HARMANBECKER FERRARI V4
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The version number would be increased in step with any updates to the system software.&lt;/p&gt;

&lt;p&gt;By partitioning a SanDisk card and giving it the same file contents, volume name, and this magic text made the upgrade work. For a while I sold these modified cards on eBay for a nice little markup and it kept me in video games for a while. Good times!&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 05 Sep 2009 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2009/09/05/hacking-the-becker-cascade-navigation-cf-card/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2009/09/05/hacking-the-becker-cascade-navigation-cf-card/</guid>
        </item>
      
    
      
        <item>
          <title>Services for Mac OS X</title>
          <description>&lt;p&gt;I created some Services for Mac OS X to do useful things on selected text.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Calculate &amp;amp; Append&lt;/li&gt;
  &lt;li&gt;Calculate &amp;amp; Replace&lt;/li&gt;
  &lt;li&gt;Calculate &amp;amp; Speak&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Edit, January 2026: over the following years I would create many more, most of which are in daily use.&lt;/p&gt;

&lt;hr /&gt;

&lt;blockquote&gt;
  &lt;p&gt;“The Services menu in Mac OS X (from 10.6 onwards) lets you use features of one application while working in another. The Services menu is contextual, so it shows just the services appropriate for the application you’re using or content you’re viewing rather than all available services. You can access services with a right click of your mouse or Control-click of your trackpad. You can configure the menu to show only the services you want, and you can even create your own services using Automator.” —Apple&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;screenshot&quot;&gt;Screenshot&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://www.gingerbeardman.com/services/calculate-services.png&quot; alt=&quot;Remote&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.gingerbeardman.com/services/&quot;&gt;www.gingerbeardman.com/services/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 28 Aug 2009 12:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2009/08/28/services-for-mac-os-x/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2009/08/28/services-for-mac-os-x/</guid>
        </item>
      
    
      
        <item>
          <title>PNGenie image optimiser</title>
          <description>&lt;p&gt;PNGenie is lossless PNG optimiser for Mac OS X.&lt;/p&gt;

&lt;p&gt;A PNG file contains image related data. This data can be stored in a multitude of different ways and the file size will vary for each storage method—even with the same raw image data. Image files often have an attached resource fork that also artificially increases the size of the file.&lt;/p&gt;

&lt;p&gt;PNGenie optimises any given PNG file—trying out different methods of compression—with a goal of achieving the smallest file size. Smaller files are good for a number of number practical reasons as well as, obviously, saving disk space. Let’s say you want to reduce the size of data files belonging to an iPhone application, or you want to speed up loading of a website that uses PNG images, for example. Resource forks, gamma values and software-specific tags are automatically stripped, too.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.gingerbeardman.com/pngenie/processing.png&quot; alt=&quot;Remote&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.gingerbeardman.com/pngenie/&quot;&gt;www.gingerbeardman.com/pngenie/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 03 Jul 2009 12:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2009/07/03/pngenie-image-optimiser/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2009/07/03/pngenie-image-optimiser/</guid>
        </item>
      
    
      
        <item>
          <title>FAQ: 1500DS Spirits Vol. 5: Hanafuda</title>
          <description>&lt;p&gt;I translated the Mission Mode screens:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.flickr.com/photos/emsef/albums/72157614337766883&quot;&gt;www.flickr.com/photos/emsef/albums/72157614337766883&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2020-06-29: I wrote a video game FAQ and uploaded it to GameFAQs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/ds/940888-1500ds-spirits-vol-5-hanafuda/faqs&quot;&gt;www.gamefaqs.com/ds/940888-1500ds-spirits-vol-5-hanafuda/faqs&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 25 Feb 2009 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2009/02/25/faq-1500ds-spirits-vol-5-hanafuda/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2009/02/25/faq-1500ds-spirits-vol-5-hanafuda/</guid>
        </item>
      
    
      
        <item>
          <title>Radio Paradise on Chumby</title>
          <description>&lt;p&gt;I created the Official Radio Paradise widget for Chumby, the internet connected hacky sack! You can listen along, see the most recently played songs, and the current playing song with album artwork.&lt;/p&gt;

&lt;p&gt;Fun fact: this was my one and only contract involving Flash Lite.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;a-really-low-quality-screenshot-of-the-chumby-web-management-interface&quot;&gt;A Really Low Quality Screenshot of the Chumby Web Management Interface&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/radio-paradise-chumby.webp&quot; alt=&quot;WEBP&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.theregister.com/Print/2009/12/12/review_gadget_chumby/&quot;&gt;www.theregister.com/Print/2009/12/12/review_gadget_chumby/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 01 Jul 2008 12:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2008/07/01/radio-paradise-on-chumby/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2008/07/01/radio-paradise-on-chumby/</guid>
        </item>
      
    
      
        <item>
          <title>WWDC 2008 Keynote on Nintendo Wii</title>
          <description>&lt;p&gt;I watched updates from the 2008 WWDC Keynote through my Nintendo Wii!&lt;/p&gt;

&lt;p&gt;And why not?&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/wwdc-on-wii.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 09 Jun 2008 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2008/06/09/wwdc-keynote-on-nintendo-wii/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2008/06/09/wwdc-keynote-on-nintendo-wii/</guid>
        </item>
      
    
      
        <item>
          <title>(iPhoto) Exif Cleaner</title>
          <description>&lt;p&gt;Digital cameras attach information to each photo you take. This information - called EXIF data - contains the time-stamp, aperture and shutter time amongst other things.&lt;/p&gt;

&lt;p&gt;However some brands of cameras also attach a lot of extraneous data. This is inconvenient for a number of reasons, but most of all the fact that iPhoto caches all this data in it’s Library file resulting in slower operation after each new import of photos. Affected camera brands include: Casio, Konica Minolta, Kyocera, Nikon and Pentax - amongst others.&lt;/p&gt;

&lt;h2 id=&quot;purpose&quot;&gt;Purpose&lt;/h2&gt;

&lt;p&gt;This application will seamlessly clean your photos of extraneous exif data prior to importing into iPhoto. This utility does not delete all exif data, just the extraneous MakerNote section and any blank sections. All remaining, standard exif data is left intact.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.gingerbeardman.com/exifcleaner/screenshot.png&quot; alt=&quot;Remote&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;download&quot;&gt;Download&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.gingerbeardman.com/exifcleaner/&quot;&gt;www.gingerbeardman.com/exifcleaner/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://web.archive.org/web/20061029083354/http://www.versiontracker.com/dyn/moreinfo/macosx/28734&quot;&gt;Version Tracker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sat, 31 Dec 2005 12:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2005/12/31/exif-cleaner/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2005/12/31/exif-cleaner/</guid>
        </item>
      
    
      
        <item>
          <title>Upcoming badge</title>
          <description>&lt;p&gt;Upcoming Badge is a widget for Mac OS X Dashboard.&lt;/p&gt;

&lt;p&gt;Use it to view your Upcoming.org events watch list using Dashboard.&lt;/p&gt;

&lt;p&gt;Simply enter your username on the flip side of the widget.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.gingerbeardman.com/upcoming/upcoming.png&quot; alt=&quot;Remote&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.gingerbeardman.com/upcoming/&quot;&gt;www.gingerbeardman.com/upcoming/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 22 Nov 2005 12:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2005/11/22/upcoming-badge/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2005/11/22/upcoming-badge/</guid>
        </item>
      
    
      
        <item>
          <title>Katamari Damacy iPod Color</title>
          <description>&lt;p&gt;I hacked my last iPod Color using &lt;a href=&quot;http://osx.iusethis.com/app/alterpod&quot;&gt;AlterPod&lt;/a&gt; so that I get the Prince of All Cosmos instead of the standard no entry sign. The iPod was later stolen, returning the little Prince to live amongst the stars!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/katamari-damacy-ipod-color.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 08 Aug 2005 11:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2005/08/08/katamari-damacy-ipod-color/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2005/08/08/katamari-damacy-ipod-color/</guid>
        </item>
      
    
      
        <item>
          <title>Ceefax Viewer</title>
          <description>&lt;p&gt;Ceefax Viewer is a widget for Mac OS X Dashboard.&lt;/p&gt;

&lt;p&gt;Ceefax (phonetic for “See Facts”) is the BBC’s teletext information service. Teletext is an information retrieval service provided by television broadcast companies. Teletext pages can be viewed on television sets with suitable decoders. They offer a range of text-based information, usually including national, international and sporting news, weather and TV schedules. Subtitle (or closed caption) information is also transmitted in the teletext signal.&lt;/p&gt;

&lt;p&gt;This widget will let you view Ceefax at any time using Dashboard. You do not need a TV but you will need Mac OS 10.4.3 or better and an internet connection.&lt;/p&gt;

&lt;p&gt;Click on the page numbers to navigate around the service. Use keyboard shortcuts for additional quick navigation.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.gingerbeardman.com/ceefaxviewer/ceefaxviewer.png&quot; alt=&quot;Remote&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.gingerbeardman.com/ceefaxviewer/&quot;&gt;www.gingerbeardman.com/ceefaxviewer/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 22 May 2005 12:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2005/05/22/ceefax-viewer/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2005/05/22/ceefax-viewer/</guid>
        </item>
      
    
      
        <item>
          <title>Wire Hang Redux</title>
          <description>&lt;p&gt;I made a new game! It’s a from-scratch remake of an original Java game, Wire Hang, by &lt;a href=&quot;https://www.mobygames.com/person/510170/masaki-kobayashi/&quot;&gt;Masaki Kobayashi&lt;/a&gt; (D2AC) who went on to become part of the Gran Turismo team.&lt;/p&gt;

&lt;p&gt;I had a pretty underpowered laptop at the time, and writing my own version of the game was the only way I was able to play it comfortably.&lt;/p&gt;

&lt;p&gt;My version of the game, Wire Hang Redux—made with Kobayshi-san’s blessing—went onto to receive over one million downloads from early download sites like &lt;a href=&quot;https://en.wikipedia.org/wiki/Tucows&quot;&gt;Tucows&lt;/a&gt;, Version Tracker, Download.com, Mac Update, &lt;a href=&quot;https://en.wikipedia.org/wiki/Home_of_the_Underdogs&quot;&gt;Home of the Underdogs&lt;/a&gt;, Game Hippo, &lt;a href=&quot;http://osx.hyperjeff.net/Apps/apps?f=wire%20hang%20redux&quot;&gt;Hyper Jeff&lt;/a&gt;, &lt;a href=&quot;https://web.archive.org/web/20040710054651/http://www.forest.impress.co.jp/article/2004/07/06/wirehangredux.html&quot;&gt;Windows Forest&lt;/a&gt; (Japan), and even a little website called &lt;a href=&quot;https://web.archive.org/web/20050302140236/http://www.apple.com/downloads/macosx/games/action_adventure/wirehangredux.html&quot;&gt;Apple.com&lt;/a&gt;—back when it had a download section! It was featured in computer magazines all around the world.&lt;/p&gt;

&lt;p&gt;Archived web page: &lt;a href=&quot;https://www.gingerbeardman.com/archive/wirehang/&quot;&gt;gingerbeardman.com/archive/wirehang/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Download: &lt;a href=&quot;https://gingerbeardman.itch.io/wire-hang-redux&quot;&gt;gingerbeardman.itch.io/wire-hang-redux&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/wirehangredux_title.png&quot; alt=&quot;IMG&quot; /&gt;
&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/wirehangredux_game.png&quot; alt=&quot;IMG&quot; /&gt;
&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/wirehangredux_score.png&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Sun, 20 Jun 2004 00:34:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2004/06/20/wire-hang-redux/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2004/06/20/wire-hang-redux/</guid>
        </item>
      
    
      
        <item>
          <title>JUS4QIX: the story of a classic arcade video game</title>
          <description>&lt;p&gt;I’m a big fan of the 1981 arcade game &lt;a href=&quot;https://en.wikipedia.org/wiki/Qix&quot;&gt;QIX&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://pyra-handheld.com/boards/threads/qix.2885/post-26563&quot;&gt;Back in 2003&lt;/a&gt; tracked down the author of the game, Randy Pfeiffer, who had moved on from the video game industry to run his own business creating CAD software for model railway enthusiasts. I asked him some questions about the game and he was gracious enough to answer, albeit a little puzzled why anybody would want to know!&lt;/p&gt;

&lt;p&gt;I’ll outline a few facts here:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;The game is credited to the programmer, Randy, and his wife, Sandy&lt;/li&gt;
  &lt;li&gt;Randy created the bad-guy, or QIX movement as a simple programming demo&lt;/li&gt;
  &lt;li&gt;Sandy suggested making a game out of it, “sort of like video-game etch-a-sketch”&lt;/li&gt;
  &lt;li&gt;Their eureka moment came in the jacuzzi with a bottle of vintage champagne&lt;/li&gt;
  &lt;li&gt;Being a pretty successful silicon valley programmer, he did so for Taito America&lt;/li&gt;
  &lt;li&gt;QIX was one of only a few games made by the US division of Taito&lt;/li&gt;
  &lt;li&gt;The game was named after his car licence/number plate at the time: “JUS4QIX”, which was pronounced “Just For Kicks”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In all the time since the game was made in 1981, he said to me that I was the first person outside of Taito to ever contact him about the game. The first person in over 20 years!? This was a shock to me, but perhaps I’m living in a dream world thinking such a classic video game should get more attention? Sometimes the game is more famous than the creator, Tetris being the best example of that.&lt;/p&gt;

&lt;p&gt;After finding out this information I added it in various places, such as in the MAME notes for the game. This interview is the original source of “JUS4QIX” and the other facts about QIX.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/jus4qix.jpg&quot; alt=&quot;JUS4QIX&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 22 Jul 2003 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2003/07/22/jus4qix-the-story-of-a-classic-arcade-video-game/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2003/07/22/jus4qix-the-story-of-a-classic-arcade-video-game/</guid>
        </item>
      
    
      
        <item>
          <title>Early morning disco</title>
          <description>&lt;p&gt;Spring morning sun coming through my blinds, across my sofa, onto my disco ball.&lt;/p&gt;

&lt;p&gt;Taken with a &lt;a href=&quot;https://www.dpreview.com/products/fujifilm/compacts/fuji_mx1400&quot;&gt;FujiFilm FinePix 1400 Zoom&lt;/a&gt;, which at 1.3 megapixels saved photos at 1280×960 pixels!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/early-morning-disco.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 27 Mar 2003 12:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2003/03/27/early-morning-disco/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2003/03/27/early-morning-disco/</guid>
        </item>
      
    
      
        <item>
          <title>Circuit Heat</title>
          <description>&lt;p&gt;I made a prototype of a game called Circuit Heat. It is a version of the classic network completion puzzle (aka Pipes, FreeNet, Net, NetWalk, etc). The graphics remind me a little of the Atari Lynx classic puzzler Chip’s Challenge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Notes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;At this time, long before iPhone, I was playing Java games on a (Sagem?) cell phone so many of my concepts around this time were targeted at that sort of platform&lt;/li&gt;
  &lt;li&gt;The game was was later featured on &lt;a href=&quot;https://discmaster.textfiles.com/browse/42140/PCF161DVD_05_04/PCF161DVD_05_04.ISO/Gamemaker/Blitz%20Research%20Demo%20Disk/DemoDisk1%20Files/Puzzle/CircuitHeat&quot;&gt;PC Format 161 (May 2004) cover disc&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;screenshots&quot;&gt;Screenshots&lt;/h2&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/circuit-heat-title.png&quot; alt=&quot;PNG&quot; title=&quot;Title screen&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/circuit-heat-game.png&quot; alt=&quot;PNG&quot; title=&quot;In-game, level complete&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 23 Jan 2003 12:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2003/01/23/circuit-heat/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2003/01/23/circuit-heat/</guid>
        </item>
      
    
      
        <item>
          <title>Terra Firma</title>
          <description>&lt;p&gt;This is my entry into the BlitzCoder Stupidest Game Competition, 2002. You need to guide a sky diver—whose parachute has failed—past obstacles and attempt to land on a cow. Fun!&lt;/p&gt;

&lt;p&gt;It was written using BlitzBasic and later recompiled in BlitzPlus.&lt;/p&gt;

&lt;p&gt;This is the game that made me realise I could make games.&lt;/p&gt;

&lt;p&gt;Archived web page: &lt;a href=&quot;https://www.gingerbeardman.com/archive/terrafirma/&quot;&gt;gingerbeardman.com/archive/terrafirma/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Download: &lt;a href=&quot;https://gingerbeardman.itch.io/terra-firma&quot;&gt;gingerbeardman.itch.io/terra-firma&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/terra-firma-title.png&quot; alt=&quot;IMG&quot; /&gt; &lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/terra-firma-ufo.png&quot; alt=&quot;IMG&quot; /&gt; &lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/terra-firma-cow.png&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 23 Aug 2002 11:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2002/08/23/terra-firma/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2002/08/23/terra-firma/</guid>
        </item>
      
    
      
        <item>
          <title>Sensible Soccer T-shirt</title>
          <description>&lt;p&gt;I won a competition in a magazine that resulted in my design for a Sensible Soccer T-shirt being put into production by a company called Joystick Junkies.&lt;/p&gt;

&lt;p&gt;By early 2004 they were available to buy at online from the &lt;a href=&quot;https://web.archive.org/web/20031221003131/http://bsimerch.com/joystickjunkies/&quot;&gt;BSI Merch website&lt;/a&gt; and Amazon UK, as well as on the UK high street at all River Island stores, and to buy wholesale from Big Ben Interactive.&lt;/p&gt;

&lt;p&gt;T-shirts were spotted in the wild as far afield as Canada and Australia!&lt;/p&gt;

&lt;h2 id=&quot;design&quot;&gt;Design&lt;/h2&gt;

&lt;p&gt;It’s a shame they didn’t have the budget to do the lines along the shoulders and around the neck!&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/sensible-soccer-t-shirt-design.png&quot; alt=&quot;PNG&quot; title=&quot;This is the design as I submitted it&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Eagle-eyed pixel-peeping viewers will notice that the final design isn’t actual Sensible Soccer sprites.
&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/sensible-soccer-t-shirt-photo.jpg&quot; alt=&quot;JPG&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 23 May 2002 11:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2002/05/23/sensible-soccer-t-shirt/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2002/05/23/sensible-soccer-t-shirt/</guid>
        </item>
      
    
      
        <item>
          <title>Yaking</title>
          <description>&lt;p&gt;A small prototype for a kayak/canoe “simulator” game, featuring water currents, a gate to paddle through, and somewhat unique paddling controls (press left/right alternately).&lt;/p&gt;

&lt;p&gt;Made using BlitzBasic and targetting Game Boy Advance resolution of 240×160.&lt;/p&gt;

&lt;p&gt;Archived web page: &lt;a href=&quot;https://www.gingerbeardman.com/archive/yaking/&quot;&gt;gingerbeardman.com/archive/yaking/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Download: &lt;a href=&quot;https://gingerbeardman.itch.io/yaking&quot;&gt;gingerbeardman.itch.io/yaking&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/yaking.png&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 27 Mar 2002 12:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2002/03/27/yaking/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2002/03/27/yaking/</guid>
        </item>
      
    
      
        <item>
          <title>Web Design Index 2</title>
          <description>&lt;p&gt;A couple of websites I’ve built: one for photographer Rankin and the other for my former employer Form, made during my time working for them in 1998/9, are featured in the book Web Design Index 2 and on the accompanying CD.&lt;/p&gt;

&lt;p&gt;Compiled by Günter Beer, and published by The Pepin Press/Agile Rabbit Editions.&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://web.archive.org/web/20020401235422/http://www.webdesignindex.org/&quot;&gt;www.webdesignindex.org&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.amazon.co.uk/Web-Design-Index-Paperback-CD-Rom/dp/9057680262&quot;&gt;www.amazon.co.uk/Web-Design-Index-Paperback-CD-Rom/dp/9057680262&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/webdesignindex2w0000pepi/page/336/mode/2up?q=rankin&quot;&gt;archive.org/details/webdesignindex2w0000pepi/page/336/mode/2up&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Thu, 31 Jan 2002 12:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2002/01/31/web-design-index-vol-2/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2002/01/31/web-design-index-vol-2/</guid>
        </item>
      
    
      
        <item>
          <title>Bendertron</title>
          <description>&lt;p&gt;This is my Futurama-themed fan-game inspired a little by the Williams arcade classic Robotron and a lot by Jeff Minter’s Llamatron. Written in BlitzBasic for Windows 9x.&lt;/p&gt;

&lt;p&gt;Created in Feb/Mar 2001 during the dot-com boom and released in Jan 2002 after the bubble burst!&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Explosion animation by the wonderful &lt;a href=&quot;https://www.amelines.com&quot;&gt;Alex Amelines&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Sounds and graphics ripped from the TV show&lt;/li&gt;
  &lt;li&gt;It’s a 25-year-old free fan-game, you know?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Play it on an old install of Windows, or on modern Windows using &lt;a href=&quot;https://sourceforge.net/projects/dxwnd/&quot;&gt;DxWnd&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Free Download: &lt;a href=&quot;https://gingerbeardman.itch.io/bendertron&quot;&gt;gingerbeardman.itch.io/bendertron&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/bendertron-game.png&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/bendertron-title.png&quot; alt=&quot;IMG&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 14 Feb 2001 14:11:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2001/02/14/bendertron/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2001/02/14/bendertron/</guid>
        </item>
      
    
      
        <item>
          <title>Simple Soccer</title>
          <description>&lt;p&gt;Simple Soccer is my take on the classic Sensible Soccer. It was written in BlitzBasic and ran at 800×600 under Windows 9x.&lt;/p&gt;

&lt;p&gt;I built multiple parts—player control, dribbling, cpu and formation, goalkeeper behaviour—but never managed to combine it all in a finished game. Still, I count it as my first real game.&lt;/p&gt;

&lt;p&gt;Archived web page: &lt;a href=&quot;https://www.gingerbeardman.com/archive/soccer/&quot;&gt;gingerbeardman.com/archive/soccer/&lt;/a&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/simple-soccer.png&quot; alt=&quot;IMG&quot; title=&quot;The beautiful game&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Fri, 29 Sep 2000 11:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/2000/09/29/simple-soccer/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/2000/09/29/simple-soccer/</guid>
        </item>
      
    
      
        <item>
          <title>My old Atari ST software</title>
          <description>&lt;p&gt;I dug out some old 3.5” double density floppy disks from my Atari ST days and have made some old apps of mine available as downloads. These were made between 1992 and 1994.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Paint (chunky pixel art app)&lt;/li&gt;
  &lt;li&gt;REview (text document viewer)&lt;/li&gt;
  &lt;li&gt;Chaos Calc 2 (fractal viewer)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also included are some icons and Fuji Bar!, a companion app for the PaCifiST emulator on Windows 95 that allows you to easily manage and change .ini settings through a GUI. This was made in 1996.&lt;/p&gt;

&lt;p&gt;Archived web page: &lt;a href=&quot;https://www.gingerbeardman.com/archive/tektonix/atarist.htm&quot;&gt;gingerbeardman.com/archive/tektonix/atarist.htm&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 01 Dec 1998 12:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/1998/12/01/my-old-atari-st-software/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/1998/12/01/my-old-atari-st-software/</guid>
        </item>
      
    
      
        <item>
          <title>My old Windows software</title>
          <description>&lt;p&gt;After moving to Windows PC from Atari ST I discovered Visual Basic and my mind was blown by the possibilities of laying out a graphical user interface using the mouse and adding code to make it do stuff. I jumped in and made a whole bunch of Windows software, including some world-first features like hot-corners to invoke the screen saver and being able to quickly select favourite folders whilst in the file selector of any application.&lt;/p&gt;

&lt;p&gt;I also made fun stuff like screensavers and &lt;a href=&quot;/2004/06/20/wire-hang-redux/&quot;&gt;videogames&lt;/a&gt;, as well as more utilitarian software “apps”. In addition, I played around with a really cool and very fast interpreted language called &lt;a href=&quot;https://en.wikipedia.org/wiki/Euphoria_(programming_language)&quot;&gt;Euphoria!&lt;/a&gt;—whose claim to fame was that it had a reference-counting garbage collector—and I’m surprised to read that it is still around over 30 years later!&lt;/p&gt;

&lt;p&gt;Archived web page: &lt;a href=&quot;https://www.gingerbeardman.com/archive/tektonix/&quot;&gt;gingerbeardman.com/archive/tektonix/&lt;/a&gt;&lt;/p&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/tektonix-software.png&quot; alt=&quot;IMG&quot; title=&quot;HTML Image Map navigation menu on my website, ~1996&quot; /&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 16 Nov 1998 12:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/1998/11/16/my-old-windows-software/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/1998/11/16/my-old-windows-software/</guid>
        </item>
      
    
      
        <item>
          <title>Cease &amp; Desist: The Designers Republic</title>
          <description>&lt;p&gt;A letter I received from The Designers Republic after creating a font inspired by their work. They chose to order a cease and desist, rather than fostering creativity.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Matt Sephton created an original font called Block Out–a techno font that can still be found here. He had used Fontographer. It was, as he put it, influenced by the tDR font in the Wipeout series of games. He placed a free truetype font on his web site, but was confronted with a threatening letter from tDR and was forced to take down the free .ttf font from his site. They claimed their font 6x6 (even though Matt’s is based on a 7x7 grid) was what he was trying to sell. Another instance of corporate bullying. —Luc Devroye, from &lt;a href=&quot;http://luc.devroye.org/fonts-72415.html&quot;&gt;luc.devroye.org/fonts-72415.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p class=&quot;tofigure&quot;&gt;&lt;img src=&quot;https://cdn.gingerbeardman.com/images/posts/blockout-the-designers-republic.jpg&quot; alt=&quot;JPG&quot; title=&quot;Cease &amp;amp; Desist &amp;lt;!-- Ian Anderson, Corporate Bully --&amp;gt;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;My font was drawn completely from scratch using &lt;a href=&quot;https://macromedia.fandom.com/wiki/Macromedia_Fontographer&quot;&gt;Fontographer 4.1&lt;/a&gt;, so I find it perplexing that glyphs I had created straight from my own imagination were the same as those in the apparently identical font. I offered my font as a free download on my website, under the concept of &lt;a href=&quot;https://en.wikipedia.org/wiki/Shareware&quot;&gt;Shareware&lt;/a&gt; which encouraged others to also share the font for free, and if anybody felt like sending a donation they could do. As you might expect, this is a bit of a hippy thing to do and nobody ever donated anything! And I never did hear from the Head of the Department of Computer Science.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;An archived copy of the font can be found &lt;a href=&quot;https://discmaster.textfiles.com/browse/18365/fonte2.zip/dekorativ/blockout.zip&quot;&gt;on this CD-ROM from 2007&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 17 Jun 1997 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/1997/06/17/cease-and-desist-the-designers-republic/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/1997/06/17/cease-and-desist-the-designers-republic/</guid>
        </item>
      
    
      
        <item>
          <title>FAQ: Micro Machines V3</title>
          <description>&lt;p&gt;I wrote a video game FAQ and uploaded it to GameFAQs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://gamefaqs.com/console/psx/file/micro_machines_v3.txt&quot;&gt;gamefaqs.com/console/psx/file/micro_machines_v3.txt&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 08 Apr 1997 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/1997/04/08/faq-micro-machines-v3/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/1997/04/08/faq-micro-machines-v3/</guid>
        </item>
      
    
      
        <item>
          <title>FAQ: Wipeout XL/2097</title>
          <description>&lt;p&gt;I wrote a video game FAQ and uploaded it to GameFAQs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://gamefaqs.com/console/psx/file/wipeout_xl.txt&quot;&gt;gamefaqs.com/console/psx/file/wipeout_xl.txt&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Mon, 21 Oct 1996 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/1996/10/21/faq-wipeout-xl-2097/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/1996/10/21/faq-wipeout-xl-2097/</guid>
        </item>
      
    
      
        <item>
          <title>FAQ: Hermie Hopperhead - Scrap Panic</title>
          <description>&lt;p&gt;I wrote a video game FAQ and uploaded it to GameFAQs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://gamefaqs.com/console/psx/file/hermie_hopperhead.txt&quot;&gt;gamefaqs.com/console/psx/file/hermie_hopperhead.txt&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 04 Sep 1996 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/1996/09/04/faq-hermie-hopperhead-scrap-panic/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/1996/09/04/faq-hermie-hopperhead-scrap-panic/</guid>
        </item>
      
    
      
        <item>
          <title>FAQ: Choro Q Racing</title>
          <description>&lt;p&gt;I wrote a video game FAQ and uploaded it to GameFAQs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gamefaqs.gamespot.com/ps/572737-penny-racers/faqs&quot;&gt;gamefaqs.com/ps/572737-penny-racers/faqs&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Wed, 28 Aug 1996 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/1996/08/28/faq-choro-q-racing/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/1996/08/28/faq-choro-q-racing/</guid>
        </item>
      
    
      
        <item>
          <title>FAQ: Motor Toon Grand Prix</title>
          <description>&lt;blockquote&gt;
  &lt;p&gt;This might be the first entry on this blog, but it’s not quite my oldest content on the internet. For that you’ll need to check out the archive linked to from the bottom of the &lt;a href=&quot;/about#history-repeating&quot;&gt;about page&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I wrote a video game FAQ and uploaded it to GameFAQs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://gamefaqs.com/console/psx/file/motor_toon_gp_2.txt&quot;&gt;gamefaqs.com/console/psx/file/motor_toon_gp_2.txt&lt;/a&gt;&lt;/p&gt;
</description>
          <author>by Matt Sephton</author>
          <pubDate>Tue, 06 Aug 1996 00:00:00 +0000</pubDate>
          <link>https://blog.gingerbeardman.com/1996/08/06/faq-motor-toon-grand-prix/</link>
          <guid isPermaLink="true">https://blog.gingerbeardman.com/1996/08/06/faq-motor-toon-grand-prix/</guid>
        </item>
      
    

  </channel>
</rss>