<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="/feed.xml" rel="self" type="application/atom+xml" /><link href="/" rel="alternate" type="text/html" /><updated>2026-05-10T05:37:38-07:00</updated><id>/feed.xml</id><title type="html">Steve Hannah</title><subtitle>Ramblings about Xataface, Java, and other software development issues.</subtitle><author><name>Steve Hannah</name></author><entry><title type="html">Reprogramming the Commercial Break</title><link href="/blog/2026/05/09/my-commercial-server/" rel="alternate" type="text/html" title="Reprogramming the Commercial Break" /><published>2026-05-09T05:00:00-07:00</published><updated>2026-05-09T05:00:00-07:00</updated><id>/blog/2026/05/09/my-commercial-server</id><content type="html" xml:base="/blog/2026/05/09/my-commercial-server/"><![CDATA[<p>So my son said to me this morning, just before heading to his swimming lesson, that he didn’t notice any commercials for Hoppers, this movie that he wants to see, and it’s already out of theatres.</p>

<p>That’s all he said.</p>

<p>Here’s what I heard: “Dad, wouldn’t it be cool if we could have an AI agent find all of the trailers and commercials that I would be interested in, and inject them automatically into the shows that I watch, instead of the commercials that are fed to me by the likes of YouTube?”</p>

<p>So I repeated back to him what I heard him say, and added “I’ll research it while you’re having your swimming lesson”.</p>

<p>During the course of his 45-minute lesson, I chatted with Claude about the possibilities, and landed on the following architecture:</p>

<ol>
  <li>Install Jellyfin — an open-source alternative to Plex — and run it alongside Plex, because Plex doesn’t have any support for injecting commercials before shows. I can run it in parallel with Plex so it can be a soft transition.</li>
  <li>Install the Jellyfin app on Roku, and other devices that we watch our shows and movies on.</li>
  <li>Use a tool to auto-download new episodes of YouTube channels that the kids like to watch, and import them into Jellyfin.</li>
  <li>Write a desktop app that allows me to record my preferences for the types of commercials and trailers I want to watch, and have an agent (Claude) search through trailer sites and commercial sites (yes, these are a thing) for commercials we’re interested in, and download them to the Jellyfin server.</li>
  <li>Sit back and enjoy.</li>
</ol>

<p>When he was finished his swimming lesson, I started to tell him the plan, as we walked back to the car. I was a few words past “Jelly fin”, and he said “I’ll pass”.</p>

<p>I responded, “but let me finish”, as we got into the car.</p>

<p>He said, “Daddy, all I said was that I didn’t notice any commercials for Hoppers, and you went off and designed this whole big thing”.</p>

<p>“Yes, but…”</p>

<p>He pressed the “Play” button on the audiobook we’re listening to (Project Hail Mary). And that was the end of that.</p>]]></content><author><name>shannah</name></author><category term="AI" /><summary type="html"><![CDATA[So my son said to me this morning, just before heading to his swimming lesson, that he didn’t notice any commercials for Hoppers, this movie that he wants to see, and it’s already out of theatres.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="/assets/wp-content/uploads/2026/05/commercial-server-hero.svg" /><media:content medium="image" url="/assets/wp-content/uploads/2026/05/commercial-server-hero.svg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">No slop allowed in this blog</title><link href="/blog/2026/05/07/blog-about-ai-blog/" rel="alternate" type="text/html" title="No slop allowed in this blog" /><published>2026-05-07T05:00:00-07:00</published><updated>2026-05-07T05:00:00-07:00</updated><id>/blog/2026/05/07/blog-about-ai-blog</id><content type="html" xml:base="/blog/2026/05/07/blog-about-ai-blog/"><![CDATA[<p>Like everyone else, I’ve been playing with AI a lot lately. I’m always building things, and sometimes it is difficult to find the time to write about the things that I build, because the writing time comes at the expense of building time. Hence the scarcity of recent posts in my blog.</p>

<p>I think that AI can help with this, but I don’t want to use AI to write my blog for me. This blog has always been written by me and I don’t want to muddy the water with AI content here. Nonetheless, I would like to start using AI to write about the things I’m doing, building, and learning, because that is better, I think, than not posting anything at all. So I decided to start an experiment using AI to help craft blog posts about my projects in a separate blog, which I call “Steve’s Ghostwriter”.</p>

<p>That blog is written in the third person, to emphasize that it is not my voice, and sometimes it may take on a flair that only AI can provide, such as writing in the style of Lord of the Rings, as I’ve done in my first post.</p>

<p>For full disclosure, I have appended the original prompts that I used to generate the post to the end, so that you can see what portions are “me”, and what portions are filled in by AI. My intention is to do this in every post, but since this is only my first dip of the toe into these waters, I may decide to adjust course once the raft is afloat.</p>

<p>So for my first blog post, I decided to share about a new IDE I’ve been developing for my own use.</p>

<p>Here it is, for your reading enjoyment: <a href="https://ghostwriter.sjhannah.com/blog/2026/05/07/the-forging-of-litecode/">Of the Forging of Litecode</a></p>]]></content><author><name>shannah</name></author><category term="AI" /><summary type="html"><![CDATA[Like everyone else, I’ve been playing with AI a lot lately. I’m always building things, and sometimes it is difficult to find the time to write about the things that I build, because the writing time comes at the expense of building time. Hence the scarcity of recent posts in my blog.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="/assets/wp-content/uploads/2026/05/no-slop-hero.svg" /><media:content medium="image" url="/assets/wp-content/uploads/2026/05/no-slop-hero.svg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">The jDeploy Desktop App</title><link href="/blog/2025/04/21/the-jdeploy-desktop-app/" rel="alternate" type="text/html" title="The jDeploy Desktop App" /><published>2025-04-21T08:55:13-07:00</published><updated>2025-04-21T08:55:13-07:00</updated><id>/blog/2025/04/21/the-jdeploy-desktop-app</id><content type="html" xml:base="/blog/2025/04/21/the-jdeploy-desktop-app/"><![CDATA[<p>I took advantage of the long weekend to finish up the first release of the jDeploy desktop app. This has been many months in development, and I’m happy with the result. I think this should eliminate most of the hurdles that stopped new users from adopting it. With the new template gallery, it is possible to create a new Swing or JavaFX project, and publish it to GitHub or npm for others to download in just a few seconds.</p>

<p>I wrote more about it in the <a href="https://open.substack.com/pub/jdeploy/p/a-new-chapter-for-jdeploy-the-desktop?r=7y1vt&amp;utm_campaign=post&amp;utm_medium=web&amp;showWelcomeOnShare=true">jDeploy substack</a></p>]]></content><author><name>shannah</name></author><category term="Java" /><summary type="html"><![CDATA[I took advantage of the long weekend to finish up the first release of the jDeploy desktop app. This has been many months in development, and I’m happy with the result. I think this should eliminate most of the hurdles that stopped new users from adopting it. With the new template gallery, it is possible to create a new Swing or JavaFX project, and publish it to GitHub or npm for others to download in just a few seconds.]]></summary></entry><entry><title type="html">Prime Time BBS</title><link href="/blog/2023/02/19/prime-time-bbs/" rel="alternate" type="text/html" title="Prime Time BBS" /><published>2023-02-19T14:55:12-08:00</published><updated>2023-02-19T14:55:12-08:00</updated><id>/blog/2023/02/19/prime-time-bbs</id><content type="html" xml:base="/blog/2023/02/19/prime-time-bbs/"><![CDATA[<p>Note: Throughout this post, I’ll use “us”, “I”, “me”, and “we” fluidly, since I did most of these things with my friend, and I just can’t decide whether each thing was done by me alone, or together with my friend.</p>

<p>When I was in grade 8, I started a bulletin board (BBS) on my family computer, using a 2nd phone line that I convinced my parents to get for us. It started out as a text-based system using free software that I downloaded from another BBS, but I soon migrated to graphical systems.</p>

<p>I used a pirated version of First Class Server for experimentation. First Class was the gold standard for Mac BBS software, but it was quite expensive. I recall that it was like $300 for a hobby license, which had a limit of 100 user accounts, and you couldn’t use it for commercial purposes. I might be misremembering the exact price and limitations, but for a kid with no job it was champagne, and I wasn’t even old enough to have a beer budget yet.</p>

<p>The thing that set First Class apart from all the competition was its graphical user interface. You see, most BBSes at the time were text-based, meaning that it was kind of like using your terminal program. No mouse, or windows. The menus would just be numbered lists of options, and you would have to type in the option that you wanted to choose. I happily tolerated these archaic text-based interfaces until I discovered First Class.</p>

<p>First Class provided, pardon the pun, a “first class” experience. When you logged into a First Class BBS, it felt like you were just accessing a multi-user part of your computer. The main menu was just like a regular Finder window but with some custom icons and backgrounds in the window. It supported email, message forums, file attachments, multi-user chat-rooms, and background, resumable file downloads. The experience was pretty darn close to modern systems like Slack and Discord – but back in 1993, it was ground-breaking.</p>

<p>For me, there was no going back to text-based bulletin boards, once I knew that GUI BBSes existed.</p>

<p>The only problem was cost. First Class was out of my price range, and using pirated software for a public BBS just wasn’t an option – it was too easy to get caught. And it was always my intention to grow it into something big, like AOL or Compuserve, so everything had to be legitimate and above board.</p>

<p>Luckily, in chatting with the sysop of The Revelation, the best First Class BBS in the Vancouver area at the time, I discovered that they had a license for NovaLink Pro, a competing BBS system that also had a graphical user interface. And he was willing to sell it to me for an affordable price. It was around $100. I think it had a limit of around 100 users, but there was no commercial restriction.</p>

<p>I had never heard of NovaLink Pro before, but it sounded perfect. There weren’t any NovaLink Pro BBSes in my area, so it was difficult to make a comparison, but they had a demo version that I downloaded and installed. It wasn’t as polished as First Class. Some aspects of the UI were similar. E.g. The main menu looked like a finder window with icons for all of the menu items. However, in First Class, you could customize the look of the items – change the icons, drag them into different positions, etc. On NovaLink, the icons were arranged in a grid, and sorted alphabetically, and you couldn’t change the config. You could click on an icon to select it, or double click it to open it, but you couldn’t drag it around.</p>

<p>NovaLink did have some cool features that First Class was lacking, such as Telnet support (i.e. the ability to log into the BBS over the internet – which was a very new thing), but overall, the impression I got was that it was a poor-man’s First Class.</p>

<p>As a fourteen-year-old kid, I was nothing if not a “poor man”, so I felt that NLP (NovaLink Pro) was a perfect fit. There’s also some part of me that likes to support the “B” team. I was a Macintosh user in a world of 99% PC, and despite owning a Nintendo Entertainment System, I was very curious about competitors like the Sega Master System – and later on, about the “also-rans” in the 16-bit console wars, like TurboGraphix16. My search for movies similar to Indiana Jones led me to a few duds (King Solomon’s Mines, Alan Quaterman and the Lost City of Gold), but also to a few that were better than okay (Romancing the Stone).</p>

<p>So, in the world of GUI BBSes, where First Class was the clear leader, I liked the idea of going with NLP – the underdog.</p>

<p>Before finalizing the purchase, I contacted ResNova, the company that made NLP to make sure that it was “legal” for them to sell me the license. They said it was, but recommended that I buy the manual from them – and we would be entitled to upgrade to their new version, “4.0”, when it came out.</p>

<p>I bought the software from the Revelation BBS, but I don’t recall ever receiving any packaging from them. It must have been the sort of thing where they called ResNova to transfer the license. I do recall having an option of how I wanted to get the software. I could either wait for it to come by mail (actually that part was going to happen anyways, because we bought the manual – and the software came on floppy disks inside the manual), or I could download it from Nova Central, ResNova’s BBS, and pay the long distance fee. Yes, in those days, before the internet, you actually needed to dial into BBSes over the phone, and if the BBS was in a different area (ResNova was located in California), then you had to pay long distance fees by the minute, which could grow to be substantial.</p>

<p>I figured, how long could it possibly take to download the software? I was also pretty hyped about logging into a real BBS that used NovaLink Pro, so I chose to try to download it.</p>

<p>As it turned out, it can take a very long time to download software. The application fit onto three 1.44MB floppy disks, so it was probably about 4 megabytes. My modem was 14.4kbps, so under optimum conditions, it should take about 100 seconds per disk, so I should have been looking at five minutes or so. I don’t remember the long distance prices, but let’s say they were ten cents per minute (I think that is realistic for the time), then I’d be looking at fifty cents. Well within my budget. But there was still the matter of logging in, and filling in the sign-up form. So we’re looking at about ten minutes or so. I could splurge for a dollar. Heck, make it twenty minutes – I’ve got plenty of change where that came from.</p>

<p>Unfortunately, their download protocol, a custom protocol that they named RNP (for ResNova Protocol) was a little flakey. I started downloading the disk images for the software, and then proceeded to browse around the BBS to see what else they had to offer. Unfortunately, the download stalled at around 5%. I gave it a few minutes to see if it would “un-stall” itself, and after it didn’t show any more progress, I canceled the download and started again. The same thing happened again. So I put it on for a third time, but this time I decided to just let it download undisturbed and not browse around the site. Their download protocol, a custom protocol that they called RNP (ResNova Protocol) was supposed to support background downloading, but it was a little flakey.</p>

<p>I don’t think that three times was a charm, because I remember the call lasting nearly three hours. Ultimately, though, I did manage to download the software. I didn’t mention anything about the long distance to my parents, and they never brought it up, so I’m guessing it wasn’t so high as to stick out like a sore thumb.</p>

<p>Two weeks later, I received a parcel in the mail with a hard copy of the manual, printed and bound in a three-ring binder, and “official” install disks. There were four disks in total, the fourth one containing only my license key.</p>

<p><img src="/assets/wp-content/uploads/2023/02/novalink-manual-cover-913x1024.jpg" alt="novalink-manual-cover" /></p>

<h2 id="setting-up-the-bbs">Setting up the BBS</h2>

<p>I installed the BBS on the family’s Macintosh Centris 660AV computer, and just kept it running in the background all day. As I write this, I begin to question how well this would have worked on the Macintoshes of the day – I think it was around System 8, which didn’t have preemptive multitasking. But as far as I recall, it worked just fine, and my family didn’t even know it was running in the background.</p>

<p>I had a lot of fun poring over the manual to learn about all of the features. NovaLink Pro was a hybrid Text/GUI system that clearly used to be text-only, and added a graphical UI later on, evidenced by the fact that many of the features, such as scripting, were text-only, and had no impact on the GUI.</p>

<p>One of their big selling features, which supposedly set them apart from First Class, was that they supported Telnet out of the box – i.e. users could connect to the BBS over the internet, potentially opening it up to a global audience. Unfortunately, this was one of those “text-only” features. Yes, they could log in over the internet, but they could only use the text interface. That wasn’t of much interest to me.</p>

<p>My plan for the BBS was mostly to provide message forums and file download areas, but I also wanted to create a visually appealing experience, using The Transformers (the toy) as a theme. Most First Class BBSes provided a “modded” version of the client with some custom icons and background images, which gave each BBS a distinctive look and feel. These mods were easy to make using Apple’s free ResEdit tool. I created one of my own when I was experimenting with First Class, prior to purchasing the license for NLP.</p>

<p>I was a little disappointed when NLP didn’t seem to allow the same kind of customization. The administration app included a menu editor tool that allowed me to drag items, such as file libraries, message forums, and chat rooms from a palette into the menu, but it didn’t provide any layout options, nor did it allow me to customize the icons. It always laid out the icons in a grid, in alphabetical order.</p>

<p>They did provide an option to use a custom graphic with hot-spots for menu items which was quite cool, but it was an all-or-nothing proposition, at least on a per menu basis. I.e. For a given menu, you could either use a custom graphic, or you could use an automatic menu, but you couldn’t, for example, use a custom graphic in the background, and use the auto-layout icons in the foreground.</p>

<p>It took a while to get used to this limitation, and, in some ways, this was better than the First Class method of modding the client with ResEdit. For example, users didn’t have to download a custom client to be able to see my board’s custom graphics. The vanilla client supported it out of the box. If I added a menu with custom graphics, it would be instantly available to all clients. It was common practice, by contrast, for First Class BBSes to periodically update their clients with new graphics from time to time, and advise users to download their latest version. The NLP solution for custom graphics was much closer to the way that that web would later work.</p>

<p>And, hey, it was actually kind of fun to make menus in photoshop.</p>

<p>Reading the Brochures I’ve always been a sucker for reading brochures. As a child, I spent hours on my bedroom floor thumbing through the pages of the Sears Wish Book, imagining that I was the little boy depicted playing with the GI Joe aircraft carrier, or riding on that CHiPs-themed Big Wheel. Fast forward ten years, and things hadn’t changed much. Only replace the Sears catalog with ResNova’s brochures for NovaLink Pro.</p>

<p>I don’t recall if the brochures came with the software when I purchased it, or if we received them prior to the purchase, but I do remember spending many hours studying them, and memorizing all of the features listed. Features like Telnet, Usenet, Fidonet, and Apple Search. I only had a dim idea of how the features worked, but where experience and know-how were lacking, my imagination filled in the gaps. I imagined building a service like AOL, where hundreds or thousands of people in the Vancouver area would log in to my BBS to get their news, access the internet, chat with each other, and maybe even buy products.</p>

<p><img src="/assets/wp-content/uploads/2023/02/novalink-brochure-side-a-1024x791.jpg" alt="novalink-brochure-side-a" /></p>

<p><img src="/assets/wp-content/uploads/2023/02/novalink-brochure-side-b-1024x791.jpg" alt="novalink-brochure-side-b" /></p>

<p>In fact, I even made my own brochures for this yet-to-be-created online service, which I dubbed “Vancouver Online International” or VOI for short. I guess “Prime Time BBS” just wasn’t grand enough for my vision. I spent hours, days, weeks creating mock-ups for each section of the BBS in Photoshop, making use of all of the modern effects it offered. Lots of emboss, gradients, lens flares, and, my favourite: extrudes. That’s the one where it partitions the image into 3D cubes that are sort of jumping out of the image at you.</p>

<h3 id="the-world-wide-web-is-coming">The World Wide Web is Coming</h3>

<p>The press releases were almost as exciting as the brochures, despite their lack of graphics. I distinctly remember the one announcing NovaServer 4.0. Yes, they were changing the name of the server from NovaLink Pro to NovaServer for their next major release. The big news, in addition to the name change, was that it would include full support for the World Wide Web.</p>

<p>This was the first time I had ever read (or heard) the term World Wide Web, or WWW, and frankly, it didn’t mean much to me at the time. I recall being a little bit disappointed by the announcement because I was more hoping that they would add FTP support, since this was the key to file downloads. Nonetheless, I was intrigued by this new “Web”, as they called it.</p>

<p>As soon as NovaServer 4 was available, I downloaded the demo, and started playing with it. The WWW support was neat, but clearly nascent. The client came with a reasonably compliant web browser built into it, and it used HTML to encode most of its custom graphics, but the general web browsing experience left a lot to be desired. For one, it didn’t support file downloads at all.</p>

<p>Despite its shortcomings, I recognized the potential.</p>

<h3 id="and-then-they-were-gone">And Then They Were Gone</h3>

<p>Nova Server’s inclusion of a Web Browser inside a Bulletin Board client is, perhaps, the most direct link between the golden age of the BBS and the advent of the internet. No other BBS software, that I’m aware of, incorporated the internet to the same degree as Nova Server did. Unfortunately, it barely got a chance to spread its wings before it was purchased by Microsoft and discontinued.</p>

<p><a href="https://tidbits.com/1996/11/25/webbits25-nov-96/">From Web TidBits, Nov. 1996</a>:</p>

<blockquote>
  <p>Microsoft Gets Personal — In a surprising move, Microsoft and ResNova announced that Microsoft has acquired ResNova’s Web server products: the personal Web server WebForOne, and the full-featured Boulevard. In conjunction, five of ResNova’s employees, including president Alex Hopmann and product manager Lauren Antonoff, have joined Microsoft’s Internet Platform and Tools division in San Jose, and ResNova is seeking a buyer for its NovaServer bulletin board system.</p>

  <p><a href="http://www.resnova.com/">http://www.resnova.com/</a></p>
</blockquote>

<p>I only discovered this years later. From my perspective, ResNova just sort of disappeared without a trace. Even now, with the benefit of modern search technologies like Google and Bing, it is quite difficult to find corroboration for my memories of its existence. You can find the odd mention of it on old BBS lists that people have posted, and I found one press release on a Usenet archive – though without the ResNova letterhead, it’s not the same. The best proof of life for NovaServer is found in the December 1995 issue of BBS magazine, which archive.org has kindly preserved for humanity. <a href="https://ia601902.us.archive.org/18/items/BBS_VOL_06_12_1995_Dec/BBS_VOL_06_12_1995_Dec.pdf">Link here</a> (page 46).</p>

<p><img src="/assets/wp-content/uploads/2023/02/bbs-magazin-dec-1995-1024x705.jpg" alt="bbs-magazin-dec-1995" /></p>

<p>More recently I discovered that Apple Fritter, currently uses NovaServer 4 for its <a href="https://www.applefritter.com/content/welcome-applefritter-bbs">eWorld clone</a>.</p>

<h3 id="reviving-nova-server">Reviving Nova Server</h3>

<p>In my spare time, I still sometimes play with Nova Server, and I have dreams of reviving it. A couple of years ago I managed to create mostly-functional web, mobile, and desktop clients. I still have all the old software, and have acquired some documentation for its C API for writing extensions, which should make it possible to write a CGI gateway, which would really open things up. E.g. I could write dynamic extensions using PHP, Python, or any other modern programming language, to augment the features of the old Nova Server.</p>

<p>I don’t know when I’ll have time to do all of this tinkering between the day job and the family, but I choose to believe that someday I’ll have the time, and, God willing, still have the passion to build things like this. In the meantime, I’ll just wax nostalgic about the good ol’ days, when the internet was still mostly just a dream, and we could build it into anything we wanted.</p>]]></content><author><name>shannah</name></author><category term="Retro Computing" /><category term="Stories" /><summary type="html"><![CDATA[Note: Throughout this post, I’ll use “us”, “I”, “me”, and “we” fluidly, since I did most of these things with my friend, and I just can’t decide whether each thing was done by me alone, or together with my friend.]]></summary></entry><entry><title type="html">How I got hooked on Baseball Cards (part 1)</title><link href="/blog/2022/12/23/how-i-got-hooked-on-baseball-cards-part-1/" rel="alternate" type="text/html" title="How I got hooked on Baseball Cards (part 1)" /><published>2022-12-23T15:00:49-08:00</published><updated>2022-12-23T15:00:49-08:00</updated><id>/blog/2022/12/23/how-i-got-hooked-on-baseball-cards-part-1</id><content type="html" xml:base="/blog/2022/12/23/how-i-got-hooked-on-baseball-cards-part-1/"><![CDATA[<p>I started collecting baseball cards in 1988. I know this because I still have the Panini sticker book that started it all off. I don’t remember how I got that sticker book – probably as a birthday present, which would have made it technically the end of 1987, rather than 1988.</p>

<p><img src="/assets/wp-content/uploads/2022/12/panini-1988-842x1024.jpeg" alt="panini-1988" /></p>

<p>The sticker packs were sold at convenience stores and supermarkets, so I would probably get a pack every time I accompanied my mom on the weekly grocery shopping trip. I collected Blue Jays. Actually, I collected whatever came in the pack, but I always hoped for Blue Jays. This is because a few months earlier, I had visited my Grandpa while he was watching a Blue Jays game, and he explained to me that they were the only Canadian team in the league, so we should cheer for them.</p>

<p>Made sense. I was Canadian. The Blue Jays were Canadian. Therefore I must be a Blue Jays fan.</p>

<p>So, being a Blue Jays fan, I naturally hoped for Blue Jays when I got a pack of stickers.</p>

<p>My friend Chris was also Canadian, so he was a Blue Jays fan too. He had the same sticker book, and was also collecting Blue Jays. And, since all kids need to choose a favourite player, mine was George Bell. The choice was based on a mix of statistics (he was American League MVP in 1987), randomness (his sticker was one of my first), and which player’s picture I liked best.</p>

<p><img src="/assets/wp-content/uploads/2022/12/george-bell-panini.jpeg" alt="george-bell-panini" /></p>

<p>Chris’s favourite player was Tony Fernandez.</p>

<p>My Panini sticker Blue Jays collection was almost complete before Baseball cards even entered my consciousness. I knew what they were, but they had never crossed the chasm between things that “exist” and things that were “options”. During those early days of collecting, I had to correct several adults, including my parents, when they said that “I collected baseball cards”. I collected stickers. Not cards.</p>

<p>I didn’t even know what I would do with a baseball card. I mean, at least with a sticker I could stick it in my sticker book. There was an empty, outlined space for it and everything. It was like a puzzle waiting to be completed.</p>

<h3 id="my-first-pack-of-cards">My First Pack of Cards</h3>

<p>Then, one fateful day in the Spring of 1988, I got my first pack of baseball cards. I don’t recall the circumstances. It could have been a miscommunication, like I asked my dad to get me a pack of baseball stickers when he went in to pay at the gas station, and he came out with a pack of cards instead. Or it could have been a pragmatic choice, like I was allowed to get a pack of stickers at the store that day, but they didn’t have any, so I got a pack of cards instead.</p>

<p>Whatever the circumstances were, I opened that wax pack of 1987 Topps baseball cards, and found, to my delight, that it also came with a stick of gum. The gum was rock hard, but once you got it going it would still chew, and it still provided some sugary sweetness. Panini stickers didn’t come with gum.</p>

<p><strong>Side note:</strong> For some reason Topps gum was always rock hard. O-Pee-Chee gum was typically much softer.</p>

<p>I could get used to this whole “getting gum with my baseball cards” thing.</p>

<p>But it gets better. The pack came with about 14 cards, and one of them was a George Bell “All Star” card. I had struck gold on my very first pack. My favourite team – and my favourite player. I couldn’t believe my luck.</p>

<h3 id="what-are-baseball-cards-good-for">What are Baseball Cards Good For?</h3>

<p>Now, I had this stack of cards, but I didn’t know what to do with them. I couldn’t stick them anywhere, and I didn’t yet know about all of the elaborate accessories that were available for the display and storage of baseball cards, so I just stacked them on a shelf in my room.</p>

<p>Shortly after that first pack, I was faced with an honest to God choice between a pack of stickers and a pack of cards at the grocery store, and I … chose the cards. My panini sticker book sadly was never completed, and includes empty spaces for ungotten stickers to this day.</p>

<p>At this point, I began to identify as a “baseball card collector” (as opposed to baseball sticker collector), but I existed in a microcosm. It was just my friend Chris and I collecting cards – and we collected them the same way that we had collected stickers. We’d get a pack of cards at the corner store when we had an opportunity, and we’d hope for Blue Jays. Each trip into a new corner store brought with it the thrill of discovery, as we might discover a new brand of cards.</p>

<p>It was some time before I even knew that there were brands other than Topps – since that is what the corner stores near me carried. Then one day, my friend showed me a pack of O-Pee-Chee’s that he got from a different store. Mind blown. The O-Pee-Chee’s looked identical to Topps. They had the same players, same pictures, same stats on the back. The only difference was the logo in the top corner of the card, which said “O-Pee-Chee” instead of Topps. That and the gum was much softer – but I’m not sure if I knew about that difference yet, since Chris probably had finished the gum long before he showed me the cards.</p>

<p><strong>Side note on the gum:</strong> The O-Pee-Chee gum, 35 years later, tends to disintegrate into sugar dust as soon as you start chewing. I know this because I have a case of unopened O-Pee-Chee hockey cards still in a box under my parent’s stairs. I don’t have any surviving Topps package to offer a comparison. Perhaps Topps was playing the long game with their rock-hard gum, and 35 years later it would chew like Bubblicious.</p>

<p>Then one day, on a trip across the border, I found a pack of cards I had never seen before: Donruss. I was slightly disappointed that this pack didn’t come with gum. It came with a puzzle piece instead. Presumably, if I collected several more pieces, they could be assembled into a picture of something baseball-related. I couldn’t wait to show my new Donruss cards to Chris.</p>

<h3 id="the-baseball-card-store">The Baseball Card Store</h3>

<p>Little did I know that Chris had made a discovery of his own. One that dwarfed my measly Donruss cards.</p>

<p>He had found a baseball card store. A store that had nothing but baseball cards. I couldn’t believe my ears, and frankly my nine-year-old brain was having trouble processing it. I couldn’t quite imagine how you could fill up a store with just baseball cards. Up to that point, I had only seen them at convenience stores, where they would typically have one box with 36 packs of cards sitting amongst the gum and chocolate bars.</p>

<p>“They have boxes and boxes of nothing but cards!” he said. “You don’t even need to buy packs. You can look through the cards and just buy the ones that you want!”</p>

<p>“You can buy any card that you want?!” I asked incredulously.</p>

<p>Seemed too good to be true.</p>

<p>This store was named Chris’s Collectibles, and it was located just across from the library. One evening, while my mom was at the library, I asked if I could go into that store and look around.</p>

<p>If my mind was blown after the O-Pee-Chee discover, then I crapped my pants when I entered this store. (No not really – just trying to express how much of a “good” shock this was).</p>

<p>It was dark outside, so it must have been late. The only people in the store were two adults – one guy with a moustache, T-shirt, and trucker hat who was behind the counter, and the other, a customer, I presumed. They were chatting about baseball stuff – I don’t recall the specifics. My mind was busy processing this amazing new world that I had stepped into.</p>

<p>Before walking through that door, which might as well have been a portal into another dimension, I was aware of only three types of cards: Topps, O-Pee-Chee, and Donruss. And as far as I knew, all three of them had just started making baseball cards in 1988, because that was the only year of cards that were available at the corner stores. (Well, I had knowledge of 1987 Topps because that was the year of my first pack – but I hadn’t seen any more 1987 packs in ages).</p>

<p>Inside that store, they had more, different types of card packs than I had ever seen in my life. They had new brands I had never seen, like Score and Fleer. They had packs dating back five years, at least for most of these brands. They had glass cabinets filled with high-value singles, as they were called – each one in its own hard plastic case, and sporting price tags that were well outside my price range.</p>

<p>The thing that impressed me the most was the line boxes with rows of single cards sorted by year, set, and number. I could literally walk in here and find all of the Blue Jays I didn’t have, and just buy them outright. If I had the money, of course. Which I surely didn’t. I was on a one-pack-at-a-time budget.</p>

<p>So, on my first trip into this new world, that is just what I bought: one pack of cards.</p>

<p>But knowledge of this house of treasures changed my world for years to come. I had graduated beyond corner stores.</p>

<p>One thing lost in this transformation was anticipation of discovery when entering a new convenience store. I now had access to the definitive trove. I knew what brands were “out there”, so the odds of discovering anything new at the corner store was low to nil.</p>

<h3 id="the-joy-of-trading">The Joy of Trading</h3>

<p>My next big milestone, after the baseball card store, was the discovery of the joy of trading.</p>

<p>At the time I entered the baseball card store for the first time, and during the weeks that followed, I was still collecting in a microcosm. Chris and I would trade our doubles to help each other complete our Blue Jays collections – which was getting more and more difficult with the exponentially expanding universe of different sets – but we weren’t part of any larger “baseball card” community.</p>

<p>I didn’t really have any desire to find a community. I’m an introvert, and I liked collecting cards. If I needed a card, I could continue to buy packs and hope for the best – and the existence of a baseball card store was like a newfound super-power – as I could also go in there and just buy whatever card I needed to further my collection. But one night the community found me, and hooked me.</p>

<p>It was a night-time church meeting. I don’t recall what it was for. I remember that it was for the grown-ups, but a lot of kids would be there too. One of the grown-ups mentioned that his son and a few other kids would be bringing their baseball cards to do some “wheeling and dealing” (that was the first time, not the last time, I had heard that term), and he wondered if I was planning on joining in.</p>

<p>I didn’t really know what to expect, and I was a little bit nervous. At that point I didn’t know these other kids that well, and they were all a year of two older than me. But I said “okay”, and I brought my cards in a little box with me that night.</p>

<p>When I entered the “trading” floor, I was welcomed by the other kids – there were only two or three of them – and they asked if they could see my cards. One of them, Scott, was the most knowledgeable. He seemed to be an encyclopaedia of facts, and he carried with him a Beckett price guide that showed what every card was worth.</p>

<p>Beckett Baseball Card Monthly would be well-known to anyone who was around for the baseball card bubble of the late 80’s and early 90’s, but this little meetup was the first I had ever heard of it. I’m sure I went out and bought one the next day. Scott looked through my cards and showed me which ones were good. My focus had been on Blue Jays only, so I had no idea if I had any “good” cards in the objective sense. Apparently I did have a couple of good ones, and he offered to trade some of his cards with me.</p>

<p>That feeling of having something that someone else wanted – and being able to get something I wanted for it was special. This lies at the heart of the baseball card experience. That night I was introduced to this fun. I had finally learned what it is that you do with baseball cards. You trade them. Another life-changing discovery.</p>

<h3 id="the-next-chapter-sports-card-shows">The Next Chapter: Sports Card Shows</h3>

<p>This was only the beginning of my journey, into baseball cards. Over the next few years, the sports cards industry would experience a crazy bubble, and I rode that wave for all it was worth. In my next chapter, I’ll talk about my experience buying, selling, and trading cards at sports card shows.</p>]]></content><author><name>shannah</name></author><category term="Stories" /><category term="Things I like" /><summary type="html"><![CDATA[I started collecting baseball cards in 1988. I know this because I still have the Panini sticker book that started it all off. I don’t remember how I got that sticker book – probably as a birthday present, which would have made it technically the end of 1987, rather than 1988.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="/assets/wp-content/uploads/2022/12/george-bell-sheet-small-800x576.jpeg" /><media:content medium="image" url="/assets/wp-content/uploads/2022/12/george-bell-sheet-small-800x576.jpeg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Downloading Youtube Videos with Pytube and Shellmarks</title><link href="/blog/2021/12/22/downloading-youtube-videos-with-pytube-and-shellmarks/" rel="alternate" type="text/html" title="Downloading Youtube Videos with Pytube and Shellmarks" /><published>2021-12-22T12:09:44-08:00</published><updated>2021-12-22T12:09:44-08:00</updated><id>/blog/2021/12/22/downloading-youtube-videos-with-pytube-and-shellmarks</id><content type="html" xml:base="/blog/2021/12/22/downloading-youtube-videos-with-pytube-and-shellmarks/"><![CDATA[<p>Pytube is a great little Python utility for downloading videos from youtube as .mp4 files. It has a command-line interface that makes downloading videos as simple as entering the following command:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ pytube https://www.youtube.com/watch?v=....
</code></pre></div></div>

<p>Replace the URL with the Youtube URL of the video you want to download.</p>

<p>To make things even easier, I wrote a shellmarks wrapper script for this that provides an intuitive GUI form.</p>

<p><img src="/assets/wp-content/uploads/2021/12/image3.png" alt="image3" /></p>

<p>Simply paste in the URL and press “Download”, and it will download the video to your “Downloads” directory.</p>

<h2 id="installation">Installation</h2>

<p>Pytube installation instructions can be found <a href="https://pytube.io/en/latest/user/install.html">here</a>.</p>

<p>The TLDR of the install instructions, if you have Python 3 already installed, is to open Terminal and enter:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ pip install pytube
</code></pre></div></div>

<p>If <code class="language-plaintext highlighter-rouge">pip</code> happens to be the python2 version, you can try</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ pip3 install pytube
</code></pre></div></div>

<p>instead.</p>

<p>The Shellmarks installation instructions can be found <a href="https://shannah.github.io/shellmarks/manual/#_installation">here</a></p>

<p>The TLDR of the install instructions, if you have npm installed, is to open Terminal and enter:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo npm install -g shellmarks
</code></pre></div></div>

<p>I have uploaded the shellmarks wrapper script <a href="https://github.com/shannah/shellmarks/blob/master/sample-scripts/pytube.sh">here</a></p>

<p>To install it in shellmarks begin by opening shellmarks by opening Terminal and running</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ shellmarks
</code></pre></div></div>

<p>After shellmarks opens, open the menu in the upper right corner and select “Import Script from URL”</p>

<p><img src="/assets/wp-content/uploads/2021/12/image1.png" alt="image1" /></p>

<p>You will the be prompted to enter the URL to the script:</p>

<p><img src="/assets/wp-content/uploads/2021/12/image2.png" alt="image2" /></p>

<p>The URL to the raw script is <a href="https://raw.githubusercontent.com/shannah/shellmarks/master/sample-scripts/pytube.sh">https://raw.githubusercontent.com/shannah/shellmarks/master/sample-scripts/pytube.sh</a></p>

<p>Paste that URL into the field and press “OK”.</p>

<p>This will install the script and refresh the shellmarks catalog. You should now see an entry as follows:</p>

<p><img src="/assets/wp-content/uploads/2021/12/image4-1024x424.png" alt="image4" /></p>

<p>Press “Run” to run the script. You’ll see the dialog prompting you for the video URL you want to download.</p>

<p><img src="/assets/wp-content/uploads/2021/12/image3.png" alt="image3" /></p>

<p>Paste any youtube URL in here and press “Download”. You’ll be able to see the progress of the download in the terminal you used to open shellmarks. When the download is complete, it will open the video in your preferred movie player.</p>

<p>NOTE: This script was developed for MacOS, and would need to be modified slightly to work on Linux or Windows.</p>

<p>You can now access this script directly from within Shellmarks anytime. If you want to run it directly from the command-line you could also simply run:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ shellmarks pytube
</code></pre></div></div>

<p>References:</p>

<ul>
  <li><a href="https://pytube.io/en/latest/">Pytube</a></li>
  <li><a href="https://github.com/shannah/shellmarks">Shellmarks Github Repo</a></li>
  <li><a href="https://shannah.github.io/shellmarks/manual/">Shellmarks Manual</a></li>
</ul>

<p>Photo by <a href="https://unsplash.com/@alexbemore?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Alexander Shatov</a> on <a href="https://unsplash.com/s/photos/videos?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p>]]></content><author><name>shannah</name></author><category term="Software Development" /><summary type="html"><![CDATA[Pytube is a great little Python utility for downloading videos from youtube as .mp4 files. It has a command-line interface that makes downloading videos as simple as entering the following command:]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="/assets/wp-content/uploads/2021/12/alexander-shatov-niUkImZcSP8-unsplash-1038x576.jpeg" /><media:content medium="image" url="/assets/wp-content/uploads/2021/12/alexander-shatov-niUkImZcSP8-unsplash-1038x576.jpeg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Automation, Organization, Documentation, and Sanity</title><link href="/blog/2021/12/21/automation-organization-documentation-and-sanity/" rel="alternate" type="text/html" title="Automation, Organization, Documentation, and Sanity" /><published>2021-12-21T08:52:21-08:00</published><updated>2021-12-21T08:52:21-08:00</updated><id>/blog/2021/12/21/automation-organization-documentation-and-sanity</id><content type="html" xml:base="/blog/2021/12/21/automation-organization-documentation-and-sanity/"><![CDATA[<p>I used to be the “Web Coordinator” in a university faculty, and I often had to provide tech support to the office staff. One morning I received an urgent call from one of the program assistants (let’s call her Carol) who had misplaced her notes, which, among other things, told her how to use her computer. I jogged down to her office, and found her with a panicked look on her face.</p>

<p>“What am I going to do, Steve?” she asked. “I’ve lost everything. I need to print out the reports for [something or another] and I don’t remember how to do it”.</p>

<p>Carol was a product of a time before computers, and had adapted to her new overlords with difficulty. She was only a few months away from retirement, but without her notes, it would be a rocky send-off.</p>

<p>“Don’t worry. I’m sure we can figure it out”, I assured her. “Do you remember which program you use to print the reports?”</p>

<p>“No.”, she replied. “I wrote it down in my book. But I can’t find my book”.</p>

<p>You’ll be relieved to know that she eventually found her book, and was able to print her reports. Earlier that morning she had been thumbing through some files in one of those big metal file cabinets, and had forgotten that she placed her book on top of the files. Luckily it was still there the next time she needed a file.</p>

<p>At the time, I recall finding a lot of humour in Carol’s predicament. It was further confirmation that my parents’ generation, of which Carol was a member, were clueless about technology. Imagine needing a book to tell you how to do your job?!</p>

<p>Fast forward twenty years. I now keep an exercise book where I write down notes on …. how to do my job. At the beginning of each day, I write the date at the top of the page, and I write down a short to-do list. I refer back to my previous entries and copy outstanding items into my list for today. In the back of the book I write down things that I will need longer term, like passwords.</p>

<p>If I lost my book, I’d be in a tight spot.</p>

<p>We will all be Carol some day.</p>

<h2 id="my-own-crisis-of-complexity">My Own Crisis of Complexity</h2>

<p>If only I could keep all of my development projects in my book.</p>

<p>I have more development projects on computer than I can easily enumerate. If I had to guess, it would be more than 300, less than 1000. At any given time, I have somewhere between 5 and 10 projects that I’m actively working on, and an another 30 or 40 that I’m regularly maintaining. Projects span many different computer languages, build tools, IDEs, and server types. Each project is associated with its own set of standard and obscure tasks. Despite almost all of these tasks being automated by build scripts and CI, the complexity of maintenance can still be overwhelming. When returning to a project that I haven’t worked on in a while (months/years/decades), it still takes a while to grok the project and figure out how to build it, test it, and deploy it again.</p>

<p>Projects that use Maven or Gradle are generally easier to dust off than, for example ANT, or ad-hoc projects. A working <code class="language-plaintext highlighter-rouge">mvn package</code> or <code class="language-plaintext highlighter-rouge">gradle build</code> command can help with building up some early momentum, but it is still only the beginning. Sometimes I get the “Build Successful” message, and then think to my self “Oh good, it builds! … um ..Now what?”</p>

<p>“I know I had a development server set up somewhere to run this before. Let’s see if I made a script to start that up.”</p>

<p>“Which server is this deployed to. And what passwords do I need?”</p>

<p>“The certificates are expired… how do I generate those again?”</p>

<p>“Oh.. there are build profiles called ‘production’, ‘release’, ‘live’, ‘beta’, and ‘staging’. Which one is <em>the one</em>.”.</p>

<p>“Ugh…. I hope I left some clues in the README”.</p>

<p>“Damnit! I can’t remember where I saved that project. Was it in ‘Projects’, ‘Xcode Projects’, ‘NetBeans Projects’, ‘tests’, ‘demos’, ‘work’?!!! Maybe I didn’t save it on this computer? Is it on Github? If so, does github have all the latest changes?!”</p>

<h2 id="a-place-for-everything-and-everything-in-its-place">A Place for Everything and Everything In Its Place</h2>

<p>To summarize, my problem is two-fold:</p>

<ol>
  <li>I don’t remember where I saved many of my projects.</li>
  <li>I don’t remember how to <em>use</em> (i.e. build/test/deploy) my projects once found</li>
</ol>

<p>What I really need is a <em>book</em> -like medium that includes a searchable catalog of all of my projects, along with any instructions required to use the project. Bonus if this catalog can include buttons or menus to perform the project’s automated tasks.</p>

<p>Over the weekend, I decided that it was time to solve this problem once and for all, so I built <a href="https://github.com/shannah/shellmarks">Shellmarks</a>.</p>

<p>Shellmarks provides a live catalog of all of my shell scripts including documentation and GUI launchers, all in one place.</p>

<h2 id="tuxpin-a-case-study">Tuxpin: A Case Study</h2>

<p>This morning I added an entry for <a href="https://www.tuxpin.com">Tuxpin</a> so that I can easily start and stop the development server, as well as deploy it to production. The Tuxpin server app is a PHP/MySQL application. It is built using <a href="https://xataface.com">Xataface</a>, which provides command-line scripts to start and stop the development Apache and MySQL servers. For deployment, I use a bash script that uses rsync to upload the app to the production server.</p>

<p>Up until now, when I want to work on Tuxpin, I start by opening Terminal, navigating to the tuxpin directory, and running <code class="language-plaintext highlighter-rouge">xataface start</code> – which starts up Apache on localhost port 9090 with the app.</p>

<p>When I want to deploy it I run <code class="language-plaintext highlighter-rouge">bash deploy.sh</code>.</p>

<p>Frankly, this isn’t too bad. However, I can imagine a slightly older version of me returning to this project after many months, or even years, and not remembering what to do. For the benefit of this future self, I have just created a Tuxpin management script in Shellmarks. When he wants to work on Tuxpin, all he needs to remember to do is open Shellmarks. He can then do a simple “Find” for “Tuxpin”, or he can find it in the table of contents:</p>

<p><img src="/assets/wp-content/uploads/2021/12/shellmarks-toc.png" alt="shellmarks-toc" /></p>

<p>The <em>Tuxpin</em> section, in shellmarks includes some very short documentation, links to the development server and PHPMyAdmin pages (that will open in the default web browser if the development server is running), and a button to manage the development server:</p>

<p><img src="/assets/wp-content/uploads/2021/12/tuxpin-shellmarks-section.png" alt="tuxpin-shellmarks-section" /></p>

<p>Pressing the “Run” button brings up a server management dialog with buttons to <em>Start</em> and <em>Stop</em> the server, and another button to show the server status:</p>

<p><img src="/assets/wp-content/uploads/2021/12/tuxpin-shellmarks-dialog.png" alt="tuxpin-shellmarks-dialog" /></p>

<p>This makes it dead simple to start working with the project. My future self won’t need to remember anything. He can figure it all out from the GUI.</p>

<h2 id="the-script">The Script</h2>

<p>The script is pretty simple.</p>

<p>Let me describe what’s going on here. The script has two parts:</p>

<ol>
  <li>The first part is a regular bash script that does the starting/stopping/status checking according to the values/presence of certain environment variables.</li>
  <li>The second part (after the <code class="language-plaintext highlighter-rouge">exit 0</code> line) is the dialog definition that shellmarks uses to build the dialog.</li>
</ol>

<p>The documentation shown in shellmarks is set in the <code class="language-plaintext highlighter-rouge">__description__</code> property. Its content is parsed as Asciidoc, so it can include links, headings, etc…</p>

<p>The buttons are defined by sections, whose names correspond with environment variables used by the script.</p>

<p>For example, the following definition results in a “Start Server” button being displayed in the dialog:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[startServer]
   type="button"
   label="Start Server"
   help="Start tuxpin server"
   disposeOnSubmit=false
</code></pre></div></div>

<p>If the user presses this button it will set the <code class="language-plaintext highlighter-rouge">$startServer</code> environment variable to “1” when it runs the script, so that the section</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>if [ ! -z "$startServer" ]; then
...
fi
</code></pre></div></div>

<p>is run.</p>

<h2 id="to-the-future-and-beyond">To the future and beyond</h2>

<p>I’ve ported one project into Shellmarks. There are hundreds more to do. But all in due time.</p>

<p>If you want to start organizing your life, you can install Shellmarks too.</p>

<p>Learn more in the <a href="https://github.com/shannah/shellmarks">Github Repo</a></p>

<p>Photo by <a href="https://unsplash.com/@wesleyphotography?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Wesley Tingey</a> on <a href="https://unsplash.com/s/photos/organization?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p>]]></content><author><name>shannah</name></author><category term="Software Development" /><category term="Stories" /><summary type="html"><![CDATA[I used to be the “Web Coordinator” in a university faculty, and I often had to provide tech support to the office staff. One morning I received an urgent call from one of the program assistants (let’s call her Carol) who had misplaced her notes, which, among other things, told her how to use her computer. I jogged down to her office, and found her with a panicked look on her face.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="/assets/wp-content/uploads/2021/12/wesley-tingey-snNHKZ-mGfE-unsplash-1038x576.jpeg" /><media:content medium="image" url="/assets/wp-content/uploads/2021/12/wesley-tingey-snNHKZ-mGfE-unsplash-1038x576.jpeg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Do Kids Still Read Computer Books?</title><link href="/blog/2021/09/16/do-kids-still-read-computer-books/" rel="alternate" type="text/html" title="Do Kids Still Read Computer Books?" /><published>2021-09-16T16:57:56-07:00</published><updated>2021-09-16T16:57:56-07:00</updated><id>/blog/2021/09/16/do-kids-still-read-computer-books</id><content type="html" xml:base="/blog/2021/09/16/do-kids-still-read-computer-books/"><![CDATA[<p>I still remember my first computer programming book. It was a glossy, black, brick of a book on PERL 5. I had started building web pages a few months prior, using the copy of Adobe PageMill that came with my bondi-blue iMac. It didn’t take long before I outgrew the “what you see is sort of what you get” interface of PageMill and started coding the HTML by hand. And it wasn’t long after that, that I entered the world of “copy-and-pasting Javascript” to gain a level of interactivity in my pages – or at least some scrolling status bar text. I started with a free Tripod account, but soon upgraded to “paid” so I could be rid of that pesky banner ad in the header.</p>

<p>In those early days, I learned mostly by viewing the page source of other webpages, and tried to make sense of the HTML code. One of my first projects was a “Search Remote” – basically a popup search window where people could select from a list of popular (and unpopular) search engines, and enter a query. We provided links that Netscape and Internet Explorer users could drag up to their bookmarks bar to make it easy to open the remote. At the time, there were a few search engines, notably GoTo.com, that would pay you a penny or two for each search query, so I would place these engines first in the list, and wait to get rich. I didn’t get rich, but I did learn a lot about HTML, Javascript, and search engines, and I pushed up against their limitations pretty quickly.</p>

<p>Below is a screenshot of the search remote installation page that I pulled from a Wayback machine <a href="https://web.archive.org/web/20010519093241/http://searchremote.ob.nu/">capture from 2001</a>. It’s missing some images, but you can get the idea.</p>

<p><img src="/assets/wp-content/uploads/2021/09/searchremote-screenshot-scaled.jpg" alt="Screenshot pulled from the Wayback machine showing the install page for the Search Remote.  Capture was from 1999.  It's missing a few of the images." />Screenshot pulled from the Wayback machine showing the install page for the Search Remote. Capture was from 1999. It’s missing a few of the images.</p>

<p>Back then, all of the search engines were pretty bad, so it was common practice to do a sort of “pub crawl” through all the main ones until you found what you were looking for. You’d start with Altavista (the search engine with the largest index), then you’d try Excite and Yahoo. If you still didn’t find what you were looking for you might try Lycos, Infoseek, or even AskJeeves. This is where my Search Remote comes in. Rather than have to navigate to 6 different search engines’ websites, you could perform all the searches from one place. It worked pretty well, but It still required the user to perform separate queries for each search engine. I wondered if there was a way to let the user perform a single query and have all of the results from the different engines combined into a single result set.</p>

<h2 id="meta-search-engines">Meta-Search Engines</h2>

<p>Sometimes, when you’re stuck on a problem, the watershed moment is simply learning the correct terminology for what you want to accomplish. In my case, as I soon learned, the name for what I wanted to build was a “meta search engine”, and I was not the first person to conceive of such a thing. Meta-search engines would allow a user to submit a single search query to a server-side CGI script, which would relay the query to 5 or 6 major search engines, in the background, and return all of the results back to the user. Some of them would merge the results into a single set, and sort them according to its own relevancy algorithm. Others would keep the results separate, presenting them on a webpage organized by search engine. Dogpile, my favourite meta-search engine at the time, would use the first method: merge the results into a single list, so it felt like a first-class search. (Side note: Just did a search and it looks like Dogpile still exists).</p>

<p><img src="/assets/wp-content/uploads/2021/09/dogpile-wayback-480.jpg" alt="Dogpile meta search as it appears in the wayback machine from Sept. 2, 1999" />Dogpile meta search as it appears in the wayback machine from Sept. 2, 1999)</p>

<p><a href="https://web.archive.org/web/19990902004646/http://www.dogpile.com:80/">See Dogpile on Wayback Machine</a></p>

<p>Without a server-side script, it is really hard to write a meta-search engine. This was before AJAX, so the only way to load things from the server from Javascript was using submission forms, and frames. We didn’t even have iframes yet. I tried to build one using pure Javascript, but the results left something to be desired. The best I could do was create a window with a separate frame for each search engine. This worked okay when there were only two search engines, but anything more than that and your “productivity” gains get lost in the clutter of tiny frames.</p>

<h2 id="cgi-the-undiscovered-country">CGI: The Undiscovered Country</h2>

<p>I think that most programmers have a certain resistance to learning new technologies, I was no different. I had cultivated familiarity with Javascript and HTML, but server-side programming was a remote country whose border crossings might as well have been guarded by barbed wire and machine guns. Not until I had exhausted all avenues on the Javascript side of that border, did I decide to venture forth into the untamed world of PERL. I started with things that were freely available online, such as the CGI specification, and the odd PERL tutorial. But the online ecosystem for programming tutorials was sparse, and discoverability was poor – nothing like today, where you can type in just about any programming topic you want, and find tutorials, examples, videos, tutorials, open source projects, and memes enough to keep you busy for months.</p>

<p>One day in my travels, I came across a PERL meta-search script that someone had posted on Hotscripts (or some similar free cgi script site). I printed it out with my Epson 740 inkjet printer, and proceeded to study it. At the time, it was a completely foreign language to me. I recall curling up in bed, on the couch, and in the hot-tub for hours at a time with these pages, poring over it line by line, trying to understand what was going on. It was like one of those pictures they used to display in shopping malls, where, at first, it looks like just a mess of textures, but if you stare at it long enough, you start to see a 3-D image emerge. This script, which, at first, was just a sequence of gibberish, would start to reveal its structure to me in fleeting moments of clarity.</p>

<p>The hours I spent studying that script were important to my growth as a programmer. I still didn’t fully understand what everything meant, and I certainly couldn’t have written my own search script yet, but it did provide me with a feel for what PERL looked like and, strangely, what it felt like. I was ready to graduate to the next level: an actual computer programming book.</p>

<p>Did I mention that I was broke at the time. I had started making webpages just at the end of a six month failed entrepreneurial adventure with a friend, and I was down to about twenty dollars in my bank account on a good day. Luckily, I was living at Casa de my parents where rent was reasonable (free), but I didn’t have a lot of money to spend on frivolities. Or essentials. That was OK, because I was going to be getting rich from my search remote any day now.</p>

<h2 id="to-the-bookstore">To the Bookstore</h2>

<p>So, when I entered my local Chapters to shop for computer books, I might as well have been shopping for high priced commercial real estate, as both were out of my price range. Computer books went for anywhere from $60 to $120 depending on how “hot” or specialized the topic was. Lack of funds did not deter this dreamer, though. I scanned through the tables of contents of several dozen books, trying to identify the one that spoke most directly to my interests. When I was a child I used to spend hours examining the toys section of the Sears Christmas catalog, imagining what it would be like to have all of these cool toys and sets. This was that, except replace “Masters of the Universe” with “Mastering PERL”.</p>

<p>After what seemed like minutes, but was probably closer to an hour, I had settled on this PERL book. It promised me close to a thousand pages of secrets that, up until now, the universe had greedily kept from me. All I had to do was figure out how to pay for it. A rich benefactor, perhaps?
That rich benefactor ended up being my Dad. I made a deal with him to build a website for his band if he bought the book for me. It was a win win. This book was my first real glimpse into the world of programming. Every page opened my eyes to new possibilities. Things I could build. With every new concept, my mind would start wandering to computer programs I had used in the past, and wondering if I could build something like them – or better.</p>

<p>I could fill a school gymnasium with the spaghetti code that this book (and the hundreds that followed it) inspired. When I later got a job, I started buying a new computer book every payday. Sometimes three or four books. Books on Java, PERL, PHP, HTML, Flash, Servlets, Applets, Game development… you name it. I was hooked. When computer books became more affordable and discount stores like “Half-priced Computer Books” started popping up, I was no longer only buying books on topics that interested me. I began buyings books that I might someday be interested in. I thought I’d won the lottery when, one day, I found a bookstore that was going out of business, and the owner said I could fill 4 big boxes with books for only $100.</p>

<p><strong>Side note</strong> : See my <a href="/blog/2021/04/10/star-wars-and-the-seven-laserdisc-players/">post</a> about that time I wanted Star Wars on LaserDisc but ended up with more than I had bargained for. Same personality traits seemed to dominate there as did here.</p>

<p>We are now almost twenty years removed from the computer books hay day. Book stores stock a paltry few books on programming now, and buying books on Amazon isn’t the same. I like to be able to pick up a book, thumb through it, and, um, smell it before I buy it. It’s not a purchase – it’s an experience.
I still frequent the computer books section of Value Village to see if I find anything interesting. Some recent hauls included The Macintosh Bible (7th Edition, 1998), Core Web3D (1999), and Core Swing Advanced Programming (2000). I love reading the preface and introduction sections. They add history and context to these old technologies, and serve as a sort of time capsule that reveals how the world looked to software developers at that time. I love reading 20+ year old predictions about the future, and laughing about how wrong they were, or marvelling at how spot-on they were.</p>

<p><img src="/assets/wp-content/uploads/2021/09/computer-books-800.jpg" alt="A few of the retro computer books that I picked up recently from Value Village" />A few of the retro computer books that I picked up recently from Value Village</p>

<h2 id="old-man-yells-at-cloud-reflects-on-good-ol-days">Old man yells at cloud, reflects on good ol’ days</h2>

<p>I wonder, if I were just getting started now, would I still gravitate towards the thousand-page textbook as a preferred method of learning? Or would I just watch a Youtube video. Information is so much more accessible than it was in the nineteen hundreds and there are many new forms of media that are available. There are online communities, question/answer sites, online courses, and video tutorials for just about everything imaginable on Youtube. For free! I suspect that “kids” these days don’t even bother with books. If that’s the case, then oh what a shame. They are missing out on a rich, comprehensive, noise-free medium that gives pure escape from the real world.</p>

<p>I’m not sure how many computer books I currently own. Probably more than 200 and less than a thousand. Most of them are stored away in boxes, spread between my parents’ basement, my garage, my furnace room, and my office, but few coveted titles still enjoy the prestige of sitting on my bookshelf.</p>

<h2 id="my-latest-project">My latest project</h2>

<p>The Search Remote didn’t exactly strike gold, but I have high hopes for my most recent project, <a href="https://www.tuxpin.com">Tuxpin</a>, which builds on my love for audiobooks and podcasts. It is an app (available on both iOS and Android) that allows you to listen to webpages in your podcast app. That project was built using many of the same technologies that I learned how to use at the beginning of my programming journey. PHP, MySQL, and Java. Sadly, it doesn’t contain a single line of PERL.</p>

<p><img src="/assets/wp-content/uploads/2021/09/tuxpin-website-800.jpg" alt="The website for my latest project, Tuxpin, which allows you to listen to webpages in your podcast app." />]<a href="http://www.tuxpin.com">5</a> The website for my latest project, Tuxpin, which allows you to listen to webpages in your podcast app.</p>

<h2 id="footnote">Footnote:</h2>

<p>I might have the original files for the search remote still stashed away on some 4 gigabyte hard drive, but it would require a lot of effort to retrieve it. But, in the same spirit that supplanted reference books with Google+Stack Overflow, I decided to do a quick search on the Wayback machine to see if it had any record of my debut web project. To my delight, they had both my “Homepage” project, and the search remote project. They are missing most of the images, but the page structure is there, and the search engine select lists are intact so you can see which search engines we supported. I’m impressed at the comprehensive list that I amassed. I must have had a lot of time on my hands.</p>

<ul>
  <li><a href="https://web.archive.org/web/20001206220400/http://search.ob.nu/">Search Homepage</a></li>
  <li><a href="https://web.archive.org/web/20010519093241/http://searchremote.ob.nu/">Search Remote</a></li>
</ul>

<p>Photo by <a href="https://unsplash.com/@sharonmccutcheon?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Sharon McCutcheon</a> on <a href="https://unsplash.com/s/photos/textbooks?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p>]]></content><author><name>shannah</name></author><category term="Software Development" /><category term="Stories" /><category term="Things I like" /><summary type="html"><![CDATA[I still remember my first computer programming book. It was a glossy, black, brick of a book on PERL 5. I had started building web pages a few months prior, using the copy of Adobe PageMill that came with my bondi-blue iMac. It didn’t take long before I outgrew the “what you see is sort of what you get” interface of PageMill and started coding the HTML by hand. And it wasn’t long after that, that I entered the world of “copy-and-pasting Javascript” to gain a level of interactivity in my pages – or at least some scrolling status bar text. I started with a free Tripod account, but soon upgraded to “paid” so I could be rid of that pesky banner ad in the header.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="/assets/wp-content/uploads/2021/09/splash-image-books-1038x576.jpg" /><media:content medium="image" url="/assets/wp-content/uploads/2021/09/splash-image-books-1038x576.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Take me there</title><link href="/blog/2021/07/22/take-me-there/" rel="alternate" type="text/html" title="Take me there" /><published>2021-07-22T09:55:33-07:00</published><updated>2021-07-22T09:55:33-07:00</updated><id>/blog/2021/07/22/take-me-there</id><content type="html" xml:base="/blog/2021/07/22/take-me-there/"><![CDATA[<p>I love reading, but I don’t have time to “just read” so I tend to consume a lot of written material in “audio” format. This allows me to “read” while I do other things, like walking, driving, cleaning, and cutting the lawn. I “read” a lot of audio books, and follow a short list of podcasts. For the past year or so, I’ve also been experimenting with the latest in <em>neural text-to-speech</em> systems like Amazon Polly for converting blog posts into audio format so that I can listen to them during my walks. The results are surprisingly good. In many cases, I actually prefer the “machine” narration to a human narration. The voice is natural-sounding and consistent.</p>

<p>My favourite type of book (or blog post) is one that tells a true story, especially stories that intersect my personal lived experience. E.g. Stories about the birth of technologies that I use or remember. Insider accounts behind the scenes of movies or TV shows that I have watched. Memoirs of people who experienced certain events that remember living through. The more I “read”, the more specific my “tastes” become. You might say I’ve become more <em>demanding</em> of writers.</p>

<p>One of the most important qualities that I look for in writing is the ability to “take me there”. Books that give a mere account of what happened are barely better than reading a wikipedia article. I want a story to transport me into the time and place in which the described events occurred. I want to feel like a fly on the wall, so that I can imagine what it was like to be living in the story. Memoirs and personal anecdotes have a natural advantage for achieving this level of intimacy because the default is to see the events through the story-teller’s eyes. However, it is still possible to miss the target by focusing too much on sequence of events, and not enough on setting the scene and conveying <em>how it felt</em> to be there.</p>

<p>“The map is not the territory” is a well-known mental model that provides an analogy of what I’m looking for in a story. One way to explain this model is to consider that a <em>map</em> of Paris is not <em>Paris</em>. It is only a <em>map</em> the shows you where things are located from a birds-eye view. It doesn’t provide you with any information about <em>what it feels like</em> to walk the streets of Paris, or experience any of the historical landmarks. When I read a story, I want it to provide me with the <em>territory</em>. I can get the <em>map</em> off of Wikipedia or other reference sources.</p>

<p>My first exposure to this sort of story-telling was <a href="https://en.wikipedia.org/wiki/Console_Wars_\(book\)">Console Wars</a> by <a href="http://www.blakejharris.com/about">Blake J. Harris</a>. It tells the story of the early nineties’ battles between Sega and Nintendo using a technique called as “Scene-based storytelling”. I had never experienced anything quite like it. It felt almost like I was living through a movie, as each bit of history was told through a scene. I don’t know how he was able to put together such a vivid picture the characters and conversations, but however he accomplished it, the end result was magic.</p>

<p>I immediately read his follow-up book <a href="https://www.harpercollins.com/products/the-history-of-the-future-blake-j-harris?variant=32207599697954">History of the Future</a> which uses the same technique to similarly vivid results.</p>

<p>These two books raised the bar for me, and I still have not found anything that quite “takes me there” like they do. I’m always looking, so any recommendations are appreciated.</p>

<p>More recently I’ve started “reading” the <a href="https://madned.substack.com/">Mad Ned Memo</a>, that includes stories from the computer/software industry by a 40-year veteran. His posts are always insightful, and usually combine a theme or timeless truth with some entertaining anecdotes. Not only do his stories “take me there”, they also take me back to my own parallel experiences in my early days of software development. I really wish I could find more content like this.</p>

<p>If you have done any type of software development, or participated in the development of long forgotten projects, I’d love to read about your experiences.</p>

<p>Photo by <a href="https://unsplash.com/@clever_visuals?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Clever Visuals</a> on <a href="https://unsplash.com/s/photos/book-imagination?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p>]]></content><author><name>shannah</name></author><category term="Software Development" /><category term="Stories" /><category term="Things I like" /><summary type="html"><![CDATA[I love reading, but I don’t have time to “just read” so I tend to consume a lot of written material in “audio” format. This allows me to “read” while I do other things, like walking, driving, cleaning, and cutting the lawn. I “read” a lot of audio books, and follow a short list of podcasts. For the past year or so, I’ve also been experimenting with the latest in neural text-to-speech systems like Amazon Polly for converting blog posts into audio format so that I can listen to them during my walks. The results are surprisingly good. In many cases, I actually prefer the “machine” narration to a human narration. The voice is natural-sounding and consistent.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="/assets/wp-content/uploads/2021/07/clever-visuals-iMwiPZNX3SI-unsplash-1-1038x576.jpeg" /><media:content medium="image" url="/assets/wp-content/uploads/2021/07/clever-visuals-iMwiPZNX3SI-unsplash-1-1038x576.jpeg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Star Wars and the Seven Laser Disc Players</title><link href="/blog/2021/04/10/star-wars-and-the-seven-laserdisc-players/" rel="alternate" type="text/html" title="Star Wars and the Seven Laser Disc Players" /><published>2021-04-10T19:26:40-07:00</published><updated>2021-04-10T19:26:40-07:00</updated><id>/blog/2021/04/10/star-wars-and-the-seven-laserdisc-players</id><content type="html" xml:base="/blog/2021/04/10/star-wars-and-the-seven-laserdisc-players/"><![CDATA[<p>Photo by <a href="https://unsplash.com/@arturtumasjan?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Artur Tumasjan</a> on <a href="https://unsplash.com/s/photos/starwars-laserdisc?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</p>

<p>This post was inspired by the recent <a href="https://retroist.com/retroist-laserdisc-podcast/">Retroist podcast on LaserDiscs</a>.</p>

<p>A few years ago, I was browsing through the Twitter feed on my phone while waiting for the kettle to boil when I stumbled upon a news story about a community initiative to create a DVD version of the Theatrical Star Wars trilogy. I was momentarily surprised that this was news at all. Surely this has been available for ages now, I thought.</p>

<p>But a little bit of searching reminded me of the conundrum. When George Lucas re-released Star Wars in theatres in 1997, he monkeyed with them. He added scenes and lots of new computer imagery. And he made Greedo shoot first.</p>

<p>Of course, I knew all this, but I assumed that there must be a legit DVD version of the <em>original</em> , unaltered theatrical release available by now.</p>

<p>In fact, there was <a href="https://www.startribune.com/original-star-wars-films-available-on-dvd-if-you-re-willing-to-settle/360627281/"><em>one</em> version</a>, included on a bonus disc in the limited edition DVD release of episodes IV to VI; but the quality is apparently disappointing because it was sourced from the 1993 <em>LaserDisc</em> release.</p>

<p>Upon reading the word <em>LaserDisc</em> , my mind wandered to the nostalgic realm of yesteryear when my friends and I would frequent the demo rooms at A&amp;B Sound. There we would crank the subwoofer, cue up the T2 LaserDisc, and watch in bliss as Schwarzenegger blazed a trail through the Los Angeles viaduct system on his bad-ass Harley Davidson. LaserDiscs were a high-end luxury item that a kid like me could dream of, but never afford. Even if I could have scrounged up enough to buy a player, I’d quickly go broke from the cost of the discs – I recall that $100 per movie was pretty standard.</p>

<p>As my mind veered back to the present, it skidded over a slick patch, and a terribly wonderful idea was born.</p>

<p><em>That was like 25 years ago!</em> , I thought to myself. I’ll bet I can pick up a LaserDisc player from Craigslist for almost nothing. And how hard could it be to find a LaserDisc copy of Star Wars?</p>

<p>What if… stay with me here…, I bought a LaserDisc player for the single purpose of playing the original theatrical release of Star Wars? It would be the new jewel of my home theatre – and I would be the envy of the neighbourhood. While all these other suckers were suffering through the lamely modified special editions, or adjusting the tracking on their degraded VHS copy of Star Wars, I would be enjoying the trilogy that started it all on <em>LaserDisc</em>!</p>

<p>The kettle was now boiled, so I poured it into the pot to start the steeping process. Then I resumed my planning for <em>operation LaserDisc</em>.</p>

<p>First stop, Craigslist, where I hoped to find a cheap player. I assumed I’d have to try eBay for the movies themselves. I typed in “LaserDisc” into the search field, pressed the “Search” button. To my amazement, the very first thing that came up was the Star Wars box set on LaserDisc! It was listed as part of a lot of LaserDiscs. Two boxes of them for $50.</p>

<p>The plan was <em>only</em> to get Star Wars. But $50 was well within my cost tolerance for a foolish impulse buy, so if they <em>forced</em> me to take the rest of the discs, then I wasn’t going to complain. I could have that LaserDisc collection that I had always wanted back in ’94.</p>

<p>The tea was finished steeping now, so I poured it into my mug, took a sip, and started plotting my journey to the pawn shop where the discs were being held.</p>

<p>When you are a parent of small children, you can’t just pick up and leave on a whim. You need to negotiate with your wife, first. Depending on the success of the negotiation you may end up with anywhere between zero and three travel companions. Best case scenario, is your wife has your back, and you can just walk out the door and seek your glory. The worst case scenario is that you have some obligation that you forgot about, and you can’t begin the mission at all. The other three possible outcomes are, in decreasing order of <em>goodness</em> are:</p>

<ol>
  <li>You have three travel companions. Two half-lings and a wife.</li>
  <li>You have one travel companion.</li>
  <li>You have two travel companions.</li>
</ol>

<p>It is worth noting that option <em>1</em> , while being preferable to the other two, may involve a more rigorous preparation of rations, and thus it may take longer to get the wagons moving.</p>

<p>On this occasion, it would just be me and my almost-two-year-old apprentice, Apollo.</p>

<p>After finishing my Tea, I packed Apollo into his car seat, and we started off on our fateful journey.</p>

<p>We arrived at our destination about 40 minutes later. It was a small concrete building with barred windows on a fast and wide stretch of King George highway. There were no other cars in the parking lot, but there was a neon “Open” sign in the window, that gave me some assurance that I was in the right place.</p>

<p>Before getting out of the car, I took a quick glance around the neighbourhood, to assess whether there was any way I could pull this off without bringing Apollo in with me. The assortment of Tattoo parlours and questionable-looking passers-by, combined with the mild, but warm temperature forced my hand. Apollo would be joining me.</p>

<p>I unbuckled him, and lifted him out of the seat, then carried him to the door, which was locked. After ringing the door bell, we were buzzed in.</p>

<p>A guy behind the counter asked if he could help me and told him I was there for the <em>Star Wars</em> LaserDisc.</p>

<p>He pulled out two cardboard boxes from the back room and placed them on the counter. I asked if he would be willing to sell <em>just</em> the <em>Star Wars</em> , but he said he couldn’t. I didn’t protest much. I just pulled out my wallet and paid.</p>

<p>The trek back to the car was a multi-trip affair, holding Apollo in one arm and a box of LaserDiscs in the other. The two boxes fit nicely in the back of the car. Sometimes that “hatch-back” comes in handy.</p>

<p>And so the first act of our adventure was complete. We had secured our treasure. Now we just needed to acquire the player.</p>

<p>Sitting in the parking lot of the Pawn shop, I browsed through the Craigslist ads to see if there were any listings on my way home. There was <em>one</em> that was conveniently located in Cloverdale, about half way to home. The ad said he had seven laser disc players, and a whole bunch of movies. All I needed was one player. Perhaps he would be willing to do me a solid and break up the band for me.</p>

<p>“Which one do you want?”, he asked.</p>

<p>“Which one is the best?”, I replied.</p>

<p>“It depends”, he said. “One or two of them may not work – I don’t remember.”</p>

<p>I asked him to send me the model numbers so I could do a little bit of research. He sent me the list and I went to work trying to figure out which one would be best. Unfortunately, LaserDisc largely pre-dates the internet so finding specs on these models was difficult.</p>

<p>After a rather unfruitful ten minute rapid-fire Google session, I decided to just drive there and see what he had.</p>

<p>When we arrived at the guy’s house, he came out and met us.</p>

<p>“Let me show you what I have”, he said.</p>

<p>He opened the door to a storage room adjacent to the house. Inside there were boxes stacked floor to ceiling, and a smattering of electronics.</p>

<p>“Hold on”, he said as he forged a path through the stacks.</p>

<p>I followed him to the back of the room where he had two towers of LaserDisc players. Some of the units looked like they cater more to Karaoke, as they had microphone inputs, volume knobs, and Japanese writing on them. Others were more familiar (Pioneer) and looked like they were more appropriate for movie watching.</p>

<p>“Can you give me any indication of which one is the best one?”, I asked. I knew we had been over this ground earlier by text, but I thought that it was worth a shot to try again, now that we were face to face. Perhaps his body language would provide that extra bit of insight that would help me to decide.</p>

<p>He hummed and hawed a little.</p>

<p>“It’s really hard to say”, he said. “It has been so long since I’ve had them hooked up. I just can’t remember which ones work and which ones don’t”.</p>

<p>“I’ll tell you what”, he said. “Why don’t I just give you the whole lot for, say, $100?”</p>

<p>“Is that just the players, or for all the movies too?”.</p>

<p>I think he had been asking $250 for the lot in the ad – and he mentioned there were hundreds of movies and karaoke discs.</p>

<p>“The movies too”, he replied.</p>

<p>I thought about it for a moment. My gut said, <em>hell yes! I want it all!</em>. But my sober, responsible, self-aware inner adult wondered if this was, for lack of a better word, <em>hoarding</em>. I thought about the original, minimal vision that I had constructed for this project only 3 hours earlier, waiting for my tea to steep. “One LaserDisc player, and one box set… That’s it. That’s all I need”, I had told myself.</p>

<p>“Sounds good! I’ll take it all”. My hoarding inner child won the argument decisively.</p>

<p>Apollo sat patiently in his rear-facing car seat as cardboard boxes began to grow around him. Unfortunately the car reached maximum capacity prematurely, so we had to unload some of it and strategize ways to pack it in more efficiently. LaserDiscs abhor a vacuum, and we did their bidding by filling every possible space in that car. You’d be lucky to fit a baseball card in that car by the time were were done.</p>

<p>You’ll be relieved to know that I didn’t pile anything on top of Apollo. Beside, behind, underneath, but not on top. Though it did cross my mind.</p>

<p><em>“Don’t look at me, I’m hideous!”</em></p>

<p>That’s the first thing I said to my wife when I arrived home with a weighed-down car, bursting at the seams with obsolete analog media.</p>

<p>I had returned from the sanctum sanctorum with the ultimate boon: <em>LaserDiscs with the original theatrical release of Star Wars, and a laser disc player.</em>. And a few hundred other discs, and six more players.</p>

<p>Surely one of them must work, right? Right??</p>

<p>Stay tuned for the next instalment, where I test each player, disqualifying the ones that emitted bad smells and demonic sounds to settle on the one that <em>almost</em> worked perfectly. Then got it repaired for twice the cost of the entire rest of this adventure. And then bought two copies of <em>Rocky III</em> on eBay.</p>

<p><img src="/assets/wp-content/uploads/2021/04/IMG_9578-1-1024x768.jpg" alt="IMG_9578 (1)" /></p>

<p>Photo of me, by my wife.</p>]]></content><author><name>shannah</name></author><category term="Stories" /><summary type="html"><![CDATA[Photo by Artur Tumasjan on Unsplash.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="/assets/wp-content/uploads/2021/04/artur-tumasjan-42l3tjsJGyw-unsplash-1-1038x576.jpg" /><media:content medium="image" url="/assets/wp-content/uploads/2021/04/artur-tumasjan-42l3tjsJGyw-unsplash-1-1038x576.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>