<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>UltraNurdage &#187; Computers</title>
	<atom:link href="http://blog.ultranurd.net/category/computers/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.ultranurd.net</link>
	<description>Collected Commentary</description>
	<lastBuildDate>Wed, 01 Feb 2012 18:59:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Back That Thing Up</title>
		<link>http://blog.ultranurd.net/2010/09/09/back-that-thing-up/</link>
		<comments>http://blog.ultranurd.net/2010/09/09/back-that-thing-up/#comments</comments>
		<pubDate>Thu, 09 Sep 2010 21:24:00 +0000</pubDate>
		<dc:creator>Nicolas Ward</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[How-Tos]]></category>
		<category><![CDATA[backup tripod]]></category>
		<category><![CDATA[backups]]></category>
		<category><![CDATA[carbon copy cloner]]></category>
		<category><![CDATA[dropbox]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[macs]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[time machine]]></category>

		<guid isPermaLink="false">http://blog.ultranurd.net/?p=818</guid>
		<description><![CDATA[Introduction Three Sundays ago, my primary Mac OS X hard drive failed. Those of you who follow me on Twitter got somewhat of a play-by-play as I discovered the depth of my drive failure I got home to the Spinning Pinwheel of Death (SPOD), and discovered quickly that my computer would not wake from screensaver [...]]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p>Three Sundays ago, my primary Mac OS X hard drive failed. Those of you who follow me on Twitter got somewhat of a play-by-play as I discovered the depth of my drive failure I got home to the <a title="Spinning wait cursor on Wikipedia" href="http://en.wikipedia.org/wiki/Spinning_wait_cursor">Spinning Pinwheel of Death (SPOD)</a>, and discovered quickly that my computer would not wake from screensaver or boot. However, I didn&#8217;t panic. Why? Because I have what I believe to be a relatively robust backup system for home use.</p>
<p>I can&#8217;t stress enough how important regular backups are. Data loss is one of my personal nightmares (well, that, and Lego or <a title="Andrle on Twitter" href="http://twitter.com/andrle">Andrle</a> loss), since most of my life (professional and personal) is on the computer. Among other things, I&#8217;d lose every picture I&#8217;ve ever taken since freshman year of college, every homework assignment I&#8217;ve written on the computer since late 6th grade (when we got our first Mac), not to mention substantial configuration work and those precious saved games.</p>
<p>I sit atop what I call the Backup Tripod: regular clones to an external disk stored off-site, hourly incremental backups to a local disk or local network storage, and as-needed on-save synchronization to cloud storage. I&#8217;m sure there are many other articles out there that recommend a particular strategy, but this is my solution for Macs. I even convinced my parental units to use a similar setup. I&#8217;ll go into detail on what solutions I use and why (as well as recovery strategy) for each below the cut.</p>
<p>I can&#8217;t emphasize enough how important data backup is for the typical modern power user.</p>
<p><span id="more-818"></span></p>
<h2>Offsite Clones</h2>
<p>Why do an offsite clone? First, this is primarily to solve the &#8220;your apartment burned down&#8221; problem. You want to be able to recover as much of your data as possible, all at once, but you might be okay in that situation with a little bit of recent data loss. The latter can be mitigated of course by using the other two legs of the tripod in combination</p>
<p>I&#8217;ve been using the excellent <a title="Carbon Copy Cloner - Home" href="http://www.bombich.com/index.html">Carbon Copy Cloner</a> for several years to make cloned backups of my primary hard drive. It&#8217;s a Mac-specific solution that has seen regular improvements over that time, including a migration to launchd as part of updating for Mac OS 10.5 that enables some features I use, such as &#8220;initiate backup on mount&#8221;, which triggers my standard clone job as soon as my external drive is plugged in. Cloning the actual disk is of course only half of the solution: you need to be responsible for storing your backup drive in a safe location, and bringing it home for regular incremental updates, to minimize the annoyance during a recovery.</p>
<p>I store my home hard drive in a locked drawer in my office at work; my parents keep an old iPod with important files in their safe deposit box. I should also admit at this point that, for this particular failure, my clone backup was almost 4 months old, therefore making recovery a fair bit more annoying than it needed to be had I been keeping my clone more up-to-date.</p>
<h2>Incremental Local Backups</h2>
<p>Why do incremental backups? This is primarily to smooth out the frequency of your backups: now instead of a backup only as recent as the last time you remembered to bring your clone drive home, you can have one as recent as a few minutes ago. The other major advantage is that, when configured properly, they are completely automated. For the most part, you shouldn&#8217;t even care that they&#8217;re set up; they&#8217;ll just run silently in the background, and you&#8217;ll only notice their existence when you need them to perform a recovery. Note that in this context, by &#8220;local&#8221; I mean &#8220;in the same building&#8221;, not necessarily on the same machine, since some network solutions are viable here.</p>
<p>Being a Mac junkie, I use Apple&#8217;s <a title="Mac OS X - What is Time Machine?" href="http://www.apple.com/macosx/what-is-macosx/time-machine.html">Time Machine</a>. Given my experience with this recent near-loss of data, I can safely say that for me, this is now Apple&#8217;s most important product ever (no matter how magical and revolutionary the iPad may be, it hasn&#8217;t saved my bacon&#8230; yet). Since my primary computer is a Mac Pro desktop, I have Time Machine configured to back up to a second internal drive. My parental units, since they both have laptops, use a <a title="Apple - Time Capsule" href="http://www.apple.com/timecapsule/">Time Capsule</a> as their backup system (and primary wireless router).</p>
<p>I can&#8217;t from personal experience recommend a particular incremental backup solution for Windows or Linux, but TSOR <a title="Time machine for Ubuntu?" href="http://maketecheasier.com/time-machine-for-ubuntu-try-timevault-and-flyback/2008/03/07">suggests</a> <a title="TimeVault - GNOME Backup/Snapshot System" href="https://launchpad.net/timevault">TimeVault</a> for Ubuntu. At work they use a network version of <a title="Connected Backup for PC and Mac" href="http://backup.ironmountain.com/">IronMountain Connected Backup</a>, which is at least the fourth Windows backup solution IT has tried since I&#8217;ve worked there. So far it seems to have staying power, and I assume it&#8217;s working, but a running backup causes a massive performance hit on my Windows XP development machine, making it essentially unusable due to I/O when the backup is running. (I should add that in my experience, Time Machine does not cause a performance hit, even when playing a processor-intensive 3D game like World of Warcraft. I believe this has to do with Apple&#8217;s implementation using FSEvents, although <a title="Mac OS X 10.5 Leopard: the Ars Technica review" href="http://arstechnica.com/apple/reviews/2007/10/mac-os-x-10-5.ars/14">Siracusa&#8217;s review of Leopard</a> explains the underpinnings of Time Machine better than I.)</p>
<p>One of the major caveats of an incremental backup, as I learned the hard way during this particular recovery, is that they are bad at dealing with single large files that change often. In other words, databases of various sorts, as well as writeable disk images. Examples include the <a title="iTunes" href="http://www.apple.com/itunes/">iTunes</a> Music Library file, and the Mac OS 9 disk image used by the <a title="The Official SheepShaver Home Page" href="http://sheepshaver.cebix.net/">SheepShaver</a> PowerPC emulator. There are two problems that these files can cause: the first is that they may cause your backup to fail due to file locking (especially if the program using the particular file is currently running); the second is that, since most incremental backup systems operate at filesystem granularity, they have to back up the entire file even if only a small portion of its data has changed. The latter leads to your incremental backup disk getting filled with many version changes</p>
<p>This is where careful management of your incremental backup&#8217;s ignore list comes in: I had both of these files ignored in Time Machine, so I had to restore them from my clone drive. More on that in the Recovery section below.</p>
<h2>Cloud Storage</h2>
<p>Why use cloud storage? Or, in this case, a better question might be &#8220;Why not use a cloud backup service?&#8221;.</p>
<p>I&#8217;ll answer the second first: I don&#8217;t trust them. Maybe this is some bizarre geek control freak paranoia, but I just don&#8217;t believe that their service can actually deliver what they promise while simultaneously being sufficiently secure. There are at least three parts to this: the first is that I don&#8217;t believe that the service will necessarily be available when I need it (whether during backup or recovery), the second is that I don&#8217;t believe they&#8217;ll actually delete my data completely when I ask, and the third is that I don&#8217;t believe they can completely protect my data from an attack on their systems. To some extent, these factors are all true of existing cloud services I rely on (such as GMail), but that data is a lot less critical or private than the full contents of my hard drive (and, in the case of e-mail, I keep a full local cache). I haven&#8217;t used any of the major cloud backup services out there for full backups, so I don&#8217;t want to bash any of them by name, but I would argue that they all suffer from these potential problems.</p>
<p>That brings us to my (admittedly limited) use of the <a title="Dropbox - Home" href="http://www.dropbox.com/">Dropbox</a> service. I only use the free 2 GB level of service, and I use it primarily for temporary file transfer to my iPhone or iPad. However, for a handful of important files that I&#8217;m actively working on, I use it as a sort of temporary remote version control. That is, as I reach a point in a particular document that I want to make sure I don&#8217;t lose, I&#8217;ll save the file locally and then copy it to my Dropbox, generally not overwriting the previous copy. That means if I need to &#8220;restore&#8221;, I just retrieve the appropriate copy from my Dropbox. When I&#8217;m done, I delete that particular working folder.</p>
<h2>Recovery</h2>
<p>Since I refer to this setup as the Backup Tripod, then there is the platform being supported by the three legs described above: quick and relatively painless recovery of your lost data. How do you use these three levels of backup to restore your data after a disk failure? To a large extent this depends on the type of failure you experienced, and how broad it was.</p>
<p>If you&#8217;ve accidentally deleted a single file, or somehow produced a corrupted version, then pulling a previous copy from either your cloud storage or your hourly local backup is probably a sufficient level of recovery, particularly if the first iteration of the file was created since your last offsite backup. (Depending on what you&#8217;re working on, there may also be a place where a distributed version control system like <a title="Git - Fast Version Control System" href="http://git-scm.com/">git</a> can play a role.) Deciding how many past versions to keep over the course of a work session is up to your discretion (and the importance of the file). Of course, if the &#8220;single file&#8221; is one of the files described above as being difficult to backup incrementally, you will probably have to recover the version from your clone drive. Again, regular backups here are critical, in order to make recovery possible.</p>
<p>If you&#8217;ve lost the entire drive, you have two options, assuming you were using Time Machine as your incremental backup solution: you can restore from the last successful hourly backup, or you can restore from your clone (obviously both require purchasing a new drive and replacing the old one). Most likely you need to do a combination of the two: restore from the incremental backup first, to get the most recent version of various files, and then manually restore any files you keep on the ignore list such as virtual machine images or databases, plus any &#8220;high priority&#8221; files you have stored &#8220;in the cloud&#8221;.</p>
<p>For my particular recovery, in the case of the aforementioned VM image, this was fine, since I hadn&#8217;t used it since my last complete clone; in the case of my music library, I had to reimport a number of apps from the backed up iTunes data folders and eliminate duplicates and stale versions. This was mostly a task of synchronizing the state of the iTunes Library with the fully backed up on-disk state. Annoying, but avoidable/minimized by keeping more recent clones than I had. This was also a case where I didn&#8217;t need the cloud storage leg at all, since the failure occurred while I wasn&#8217;t home, so I wasn&#8217;t actively working on an important file that I wouldn&#8217;t have wanted to lose if I had a local disaster.</p>
<p>Incidentally, my hard drives would probably be the first thing out of my apartment in the event of a fire. <.<</p>
<h2>Conclusion</h2>
<p>Those are the three legs to the Backup Tripod, blending a balance of manual vs. automatic, offsite vs. local, and complete vs. incremental. I claim you need all of these features to insure a complete, up-to-date backup under a variety of failure conditions.</p>
<p>If you follow the general gist of this guide, and keep good backup habits, there&#8217;s a reasonable chance that a complete hard drive failure will be nothing more than a minor inconvenience.  You&#8217;ll have to order a new drive and wait for it to arrive (or pick one up at your favorite tech shop), and then most of the process is waiting several hours while your computer does the restore, during which time you can get outside or something. Maybe a little bit of manual file restoration. All in all, annoying, but not a massive tragedy that would be the loss of all your home data (and a hell of a lot cheaper than hiring a data recovery expert).</p>
<p>Seriously. Back. Up. DO EET NAOW!!!</p>
<p>(And while you&#8217;re at it, make sure the IT guys at your work are on top of this.)</p>
<div class='wb_fb_bottom'><div style="float:right;"></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ultranurd.net/2010/09/09/back-that-thing-up/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Is the iPad for me?</title>
		<link>http://blog.ultranurd.net/2010/01/28/is-the-ipad-for-me/</link>
		<comments>http://blog.ultranurd.net/2010/01/28/is-the-ipad-for-me/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 04:03:14 +0000</pubDate>
		<dc:creator>Nicolas Ward</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[ipod]]></category>
		<category><![CDATA[laptop]]></category>
		<category><![CDATA[me]]></category>
		<category><![CDATA[mobile device]]></category>
		<category><![CDATA[my_opinion]]></category>
		<category><![CDATA[personal electronics]]></category>
		<category><![CDATA[steve jobs]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://blog.ultranurd.net/?p=769</guid>
		<description><![CDATA[What&#8217;s the question? Like every other critic and salivating fanboy, I feel compelled to chime in on yesterday&#8217;s religious experience in which The Steve descended from on high bearing a tablet. However, this is not a review, but merely a (lengthy) answer to a simple question: is the iPad for me? I won&#8217;t be talking [...]]]></description>
			<content:encoded><![CDATA[<h2>What&#8217;s the question?</h2>
<p>Like every other critic and salivating fanboy, I feel compelled to chime in on yesterday&#8217;s <a title="Apple iPad Media Event Keynote Video" href="http://www.apple.com/quicktime/qtv/specialevent0110/">religious experience</a> in which <a title="Wikipedia entry for Steve Jobs" href="http://en.wikipedia.org/wiki/Steve_jobs">The Steve</a> descended from on high bearing a <a title="Apple iPad Site" href="http://www.apple.com/ipad/">tablet</a>. However, this is not a review, but merely a (lengthy) answer to a simple question: is the iPad for me? I won&#8217;t be talking about the market for digital content distribution, I won&#8217;t be whining about what software and hardware widgets weren&#8217;t included, I&#8217;m not going to rant about Apple&#8217;s closed ecosystem, I won&#8217;t be begging to lick someone&#8217;s boots for a chance just to touch one. Additionally, although hopefully this is obvious, this is heavy on speculation, since I have yet to actually hold the product, let alone use it for any length of time.</p>
<p>I&#8217;ll also take this opportunity to brag that I got 29.5 points on the <a title="Unweary's iPad Prediction Scorecard" href="http://unweary.com/2010/01/prediction-score-card.html">prediction score card</a>, with only one question as yet unanswered: will textbooks be available (I said yes, and I think this is eventually likely, based on the list of publishers involved). I was briefly unsure if my existing Apple Wireless Keyboard would be supported, but the <a title="Apple iPad Design" href="http://www.apple.com/ipad/design/">Design page</a> indicates that in will be, in spite of the existence of the iPad Dock. I got the name right, and most of the detailed features based on the rumorsphere. The substantive places I was wrong were the absence of a camera, the price point (cheaper than I expected), and the lack of any information on iPhone OS 4. I had a hope for an open development environment, but I knew that wasn&#8217;t going to be true, so that&#8217;s more a self-docking principle point. I failed to predict the dock, and I gave myself a half-point for saying no 3G when there are models both with and without.</p>
<p>Below the cut I&#8217;ll start off with a brief history of my personal electronics habits from college through today, and then consider where the iPad would fit into my little niche&#8230; and, if it does fit, whether it&#8217;s worth it. I&#8217;ll also look at what still-open questions about the device would affect my potential buying decision (not the least of which is that I need to try it out in an Apple Store to get a sense of the ergonomics). While I&#8217;m only speaking for myself, maybe my analysis will be useful to people similar to me.</p>
<p><span id="more-769"></span></p>
<h2>Usage</h2>
<p>For the purposes of this post, I&#8217;m discussing a subset of my uses for various electronics in rather broad categories. Over time, the breakdown of which device(s) I use for each task has changed, mostly due to the addition of new devices, but also to some extent due to changes in my tasks breakdown over the past 8 years.</p>
<ul>
<li>Programming</li>
<li>Gaming</li>
<li>Taking pictures</li>
<li>Listening to music</li>
<li>Reading news</li>
<li>Making phone calls</li>
<li>Remote access</li>
<li>Online socializing</li>
<li>Taking notes</li>
</ul>
<p>I&#8217;m not going to get into how my time breaks down into those categories, but it&#8217;s safe to say what dominates given my employment (software engineer) and primary entertainment activity (video games). Taking notes is mostly only relevant for school, online social networking has increased since I got on Twitter, and I rarely take pictures or make phone calls.</p>
<p>In all four of the charts below, click to embiggen for a more detailed view (although they&#8217;re pretty broad generalizations, given that my percentages are rough estimates at best).</p>
<h2>In the Beforetime</h2>
<p>I jokingly refer to the period of my adult life before I owned an iPhone, which significantly changed my usual &#8220;loadout&#8221; when going anywhere by combining my mobile phone and music player into one device and also carving a few of the above tasks away from my (relatively much heftier) laptop. While it is reflected in the chart below, I&#8217;m not going into detail about how my habits changed as I accumulated new devices over the course of college.</p>
<div id="attachment_779" class="wp-caption aligncenter" style="width: 490px"><a href="http://blog.ultranurd.net/wp-content/uploads/2010/01/pre_desktop.png"><img class="size-medium wp-image-779 " title="Laptop Years (2001-2005)" src="http://blog.ultranurd.net/wp-content/uploads/2010/01/pre_desktop-600x408.png" alt="Chart breakdown of my personal electronics from 2001 to 2005, during college." width="480" height="326" /></a><p class="wp-caption-text">Chart breakdown of my personal electronics from 2001 to 2005, during college.</p></div>
<p>At school, my laptop was my sole computer. I still have that <a title="EveryMac entry for PBG4/400" href="http://www.everymac.com/systems/apple/powerbook_g4/stats/powerbook_g4_400.html">PowerBook G4/400</a>, and the only thing it&#8217;s needed over the years has been a new battery and a new power cord. Still going strong (more on how that affects my decision later). I got my first iPod at Christmas 2002, and my first mobile phone (a mid-range Siemens that had Mac Bluetooth support) at Christmas 2003. Before then, I had a Koss CD player for mobile music, and I was wedded to a landline. I still have my old Olympus digital camera, even though it&#8217;s only 2.1 megapixels and uses one of the losing memory formats, Smartmedia. I&#8217;m not a big picture-taker anyway.</p>
<p>The next big change was getting a home desktop computer once I was employed and out of school. My laptop, Chronos, became relegated to 2nd-class status, mostly taking on the roles of Remote Access and Note Taking, and being my primary computer when traveling for all other tasks. Gaming moved to the desktop almost exclusively, since newer games required newer and newer hardware, more than the Rage 128 card in the PowerBook could provide. (As you have <a title="Spending Time blog entry" href="http://blog.ultranurd.net/2009/06/06/spending-time/">read here previously</a>, most of this gaming is World of Warcraft.)</p>
<div id="attachment_780" class="wp-caption aligncenter" style="width: 490px"><a href="http://blog.ultranurd.net/wp-content/uploads/2010/01/pre_iphone.png"><img class="size-medium wp-image-780 " title="Desktop Years (2005-2007)" src="http://blog.ultranurd.net/wp-content/uploads/2010/01/pre_iphone-600x408.png" alt="Chart breakdown of my personal electronics from 2005 to 2007, as a young professional without an iPhone" width="480" height="326" /></a><p class="wp-caption-text">Chart breakdown of my personal electronics from 2005 to 2007, as a young professional without an iPhone</p></div>
<p><strong>The iPhone Cometh</strong></p>
<p>The iPhone (I got a second-iteration EDGE one) significantly changed my electronics usage by replacing the iPod and phone in one fell swoop. Because I now had mobile data, it also reduced how often I brought my laptop with me, since I could do some limited forms of online interaction while out and about. Now instead of a laptop requiring a backpack (the titanium powerbooks are light, and beautiful machines, but still a lot heftier than a phone-class device), I could bring a device that just clipped to my belt.</p>
<p>Once Apple added the App Store, I suddenly had my first mobile gaming platform (I think my first purchase was <a title="Demiforce - Trism" href="http://www.demiforce.com/games.html">Trism</a>, downloaded over EDGE somewhere in Wisconsin while headed to my friend Gus&#8217; wedding). These are all casual games, and mostly only occupy me while waiting somewhere or riding public transit, although I do occasionally play while sitting at home. The state of my electronics post-App Store is below.</p>
<div id="attachment_778" class="wp-caption aligncenter" style="width: 490px"><a href="http://blog.ultranurd.net/wp-content/uploads/2010/01/iphone.png"><img class="size-medium wp-image-778 " title="iPhone Years (2008-2010?)" src="http://blog.ultranurd.net/wp-content/uploads/2010/01/iphone-600x408.png" alt="Chart breakdown of my personal electronics from 2008 to present, covering two iPhone generations" width="480" height="326" /></a><p class="wp-caption-text">Chart breakdown of my personal electronics from 2008 to present, covering two iPhone generations</p></div>
<p>This past summer, I upgraded to the iPhone 3GS, which meant I had a better camera (in fact, except for the lack of a flash, on par with my old Olympus), and one capable of video. It was otherwise a 1:1 replacement of my old iPhone, which I then promptly unlocked for use in Mali.</p>
<h2>Room for one more?</h2>
<p>So, how does the iPad likely fit into my usage patterns? In my case, it basically needs to be able to replace the few tasks still assigned to my PBG4. I don&#8217;t need a full-power laptop because I have my desktop at home, but I do need a device that has a bigger screen for graphical remote access (<a title="Wikipedia entry on RDP" href="http://en.wikipedia.org/wiki/Remote_Desktop_Protocol">Microsoft RDP</a> through work VPN, <a title="Chicken of the VNC Sourceforge Project Page" href="http://sourceforge.net/projects/cotvnc/">VNC tunneled through SSH</a> to home Mac), and sufficient input capabilities for taking notes in class. It can also take over a few of the tasks that my iPhone had carved away from my laptop, such as Online Socializing while traveling. Pretty much everything else (larger screen web browsing, iBooks) would be an ease-of-use bonus or creating a use I don&#8217;t currently have.</p>
<p>Given my proposed usage breakdown in the chart below, the big questions are whether I can easily get a secure remote desktop connection to both my work and home computers, and how easy it is to take notes in class, possibly using the iWork app, particularly if mathematical notation is involved.</p>
<div id="attachment_777" class="wp-caption aligncenter" style="width: 490px"><a href="http://blog.ultranurd.net/wp-content/uploads/2010/01/ipad.png"><img class="size-medium wp-image-777 " title="iPad Years (2010?-)" src="http://blog.ultranurd.net/wp-content/uploads/2010/01/ipad-600x408.png" alt="Chart breakdown of a possible fit for the iPad in my usage" width="480" height="326" /></a><p class="wp-caption-text">Chart breakdown of a possible fit for the iPad in my usage</p></div>
<p>I definitely do not see the need for two 3G-capable mobile devices for myself, so I&#8217;m glad there&#8217;s a WiFi-only version. The other advantage of not being tied to a mobile contract is that I&#8217;ll have far fewer qualms jailbreaking the device to run arbitrary 3rd-party apps, as I&#8217;ve done with my old iPhone, which might solve my remaining concerns.</p>
<h2>Conclusion</h2>
<p>At this point, I&#8217;d say I&#8217;m fairly likely to get one, although I have a hard time giving up on a perfectly functional (albeit old) laptop. It clearly fits in between my laptop and my iPhone in terms of functionality, with some overlap, and I think it might be just enough to retire the old TiBook. Another big advantage is that I won&#8217;t feel guilty about playing games while mobile as much, since I don&#8217;t have to worry about the necessity of the battery of the device-I-use-as-phone.</p>
<p>If, however, it is very lacking in editing capabilities (The Steve was certainly emphasizing it for content consumption for the most part), or cannot easily access my work and home desktops (possibly requiring jailbreaking), I probably won&#8217;t be interested except as a new shiny toy I can lust after until a second generation with improvements.</p>
<p>The verdict is still out until I feel it in my hands. What do you think?</p>
<div class='wb_fb_bottom'><div style="float:right;"></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ultranurd.net/2010/01/28/is-the-ipad-for-me/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>I Found a Twitter Bug!</title>
		<link>http://blog.ultranurd.net/2009/11/30/i-found-a-twitter-bug/</link>
		<comments>http://blog.ultranurd.net/2009/11/30/i-found-a-twitter-bug/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 03:32:47 +0000</pubDate>
		<dc:creator>Nicolas Ward</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[sms]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[verizon]]></category>

		<guid isPermaLink="false">http://blog.ultranurd.net/?p=745</guid>
		<description><![CDATA[I found a Twitter bug! Hah! Specifically, certain characters which much be escaped in the GSM 03.38 character encoding are getting treated as the wrong encoding when posted to Twitter from Verizon Wireless SMS, and showing up as ? in text messages sent by Twitter to Verizon Wireless customers via SMS. I should add that [...]]]></description>
			<content:encoded><![CDATA[<p>I found a Twitter bug! Hah!</p>
<p>Specifically, certain characters which much be escaped in the <a title="Wikipedia Entry for GSM 03.38 Character Set" href="http://en.wikipedia.org/wiki/GSM_03.38">GSM 03.38 character encoding</a> are getting treated as the wrong encoding when posted to <a title="Twitter Home" href="http://twitter.com">Twitter</a> from Verizon Wireless SMS, and showing up as ? in text messages sent by Twitter to <a title="Verizon Wireless Home" href="http://www.verizonwireless.com/">Verizon Wireless</a> customers via SMS.</p>
<p>I should add that I didn&#8217;t find this bug alone &#8211; <a title="Elliot Reed on Twitter" href="http://twitter.com/elliotreed">@elliotreed</a> asked why I used question marks to note something in a tweet when I had actually used square brackets around some text. Some quick investigation with him revealed the more specific nature of the problem, but it wasn&#8217;t until I actually found out that there was such a thing as GSM encoding that I came up with a hypothesis to explain the character weirdness.</p>
<p>As far as I can tell, Verizon&#8217;s HTTP/SMS gateway is now doing the GSM/UTF-8 mapping internally, but Twitter is assuming it still has to send GSM bytes to Verizon, so the encoding is happening twice, or at least attempting to happen twice. Verizon chokes on the GSM two-byte characters, since they&#8217;re not valid UTF-8, while Twitter receives certain ASCII-range one-byte UTF-8 characters but converts them as if they were GSM one-byte characters, resulting in a totally different UTF-8 character!</p>
<div id="attachment_746" class="wp-caption aligncenter" style="width: 531px"><a href="http://blog.ultranurd.net/wp-content/uploads/2009/11/Screen-shot-2009-11-30-at-10.18.26-PM.png"><img class="size-full wp-image-746" title="GSM Encoding Bug" src="http://blog.ultranurd.net/wp-content/uploads/2009/11/Screen-shot-2009-11-30-at-10.18.26-PM.png" alt="The GSM-to-UTF-8 encoding bug, shown here for square brackets, curly braces, tilde, backslash, and carat." width="521" height="196" /></a><p class="wp-caption-text">The GSM-to-UTF-8 encoding bug, shown here for square brackets, curly braces, tilde, backslash, and carat.</p></div>
<p>The GSM encoding doesn&#8217;t allow certain characters as single-byte characters; this appears to be a way to shove a number of European characters into a 7-bit mutant ASCII, with control characters and certain punctuation replaced by characters from the Latin-1 codepage. To some extent this makes sense, given that with the 160-byte length limit on SMS messages you want to avoid multibyte encodings while still supporting commonly used characters (UTF-16 is used for non-roman languages). Unfortunately, this leaves [, ], ~, {, }, \, |, and ^ out in the cold. As a programmer, I use these punctuation characters often as separators in various notations, so it is perhaps not surprising that one of my tweets revealed the problem. These characters can be sent as a two-byte sequence in the GSM encoding, but those start with an escape byte 0x1B, which since it starts with more than one initial bit high will always be invalid as the first byte of a UTF-8 character.</p>
<p>I would have thought that the Age of Unicode would have ended many of these non-standard application-specific encodings (and plus, given the way mobile carriers love to gouge on SMS, if they make your characters take more bytes, they get more money!). It looks like that&#8217;s exactly what Verizon is trying to do, in moving to exposing UTF-8 on the edge of their network&#8230; they just didn&#8217;t tell anyone that they had changed encodings, or if they have, Twitter hasn&#8217;t acted on the change yet.</p>
<p>Since Twitter disabled their help ticket creation (probably because too many stupid people were posting the same questions without reading the FAQs), I <a title="Twitter API Issue 1245: Verizon SMS Text Encoding" href="http://code.google.com/p/twitter-api/issues/detail?id=1245">reported the bug</a> using the Twitter API ticketing system on <a title="Google Code" href="http://code.google.com/">Google Code</a>.</p>
<p>Short story: if you use any of the punctuation characters above in your tweets, expect texting Twitter users with Verizon to see ?, and expect to receive tweets from them with weird European characters, until this is fixed by one or both parties.</p>
<div class='wb_fb_bottom'><div style="float:right;"></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ultranurd.net/2009/11/30/i-found-a-twitter-bug/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>BackSnapper &#8211; My First Chrome Extension</title>
		<link>http://blog.ultranurd.net/2009/11/25/backsnapper-my-first-chrome-extension/</link>
		<comments>http://blog.ultranurd.net/2009/11/25/backsnapper-my-first-chrome-extension/#comments</comments>
		<pubDate>Thu, 26 Nov 2009 03:54:28 +0000</pubDate>
		<dc:creator>Nicolas Ward</dc:creator>
				<category><![CDATA[Code Projects]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[chrome extension]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google chrome]]></category>
		<category><![CDATA[web navigation]]></category>

		<guid isPermaLink="false">http://blog.ultranurd.net/?p=734</guid>
		<description><![CDATA[BackSnapper On a whim tonight, I whipped up my first Google Chrome extension in about 2 hours. A non-trivial amount of time was spent writing it up and making the icons. It&#8217;s obviously very simple, but it replicates one of my favorite features of Safari 3: SnapBack (the feature got eviscerated in Safari 4). Basically [...]]]></description>
			<content:encoded><![CDATA[<h2>BackSnapper</h2>
<p>On a whim tonight, I whipped up my first Google Chrome extension in about 2 hours. A non-trivial amount of time was spent writing it up and making the icons. It&#8217;s obviously very simple, but it replicates one of my favorite features of Safari 3: SnapBack (the feature got eviscerated in Safari 4).</p>
<p>Basically all this extension does is add a button to the Chrome toolbar that you can click to jump back to the first page in a tab&#8217;s history. I realize the button and icons are ugly; I am not a design-type person.</p>
<div class="wp-caption aligncenter" style="width: 225px"><img title="BackSnapper Example" src="http://www.ultranurd.net/code/chrome/backsnapper.png" alt="The BackSnapper button once installed in Chrome 4" width="215" height="125" /><p class="wp-caption-text">The BackSnapper button once installed in Chrome 4</p></div>
<p>You can <a title="Nurd Central - Code Projects - Chrome Extensions" href="http://www.ultranurd.net/code/chrome/index.html">read a bit more</a> about my BackSnapper extension, <a title="BackSnapper zip file" href="http://www.ultranurd.net/code/chrome/BackSnapper.zip">download it</a> if you&#8217;re using the developer edition of Google Chrome (currently version 4), or <a title="BackSnapper on github" href="http://github.com/UltraNurd/chrome-extension-backsnapper">view the code</a> on <a title="github" href="http://github.com/">github</a>.</p>
<p>As Chrome rolls out the Extensions Gallery, I&#8217;ll deploy the extension out there. It could probably use some better options, and some smarter heuristics for determining where the beginning is, but for my purposes it gives me the magic button I want.</p>
<h2>Installation</h2>
<p>You can install the BackSnapper extension from the .zip file more or less by following <a title="Google Chrome Extensions - Getting Started Tutorial" href="http://code.google.com/chrome/extensions/getstarted.html#load">Step 4 in these instructions</a>. Note that at present this only works for the dev channel (version 4) of Google Chrome.</p>
<ol>
<li>Download and unpack the .zip file</li>
<li>Select Extensions from the Tools menu.</li>
<li>Click &#8220;Developer Mode&#8221; on the right in the Extensions display.</li>
<li>Click &#8220;Load unpacked extension&#8230;&#8221; and select the unpacked BackSnapper folder</li>
</ol>
<h2>Development Tips</h2>
<p>There were a few things I learned getting this working that weren&#8217;t immediately obvious from the documentation:</p>
<ul>
<li>The debug console is per tab</li>
<li>You may need to select your injected content Javascript in the debug console to view logged messages</li>
<li>For simple calls into content scripts, chrome.tabs.sendRequest() is sufficient, you don&#8217;t need to use the more complicated connect() message passing calls.</li>
</ul>
<p>There were also a few things I couldn&#8217;t figure out:</p>
<ul>
<li>Why won&#8217;t the current developers-only Extensions Gallery accept my unsigned zip file?</li>
<li>Why can&#8217;t I determine the current URL in the history after having called history.go()? location.href remains unchanged, and history.current is undefined.</li>
</ul>
<div class='wb_fb_bottom'><div style="float:right;"></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ultranurd.net/2009/11/25/backsnapper-my-first-chrome-extension/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Top 200 Video Games of All Time According to Game Informer</title>
		<link>http://blog.ultranurd.net/2009/11/24/top-200-video-games-of-all-time-according-to-gameinformer/</link>
		<comments>http://blog.ultranurd.net/2009/11/24/top-200-video-games-of-all-time-according-to-gameinformer/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 22:19:41 +0000</pubDate>
		<dc:creator>Nicolas Ward</dc:creator>
				<category><![CDATA[Video Games]]></category>
		<category><![CDATA[big brother]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[game informer]]></category>
		<category><![CDATA[my opinion]]></category>
		<category><![CDATA[nablopomo]]></category>
		<category><![CDATA[top n list]]></category>

		<guid isPermaLink="false">http://blog.ultranurd.net/?p=707</guid>
		<description><![CDATA[Introduction Oh yeah, I have a blog! Lots has been going on in the intervening months (see my Twitter feed for short attention span details), but I figured a video game post during NaBloPoMo would be a good way to get back on the wagon, even if I&#8217;m not actually posting every day during November. [...]]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p>Oh yeah, I have a blog! Lots has been going on in the intervening months (see my <a title="Nicolas Ward (UltraNurd) on Twitter" href="http://twitter.com/UltraNurd/">Twitter feed</a> for short attention span details), but I figured a video game post during <a title="National Blog Posting Month" href="http://www.nablopomo.com/">NaBloPoMo</a> would be a good way to get back on the wagon, even if I&#8217;m not actually posting every day during November.</p>
<p>While visiting my <a title="Big Brothers &amp; Big Sisters of Massachusetts Bay" href="http://www.bbbsmb.org/Default.aspx">Little Brother</a> this weekend, I noticed a rather <a title="Game Informer's 200th Issue Revealed" href="http://gameinformer.com/b/news/archive/2009/11/16/game-informer-s-200th-issue-revealed.aspx">unusual magazine cover</a>&#8230; a (very pixelated) monster from the original <a title="Wikipedia entry for Doom" href="http://en.wikipedia.org/wiki/Doom_(video_game)">Doom</a>. This turned out to be the latest issue of <a title="GameInformer Home Page" href="http://gameinformer.com/default.aspx">Game Informer</a>, specifically Volume XIX, Number 12, Issue 200. In honor of this decimalist anniversary, they published their Top 200 Video Games of All Time list, which unsurprisingly is linkbait for any video game fan who likes to rant about what should and should not be included in such a list. I ran through my opinions quickly with my Little, mostly fixating on why so many recent games were already on the list, but decided a deeper analysis was in order.</p>
<p>Instead of complaining about the contents of the list, I thought I&#8217;d use it to track my personal video game history (much as my father has in the past used the <a title="RS 500 Greatest Albums" href="http://www.rollingstone.com/news/story/5938174/the_rs_500_greatest_albums_of_all_time">Rolling Stone 500 Greatest Albums of All Time</a> and <a title="RS 500 Greatest Songs" href="http://www.rollingstone.com/news/coverstory/500songs">Rolling Stone 500 Greatest Songs of All Time</a> to guide his music purchases). I&#8217;ve also done some histogram breakdowns of what&#8217;s on the list. I would say that my guideline for inclusion on any such list would involve adjectives like &#8220;innovative&#8221; and &#8220;influential&#8221;, and explicitly avoid conditions like &#8220;critically acclaimed&#8221;, &#8220;popular&#8221;, or &#8220;best-selling&#8221;. This in turn means that inclusion must be viewed through a somewhat temporally distant lens, for sufficient perspective on a particular cultural artifact&#8217;s import.</p>
<p>How many of these have you played? Do you strongly agree/disagree with any of the rankings?</p>
<p>The columns are Game Informer rank, game title, platform(s), and year of publication from the original article; I believe using this data for commentary is covered by Fair Use. I added platforms in a few places to account for the particular port of a game that I played. I have also added columns for myself, for Played, Owned, and Completed. The full table and further analysis is below the cut.</p>
<p><span id="more-707"></span></p>
<h2>Columns</h2>
<p>A brief explanation before the table: I count a game as &#8220;Played&#8221; if I personally controlled the game for at least one significant play session (enough to see one full level, game, etc.); I count a game as &#8220;Owned&#8221; if I purchased the game or received it as a gift; and I count a game as &#8220;Completed&#8221; if I finished the primary plot levels for games with solo play, reached a reasonably high or maximum level in games with increasing difficulty level play, or played a simulation game to a goal threshold. Ownership and Completion are both subsets of Played, with some overlap, but not identical subsets.</p>
<h2>Top 200 Video Games Table</h2>
<table border="0">
<tbody>
<tr>
<th>Rank</th>
<th>Game</th>
<th>Platform(s)</th>
<th>Year</th>
<th>Played</th>
<th>Owned</th>
<th>Completed</th>
</tr>
<tr>
<td>1</td>
<td>The Legend of Zelda</td>
<td>NES</td>
<td>1987</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>2</td>
<td>Super Mario Bros.</td>
<td>NES</td>
<td>1985</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>3</td>
<td>Tetris</td>
<td>PC</td>
<td>1984</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
<td></td>
</tr>
<tr>
<td>4</td>
<td>Grand Theft Auto III</td>
<td>PS2</td>
<td>2001</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>5</td>
<td>Half-Life 2</td>
<td>PC</td>
<td>2004</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
<td></td>
</tr>
<tr>
<td>6</td>
<td>Doom</td>
<td>PC, iPhone</td>
<td>1993</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>7</td>
<td>Metroid</td>
<td>NES</td>
<td>1986</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>8</td>
<td>Final Fantasy III</td>
<td>SNES</td>
<td>1994</td>
<td style="text-align: center">X</td>
<td></td>
<td style="text-align: center">X</td>
</tr>
<tr>
<td>9</td>
<td>Super Mario Bros. 3</td>
<td>NES</td>
<td>1990</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>10</td>
<td>Ms. Pac-Man</td>
<td>Arcade</td>
<td>1981</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>11</td>
<td>World of Warcraft</td>
<td>PC</td>
<td>2004</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
</tr>
<tr>
<td>12</td>
<td>The Legend of Zelda: A Link to the Past</td>
<td>SNES</td>
<td>1992</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>13</td>
<td>Super Mario 64</td>
<td>N64</td>
<td>1996</td>
<td style="text-align: center">X</td>
<td></td>
<td style="text-align: center">X</td>
</tr>
<tr>
<td>14</td>
<td>Call of Duty 4: Modern Warfare</td>
<td>PS3, 360, PC</td>
<td>2007</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>15</td>
<td>Final Fantasy VII</td>
<td>PS</td>
<td>1997</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
</tr>
<tr>
<td>16</td>
<td>Mike Tyson&#8217;s Punch-Out!!</td>
<td>NES</td>
<td>1987</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>17</td>
<td>Chrono Trigger</td>
<td>SNES</td>
<td>1995</td>
<td style="text-align: center">X</td>
<td></td>
<td style="text-align: center">X</td>
</tr>
<tr>
<td>18</td>
<td>Resident Evil 4</td>
<td>GameCube</td>
<td>2005</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>19</td>
<td>Metal Gear Solid</td>
<td>PS</td>
<td>1998</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>20</td>
<td>The Legend of Zelda: Ocarina of Time</td>
<td>N64</td>
<td>1998</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>21</td>
<td>Super Metroid</td>
<td>SNES</td>
<td>1994</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>22</td>
<td>Contra</td>
<td>NES</td>
<td>1988</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>23</td>
<td>Galaga</td>
<td>Arcade</td>
<td>1981</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>24</td>
<td>Castlevania: Symphony of the Night</td>
<td>PS</td>
<td>1997</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>25</td>
<td>Street Fighter II</td>
<td>Arcade, SNES</td>
<td>1991</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>26</td>
<td>God of War</td>
<td>PS2</td>
<td>2005</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>27</td>
<td>BioShock</td>
<td>360, PC</td>
<td>2007</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>28</td>
<td>Diablo II</td>
<td>PC</td>
<td>2000</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
<td></td>
</tr>
<tr>
<td>29</td>
<td>Half-Life</td>
<td>PC</td>
<td>1998</td>
<td style="text-align: center">X</td>
<td></td>
<td style="text-align: center">X</td>
</tr>
<tr>
<td>30</td>
<td>The Elder Scrolls IV: Oblivion</td>
<td>360, PC</td>
<td>2006</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>31</td>
<td>Tecmo Super Bowl</td>
<td>NES</td>
<td>1991</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>32</td>
<td>GoldenEye 007</td>
<td>N64</td>
<td>1997</td>
<td style="text-align: center">X</td>
<td></td>
<td style="text-align: center">X</td>
</tr>
<tr>
<td>33</td>
<td>Super Mario Kart</td>
<td>SNES</td>
<td>1992</td>
<td style="text-align: center">X</td>
<td></td>
<td style="text-align: center">X</td>
</tr>
<tr>
<td>34</td>
<td>Sonic the Hedgehog</td>
<td>Genesis</td>
<td>1991</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
<td></td>
</tr>
<tr>
<td>35</td>
<td>Starcraft</td>
<td>PC</td>
<td>1998</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
</tr>
<tr>
<td>36</td>
<td>Civilization</td>
<td>PC</td>
<td>1991</td>
<td style="text-align: center">X</td>
<td></td>
<td style="text-align: center">X</td>
</tr>
<tr>
<td>37</td>
<td>SimCity</td>
<td>PC</td>
<td>1989</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>38</td>
<td>Mega Man 2</td>
<td>NES</td>
<td>1988</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>39</td>
<td>Halo: Combat Evolved</td>
<td>Xbox</td>
<td>2001</td>
<td style="text-align: center">X</td>
<td></td>
<td style="text-align: center">X</td>
</tr>
<tr>
<td>40</td>
<td>Gran Turismo</td>
<td>PS</td>
<td>1998</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>41</td>
<td>Resident Evil 2</td>
<td>PS</td>
<td>1998</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>42</td>
<td>Pokemon Red and Blue</td>
<td>GB</td>
<td>1996</td>
<td style="text-align: center">X</td>
<td></td>
<td style="text-align: center">X</td>
</tr>
<tr>
<td>43</td>
<td>Final Fantasy X</td>
<td>PS2</td>
<td>2001</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>44</td>
<td>EverQuest</td>
<td>PC</td>
<td>1999</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>45</td>
<td>Final Fantasy Tactics</td>
<td>PS</td>
<td>1998</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>46</td>
<td>Grand Theft Auto IV</td>
<td>PS3, 360</td>
<td>2008</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>47</td>
<td>Super Mario World</td>
<td>SNES</td>
<td>1991</td>
<td style="text-align: center">X</td>
<td></td>
<td style="text-align: center">X</td>
</tr>
<tr>
<td>48</td>
<td>Deus Ex</td>
<td>PC</td>
<td>2000</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>49</td>
<td>Guitar Hero</td>
<td>PS2</td>
<td>2005</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>50</td>
<td>Metal Gear Solid 2: Sons of Liberty</td>
<td>PS2</td>
<td>2001</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>51</td>
<td>Super Mario Galaxy</td>
<td>Wii</td>
<td>2007</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
<td></td>
</tr>
<tr>
<td>52</td>
<td>Pac-Man</td>
<td>Arcade</td>
<td>1980</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>53</td>
<td>Battlefield 2</td>
<td>PC</td>
<td>2005</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>54</td>
<td>Star Wars: Knights of the Old Republic</td>
<td>Xbox</td>
<td>2003</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
</tr>
<tr>
<td>55</td>
<td>Ico</td>
<td>PS2</td>
<td>2001</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>56</td>
<td>Uncharted 2: Among Thieves</td>
<td>PS3</td>
<td>2009</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>57</td>
<td>Tony Hawk&#8217;s Pro Skater 2</td>
<td>PS</td>
<td>2000</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>58</td>
<td>Mass Effect</td>
<td>360, PC</td>
<td>2007</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
<td></td>
</tr>
<tr>
<td>59</td>
<td>Adventure</td>
<td>2600</td>
<td>1980</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>60</td>
<td>Arkanoid</td>
<td>Arcade</td>
<td>1986</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>61</td>
<td>The Legend of Zelda: Link&#8217;s Awakening</td>
<td>GB</td>
<td>1993</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>62</td>
<td>Star Wars: X-Wing</td>
<td>PC</td>
<td>1993</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
<td></td>
</tr>
<tr>
<td>63</td>
<td>The Legend of Zelda: Majora&#8217;s Mask</td>
<td>N64</td>
<td>2000</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>64</td>
<td>Grand Theft Auto: San Andreas</td>
<td>PS2</td>
<td>2004</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>65</td>
<td>Fallout 3</td>
<td>PS3, 360, PC</td>
<td>2008</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>66</td>
<td>Zork</td>
<td>PC</td>
<td>1980</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
<td></td>
</tr>
<tr>
<td>67</td>
<td>Soul Calibur</td>
<td>DC</td>
<td>1999</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>68</td>
<td>Double Dragon</td>
<td>Arcade, NES</td>
<td>1987</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>69</td>
<td>Dr. Mario</td>
<td>NES</td>
<td>1990</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>70</td>
<td>The Sims</td>
<td>PC</td>
<td>2000</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
<td></td>
</tr>
<tr>
<td>71</td>
<td>Age of Empires</td>
<td>PC</td>
<td>1997</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>72</td>
<td>Mortal Kombat II</td>
<td>Arcade, SNES</td>
<td>1993</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>73</td>
<td>Rock Band 2</td>
<td>PS3, 360</td>
<td>2008</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>74</td>
<td>Tomb Raider</td>
<td>PS</td>
<td>1996</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>75</td>
<td>Super Bomberman</td>
<td>SNES</td>
<td>1993</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>76</td>
<td>Mario&#8217;s Picross</td>
<td>GB</td>
<td>1995</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>77</td>
<td>Ninja Gaiden</td>
<td>NES</td>
<td>1989</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>78</td>
<td>Command &amp; Conquer</td>
<td>PC</td>
<td>1995</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
</tr>
<tr>
<td>79</td>
<td>Kingdom Hearts</td>
<td>PS2</td>
<td>2002</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>80</td>
<td>Final Fantasy II</td>
<td>SNES</td>
<td>1991</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>81</td>
<td>Super Mario Bros. 2</td>
<td>NES</td>
<td>1988</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>82</td>
<td>Left 4 Dead</td>
<td>PC</td>
<td>2008</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>83</td>
<td>Okami</td>
<td>PS2</td>
<td>2006</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>84</td>
<td>Shadow of the Colossus</td>
<td>PS2</td>
<td>2005</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>85</td>
<td>Metroid Prime</td>
<td>GameCube</td>
<td>2002</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>86</td>
<td>Super Smash Bros. Melee</td>
<td>GameCube</td>
<td>2001</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>87</td>
<td>Warcraft II: Tides of Darkness</td>
<td>PC</td>
<td>1995</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>88</td>
<td>Baldur&#8217;s Gate II: Shadows of Amn</td>
<td>PC</td>
<td>2000</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>89</td>
<td>God of War II</td>
<td>PS2</td>
<td>2007</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>90</td>
<td>The Legend of Zelda: Twilight Princess</td>
<td>Wii</td>
<td>2006</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
<td></td>
</tr>
<tr>
<td>91</td>
<td>Ratchet &amp; Clank: Up Your Arsenal</td>
<td>PS2</td>
<td>2004</td>
<td style="text-align: center">X</td>
<td></td>
<td style="text-align: center">X</td>
</tr>
<tr>
<td>92</td>
<td>Medal of Honor: Allied Assault</td>
<td>PC</td>
<td>2002</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>93</td>
<td>Skies of Arcadia</td>
<td>DC</td>
<td>2000</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>94</td>
<td>The Legend of Zelda: Wind Waker</td>
<td>GameCube</td>
<td>2003</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>95</td>
<td>Silent Hill 2</td>
<td>PS2</td>
<td>2001</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>96</td>
<td>Counter-Strike</td>
<td>PC</td>
<td>1999</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>97</td>
<td>Sonic the Hedgehog 2</td>
<td>Genesis</td>
<td>1992</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>98</td>
<td>Grand Theft Auto: Vice City</td>
<td>PS2, Xbox, PC</td>
<td>2002</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>99</td>
<td>Prince of Persia: The Sands of Time</td>
<td>PS2, Xbox, GameCube, PC</td>
<td>2003</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>100</td>
<td>Portal</td>
<td>PC, 360</td>
<td>2007</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
</tr>
<tr>
<td>101</td>
<td>The Elder Scrolls III: Morrowind</td>
<td>PC</td>
<td>2002</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>102</td>
<td>Heroes of Might &amp; Magic III</td>
<td>PC</td>
<td>1999</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>103</td>
<td>Donkey Kong</td>
<td>Arcade</td>
<td>1981</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>104</td>
<td>Batman: Arkham Asylum</td>
<td>PS3, 360</td>
<td>2009</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>105</td>
<td>System Shock 2</td>
<td>PC</td>
<td>1999</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>106</td>
<td>Resident Evil</td>
<td>PS</td>
<td>1996</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>107</td>
<td>Gears of War</td>
<td>360</td>
<td>2006</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>108</td>
<td>Metal Gear Solid 4: Guns of the Patriots</td>
<td>PS3</td>
<td>2008</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>109</td>
<td>Crash Bandicoot: Warped</td>
<td>PS</td>
<td>1998</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>110</td>
<td>Halo 2</td>
<td>Xbox</td>
<td>2004</td>
<td style="text-align: center">X</td>
<td></td>
<td style="text-align: center">X</td>
</tr>
<tr>
<td>111</td>
<td>Tetris Attack</td>
<td>SNES</td>
<td>1996</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>112</td>
<td>Final Fantasy XII</td>
<td>PS2</td>
<td>2006</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>113</td>
<td>Earthbound</td>
<td>SNES</td>
<td>1995</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>114</td>
<td>Sid Meier&#8217;s Alpha Centauri</td>
<td>PC</td>
<td>1998</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
</tr>
<tr>
<td>115</td>
<td>Command &amp; Conquer: Red Alert</td>
<td>PC</td>
<td>1996</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>116</td>
<td>Advance Wars</td>
<td>GBA</td>
<td>2001</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>117</td>
<td>Fallout</td>
<td>PC</td>
<td>1997</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>118</td>
<td>Team Fortress 2</td>
<td>PS3, 360, PC</td>
<td>2007</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
<td></td>
</tr>
<tr>
<td>119</td>
<td>Splinter Cell: Chaos Theory</td>
<td>Xbox</td>
<td>2005</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>120</td>
<td>Mega Man X</td>
<td>SNES</td>
<td>1994</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>121</td>
<td>Lemmings</td>
<td>PC</td>
<td>1991</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>122</td>
<td>Panzer Dragoon Saga</td>
<td>Saturn</td>
<td>1998</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>123</td>
<td>NHL &#8217;94</td>
<td>Genesis, SNES</td>
<td>1993</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>124</td>
<td>Warlords</td>
<td>Arcade</td>
<td>1980</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>125</td>
<td>Shadowrun</td>
<td>SNES</td>
<td>1993</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>126</td>
<td>Twisted Metal 2</td>
<td>PS</td>
<td>1996</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
<td></td>
</tr>
<tr>
<td>127</td>
<td>Oddworld: Abe&#8217;s Oddysee</td>
<td>PS</td>
<td>1997</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>128</td>
<td>Metroid Fusion</td>
<td>GBA</td>
<td>2002</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>129</td>
<td>Homeworld</td>
<td>PC</td>
<td>1999</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>130</td>
<td>Kingdom Hearts II</td>
<td>PS2</td>
<td>2006</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>131</td>
<td>Pilotwings</td>
<td>SNES</td>
<td>1991</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>132</td>
<td>Quake II</td>
<td>PC</td>
<td>1997</td>
<td style="text-align: center">X</td>
<td></td>
<td style="text-align: center">X</td>
</tr>
<tr>
<td>133</td>
<td>Star Wars Jedi Knight: Dark Forces II</td>
<td>PC</td>
<td>1997</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>134</td>
<td>Borderlands</td>
<td>PS3, 360, PC</td>
<td>2009</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
<td></td>
</tr>
<tr>
<td>135</td>
<td>Final Fight</td>
<td>Arcade</td>
<td>1989</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>136</td>
<td>Star Fox</td>
<td>SNES</td>
<td>1993</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>137</td>
<td>Madden NFL &#8217;99</td>
<td>PS, N64, PC</td>
<td>1999</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>138</td>
<td>Call of Duty 2</td>
<td>360, PC</td>
<td>2005</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>139</td>
<td>Wolfenstein 3D</td>
<td>PC</td>
<td>1992</td>
<td style="text-align: center">X</td>
<td></td>
<td style="text-align: center">X</td>
</tr>
<tr>
<td>140</td>
<td>Diablo</td>
<td>PC</td>
<td>1996</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
</tr>
<tr>
<td>141</td>
<td>Civilization IV</td>
<td>PC</td>
<td>2005</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
</tr>
<tr>
<td>142</td>
<td>Maniac Mansion: Day of the Tentacle</td>
<td>PC</td>
<td>1993</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>143</td>
<td>Assassin&#8217;s Creed</td>
<td>PS3, 360</td>
<td>2007</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>144</td>
<td>Burnout 3: Takedown</td>
<td>PS2, Xbox</td>
<td>2004</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>145</td>
<td>Unreal Tournament 2004</td>
<td>PC</td>
<td>2004</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>146</td>
<td>Power Stone 2</td>
<td>DC</td>
<td>2000</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>147</td>
<td>Super Castlevania IV</td>
<td>SNES</td>
<td>1991</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>148</td>
<td>Super Mario RPG</td>
<td>SNES</td>
<td>1996</td>
<td style="text-align: center">X</td>
<td></td>
<td style="text-align: center">X</td>
</tr>
<tr>
<td>149</td>
<td>Warcraft III: Reign of Chaos</td>
<td>PC</td>
<td>2002</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
</tr>
<tr>
<td>150</td>
<td>ActRaiser</td>
<td>SNES</td>
<td>1991</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>151</td>
<td>Fable</td>
<td>Xbox</td>
<td>2004</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>152</td>
<td>Xenosaga Episode I: Der Wille zur Macht</td>
<td>PS2</td>
<td>2003</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>153</td>
<td>Asteroids</td>
<td>Arcade</td>
<td>1979</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>154</td>
<td>LittleBigPlanet</td>
<td>PS3</td>
<td>2008</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>155</td>
<td>Crackdown</td>
<td>360</td>
<td>2007</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>156</td>
<td>Gauntlet</td>
<td>Arcade</td>
<td>1985</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>157</td>
<td>Devil May Cry</td>
<td>PS2</td>
<td>2001</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>158</td>
<td>Pong</td>
<td>Arcade</td>
<td>1972</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>159</td>
<td>Battlefield 1942</td>
<td>PC</td>
<td>2002</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>160</td>
<td>Thief</td>
<td>PC</td>
<td>1998</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>161</td>
<td>Geometry Wars: Retro Evolved</td>
<td>360</td>
<td>2005</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>162</td>
<td>Far Cry</td>
<td>PC</td>
<td>2004</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>163</td>
<td>Robotron: 2084</td>
<td>Arcade</td>
<td>1982</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>164</td>
<td>X-COM: UFO Defense</td>
<td>PC</td>
<td>1993</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>165</td>
<td>Peggle</td>
<td>PC, iPhone</td>
<td>2007</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
</tr>
<tr>
<td>166</td>
<td>King&#8217;s Quest VI</td>
<td>PC</td>
<td>1992</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>167</td>
<td>Doom II</td>
<td>PC</td>
<td>1994</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>168</td>
<td>Tempest 2000</td>
<td>Jaguar</td>
<td>1994</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>169</td>
<td>Braid</td>
<td>360, PC</td>
<td>2008</td>
<td style="text-align: center">X</td>
<td style="text-align: center">X</td>
<td></td>
</tr>
<tr>
<td>170</td>
<td>Ridge Racer</td>
<td>PS</td>
<td>1995</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>171</td>
<td>Bully</td>
<td>PS2, Wii</td>
<td>2006</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>172</td>
<td>Ikaruga</td>
<td>GameCube</td>
<td>2006</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>173</td>
<td>Lode Runner</td>
<td>Apple II</td>
<td>1983</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>174</td>
<td>Gunstar Heroes</td>
<td>Genesis</td>
<td>1993</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>175</td>
<td>Dig Dug</td>
<td>Arcade</td>
<td>1982</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>176</td>
<td>Castlevania</td>
<td>NES</td>
<td>1988</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>177</td>
<td>Tekken 3</td>
<td>Arcade, PS</td>
<td>1997</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>178</td>
<td>Phoenix Wright: Ace Attorney</td>
<td>DS</td>
<td>2005</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>179</td>
<td>NBA Jam: Tournament Edition</td>
<td>Arcade</td>
<td>1993</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>180</td>
<td>Max Payne</td>
<td>PC</td>
<td>2001</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>181</td>
<td>Call of Duty: Modern Warfare 2</td>
<td>PS3, 360, PC</td>
<td>2009</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>182</td>
<td>Samurai Shodown</td>
<td>Neo Geo, SNES</td>
<td>1993</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>183</td>
<td>NFL 2K5</td>
<td>PS2, Xbox</td>
<td>2004</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>184</td>
<td>Vagrant Story</td>
<td>PS</td>
<td>2000</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>185</td>
<td>Super Mario World 2: Yoshi&#8217;s Island</td>
<td>SNES</td>
<td>1995</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>186</td>
<td>Marble Madness</td>
<td>Arcade</td>
<td>1984</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>187</td>
<td>Infamous</td>
<td>PS3</td>
<td>2009</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>188</td>
<td>Planescape: Torment</td>
<td>PC</td>
<td>1999</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>189</td>
<td>Kid Icarus</td>
<td>NES</td>
<td>1986</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>190</td>
<td>The Chronicles of Riddick: Escape from Butcher Bay</td>
<td>Xbox</td>
<td>2004</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>191</td>
<td>Metal Gear Solid 3: Snake Eater</td>
<td>PS2</td>
<td>2004</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>192</td>
<td>Eternal Darkness: Sanity&#8217;s Requiem</td>
<td>GameCube</td>
<td>2002</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>193</td>
<td>Jak 3</td>
<td>PS2</td>
<td>2004</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>194</td>
<td>Marvel vs. Capcom 2</td>
<td>DC</td>
<td>2002</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>195</td>
<td>Ultima</td>
<td>PC</td>
<td>1981</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>196</td>
<td>Call of Duty</td>
<td>PC</td>
<td>2003</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>197</td>
<td>NHL 09</td>
<td>PS3, 360</td>
<td>2008</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>198</td>
<td>Splinter Cell: Pandora Tomorrow</td>
<td>Xbox</td>
<td>2004</td>
<td style="text-align: center">X</td>
<td></td>
<td></td>
</tr>
<tr>
<td>199</td>
<td>Tactics Ogre</td>
<td>PS</td>
<td>1997</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>200</td>
<td>Beyond Good and Evil</td>
<td>PS2, Xbox, GameCube</td>
<td>2003</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<h2>Overall Breakdown</h2>
<p>From browsing the list, I was expecting it to be skewed towards more recent offerings. A few quick histograms to some extent confirm this for the full list, but disprove it when you consider only the Top 20 games on the list. Click to embiggen any of the graphs.</p>
<div id="attachment_725" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.ultranurd.net/wp-content/uploads/2009/11/games_by_year.png"><img class="size-thumbnail wp-image-725" title="Games by Year" src="http://blog.ultranurd.net/wp-content/uploads/2009/11/games_by_year-300x204.png" alt="Bar graph histogram of the Top 200 and Top 20 games by publication year" width="300" height="204" /></a><p class="wp-caption-text">Bar graph histogram of the Top 200 and Top 20 games by publication year</p></div>
<div id="attachment_724" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.ultranurd.net/wp-content/uploads/2009/11/games_by_platform.png"><img class="size-thumbnail wp-image-724" title="Games by Platform" src="http://blog.ultranurd.net/wp-content/uploads/2009/11/games_by_platform-300x204.png" alt="Bar graph histogram of the Top 200 and Top 20 games by console platform (including PC)" width="300" height="204" /></a><p class="wp-caption-text">Bar graph histogram of the Top 200 and Top 20 games by console platform (including PC)</p></div>
<div id="attachment_723" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.ultranurd.net/wp-content/uploads/2009/11/games_by_generation.png"><img class="size-thumbnail wp-image-723" title="Games by Generation" src="http://blog.ultranurd.net/wp-content/uploads/2009/11/games_by_generation-300x204.png" alt="Bar graph histogram of the Top 200 and Top 20 games by console generation." width="300" height="204" /></a><p class="wp-caption-text">Bar graph histogram of the Top 200 and Top 20 games by console generation.</p></div>
<p>As you can see, the Top 200 list (in red) is skewed towards PC games, since that category is not further broken down by OS or era. It also seems to be skewed towards more recent consoles, particularly the Playstations 2 &amp; 3 and both Xboxen.</p>
<p>However, if you consider only the Top 20 (in blue), a more historical perspective is available. Nintendo is more favored, and the breakdown is more even by by both year and generation. To me that implies that Game Informer recognizes Nintendo as an early innovator (particularly on the NES and SNES), but more lacking in recent offerings for the GameCube and Wii, especially compared to what&#8217;s available on the Xbox and Playstation.</p>
<h2>My Breakdown</h2>
<p>So, in total, of the 200 games, I&#8217;ve played 89 (44.5%), owned 25 (12.5%), and completed 26 (13%); however, I&#8217;ve only completed 11 of the games I&#8217;ve owned. There are three factors here: first, I&#8217;ve played games to completion on friends&#8217; consoles/computers; second, I played several classic console games via emulation in high school, where I had downloaded the ROMs; third, I have purchased some newer games on the list that I&#8217;ve yet to finish.</p>
<p>Until the Wii, I never owned a console myself (with the exception of the short-lived <a title="Wikipedia Entry for Connectix Virtual Game Station" href="http://en.wikipedia.org/wiki/Connectix_Virtual_Game_Station">Virtual Game Station</a> PlayStation emulator for Mac), so all the other games I owned are listed under PC (which I mean to include DOS, Windows, Mac OS 9, and Mac OS X versions of games). PC is nearly impossible to split into &#8220;generation&#8221;, and since it includes multiple hardware/software combinations, I can&#8217;t easily get good stats for it. In spite of all of this, I feel like I&#8217;ve experienced most of the key points in video game history from the Nintendo revolution on. In that regard I&#8217;m in a historical sweet spot, I suppose. Click to embiggen any of the graphs.</p>
<div id="attachment_728" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.ultranurd.net/wp-content/uploads/2009/11/my_games_by_year.png"><img class="size-thumbnail wp-image-728" title="My Games by Year" src="http://blog.ultranurd.net/wp-content/uploads/2009/11/my_games_by_year-300x204.png" alt="Bar graph histogram of the Top 200 games broken down by my Played, Owned, and Completed lists organized by publication year" width="300" height="204" /></a><p class="wp-caption-text">Bar graph histogram of the Top 200 games broken down by my Played, Owned, and Completed lists organized by publication year</p></div>
<div id="attachment_727" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.ultranurd.net/wp-content/uploads/2009/11/my_games_by_platform.png"><img class="size-thumbnail wp-image-727" title="My Games by Platform" src="http://blog.ultranurd.net/wp-content/uploads/2009/11/my_games_by_platform-300x204.png" alt="Bar graph histogram of the Top 200 games broken down by my Played, Owned, and Completed lists organized by console platform (including PC)" width="300" height="204" /></a><p class="wp-caption-text">Bar graph histogram of the Top 200 games broken down by my Played, Owned, and Completed lists organized by console platform (including PC)</p></div>
<div id="attachment_726" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.ultranurd.net/wp-content/uploads/2009/11/my_games_by_generation.png"><img class="size-thumbnail wp-image-726" title="My Games by Generation" src="http://blog.ultranurd.net/wp-content/uploads/2009/11/my_games_by_generation-300x204.png" alt="Bar graph histogram of the Top 200 games broken down by my Played, Owned, and Completed lists organized by console generation" width="300" height="204" /></a><p class="wp-caption-text">Bar graph histogram of the Top 200 games broken down by my Played, Owned, and Completed lists organized by console generation</p></div>
<p>As you can see, my own gameplay is heavily skewed towards the PC, although until recently that was almost exclusively games that were available on Mac. This makes sense, given that my mother didn&#8217;t allow game consoles in the house, but non-violent and arguably educational games my sister and I could sneak onto the computer.</p>
<p>There&#8217;s also a strong &#8220;bump&#8221; for games in the mid-&#8217;90s; this is when I would have been playing lots of console games at friends&#8217; houses (for sleepovers and such), but it also includes the non-trivial number of SNES and Playstation games I played via emulation on my Mac in high school. (Incidentally, that very <a title="Wikipedia Entry on B&amp;W G3" href="http://en.wikipedia.org/wiki/Power_Macintosh_G3_(Blue_%26_White)">Mac</a> is now functioning as the webserver displaying this blog entry.)</p>
<p>My ownership numbers have unsurprisingly gone up since 2005, given that I now have disposable income and can indulge my video game habits more easily than when I was living at home or in college. Additionally, I have added a Wii (my first console I can call my own!), a gaming-capable phone (first the original iPhone, and now a 3GS), and with the advent of Intel-based Macs, a drive booting into Windows 7 that I use to play various Windows-only games, such as Half Life 2 and Borderlands.</p>
<h2>Conclusion</h2>
<p>Overall, I&#8217;d say this list is skewed towards recent years, which I think is explainable largely by the target audience of the magazine: roughly, my age group (and a little younger) who probably started playing on SNES (4th-gen) consoles and are currently playing Xbox 360. The breakdowns for the Top 20 however makes me feel a little better, in that games that are more influential (or arguably started a genre) are reflected there.</p>
<p>There are definitely a few &#8220;classics&#8221; on here that I&#8217;d like to pick up and play for historical reasons, and a few I&#8217;d go back to for nostalgia, but most of the games I haven&#8217;t played aren&#8217;t in genres I particularly care about. A number are relatively obscure Japanese releases that only the hardest of hardcore video game fans would have seen in the US.</p>
<p>My biggest complaint about the list is a few items that had been out less than a week at the time of publication of this Game Informer issue! (I&#8217;m looking at you Modern Warfare 2&#8230;) I don&#8217;t care how good your opening sales weekend numbers are, or how good the previews are, you don&#8217;t deserve to be on this list yet if you came out in 2009. Give it time!</p>
<p>What do you think? How do you measure up?</p>
<div class='wb_fb_bottom'><div style="float:right;"></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ultranurd.net/2009/11/24/top-200-video-games-of-all-time-according-to-gameinformer/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Satisfy MacPorts Dependencies Locally</title>
		<link>http://blog.ultranurd.net/2009/07/22/satisfy-macports-dependencies-locally/</link>
		<comments>http://blog.ultranurd.net/2009/07/22/satisfy-macports-dependencies-locally/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 03:31:50 +0000</pubDate>
		<dc:creator>Nicolas Ward</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[How-Tos]]></category>
		<category><![CDATA[macports]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[package management]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpmyadmin]]></category>
		<category><![CDATA[source compilation]]></category>

		<guid isPermaLink="false">http://blog.ultranurd.net/?p=679</guid>
		<description><![CDATA[Introduction Like many Unix geeks, I have software installed that I&#8217;ve built manually from source. A good example is my post on compiling django; a number of the relevant dependencies were built in /usr/local/src/ and installed in /usr/local/. I also like using package managers, because if I&#8217;m not doing any customization (and the package is [...]]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p>Like many Unix geeks, I have software installed that I&#8217;ve built manually from source. A good example is my post on <a title="Compiling Django with Twitter Support as a Mac OS X Universal Binary" href="http://blog.ultranurd.net/2009/01/28/compiling-django-with-twitter-support-as-a-mac-os-x-universal-binary/">compiling django</a>; a number of the relevant dependencies were built in <code>/usr/local/src/</code> and installed in <code>/usr/local/</code>. I also like using package managers, because if I&#8217;m not doing any customization (and the package is common and not hard-to-find), I want to just get the latest version and slap it in the right place. The conflict between the two methodologies is when a managed package depends on software that is already installed on your system, either part of the default configuration (OS X ships with a fair bit of Unixy software included, especially if you install the Dev Tools, although not always a &#8220;standard&#8221; or particularly recent version) or custom-built.</p>
<p>I recently dumped <a title="Fink - Home" href="http://www.finkproject.org/">Fink</a> for <a title="The MacPorts Project - Home" href="http://www.macports.org/">MacPorts</a>; while I&#8217;ve used Fink for a long time, since an early version was available for Mac OS 10.2 Jaguar in fact, it&#8217;s just gotten in a messy state maintenance-wise. I&#8217;ve been familiar with apt since using Debian-based systems at the <a title="Swarthmore College Computer Society" href="http://www.sccs.swarthmore.edu/">SCCS</a>, but the mish-mash of binary and source items, the preponderance of out-of-date packages, and the apparent need to install 70 metric boatloads of GNOME just to satisfy a few dependencies was frustrating. Of course, MacPorts has its own weaknesses, as do almost all package managers; in particular, none of them seem to be able to track whether a package was installed explicitly by the user or merely to satisfy a dependency. My opinion is that the latter should get uninstalled when all of its dependents are uninstalled, but no package manager seems to agree with me on that. A rant on that probably merits a separate post.</p>
<p>Below the cut is a rough step-by-step guide to creating a local portindex and creating portfiles for your manual dependencies. Note that most MacPorts users would tell you this is a terrible idea, and you should just install all the port dependencies, but I already put the effort into these custom from-source builds and I just want to use them without duplicates getting dropped all over my hard drive.</p>
<p><span id="more-679"></span></p>
<h2>Create Local Portfile Repository</h2>
<p>These instructions are based on <a title="MacPorts Guide - 4.6 - Local Portfile Repositories" href="http://guide.macports.org/#development.local-repositories">Section 4.6 of the MacPorts Guide</a>.</p>
<ol>
<li>Create a directory that will serve as your portfile repository; I used <code>/usr/local/ports/</code></li>
<li>Add this directory to your MacPorts configuration. For me, that meant editing <code>/opt/local/etc/macports/sources.conf</code> to add the line <code>file:///usr/local/ports/</code> <strong>before</strong> the standard rsync line (for priority)</li>
<li>Update the port index. For me, I needed to run <code>sudo portindex</code> in <code>/usr/local/ports/</code> because of the way I have permissions set.</li>
</ol>
<p>Now, if you use any port command, it will look at your local source first.</p>
<h2>Create a Placeholder Portfile</h2>
<p>For this example, I&#8217;m focusing on installing the port phpmyadmin, but satisfying its runtime dependencies on MySQL and PHP using local builds.</p>
<ol>
<li>Check the dependencies of your target port: <code>port deps phpmyadmin</code>
<pre>phpmyadmin has runtime dependencies on:
	mysql5
	php5</pre>
</li>
<li>For each dependency, look it up using <a title="MacPorts Project - Available Ports" href="http://www.macports.org/ports.php">MacPorts search</a>, and then click on the link to view the checked-in portfile. In general this link will have the form <code>http://trac.macports.org/browser/trunk/dports/CATEGORY/PORT/Portfile</code>, where CATEGORY and PORT are the relevant names of the package you&#8217;re trying to replace
<ul>
<li><a title="mysql5 Portfile" href="http://trac.macports.org/browser/trunk/dports/databases/mysql5/Portfile">mysql5</a></li>
<li><a title="php5 Portfile" href="http://trac.macports.org/browser/trunk/dports/lang/php5/Portfile">php5</a></li>
</ul>
</li>
<li>Now you need to create a local placeholder portfile for each of these packages; in the port repository you created above, you&#8217;ll need to create a subdirectory for the CATEGORY and then open a file named PORT in that directory in your favorite text editor. For example:
<ul>
<li><code>cd /usr/local/ports/</code></li>
<li><code>sudo mkdir -p databases/mysql5</code></li>
<li><code>sudo touch databases/mysql5/Portfile</code></li>
<li><code>sudo emacs databases/mysql5/Portfile</code></li>
</ul>
</li>
<li>We only need a few variables in the portfile to trick MacPorts into accepting our dependency, some of which can be copied from the real portfile. Note that I added a mention of &#8220;placeholder&#8221; to the description, changed the version to match what I built locally (which is a newer version than what&#8217;s available in MacPorts), and added some information about the build. We also need to make MacPorts do a no-op for all port phases. Here&#8217;s what mine looks like:
<pre>PortSystem              1.0
name                    mysql5
version                 5.1.30
homepage                http://www.mysql.com/
categories              databases
platforms               darwin
distname                mysql-${version}

description \
    Placeholder for multithreaded SQL database server

long_description \
    MySQL is an open-source, multi-threaded SQL database \
    with a command syntax very similar to mSQL. \
    \
    This is a placeholder built from source in /usr/local/src/mysql-5.1.30/ \
    on 2009.01.27 using the options:\
    \
    ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex \
    --enable-thread-safe-client --enable-local-infile --disable-shared \
    --with-unix-socket-path=/usr/local/mysql/run/mysql_socket \
    --with-mysqld-user=_mysql --disable-dependency-tracking

fetch {}
checksum {}
extract {}
patch {}
configure {}
build {}
test {}
destroot {}
install {}
activate {}</pre>
</li>
<li>After creating and editing the relevant portfiles(s), you need to regenerate the portindex as above.</li>
<li>If you run port search mysql5, you&#8217;ll see both the real port and your placeholder listed with the short description, like this:
<pre>mysql5 @5.0.83 (databases)
    Multithreaded SQL database server

mysql5 @5.1.30 (databases)
    Placeholder for multithreaded SQL database server</pre>
</li>
<li>If you run port info mysql5, you&#8217;ll get a warning about multiple definitions, but see the long description of your custom placeholder:
<pre>Warning: Found 2 port mysql5 definitions, displaying first one.
mysql5 @5.1.30 (databases)
Variants:    universal

MySQL is an open-source, multi-threaded SQL database with a command syntax very
similar to mSQL. This is a placeholder built from source in
/usr/local/src/mysql-5.1.30/ on 2009.01.27 using the options: ./configure
--prefix=/usr/local/mysql --with-extra-charsets=complex
--enable-thread-safe-client --enable-local-infile --disable-shared
--with-unix-socket-path=/usr/local/mysql/run/mysql_socket
--with-mysqld-user=_mysql --disable-dependency-tracking
Homepage:    http://www.mysql.com/

Platforms:            darwin</pre>
</li>
</ol>
<h2>Undoing the Mess</h2>
<p>Pretty simple. Just uninstall the placeholder you created, remove its file from your local ports, rebuild the portindex, and reinstall the &#8220;real&#8221; package (or just leave it uninstalled, depending on what you&#8217;re trying to do). Alternatively, uninstall all the placeholders you created, and remove the offending line from your sources.conf before continuing.</p>
<h2>Conclusion</h2>
<p>I&#8217;ve only tested this with runtime dependencies so far, not build dependencies. I think the general idea is sound, but as I said, it&#8217;s probably a terrible idea. I&#8217;m curious if you can extend this process to get any other ports to install using system or local dependencies. I&#8217;d also welcome any suggestions for a better way to achieve or similar result. Feel free to just call me misguided and mad, as well!</p>
<div class='wb_fb_bottom'><div style="float:right;"></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ultranurd.net/2009/07/22/satisfy-macports-dependencies-locally/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tweetworks Python API</title>
		<link>http://blog.ultranurd.net/2009/07/06/tweetworks-python-api/</link>
		<comments>http://blog.ultranurd.net/2009/07/06/tweetworks-python-api/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 01:28:48 +0000</pubDate>
		<dc:creator>Nicolas Ward</dc:creator>
				<category><![CDATA[Code Projects]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[project]]></category>
		<category><![CDATA[tweetworks]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[web2.0]]></category>

		<guid isPermaLink="false">http://blog.ultranurd.net/?p=665</guid>
		<description><![CDATA[Tweetworks Python API Version 1.0.0b1 of the tweetworks package for Python 2.6 is now available. This package implements the web service API for Tweetworks, a Web 2.0 service that facilitates threaded conversations on top of Twitter. This is definitely a beta, because while I&#8217;ve tested everything I can think of, I haven&#8217;t tried writing anything [...]]]></description>
			<content:encoded><![CDATA[<h2>Tweetworks Python API</h2>
<p>Version 1.0.0b1 of the tweetworks package for Python 2.6 is now available. This package implements the web service API for <a title="Tweetworks Home" href="http://www.tweetworks.com/">Tweetworks</a>, a Web 2.0 service that facilitates threaded conversations on top of <a title="Twitter Home" href="http://www.twitter.com/">Twitter</a>.</p>
<p>This is definitely a beta, because while I&#8217;ve tested everything I can think of, I haven&#8217;t tried writing anything seriously complicated with it, although I certainly plan to. Comments and questions are welcome here, or find me in the <a title="TweetworksDevelopers on Tweetworks" href="http://www.tweetworks.com/groups/view/TweetworksDevelopers">Tweetworks Developers</a> group or as <a title="UltraNurd on Twitter" href="http://www.twitter.com/UltraNurd">@UltraNurd</a>. I admit that the <a href="http://www.ultranurd.net/code/tweetworks/doc.html">documentation</a> is a little light at the moment.</p>
<p>If you&#8217;re interested in using Tweetworks programmatically from Python, or want to know more about the service, read on.</p>
<p><span id="more-665"></span></p>
<h2>What is Tweetworks?</h2>
<p><a title="Tweetworks Home" href="http://www.tweetworks.com/">Tweetworks</a> is a service and site built on top of Twitter allowing a user to create public and private groups (instead of hashtags) with threaded conversations <a title="About Tweetworks" href="http://www.tweetworks.com/pages/about">and more</a>.</p>
<p>Tweetworks is a Boston-area startup created by <a title="Mike Langford on Twitter" href="http://www.twitter.com/MikeLangford">@MikeLangford</a>. I first heard about it at a <a title="WBUR Homepage" href="http://www.wbur.org/">WBUR</a> <a title="The Converstation Blog" href="http://theconverstation.org/">tweet-up</a> hosted by <a title="Ken George on Twitter" href="http://www.twitter.com/KenGeorge">@KenGeorge</a>. Mike was there, promoting his then-brand-new site, and handing out wearable plastic toucan beaks (part of the Tweetworks logo).</p>
<p>Naturally, I checked it out right away, and ended up becoming Tweetworks user #15! I would not call myself a heavy user of the site, and this is not a review thereof, but it is a useful place to have Twitter-based discussions with threading and without having to rely on the sometimes unreliable Twitter hashtag searches.</p>
<h2>Why did I make this?</h2>
<p>As Tweetworks&#8217; usage increased, my computational linguist side became interested in the threaded data about short-form online conversations that the site was accumulating. I was therefore very excited when they released a public <a title="Tweetworks API Documentation" href="http://www.tweetworks.com/pages/api">API</a>.</p>
<p>It&#8217;s my hope that creating this library will help other developers get started playing with Tweetworks from a service perspective, as well as facilitating my own site mash-up ideas.</p>
<p>Finally, there is also the totally selfish reason that I like coming up with small projects like this one to hone my programming skills, both in terms of design and learning new best practices for interacting with different systems and built-in libraries. In this case, I learned a lot about Python&#8217;s <a title="Python urllib Documentation" href="http://docs.python.org/library/urllib.html">urllib</a>, as well as setuptools.</p>
<h2>Getting the Package</h2>
<p>The easiest way to obtain the tweetworks package is using setuptools to grab it from PyPI. Assuming you have Python, with <a title="Python EasyInstall Installation Instructions" href="http://peak.telecommunity.com/DevCenter/EasyInstall#installation-instructions">setuptools</a> installed, you should just be able to run this command in your shell:</p>
<p><code>easy_install tweetworks</code></p>
<p>For alternative methods, or if you&#8217;re interested in contributing to the development of the API package, check out <a title="Nurd Central - Code Projects - Tweetworks" href="http://www.ultranurd.net/code/tweetworks/">my Tweetworks page</a>.</p>
<p>This software is released under the <a title="The GNU General Public License" href="http://www.gnu.org/copyleft/gpl.html">GNU General Public License</a>.</p>
<div class='wb_fb_bottom'><div style="float:right;"></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ultranurd.net/2009/07/06/tweetworks-python-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone 3GS</title>
		<link>http://blog.ultranurd.net/2009/06/19/iphone-3gs/</link>
		<comments>http://blog.ultranurd.net/2009/06/19/iphone-3gs/#comments</comments>
		<pubDate>Sat, 20 Jun 2009 01:28:58 +0000</pubDate>
		<dc:creator>Nicolas Ward</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[gadgets]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://blog.ultranurd.net/?p=653</guid>
		<description><![CDATA[Yes, I am an Apple fanboy and preordered the iPhone 3GS, which arrived today. To be silly, I recorded a quick video of Spot&#8217;s unboxing from its own point of view. Be forewarned: the sound of packaging being opened might be a little loud, depending on your audio setup. Note on the name: all of [...]]]></description>
			<content:encoded><![CDATA[<p>Yes, I am an Apple fanboy and preordered the iPhone 3GS, which arrived today. To be silly, I recorded a quick video of Spot&#8217;s unboxing from its own point of view. Be forewarned: the sound of packaging being opened might be a little loud, depending on your audio setup.</p>
<p><center><object width="220" height="320"><param name="movie" value="http://www.youtube.com/v/K7RSIsUS8dU&#038;hl=en&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/K7RSIsUS8dU&#038;hl=en&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="220" height="320"></embed></object></center></p>
<p>Note on the name: all of my Mac devices are named after <em>Star Trek</em> animals, and all of my Windows devices are named after <em>Star Wars</em> animals. This is Spot, as in Data&#8217;s cat.</p>
<p>Does anyone know how to correct YouTube&#8217;s display to handle a vertical video orientation more cleanly? I just manually adjusted the &lt;embed&gt; size, but on youtube.com it is still horribly letterboxed. A good size appears to be 220&#215;320, but that messes with the YouTube player&#8217;s control layout, even though it frames nicely.</p>
<div class='wb_fb_bottom'><div style="float:right;"></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ultranurd.net/2009/06/19/iphone-3gs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spending Time</title>
		<link>http://blog.ultranurd.net/2009/06/06/spending-time/</link>
		<comments>http://blog.ultranurd.net/2009/06/06/spending-time/#comments</comments>
		<pubDate>Sat, 06 Jun 2009 05:42:39 +0000</pubDate>
		<dc:creator>Nicolas Ward</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Video Games]]></category>
		<category><![CDATA[addiction]]></category>
		<category><![CDATA[statistics]]></category>
		<category><![CDATA[wolfram alpha]]></category>
		<category><![CDATA[world of warcraft]]></category>

		<guid isPermaLink="false">http://blog.ultranurd.net/?p=634</guid>
		<description><![CDATA[Playing with Wolfram I was inspired by a recent tweet by Doc Searls to play with Wolfram&#124;Alpha and get some stats on how old I am. In particular, if you make a query of the form [&#60;month name&#62; &#60;day of month&#62;, &#60;4-digit year&#62; birthday] Wolfram&#124;Alpha (why is there a pipe in the middle of the [...]]]></description>
			<content:encoded><![CDATA[<h2>Playing with Wolfram</h2>
<p>I was inspired by a <a title="Doc Searls tweets about Wolfram Alpha and birthdates" href="http://twitter.com/dsearls/status/2047642103">recent tweet</a> by <a title="Doc Searls Weblog" href="http://blogs.law.harvard.edu/doc/">Doc</a> <a title="Doc Searls (dsearls) on Twitter" href="http://twitter.com/dsearls">Searls</a> to play with <a title="Wolfram|Alpha" href="http://www.wolframalpha.com/">Wolfram|Alpha</a> and get <a title="My birthdate math on Wolfram|Alpha" href="http://www.wolframalpha.com/input/?i=October+25,+1982+birthday">some stats on how old I am</a>. In particular, if you make a query of the form [&lt;month name&gt; &lt;day of month&gt;, &lt;4-digit year&gt; birthday] Wolfram|Alpha (why is there a pipe in the middle of the name?) will calculate your age in a number of differen units, and how many days until your next birthday. You will not be surprised to learn that I am a total statistics addict, so this got my brain juices flowing.</p>
<p>First, I&#8217;m 9,720 days old. I recently got a good laugh by pointing out that I was &#8220;twenty-six and a half!&#8221; after someone commented on how young I look; I think the &#8220;and a half&#8221; made me sound too much like a 4 year old being ever-so-proud of being closer to 5 than 4 :oD.</p>
<p>Quick aside: someone (I forget who) on a SWIL mailing list suggested the notation of writing search queries demarcated by square brackets, since this is not something that is typically in search strings. This was in response to people saying things like &#8220;You should just google &#8220;search string&#8221;", which leads to nasty quote-nesting problems and also induces some ambiguity as to whether to quote (and therefore group) the specified search keywords. I&#8217;m not going to post the full BNF notation for this, so I hope that [&lt;search term&gt; ...] is a clear enough explanation of the format.</p>
<p>Second, I realized that I&#8217;m pretty close to 10,000 days old. While I usually am not a big fan of celebrating arbitrary anniversaries, particularly those that favor Base 10 (that&#8217;s for all you decimalists out there), I missed 2<sup>13</sup> days a while ago and I have a ways to go until 2<sup>14</sup> :oD. Another quick Wolfram|Alpha search ([today + 280 days]). I guess this means I&#8217;ll celebrate my 10,000th day of existence on March 12th, 2010. A quick glance at Wikipedia doesn&#8217;t indicate anything particularly auspicious about that date, but hey.</p>
<p>Third&#8230;</p>
<h2>I don&#8217;t have a problem</h2>
<p>I am of course referring to <a title="World of Warcraft" href="http://www.worldofwarcraft.com">World of Warcraft</a>. Seeing my age in days reminded me of the /played command in WoW, which gives you how many days you&#8217;ve played a particular character. I have only one primary character, which I had a vague recollection of being at over 100 days; however, I have two other level 80 characters (as of Wrath of the Lich King, the level cap), plus a number of mid-level alts as well as some very low-level alts rolled on various other servers either as experiments</p>
<p>I didn&#8217;t feel like mathing this all myself, so I grabbed the addon <a title="AllPlayed addon hosted by Curse" href="http://wow.curse.com/downloads/wow-addons/details/all-played-laotseu.aspx">AllPlayed</a> to do the hard work for me; all I had to do was login on each of my characters so that it could accumulate the data. This addon also has some other nice features, including allowing me to see which of my characters are fully rested (giving them the optimal XP bonus while leveling). I enjoy all of the character classes, and while sometimes I&#8217;m in the mood for one class or another, I try to make leveling as fast as possible given my play time (which I&#8217;m sure is more than most casual players, but less than a lot of people I know and play with, primarily because I&#8217;m limited to a few hours in the evening, possibly with longer sessions on the weekends).</p>
<p>The cold, hard total is 179 days, 4 hours, the vast majority of which (61.2%) is on my main Kjallstrom (109 days, 15 hours). That means I&#8217;ve spent about 1.84% of my <strong>entire life</strong> playing World of Warcraft. I&#8217;m pretty sure I could have done some amazing things with that time (which probably does not include writing the great American novel), but on the other hand, it&#8217;s entirely after work entertainment which most people would spend <a title="Television &amp; Health Statistics - California State Univerity, Northridge" href="http://www.csun.edu/science/health/docs/tv&amp;health.html">watching TV</a> (about 13.5% on average over a 65 year lifetime). I would argue that it&#8217;s a bit different, given that it&#8217;s interactive and social, but I know a lot of people disparage online socialization as &#8220;not as good as the real thing&#8221;. I contend that I&#8217;ve greatly expanded the diversity of my friends on a number of axes thanks to long-term involvement in the guild community.</p>
<p>I&#8217;ve been playing WoW since October 2005 (I don&#8217;t have an exact date), and I&#8217;ve been playing on Kirin Tor (and a member of Mellonea) since November 2005. I did play non-trivially on other servers with real-life friends well into 2006, and briefly convinced them to join me on Kirin Tor, although they eventually gave up on the game. If we isolate the percentage to just the time that I&#8217;ve owned WoW, the past 1300 days or so, that gives about 13.7%, which is on par with the typical American&#8217;s TV usage.</p>
<p>Even more absurd details below the cut.</p>
<p><span id="more-634"></span></p>
<h2>I can quit any time I want</h2>
<p>Here&#8217;s the full data table of my characters, and how long I&#8217;ve played each of them; where available, I&#8217;ve added a link to their <a title="World of Warcraft Armory" href="http://www.wowarmory.com/">Armory</a> profile. You&#8217;ll note that I play almost exclusively on the roleplaying server Kirin Tor; this is where I am guildmaster of <a title="Mellonea - A World of Warcraft Roleplaying Guild on Kirin Tor" href="http://www.mellonea.org">Mellonea</a>, and where I also spend most of my WoW-based socialization time. The table is in descending time-played order.<br />
 </p>
<table style="text-align: left;" border="0">
<tbody>
<tr>
<th>Character Name</th>
<th>Race and Class &#8211; Level</th>
<th>Total Time Played</th>
<th>Server</th>
</tr>
<tr>
<td><a href="http://www.wowarmory.com/character-sheet.xml?r=Kirin+Tor&amp;n=Kjallstrom">Kjallstrom</a></td>
<td>Dwarf Rogue &#8211; 80</td>
<td>109d 18h 57m</td>
<td>Kirin Tor</td>
</tr>
<tr>
<td><a href="http://www.wowarmory.com/character-sheet.xml?r=Kirin+Tor&amp;n=Maruval">Maruval</a></td>
<td>Night Elf Warrior &#8211; 80</td>
<td>17d 12h 21m</td>
<td>Kirin Tor</td>
</tr>
<tr>
<td><a href="http://www.wowarmory.com/character-sheet.xml?r=Kirin+Tor&amp;n=Eleonara">Eleonara</a></td>
<td>Dwarf Priest &#8211; 80</td>
<td>19d 6h 53m</td>
<td>Kirin Tor</td>
</tr>
<tr>
<td><a href="http://www.wowarmory.com/character-sheet.xml?r=Kirin+Tor&amp;n=Nicklaus">Nicklaus</a></td>
<td>Human Warlock &#8211; 50</td>
<td>6d 9h 54m</td>
<td>Kirin Tor</td>
</tr>
<tr>
<td><a href="http://www.wowarmory.com/character-sheet.xml?r=Kirin+Tor&amp;n=Ataarah">Ataarah</a></td>
<td>Draenei Shaman &#8211; 44</td>
<td>3d 8h 32m</td>
<td>Kirin Tor</td>
</tr>
<tr>
<td>Hodei</td>
<td>Human Priest &#8211; 30</td>
<td>2d 19h 5m</td>
<td>Ursin</td>
</tr>
<tr>
<td><a href="http://www.wowarmory.com/character-sheet.xml?r=Kirin+Tor&amp;n=Enabrona">Enabrona</a></td>
<td>Night Elf Druid &#8211; 28</td>
<td>2d 7h 56m</td>
<td>Kirin Tor</td>
</tr>
<tr>
<td><a href="http://www.wowarmory.com/character-sheet.xml?r=Kirin+Tor&amp;n=Macomb">Macomb</a></td>
<td>Human Paladin &#8211; 28</td>
<td>2d 4h 40m</td>
<td>Kirin Tor</td>
</tr>
<tr>
<td><a href="http://www.wowarmory.com/character-sheet.xml?r=Kirin+Tor&amp;n=Qamero">Qamero</a></td>
<td>Human Death Knight &#8211; 71</td>
<td>2d 2h 3m</td>
<td>Kirin Tor</td>
</tr>
<tr>
<td>Thrun</td>
<td>Tauren Hunter &#8211; 22</td>
<td>1d 19h 10m</td>
<td>Bloodscalp</td>
</tr>
<tr>
<td>Casandrea</td>
<td>Blood Elf Mage &#8211; 18</td>
<td>16h 34m</td>
<td>Kirin Tor</td>
</tr>
<tr>
<td>Mellobanka</td>
<td>Dwarf Paladin &#8211; 10</td>
<td>12h 50m</td>
<td>Kirin Tor</td>
</tr>
<tr>
<td>Feaglin</td>
<td>Gnome Warrior &#8211; 10</td>
<td>7h 59m</td>
<td>Kael&#8217;thas</td>
</tr>
<tr>
<td>Sengu</td>
<td>Orc Shaman &#8211; 11</td>
<td>7h 53m</td>
<td>Sen&#8217;jin</td>
</tr>
<tr>
<td>Krios</td>
<td>Night Elf Druid &#8211; 10</td>
<td>7h 2m</td>
<td>Kael&#8217;thas</td>
</tr>
<tr>
<td>Orsonis</td>
<td>Night Elf Druid &#8211; 10</td>
<td>6h 59m</td>
<td>Sentinels</td>
</tr>
<tr>
<td>Plexon</td>
<td>Gnome Mage &#8211; 6</td>
<td>4h 55m</td>
<td>Proudmoore</td>
</tr>
<tr>
<td>Enabrunos</td>
<td>Blood Elf Paladin &#8211; 8</td>
<td>2h 27m</td>
<td>Sentinels</td>
</tr>
</tbody>
</table>
<p> <br />
A few things to note: the old abandoned characters on other servers took much longer to get to their level, for a number of factors: Blizzard has significantly sped up leveling; I&#8217;m a more experienced player (knowing where stuff is); and on PvP servers there&#8217;s more death while soloing. Another odd thing: Thrun the Hunter was the very first character I rolled (because I had heard hunters were easy, and a good way to learn the game, and I liked that Tauren felt more alien than other classic fantasy races), but I don&#8217;t have any hunters I&#8217;ve leveled with any attention after switching to Alliance on Kirin Tor. Also, the character Mellobanka is a guild bank mule with bags, so I only log into to buy and sell items for the guild.</p>
<p>As you can see, the play time falls off pretty quickly, down to &#8220;just trying the class&#8221; and &#8220;just checking on people on that server&#8221;. Another thing to keep in mind is that Death Knights, as a hero class, start at level 55, and are also insanely easy to level. I have deleted a few characters, so I don&#8217;t have data on them, but all were below level 20. The nubs on other servers basically don&#8217;t affect the total, compared to my mains who raid at the level cap. Also, these values are only valid at the time of this post; I&#8217;m still playing, after all :o).</p>
<h2>Conclusion</h2>
<p>I would say that I do play too much WoW, but I find it to be a fun source of entertainment, a social activity, and a good way to unwind after work. I probably do read less, although I always have a book that I read before bed; I certainly watch less TV (although I sometimes have shows or movies I don&#8217;t care about that much on in the background while playing, particularly if I&#8217;m soloing). I have forgone real-world social events to raid with my WoW friends; I don&#8217;t know what people think about that generally. I would guess the most significant problem is that between work, WoW, and assorted other computer uses, I spend nearly every waking hour in front of a screen. No doubt this is why I started going nearsighted near the end of college!</p>
<p>What is your dominant non-work/non-school and non-sleep activity? Feel free to judge me now :oP.</p>
<div class='wb_fb_bottom'><div style="float:right;"></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ultranurd.net/2009/06/06/spending-time/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Nostromo Keybindings for WoW</title>
		<link>http://blog.ultranurd.net/2009/04/23/nostromo-keybindings-for-wow/</link>
		<comments>http://blog.ultranurd.net/2009/04/23/nostromo-keybindings-for-wow/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 02:24:46 +0000</pubDate>
		<dc:creator>Nicolas Ward</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[How-Tos]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[computer peripheral]]></category>
		<category><![CDATA[nostromo]]></category>
		<category><![CDATA[video game]]></category>
		<category><![CDATA[world of warcraft]]></category>

		<guid isPermaLink="false">http://blog.ultranurd.net/?p=608</guid>
		<description><![CDATA[Introduction As you may have gathered, I have a&#8230; healthy&#8230; relationship with everyone&#8217;s favorite MMO, World of Warcraft. I forget who originally planted the idea in my head (there&#8217;s a good chance it was Lilboo, formerly of the Daring Blades on Kirin Tor), but I decided that I wanted a dedicated game controller that was [...]]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p>As you may have gathered, I have a&#8230; healthy&#8230; relationship with everyone&#8217;s favorite MMO, <a title="World of Warcraft Homepage" href="http://www.worldofwarcraft.com">World of Warcraft</a>. I forget who originally planted the idea in my head (there&#8217;s a good chance it was Lilboo, formerly of the Daring Blades on Kirin Tor), but I decided that I wanted a dedicated game controller that was more than just the keyboard; there&#8217;s just too much going on in WoW for an FPS-like control layout, in my opinion. I settled on a Nostromo, and after a few weeks of adjusting, and very few changes to my bindings, I have gotten very used to what may be a very unusual control style.</p>
<p>Verbose explanation of how I use the device below the cut.</p>
<p><span id="more-608"></span></p>
<h2>Nostromo</h2>
<p>First, the product itself. I have the <a title="Belkin : Nostromo SpeedPad n52" href="http://catalog.belkin.com/IWCatProductPage.process?Product_Id=164714">Nostromo n52</a>, which gives you a D-pad, 14 programmable keys, a scrollwheel, and two thumb buttons. I&#8217;ve only seriously tried configuring it for World of Warcraft (and also for <a title="The Lord of the Rings Online Home" href="http://www.lotro.com">Lord of the Rings Online</a>, but I intentionally set that up to be almost identical to WoW).</p>
<p>Last year <a title="Belkin : Home" href="http://www.belkin.com/">Belkin</a> released the <a title="Belkin n52te" href="http://www.n52te.com/">Nostromo n52te</a> (Flash website), which as far as I can tell is the same product, costs twice as much, and has silly blue lights. Maybe they improved the &#8220;touch&#8221; of the keys, but the vanilla n52 works fine after hundreds of days of playtime (although the key labels have all worn off).</p>
<p>The Nostromo works with both PC and Mac, and the Mac software is one of the better ones for third-party peripherals; it&#8217;s implemented as a System Preferences pane, which is the &#8220;right&#8221; way of doing this sort of thing on a Mac (as opposed to a standalone application). Here&#8217;s what configuring it looks like on a Mac:</p>
<p> </p>
<div id="attachment_609" class="wp-caption aligncenter" style="width: 459px"><a href="http://blog.ultranurd.net/wp-content/uploads/2009/04/picture-23.png"><img class="size-full wp-image-609     " title="Nostromo Array (Mac)" src="http://blog.ultranurd.net/wp-content/uploads/2009/04/picture-23.png" alt="Configuring the Nostromo n52 on Mac OS X" width="449" height="374" /></a><p class="wp-caption-text">Configuring the Nostromo n52 on Mac OS X</p></div>
<p>Pretty straight-forward; you select the key on the Nostromo you want to configure, and then you can select a wide variety of actions (and add modifiers). I haven&#8217;t ever used any of the &#8220;turbo&#8221; functionality, I treat them all as normal keys, with the exception of the Shift buttons.</p>
<p>Here&#8217;s how configuring the Nostromo looks on Windows (and how it looked on the Mac before they wrote new drivers, as opposed to just porting the Windows ones):</p>
<p> </p>
<div id="attachment_614" class="wp-caption aligncenter" style="width: 414px"><a href="http://blog.ultranurd.net/wp-content/uploads/2009/04/picture-24.png"><img class="size-full wp-image-614 " title="Nostromo Array (Windows)" src="http://blog.ultranurd.net/wp-content/uploads/2009/04/picture-24.png" alt="Configuring the n52" width="404" height="347" /></a><p class="wp-caption-text">Configuring the Nostromo n52 on Windows 7</p></div>
<p>The same functionality, but the &#8220;cool looking&#8221; but non-standard UI I find a bit confusing. Both the Mac and Windows versions support some of the other Nostromo series products. The Windows version is a bit better at saving profiles for export; as far as I know, the current Mac version can&#8217;t do this (unless you want to dig around in OS X plist files).</p>
<p>Shifting is one of the really cool capabilities of the Nostromo: while there are only a few physical buttons, if you assign 3 of them to Red Shift, Blue Shift, and Green Shift, you effectively quadruple your available buttons (I definitely don&#8217;t use that many), as long as you&#8217;re willing to press multiple keys at once. This is usually called &#8220;chording&#8221;, and at this point it&#8217;s very well embedded in my muscle memory, as you&#8217;ll see below. This is what really gives you &#8220;speed at your fingertips&#8221; or whatever they put in the marketing literature &#8211; with only a few movements of your left hand, you basically get as many keybindings as a standard keyboard.</p>
<h2>n52 Keybindings</h2>
<p>As you can see below, I use the D-pad for strafe-based movement, since I use mouse turning. The orange button near the D-pad is hard to use with the D-pad, so I just use it as an auto-run toggle. The six buttons in the upper right are associated with the active action bar; either 1-6 or 7-12, depending on whether or not I&#8217;m red shifted. The mousewheel is used for applying target markers (skull, X, etc.). Most of the keys on the left periphery are lower priority things, since they&#8217;re hit by my pinky or by an extension of one of my other fingers.</p>
<p>The main functionality is with that block of 6 keys. Between the red shift on my thumb (button 15, below the D-pad), and shift (the literal keyboard key) on Button 11, in the lower left for my pinky, I can select any of my character&#8217;s actions with a three-fingered cord. Since I organize my action buttons in-game carefully (see the next section), most of my fast in-combat actions can be achieved by mashing one key with the relevant finger, possibly while pressing my thumb. I can press my thumb on the red shift key while using the D-pad to move, although in highly mobile fights I&#8217;m likely to use a combination of autorun and mouse movement.</p>
<p>Also, these bindings should be perfectly valid for a newer Nostromo n52te.</p>
<table border="0">
<tbody>
<tr>
<th>Key</th>
<th>No Shift</th>
<th><span style="color: #ff0000;">Red Shift</span></th>
<th><span style="color: #00ff00;">Green Shift</span></th>
<th><span style="color: #0000ff;">Blue Shift</span></th>
</tr>
<tr>
<th>Button 1</th>
<td><span style="color: #0000ff;">Blue Shift</span></td>
<td><span style="color: #0000ff;">Blue Shift</span></td>
<td><span style="color: #0000ff;">Blue Shift</span></td>
<td><span style="color: #0000ff;">Blue Shift</span></td>
</tr>
<tr>
<th>Button 2</th>
<td>Key (space)</td>
<td>Key (none)</td>
<td>Key (none)</td>
<td>Key (x)</td>
</tr>
<tr>
<th>Button 3</th>
<td>Key (5)</td>
<td>Key (-)</td>
<td>Key (F5)</td>
<td>Key (ctrl+5)</td>
</tr>
<tr>
<th>Button 4</th>
<td>Key (3)</td>
<td>Key (9)</td>
<td>Key (F3)</td>
<td>Key (ctrl+3)</td>
</tr>
<tr>
<th>Button 5</th>
<td>Key (1)</td>
<td>Key (7)</td>
<td>Key (F1)</td>
<td>Key (ctrl+1)</td>
</tr>
<tr>
<th>Button 6</th>
<td><span style="color: #00ff00;">Green Shift</span></td>
<td><span style="color: #00ff00;">Green Shift</span></td>
<td><span style="color: #00ff00;">Green Shift</span></td>
<td><span style="color: #00ff00;">Green Shift</span></td>
</tr>
<tr>
<th>Button 7</th>
<td>Key (none)</td>
<td>Key (none)</td>
<td>Key (none)</td>
<td>Key (none)</td>
</tr>
<tr>
<th>Button 8</th>
<td>Key (6)</td>
<td>Key (=)</td>
<td>Key (F6)</td>
<td>Key (ctrl+6)</td>
</tr>
<tr>
<th>Button 9</th>
<td>Key (4)</td>
<td>Key (0)</td>
<td>Key (F4)</td>
<td>Key (ctrl+4)</td>
</tr>
<tr>
<th>Button 10</th>
<td>Key (2)</td>
<td>Key (8)</td>
<td>Key (F2)</td>
<td>Key (ctrl+2)</td>
</tr>
<tr>
<th>Button 11</th>
<td>Press shift</td>
<td>Key (none)</td>
<td>Key (none)</td>
<td>Key (none)</td>
</tr>
<tr>
<th>Button 12</th>
<td>Key (c)</td>
<td>Key (none)</td>
<td>Key (none)</td>
<td>Key (none)</td>
</tr>
<tr>
<th>Button 13</th>
<td>Key (m)</td>
<td>Key (none)</td>
<td>Key (none)</td>
<td>Key (none)</td>
</tr>
<tr>
<th>Button 14</th>
<td>Key (shift+b)</td>
<td>Key (none)</td>
<td>Key (none)</td>
<td>Key (none)</td>
</tr>
<tr>
<th>Button 15</th>
<td><span style="color: #ff0000;">Red Shift</span></td>
<td><span style="color: #ff0000;">Red Shift</span></td>
<td><span style="color: #ff0000;">Red Shift</span></td>
<td><span style="color: #ff0000;">Red Shift</span></td>
</tr>
<tr>
<th>Wheel Up</th>
<td>Key (opt+k)</td>
<td>Key (none)</td>
<td>Key (none)</td>
<td>Key (none)</td>
</tr>
<tr>
<th>Wheel Down</th>
<td>Key (none)</td>
<td>Key (none)</td>
<td>Key (none)</td>
<td>Key (none)</td>
</tr>
<tr>
<th>Wheel Button</th>
<td>Key (none)</td>
<td>Key (none)</td>
<td>Key (none)</td>
<td>Key (none)</td>
</tr>
<tr>
<th>Circle Button</th>
<td>Key (num clear)</td>
<td>Key (none)</td>
<td>Key (none)</td>
<td>Key (none)</td>
</tr>
<tr>
<th>DPad Up</th>
<td>Key (w)</td>
<td>Key (none)</td>
<td>Key (none)</td>
<td>Key (none)</td>
</tr>
<tr>
<th>DPad Right</th>
<td>Key (e)</td>
<td>Key (none)</td>
<td>Key (none)</td>
<td>Key (d)</td>
</tr>
<tr>
<th>DPad Down</th>
<td>Key (s)</td>
<td>Key (none)</td>
<td>Key (none)</td>
<td>Key (none)</td>
</tr>
<tr>
<th>DPad Left</th>
<td>Key (q)</td>
<td>Key (none)</td>
<td>Key (none)</td>
<td>Key (a)</td>
</tr>
<tr>
<th>DPad Up Right</th>
<td>Key (none)</td>
<td>Key (none)</td>
<td>Key (none)</td>
<td>Key (none)</td>
</tr>
<tr>
<th>DPad Down Right</th>
<td>Key (none)</td>
<td>Key (none)</td>
<td>Key (none)</td>
<td>Key (none)</td>
</tr>
<tr>
<th>DPad Down Left</th>
<td>Key (none)</td>
<td>Key (none)</td>
<td>Key (none)</td>
<td>Key (none)</td>
</tr>
<tr>
<th>DPad Up Left</th>
<td>Key (none)</td>
<td>Key (none)</td>
<td>Key (none)</td>
<td>Key (none)</td>
</tr>
</tbody>
</table>
<p>The other keybindings are pretty boring: they open the character pane, my current favorite map mod, or my bag management mod. Green shift and Blue Shift are largely unused, although they focus on modifying the core 6 buttons; Green lets me target party members (function keys), including myself (I mostly rely on Grid and mouseover macros these days); Blue lets me activate pet/vehicle abilities (control + number keys).</p>
<p>Blue shift also modifies some other actions, such as making the D-pad turn instead of strafe, or making my flying mount go down instead of up (note that x and space are assigned to the same button, just shifted). There&#8217;s a lot of room for expansion, and the configuration is admittedly a bit haphazard&#8230; but I&#8217;ve been using it for over 2 years, so I&#8217;m very used to it. It&#8217;s all in muscle memory, and I can react very quickly to most in-game events without moving my hands at all (I use a <a title="Logitech Cordless Trackman Optical Product Information" href="http://www.logitech.com/index.cfm/mice_pointers/trackballs/devices/189&amp;cl=us,en">Logitech Cordless TrackMan® Optical</a> in my right hand).</p>
<h2>WoW Keybindings</h2>
<p>If it wasn&#8217;t obvious to most WoW players based on the bindings listed above, I keep the in-game keybindings set almost exclusively to the defaults (with the exception of a few additions, or tweaks to use particular mods in place of some default UI components). I also use only the default action bar; the shift-# bindings above select one of the six default action bar &#8220;pages&#8221;, and then 1 through = on the number row activate an action on the current bar. Thus my Nostromo configuration depends heavily on my bar configuration, since I memorize it</p>
<p>Without going into detail at the level of specific class abilities, here&#8217;s how I break down the six action bars:</p>
<ol>
<li>Primary abilities: attacks, anything with a short cooldown; in the case of my healers, geared towards soloing.</li>
<li>Panic buttons: potions, trinkets, class abilities like Evasion and Desperate Prayer</li>
<li>Secondary abilities: longer cooldown combat abilities; in the case of my healers, mouseover macros for their various group healing and cleansing spells</li>
<li>Crafting: maybe silly to have a whole bar dedicated, but I don&#8217;t otherwise need the space</li>
<li>Transportation: mounts, pets, and usable quest items</li>
<li>Buffs: poison hotkeys on my rogue, blessings on my Paladin, etc.</li>
</ol>
<p>I&#8217;m admittedly not 100% consistent in this, but that&#8217;s the general idea. Because of where 1 and 2 are bound on the Nostromo, the most important bars are under my pointer finger; similarly, within each bar (and related to the core 6 keys above when combined with Red Shift), the most important abilities are in slots 1, 2, 7, and 8, because these are again under my pointer finger.</p>
<p>Maybe a full description of my UI configuration, including button bar breakdowns by class, can come in a future post; the main takeaway from all of this is that I try very hard to keep things similar across characters, so my muscle memory doesn&#8217;t have to relearn much as I switch between the different roles on my various alts. Feel free to suggest any tweaks to this!</p>
<div class='wb_fb_bottom'><div style="float:right;"></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ultranurd.net/2009/04/23/nostromo-keybindings-for-wow/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
