Latest articles

All OSes Suck

Windows: Proprietary. Can't decide on a UI and tries to force everyone onboard though every crazy short-lived UI blunder. Plus it still doesn't always "just work".

Linux: Offers five thousand choices for everything, none of them well-polished.

OSX: Expensive, straight-jacketed, proprietary and often overlooked by third parties.

Ubuntu Unity: Goofy OSX clone with even fewer options. Really just Linux.

BSD: Expert-only Linux-ish with minimal third party support.

Plan 9: Minimal uptake, and therefore irrelevant.

BeOS: Effectively dead and irrelevant.

Amiga: Effectively dead and irrelevant.

OS/2: Long since dead and irrelevant.

Solaris/QNX: Newly dead and still irrelevant.

NeXTSTEP/IRIX: Also dead and irrelevant.

Haiku/Minix/Hurd: Alive and irrelevant.

Chrome OS: A web browser as an OS. Are you fucking kidding me?

iOS: It's freaking iOS for godssakes.

Android: It's freaking iOS with a system-level VM for godssakes.

CyanogenMod: Android sans straight-jacketing.

Blackberry 10: Proprietary straight-jacketing and minimal third part support.

Windows Phone 8: Proprietary straight-jacketing, minimal third part support and butt-ugly.

Windows Phone Pre-8: Effectively dead and irrelevant.

WebOS: Undead and irrelevant.

PalmOS: I love it. But it's outdated, abandoned, and therefore useless. Graffiti v2 sucked - thanks Xerox.

MeeGo: Replaced by Taizen.

Bada: Replaced by Taizen.

Taizen: Nearly at 3.0 and you still can't obtain it. Encourages HTML5 as an applications platform, presumably as some sort of sick joke.

Symbian: A flip-phone OS isn't exactly much of an OS. Did anybody ever know there was a smartphone version? No matter, it's dead now.

All that said, I still use both Windows and Linux, I intend to get an Android/CyanogenMod device again, and there's some others I'm keeping an eye on. Obviously most OSes have their good points, too. And I'll use what I need to, when I need to, if I need to, and bitch as much as I damn well choose to. Still, that doesn't mean OSes don't all suck anyway.

Read more

Fanning the Code Convention Flames: Parens After Keywords

Much like the famed spaces vs tabs, there are differing preferences about whether to put a space between a keyword and any following parenthesis:

if(condition)... //vs if (condition)...

I submit that including the space is a stupid convention unless you also handle functions the same way:

void foo (int a) {} foo (4);

Which, of course, is rarely ever done, even in codebases that always put spaces after keywords like if.

Read more

Mozilla Doesn't Know What They're Doing

I could go on forever with examples, but I'm going to limit myself to just one for now: How freaking hard is it to unfuck "Save Image As"? Mozilla's been screwing that up in various ways for about five years. Here's a fun instance of Mozilla's complete uselessness.

And of course, in my case the broken "Save Image As" is yet another new previously undiscovered incarnation:

On FF22:

Error: NS_ERROR_INVALID_POINTER: Component returned failure code: 0x80004003 (NS_ERROR_INVALID_POINTER) [nsIIOService.newFileURI] Source File: chrome://global/content/contentAreaUtils.js Line: 771

Read more

Review: El Shaddai: Ascension of the Metatron

The gameplay of El Shaddai is that of a watered-down God of War or Devil May Cry...and God of War isn't exactly an example of deep gameplay anyway. It isn't terrible, or even badly-controlled, but it is simplistic and derivative.

The game also leaves me wondering: Why is there a button dedicated to changing the weapon's color? Apparently it's something about "purifying" the weapon, but I don't see what difference that makes. Does that make it work better? I can't tell.

Due to the basis of the story, there are constantly repeated bible references and themes. These can make the game feel dangerously close to being a production of a religiously-affiliated content house, even though it actually isn't. This can be fairly irritating, particularly during the first (roughly) half-hour which consists primarily of unskippable cutscenes.

However...El Shaddai is worth playing simply for the environments alone.

I'm not a particularly graphics-driven gamer these days. I'll pick an ugly or low-tech title with solid gameplay over a shallow cinematic polygon-pushing powerhouse nearly every time. But the art direction in El Shaddai is incredible. These are the most original, inspired abstract environments I've ever seen - let alone with interactive motion.

Various other games certainly have more raw horsepower under their hoods. But due to the pure artistry here, and very creative use of pixel shaders, I don't hesitate at saying this is the most beautiful looking game out there.

Though notably imperfect, El Shaddai isn't a videogame with graphics and story: It's an interactive painting you can battle through.

Read more

Do Not Use git status --ignored

Sometimes it's useful to find all files in a git working copy that aren't being tracked in the repository. There's an --ignored switch for git status that's supposed to make it show the ignored files. Combined with --untracked-files, that should do the trick nicely. But the problem: The --ignored switch doesn't fucking work. Seriously.

To be more accurate, it only shows some of the ignored files (despite no mention of this fact in the man page). It's easy fooled: Just try adding someUntrackedDirWithUntrackedFiles/* to your .gitignore, and see if you can get git status to mention either the directory or the files inside it. Note that none of the settings for --untracked-files= fix this.

Wanna know the best part? There is no git command known to reliably do what --ignored claims to do. There are various alleged solutions floating around, but unfortunately they don't work. The author in that last link offers a suggestion, but still admits to a lack of confidence in it. Great.

My suggestion is what I recommend for git usage in general: Minimize your reliance on any features beyond the basics. For such an amazingly useful tool (I highly recommend switching to git if you're still on subversion - or worse, CVS or VSS), it's amazing how shitty git gets the deeper you dive into it.

In this case, I suggest using git ls-files to generate a list of the files that are under version control, stick them into a hash set (for quick lookup), then iterate over all the files in your working copy, outputting only the files that aren't in the hash set.

Here's how to do it in D:

/++ Show all unversioned (both untracked and ignored) files and directories in the current git working copy. Much like "git status --ignored --untracked-files=all" except this actually works (although you must run it from the root of the working copy). Further explanation: Tested on DMD v2.063.2 Licensed under the WTFPL - Do What the Fuck You Want to Public License: +/ import std.algorithm; import std.array; import std.file; import std.path; import std.process; import std.stdio; import std.string; string run(string cmd) { auto result = executeShell(cmd); if(result.status != 0) throw new Exception("Command failed: " ~ cmd); return result.output; } void main() { if(!exists(".git")) throw new Exception("Must run from the root of the git working copy"); bool[string] versionedFiles; auto gitOutput = run("git ls-files"); foreach(filename; gitOutput.splitter("\n")) { versionedFiles[filename] = true; // Also include the file's parent directories, since git likes to // pretend there's no such thing as directories: while(true) { auto parentDir = dirName(filename); if(parentDir == filename) break; // Done versionedFiles[parentDir] = true; filename = parentDir; } } foreach(DirEntry entry; dirEntries(".", SpanMode.breadth)) { // The output of "git ls-files" doesn't include the "./" prefix // (like DirEntry does) and uses forward slashes on all platforms. auto filename ="\\", "/").chompPrefix("./"); if(filename !in versionedFiles) { if(entry.isDir) writeln(filename, "/"); else writeln(filename); } } }

Read more

Review: The Walking Dead

It's been awhile since I've done one of my videogame "reviews" (for lack of a better word). Clearly I'm past due. So here's my review of Telltale Game's "The Walking Dead":


Didn't I already play this twenty years ago?

Read more