Rosebud Games

Last night I hung out with the Cleveland Game Developers meetup group and had a good time just sitting around talking about what we want to get out of the group.

I love hanging out with people who have interests that I share, and who can talk about them at length. I really get a lot more creative ideas when I’m in an environment where I’m being stimulated by exposure to the ideas of others.

I had two really great ideas last night.

First, we were talking about the sort of games we want to make. I was 6 years old when we got an Atari 2600 for Christmas. It wasn’t long before I was “designing” my own game ideas. I’d take a big piece of paper and draw my concept for the game, and then I’d have my mom write down a description that I would dictate to her. So, ever since then, really, I’ve dreamed about being a videogame developer. There’s a box in a my parents attic somewhere that still has these papers.

So, for me, I think it would be very cool to dig those out and look at them and see if I can turn them into games. I coined a term, “Rosebud Games” to describe the concept. The term, of course, comes from Citizen Kane, and really, it’s the same concept: the thing I loved most as a child is what I want now as an adult more than anything. I think as far as motivating factors go, this has a lot of legs. Most of the ideas I had back the were very simple and shouldn’t be too hard to do as beginner/learner projects.

My other great idea was for a taxonomy project to classify videogames. I have a very clear idea of what I want this to be like, and it is going to be beyond awesome when you see everything that I plan to do with it. I don’t want to give away too much on it until I have something ready to show the world, but I think that this may end up being my big project for the summer.

Deepwater Horizon: “Failure Modes” vs. “Fail-safe”

The Deepwater Horizon oil spill has been in the news a lot lately. Congressman Bart Stupak (D-MI) has famously asked the question about the blow-out preventer, “How can a device that has 260 failure modes be considered failsafe?”

I’ve heard the soundbite enough times that I feel like I need to blog about it.

I believe Stupak misunderstands the terms he’s using, and is thus confused. Or quite possibly, the sound bite lacks enough context. Either way…

“Fail Safe” does not mean “has zero failure modes” or “cannot fail.” “Fail safe” means, simply, that when a failure occurs, the design ensures that the failure happens in a safe manner.

Obviously, in the case of the blow out preventer on Deepwater Horizon, not all of its failure modes result in a safe failure. However, the number of failure modes has nothing to do with whether it is safe or not. Obviously, the fewer failure modes a thing has, the better, because it means that there are fewer things that can go wrong with it. But just because something has a high failure mode count does not necessarily make it a bad thing. Indeed, quite likely it means that it has been analyzed and tested extensively, and is well-understood. Identifying as many failure modes as there are to discover is a good thing. You don’t want there to be a failure mode that you don’t know about, or didn’t anticipate.

I don’t know anything at all about drilling for oil, but to anyone with an engineering background who understands what the terms “failure mode” and “fail safe” mean, Stupak’s question sounds idiotic.

This sort of situation is something that people who work in technical fields encounter all the time. So naturally, the soundbite irritates me every time I hear it.

Customers and upper management usually seem to think that it’s the engineer’s job to design a solution that handles any conceivable problem, and does so gracefully. Moreover, they want solutions that are delivered on time and under budget. They want to never have to think about the tools they use, especially if that means having to understand how the tool works. They want their solutions to “just work”. Well, don’t we all.

This desire for solutions that just work and don’t have problems is indeed rational. Unfortunately, it is unrealistic. We can only do our best to make solutions which handle as many foreseeable problems as we can envision, as gracefully as we are able. This does not mean that there will never be problems. This does not mean that it won’t be more useful to have operators who have some level of understanding of what’s going on inside the tools they rely on than an operator who has no clue.

I try to deliver products which are as forgiving to the clueless as possible, but it will always be the case that a clueless operator will be at a disadvantage. The idea should not be that the purpose of human enterprise is to create a world that enables people to be clueless, and takes care of the clueless as though they are helpless. The idea should be that the tools we use should remove burdens for the user so that they can be empowered to do more. A great tool removes those burdens for the user, but also allows the user to understand the work being done by the tool if they need to.

It is my fervent belief that the world is improved by people who seek to understand it. Absent understanding, one can only be at the mercy of what they fail to understand. The modern world is a very complicated place indeed, and so the less one needs to actively deal with in order to get by, the better. But that is not to say that ignorance is desirable, a virtue, or bliss.

I’m not saying that Deepwater Horizon couldn’t have been prevented. Very likely it could have. Not all of the possible preventative measures were implemented.

But misunderstandings such as conflating failure mode count with fail safe certainly do not help to bring about a culture of safety. If an executive or legislative level person, who shapes policies that govern these systems that we must design to be safe cannot understand the terms they use, and the implications of what they are being told by technical people, then only badness can result from it.

Too often engineers who are doing nothing more than speaking plainly are not understood when they speak up about potential problems, only to be scapegoated when a worst-case scenario comes to pass. But ultimately, responsibility should be owned by the people in control who set policy on what is considered an acceptable level of risk. If these people cannot understand the language that is used to communicate about risk, then they do not deserve to hold the power to make the decision to accept risks.

Update

It’s been too long since I last updated the site. I’ve been busy.

In addition to my usual projects at work, I’ve been taking a course on Linux System Administration, which has been going well. On top of that, work sent me and the other developers on our team to a continuing education program offered through Cleveland State University, so that we can all receive a certification in web development. Mostly this has been review for me, but I’ve been able to learn a bit more in some areas.

Also, I’ve gotten involved with Makers’ Alliance, a 501.c3 nonprofit startup whose mission is to provide a hackerspace for the greater Cleveland area. If you have any negative connotations from hearing the word “hacker”, please don’t. We are not the kind of hackers who go breaking into systems we don’t own without permission, although we may take things we do own apart and figure out how to make them better.

The organization is almost a year old, and we’re really just getting started. We are trying to find funding and a permanent location for our operation.

I just finished a project to create a course for teaching Cascading Style Sheets, which I will be presenting on 4.30.10 at our temporary location, the former Brunswick Flower Shop at 10550 Carnegie Ave., Cleveland, OH 44106. I’ve given the course the title Streetwise CSS, and it is intended to be an intermediate level class geared toward learning CSS for the real world. I am hosting a live example code page on this site, and the powerpoint slides from the lecture component of the course as well, if anyone’s interested.

I’ve also been spending the second Tuesday of every month attending .NET SIG meetings, hosted by Bennett Adelson in Independene, OH, in an effort to network with other professionals and keep up to date on Microsoft’s developer tools.

Last weekend, I attended Notacon 7, and had a great time attending many interesting presentations, and got to meet a lot of great new people and see a few old friends as well. Makers’ Alliance had a presence at the convention, hosting and setting up the open hacking room, where people could learn soldering, buy and assemble small project kits, and learn about circuits and electrical components. I didn’t get much sleep but I had a lot of fun.

In the next few weeks I am looking to get deeper into C# and am planning to revisit my DomeWrinklesCurl project, to implement a few features that I have on my project roadmap.

On May 8, I’m planning on spending part of my day at the CCAG show, which is always a lot of fun. I love seeing all the old hardware and the chance to play a few classic games or pick up a few for my collection.

DomeWrinklesCurl 1.1

I’ve released an update to DomeWrinklesCurl. This isn’t really much of a game still, it’s just a simple rock-paper-scissors programming exercise for Win32 CLI console.

The new feature in this release is improved stat keeping.

With this release, I’ve also cleaned up the code a little bit. The initial release ran OK, but internally was a bit messy. Not a big deal, you won’t notice unless you look at the source and compare it to the 1.0 release.

I’ve been thinking of ideas about what I where I want to take this project…

2.0 branch:

  1. Sound effects
  2. Colored text
  3. Select # of players (0-2)
  4. Named players
  5. External configuration file for settings, game stats to persist

future branch:

  1. 2-player network play

Once I get this much done, I’ll have enough of a framework developed to begin building a real game with, and I’ll start moving from the Console to GUI.

Download it here:

dwc.exe (zip archive)

dwc.cs (source)

DomeWrinklesCurl 1.0

I wrote a windows console game in C# as a programming exercise.

It’s nothing spectacular, but it’s my first game, and I’m happy with the way it works.

The game is a silly pug-themed implementation of Rock Paper Scissors that I made up, called Dome Wrinkles Curl.

The rules:

  1. Dome straightens the curly tail.
  2. Wrinkles cover dome.
  3. Curl wags away the wrinkles.

Download it here:

dwc.exe (zip archive)

dwc.cs (source)

Ipse Dixit

Currently, the tagline for this blog reads “ipse dixit”. That may or may not always hold true, but for now that’s what it says.

I took Latin in High School, and for some reason the phrase popped back into my head when I was setting up WordPress. I knew it meant “he himself has said it” so I figured it was an appropriate tagline for my blog.

Wanting to make sure I had the spelling right, I googled and found this wikipedia article which I quite liked. The fallacy of naked assertion is a good one to keep in mind when reading this, or any, blog. Or when reading anything at all for that matter.

Just because I might think highly enough of some of my words that I’d take the effort to publish them, does not mean that what I’ve written is anything more than “just something I said.”

By all means, don’t simply accept as true what you read here, just because I said it. That’s always good to keep in mind. Most things you read will implicitly convey a message of “Trust me, I’m right.” You don’t have to; and it’s probably better if you don’t.

I don’t mean to put you on guard or make you contentious; just be an actively engaged reader, thinking critically. A rare thing to find on the internet, I know. But to be encouraged nonetheless. Don’t believe everything that you read.

What to say?

Attaching your real name to a statement of any kind and putting it up into public space is a brave and daunting undertaking.

(You see stories in the news about people getting fired for stuff they put up on their social web, etc. Not always for doing something supremely idiotic. It gives one pause.)

The site serves as a place for me to play and experiment, as well as to show off what I’m capable of doing.

Accordingly, I’ll be blogging here about stuff as it pertains to my profession, which at the moment primarily is web development. I do other things in IT, too: server administration, user support, a little programming, and so on. So you might expect from time to time that I’ll be posting here on those topics as well. I expect at times I may also have things to post about general business, or “soft” topics like the software development lifecycle, and stuff going on in “the industry”.

I won’t be posting much anything of a personal nature here. So this is probably going to be fairly dry reading unless you happen to be interested in highly technical topics.

Obviously, I want my blog to be interesting, and I want people to want to read it. But I’m not going to write highly opinionated pieces intended to agitate and provoke a response.

On the other hand, I don’t expect that people will always agree with what I have to say, or that they’ll like it. I like to use clear, bold, vivid language, and have come to accept that at times this can cause people to take offense. This is seldom, if ever, my intent, but it is often an outcome.

Rather than try to please everyone (or at least not offend them), I have recognized that it is a good thing to speak clearly and to say what you mean, and accept what comes of it. “Playing politics” is a reality, but it should not cause “real” reality to become subservient to it.

Also, I don’t expect that I’ll always be right about what I say. Just because I express an opinion doesn’t mean that I’m committed to defending it to my death. One of the best things about communication is that it affords us with opportunities to learn. Learning quite often means learning that we were wrong about something.