QuizBusters information

Here is some information on the most intelligent game show on television.

QuizBusters is a game show, based on quiz bowl competitions, that is produced and aired locally (to us) by WKAR, the public broadcasting station from Michigan State University. The show, now in its 17th season, is hosted and produced by Matt Ottinger. Each season, 64 teams of high school students, with 4 students on each team, compete in a single-elimination tournament, with half hour games/episodes taped over the course of several months. That, of course, means that 63 games are contested throughout the year.

One might be inclined to call QuizBusters a trivia contest, except that the answers are (usually) anything but trivial, covering mathematics, science, literature, history, geography, and other topics. The knowledge that it takes to compete, and especially to win, is impressive. Two teams, one in each division (Green Division being larger schools, and White for smaller schools) win $5000 college scholarships to MSU, and the ultimate victors also receive book scholarships.

Last year, the team from East Lansing High School won the Grand Championship, and my son, James, was an alternate (by virtue of having joined the team after QuizBusters had already started). This year, James has played every game so far and is doing quite well. Here is a summary of the results so far:

The first game was versus the Hastings Saxons, which is the alma mater of my wife, ironically. This game originally showed on January 28, but it re-airs tomorrow afternoon. It may also be viewed (reputedly) from the web site: Hastings Saxons vs. East Lansing Trojans. East Lansing won 560-140.

The next game, in what is (confusingly) called the “first round”, the opponent was Eaton Rapids. This game was first aired on February 4 and will show again on February 15. This game can also be viewed (if one has RealPlayer) here: East Lansing Trojans vs. Eaton Rapids Greyhounds. East Lansing won 650-90.

Note: Everything hereafter is a spoiler.

This victory led to the Division Quarterfinals against Okemos, a neighboring community also known for excellent schools. This game was taped on January 29 and will not air until April 1, and again April 10, so no pictures or video are available online yet. East Lansing won 630-210.

That moved East Lansing into the Division Semifinals against Howell. This game, for the honor of playing in the Division Championship, was taped tonight and will not air until April 29 and May 8. Again, the score was not particularly close. East Lansing won 630-170.

The Division Championship tapes next Tuesday, February 20, and will be against either Lansing Everett or Hartland (to be determined tomorrow). The Hartland Eagles are very good and, as the #2 seed (behind East Lansing), should be considered the favorite. The Everett Vikings, however, are one of two teams that have beaten East Lansing during Quiz Bowl league this school year, so they certainly stand a chance.

In any event, I am certainly looking forward to next week; it should be a great game.

Vista program icons

There are significant changes to program icon handling in Vista.

When I first started Windows Vista, I did not anticipate any differences regarding program icons. Although I had heard that larger icon sizes were supported, my expectations were that our traditional 32×32 (and 16×16) icons would continue to work fine. Technically, they work correctly, insofaras they are displayed and do not cause the program to malfunction, of course. However, changes in Vista render standard icons insufficient.

The first, and most obvious, change is that the default icon size on the Vista desktop is 48×48. With a standard icon, the 32×32 pixel icon bitmap is stretched to 48×48 (125% larger), which looks pretty bad in most cases. Of course, the icon sizes can be changed, and smaller settings are fine. However, a user may select a larger size than 48×48, in which case a standard icon is (get this) stretched to 48×48 and then surrounded by a frame of the desired icon size. Note that Vista does not leave the icon at the designed size, but rather stretches it to ugly first, and then puts a box around it for emphasis.

There are two places where icons are commonly displayed: 1) the desktop and 2) Windows Explorer, now known simply as ‘Computer’. On the desktop, the user can select from small (32×32), medium (48×48, default), and large (96×96) icons. In Computer, the user has additional view options, including tiles (icons shown as 48×48), details and list (16×16), and extra large (256×256). Better yet, there is a sizing slider that allows icon sizes to be set at somewhat arbitrary sizes up to the full size, 256×256 pixels.

Program icons can contain several different image sizes, at different bit depths, and a standard icon usually has 32×32 and 16×16 sizes. Vista makes use of 4 different base icon sizes: 32×32 and 16×16 are the (old) standard sizes, 48×48 is the new default size (stretched up from 32×32 if missing), and 256×256 is the full size (extra large) image that is scaled down to any size larger than 48×48 (replaced with 48×48 in a frame if missing). Fortunately, Vista fully supports 32-bit icon images (as does Windows XP) and scaling down from the full size works well.

Obviously, in order to have decent looking program icons, then, one needs to add 48×48 and 256×256 icons to the main icon resource, to handle icons displayed at the default and larger sizes. Indeed, that is the recommendation for Vista program icons, along with providing all four sizes at 32-bit (a.k.a., XP), 256-color, and 16-color bit depths. A quick calculation shows that, while the (9) images for the three smaller sizes take only 19.25K of data, combined, the full size (256×256) icons take 352K of data. To help reduce this overhead, the ICO file format was extended to support PNG compression. This is all described in this good tutorial by Axialis Software; unfortunately, there is one major omission.

Based on the published recommendations, and having received new icon artwork just for the occasion, we licensed an icon editor that supported Vista icons, generated a new .ICO file, and then naively replaced the old standard icon with this new Vista-ready one. All it would take was a quick rebuild and…

error RC2176 : old DIB in vista.ico; pass it through SDKPAINT

No dice (and there is nothing at all on my development system named ‘SDKPAINT’). With some frustration, I launch Visual Studio 2005 and (lo and behold!) the latest development environment from Microsoft produces the same error. Really. Some research shows that the only current way to add a proper Vista icon is by adding or replacing an ICON resource to a compiled executable file. Fortunately, make that very fortunately, there is a tool available on The Code Project to do exactly this.

So, with the ‘ReplaceVistaIcon’ tool installed as a post-processing step to my build (in Visual C++ 6.0), the program builds fine and the icon works as desired in Windows Vista. Tip #1: When updating an existing project, insert two copies of the old standard icon in the program resources. The new Vista icon can replace the first (default), but users will still be able to manually select the older icon if desired. Tip #2: To clear the (aggressive) Vista icon cache, change the default font size (i.e., to or from large fonts). This requires a reboot, but it does the trick.

There was one final concern, that turns out to be a non-issue. In my research, I found reports that Windows 98 would reject any icon that contained images larger than 72×72, so programs with Vista icons would not work on Win98 machines. Fortunately, my testing indicates that this is simply false. Of course, the 256×256 icons cannot be displayed on older systems, but they read and recognize the 32×32 (and 16×16) images just fine. (I did not test this under Windows 95, however.)

Well, there you have the tricks to getting decent program icons under Vista. Once you know them, the process is pretty simple, but finding all the issues takes some time. Hopefully, this article will help you save a little time and avoid the same pitfalls.

Most Popular Solitaire 1.12

This is our third 2007 product release, of several planned.

Yesterday, Goodsol Development released Most Popular Solitaire 1.12, an update to our traditional card solitaire title, which (as the name suggests) includes 30 of the most popular solitaire games of various types. This version is a maintenance update primarily intended to provide better compatibility with Windows Vista. A 30-day evaluation copy can be downloaded here.

Unlike the other major products, the version number is not displayed prominently on the Most Popular Solitaire web site. This title is positioned as a piece of software for players who want to be able to play a fair variety of popular types of solitaire, or patience, without needing the (sometimes overwhelming) variety provided by Pretty Good Solitaire (PGS), which currently has 660 different games, with more on the way.

Although Most Popular Solitaire (MPS) seems to be something akin to “PGS Lite”, under the hood it is actually considerably different from its older, more established, brother. The two games use entirely separate engines that are not even written in the same language. MPS is written entirely in C++ (using Visual Studio 6.0) and was actually based more on the code from Pretty Good MahJongg and Action Solitaire, than from PGS. Still, most of the design was derived from the flagship product, as it should be.

This deep into the Vista update schedule, we finally have most of the glitches worked out, and this release went smoothly, with the first installer build passing muster. I still have a list of Vista lessons learned during this process to share. Next up… Icons.

WinHelp versus HtmlHelp code

Here are the simple instructions for converting C/C++ code for Vista help.

Most Windows programs have simple help requirements, and the WinHelp() function within the Win32 API used to provide all of the necessary functionality. Although the documentation shows 18 different instructions, most common operations boil down to one of three primary functions: displaying the help file with a default topic, showing the contents of the help file, or displaying a specific help file topic.

WinHelp ( window, “filename.hlp”, HELP_CONTENTS, NULL )
WinHelp ( window, “filename.hlp”, HELP_INDEX, NULL )

These commands show the default contents (a.k.a., index) page of a help file. In Win32 projects, these commands are identical, the latter remaining from an older (16-bit) incarnation of Windows Help. Contrary to implications in the documentation, these are not superseded by the HELP_FINDER command; these display a default help page, whereas the “preferred” method (below) shows a separate keyword index.

WinHelp ( window, “filename.hlp”, HELP_FINDER, NULL )

This command shows a keyword index for a help file, which generally means that it opens the “Contents” tab with a scrollable list of keywords. In Win32 projects, the HELP_KEY command can also be used to open the “Find” tab, although this use was unusual except as a leftover from older (16-bit) projects.

WinHelp ( window, “filename.hlp”, HELP_CONTEXT, context )

This command shows a specific page of the help file, based on the ‘context‘ parameter. This is the standard and straightforward method of providing context sensitive help.

Of course, there are other WinHelp commands, and each use will need to be individually evaluated. However, if a project still uses the HELP_HELPONHELP command, then it can probably be removed completely, along with any menu option or other element that invokes it. This opens a generic help page, “Help Topics: How to Use Help”, which is truly one of those seemed like a good idea at the time situations. I would be surprised if any Windows user, ever, opened this help topic in earnest (though quality assurance sure did).

Now, along comes Windows Vista, which no longer supports WinHelp, and instead essentially forces us to use the HtmlHelp() function. The newer HTML Help (.CHM) files now (usually) show the help files in a dual-pane window, with the “Contents” and “Search” tabs on the left and the help page on the right. This means that the 19 listed HtmlHelp commands (which omits HH_HELP_FINDER) can be distilled down to only two basic calls.

HtmlHelp ( window, “filename.chm”, HH_DISPLAY_TOC, NULL )

This command displays the default help topic, and since the index and search features are contained in the left pane, this allows access to all of the basic help functionality. This can replace any WinHelp calls using HELP_INDEX, HELP_CONTENTS, or HELP_FINDER, and may allow some interface simplification if there is duplication among these commands.

HtmlHelp ( window, “filename.chm”, HH_HELP_CONTEXT, context )

This command displays a specific page of the help file, based on the ‘context‘ parameter. This is a direct replacement for WinHelp calls using HELP_CONTEXT to provide context sensitive help.

Incidentally, the HTML Help API is the most poorly documented common API that Microsoft supports. The HtmlHelp() function, the heart of the API, does not even have a normal help page itself, like every other Win32 function. To get the header and import library files, one needs to download either the Platform SDK (up to 400M), or the HTML Help 1.4 SDK, which is alternately (and confusingly) identified as HTML Help Workshop 1.3 or 1.31. Everything about this feels like an afterthought.

Once the HtmlHelp() calls are in the code (or before, if you prefer), two additional changes need to be made to the C or C++ code. First, the header file (htmlhelp.h) needs to be included:

#include <htmlhelp.h>

Then, the import library, htmlhelp.lib, needs to be added to the project. Normally, this would be done in the “Link” section of the project settings. However, just for giggles, here is a line of code that will add the necessary library to the list of default libraries for a particular object file (in Visual C++):

#pragma comment ( lib, “htmlhelp” )

With the header file included, your code should compile, and with the import library added (via either settings or pragma), it should link as well. This, of course, assumes that the development system already has these file available to the compiler and linker, respectively (and if not, see the download link above).

Well, that is pretty much all there is to converting WinHelp source code to HTML Help to provide support for Windows Vista. Of course, one should always check return values and perform proper error handling. In the above cases for HtmlHelp, the return value is an unnecessary window handle in the first case, and not documented at all (told ya!) in the second, so casting the return value to “(void)” may be acceptible.

Finally, the sketchy HTML Help API documentation could lead one to implement HH_INITIALIZE and HH_UNINITIALIZE commands, which in turn would require a HH_PRETRANSLATEMESSAGE command to be inserted into the program loop (to allow the help window to function). Our research suggests, and testing confirms, that this extra work is only necessary if one is using embedded help and, hence, need to force execution to a single thread. (Reference KB194116 and comments by former Microsoft help developer, Ralph Walden.) Likewise, it is also unnecessary to use the HH_CLOSE_ALL command on program exit, as HTML Help will automatically close the help window.

Any questions?

Vista help files

Windows Vista does away with trusty old WinHelp.

The first and most obvious limitation of Vista, by design, is that the new operating system no longer supports WinHelp, the trustworthy help system that we have been using under Windows for well over a decade. There is no backward compatibility here; instead, programs are encouraged to use HTML Help. Fortunately, the minimum platform for HTML Help is Windows 98, or Windows 95 with Internet Explorer 4 installed, so support is none too onerous (though forcing us to change is somewhat distasteful).

The lack of WinHelp support has been documented quite well, but what has not been published as widely is the practical result when attempting to open a standard .HLP file under Vista. Fortunately, it is not a disaster for most publishers, since Windows attempts to explain the problem (rather than causing the program to crash). When a WinHelp file is referenced, Vista displays an HTML Help window with the following topic and text:

Why can’t I get Help from this program?

The Help for this program was created in Windows Help format, which was used in previous versions of Windows and it is not supported in Windows Vista.

For more information, see Windows Help program (WinHlp32.exe) is no longer included with Windows on the Microsoft support website.

Note that this knowledge base article does not, as of this writing, provide the promised download location for a viewer for WinHelp files. It does, however, go out of its way to make it clear that we developers may not redistribute this tool, a prohibition which seems rather pointless given that Microsoft has not finished it yet. Perhaps they should develop a product first before starting to exercise intellectual property rights.

The WinHelp solution that Microsoft proposed, that a publisher could send a user to a download location to get a viewer that would allow that user to view the help file, is clearly not viable, now that Vista is in general release without the requisite viewer. Therefore, it becomes necessary for a publisher to generate an updated version of all supported products that must be converted to use HTML Help instead of WinHelp.

Fortunately, most professional help editors for Windows now have support for both WinHelp and HTML Help, as well as other formats in many cases. Here, we use Help & Manual 4.2, by EC Software, which made short work of conversions from .HLP to .CHM files, even where the original source files were not available, though I know that other tools, such as HelpScribble from Jan Goyvaerts of JGsoft, would work as well.

Converting a help file from WinHelp (.HLP) to HTML Help (.CHM) is the data half of the battle. Tomorrow, I will provide the simple (C/C++) details for modifying source code to call the newer help file format. The code changes are definitely simple for a basic help system, making that the easier half.

Happy Woodchuck Day

It is now time for a Spring festival in the heart of Winter.

Today, here in the United States (and Canada as well), it is Groundhog Day. On this day, little furry varmints are pulled out of their cages to participate in a quasi-traditional rite of prognostication, the results of which are no doubt influenced adversely by human participation.

At this moment, the digital thermometer says that it is 17 degrees F, and feels like 4 degrees F. My wife says that the Celsius scale works better in these temperatures, because it feels negative, so those numbers are -8 C, with a wind chill of -16 C. Winter only arrived in the last few weeks, and the lakes are not even frozen (i.e., enough for racing) yet.

In honor of Punxsutawney Phil (who apparently did not see his shadow and, therefore, predicts an early Spring) and the rest of the poor critters who were unwillingly forced out into this weather today, I will now crawl back under my covers to indicate my own prediction.

Vista is so much less

Microsoft Vista is neither revolutionary nor evil.

On Tuesday, January 30th, Microsoft Windows Vista became available to the general public, after being available in final release form to business customers, as well as developers, since last November. My experience, through the steep part of the learning curve, and some frustration, has led me to the general conclusion that Vista is neither as good nor as bad as people say.

On the one hand, Microsoft, not surprisingly, tries to promote Vista as if it were the best thing since sliced bread. It’s not. This operating system is merely the next real effort since Windows XP. The current marketing points are: “Easier. Safer. More entertaining. Better connected.” Let us explore those for a moment.

Easier? As far as I can tell, this is mostly change for the sake of change. Some menus and options are hidden in the interface, which does not help at all. Besides, this is an operating system that takes a separate piece of software to figure out (maybe) whether or not a computer can run it and a comparison page just to be able to choose from the myriad editions available.

Safer? Well, a user can certainly do less on a Vista system without having to give administration permission for something to occur. In theoretical terms, such a computer is safer, but in practical terms, it makes precious little difference because many users do not understand the prompts, and those who do will tend to ignore them because they appear so frequently. Perhaps this is just a plan to transfer liability.

More entertaining? The games that ship with Windows were rewritten, so they are certainly better, though not nearly as good as our games. On the other hand, the last few generations of Media Player having been getting progressively worse, and this version is no exception. Net loss.

Better connected? To me, this is just a euphemism for “does not work very well, or at all, without an internet connection”, as well as a reminder that Microsoft can determine (and has done in the past) that a paying customer is not licensed and immediately deny access to their system.

My verdict is that there is no strong reason to upgrade, except for developers who will have to support users who do, and because of strongarm tactics, there will likely be many of them. For a normal computer user, though, spending $250 for “its 3-D user interface [sic] and speedy desktop search function” (attributed to Microsoft in an Associated Press article) would be a waste of money.

On the other hand, there are many naysayers who decry Vista as a major step backwards for gaming. Chief among these is Alex St. John (of WildTangent), who is also, from a former life, a Father of DirectX, so he certainly has credibility. He wrote an opinion piece on the topic, Vista Casts a Pall On PC Gaming, which really is a must read for game developers looking to support Windows Vista.

As sympathetic as I am to Alex’s position with regard to games on Windows Vista, and as truly appreciative of his stand for us independent game developers, I do not really see Vista as being either malevolent or massively detrimental to PC games. As with any new platform, there are decisions to be made. Either Game Explorer will be ignored as a failure, or it will succeed with few users actually invoking the Parental Controls. Games should have been made to work under LUA when Windows XP was released, and UAC, though cumbersome (and questionably effective), is not enough to get most users to turn it off.

My take on Windows Vista is that, despite many little annoyances, it is nothing much to get excited about, one way or the other. Our games already worked (unchanged) under LUA, and we made the decision, for now, to eschew the Game Explorer (hence, Parental Controls) completely. Ultimately, these games run the same as on Windows XP, but with nicer icons.

Now, for something less ordinary:

I just returned from seeing The Pink Floyd Experience at Michigan State University’s Wharton Center for Performing Arts. This was my second time seeing a Pink Floyd tribute band, the first being The Surrogate Band, which started locally but has (rightfully) gained a larger following. There is little to choose between the two, both musically excellent, the former having a bigger venue and stage production (with the requisite higher ticket price) and the latter being in more intimate settings with awesome female backing vocals for The Great Gig in the Sky and, indeed, the whole of Dark Side of the Moon. Both shows are highly recommended.

Action Solitaire 1.12

This is our second product release of 2007, with more to come.

On Monday, Goodsol Development released Action Solitaire 1.12, an update to our arcade-style solitaire title. This version actually consolidates two different upgrades into one (which explains why there is no public version 1.11). Neither set of changes adds any new games, but there are still 52 styles of games, fifty-two being a good card game number. A 30-day evaluation version is available for download here.

The first set of changes to the product updated the internal help and marketing screens to use a different style, in line with the new look of the Action Solitaire web site. We also added an exit screen to encourage purchases, as well as some addition limitations on evaluations. These changes are all in line with previous updates to Pretty Good MahJongg (version 2.3) and Most Popular Solitaire. Action Solitaire was selected as the next update out door because it had not been updated since 2005.

The other group of changes for this release were the updates to add full Windows Vista compatibility, as with Pretty Good Solitaire 11.0.1 and two more upcoming product upgrades. This includes a beautiful new Vista icon, courtesy of artist Rick Tumanis, and a new HTML help file. To view some images, and get a little more information, see the recent post on Thomas Warfield‘s blog, A Shareware Life.

Of course, even after testing, very few releases go perfectly smoothly, and this one was not an exception. When I did the final quality assurance check, it turns out that the installer was not properly creating a user desktop icon, but was instead only creating a desktop icon for the administration account used for the install, yet another repercussion of the new Vista UAC (User Account Control) system. It took some tedious back and forth to get a properly working installer, but everything worked out fine in the end. There will almost certainly be a more detailed blog entry soon about this particular issue.

FireFixed

This Gamecraft blog now works with Mozilla Firefox.

Over the last couple of days, I received three reports (see recent blog comments) indicating that this site did not work correctly in Mozilla Firefox. The problem, correctly identified by readers, was that the mime type was not set properly at the server (“application/octet-stream” instead of “text/html”). This problem did not appear in Internet Explorer (nor Safari, as far as I can recall), so I had never noticed the issue. Since nothing here changed recently, I am not sure why this was never reported before, but that is beside the point.

Part of the problem is with Blogger, which does not use any file extensions on HTML files published on a remote server, except for the index page (which I probably specified myself with the .HTML extension). Therefore, the default page worked fine, but all links to other pages failed (in Firefox). I personally try to avoid having any files without file extensions, but this is not exactly an error.

The more significant problem was on the server end. It took me quite a while to find the source issue, after several unsuccessful tries with the mime configuration interface. Finally, I discovered a Microsoft Knowledge Base article entitled, Files without Extensions are Mapped to Application/Octet-Stream, which described the problem exactly. Under ‘SYMPTOMS’, this article says, “There is no way to change this behavior in the user interface.” I noted with interest that the entirety of the ‘STATUS’ section reads, “This is by design.”

Anyway, the steps in the article, although slightly inaccurate, provided a successful solution, so this Gamecraft blog now displays correctly in Firefox. I installed version 2.0.0.1 to verify the problem (always the first step in any diagnostic session), and after making the change and clearing the browser cache, everything seems to work properly now. Additionally, I now have the latest version of Firefox installed and ready for testing my other sites as they get updated (though I know that our SophSoft site works now).

I will take this incident to indicate that Mozilla Firefox is now officially a major player in the browser market, and it again emphasizes the importance of proper testing.

Busy times

It has been a very busy few days around here.

Since last Friday, it seems that I have not been able to slow down. There has been a whirlwind of activity here, including lots of development and testing, as well as some personal time that did not involve relaxation.

On the development end, we shipped four and a half products in a 27 hour period from Friday through Saturday evening. The impending general availability of Windows Vista has required several product updates. Individually, these are not loads of work, but when one piles several together, multiplies the effort by 4.5, and completes them in just over a day, there is definitely something of a camera blur. Granted two of the updates were for the same title, one a scheduled marketing upgrade that had been in development for a while and the other the Vista compatibility update, but it was still an accomplishment.

Half of a product, though? It turns out that as we shipped one of the “final” release updates for a title, we inadvertently cross-shipped with a specifications change. We had to make an update to the update before it ever got prepared for public release. The change was a protection improvement that took little effort, but required the full deliverable preparation again. Imagine that we figured out a way to feed the voltage from a computer power supply back through the mouse of any thief who enters an illegal registration code, giving the crook a very nasty shock. (ObLegal: This is a joke, stemming from my frustration at having our intellectual property, and my livelihood stolen. Even if this method were possible, which it absolutely is not, we would still never use such a thing.)

After the flurry of deliverables, my attention turned to a different type of flurries, the snow variety. Winter finally set in here, when it looked like it had forgotten us this year, so it looks like we will actually have an ice racing season in 2007. Therefore, I made arrangements to go pick up my new ice racing car, although it is funny to call a 16 year old beater, with no interior, that one can buy for a couple hundred bucks “new“. I had quite an adventure, including a roadside battery change at well below freezing temperatures and a brake failure in city traffic, but ultimately made it home safely and, importantly, ready to race.

Monday brought more testing, as one of the titles (and I will leave it to you to guess which one) was being prepared for final release. The first installer candidate failed to install properly under a limited user account on Vista, so we spent a few hours going back and forth, testing different installations until we had one working exactly as intended. Trust me, I am getting very tired of Vista right about now. Fortunately, there was no major drama, and we finished in time for my previously scheduled activity.

The personal activity for yesterday evening was another taping of QuizBusters. This time it was my son competing for East Lansing High School, one of four starters, in the division quarterfinals. They were matched against cross-town rival, Okemos, which was one of very few local teams that has beaten them in quizbowl league play this year. It looked likely to be a close match, so it was very exciting, but not relaxing.

[BEGIN SPOILER]
My prediction for a close game was not realized, however, as East Lansing tripled up Okemos by a score of 630-210. It was a truly phenomenal game between two great teams, though, as there were only a handful of wrong answers given during the entire contest. There has not been official confirmation, but it is believed that a combined score of 840 is the highest in 17 years of QuizBusters competition. My son was quite proud that he “powered” an answer off of the clue “Feathers McGraw in Wallace & Gromit in the Wrong Trousers“: Penguin.
[END SPOILER]

It looks like the frantic activity is destined to come to an end today, though, as it feels that I am starting to get a migraine as I am finishing this post, and migraines are never conducive to productivity.