Categories
Players

Jerry Lawson, inventor of the videogame cartridge

Fellow gamers, pay tribute to the gentleman in the photo above. He’s Gerald “Jerry” Lawson, and he was in charge of creating the first videogame console that could play different games by using interchangeable ROM cartridges:

That console was the Fairchild Channel F (also known as the Fairchild Video Entertainment System), which debuted in November 1976, almost a full a year before the better-remembered Atari VCS (later renamed the Atari 2600).

The Fairchild Channel F console. Tap the photo to see it at full size.

Here’s a quick run-down of its specs:

Feature Notes
CPU Fairchild F8 8-bit microprocessor running at 1.79 MHz
RAM
  • 2 KB for video framebuffer
  • 64 bytes of “scratchpad memory” (memory used for temporary storage of calculation results, data, and other processing)
  • Some cartridges would provided addition static RAM if needed — as much as 1 KB or slightly more
Video
  • Screen resolution of 128 * 64 pixels, but depending on the TV set it was connected to, typically 102 * 58 pixels would be visible onscreen
  • 60 Hz screen refresh rate
  • Support for 8 colors onscreen
Sound System could generate beeps at three different frequencies:

  1. 120 Hz
  2. 500 Hz
  3. 1 KHz

 

A younger Jerry Lawson. In case you were wondering, that thing in his hand is a slide rule or “slipstick” in engineering slang, an analog calculator that made use of logarithms to perform multiplication and division. You should be thankful we don’t need them anymore.

Lawson was born in Brooklyn on December 1, 1940 and grew up in Queens. His father was an avid reader of science books, and his mother was a city employee who also was president of the PTA at his nearly all-white school. He kept inspired in his studies with a picture of black scientist and inventor George Washington Carver.

He pursued a number of scientific and engineering interests as a boy, performing chemistry experiments and using ham radios. In his teens, he earned money repairing TVs, which was a little more hazardous in those days, as the cathode ray tube-based televisions of that era worked with extremely high voltages (I myself used to play with them as a teenager in some highly unrecommended ways).

In the early 1970s, Lawson joined the Fairchild Camera and Instrument Corporation in Silicon Valley as a design consultant who roved from project to project. One of the projects he worked on was the classic 1970s arcade videogame Demolition Derby (the Chicago Coin version, not the Midway version from the 1980s), which featured some surprisingly clever programming — the computer-controlled cars acted “smart” enough to try and dodge your attacks. In his spare time, he was a member of the legendary Homebrew Computer Club, where he was one of its two black members.

Lawson’s experience in videogames — a bleeding-edge and esoteric line of work at the time — led Fairchild to put him in charge of its videogame division. As leader of the team that created their console, he helped bring about the concept of game cartridges, a revolutionary concept at the time. In those days, consoles had their games “hard-wired” onto their circuit boards, and what you bought was what you got. He also oversaw the development of a new processor, the Fairchild F8, to power the system.

Unfortunately, the Channel F was eclipsed by the Atari 2600. Lawson left Fairchild in 1980 to found the videogame company Videosoft and also did consulting work.

Let’s all hold a controller in the air for Jerry Lawson, videogaming pioneer!

Find out more about Jerry Lawson

Here’s a 2018 video from Microsoft Developer, featuring Jerry’s children talking about their dad:

Here’s 1Life2Play’s tribute:

Here’s an ad for the Channel F from 1976:

Here’s a RetroManCave overview of the Channel F:

Here’s Erin Play’s review of the Channel F, which includes reviews of several cartrdiges:

And finally, here’s a three-party featuring Lawson speaking at the Computer History Museum in 2006:

Categories
Programming

A couple of handy Python methods that use regular expressions: “Word to initialism” and “Initialism to acronym”

Comic by xkcd. Tap to see the source.

tl;dr: Here’s the code

It’s nothing fancy — a couple of Python one-line methods:

  • word_to_initialism(), which converts a word into an initialism
  • initialism_to_acronym(), which turns an initialism into an acronym
import re

def word_to_initialism(word):
  """Turns every letter in a given word to an uppercase letter followed by a period.
  
  For example, it turns “goat” into “G.O.A.T.”.
  """
  return re.sub('([a-zA-Z])', '\\1.', word).upper()

def initialism_to_acronym(initialism):
  """Removes the period from an initialism, turning it into an acronym.

  For example, it turns “N.A.S.A.” into “NASA”.
  """
  return re.sub('\.', '', initialism)

The project and its dictionary

I’ve been working on a Python project that makes use of a JSON “dictionary” file of words or phrases and their definitions. Here’s a sample of the first few entries in the file, formatted nicely so that they’re a little more readable:

{
   "abandoned industrial site": [
      "Site that cannot be used for any purpose, being contaminated by pollutants."
   ],

   "abandoned vehicle": [
      "A vehicle that has been discarded in the environment, urban or otherwise, often found wrecked, destroyed, damaged or with a major component part stolen or missing."
   ],

   "abiotic factor": [
      "Physical, chemical and other non-living environmental factor."
   ],

   "access road": [
      "Any street or narrow stretch of paved surface that leads to a specific destination, such as a main highway."
   ],

   "access to the sea": [
      "The ability to bring goods to and from a port that is able to harbor sea faring vessels."
   ],

   "accident": [
      "An unexpected, unfortunate mishap, failure or loss with the potential for harming human life, property or the environment.",
      "An event that happens suddenly or by chance without an apparent cause."
   ],

   "accumulator": [
      "A rechargeable device for storing electrical energy in the form of chemical energy, consisting of one or more separate secondary cells.\\n(Source: CED)"
   ],

   "acidification": [
      "Addition of an acid to a solution until the pH falls below 7."
   ],

   "acidity": [
      "The state of being acid that is of being capable of transferring a hydrogen ion in solution."
   ],

   "acidity degree": [
      "The amount of acid present in a solution, often expressed in terms of pH."
   ],

   "acid rain": [
      "Rain having a pH less than 5.6."
   ],

   "acid": [
      "A compound capable of transferring a hydrogen ion in solution.",
      "Being harsh or corrosive in tone.",
      "Having an acid, sharp or tangy taste.",
      "A powerful hallucinogenic drug manufactured from lysergic acid.",
      "Having a pH less than 7, or being sour, or having the strength to neutralize  alkalis, or turning a litmus paper red."
   ],

...

}

The dictionary’s keys are strings that represent the words or phrases, while its values are arrays, where each element in that array is a definition for that word or phrase. To look up the meaning(s) of the word “acid,” you’d use the statement dictionary["acid"].

Dictionary keys are case-sensitive. For most words and phrases in the dictionary, that’s not a problem. Any entry in the dictionary that isn’t for a proper noun (the name of a person, place, organization, or the title of a work) has a completely lowercase key. It’s easy to massage a search term into lowercase with Python’s lower() method for strings.

Any entry in the dictionary that is for a proper noun is titlecased — that is, the first letter in each word is uppercase, and the remaining letters are lowercase. Once again, a search term can be massaged into titlecase in Python; that’s what thetitle()method for strings is for.

When looking up an entry in the dictionary, my application tries a reasonable set of variations on the search term:

  • As entered by the user (stripped of leading and trailing spaces, and sanitized)
  • Converted to lowercase with lower()
  • Converted to titlecase with title()
  • Converted to uppercase with upper()

For example, for the search term “FLorida” (the “FL” capitalization is an intentional typo), the program tries querying the dictionary using dictionary["FLorida"], dictionary["florida"], and dictionary["Florida"].

Looking up words or phrases made out of initials are a little more challenging because people spell them differently:

  • The Latin term for “after noon” — post meridiem — is spelled as pm, p.m., PM, and P.M.
  • Some people write the short form for “United States of America” as USA, while others write it as U.S.A.

To solve this problem, I wrote two short methods:

  • word_to_initialism(), which converts a word into an initialism
  • initialism_to_acronym(), which turns an initialism into an acronym

Here’s the code for both…

import re

def word_to_initialism(word):
  """Turns every letter in a given word to an uppercase letter followed by a period.
  
  For example, it turns “goat” into “G.O.A.T.”.
  """
  return re.sub('([a-zA-Z])', '\\1.', word).upper()

def initialism_to_acronym(initialism):
  """Removes the period from an initialism, turning it into an acronym.

  For example, it turns “N.A.S.A.” into “NASA”.
  """
  return re.sub('\.', '', initialism)

…and here are these methods in action:

# Outputs “G.O.A.T.”
print(f"word_to_initialism(): {word_to_initialism('goat')}")

# Outputs “RADAR”
print(f"initialism_to_acronym(): {initialism_to_acronym('R.A.D.A.R.')}")

Both use regular expressions. Here’s the regular expression statement that drivesword_to_initialism():

re.sub('([a-zA-Z])', '\\1.', word)

re.sub() is Python’s regular expression substitution method, and it takes three arguments:

  • The pattern to look for, which in this case is [a-zA-Z], which means “any alphabetical character in the given string, whether lowercase or uppercase”. Putting this in parentheses puts the pattern in a group.
  • The replacement, which in this case is \\1.. The \\1 specifies that the replacement will start with the contents of the first group, which is the detected alphabetical character. It’s followed by the string literal . (period), which means that a period will be added to the end of every alphabetical character in the given string.
  • The given string, in which the replacement is supposed to take place.

The regular expression behind initialism_to_acronym() is even simpler:

re.sub('\.', '', initialism)

In this method, re.sub() is given these arguments:

  • The pattern to look for, which in this case is \., which means “any period character”.
  • The replacement, which is the empty string.
  • The given string, in which the replacement is supposed to take place.
Categories
Current Events Tampa Bay

What’s happening in the Tampa Bay tech/entrepreneur/nerd scene (Week of Monday, June 8, 2020)

Greetings, Tampa Bay techies, entrepreneurs, and nerds! Welcome to the June 8, 2020 edition of the list! Here’s this week’s list of online-only events for techies, entrepreneurs, and nerds based in an around the Tampa Bay area. Keep an eye on this post; I update it when I hear about new events, it’s always changing. Stay safe, stay connected, and #MakeItTampaBay!

When will this list include in-person events?

The answer, for now, is “not just yet.”

This past week, Florida has had two consecutive days with more than a thousand new cases per day…

…and in our particular neck of the woods, we’ve seen the highest total of new cases for the week:

With these numbers in mind, I’m opting to list only those events that I know are online only for the time being.

Monday, June 8

Tuesday, June 9

Wednesday, June 10

Thursday, June 11

Friday, June 12

No online events are listed…yet!

Saturday, June 13

Sunday, June 14

Categories
Current Events Tampa Bay

Announcing the Suncoast Developers Guild Summer Solstice Hackathon (June 19 – 21, online)!

Hey, Tampa Bay developers — here’s a chance to build something awesome together! Suncoast Developers Guild is holding an online Summer Solstice Hackathon, and it’s happening in just a couple of weeks: June 19th through 21st! As they put it, it’s an opportunity to “spend the longest day of the year solving the hardest challenges of 2020 with fellow developers, designers, and champions of economic development in our region.”

There will be three key themes for this hackathon:

Pandemic preparedness and recovery: Every day in this region, software developers are solving problems for non-profits, businesses, families, and communities. As COVID-19 has shown us, this recovery depends on solving problems in creative ways. How can we best be prepared for the next pandemic?

Inclusion, diversity, and intersectionality in the tech workforce: Yes, Houston, we have a problem. When a workforce does not represent the communities it serves, it causes harm and hampers vibrant solutions. SDG’s is working to change this; come and help us.

Building a smarter, more connected Tampa Bay: Developers understand both sustainability and problem-solving. Harness our power by solving a Smart City challenge that will elevate us all. Can we build IoT and Smart City solutions that help our region’s residents without hurting their privacy?

There will be three cash prizes for each theme: $1000 for the main prize, $750 for the runner-up, and $250 for the solo participant. That’s nine prizes in total!

Once again, this event will happen online. You can hack in the comfort of your own home — all hanging out will be done on Discord. Registration and participation is free-as-in-beer.

This is a great way to put your skills to good use and test them, get connected with the Tampa Bay community, and make Tampa Bay a better place in which to live, work, and play. Find out more at the Summer Solstice Hackathon site at hack.suncoast.io!

Categories
Tampa Bay

Local hero: Greg Leonardo and Webonology

Greg Leonardo. Tap the photo to see his LinkedIn profile.


Greg Leonardo is an important part of the Tampa Bay tech scene: he’s behind the annual Tampa Community Connect conference (which grew out of Tampa Code Camp) as well as a lot of Tampa Bay-based Microsoft and Azure meetups. Along with his wife Kate, who’s also an important part of Tampa Bay’s tech scene, he runs Webonology, a tech consultancy, and they’re offering their time to help people affected by 2020’s general chaos to get back on their feet.
He writes:

If you know any small business or are a small business affected by the riots and need assistance with technology or options for technology for the business, please reach out to me. I am donating my available time to help these small business owners get back on their feet and/or save their businesses. We will work at providing as much as we can during this time to help anyone get back on their feet.

I know Greg — he’s got a big heart and gets things done. He has my highest recommendations, and if you need his help, you can reach him at info@webonology.com.

Categories
Current Events

A reminder to the folks who work at Facebook

Tap the image to see it at full size.

In addition to the fact that having my own blogs lets me control and own my own content and “look and feel”, add links and additional interactive content, and not be under anyone else’s editorial control, there’s a reason I don’t use Facebook (or any other social media platform) as my primary way of messaging the world: so I rely on amoral, self-serving jackholes like Mark Zuckerberg as little as possible. For me, Facebook’s true purpose is to point you to my newest articles.

Context

Categories
Players

An homage to John Henry Thompson, creator of the Lingo programming language and the interactive CD-ROM boom of the nineties

At some point in the mid-90s, after the release of the games MYST and The 7th Guest, came an explosion of multimedia software on CD-ROMs. Until that time, building any kind of software was a tedious, error-prone process, and doubly so if it had to display animations and video, play multi-channel sound, and react to users’ keyboard taps and mouse clicks, drags, and drops. You’d have to double that effort again if you wanted to make it for both Mac and Windows.

John Henry Thompson changed all that with Lingo, the programming language for the cross-platform multimedia authoring tool known as Macromedia Director (formerly MacroMind Director, and later Adobe Director). It was the very first programming language that used to make my very first applications at Mackerel Interactive Multimedia, my very first workplace, for paying customers. As with Marc Canter, who co-founded MacroMind, I will be forever grateful to “JT,” as he was known in those days, for helping get my start in what’s turned out to be a pretty nice career.

Here’s a quick taste of the sort of things people created with Lingo and Director. It’s also a taste of the digital aesthetic of the mid-1990s:

Since the download speeds of the time were about 10 minutes per megabyte on the fastest modems under ideal conditions, there was really only one way to get Director: in a shrink-wrapped box like the one pictured below…

…which contained CD-ROMs and a lot of manuals fashioned out of dead trees:

John was always living with one foot in the world of tech and one in the world of art. He studied computer science at MIT, but while there, he also minored in visual arts. During that time, he took a year-long break from MIT to take part in a year-long program in painting and drawing at New York’s Art Students League.

Here’s what he said about his time at MIT, and how it took him to the San Francisco Bay Area and Macromedia:

“While I was there, in ’83 or ’84 I started combining my interest in the visual arts with computer graphics… I started doing stuff at the media lab. I focused there on integrating my interest in multimedia into my computer science degree. I got a minor in visual studies where I got exposed to film making, graphic design, photography, all that… It was actually not well known, but there was a lot going on there in the visual arts in MIT. I did a lot of independent work there, I built some 3-D graphics systems and an interface to broadcast equipment, some real-time video processing things, sort of like music video effects, and from that, that took me more into the video production end of things, and I was hired from there, that was ’84, I got a job at the Droid Works [a spin-off company of LucasFilm], on the EditDroid project, which we were building a non-linear editing system. This was before digital video, this was based on laser disks, and so that’s how I ended in the Bay Area working in San Rafael.”

“From the early days I was interested in the Macintosh, so I took that opportunity to start looking around for work on the Macintosh, and I got a Mac Plus and through some people at DroidWorks, actually the husband of one of the employees there, I got in touch with Marc [Canter, founder of MacroMind, the original name of Macromedia]. At that point Macromedia was based in Chicago and they were making VideoWorks and MusicWorks and GraphicWorks. They’ve been around for a while – they were one of the first major applications on the Macintosh. They were there from, I think they started in ’84. I don’t know if you know, but VideoWorks started out on even before the 512K Mac. It was quite a feat that it was able to run.”

A 1987 magazine ad for VideoWorks II. Tap the image to see it at full size.

“So I got in touch with Marc through this friend from DroidWorks and he said he was looking for someone to write the accelerator – it was in a lot of ways similar to QuickTime. That was my first work with them.”

From the accelerator project, John moved to working on the color paint program in Director, which let you create and edit bitmap images in Director projects. He was still a contractor when he added Lingo into version 2.0 of Director on his own initiative:

“I wanted to see some of my work on interactive languages that I had been using for interactive art in a commercial product… I was still a contractor, or a consultant, but most of my time was spent with MacroMind products at that point. The company’s focus at that point was 3-D Works. It was kind of an unsupervised project – what they had at that point was VideoWorks Interactive, which was a central, BASIC-like language hooked on to the animation engine and that was used for the Guided Tour on the Macintosh.”

“And that was where Lingo started – it was a replacement for that BASIC language. (We were using a BASIC language) that I think was copied out of an article in Dr. Dobbs, so it was a very rudimentary implementation of a BASIC interpreter – you had single character variable names, the variables were typed by their names.”

“Lingo was a replacement for that. It started out just incrementally, because I was doing interactive stuff myself and I wanted to use Director to do it, so first I plugged in the xobject stuff, which was some code I had set up to control video disk and some other stuff that I was using in my interactive art. So, xobjects went in from day one, and then I started putting in more of the traditional features you find in a language: recursion, untyped variables, all that kind of stuff.”

“…from its very first incarnation it was object-oriented. Back at that point – this was ’87 – this was when C++ and Objective C were making headway and I’ve done a lot of research on Smalltalk and the Lisp environments.”

I programmed in Lingo from 1995 to 2000, and there are unmistakable elements of Smalltalk and Lisp in there, along with a strong HyperTalk accent. These screenshots of script windows should give you a taste of the language:

Lingo allowed me and the other developers at Mackerel to crank out applications for floppy disk, then CD-ROM, then Shockwave apps for the web, for both the Mac and Windows, in a fraction of the time it would’ve taken in C. I wrote interactive multimedia desktop applications for a number of clients, including AOL, Microsoft, Toyota, USF&G, Dairy Farmers of Ontario, and Delrina, and I wouldn’t have been able to do so without John and his language, Lingo.

I had the opportunity to meet John in 1996 at the afterparty for the Macromedia User Conference in San Francisco, and it was wonderful to speak with him. It was the first time I’d ever had a chance to talk to someone who’d made a programming language that I’d used. I thanked him then, and I’d like to repeat it now: Thank you, John, for Lingo, and for getting me started on my career!

What he’s been up to recently

He made an appearance on the YouTube channel The Coding Train in 2018, where he talks about Director and some of its modern descendants:

Earlier this year, he was a guest on the Coding in the Wild podcast, where he talks about his recent project, DICE, short for “Distributed Instruments for Computed Expression,” which is an open source platform for exploring that intersection of art and programming:

He also maintains a personal website at johnhenrythompson.com.