Sunday, December 18, 2011


So instead of working all day on Solitaire Till Dawn, today I took some time in the afternoon and played a game with the family.

I know. I'm sorry. I should have been working. It's just that I'm getting really tired of those same three ghosts showing up, every Christmas Eve, year after year, and yelling at me about the whole work ethic thing.

It's not just that they're strident. ("Listen unto me! Comest thou with me! Lookest thou over there!" Hoo, boy.) But in recent years they've been getting more than a little bit whiney, if you want the truth. Not to mention the increasingly obvious air of desperation.

So this year I thought I'd throw them a bone, see if maybe they'll cut me some slack. It would be nice to get some sleep on Christmas Eve, for once.

You might want to do likewise: go play something that's for more than one player. Some day those guys are just going to flat give up on me as a bad job, and then they might be after you next. I'm just sayin'.

Anyway, I've gotta get back to work now. Happy holidays to you and yours!

Saturday, December 3, 2011

That's the Sound of the Men...

I see it's been a while since I've posted anything other than the little updates in the box to the right. That's because I generally save these larger posts for larger subjects or events, and lately there's been nothing of that nature to share. But I also know that Solitaire Till Dawn's amazing legion of fans can get antsy if they don't hear something new once in a while about the progress of the project, and I don't want to leave everyone hanging. This is just a little update post to reassure you all that I haven't forgotten about you.

And the news is just this: It's not done yet. I don't know when it will be done. But I am still working on it, as hard as I can given my other responsibilities.

The work I've been doing doesn't lend itself to quick descriptions for the non-programming public, and if I took the time to try to explain, it would be time taken from actually working on the upgrade. I hope you'll accept instead my assurance that I've made some good strides forward lately. I completed a major architecture change recently that brought a great improvement in the program's behavior, and I tracked down and slew a couple of nasty but well-hidden bugs just the other day.

I know it's been a long wait, and no one (certainly not me!) will be happy as the wait grows longer. But I appreciate your patience, and I'll keep at it.

Wednesday, October 5, 2011

Steve Jobs 1955 - 2011

Steve Jobs is gone.

I never met Mr. Jobs. Although I worked for Apple (and its spin-off, Taligent) for over ten years, I was there during John Sculley's reign and later, Gil Amelio's. Jobs hired Sculley away from Pepsi after taking him for a walk in the Stanford hills, and asking him a now-legendary question: "Do you want to sell sugar water for the rest of your life or come with me and change the world?"

But it was always Steve Jobs who changed the world. Like many others, I learned of his death today using a device that would not have existed without him. A few months back I went on a road trip with one of my sons, to visit and tour my alma mater UCLA. I took my iPhone, and on that three-day trip it served as a map, a navigator, a traffic reporter, the yellow pages, a restaurant critic, a tour guide, an email client, an encyclopedia, a newspaper, a camera, a publisher, a UCLA course catalog... oh yeah, and a phone. There would be smart phones today without Steve Jobs, but there wouldn't be iPhones: the one that all the others are trying to imitate and improve upon.

I've been an Apple fan since about 1986: my first computer was a Mac Plus, at the enthusiastic recommendation of a friend. I have not been without a Mac computer since then: 25 years now. I should own one of those T-shirts that say "I was an Apple fan when Apple was doomed." (I don't, only because I don't wear T-shirts: they don't have a pocket for my glasses.) Followers of this blog know that I have been selling Solitaire Till Dawn for Macintosh computers for over 20 of those years. The smooth Mac interface with its marvelous attention to detail was the inspiration for the attention to detail I've tried to put into Solitaire Till Dawn, and the continuing popularity of the Mac (even through the darker years) kept it selling, and helped my family get along with only one parent working, freeing Helen to stay home and raise the kids.

One of the downsides to aging, I've found, is the number of times I find myself mourning somebody I never met, somebody who made the world a better place. I remember hearing of the deaths of Louis Armstrong, Walt Kelly, Jim Henson, Isaac Asimov, and many other great creators; and now, Steve Jobs.

Thank you, Steve. I wish you could have stayed longer.

Monday, September 26, 2011

A Little UI Work

I see it's been over a month since my last post, so I thought I'd put something out to show that I haven't been idle. I've been doing user interface (UI) programming, and I have something new to show.

Solitaire Till Dawn offers 100 different kinds of solitaire. That makes a bit of a problem: how to present 100 different games to users in a way that makes it easy to find the games they know, yet also easy to find new games they might like. In the pre-Lion version, your "Favorites" are listed in a popup menu in the toolbar, and you only have to select one to start a game. To see all 100 games, you would select "Choose from All Games..." from the same menu, and that would open the Game Chooser window, which was a rather complicated affair.

The left edge of the window

I've learned that a lot of users didn't realize that "Choose from All Games..." was an option rather than just a label, and I'd get emails asking me where all the other games were hiding. So in this new version, I'm trying to make that more obvious. Here's a screen shot showing part of the left edge of the game window.

There on the edge, you can see three tabs labeled "My Favorites", "All Games", and "Goodies". These tabs are always visible, but usually take up just that small amount of space on the side. It should be obvious (I hope!) that you can click them to get something interesting to happen.

If you click any of the buttons, a "drawer" will slide out from the left edge. The next image shows what you might see after clicking the "My Favorites" button.

The drawer is open

You can see a list of 16 games, which are the ones selected as your favorites out of the full list of 100 games. This is what you'd use to select a game you already know you like.

You can select a game by clicking with the mouse, or by typing the first few letters of its name. If you double-click your selection, or press Enter or Return, a game of your selected kind will start immediately.

The All Games list, with a game selected

Now here's what you get if you click the "All Games" tab: the full list of games, scrollable of course. You can select games and start playing in exactly the same way as in the "Favorites" list.

In this image, you can see that "Baker's Game" has been selected, and this reveals another new feature: the small green i-in-a-circle that appears by the selected game. In the image below, you can see the Game Info panel that appears when you click the green i.

The Game Info panel
The Game Info panel shows full information about the selected game, everything but the actual rules; and you can see the rules by clicking the "Show Rules" button near the top-center.

If you change your selected game, the Game Info window will move to match your selection, and show you info about the newly-selected game.

Finally, you can dismiss the Game Info window by clicking the small x in the upper-left corner (I'll probably change that to actually say "Close this window"). The whole business including the drawer will disappear back into the left edge if you click the highlighted tab, or click anywhere outside the panel and the drawer.

This isn't final

I'm sure there'll be changes before this ships. For one, there's nothing in the "Goodies" tab yet, and I'm not sure what might go there; it might vanish altogether.

Here's a change I'm thinking about right now: I may get rid of the little green i and instead just have the Game Info panel appear whenever you select a game. That's because I'm worried that some people won't realize the green i can be clicked, and they will miss ever seeing the Game Info window. On the other hand, if you know what game you want, you won't need to see that panel, and it would be annoying to have it flash into existence and then instantly disappearing as your new game starts. Perhaps it should appear only after a brief delay?

I'm not sure yet. What do you think?

Sunday, August 14, 2011

Solitaire Till Dawn Update

I get mail—lots of mail—asking me about Solitaire Till Dawn and Lion. Some people seem to be worried that I don't know that the current release won't run under Lion.

Really, I know. Really. I know!! And I continue to work on a Lion version, when and as I can.

There are kind of two parts to getting it done. The first and hardest part is rewriting what I call the "solitaire engine" and updating the screen-drawing and animation code. This is rocket science, of a sort. The engine is complex (which is why Solitaire Till Dawn can present so many and such varied games), while animation is an exercise in concurrent programming. If you don't know what that is, never mind: just trust me that it's hard to get it right.

Today I hit a milestone: the engine and the animation are now working correctly. That's not to say that there isn't more work to do on them; but the really important fundamental stuff is done. (I will now pause, so that those of you who are so inclined may cheer.)

This means that I can now begin working on application stuff: buttons, controls, prefs window, saving and resuming games, and all the bells and whistles to be found in the menus and toolbar. This stuff is generally easier to do, but there's a lot of it to get through. I will be leaving some of the old features out of the first release, just so I can release a little sooner and get you something that will run under Lion and get you your solitaire fix. Any missing features will likely be added back in later, in updates.

There is still a lot to do, and I still don't know when it will be done. But take heart: I am working on it, I am making progress!

(And yes... I know the current version doesn't run under Lion!)

Friday, June 3, 2011

Continental Rottweiler at Kublacon 2011

Helen and I were at Kublacon this Memorial Day weekend, as we have been every year for the past several. It wasn't as good a trip for me this year; I was too tired and sleep-deprived before the con even started. But there were a few high points anyway.

Continental Railways of the World
The highest point for me was certainly the four-and-a-half-hour, five-player Continental Railways of the World session that I hosted on Sunday morning. This playtest was very successful in several ways. First off, everybody seemed to have a good time! The game didn't bog down, and was competitive for its entire duration.

The Income Trough
I've been worried about a phenomenon we've been calling the "income trough". As RotW players will know, your income in the game is tied to your score. For most of a normal, one-board game, income rises as your score rises; but then income first tops out, then actually declines as your score continues to rise. In normal games this isn't much of an issue because by the time it happens, you've usually built most of the track you intend to build, and you don't need much money any more. But in the Continental game, you can find your net income dropping to near, or even below, zero just when the West opens up and you suddenly need to build a lot of track as everyone races west! A player who "bottoms out" at this moment can be seriously handicapped, and as a result will have no fun for the next two hours while he sits hopelessly in last place, cash-strapped and in debt, waiting for the game to end.

It would be easy to shrug this off and say "well, Player Red, you should have planned ahead." But I'd rather find a solution that allows such a player to take a less fatal hit, while still rewarding the players that did plan their income curve more successfully. I've had a couple of mechanisms in place for this, but they needed tuning. In this session, I think we finally had it tuned about right. Every player has a financial choice to make at the moment the West opens up; in the past, that "choice" has been a no-brainer. In this session, every player had to think it over, and they didn't all choose the same way. Furthermore, I was the player who was mired in the income trough, and sure enough I didn't win; but I was at least able to survive and progress. I think it worked out pretty well.

Paths to Victory
The winning player built a nearly coast-to-coast network, and one of the largest on the board. This was gratifying to me, simply because I love to see that kind of layout. But the same player won an earlier session by staying close to the Eastern board, with only a small extension across to the Western board. I'm pleased to see that there's no single approach to winning the Continental game.

Rail Baron Cards
Another measure of success for playtests is whether you learned anything new. I think I did. I was a bit shocked at the huge effect that the Rail Baron cards had for the more successful players. They were real game-changers.

I had "scaled up" the bonuses that these cards grant. In a normal game, they're worth (very roughly) 10% of your final score. Because final scores in the Continental game tend to be at least double a typical normal score, I made the Continental Baron bonuses much larger to match. But having seen them in action, I'm inclined to think that this was a mistake. Although the final scores were much larger than in a normal game, the differences between the winning player's score and his nearest competitors were not so much larger. The Baron Cards were overwhelming those differences, more than I think they should.

I plan to sit down soon and re-think those bonuses. I will likely tone them down to something in between their current values and those in a normal game. In addition, I'm tempted to look into making them incremental: instead of getting a single big all-or-nothing bonus, you'd be able to claim a partial bonus for achieving a portion of the goal. This sort of bonus already exists, for example in the Eastern U.S. Rail Baron card that awards 2 points for every connection you own into Chicago. Your bonus from that card can be 0, 2, 4, 6, or 8 points. I may not be able to come up with a full set of such incremental bonuses, but I'll see what I can do.

Monday, May 23, 2011

The Cannonball Express: Now with more Express!

Correction: In writing this post, I used my own article (quoted below) as source material. Re-reading this post a few weeks later, I realized that I'd made a historical error in that article, and perpetuated it in this post. I programmed the Cray in 1989, ten years before writing the article, and not twenty years earlier in 1979. I've corrected the post.

Twelve years ago, in 1999, I wrote an article for TidBITS called Power Macintosh G3: The Cannonball Express. It was a discussion of speed in computers, and how software and hardware factors contributed to the simple-sounding notion of "speed". Part of it was a (highly unscientific!) comparison between the speed of the new-in-1999 Power Macintosh G3, and a Cray Y-MP supercomputer that I'd had a chance to program some ten years earlier, circa 1989.

You can read the article if you like—it's not too long, and it's written for the non-technical reader (and the puzzle is fun, too). Or you can get a quick summary by reading the next couple of paragraphs here:

The highly unscientific comparison was a puzzle-solving problem I'd written, called "Piper". The article discussed the evolution of Piper and the techniques I'd applied to try to make it run faster. There was a particular puzzle called "woodchuck" that I wanted to solve, because for years it had proven to be too big a problem for Piper to handle in any reasonable time period. The Cray, a $15,000,000 room-filling monster that was one of the fastest computers in the world at the time, finally solved it in a 20-hour run.

Ten years later, I tried running Piper again on the latest-and-greatest Macintosh tower, and it blew away the Cray by solving "woodchuck" in under two minutes!

Twelve years after that—that is, a few days ago—I remembered the article. Piper's source code was made available with the article. After a brief search occasioned by a stale download link, I found the source, downloaded it, tweaked it a bit for a modern compiler, and ran it on my 2.8 GHz, dual processor Quad-Core Intel Xeon Macintosh tower. The results: on this hardware, Piper solved "woodchuck" in 14 seconds flat, taking 9 seconds to find the best solution and then running another 5 seconds to ensure that no better solution exists.

Nine seconds. Wow.

A word about Solitaire Till Dawn
I continue to get comments and mail, urging me to work hard on a Lion-compatible version of Solitaire Till Dawn. I assure you all, I am working hard, and making good progress. You can keep an eye on that progress by visiting this blog and checking the SOLITAIRE TILL DAWN update box in the upper-right corner of the page. I post updates there two or three times a week, usually. And as always, thanks for your support, your interest, and your patience while I get this done!

Tuesday, April 12, 2011

Unplanned Obsolescence

My software product Solitaire Till Dawn (STD) has had a long history. It is now 20 years old! During that two-decade history, I have had two processors (the Motorola 68000 and the PowerPC), one development environment (Metrowerks CodeWarrior) and one operating system (classic Mac OS, versions 7.0 through 9.whatever), all shot out from under me.

The First Dead Horse
When Apple switched from the Motorola family of CPUs to the PowerPC family, I didn't have to do anything: Apple was conscientious about backward compatibility, and STD ran nicely under emulation. Most users never knew the difference. I did get a lot of concerned mail from users who did know the difference and wanted a nice "efficient" native version, but the truth was that there was no need. STD did not run slowly, and did not use enough CPU even under emulation to noticeably affect the rest of the system. A couple of years after the switch, everybody forgot about the issue and I stopped getting mail about it.

The Second Dead Horse
Then Apple switched operating systems, from the classic Mac OS to the shiny new OS X. This time, it mattered. Technically you could still run STD unmodified, even though it was compiled for a different CPU and written for a different OS (Apple works very hard at backward compatibility). But in this case, it did run slowly and perform poorly, and it would also crash easily (something it never did under classic Mac OS, I hasten to add). It also looked very old-fashioned. I had to re-write STD for OS X and PowerPC. And, as previously chronicled, I made a mistake. I used the Carbon API instead of going all the way to the fully-modern Cocoa, and I stuck with the good old reliable CodeWarrior development system instead of using Apple's new Xcode.

The Third Dead Horse
Then Metrowerks decided to stop supporting CodeWarrior for the Mac. CodeWarrior still ran, and for a while I was able to continue making changes and updates to STD (now STDX). But as OS X evolved, good old CodeWarrior did not keep up, and over time became more and more "old" and less and less "good".

The Fourth Dead Horse
After that, a new blow: Apple switched processors again, abandoning the PowerPC in favor of the Intel line of CPUs. CodeWarrior could not compile Mac code to Intel-native executable. I was now unable to produce a native version of STDX. (Apple claims that Xcode can import a CodeWarrior project and take it over. I tried this, more than once. I never got it to work.)

But although it was now venerable in "computer years" (kind of like "dog years", they go by fast), the latest version of STDX still worked just fine. When OS X 10.6 came out, the PowerPC compatibility layer (called "Rosetta") was no longer installed by default, but Apple made it easy to install if you needed it, so most STDX users were still good to go.

The Fifth Dead Horse, and a Live Lion
But now OS X 10.7 "Lion" is on the horizon. And although it's not released yet and there's time for changes, it seems almost certain that Lion will not support Rosetta at all. If so, the current-yet-antique STDX simply won't run on Lion. For the first time in 20 years, an up-to-date Mac user won't be able to play Solitaire Till Dawn.

My only recourse now is to rewrite STDX using Xcode. I actually started this project quite a while ago, but it goes slowly: it's a big project (you'd be surprised), and I haven't the spare time (and energy) I used to have. I've learned a lesson about clinging to old standards, so this time I'm trying to make the code base as modern as I can; but that also adds time to the project.

My current goal is to create a (not-so)-quick-and-dirty STDX, fully modern and Intel-native, but not containing all the myriad whistles and bells of the previous versions. That will help me get it out the door faster, the sooner to relieve the withdrawal symptoms of STDX fans on Lion. Then over time I'll add old features back in, along with new ones perhaps, until it is once again at its full glory. (All this for the desktop, with iPad and perhaps iPhone/iPod  versions to follow if all goes well.)

I really am working on this, and so is Helen, who has a parallel project taking a different approach. But it really is going slowly. The chances that we'll be ready when Lion is ready are just about nil, so there will be a gap of time. But watch this space, and keep an eye on for news. It will happen someday, if I can make it happen. In the meantime, your patience and understanding is appreciated.

Friday, March 11, 2011

The Jaded Gamer

We've been through a number of phases in our career as boardgame hobbyists. It's been an interesting journey. (Well, it's been interesting to us. If you have no love for the love of boardgames, you'd best stop reading now. What follows is the height of geekery.)

When we first discovered modern boardgames, we were delighted but a bit reluctant to start a collection. I remember trying Reiner Knizia's Samurai and really liking it, but we were put off by the $38 price tag it carried. Back then, that felt like a lot of money for "just a boardgame."

Within a year, our attitude had changed. We'd been to a few specialty game stores, we'd discovered BoardGameGeek, and most importantly, we'd played a bunch of games. We realized that a game that costs less than taking the family to a movie, and which can entertain the whole family not just once but over and over again, is actually a pretty good use of our entertainment budget. We started buying games.

At first it was easy. There were lots of great games, and BoardGameGeek and a growing circle of gamer friends clued us in to the good ones. We liked nearly every game we bought, so we kept buying.

But after a while we noticed that we didn't like all of the games we bought, even some of the most highly-rated ones. We realized that there were quite a few different kinds of boardgames, and we liked some kinds better than others. We now know that we mostly don't like party games, wargames, dexterity games, or games with a high luck factor. We do like strategy games (where the strategy is something other or more than maneuvering military units on a map), "economic" games (where you start with a few resources and a little money, and build a big economic empire or engine of some kind), and low-luck card games.

That understanding helped us refine our purchasing habits, and we once again found that we liked nearly every game we bought.

After a few of years of this, we found that we had become collectors. We had so many games that years went by without some of them getting played. This may sound foolish, but in fact it works for us. The reason is that not every game, even the really good ones, are good choices for every occasion. Selecting the right game to play depends on many factors: how many players we have, how willing they are to learn a new game, how long and complex the rules are, how long the game will take to play. Like us, our gaming partners have their own preferences as to what kinds of game they like, and those preferences aren't a perfect overlap with ours. And then there's mood: sometimes we're up for a highly competitive skull-cracker, while other times we want to take it easy. This is the chief reason for having a large collection of games: the desire to have the right game for every occasion.

And now more years have passed, and I think I've reached a new phase (although in this I won't speak for the rest of the family). I've realized that there are some dusty games in our collection that delighted us when we first got them, but that we haven't played for years, and which I haven't missed. They're perfectly good games, but we now have other, better games that fill the same niche in our collection. Why play a lesser game when I can play a better one that scratches the same itch? Simple variety is worth something, but the collection is large enough now that that really isn't a problem.

If it were just me, I think I'd be making a list of games to purge. We have already done some purging, but so far it's been games we don't like. We're not quite ready to take the step of getting rid of games we actually like-but-not-enough. But I'm getting there!

(Getting rid of games is almost a hobby of its own, by the way. We usually trade with other gamers for games we hope to like better, but we have also sold them off at flea markets. eBay is another option. Other gamers somewhere will want and enjoy our cast-offs!)

But in case you're wondering, let me be clear on one point: I'm not done with adding games to our collection. Perish the thought! We are still adding to our collection: new games keep coming out, and we continue to want to acquire the best of them. But I'm now starting to think in terms of improving the collection instead of merely expanding it.

Saturday, January 22, 2011

Screaming Video

In many ways, we're a family on the cutting edge of new technology. In other ways, we're a bit behind the times. We recently and belatedly realized that instead of paying big bucks to our satellite TV provider for a lot of high-end channels we mostly don't watch, we could instead pay $7.99 to Netflix and watch any of bazillions of TV shows and movies, any time we like, on demand. To do this, we needed a new piece of hardware: a "streaming video" box hooked up to our Internet connection and to our TV set. The hardware costs in the neighborhood of $100, depending on what you get; although some brands are more expensive, you can get a very nice unit for that price from a number of vendors.

That sounded like a good deal to us, so all we had to do was decide which brand. I chatted at length with a good friend who had experience with a couple of different models, and we did our research on the Web, looking at specs and reviews. Based on on research and word-of-mouth, it came down to two choices: Apple TV, and Roku.

In most respects there's little to distinguish these products. Our friend told us that both were good and we'd be happy with either, but in his opinion the Apple product had (as you might expect!) a nicer user interface. Both he and a reviewer also thought that Apple provided better picture quality. Pretty much everybody agrees that Roku offers a lot more content than Apple TV, but all we really care about is Netflix, and that's available through both boxes.

We've been an Apple household for over twenty years. Nothing as complex as a computer (or anything with a computer in it) is ever 100% perfect, and we've had some complaints over the years; but in general, Apple has consistently provided great products and we've been very happy with them. That made the decision seem clear: we went down to the Apple store and bought an AppleTV.

If you haven't seen one of these things, they're absurdly small: a little larger (and squarer) than a hockey puck. You plug them into the wall for power, into your household network (wired or wireless) for Internet access, and into your TV set. Power it up, work through a couple of minutes of easy setup, and hey presto! TV on demand... it says here.

And suddenly, we found ourselves in the wide, wide, world of dreadful disappointment. We selected a show, the "I'm busy" spinner appeared, and we had to wait for a few minutes, about enough time to go make microwave popcorn. Then the show started, played for fifteen seconds, then froze. It continued this alternating stop-and-go for the first several minutes of the show. After that, it seemed to settle down, and provided smooth playback and very good picture quality. We were disappointed, but it seemed like something we could live with.

We tried another show. The spinner appeared... and never went away! The show never started. After twenty minutes of increasing disbelief, we reset the machine and tried again. While some shows seemed to play without problems (other than a bit of startup stuttering), most shows would never start. We'd just get that spinner, for as long as our patience held out.

People, it is not "video on demand" if it takes half an hour or more for the show to start!

We got on the Internet again, using search keywords like "slow loading." We quickly found out what none of the reviews had told us: a small but significant number of Apple TV users have been reporting this behavior. It apparently started about three months ago, with Apple's latest software update for the product. To date, Apple has neither acknowledged the problem nor provided a fix.

In over twenty years, this is the first time we've ever had to regard an Apple product as a complete and utter failure. That thing is a $100 doorstop.

Our internet connection is 1.5MB DSL. We are aware that 3.0MB is the recommended minimum for streaming TV. We've signed up for that, and the upgrade should kick in sometime next week. We will keep the Apple TV box until then, and see if the network upgrade helps. If it doesn't we'll return it, with some choice words for the salesman who sold it to us without saying a word about these problems.

Last night, we went out and bought a Roku XD|S at Fry's, for exactly the same price as the Apple box. We brought it home, plugged it in, set it up, and it pretty much worked immediately. The user interface and setup procedures are a bit more cumbersome than Apple's (and the screen display and menus are definitely uglier), but the Roku is not at all difficult to use. We had one setup glitch: you have to tell the Roku to install the Netflix application, which it does by downloading from the network. (Apple TV comes with Netflix pre-installed.) Just like the Apple box, this download showed us its version of "please wait" and stayed that way for twenty minutes until we ran out of patience. We restarted the box, and found that Netflix was now installed and working. We had no further problems: every show we tried started within seconds, played smoothly, and showed good picture quality. (We expect the picture quality to improve once our network upgrade is complete.)

Unless the network upgrade somehow fixes Apple's problem and the Apple TV really does show significantly better picture quality than the Roku, we'll be returning the Apple box and keeping the Roku.