Rebecca Bettencourt on xCards
Current Occupation: Software Engineer
What occupation did you have when you last worked on your HyperCard clone?
When I was working on Project 11, I was still in middle school I believe.
OpenXION began as my senior project during my last year as a college undergrad.
That summer I started working as a software engineer at Experts Exchange.
I'm now a software engineer at Google and I still work on OpenXION occasionally.
How did you get into this job?
I've been programming in some capacity ever since I was in fourth grade.
That was when I discovered HTML, BASIC, and of course, HyperCard.
I instantly fell in love with programming. I love the freedom it gives you
to tell the computer what you want it to do rather than do what the computer
wants you to do. So when I went off to college, my choice of major was
I had been programming in both HyperCard and RealBasic for quite a while
when Tyler Vano's idea to build a new HyperCard IDE came about on the HCML.
That is how I became one of the project leads on Project 11.
As part of my undergrad program, one of the graduation requirements was a
senior project, and I chose that opportunity to attempt to bring HyperCard
back to life yet again. That was when I started OpenXION.
Did you have a HyperCard (clone) related job before you started work on OpenXION?
I have never worked on anything HyperCard-related as part of my actual job.
Did you work with HyperCard before you started working on OpenXION?
I had been using HyperCard for a few years before I started working on Project 11.
Did you work with any of your clones before you started working on them?
No, in both cases (Project 11 and OpenXION) I was in on the ground floor.
How is/was working on Project 11/OpenXION
I'm trying to remember what working on Project 11 was like. I just thought
it was so cool what we were going to do: we were going to bring HyperCard
to the modern world and it was going to be awesome. We did produce a lot of
interesting demos, but unfortunately we didn't really know what we were
doing and all of our code didn't really fit together. So it was a bit of
carefree fun even if we got very little out of it.
Working on OpenXION was very exciting. I was taking a class on programming
languages at the time, so I was learning how to write a parser and an
interpreter and a compiler. I now knew the correct way to do things!
There was some frustration in the beginning, as I discovered that the tools
I was trying to use (ANTLR and JavaCC) were not well-suited to what I was
trying to do. HyperTalk really is a bitch to parse, if you'll pardon my
language. It is full of very parser-unfriendly features: case-insensitivity,
keywords used as variable names, and unquoted literals chief among them.
I quickly determined that if I were to get this project off the ground,
I'd have to write this parser by hand. A lot of professional programmers
would grumble at such a prospect, but I relished in it. It was a lot of fun,
but it was also a ton of work. OpenXION took up just about every minute of
my free time, and even then my senior project was released with some features
missing (file I/O being a major one). I still work on OpenXION, but now I
get to take my time.
What was your first job, ever?
I had to get an internship as part of my high school's graduation requirements.
I was supposed to work with the IT person at my middle school to set up their
new server, but that fell through and I ended up helping the director of an
adult special education program learn how to use her computer.
My first paid job was just after my first year of college. I got a job at the
community college library where my mom worked and helped re-shelve books, move
books around, enter new books into the catalog, and do lots of other things
related to books.
Who was your hero/idol at that time?
At that time I didn't really have a developed sense of, anything really, so
everything from favorite music to heroes to religion was really up in the
air for me.
Who is your hero/idol now?
Walt Disney, Stephen Wozniak, Bill Atkinson, Sylvia Rivera, Harvey Milk,
and most recently Lauren Faust.
What is the most important thing in life for you?
To live well, and create something with a profound positive impact on the world.
What clones did you work on?
I've worked on two: Project 11, which never got off the ground, and OpenXION,
which I've actively maintained for the past couple of years.
When, how and by whom did you get introduced to these projects?
Project 11 started when Tyler Vano and I met on the HyperCard Mailing List.
It was sometime around the year 2000. I was in middle school, or possibly
early high school, at the time. Tyler and I had this great idea to combine
all the cool stuff the community was creating in HyperCard, and we were going
to build a modern IDE. We called this project Sphere Project for want of a
better name. I eventually came up with the name WildFire, and it stuck.
But we realized when Mac OS X started taking off that HyperCard's life
was nearing its end, and we decided to start writing our own complete clone
of HyperCard. This was called Project 11, and to this day we haven't thought
of a better name.
OpenXION started as my senior project at Cal Poly SLO. In the few years since
I had last worked on Project 11, I never let the dream of an open-source
HyperCard die. I chose this opportunity to attempt to make that dream a reality
What impressed you the most about your clones?
With Project 11, what impressed me most was how much we were able to make it
look like we were actually doing anything. I say that jokingly, of course;
we were doing plenty of things, they just never fit together coherently.
What impresses me most about OpenXION is that I actually pulled off parsing
What do you consider your main contribution to Project 11/OpenXION?
I had a bunch of APIs and libraries that were going to be part of Project 11.
But my most significant contribution by far to that project was the reverse
engineering of HyperCard's file format.
OpenXION has been completely my own creation so far, so my main contribution
to that project would be, well, all of it.
Please describe Project 11/OpenXION in one sentence
Project 11: The IDE looks like RealBasic, but the language looks like HyperTalk.
OpenXION: It's a scripting language that enables ordinary people to do extraordinary things.
Is there any particularly clever solution you applied to OpenXION you'd like to describe in excruciating detail?
One thing about OpenXION that I just love telling in excruciating detail is
the syntax of a factor and how I figured it all out. The HyperCard Script
Language Guide likes to describe a factor as "a single source of value," and
quite frankly that's better than anything I'd come up with. A factor is as
simple as '2', or as complex as 'char 3 of the sqrt of cd fld id 16'. An
expression such as '2 * 3' is not a factor; it is two factors, '2' and '3',
joined with a binary operator to form an expression. The concept of a factor
is an important part of HyperTalk's grammar, whether you're parsing HyperTalk
or just writing in it.
When I was building the parser for OpenXION, I couldn't keep all the different
grammar rules for all the different kinds of factors in my head at once. So I
took over an entire whiteboard in the software engineering lab at Cal Poly SLO
and drew a humongous graph of the syntax of a factor. As I messed around with
the parser, trying out different code fragments, I tweaked the graph. The graph
stayed on that whiteboard for several weeks, catching the curiosity of several
other software engineers, who had no idea what it was for. I remember there was
one part of the graph that I had circled and labeled "(potentially) difficult
point." One software engineer had extended the graph to include "zombies" and
circled and labeled that part "(potentially) amazing points."
If you're curious as to the syntax of a factor in OpenXION, it looks something
UnaryOperator Factor -> UnaryExpression
| if ListExpression then ListExpression else ListExpression -> ConditionalExpression
| ( [ListExpression] ) -> Expression
| QuotedLiteral -> StringExpression
| NumericLiteral -> NumberExpression
| me -> MeExpression
| super -> SuperExpression
| Constant -> ConstantExpression
| all the MassDataType [of|in Factor] -> VariantMassDescriptor
| all MassDataType [of|in Factor] -> VariantMassDescriptor
| all -> VariableExpression
| the Modifier Identifier [of|in Factor] -> FunctionCallOrPropertyDescriptor
| the Ordinal to|thru|through Ordinal OrdinalRangeDataType [of|in Factor] -> VariantOrdinalDescriptor
| the Ordinal OrdinalDataType [of|in Factor] -> VariantOrdinalDescriptor
| the MassDataType [of|in Factor] -> VariantMassDescriptor
| the SingletonDataType [of|in Factor] -> VariantSingletonDescriptor
| the Identifier [of|in Factor] -> FunctionCallOrPropertyDescriptor
| the -> VariableExpression
| Modifier Identifier [of|in Factor] -> FunctionCallOrPropertyDescriptor
| Modifier Identifier ( [ListExpression] ) -> FunctionCallOrPropertyDescriptor
| Ordinal to|thru|through Ordinal OrdinalRangeDataType [of|in Factor] -> VariantOrdinalDescriptor
| Ordinal OrdinalDataType [of|in Factor] -> VariantOrdinalDescriptor
| MassDataType [of|in Factor] -> VariantMassDescriptor
| SingletonDataType [of|in Factor] -> VariantSingletonDescriptor
| IdDataType id SingleExpression [of|in Factor] -> VariantIdDescriptor
| IndexRangeDataType SingleExpression to|thru|through SingleExpression [of|in Factor] -> VariantIndexOrNameDescriptor
| IndexOrNameDataType SingleExpression [of|in Factor] -> VariantIndexOrNameDescriptor
| Identifier [of|in Factor] -> FunctionCallOrPropertyDescriptor
| Identifier ( [ListExpression] ) -> FunctionCallOrPropertyDescriptor
| MassDataType -> VariantMassDescriptor
| SingletonDataType -> VariantSingletonDescriptor
| Identifier -> VariableExpression
If you could add one more feature to OpenXION, what would it be?
When, how and by whom did you get introduced to HyperCard?
I was playing around on my sister's computer, and I found a bunch of HyperCard
stacks. After getting bored with the existing ones, I discovered I could create
a new stack and start drawing on it with the painting tools. (It was a copy of
HyperCard 2.1 that had been unlocked with the 'magic' command.) I copied the
HyperCard program and some of the stacks onto a floppy disk and took it back
home to play with. Then I started to dig around the existing stacks, seeing
how all the different buttons worked. I started collecting examples of HyperTalk
code, and hacking together my own stacks.
What impressed you the most about HyperCard?
The fact that I, a mere mortal, could get the computer to do anything I wanted
it to do!
Please describe HyperCard in one sentence
HyperCard is a solution looking for a problem.
If you could have added one feature to HyperCard, what would it have been?
Native widgets, transient data, reusable windows - everything needed to make
an actual desktop application with it.
Do you think there is a new HyperCard today? What is it?
I think SuperCard and Revolution (whatever it may be called now) are the
closest things we've got.
Do you think there is still a need for a new HyperCard?
I still believe there is a need for an open-source HyperCard clone.
SuperCard and Revolution are all well and good, but in my opinion they
have two major problems: they're expensive, and they're proprietary.
What made HyperCard the ubiquitous product it was in the early 90's
as opposed to the niche product SuperCard and Revolution are today
was the fact that it was included free with every Macintosh sold.
So anybody could use it to create something, then share their creation
with somebody else with the confidence that the other person would be
able to run it. That isn't true of HyperCard clones today, and outside
of our own little clique, barely anyone even knows of their existence.
The other problem is what led to HyperCard's downfall after Apple
steved it: without any way to run the application itself, there is
no way to run the stacks created with it. So all those years of
creative output are now locked away in a proprietary format.
An open-source HyperCard project would solve both of these problems.
What do you think the competing products did better than you?
Unlike Project 11, they actually have a product. Unlike OpenXION, they have a
complete HyperCard clone rather than just an interpreter. Also, they have
developers working full-time on their products.
What single thing did your application do better than the competitors?
I think the single thing OpenXION got better than any of its competitors was
its compatibility with existing HyperTalk code.
Did you ever get to meet any of the competing clone developers?
I've never met any in real life, but I once had a discussion through the
HyperCard Mailing List with one of the developers of TileStack. We talked
about HyperTalk's grammar and how crazy HyperTalk code can get and still
be valid. I did drop a few hints for the rest of the list that I might be
secretly working on something (this was before OpenXION was released publicly)
but nobody ever picked up on them.
Why did you start writing a HyperCard clone?
I saw something missing in today's modern technology: low barriers to entry.
In the late 70's and early 80's, all computers came with BASIC. In the late
80's and early 90's, every Macintosh came with HyperCard. Anybody with a
computer had everything they needed to make the computer do what they wanted,
using an environment with a rather flat learning curve. There just isn't
anything like that today. Computer programming is now a skill that has to be
pursued rather than discovered, and I find that kinda sad.
Do you think HyperCard clones are/were a good thing?
Yes, because if it weren't for HyperCard clones, we wouldn't have anything
like HyperCard at all today. And someday, it will be a HyperCard clone that
lowers the barriers to entry once again.
Is there anything else you'd like to say?
I will not rest until there is a complete open-source HyperCard out there.
Oh, and Fluttershy is best pony.
Thank you, for your insightful answers and for your amazing work in publicly documenting HyperCard's file and image format.