Surface Pro 3: First Impressions

I received the brand-spanking-new Surface Pro 3 yesterday, and I have to say, I like the direction technology is headed. The Surface is this strange hybrid between netbook and tablet which, while hard to pin down with contemporary vocabulary, fits a certain device niche perfectly.

Surface vs iPad Surface vs Macbook Air
Dimensions compared to an iPad. Dimensions compared to the Macbook Air.

See, I needed a small netbook-style device to unobtrusively take notes on, etc. A tablet wouldn’t cut it because, even with a third-party physical keyboard peripheral, tablet OS’s lack the word processing and file management ease you get with desktop applications. However, netbooks lack the easy deployment and quick search capabilities of phones and tablets. Netbooks have a large vertical form factor, while phones and tablets are almost always laid flat or nearly-flat.

The Surface covers all of these capabilities: it can be a high power tablet or a small laptop. It can be either a largish tablet (although it is similar to an iPad, so not that large) in your lap or flat on the table, or a thin screen with a thinner keyboard, propped at any angle on a desk. With Windows 8 you can alternate between the tablet feel and the PC feel easily. However, it is almost impossible to effectively use any of PC functionality with only the touchscreen; you do need the keyboard and its trackpad. This may stem from the fact that the screen is a high enough resolution that fingers lack the requisite precision to really do anything.

On that note, I don’t know how I feel about Windows 8. This isn’t a specific complaint against the Surface, except to say that the execution of the OS is the worst part about the device. While the hardware pulls from the best qualities of tablets and laptops, Windows 8 pulls from the worst. It just seems confused as to whether its a finger-friendly, simple interface, or a mouse-based system with dumbed-down menus. It relies on a number of contextual gestures to access menus while in finger mode, and it seems to use a combination of hovering and right clicking to reach “advanced” menus with a mouse. This may partially just be a poor UI design paradigm the specific app developers are stuck on and not a fault of the OS, but even in the native Windows menus, I’ve noticed no clear conversion between left and right click, mouse hovering, and mouse dragging versus finger swiping, finger holding, and finger tapping. It makes some parts of the OS more “hand friendly” and others “mouse friendly”.

This only becomes more confused when you take into account the stylus that comes included. It has two buttons on the body and a button on the end, but again, none of the actions map cleanly to any of the other input methods. Nonetheless, the stylus means that the Surface could easily be used as a graphic design tablet, which is a use I hadn’t considered but am now eager to try out.

Lastly, some minutiae. The stand is a little difficult to open, and the fan can get somewhat loud (or at least audible). The speakers are mediocre, and the voice recognition is awful. The case gets hot occasionally, and the trackpad on the keyboard peripheral is annoying to use (the mouse buttons are not well delineated, and it is not possible to disable the overly sensitive tap-to-click feature).

On the other hand, I haven’t noticed battery life issues, and the screen is very high resolution. My version is the 8GB RAM/i5 processor and I have noticed no performance issues (obviously). The App store is a little sparse on touch-friendly programs, but fortunately the whole point is that the Surface functions as a fully capable laptop, so its going to run video editing software and even intensive high-def video games way better than your standard netbook.

At the end of the day, I give the Surface Pro 3 two thumbs up. Good job, Microsoft.

Advertisements

Defining Life

I’ve had this conversation a couple of times recently, because it poses an interesting question: can we create a definition for ‘alive’ that encompasses not only known biological life, but also any theoretical lifeforms we can imagine? This might include alternative biochemistry, artificial life (nanites?), and even digital lifeforms.

Obviously there is an inherent problem in this discussion; we are assuming everyone shares a similar definition of life. However, even a skin-deep probing can reveal divisive philosophical questions. Are computer viruses alive? How about self-replicating structures of dust particles in a plasma? Is the Earth alive? We can’t truly resolve this problem without first clearly setting a boundary for what things are alive and what things aren’t alive. For example, scientists seem to have resolutely decided that biological viruses are not alive. Similarly, its clear to our human sensibilities that a car engine is not alive, even if it is highly advanced and has all sorts of sensors and regulatory mechanisms.

For the sake of discussion, I’m going to skip over this roadblock and dive in. Wikipedia gives these criteria for calling something ‘alive’:

  1. Homeostasis: Regulation of the internal environment to maintain a constant state.
  2. Organization: Being structurally composed of one or more cells.
  3. Metabolism: Converting chemicals and energy to maintain internal organization.
  4. Growth: A growing organism increases in size in all of its parts, rather than simply accumulating matter.
  5. Adaptation: The ability to change over time in response to the environment.
  6. Response to stimuli: A response is often expressed by motion; for example, the leaves of a plant turning toward the sun (phototropism), and chemotaxis.
  7. Reproduction: The ability to produce new individual organisms, either asexually from a single parent organism, or sexually from two parent organisms.

There are some good ones in there, but a few need to go. Let’s throw out Organization (this can almost be seen as tautological — things made of cells are alive because they are made of cells — and exclusive of otherwise potential candidates for life), Growth (one can imagine an organism which is artificially constructed, but then maintains itself perfectly, or a mechanical organism that starts life by being constructed externally, and slowly grows smaller as it sacrifices components to stay operational), and Reproduction (again, imagine a constructed organism that cannot reproduce). This leaves Homeostasis, Metabolism, and Adaptation/Response to stimuli.

However, its clear that Metabolism is important: an organism must take something from its environment and consume it to maintain an internal state. Metabolism and Homeostasis are where biological viruses fail the ‘life test’. While some advanced viruses meet the Adaptation and Response to Stimuli (arguably the same thing, just at different scales), no virus can use resources from its environment to perform internal upkeep. It requires the hijacked machinery of a cell to do that.

Unless you say that living things are part of a virus’s ‘environment’. Then you could argue that in some sense of the word, viruses are alive, because they use resources present in the environment to perform internal upkeep. This raises an important question about context. Indeed, all definitions of life seem to hinge on context. For example, a computer virus’s environment is the computer system. Resources would be computing time and memory, perhaps.

Is a computer virus alive? Advanced viruses can modify their own state (metamorphic code), respond to stimuli (anti-virus, user activity, etc), and metabolize resources from their environment. They also reproduce, although we cut that criterion so the point is moot. If a computer virus meets the requirements for life (albeit unconventionally), then do we have to accept it as a lifeform?

Moreover, there are things we wouldn’t normally call a single entity that fulfill the requirements for life. These are often termed “living systems”. The Earth is a prime example. It has systems that regulate its interior, it absorbs sunlight and that helps fuel the regulatory cycles on the surface. It’s debatable whether the Earth responds to stimuli. Sure, there are feedback loops, but the Earth doesn’t really respond accordingly to changes (say, changes in solar luminosity or meteoric impacts) in order to maintain homeostasis. Quite the opposite, in fact. For example: a decrease in solar radiation produces more ice, lowering albedo, thus lowering albedo further.

So maybe the Earth isn’t alive, but we have to consider nonetheless that systems can be alive. In fact, its questionable whether humans are single organisms. Several pounds of our weight are gut bacteria, independent organisms which share no DNA with us, but on which we rely for survival. We are a system. Call it a colony, call it symbiosis; the entity that is a human is in fact a collection of trillions of ‘independent’ organisms, and yet that entity is also singularly ‘alive’.

Can we trust our initial, gut reaction that tells us what is alive and what isn’t? Moreover, what use is there in classifying life in the first place? We treat cars that are definitely not alive as if they are precious animals with a will of their own, and then squash bugs without a second thought. Is it important to define life at all, rigorous criteria or not?

Sim State

I’ve been meaning to write this post for a while. This idea really started when I watched Day[9] play the new Sim City, and then picked up Sim City 4 again. I wanted to create a game which brought the ideas of micromanaging infrastructure and government into a larger scale. The player would be able to control education, government type, military, trade, etc. Eventually it grew into a sort of “third-world country simulator”, since that seemed like the most interesting route to people I pitched the general concept to.

The basic premise is that you are the leader of a small country, recently put in power by a violent revolution. This country is located in a faux South or Central America, but there is also the possibility for having multiple templates: African, Southeast Asian, etc. The player can only really see the small land area he controls, plus some of the bordering sovereignties. There is no global map (and this isn’t a game about conquest), but there are references to current global institutions (or fictitious characterizations thereof) like the UN and US, or WHO, etc.

Winning the game means pulling your country out of poverty and onto the world stage. This requires many parts, including building infrastructure, establishing governmental rule, and appeasing the international community. However, the win condition is gaining control over every province in your nation. Control just means being the dominant power faction. Routes to control include stamping out resistance (militarily) and appeasing interest groups. Thus a large part of the game is balancing political control; keep the military leaders on your side, stop workers from striking, and stay elected. The last one may mean establishing a dictatorship, rigging elections, or spending a lot of resources maintaining public image.

At the start of the game, your country is poor and unequipped. There are two forms of currency: money, and international repute. International repute can be spent on relief or treaties; perhaps getting a foreign oil company to leave your country. On the other hand, if you drive out the oil company by force, some factions in your own country may approve, while the international community may impose sanctions. Similarly, if their are pirate along the coast, you could demand tribute or try to exterminate them at a potentially great cost. If the world catches wind that you are allowing pirates to operate, however, you will lose repute.

The other form of currency is money. A little macro-economics comes into play here, since you have to manage your currency (printing money), and real “world dollars”. Rapid inflation can be bad for your industries, but it attracts tourists (but only to good parts – nobody is going to visit the region controlled by drug cartels). Real dollars come from exports, mainly. One way to get a boost in the beginning of the game is to exploit your natural resources: cut down rain forests, strip mine mountains, etc. However, you have to establish a more mature manufacturing industry at some point, otherwise you will exhaust your resources and fall back down into poverty.

In terms of infrastructure the player has to build, the main forms are education and industry. Industry includes transportation networks and resource collection, as well as processing. Industry also means municipal improvements, since nice cities attract high-tech corporations and commercial companies. Another route to improving the quality of your workforce, reducing crime, and eliminating overpopulation is education. Building schools takes a lot of resources for little immediate payoff, but it will start to improve your country greatly. It is also a great way for dictators to indoctrinate the population.

Late-game opportunities may include hosting Olympic Games or researching nuclear technology.

As you can see, there is a lot of room for expansions; this is more of a framework for a game, rather than a fleshed out game idea. I know there are games like this, such as Tropico. I think this would be more political and deep than Tropico, but obviously I would aim to offer a different experience overall were I to build this.

Code Trinkets are a Bad Idea

Often when engaged in the construction of some piece of software, be it a web application or a native computer game, we get the Feature Fever. Our brains are trained by years of computer use to judge software by its polish. The tendency is misguided at best, and we try to think past it when fairly evaluating a prototype. But the fact of the matter is that even one or two polished aspects of a website makes it look better.

THIS IS A TRAP!

When you imbed a YouTube video or add rounded corners to your buttons, you are deceiving yourself. When you look at the screen, your eye is drawn to these familiar, visually impressive elements. Consequently, you subconsciously ignore or undervalue the unfinished parts of your project.

This leads to two things. First, you think you are farther along than you are. But more importantly, it makes you hungry for more features. Since one or two polished aspects look good, why not add more? Now you are on the hunt for short-term fixes that give big rewards in terms of visual polish, rather than working on the code that actually makes your program work.

If you start polishing before your core functionality is complete, you can get pigeonholed. When an interface element is polished, or some other unique feature looks amazing, you reflexively want to protect it. Even if the rational decision is to get rid of it and integrate the functionality somewhere else, you will keep the feature there. Letting form overpower function is a deadly trap.

The easiest way to add a polished feature is to search on the internet for code trinkets. Code trinkets are little snippets or blocks of code that you stick into your programs. Code trinkets are encapsulated, so all you have to do is paste and reload. Suddenly a beautiful new feature is completely finished.

Unfortunately, code trinkets have two downsides: they restrict your feature to exactly what is written, and they don’t leave you any smarter. Unless you take the time to figure out what ever line of the trinket does, and would be able to write it yourself (at which point it stops being a trinket), don’t use it!

Computer Mysticism

Last weekend I installed two different versions of Windows on two computers. One was a brand-new PC I built myself, and one was an HP that needed a reinstall. One needed a VPN connection to the MIT network to validate. The other one needed to have its proprietary drivers backed up and restored.

There’s a certain magic to computers when you start getting into the low-level stuff. I don’t mean programming-wise. Reinstalling Windows is more of a mystical art than a straightforward process.

Ancient forum tomes are filled with archaic tutorials. Software is a moving target, and complex formulas and hacks are prone to break down over time.

But even worse is the amount of superstition that gets poured into computer maintenance. Each user has rituals that they are convinced ward off errors. Actually, we see this in all sort of technology usage; people have rites designed to improve buffering speed, battery life, and disk readability. I know a group of people who have a running joke that involves standing on one foot when doing any complex computer maintenance to make it work.

The reclusive Linux alchemists mix their own potions (disdaining the draughts pushed by the shops in town), but use indecipherable notation in their recipes. Elixirs are delicate brews, and the average person doesn’t have the same instincts that let alchemists be productive.

Yet after going through the ordeal of reinstalling Windows or constructing a computer from scratch (and having it work!), you have a lingering feeling of power. The minor incongruities and annoyances that plague modern software usage no longer make you feel helpless. You are an empowered user, able to conquer any confounding roadblock. You may not be a mage, but you aren’t completely powerless under the whims of the wizards in the grand Corporate Tower.

Pyglet

A couple of months ago I discovered Pyglet, which is basically an OpenGL interface for Python. I experimented with it, figuring out different features. I had never really worked with OpenGL before, and the little bit of experience I had was limited to translating GLUT spheres (for an N-body simulation for my Parallel Computing class).

Screenshot of my program (image link broken)

My exploration into Pyglet was a two-pronged attack. On the one hand, I had to learn how to use OpenGL, and on the other I had to learn Pyglet’s idiosyncratic diversions from standard C OpenGL. Fortunately, there is a wealth of tutorials and explanations on the Internet regarding OpenGL, and Pyglet is fairly well documented.

However, there is a caveat to exploring a new tool: debugging becomes much harder. When your code stops doing what it is supposed to, you have no idea whether the bug stems from a mistake in your code, or a fundamental error in your method. Moreover, your method may work in theory, but you are using the new API incorrectly. Since there is no way to test all three of these possibilities at once, you have to assume two of them are correct and look for an error in the third. If you pick wrong, you can spend days looking for a bug in the wrong place.

For instance, I was writing code to find the ray originating from the camera and passing through a point on the screen where the user had clicked. The issue here is that although you know the location of the click with relation to the window, you don’t know where it is in world space. Well, I went through 3 or 4 methods for finding the vectors in world space that corresponded to the vertical and horizontal directions on the screen. After that the problem becomes trivial.

A graphic description of my problem

In desperation I started printing out random things in the body of my code. I realized that two variables which should have been the same were very different. It turned out that when I found the location of user click in world space (which was stored as a vector), I was accidentally normalizing it.

I had assumed my code had no careless errors, and had instead blamed the bug on my method. In reality, I doubt there was ever a problem with my method. Instead, the problem had always lain in the three lines of code that I considered the “trivial” part of the problem. While it was quite trivial, that triviality also protected it from proofreading. After wasting a good 4 or 5 days on the problem, I have learned my lesson: there was absolutely nothing I could have done about it.

Crysis 3: First Impressions

I put my beefy new graphics card up to the test. I’ve always been a fan of Crysis. The first Crysis game was such a brilliant creation. From the spine-singling intro scenes, to the best mix of cutscenes and free-roam arenas. The vehicles, guns, and explosions all felt right. But the game kept getting better. The tank battle was a nice departure from the jungle stealth of the start. Then the zero gravity sequence just totally blew my mind. That turned Crysis into delicious cake. The ice level, the VTOL sequence, and the entire last level (with that epic end sequence) were all just frosting.

Crysis Screenshot

I know every level of that game by heart. So when Crysis 2 came out, I was excited. The multiplayer beta gave me some idea of how the controls would differ. But I reserved judgement (since the singleplayer campaign is the heart of any game). So imagine my surprise and disappointment when the game came out, and it sucked. Gameplay was boring and linear, enemies were samey and uninteresting, vehicle sections were highly linear, and the graphics were somehow worse than the first game. Despite all the hype over the “CryEngine 3”, the graphics were plasticy and bloomy. Crytek took everything interesting out of the series, and removed all the main characters to boot – Nomad was replaced by a silent, unimpressive protagonist. The game was cut and dried; there was no boisterous spirit left in the IP.

Since Crysis 3 came out, and I got a new graphics card, I figured I would buy the game. Maybe Crytek had taken the lessons they learned in making Crysis 2 to heart. Nyeeeh. The enemies and weapons are the same, and the interface is still dumbed down. I’ll admit, the graphics look a bit better, and the choice of environment is sounder. But since when was a bow and arrows cool? The bow and arrow concept seems like a feature tacked on to justify the game; without it, Crysis 3 would just be a short story add-on to Crysis 2.

My biggest issue is that the game is still highly linear. There are such excellent, expansive sets in Crysis 3, but each area is bounded by myriad invisible walls. The crudest element, which really insults me, is that you can see into the void in some places, where they forgot to put geometry. CryEngine has a default feature that puts a terrain layer across the entire map. The fact that they eschewed that, which was designed for creating large free-roam environments, means that Crytek has truly forsaken the idea of open gameplay. This makes me sad. There was great opportunity for this urban grassland idea. Imagine being able to fight through semi-collapsed buildings, then onto a grass plain, then climb onto a freeway and drive a tank down it, scaring deer out of the way and shooting down helicopters, which crash into skyscrapers.

There were good things about Crysis 2 and 3. The idea that the nano-suit is alien technology, the idea of Prophet’s conscious switching bodies. The stalkers in high grass were cool. But they screwed up the aliens, didn’t bring back ice levels or zero gravity, and took away speed and strength mode, tactical nuke launchers, and in-game freedom. I will continue to tout the demise of the Crysis franchise as a definitive argument against EA and consoles.

< / rant >

%d bloggers like this: