Video Games facing Supreme Court review

May 17th, 2010 by Gregg Seelhoff No comments »

The US Supreme Court will hear an appeal about a law restricting video game sales.

Two weeks ago, the United States Supreme Court announced that it would hear an appeal of the California ban on sales of certain “violent” video games to anyone under 18 years of age.

This case is very likely to turn on a decision about First Amendment protections of free speech.  On the one hand, this is a good thing, given that none of these types of laws has ever been upheld as Constitutional.  (At last check, video game and First Amendment advocates were 13-0 against overzealous legislators.)  Additionally, this Court recently held that it is perfectly legal to profit from video sales of animal snuff films (US v. Stevens, 08-769).

The scary part, however, is that this is also a Court that does not really understand current technology, as demonstrated in the questioning (on the same day) during City of Ontario v. Quon, when some of the Justices asked basic information about how text pagers work.  Further, recent Courts (with the same core Justices) have not been reluctant to modify the law of the land based on politics rather than law.

It is a crap shoot and we will have to wait until October for the case (Schwarzenegger, Governor of California v. Entertainment Merchants Association, 08-1148) to be heard, and probably even longer before a decision is announced.

In a recent opinion piece, The New York Times agrees that the law is unconstitutional, concluding that, “The Constitution, however, does not require speech to be ideal for it to be protected.”  Bingo!

Click on the banner below to join a free organization that informs citizens of these kinds of threats to free speech, and specifically to video games being treated differently from other forms of expressive media and entertainment, including films, books, and music.

If you are not easily offended, see this related piece of satire from the Onion. [warning: NSFW!]

Poll: Almost nobody disagrees with not regulating video games.

Earlier this month, U.S. News & World Report posted an opinion poll [still open for votes as of this writing] on its web site, using the misleading title, Violent Video Games: Should Kids Be Able to Buy Them? Of course, the poll question is “Should Kids Not Be Sold Violent Video Games?” which elicits an opposite response from the poll title.

Whether by a deliberate and hamfisted attempt to manipulate the results, or just utter incompetence, the confusing wording opens the results up to interpretation.  More than 70% answered the question correctly, and I estimate that 90% of the other respondents misread the question (missing the “Not” or simply answering the headline), so I place lamina in buccinator and conclude that more than 97% of the public oppose video game regulation.

Take that!  (I can be just as unscientific as the “mainstream” press.)

Most Popular Solitaire is #1!

May 5th, 2010 by Gregg Seelhoff 1 comment »

One of our solitaire games tops the Apple Downloads charts.

As I mentioned in a previous post, Apple had stopped updating the pages on its Apple Downloads site back in March, so Most Popular Solitaire, our solitaire title with 30 of the most popular games, was reliably in the top 15 on the (dynamic) ‘Top Downloads’ list on the left of each page but was not listed at all on the ‘Most Popular’ pages in the ‘Games’ category.  (As of this posting, Most Popular Solitaire 2.02 is #11 of all Apple downloads, including Apple’s own products.)

This morning, though, Apple finally updated the pages and Most Popular Solitaire is at the very top of all game downloads, listed as #1 on both the Games: Most popular and Cards & Puzzle: Most popular pages.  Sure, this position is likely to be fleeting, especially now that new submissions are being posted again, but it feels good for the moment.  Of course, some of those new submissions will be from Goodsol Development, so we will be looking to match this success and get more of our games to the top.

Thanks to Apple for finally getting this fixed.

40 Years of Earth Day (Observed)

April 24th, 2010 by Gregg Seelhoff 1 comment »

Earth Day celebrated its 40th Anniversary on Thursday.

In honor of Earth Day, which was first held on April 22, 1970, I thought that it would be fitting to note that the manner in which we (much of our industry) do business is one of the most ecologically responsible methods of commerce.

Everybody in our company currently works from a home office, which means that the commute involves no burning of fossil fuels.  Additionally, only one location needs to be heated (or cooled, on those rare occasions in Michigan), so less natural gas (or LP, fuel oil, or electricity, as appropriate) is used.  As important to us, though, is that we are not contributing to the gratuitous development sprawl that was taking place here entirely unabated, even by massive oversupply, until the financial crisis finally slowed it down just a bit.

Occasionally, I have considered that the 15 year old van I drive could be replaced with a more fuel efficient vehicle, but I have not taken action yet because, first, it is already quite efficient overall because of its limited use and, second, despite much blather, current fuel consumption (MPG) ratings are ostensibly worse than when this van was built.  I sometimes go for days without driving, so it would take a long while to make up for the manufacturing cost of a new car, and when I do drive, this old 3.8 liter V-6 engine still gets within a few miles per gallon of most new “hybrid” vehicles I checked.  Sad.  (The expense of a new vehicle, weighed against the current lack of car payments, has also been a significant factor.)

The one area in which online software sales and virtual stores falls behind is in consumption of electricity, which can be seen to be elevated due to extensive use of computers, and especially the constant, 24 hour/day, operation of various servers.  In our case, for several years we voluntarily purchased, from our municipal provider, a couple of “blocks” of electricity generated from renewable sources, which was enough to cover all of our company computer usage (including servers) each month.  This was an investment in keeping and building these renewable sources of electricity, which has since been mandated for all public utilities in Michigan.

Of course, there is always more that one can do, so it is a good idea to take a little time every once in a while to consider ways to improve fuel efficiency, whether your goal is to save money or just save the planet.  (Our project for this summer involves insulating the floor under the front part of my office, which was never done at all by previous owners, including the idiots who built the addition.)

The Hubble Space Telescope is 20 years old today.

On April 24, 1990, the Hubble Space Telescope was launched into orbit from the Space Shuttle Discovery.  Those readers who were alive and conscious at the time will remember the initial problem with the main mirror led to criticism and ridicule, but that problem was fixed, and that resulted in great leaps forward in the field of astronomy (and a million beautiful desktops).  Last year, the “last” fix has made the orbiting telescope more powerful than originally imagined, and it could continue its successful run for many years to come.  Like a piece of software, version 1.0 had its share of bugs and detractors, but it became really useful at version 2.0, and by version 3.0 has already outlasted and outperformed all predictions.

Happy Birthday, Hubble!

Two Weeks of iPad

April 17th, 2010 by Gregg Seelhoff 2 comments »

The Apple iPad lives up to its billing as a “game changer”.

After two weeks of using the Apple iPad, I am confident that the introduction of this device is going to be seen as a major event in the history of computing (despite the overwhelming hype trying to convince me of exactly that).  There is a reason that more than half a million iPads were sold in the first week, and that is before the 3G and international releases.

It is not that the iPad itself is a perfect device; it is not.  Nor is it that the idea is unprecedented, as tablet computers have been available for years (and it has been called merely a big iPod Touch).  However, where Apple excelled (in this case) was in the product design of both the hardware and the software, and coupled with the small technological advances, the result is significantly more than the sum of the parts.  Finally, Apple has successfully conveyed this “vision” to the consumer.

What makes the iPad special is the flexibility that the very simple physical interface (basically, just a big multitouch screen) affords.  When an application is launched, the iPad takes the desired form, whether that be a book, a map, a browser, or a game, and it does so wherever the user wants to be.  Psychologically, this makes a really big difference, which is probably why so many people are raving about the iPad.

In our household, we have already run into device contention.  My wife has laid on the living room floor using the iPad to map out a High Adventure canoeing trip for this summer.  My son gets up early in the morning to play games on it, or to use it to browse for information related to games he plays on his computer or video games consoles.  I have gotten back into reading literature for pleasure (which I have been intending for a while) because iBooks is well-suited for that.  In the evenings, we generally have the iPad nearby as we watch television or movies because we inevitably want to look something up on IMDb (instead of getting out a heavy laptop or going to the office desktop as we did previously).  Of course, there are sighs of discontent during the day when the hardware is roped into the office for its original purpose: software development.

Personally, I think that the iPad will anchor a new category of computers that fits among the various other kinds of computing devices  Most of the general complaints about the iPad I have read are in comparison to these types: it does not function as a smart phone; it is too big to put in your pocket/not portable enough; it does not do as much/is not as powerful as a laptop; it not as productive as a desktop system.  I think that smart phones, portable game systems, laptops and desktop computers are here to stay, but they will have to make room for the iPad and other slate computers.  That said, I think that the category of “NetBook” computers may be done for.

In practical terms, here are the three largest (albeit minor) complaints I have found about this first generation iPad:

  1. The reflective screen really shows smudges and gunk (such as cat hair).  I have no problem reading it, but I compulsively wipe fingerprints or grit from the screen, and I cannot count the number of times I have unintentionally turned book pages or linked to an unwanted web page doing this.  (I suppose the lock button solves this, if I can train myself to use it.)
  2. The clock application was omitted from the list of provided applications.  The iPod Touch is my only alarm clock, and it only makes sense that I should be able to take the iPad to read in bed and also set it to wake me in the morning, especially since the same program would already work.  (One can set a reminder with an audible alert, but it is not the same as an old car horn.)
  3. The iBooks application, while ostensibly providing a virtual bookshelf, does not allow freeform rearranging of books on those shelves.  Sure, one can delete books and change their order, but they always gravitate to the top left.  What if I want to put my books on the left, and Sherry’s books on the right, and those that we have already read on the bottom shelf, huh?

The final unfortunate aspect of the iPad is that, due to its popularity, I have to start a pool for the date of the first time that the iPad is dropped on the floor (or sat upon), and for when it will actually be broken in such an incident.  Those who chose “less than two weeks” have, thankfully, lost.

More than Just a Name

April 15th, 2010 by Gregg Seelhoff 1 comment »

Most Popular Solitaire is the most popular solitaire game for Mac OS X.

The Good News over the last few weeks has been that our solitaire title, Most Popular Solitaire, featuring 30 favorite solitaire games, has proven to be the most downloaded solitaire game at Apple Downloads.  Ever since the latest update, Most Popular Solitaire 2.02 has been receiving amazing numbers of downloads, even eclipsing the Windows version of Pretty Good Solitaire.

Most Popular Solitaire appears on the ‘Top Downloads‘ list on the left side of every Apple Downloads page, and has consistently done so since shortly after its release.  Charting as high as #7 and only dropping off for a single day.  (As of this writing, MPS is ranked at #12.)  Note that this is for all downloads from Apple’s site, including such packages as iTunes, Safari, and Mozilla Firefox.  At times, our solitaire game has been ranked higher than QuickTime, and no other solitaire game has appeared on the list.  In fact, we have regularly had the most download game (period).

Now comes the Bad News.  Whether it is due to some oversight in the midst of the iPad excitement, or related to the recent change to remove the ‘Downloads’ link from the main Apple page (in favor of “iPad”), or just a run-of-the-mill screw-up, the ‘Most popular’ pages for each category are not being updated, and this problem has lasted for three weeks now, which means that these pages show the top downloads from just before our game update was released.  It is clear that Most Popular Solitaire should be ranked #1 on the Cards & Puzzle: Most popular page, and probably no lower than #2 on the Games: Most popular page.

Now we still have the problem that traffic is falling off due to the lack of updates, and assuming that the problem will be fixed (hopefully soon), there will probably be a frenzy of product submissions, especially with those already in the pipeline, and our products could become lost in the noise.  Since Apple Downloads is a very important distribution point for Mac OS X titles, this issue is already impacting our marketing.

Despite this inconvenience, development for this platform is continuing apace, and there should be an official announcement about Pretty Good MahJongg Mac Edition in the very near future, as well as one for a related platform, hinted at the end of the most recent post at A Shareware Life.

In any event, I am currently enjoying an absolutely beautiful day, with summer temperatures, bright sunshine, and the stress-free knowledge that all of our business and personal taxes have long since been filed.  Happy Tax Day!

I Got Mine

April 3rd, 2010 by Gregg Seelhoff No comments »

The Apple iPad arrives, right on time.

At 11:14 this morning [Saturday, April 3, 2010], our Apple iPad was delivered to our office door.

This is the first piece of hardware that I can recall ever pre-ordering, and I actually placed the order within the first minute that it was possible.  Since the iPad was announced, I have read lots of skepticism about its value and usefulness, and I am resistant to hype.  (In fact, I often avoid things that are probably quite good simply because of the hype attached; for example, I have thus far refused to see Avatar.)  With the iPad, though, I could immediately comprehend its potential, especially for games and particularly for the kind of games that I enjoy creating and playing.

While awaiting a delivery, whether it be books, music, or hardware, I tend to almost obsessively check the package tracking.  In the case of this highly anticipated product release (witness the latest episode of Modern Family), I was apparently not alone.  Despite several different rumors to explain the odd tracking data from UPS, many of which ended with a conclusion about shipments being delayed, the actual explanation is likely to be much simpler.  My guess:  Because there were 200,000 units being shipped from China, they were originally packaged in huge lots destined for each distribution point (in our case, Louisville, Kentucky) and not scanned individually until they arrived there.  (I seriously doubt my iPad flew nonstop from Guangzhou to the Bluegrass State.)

Interestingly, I happened to be awake at around 5:33am, having just watched an exciting (and wet) Formula One qualifying session live from Kuala Lumpur, Malaysia.  The wind was apparently coming from the right direction, and I heard the airplane carrying my shipment fly almost directly overhead.  The “arrival scan” was 22 minutes later, though it actually took two more trucks, and a couple more scans, before it arrived here.  (The iPad Dock is still in transit, via a different carrier with distribution in a different, albeit neighboring, state.)

Anyway, there will certainly be a proper review in the future, but right now I feel that it is time to get started playing around with our latest software platform.

The most surprising aspect so far was that Apple had UPS require identification in order to receive delivery of the iPad package.  The only “problem” so far is that I did not get to use my alternative title, “iSad” (had it not arrived).

Productivity Boost

April 1st, 2010 by Gregg Seelhoff No comments »

Prolific Development Through Isolation

Over the past several weeks, I have been working very hard on a number of exciting new projects, all of which are making great progress.  In the process, though, I have managed to neglect and get a couple of weeks behind on my email, while essentially ignoring all other forms of inbound communication.

The result is that my productivity has increased greatly, while only missing one important piece of information.  Therefore, I have decided to make these changes to my workload permanent.  As of today:

  • I will shut down our email server.  It receives, literally, thousands of messages daily, of which 99.9% is spam; even messages addressed only to my legitimate email addresses are more than 96% spam.  Besides, the old hardware is locking up on a regular basis anyway.
  • I will remove telephone service from the office.  Our two voice lines are used almost exclusively for answering telemarketing calls, and our fax line is disconnected most of the time due to the high volume of spam faxes.
  • I will bring an end to our social media experiment.  In the time that I have been focusing on programming, I have not checked Facebook at all and do not feel that I missed anything.  I feel likewise about Twitter, which I have never checked.
  • I will no longer spend any more than one hour per year writing joke posts for this blog.  It is really too nice outside to be in here right now.
  • I will create a private contact page on our web site exclusively for those who pay us money.  Those wishing to pay us money can initiate contact via blog comments.
  • I will keep the post office box, despite the junk mail, as it is a direct means for us to receive money.  One can avoid the online back and forth by just attaching a check to your message and sending it to our business address.

I can feel my productivity on the rise already!

Most Popular Solitaire 2.02

March 25th, 2010 by Gregg Seelhoff No comments »

Our entry level product for Mac OS X and Windows is updated.

This week, Goodsol Development released Most Popular Solitaire 2.02, a maintenance release of this popular solitaire title.  The product contains 30 of the most popular solitaire games, including FreeCell, Spider, and Klondike (known to many as simply “Solitaire”), plus 13 more bonus variants (not available in the evaluation version).

Ostensibly, this update contains a few bug fixes and does not change much about the product itself, though internally it takes a sizable step forward.  This version brings the code up to the latest (properly tested) version of the Goodsol Solitaire Engine, so future updates will be easier to build and maintain (on multiple platforms).

Most Popular Solitaire is available for only $16.95 via secure server, and trial versions are also available for Windows and for Mac OS X.

More is yet to come.

A couple of weeks ago, I decided to challenge myself to completing three products in three weeks.  I have been sequestered in my office, for the most part, since then.  As much as I would like to proclaim the two Most Popular Solitaire 2.02 SKUs as two of those, the truth is that they were not even considered, so there are still three products (and SKUs) yet to come, albeit not next week.

My status is that the first priority, a full Mac OS X port, has taken longer than originally anticipated, but it will be announced shortly.  The second project, extending a recent product to operate on a new platform, has been forcibly pushed back for at least 9 more days.  (You figure it out; I cannot talk about it.)  The final product in this group, Pretty Good Solitaire Mac Edition 2.20 (with 100 more games and a few new features), is making good progress but…  there is only so much we can do at once.

Finally, although I have not had any time for Facebook during my challenge, I will tell you that you — yes, you! — can now become a fan of Pretty Good Solitaire.

API Design Dilemma

February 25th, 2010 by Gregg Seelhoff 2 comments »

I need to decide how to define certain parameter types.

The general situation is this:  I am refactoring a piece of C++ code to be part of a separate library, so I am in the process of defining and documenting an API for using the included classes and methods.  A fundamental design consideration is that the library may be called by third parties, without access to the source code, so I need to make the code as close to bulletproof as possible.  (For internal development, at least I know the methods used, how the API will be utilized, and that it will not be abused terribly.)

During this process, I encountered a theoretical dilemma about how to handle certain parameters.  Specifically, I was working on method definitions that included sizes and counts that should never be negative (but, of course, I need to prepare for abuse).  As an example, say I am reviewing a method that is declared like this:

    bool FillBuffer ( byte* pBuffer, int nSize );

Here, pBuffer is a pointer to the buffer to be filled, and nSize is the size of that buffer.  Of course, it is not possible for a buffer to be a negative size, so my initial reaction was to redefine it as:

    bool FillBuffer ( byte* pBuffer, unsigned uSize );

This makes perfect sense from a theoretical standpoint, but then a practical consideration occurred to me.  I always verify parameters with an assertion and, for a public method (as here), abort the routine if verification fails, with an exception or error return as appropriate.  In this case, my original method would assert nSize to be greater than zero (and return false), which would catch any negatives.  The new method would only catch the case where uSize was zero, but if a careless programmer cast a signed integer (or, worse, let the compiler do it), the current validation check would not identify a problem.

So, there were a few obvious solutions that I considered:

  • I could leave the original definition alone, which would catch obvious parameter errors, but would be theoretically incorrect, and if a programmer wanted to pass the size of a static buffer, using sizeof(), there would be a signed/unsigned mismatch.
  • I could use the new method definition, which would be correct in theory, and just trust programmers not to abuse the method with invalid parameters (and let them suffer if they do).
  • I could use the new method definition and add a sanity check so an extremely large buffer size (i.e., likely a negative value cast improperly) would be rejected, but the drawback there is that any such check would be somewhat arbitrary, and it would limit the functionality for any programmer who truly wanted to use an enormous buffer.

Each of these solutions has advantages and drawbacks.  I dislike having a parameter take a type that is not accurate (though not so much as to not have written this code in the first place), but I dislike arbitrary limits even more.  However, I know that defensive design is important here, since a careless programmer is, in my experience, the most likely to complain that the library or API is at fault.  (I was once threatened with physical violence when I produced a critical review of code written by a nominal “programmer”.)

At this point, I am leaning toward a hybrid solution by overloading the method with both (or multiple) definitions, the original checking for negative sizes as usual before doing an explicit cast of the size value and passing processing to the new/correct method.  The advantage is that passing an actual negative number (or signed type) will result in that extra checking, and a programmer could pass a buffer size up to the limit of the unsigned type.  The disadvantages are the additional work needed to create the extra stub(s), loss of type checking during static analysis, and the fact that our careless friend could still cast a value to create problems (but then it should be quite obvious, at least).

This post is an exercise in the process of working through a problem by simply writing down the issues, which often results in a solution (or decision) by the time one is finished with the description.  (It did here.)  I would, however, welcome any comments on my proposed solution, or other suggestions.

Finally, yes, I know that int and unsigned are not ideal parameter types for this in the first place, but I used them for the purpose of illustration.  (The principle also applies to object counts and other similar parameter types.)

Quote for February

February 17th, 2010 by Gregg Seelhoff No comments »

The true object of all human life is play.

– G.K. Chesterton