<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Get Info: #macintosh</title>
    <description>Posts tagged “macintosh” — Blog of independent game and app developer 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/tag/macintosh/</link>
    <atom:link href="https://blog.gingerbeardman.com/tag/macintosh/index.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Tue, 30 Jun 2026 12:05:30 +0000</pubDate>
    <lastBuildDate>Tue, 30 Jun 2026 12:05:30 +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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>
      
    

  </channel>
</rss>
