March 14, 2012

Why Windows 8 Does The Right Thing The Wrong Way

Yesterday, I saw a superb presentation called "When The Consoles Die, What Comes Next?" by Ben Cousins. It demonstrates that mobile gaming is behaving as a disruptive technology, and is causing the same market decline in consoles that consoles themselves did to arcades in the 1990s. He also demonstrates how TV crushed cinema in a similar manner - we just don't think of it like that because we don't remember back when almost 60% of the population was going to the movie theaters on a weekly basis. Today, most people tend to go to the movie theater as a special occasion, so the theaters didn't completely die out, they just lost their market dominance. The role the movie theater played changed as new technology was introduced.

The game industry, and in fact the software industry as a whole, is in a similar situation. Due to the mass adoption of iPads and other tablets, we now have a mobile computing experience that is distinct from that of say, a console, or even a PC. Consequently, the role of consoles and PCs will shift in response to this new technology. However, while many people are eager to jump on the bandwagon (and it's a very lucrative bandwagon), we are already losing sight of what will happen to stabilize the market.

People who want to sound futuristic and smart are talking about the "Post-PC Era", which is a very inaccurate thing to say. PCs are clearly very useful for some tasks, and its unlikely that they will be entirely replaced by mobile computing, especially when screen real-estate is so important to development and productivity, and the difficulty of replicating an ergonomic keyboard. The underlying concept of a PC, in that you sit down at it, have a keyboard and mouse and a large screen to work at, is unlikely to change significantly. The mouse will probably be replaced by adaptive touch solutions and possibly gestures, and the screen might very well turn into a giant glass slab with OLEDs on it, or perhaps simply exist as the wall, but the underlying idea is not going anywhere. It will simply evolve.

Windows 8 is both a surprisingly prescient move on part of Microsoft, and also (not surprisingly) a horrible train wreck of an OS. The key concept that Microsoft correctly anticipated was the unification of operating systems. It is foolish to think that we will continue on with this brick wall separating tablet devices and PCs. The difference between tablets and PCs is simply one of both user interface and user experience. These are both managed by the highest layers of complexity in an operating system, such that it can simply adapt its presentation to suit whatever device it is currently on. It will have to once we introduce monitors the size of walls and OLED cards with embedded microchips. There will be such a ridiculous number of possible presentation mediums, that the idea of a presentation medium must be generalized such that a single operating system can operate on a stupendous range of devices.

This has important consequences for the future of software. Currently we seem to think that there should be "tablet versions" of software. This is silly and inconvenient. If you buy a piece of software, it should just work, no matter what you put it on. If it finds itself on a PC, it will analyze the screen size and behave appropriately. If its on a tablet, it will enable touch controls and reorganize the UI appropriately. More importantly, you shouldn't have to buy a version for each of your devices, because eventually there won't be anything other than a computer we carry around with us that plugs into terminals or interacts with small central servers at a company.

If someone buys a game I make, they own a copy of that game. That means they need to be able to get a copy of that game on all their devices without having to buy it 2 or 3 times. The act of buying the game should make it available to install on any interactive medium they want, and my game should simply adapt itself to whatever medium is being used to play it. The difference between PC and tablet will become blurred as they are reduced to simply being different modes of interaction, with the same underlying functionality.

This is what Microsoft is attempting to anticipate, by building an operating system that can work on both a normal computer and a tablet. They even introduce a Windows App Store, which is a crucial step towards allowing you to buy a program for both your PC and your tablet in a single purchase. Unfortunately, the train-wreck analogy is all too appropriate for describing the state of Windows 8. Rather than presenting an elegant, unified tablet and PC experience, they smash together two completely incompatible interfaces in an incoherent disaster. You are either presented with a metro interface, or a traditional desktop interface, with no in-between. The transition is about as smooth as your head smashing against a brick wall. They don't even properly account for the fact that their new metro start menu is terribly optimized for a mouse, but try to make you use it anyway. It does the right thing, the wrong way.

The game industry has yet to catch on to this, since one designs either a "PC game" or a "mobile game". When a game is released on a tablet, it's a special "mobile version". FL Studio has a special mobile version. There is no unification anywhere, and the two are treated as separate walled gardens. While this is currently an advantage during a time where tablets don't have the kind of power a PC does, it will quickly become a disadvantage. The convenience of having familiar interfaces on all your devices, with all of the same programs, will trump isolated functionality. There will always be games and programs more suited to consoles, or to PCs, or to tablets, but unless we stop thinking of these as separate devices, and instead one of many possible user experiences that we must adapt our creations to, we will find ourselves on the wrong side of history.

March 13, 2012

Well That Was Interesting

So today I go to an orthodontist appointment at 11:30 AM, and its bright and sunny out, but fairly breezy. Several hours later I leave for a final exam for CSE 373 at the UW. Still nice and sunny out, but also still very breezy. We start the exam, and 40 minutes in, the power cuts out and we're put into pitch blackness. A few seconds later, I can hear a generator hum to life and the power is suddenly back on.
"Just so you know, if that happens again, I don't have a Plan B" - My professor
10 minutes later, it happened again, as I heard the dying groans of the generator failing. For a few confused minutes, students used their cellphones to try and work on the test, until the evacuation alarm sounded. I hung around outside the building for a good 20 minutes before the professor finally cancelled the final outright due to extraneous circumstances. I realize I don't actually know what happens when a final gets cancelled. Note that it is still warm and sunny outside, just very windy.

So, I go home on the bus, and things get a bit overcast, but nothing major. Then I get back to Redmond and the whole town is in the middle of a goddamn blizzard, which I then had to drive through back from the Park & Ride to get to my house. By the time I turned on my computer, the sun was out again.

Washington is fucking bipolar.

March 10, 2012

Visual Studio Broke My Computer

So I'd been using the developer preview of VS11 and liked some of its improvements. When the desaturated VS11 beta came out, I hated the color scheme but decided I still wanted the upgraded components, so I went to install VS11 beta. Unfortunately the beta only lets you change its install location if the preview developer preview isn't installed, and the developer preview had installed itself into C:\ without ever letting me change the path, which was annoying. So I took the opportunity to fix things and uninstalled the developer preview, then installed the beta of VS11.

Everything was fine and dandy until I discovered that VS11 wasn't compiling C++ DLLs that worked on XP. I don't know how it managed to do this, since the DLL had no dependencies whatsoever, and that bug was only supposed to affect MFC and other windows related components and hence there was no windows flag for me to specify which version I wanted, but just to be sure I decided to try and compile it in VS2010. It was at this point I discovered that VS2010 could no longer open any projects at all. It was broken. Further investigation revealed that uninstalling VS11 developer preview will break VS2010. Now, I had an ultimate version of VS2010 I've had sitting around for a while I got from Dreamspark, so I figured I could just uninstall VS2010 and then reinstall the ultimate version and that would kill any remaining problems the pesky 2011 beta introduced.

The thing is, I can't uninstall the SP1 update from VS2010. Not before I uninstalled VS2010, not after I uninstalled it, not even after I installed the ultimate version. It just gave me this:
The removal of Microsoft Visual Studio 2010 Service Pack 1 may put this computer in an state in which projects cannot be loaded and Service Pack 1 cannot be reinstalled. For instructions about how to correct the problem, see the readme on the Microsoft Download Center website.
So I just had to leave the Service Pack alone and attempted to re-apply it after installing VS2010 Ultimate, but the online installer failed. So then I downloaded the SP1 iso file and installed that. It failed too, but this time I could fix the problem - someone had forgotten to copy the F#_redist MSI file to the TEMP directory, instead only copying the CAB file. Note that I don't even have F# installed.

I was able to resolve that problem and finished installing the service pack, but to no avail. Both the VS2010 installation and the service pack had forgotten to install the C++ standard library headers, which, as you can imagine, are kind of important. I searched around for a solution, but the only guy who had the same problem as me had simply reformatted and reinstalled windows (note the moderator's excellent grasp of english grammar). The only thing I had to go off of was using a special utility they built to uninstall all traces of VS2010 from your computer. Unfortunately, the utility doesn't actually succeed in uninstalling everything, and also doesn't uninstall SP1, so you have to uninstall SP1 first before running the utility. The problem is, I can't uninstall SP1 or I'll never be able to install it again.

At this point it appears I am pretty much fucked. How does Microsoft consider this an acceptable scenario? I worked as an intern at Microsoft once, I know they use their own development tools. I used tools that hadn't even been released yet. There was one guy on our team whose entire job was just the setup. And yet, through a series of astonishingly bad failures, any one of which being fixed would have prevented this scenario, my computer is now apparently fucked, and I'm going to have to upgrade my windows installation to 64 bit a lot sooner than I wanted.

EDIT: After using the uninstall tool to do a full uninstall and uninstalling SP1 and manually finding any VC10 related registry entries in the registry and deleting them, then reinstalling everything from scratch, I solved the header file problem (but had to reinstall SP1 or it wouldn't let me open my project files). However then the broken VCTargetsPath problem showed up again, which a repair didn't fix. I finally fixed the issue by finding someone else with a working installation of VC10, having them export their MSBuild registry key and manually merging it into my registry. If you have this problem, I've uploaded the registry key (which should be the same for any system, XP or 7) here. If you have a 64-bit machine, you may need to copy its values into the corresponding WoW64 nodes (just search for a second instance of MSBuild in your registry).

Success Is Not What You Think It Is

"Successful people seem to have a long history of building bigger successes on top of smaller successes. In other words, successful people are successful." - Daniel Tenner
The above quote has a lot more truth in it than I really want to admit. I strive to be a successful person, but I simply cannot escape the fact that I have to build all my successes on top of smaller successes, and why, while I continue to strive for what some would consider absurdly ambitious goals, I end up inserting more and more steps between each one. Sometimes I'm productive, and sometimes I'm not. Sometimes I feel like I could take on the world, and sometimes I curl into a fetal position. Some people wonder why I try so hard, and I wonder how those people couldn't try so hard - but there is always a catch.

It seems that "success" has a devilishly slippery definition. It means something different to everyone, but people tend to assume that their view of success is shared by the majority. We argue about how much work you need to do versus how much is healthy, we talk about having fun at your job, we talk about making sacrifices, we talk about a lot of things. What we never seem to talk about is what success actually means for you.

In our endless quest for success, we've forgotten that everyone has a different finish line.

Do you know what success means to me? Some people are surprised when they discover it has nothing to do with money, or fame, or even having kids. These things don't matter to me. There are only 3 things that are precious to me, and they are what my entire life is dedicated to creating. If I weren't working towards making those things happen, I'd go insane. To me, the most important thing I will ever do in my life is to take a dream, an idea, a world that exists only inside my imagination, and to make it come alive for people to explore. If only a few thousand people see it, that's fine. If I end up working at a terrible job just to support myself because I can't make any money off it, fine. If it gets ridiculed and laughed at, fine. My success hinges only on my ability to create what I want to create.

Some people have similar dreams (they tend to be artists, who often understand my goals better than programmers), but some do not. Some people measure success by how much money they make. Some people measure success by how popular they are. Some people measure success by solving a problem or crafting an elegant mathematical proof. We can't simply ignore success that we don't understand. This is why the entire concept of a self-help book has to be taken with a grain of salt - it will only be useful to you if it matches up to what success really means to you, and people are entirely too good at convincing themselves that they want something they don't actually need.

Advice on how to be successful is more useful when it is made more general. I always say that you should stop at nothing to achieve your dreams, no matter what they are. Perhaps I should also suggest for you to make sure that your dreams are truly your own. Are you trying to climb your own mountain, or have you been scaling someone else's cliffs? Maybe trying to figure out how to be successful isn't as important as figuring out what success means to you in the first place.