Monday, May 20, 2013

Introducing Complete! A Trading Card Checklist App

In the winter of 1982, the TI 99/4A became the first personal computer to be carried in the JC Penney catalog. Texas Instruments was locked in battle with their main rival, Commodore, over the emerging personal computer market. Commodore enjoyed an advantage with more shelf space devoted to their products in stores, so TI was eager to find any sales advantage it could. Penney’s warehouses were full of TI computers and they sold well at first. Unfortunately for TI, Commodore was aggressively pricing their main rival, the Vic–20 and still making a profit. TI felt like they needed to match the price and were eventually selling their machine at the break even point. The fall before the TI machine began selling in the JC Penney catalog, Commodore introduced the Commodore 64. In early 1983, Commodore placed a rebate of 100 dollars on the 64 and the TI machine was in trouble. By the end of the year, Commodore’s sales were far outpacing that of TI. JC Penney’s warehouses were crammed full of the machines. The writing was on the wall. Texas Instruments announced in October of 1983 that they were getting out of the personal computer business.

JC Penney had to get rid of their excess inventory, so they shipped around a hundred TI computers to each of their stores for a mega-sale. The TI 99/4A was originally priced at 525 dollars upon release. JC Penney advertised an early morning price of just fifty dollars for each machine one weekend near Christmas. I was a fairly smart and I did well in school so my parents wanted me to have a computer. They were among the first to arrive at the mall that morning. Unfortunately, hundreds of people showed up. My Mom remembers being pinned to the door and couldn’t even open it. When my Dad got in, he more or less fought his way to the computers and snagged me one. It was a fateful moment in my life and everything that followed was informed by my parent’s getting me that TI 99/4A. When I last saw it, I had placed it into the dumpster at my apartment complex in Gurnee, IL in 1998. I hadn’t used it in a decade.

Back then, every computer you could buy would come with a book that would teach you the BASIC programming language. As much as I loved my TI Invaders and Parsec cartridge games for the machine, I loved messing around with BASIC even more. The first “substantial” program I wrote printed a list of my favorite major league baseball team on the screen with a number and prompted the user to choose a team. After the user selected a team, a number of details would display about the team. I was proud of my little program and proudly saved it to cassette tape so I could reload it and tweak it whenever I wanted. My Mom would eventually buy me TI’s Advanced BASIC cartridge which provided support for sprites and other programming constructs which allowed me to create and tweak games and such.

Any programmer will tell you that the best programs are the ones that are most useful, even if they are simple to an absurd degree. By the time I learned BASIC, I had already been collecting baseball cards for as long as I could remember. When a new set would come out, I would take out a sheet of notebook paper and write numbers, from one to the last card in the set. Then, I could go through my cards and cross off each card I had. It was my first not-so-quick and dirty method of building a want list. As soon as I read about a FOR loop and got my first printer, I knew I had a new method of generating want lists.

10 FOR I = 1 TO 792
20     PRINT I
30 NEXT I

When I started high school, all of my friends had Commodore 64s with the 1541 disk drive. They also had games coming out of their ears. Every day, my friends would trade disks with each other so everyone had the newest games. My TI was starting to feel a little old. My freshman year of high school I was given an Commodore 128 for my birthday. It was a pretty amazing little machine. It was a Commodore 64 so I could play all of the games that my friends had been trading. It was a Commodore 128 which allowed me to continue programming in an advanced form of BASIC. It also included a Z80 processor which made it a CP/M machine. CP/M was an operating system on par with MSDOS or a scaled down UNIX and there was a ton of open source and public domain software available for the machine. Using CP/M and the GCC compiler, I taught myself C programming and started writing as many little utilities for it as I could. Naturally, I moved my checklist generation over to the new machine and rewrote it in C.

int i;
for (i = 1; i <= 792; i++)
{
    printf (“%d “, i);
}

My education in programming would continue. My Junior year in high school I was introduced to the IBM PC and the System 34 where I learned COBOL and RPG and continued my education in C. In college, I would learn Pascal and Ada on the PCs in the lab, and later, C++ on some amazingly powerful Sun Workstations that were donated to the computer science department. Eventually, I would own my own series of PCs, both desktops and laptops. Through my job, or on my own, I never stopped learning new languages, like Perl, Java, C#, Javascript, PHP, Python and many others. At some point, I switched to the Mac where I’ve taught myself Ruby and Objective-C. I’ve also never stopped writing short and quick checklist programs for my baseball card collection.

1.upto(792) do |i|
    puts i.to_s + ‘ ‘
end

At heart, I’m something of a lazy person. The whole point of automatically generating a checklist was laziness. Now I find myself with a stack of paper checklists where I have dutifully gone through my collection and checked off the cards I have, but I still haven’t entered them in my computer so that the people I trade with can see what cards I need. (I also have this annoying tendency to misplace the paper.) According to Larry Wall, the creator of Perl, laziness is a virtue for a programmer. I needed a better way. I tried using spreadsheets and my Macbook, but a laptop was just too big and it was too hard to click a number between every card as I flipped through them. The more I thought about it, the more my iPhone and iPad with their touch interface seemed like a perfect fit for what I wanted to do.

I had already written four apps for the App Store and I’ve made enough money to buy myself a cheap lunch every few weeks. This seemed like a simple enough project, so I’ve spent the last two months working on it in my spare time and I’m happy to announce Complete! A Trading Card Checklist App. The app serves one simple function. It allows the user to add a set to the app by specifying the starting card number and the number of cards in the set. Then, by tapping a number in the list, the app records that you have the card. You can tap additional times for multiple copies of the card you want to use as trade bait. The app will generate your want list and trade bait list for you. You can email the lists or you can save them to Dropbox or your Google Drive. The lists are generated in HTML to make it easy to post the lists to your own blog or site for easy posting.

This is a simple app and I should take a minute to note what it will NOT do.

  • It will not sync lists across your devices. Yet. (I’m looking in to several syncing solutions. For you geeks, I use Core Data behind the scenes to store the app’s data. Unfortunately, Apple’s Core Data sync is abysmal and unreliable and thoroughly awful in every way.)
  • There is also no method for sharing lists with other users of the app. I’m working on a simple solution for this and will (eventually) have it available as a free update to the app.
  • The only data stored for each card is the card number and the quantity of the card you have. The app does not provide a method for tracking the name of the players on the card or anything else. This is a simple app and I don’t see this ability being added. I’m not saying I won’t … I’m just saying I have no plans.
  • The app will not run on any non-iOS device. This means that there is not a version of this app for Android devices. This shouldn’t be taken as some sort of anti-Android statement. I like a lot of Android devices and even own a Google Nexus 7. However, I do hate Java. I’m not saying I won’t build an Android version, I’m just saying that my aversion to all things Java means I won’t be jumping on it any time soon.

So, that’s an awful lot of words to announce a fairly simple little project and an app. You can find out more about the app on the elocinSoft website. You can buy the app for just 99 cents on the App Store. It will work on any iPhone, iPod or iPad running version 6.0 of iOS or higher.

A Look at Complete! A Trading Card Checklist App from Chris Mays on Vimeo.

3 comments:

Captain Canuck said...

pretty cool, and a big congrats.

too bad about limiting your market to iphone users though. Pretty much old people and high school girls ;)

I enjoyed your back in the day story... I too remember getting a C64 with external floppy and cassette drives. That floppy drive would groan and moan and almost vibrate right off the table.

I also had a TRS-80 from Radio Shack... wrote a lot of cute little games for that one myself. But those cartridge games really limited what you could doo...

Anonymous said...

interestingly, no mention of Apple II, which I was programming on in '79.

Ryan said...

COngratulations on the APP - it's downloading right now.....