Friday, November 23, 2012


Solitaire Till Dawn fans: Please see the new Solitaire Till Dawn blog for news about the game. Posts about Solitaire Till Dawn will now appear exclusively in that blog; I am returning the focus of this blog to matters of interest to myself, my family, and my close friends.

I have retired from my day job! No more 40 hours per week of working on other people's projects; no more way-too-early alarm clocks; no more wasting 8+ hours per week on commuting. Hooray!

So what now?

Actually I have lots to do. I expect to be extremely busy, even short on time, through the holidays. Sometime early in the new year things should settle down a bit. When I can get a routine going, I still expect to be busy, but no longer hurried.

We are going to move house, and fairly soon. That, along with the usual holiday fuss, is what will be keeping us extra-busy for a while: selling the house, finding and buying a new one, preparing to move, settling in to the new place. It will take time, but we expect to really enjoy our new digs and new location once that's done.

Aside from that, I plan to spend several hours per day (most days) working on Solitaire Till Dawn. This will be more time per week by a factor of ten than I've been able to devote to it for the last few years. That's going to be fun. Most of the rest of the time will go to my more serious hobbies: music, boardgame design, and playing games with Helen, friends, and the kitties.

I'm looking forward to it!

Monday, August 20, 2012

Solitaire Till Dawn: The Last 90%

I am nearly at the end of a three-week "working vacation", time off from my day job which I have spent working full-time on Solitaire Till Dawn instead. It has been both productive and fun, and although Solitaire Till Dawn for Lion (and beyond) is still not done, I've made a lot of progress.

In these three weeks I've accomplished the following:

  • Made the animation system sane and well-behaved
  • Implemented a full preferences system for saving your settings and scores
  • Created the "Players" feature, so you and your family can keep separate, personal settings and scores
  • Implemented automatic saving of your game when you quit, and automatic resume when you start again later
  • "Sandboxed" the app, to obey Apple's new security restrictions
  • Wrote the code to import your old scores and settings into the new version
  • Created a half-dozen new cardback images, with high resolution for modern screens
  • Implemented the Décor panel, so you can choose royalty, cardbacks, and background images
  • And made loads of miscellaneous bug fixes and user interface spiff-ups.

So where do we stand?
Fair question, especially after all that gloating and bragging. I'm afraid there's still a lot left to do.

Some wag once observed that the first 90% of the job takes 90% of the time; and then the last 10% of the job takes the other 90% of the time. He was right. At this point, nearly all of Solitaire Till Dawn's major features are basically working. There are a couple of time-consuming items left to do: for example, I still have to implement the "extended statistics", and I have to write all the built-in help pages. But most of what's left is just a whole lot of tedious testing and bug-fixing.

At this point, I expect some of you are wanting to volunteer to help with the testing. I'm grateful for all the offers, but I'm still not accepting testers (not even a waiting list, so please don't clog my in-box with requests, thanks!). Managing beta testers is itself a big, time-consuming job, and I'm not going to start it while I still have a big list of bugs I've already found and can test myself.

When testing is complete and I think the product is ready for release, I will submit it to Apple's App Store. This will require getting my descriptive text and screen shots ready and packaged up, which is another task that will take some time. I've never done this before, but from friends I know that acceptance may take weeks, especially if Apple find problems they want me to fix.

Will there be anything missing in the first release?
Yes, a few features from the old version will almost certainly not be in the new version. I am deliberately leaving some things out in order to get the app done as quickly as possible. The list of skipped features may include:

  • Magnetic Mouse
  • "Cheat" features
  • Custom cardbacks from your own photos
  • The clock timer
  • "Save Game" and "Open Game" menu items (but your current game will always be auto-saved)
That list is not final. And if one of your favorite features is on it, please don't worry. If it isn't in the first release, I will add it in a later update.

Enough, already! We just want to know when it will be done!
Sorry, I don't know! Testing, bug-fixing, and submitting to the App Store are all things that will simply take as long as they take, and I can't predict how long that will be.

My vacation will be over in a couple of days, and I'll be back to having only evenings and weekends for this. I've used these full-time weeks for the "big ticket" items, stuff that really requires hours of uninterrupted concentration and a mind that isn't end-of-the-day exhausted. Those items are now finished, and most of what's left should not require such deep focus. I'm hoping I can be reasonably productive even in those late-night snatched hours. I'll continue to keep you posted on my progress, of course.

What about Mountain Lion?
I won't release Solitaire Till Dawn until it is compatible with both Lion (OS X 10.7) and Mountain Lion (OS X 10.8). That won't delay things much, I think.

I had originally intended to keep this release compatible with Snow Leopard (OS X 10.6) as well. That may yet happen, but if it looks like it would seriously delay the release, I will abandon that. Snow Leopard is now out of date by two major OS X updates, and the old version does still work in Snow Leopard if you install Rosetta.

Thursday, August 2, 2012

Midsummer Fair Winds

The title of this post is kind of lame, but never mind. I was trying to draw a contrast with my previous Midsummer Doldrums post. Very shortly after I posted that, unexpected events changed my situation quite a bit.

I am now, unexpectedly and suddenly, on vacation (or what I will try to call "vacation" without falling down laughing). It's really just a break from my day job, a couple of weeks off that I will mainly spend working on Solitaire Till Dawn.

This means that instead of trying to snatch an hour or two in the evenings, when I'm bushed and can't think straight and have a zillion distractions, I can instead work a full eight-hour day on solitaire. While I don't expect to finish the project during this stretch, I do expect to make a metric ton of progress.

And here's the first fruit: on my first full day I have already finished off that architecture issue I was moaning about! It's another redesign of the animation subsystem (I think this is at least the third time I've done that), and it's working better than it ever did, with much simpler code. Tomorrow I have a bit more cleanup to do on that task, then it's back to real forward progress again.

P.S. Unhappily, the "unexpected events" I mentioned were not all good for all concerned. That story isn't mine to tell, but I wouldn't want those who know the story to think that my only reaction was unalloyed joy. As for me and mine, we're okay; we're just feeling sympathy for friends and trying to find a silver lining or two amongst the clouds.

Sunday, July 29, 2012

Midsummer Doldrums

It has, once again, been too long since I've posted any kind of an update. I am starting to see signs that some of you are worried that I am dead, or tired of working on Solitaire Till Dawn—that, in short, the project has been abandoned.

This is not so; I'm still here and still working on it. But it is true that progress has been stalled for some time. This has not been a good year for the general health of my family: nothing life-threatening, but there have been a succession of events that have taken up a good deal of our time and attention, and that have prevented me from focussing on software.

Also I have been stuck on a design issue. I was dismayed to find, at this late date, that some lingering bugs weren't just a matter of tracking down a minor problem and making a fix. Instead I have had, once again, to re-think some core matters of Solitaire Till Dawn's architecture. I haven't been posting about it because it's not the sort of thing that can be simplified down into a paragraph or two. I haven't known what to say about it; that, plus the general lack of progress, have left me silent for too long.

I apologize for that silence, and I'll try to do better. I am finally starting to regain the time I need each week to work on this, and I am starting to make progress again on the architectural issue, although it is certainly not done.

I can only plead with you all, once again, for faith and patience.

(Nearly forgot: some have been worried that Solitaire Till Dawn, when it is finally released, might support Lion but not Mountain Lion. I don't think that will be an issue.)

Saturday, April 14, 2012

The Mummy's Curse

Nearly a quarter of a century ago I wrote Scarab of Ra. Scarab was my first Macintosh game program. It was written for the Macintosh Plus, a machine with a very small black and white screen. In it, you become a "lowly undergraduate student in archaeology", and you are exploring the unknown and hazardous interior of the newly-discovered Great Pyramid of Ra.

Scarab of Ra was fairly advanced for its time. It offered a 3D adventurer's-eye view of the pyramid's interior, complete with some cheesy graphics tricks to make it harder to see details of items in the dim distance. It wasn't animated or realtime, but it kind of felt like it: every time you pressed a key to take a step, a little time would pass and certain hazards including cobras, monkeys, lions, and the horrible Mummy would change position to sneak up on you. The Great Pyramid was laid out as a series of mazes, each one larger as you got deeper in the Pyramid. In every game the mazes and the arrangement of traps and treasures was different.

I released it as shareware, which made it the very first product of Semicolon Software. This was all back before even the World Wide Web (man, that makes me feel old), so Scarab's distribution relied upon the kindness of strangers. People would upload it to their phone-in bulletin boards for others to find and download; they would give copies to their friends (Scarab's copyright notice explicitly allowed this), and Macintosh User Groups would put it on floppy disks along with other sharable programs to hand out to members at their monthly meetings.

This made for slow distribution and a fairly small audience, especially since there were not many Mac users at all back then. I charged $10 for it and left it to people's honesty to pay me if they liked it. I probably sold a total of a few hundred copies. That was nice, back then: it was just a hobby for me, and the proceeds from Scarab helped pay for new development software and Mac peripherals.

About three years after introducing Scarab I launched the first release of Solitaire Till Dawn. At first that too sold only slowly. But at about that time the Web appeared I coincidentally gave STD a major facelift, and its sales really took off. As a result, I continued to concentrate my efforts on Solitaire Till Dawn and never got around to updating Scarab. As chronicled elsewhere, changes in Apple's choice of CPUs and operating systems, coupled with the abandonment of the development software I'd used, left Scarab unable to run on modern Macs. It became "abandonware".

So you may imagine my surprise when, a few years ago, I began to run into evidence that Scarab of Ra is regarded in some circles as a "classic of Macintosh shareware" and that many people are nostalgically longing for its return. I do get the occasional email asking about it, but that's a trickle compared to the flood I regularly get about STD. But Scarab is featured prominently on web sites about classic Mac OS software, and a few months ago I discovered that it has a Facebook page of its own with several hundred "likes". Today I dropped in there (a vanity visit, I admit it) and discovered a link to another Facebook page which was an even bigger surprise.

The Revive Scarab of RA page documents a project to recreate Scarab of Ra. They are writing all-new code in Javascript so that you will someday be able to play Scarab of Ra in your Web browser. This also means that you will be able to play Scarab on any platform: Mac, Windows, Linux. That's pretty cool!

You might wonder how I feel about this: somebody else "ripping off" my product without so much as a how-d'you-do. I'll admit it makes me feel just a little bit itchy; but I'm going to rise above that and wish this guy and his collaborators all success. For one thing, it's not illegal to clone somebody else's product, so long as you don't violate copyright by stealing or copying the original product's code, graphics, or text. The code is no problem since they're writing theirs from scratch. They have not gotten as far as adding test or images yet, but the page's author has made it plain that he understands the copyright law and intends to provide new images and text, and produce something with an updated look and feel.

And I have to admit: in the past, a few people have asked me for permission to create new versions of Scarab. I've told all of them that I have no objection so long as they honor my copyright. This fellow (I don't know his name, it's not on the Facebook page) may well have been one of them. And even if he wasn't, I have no reason not to give him the same answer.

So more power to him! If he brings it off, it will be quite a tour de force—and I will be very stoked.

I even clicked "Like" on the Facebook page!

Tuesday, March 20, 2012

Fonts of Wisdom

Previous versions of Solitaire Till Dawn have always used carefully-drawn bitmap images to display the indices (the rank and suit of the card, shown in the upper-left corner). I did this because in the old days (you know, when we all used steam-powered computers), pixels were large and screen space was limited. I needed to know exactly where each numeral or letter would be placed, how tall it would be, how wide it would be, and how it aligned vertically and horizontally. I couldn't leave that to the vagaries of a computerized typesetter; if I did, all kinds of things wouldn't be right. The 10's would be absurdly wide; the suit symbols wouldn't line up vertically in columns; the letterforms wouldn't be thick and black enough for instant recognition; the fonts wouldn't look good at tiny sizes... you get the picture.

But it's a new age, people. I may be slow in realizing it, but I get there eventually. Bitmap images are a bad idea these days, precisely because they don't scale well as screens get larger and pixels get smaller. Using the system's text-display features takes care of that. And it turns out that the Mac's (and for future reference, iOS's) font tools are really flexible. This evening I finished substituting genuine font-drawn letters and numbers for my old bitmap images, and they look great.

To get the pixel-perfection I demand, I had to do some strange things. These included building tables that yielded the exact font size and baseline height needed for each separate card size; calculating string widths carefully for precise horizontal positioning and then adding offset adjustments for certain characters; and squeezing or widening some characters so their widths wouldn't differ so much. I even played with kerning to adjust the distance between the 1 and the 0 in "10", though in the end I found that I didn't need to do that.

I'm pleased with the results. The new letters and numbers almost precisely fill the space of the old ones, and are much better-looking. I think you'll like them.

I haven't done the suits yet. That comes next.

Sunday, February 26, 2012

Gettin' Stuff Done

Nope, Solitaire Till Dawn is not done yet. But I have made a lot of progress in the last few weeks. Here's a rundown:

Buttons are now fully implemented and working. These are the buttons that actually appear in the play area. They implement some special functionality that can't be triggered by the usual click-and-drag stuff. Most games don't have or need buttons, but Accordion has a "Deal All" button, Pyramid has a "Discard Pair" button, and Puss in Corner has a "Redeal" button.

Partial decks are implemented, needed by games like The Wish that don't (ahem) play with a full deck.

Tight fans, for games like Thirteens and The Wish. Also "anchored" fans: never mind why I call them that, but these make Fortress and its variations playable.

The deck now shows correct numbers: usually the number of cards remaining in the deck, but for some games it shows the number of deals remaining.

The displays and messages in the status bar are more complete and correct.

Keyboard focus is better-behaved, so you don't have to click in the Games Drawer or in the play area in order to use keyboard shortcuts.

The behavior of the available-card-highlighting feature is much improved (still need some work on the graphics, though). The find-card feature (press '5' to highlight all the visible fives, or '5s' to highlight all the visible fives of Spades) is also working now.

And lots of little things I won't bother to list individually: stuff I've implemented and/or fixed in the solitaire engine itself.

I've completed an initial test of all 100 games now. 87 of them seem to be working, while the other 13 still have some issues to be worked out.

What am I doing now?
This week I'm working on supporting different card sizes. Up till now, I've only been using the "normal" size. The game needs to allow selecting card size from a menu, and changing card size to match the window when you change the window's size. This is perhaps half done.

What's Left?
Lots of stuff, I'm afraid. A partial list:

  • Several important toolbar buttons, including the Autoplay features and Magnetic Mouse.
  • The built-in Help and the game rules display.
  • A number of the preference settings and their implementations.
  • Sound effects.
  • A number of graphics effects.
  • Score and statistics keeping, and display.
  • New artwork.
  • Separate scores and preferences for different players on the same machine.

And there's more; those are just some of the highlights.

I will not be implementing every single feature for the first release. Some of the old version's features will have to wait. I'll get all the really important ones in, and then add the rest over time, in free upgrades.

There you go: that's the status. I'm working hard; I want this out the door as badly as some of you want it in your hands. We'll get there!

Sunday, February 5, 2012

Alive and Well

I got an email recently from a fan who was worried because I hadn't posted anything about Solitaire Till Dawn for a while. I did warn y'all that it would take some time! And that's still true, unfortunately. But I am still working on it.

I haven't posted because I got stalled for a while. Part of that was just the holidays: traveling, visiting family, and doing Christmas stuff. Part of it was the sad loss of our old and well-loved family cat Freddy, and the subsequent addition of a young mom-cat and two kittens to our household. The new kitties are all sweeties, but they kind of turned the place upside-down for a while.

But the biggest delay was that I got stuck on a nasty bug, something I had to fix before I could move on. There was no progress to report: I've spent the last two or three weeks banging my forehead against my monitor, trying to figure out what was causing the bug and how to fix it. I finally nailed it today, or so I hope. Without going into mind-numbing detail, I'll just say that it was a multi-threading concurrency problem triggered by an intermittent race condition.

That sort of thing can be very difficult to track down, for two reasons. First, it's not trivially repeatable: it depends on subtle timing issues, and you might work the program for quite a while before seeing it happen. It's like that funny noise your car makes whenever you drive it, but never when it's in the shop. And that's why I had to say "I hope" above. I played hours of solitaire today after installing my fix and didn't see the bug again. So I think I got it, but it's still possible that it's just being coy and will re-surface later on.

The second reason it's difficult is that this is a class of problem that a friend of mine calls a "Heisenbug", because any attempt to debug it can make it change behavior or vanish altogether (only to reappear when you stop debugging, of course). But I have to admit that in this case, my problem was the opposite: nothing I tried seemed to affect the bug, until today.

But I got it. (I think.) And that means that I've now tested all the games alphabetically up through Manx. So that's progress, right?