Thursday, November 6, 2014
Finally, Solitaire Till Dawn
I'm going to break that rule now, because Solitaire Till Dawn is finally available in the App Store, and this is a personal achievement for me. It is the culmination of over five years of work, rewriting Solitaire Till Dawn from the ground up for modern Macs. Apple released the Lion version of OS X in 2011, and until yesterday that meant that you couldn't run Solitaire Till Dawn on any Mac with an up-to-date OS. Now you can: the new release is good for any Mac OS from Snow Leopard (10.6) up through the latest Yosemite (10.10).
It's been a long grind. The previous version of Solitaire Till Dawn was the result of 15 years of steady development; you can't re-create something like that in a weekend. And I was slowed at first by the requirements of my day job, and later by the exigencies of moving house to a new state. But for the past year or more I've been able to give it lots of attention, and we've finally reached the big milestone: the release of version 1.0.
The first version of Solitaire Till Dawn was released in 1991, at about the same time that the Internet was being created. It ran on the Mac Plus, as well as the Mac II (the first Mac with a color monitor). If you're interested, I put an article about the app's history on the Semicolon LLC website: The History of Solitaire Till Dawn. (I've also completely redesigned the website. Go admire it!)
In one way, I feel as though I'm owed a vacation now. But it doesn't really work like that, and anyway I don't want one. Once the dust from the initial release has settled, I will be adding new features and fixing any bugs that turn up, and putting out upgrades. And I hope to begin work on an iPad version soon, although I'm making no promises about that for now!
I'll make one plea here: if you decide to buy a copy, please leave an honest review and rating at the App Store. That will help sales if the review is good, and help me make improvements if it isn't. Thanks!
Monday, August 20, 2012
Solitaire Till Dawn: The Last 90%
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)
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
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
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.)
Sunday, February 26, 2012
Gettin' Stuff Done
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!
Saturday, December 3, 2011
That's the Sound of the Men...
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.
Monday, September 26, 2011
A Little UI Work
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 |
Tuesday, April 12, 2011
Unplanned Obsolescence
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 http://www.semicolon.com for news. It will happen someday, if I can make it happen. In the meantime, your patience and understanding is appreciated.
Tuesday, April 27, 2010
Solitaire Redux (yet again)
In 1991, almost 20 years ago now, I launched a new software product in my Semicolon Software line of tools and toys for Apple Macintosh computers. It was a package of nine solitaire card games, called Solitaire Till Dawn. Helen and I put a freeware demo out on the BBS and user-group circuits (there was no World Wide Web yet!), and mailed the full version on a floppy disk, with a printed manual, to anyone who sent us a check or cash for it.
Solitaire Till Dawn sold a couple of copies per week over the next year or so. It was the product that convinced me that I should write a lot of small products rather than a few big ones, because all of my products seemed to sell about two copies per week. Putting a lot of effort into one or two big products didn't seem cost-effective, when my smaller and quickly-developed tools were making just as much money.
The Competitive Instinct
A couple of years later, the TidBITS online newsletter reviewed a competing solitaire package, and compared it to Solitaire Till Dawn. The competing package was obviously better, but sales of Solitaire Till Dawn went up. (Apparently it's true: there's no such thing as bad publicity!)
But I didn't like being outdone. I put a lot of work into Solitaire Till Dawn, and released version 2.0 in 1994. It was a big improvement, but this version's real significance was that it was designed to be distributed and sold on-line. The Internet was growing, and we became one of the earliest adopters of Kagi, perhaps the Web's first on-line store. We gratefully stopped fussing with printed manuals, floppy disks, and mailing envelopes, and sat back to watch the money roll in.
And it did roll in! Sales went up by a factor of ten. I changed my plan: I never developed another new Semicolon Software product after that, and instead concentrated on improving Solitaire Till Dawn.
Aggressive Development
The good news was that we were now making significant income from our home business, where before it had been pocket change that I used to buy the occasional new computer or software package. The bad news was that I no longer had a hobby; I had a second job. The income belonged to the business and not to me. We were relying on that extra income (we had kids now!), and I couldn't use it for mad money any more.
But I was still having fun. I continued to add new games and features to Solitaire Till Dawn for several more years, until Apple threw me a curve by introducing Mac OS X.
The Mistake
Solitaire Till Dawn wouldn't run on Mac OS X. For a while that didn't matter. Most Macs still ran the classic Mac OS. But OS X usage grew, and our sales declined. So I sat down once again to do some real development work.
And here I made a mistake. I didn't have a Mac OS X machine myself. So rather than dive into Cocoa and Xcode (the OS X native development environment), I used the Carbon framework instead and stuck with reliable old Metrowerks CodeWarrior. Using Carbon meant I could run my new version on both classic and Mac OS X, which meant I could do most of my testing on my old Mac. It seemed like a good idea at the time.
The Consequences
It took me two years to complete the new version. But by then, the pent-up demand was enormous, and our sales were huge. For a while, especially the first couple of years, we were riding high.
But I'd built an Achilles heel into Solitaire Till Dawn X. CodeWarrior had been the best Mac development environment you could get for years, but nothing lasts forever. Metrowerks eventually stopped supporting the Mac. Okay (said I to myself, said I), my old copy still runs just fine. But then came the next bomb from Apple: the switch to Intel processors in 2006.
Bad news indeed! CodeWarrior could not compile for Intel chips. Theoretically you could take an old CodeWarrior project and import it into Apple's Xcode, and compile it for Intel. But I could never get that to work, and even if it had worked, it would have been just another stopgap, leaving Solitaire Till Dawn still dependent on Carbon. Carbon doesn't support some nifty new OS X features, and someday (I am sure) Carbon itself will fail me, when Apple eventually decides to abandon it.
Our Hero Leaps Into Action
Now was the time for me to get busy again! I needed to re-write Solitaire Till Dawn in Cocoa. I set right to it... and bogged down within a few weeks. I was burnt out! I'd written an unreleased predecessor to Solitaire Till Dawn in 1989 or so. I wrote version 1.0 from the ground up in 1991, and worked on it almost continuously for ten years. I wrote it from scratch again in 2001-2002 for OS X. I'd had two CPU chips, one operating system, and a development environment shot out from under me over the course of 15 years. And I found that I just couldn't face writing yet another solitaire program—never mind one that would have to be bigger and better than any of its predecessors!
Apple has always been good about backward compatibility, and it gave me an excuse to be lazy. To this day, Solitaire Till Dawn X runs quite well on Intel Macs, using Apple's "Rosetta" compatibility layer. But users want Intel-native apps. And now Apple has shipped Mac OS X 10.6, in which Rosetta is not automatically installed. It's still available, easy to install, and free; but it's another barrier to new customers for Solitaire Till Dawn.
The result of all this has been a steady decline in sales, and it's my fault. I made a bad decision when I first built Solitaire Till Dawn X, and I ran out of steam when it was time to fix that mistake. Now I'm four years late.
Our Hero Leaps Into Action (again)
Why am I blathering at you about this? For the same reason that some people talk about their diet plans and New Year's resolutions: in the hope that the fear of public shame will keep them on course. I have resurrected my old attempt to re-write Solitaire Till Dawn in Cocoa, and I have made significant progress with it. But it's going to take a while—months at least—and I'll need to keep my resolve and work on it every night that I have at least an hour of free time. If I succeed, I can hope for resurgent sales, and our household economy could certainly use that.
And maybe... just maybe, I'll have energy left to look into making an iPad version. It's clearly the new wave: there is likely more money in that than in Mac software. But here I am again, unable to afford the hot new hardware and unwilling to try to develop for a machine I can't test on. So I'm going to do the OS X version first. If I finish that, it should be a good starting point for an iPad version, because iPad apps are also built with Cocoa. I am making no promises about iPads yet, but I'd like to own one of the shiny things, and this would make a great excuse.
I just have to keep my nose to the grindstone, and hope that Apple doesn't shoot yet another processor, platform, or development environment out from under me.
[Read more about the history of Solitaire Till Dawn, if you're interested. I'll post small updates about my progress at the upper-left corner of this blog, and perhaps some longer dissertations as regular blog posts from time to time.]




