A blog for every occasion
Two entertaining cultural phenomena which arrived in my RSS reader one after the other:
That is all...
...no wait, stop the press! Linked to from Laser Portraits is the fantastic Sexy People.
Tech Luminaries podcast. Good idea for an interview series from the people behind Ajaxian, and a great first choice of interviewee in Brendan Eich. Hope the have more interesting people of that caliber lined-up.
The Majesty of Colours. Experimental Cthulhu mythos flash game in an 8-bit style. In a similar vein to Daniel Benmergul's "I wish I were the Moon" and "Storyteller" game/vignettes. Try multiple playthroughs to see the different endings.
Ken Perlin - Making Noise. Annotated slideshow on the Perlin noise function. "Think of it as seasoning". Created as a reaction to working on the intentionally mechanistic-looking flat textures of Tron.
RoboCop (2010). Was just looking up RoboCop on IMDB after watching the awesome rap and found this! Darren Aronofsky set to do a remake? omgwtfbbq??!
Alex Payne | How I Use TextMate. A nice selection of three Textmate add-ons to try. Particularly like the look of "Ack in Project", ack is great and Textmate's Find in Project, um... isn't.
Play Auditorium. Interesting flash puzzle game. Bend light into a path to fill up a set of sound meters. Light beam is quite loose and fluid so it's sometimes quite difficult to see what is and isn't going to work.
Sierra Online's Interpol. "Find the hidden objects" casual gaming phenomenon coming to XBLA. I love these things, hope they're still playable on a big fuzzy standard def TV.
“@gwarek Hash thing is an impromptu convention for tagging stuff to make it easier to search for at a later date (see: http://hashtags.org/)”— @twitter
“@1stvamp: Not much, just backed out muttering some cover story when he saw me... had something similar happen in a previous house actually.”— @twitter
“Today's good news: Fallout 3 is as good as hoped. Today's bad news: Caught a burglar in the act of climbing in through the bathroom window.”— @twitter
When Zeppelins Ruled the Earth. A five-minute lightning talk on airships and their disastrous history. Nobody does infectious enthusiasm quite like Simon Willison.
A Crow In Hell. Gothically styled silhouetted obstacle avoidance flash game.
“Trying to decide whether to get Far Cry or Fable tomorrow. Thought it was a foregone conclusion until the reviews started coming in.”— @twitter
Idle Thumbs. The apathetic owners of this great but under-used site for video game news and criticism have re-invented themselves as a very funny and well produced podcast. Contributor pedigree includes Gamasutra & Shacknews.
MacRuby. A new competitor for the RubyCocoa bridge, directly from Apple. Tighter integration leading to better performance, and named arguments allowing for more natural translations of method names. Looks genuinely useful.
Elastic tabstops - a better way to indent and align code. Genius. I'm glad someone is actually thinking about how to fix this stuff rather than just endlessly debating tabs vs. spaces. Hope the developers of all the major text editors take a serious look at this.
“@gwarek Joel Spolsky on the shoe lotion phenomenon: http://tinyurl.com/4leb7c”— @twitter
Joshua Shachter on URL shorteners. Apparently I'm not the only one who hates TinyURL and pals. The founder of del.icio.us expresses his distaste for them over at Hacker News.
The eyeballing game. Test your visual measuring abilities by guesstimating the correct positions of points.
How to Write a Spelling Corrector. A relatively simple implementation in Python by way of explanation. By Peter Norvig, Director of Research at Google and author of popular books on AI programming.
The Night Sky. Really nicely paced slide-based guide on how to read the stars. Loading image-slices sometimes give the game away sadly, would've been better served by flat image maps.
Stack Overflow Podcast. Steve Yegge makes a guest appearance on this week's phone-in chat with Jeff & Joel.
Preventative Maintenance Monthly. Online archive of a technical publication from the U.S. Army presented in comic-book style. Once illustrated by Will Eisner during the Korean War. Anthropomorphic tanks FTW!
Cover Band. Artworks painted with famous album covers as the canvas for a show at Gallery 1988 in L.A. Wonderful idea with wonderful results.
Two entertaining cultural phenomena which arrived in my RSS reader one after the other:
That is all...
...no wait, stop the press! Linked to from Laser Portraits is the fantastic Sexy People.
Dtrace Review. Bryan Cantrill giving a Google Tech Talk on Sun's (and his) Dtrace debugging tool. Gets way too gnarly and kernelicious for me in the middle, but still very entertaining and informative.
Just Enough C For Open Source Projects. And for those who first cut their teeth on today's crop of modern, dynamic, memory-managed languages.
Meat Boy. Cute, bloody and tricky 2D vertical platformer.
Zombie Apocafest 2008 | The Brothers Brick. Big Lego community diorama of town fighting off zombie apocalypse. Lots of lovely little details in the flickr stream.
“I hate URL shortening services, URLs contain valuable info. Wish the twitterfolk would fix it so they weren't necessary.”— @twitter
“Show me the code! Just been to two sites promoting new programming languages and had to dig around for code samples in both.”— @twitter
RailsWTF. Tumblelog of face-palming quotes and other idiocy from various Rails-oriented fora.
“...some of the most basic details, including the $700 billion figure Treasury would use to buy up bad debt, are fuzzy.
‘It's not based on any particular data point,’ a Treasury spokeswoman told Forbes.com Tuesday. ‘We just wanted to choose a really large number.’”— Forbes, not The Onion, sadly
Cal Henderson "Why I Hate Django". Nice ha-ha-only-serious keynote talk from DjangoCon 2008. Touches on a fair bit of stuff that isn't django-specific.
The Classic Microgames Museum. Blast from the past! I have vivid memories of carousels full of these tiny boxed games at Games Workshop in the days when they sold more of other people's products than they did of their own.
Lean and mean with WoW. WoW player successfully re-purposes MMO addictiveness to lose 100 pounds by putting together a "walking desk" (gaming PC mounted on a treadmill).
Play Z-Rox. Odd but interesting flash game. Identify letterforms and shapes through a 1D window into their 2D world.
Fallout Made Modern. Hi-res patch to go with Fallouts 1 & 2, as recently purchased from GoG.com by me.
The Art of Reading a DTD. A nice clear guide to unravelling the syntax of the W3C's (X)HTML definitions. Helpful for getting to the bottom of what's allowed where.
Ken Levine keynote video from PAX 08. Great, funny, autobiographical talk on growing up painfully nerdy, by the father of BioShock.
History of the browser user-agent string. An account of how we ended up with every browser pretending to be every other browser and, consequently, a warning against browser-sniffing over capability-sniffing.
Bioshock: Breaking the Mold. Art Book that was originally destined for the limited edition of the game, available as a free PDF download. Interesting to see how many blobby, mutated, tentacle monster cliches they managed to sidestep.
Braunstein: the Roots of Roleplaying Games. The original proto-RPG was an off-battlefield, negotiation & intrigue based spin-off from historical wargaming. Created in 1967 by David Wesley (later to become a major in the US Army), and played by Dave Arneson (later to become co-creator of Dungeons & Dragons).
Revitalizing a Heritage: The Writing of Fallout 3. Good to hear that the lead writer on Fallout 3 is also the writer of the Dark Brotherhood storyline from Oblivion, which was, I think, everyone's favourite. Things are definitely looking up after the false start at E3. Looking forward to getting the original Fallout from GOG.com when it launches tomorrow.
Google does not want rights to things you do using Chrome. Quelling the alarmism from earlier today. I know it's important to be careful, but jeez people, it was pretty obviously just overly vague legalese from the get-go. I get the impression that EULAs are more often used to cover backs liability-wise than to impinge on rights.
“While it's technically possible to get drop shadows on Windows windows, it comes at an unacceptable cost to performance and stability.”— Chromium UX Documentation, Windows windows! Heh :)
Jason Lutes interview with The Wall Street Journal. Author of the Jar of Fools and Berlin comic books discusses his inspirations and processes. Name-dropping D&D along the way for having sparked his early world-building imagination.
“Downloaded chrome? Tried "about:internets"?”— @twitter
Slime mold and mushroom growth. Short video with timelapse photography of our mycological overlords. Creepy, beautiful, and otherworldly like War of the Worlds' Red Weed or Half Life's Xen levels. I love the hexagonal net canopies that some of the mushrooms produce.
Adam Savage talk at The Last Hope conference. Fantastic talk on his obsessive sculptural projects to build replicas of a Dodo skeleton and the Maltese Falcon, plus lots of audience Q&A on various aspects of Mythbusters and movie effects.
PHP.JS. JS versions of 100+ PHP functions. Lots of them are pretty trivial, but I came across a situation recently where I might have had to mirror some functionality on both client and server sides. Probably other instances when it'd come in handy too.
How To Launch Software. Aaron Swartz counters 37signals' suggestion that a "Hollywood Launch" works best, with supporting comments from a github developer. Probably borne out by cuil's recent PR-saturated face-plant of a launch.
Danny O’Brien » on being a bit of an idiot. On code reviews, on receiving criticism, and on the value of living some part of your life in public.
Using Photographs to Enhance Videos of a Static Scene. More incredible visual tech from the University of Washington. They're on a roll!
Microsoft Research - 3D photo viewer. You might remember a TED conference presentation of the Microsoft-funded Photosynth project, knitting together the world's photos in 3D space. Looks like they've taken it even further since then.
Coign of Vantage. Simple but fun perspective shifting game. Line up the squares floating in 3D-space to see the 2D pixellated icon shown.
The Art Of Braid. On the evolution of David Hellman's dreamy, painterly art stylings for Braid, released this week on XBLA.
Last.fm – Quality Control. The angry red bear knows when you've been bad. Beautiful. I want something like this where I work.
YouTube - An anthropological introduction to YouTube. Interesting talk at the Library of Congress by the author of the super-optimistic "Machine is Us/ing Us" video.
“Finally doing some proper reading around AS3. I've been out of the Flash loop of late.”— @twitter
Whoopsie! While poking around on this site the other night I was horrified to discover it was pretty badly b0rked in IE. Not quite sure how I managed to miss that, but hopefully I've put it right now.
As bad luck would have it, one of the things that was broken was a javascript line-numbering function that I'd posted here previously. Best make amends with a corrected version for any readers I've lead astray, eh?
So where previously we had:
function codeLineNumbering() {
$$('pre.code code').each(function(code){
var count = code.innerHTML.split("\n").length - 1;
var lines = $A($R(1,count)).join("\n");
code.insert({before:'<pre class="line"><code>'+lines+'</code></pre>'});
});
}
We now have:
function codeLineNumbering() {
$$('pre.code code').each(function(code){
var nodes = code.childNodes;
var count = 1;
var lines = [];
for (var i=0; i < nodes.length; i++) {
if (nodes[i].nodeType != 3) continue;
var matches = nodes[i].nodeValue.match(/[\r\n]/g);
if (matches) count += matches.length;
}
for (var i=1; i < count; i++) { lines.push(i); }
code.up().insert({before:'<pre class="line"><code>'+lines.join("\n")+'</code></pre>'});
});
}
The crux of the issue was that innerHTML seems to behave slightly differently in IE. Other browsers give you a faithful recreation of what's present in the document source, while IE gives you it's reconstituted whitespace-insensitive version.
In the old version of the code I was simply splitting innerHTML on newlines and counting how many lines I had in the resultant array. But with IE's interpretation of innerHTML that doesn't work so well since the odd newline may have been ditched or smooshed into its neighbour.
As a workaround, the substitute function uses the child nodes of the syntax-highlighted section of the document instead, which seem to be more faithful to the original source. I iterate through these looking for plain text nodes, and counting up how many newlines or carriage returns are present in each.
As a caveat I should say that I believe some of this behaviour is dependent on what your doctype and white-space CSS property are set to. Also, the code above makes the assumption that newlines will only be present in root text nodes and not nested within child elements. That's a safe assumption given the method of syntax highlighting I'm using, but it may not be for you.
Tsk, the perils of coding in public.
Ryan. Impressive and inventive CG animated short film on damaged individuals and the life of animator Ryan Larkin. Vaguely reminiscent of Waking Life and A Scanner Darkly.
“@benwalton Site looks totally awesome Ben, congratulations!”— @twitter
Fugitoid. The mid-80s, one-issue-wonder. A large format comic book and Turtles tie-in, from TMNT creators Eastman and Laird. Scroll down to the bottom to read the whole thing online.
XSS (Cross Site Scripting) Cheat Sheet. Huge long list of potential XSS security holes with examples and details of browser support.
I haven't posted in ages, so I might as well use this to break radio silence. It's a solution to this little programming brain teaser from Dustin Diaz. I don't think it's as much of a puzzle as he seemed think, given by the responses in the comments and how long it took me, but regardless:
var listA = ['a', 'b', 'c', 'c', 'd', 'e', 'e', 'e', 'e', 'e', 'f', 'e', 'f', 'e', 'f', 'a', 'a', 'a', 'f', 'f', 'f'];
var listB = [];
var count = 0;
listA.forEach(function(val,key,arr){
var matchPrev = (val == arr[key - 1]);
var matchNext = (val == arr[key + 1]);
count = matchPrev ? count+1 : 0;
if (count == 2) {
val = '<span>' + val;
}
if (count >= 2 && !matchNext) {
val += '</span>';
}
listB.push(val);
});
console.log(listB.join(' '));
As some of the commenters' solutions show, it can be done in a one-line regular expression, but I was sticking to the "rules" implicit in the original post.
Star Wars D6 Catalogue. Listings in the same format as the Palladium Reference for West End Games' line of Star Wars RPG books.
Palladium Books® Reference. Completist listings of everything every produced by the Palladium Books RPG company. Including cover scans for most entries.
The Museum of Role Playing Games. Cover art and write-ups for a selection of ancient RPG relics scattered across multiple genres. Ahh, memory lane.
“Someone needs to fix the twitter favicon. Get rid of that weird notch on the left-hand side and give it some proper transparency.”— @twitter
“Cleared away ~5 years' worth of accumulated computer junk from my home desk setup in favor of the cliché, mac-fanboy, minimalist approach.”— @twitter
Rock Solid Arcade. Flash games with ridiculously high production values, easily a match for XBLA. I wonder what the business model is here? Are the Google text ads and embedded Flash ads enough to support something like this?
Google AJAX Libraries API. Content distribution network and loading architecture for the most popular open source JavaScript libraries. Kind of inevitable, but I still believe a "woo" and indeed a "yay" are in order.
“Breaking in the latest purchase in my regular-as-clockwork twice-a-decade computer update cycle.”— @twitter
Apache RewriteLog. Having some head-scratching moments while trying to figure out which bit of server config is causing which bit of redirection. Looks like this could make the debugging a bit less of a headache.
Theorizing from Data (Video Lecture). Peter Norvig talks about working on a variety of machine learning problems at Google and the value of very large data sets.
Adobe - Developer Center : Exploring full-screen mode in Flash Player 9. I'd presumed the fullscreen mode on most video sites was a chromeless window spawned by Javascript. Apparently it's native functionality in the more recent Flash players.
“On the positive side, this lack of forward progress allowed for some entertainingly picaresque journeys around the umbrageous streets of Liberty City, in which Niko, for want of anything more productive to do, ran about - in the comical, low crouch he likes to affect - picking on innocent pedestrians...”— Catherine Bennett (pressing her joysticks a little too hard)
Grand Theft Auto IV and Digitally Degentrifying New York - New York Magazine. Best Dan Houser interview I've seen yet, goes into some detail about the pedestrians in GTA IV. Comes at it from more of a styling and aesthetics angle than the usual industry gameplay focus. Makes sense since with that being his core competency.
NEETS - Navy Electricity and Electronics Training Series. Nice gentle intro to a variety of electrical engineering related stuff by the looks of it.
Just wanted to share a couple of little Prototype niggles. In general I'm pro-Prototype because it feels like it's a closer fit to the typical ways of working that you see in non-library-using Javascript. JQuery, on the other hand, has chaining and acts on elements using the same interfaces regardless of whether there are one or many. From the dabbling I've done, it seems like that gets you into the odd head-twisting situation, but I've yet to embark on a big project with jQuery, so judgement is reserved for now.
Having said that, here's one instance where jQuery comes out on top. Showing & hiding of elements is a pretty common JS/DOM task and you're probably familiar with an issue where hidden elements need an inline style of style="display:none;" to allow them to be shown again. This is because the un-hiding is done by setting the display property of the element to an empty string, thereby allowing the element to re-inherit it's default style. If the styling is done via CSS instead (.hide { display:none; }) then the styling is further up the inheritance chain so the element always inherits from here instead and can't be unhidden.
Prototype has the most basic show/hide implementation and makes no attempt at a work around. Its documentation even makes specific reference to the issue: "Element.show cannot display elements hidden via CSS stylesheets. Note that this is not a Prototype limitation but a consequence of how the CSS display property works".
Here's the implementation (from version 1.6; current at time of writing):
Element.Methods = {
hide: function(element) {
$(element).style.display = 'none';
return element;
},
show: function(element) {
$(element).style.display = '';
return element;
}
}
But that's not the end of the story. JQuery does manage a workaround, and an effective one at that. When failing to show a hidden element it adds a temporary, unadorned element of the appropriate type to the document and checks what its display property is set to by default. Finally, if all else fails it resorts to "block".
Here's a version of the jQuery methods, ported for use with Prototype (the originals begin at line 2890 in jquery-1.2.3.js):
Element.addMethods({
show: function(elem){
elem.style.display = elem.oldDisplay || '';
if (elem.getStyle('display') == 'none') {
var test = document.createElement(elem.tagName);
$(document.body).insert({bottom: test});
elem.style.display = test.getStyle('display');
if (elem.style.display == 'none')
elem.style.display = 'block';
test.remove();
}
return elem;
},
hide: function(elem){
elem.oldDisplay = elem.oldDisplay || elem.getStyle('display');
elem.setStyle({display: 'none'});
return elem;
}
});
Much nicer. I'm not sure what the guiding philosophy is for what gets included and what's left out of the big JS libraries. It seems like something like this should be in there as an easy fix to a common problem. I would think that the identity of the libraries lies more in their syntax and aesthetics than their capabilities, so there's little to lose from liberal cross-pollenation.
MIT World » : A New Kind of Science. Video of Stephen Wolfram introducing and summarizing the ideas from his 1,200 page book "A New Kind Of Science". Exploring the potential for using cellular automata and other simple programs to model natural processes and phenomena.
BrikWars: Building Brick Combat System. Light-hearted wargame rules for use with LEGO and other unofficial minifig accoutrements.
I haven't read too deeply into this, but I've seen a couple of signs lately that the movie industry might be looking to make money out of 3D (as in 3D glasses, and not specifically CGI). Disney's re-releasing the Toy Story films in 3D, Pixar is planning on releasing all it's films in 3D starting next year, and James Cameron has been doing some serious research into it for his closely-guarded upcoming blockbuster "Avatar". I wonder if this is something they're banking on to differentiate the big-screen experience from the DVD market. A return to the days when a trip to the cinema was a big event.
Not that home entertainment necessarily has to miss out, there's also the question of whether the videogame industry might be quick to make a similar move. Apparently BoomBlox (the upcoming EA / Steven Speilberg collaboration for the Wii) is to feature a head-tracking 3D mode as an easter egg. See Johnny Lee's presentation at TED for a recent demo of this technique.
We need a Wikipedia for data. Hear hear. I've been thinking about a project lately where I've been coming up against this problem a lot. Very frustrating.
nVidia: GPU Gems. Free online book. Interesting peek behind the curtains at advanced real-time graphics programming techniques.
hobnox.com :: Audiotool. Amazing Flash & Java-based in-browser audio application emulating classic Roland equipment. Helps if you've had your hands on some of the real world versions before.
Python in 10 minutes. Handy refresher / intro on the salient points of Python.
C4: Coda Confidential. Cabel Sasser presenting at C4, the conference for Mac Developers, on designing Panic's apps, resolution independence, application branding, etc.
Japan: URLs Are Totally Out. Japan has started moving away from URLs in printed media in favour of pictorial search boxes containing recommended search terms.
Up Up Down Down Left Right Left Right B A Start. The "Konami code" is hidden in hundreds of games. I had no idea it was so widespread.
Disclaimer: I don't actually own a paper copy of this, I'm just in the process of working through it online at djangobook.com. But while I'm at it I just wanted to jot down a few thoughts that are fresh in my mind.
I'd looked at django briefly a while back but had been slightly put off by the templating mini-language along with a few other minor quibbles. Lately though, I've been feeling the need to give it a second look. After getting some practical experience with Rails, and seeing the backlash against it play out, I've been catching recurring glimpses of django waiting in the wings and rehearsing lines for its role as understudy.
I had planned on ordering the book in the near future but just started in on the online version out of impatience. Unfortunately, it's turned out to be a relatively disappointing experience. The djangobook website looked like a pretty promising venture when it appeared. Chapters would be posted as they were written, and comments were enabled on a per-paragraph basis, setting many eyeballs to work as cheaply labouring editors and technical reviewers.
I read a couple of the first chapters as they arrived and then left it alone until now, with all chapters accounted for and the finished book finally published. I don't know what happened in the interim, presumably comments were made, some were taken into account, and the odd revision was made to the text on the basis of these. From the dates on the comments that remain, it appears that any from prior to the release of the physical book have now been cleared out leaving a blank slate alongside the finalised copy.
This is where things start to disappoint for me. The book was released late last year, and in the intervening months a respectable new crop of comments has sprouted up throughout. Unfortunately, a hefty portion of these are pointing out easily avoidable errors. Scan through the text online and wherever you find a paragraph with upwards of 4-5 comments, you'll find a legitimate complaint. There are simple typos and stylistic issues. There are problems with the over-arching structure of the book. And then there are installation showstoppers where instructions aren't working in a given environment and readers have had to Google for fixes.
Where clarity is lacking or mistakes have been made in the text the comments are invaluable. Comments that aren't available in the printed book. The book whose copy had already been finalised. The book which is already on sale.
Ok, books are published with errors. Ok, the authors are developers and not professional writers. They're just trying to take some time out of their already busy work lives for a healthy stint of product evangelization. There are excuses that can be made. But it seems to me that there is some confusion as to the distinction between the frozen in time print edition and this living breathing web edition.
Is it done now? Are we going to see further updates? Are their political issue issues because the publisher doesn't want to impair book sales with a web version that's a superior product? (Although it already seems to be by virtue of the comments alone). Where there are legitimate complaints in the comments it seems like the majority would be fairly quick and easy to fix. So what's the situation? The waters are muddied further by the presence on the website of an errata page. Presumably it's targeted at readers of the print edition but, again, without a formal statement clarifying the distinction we're left to guess.
Aside from the print/web divide there are also issues with the structure of the book in general. It doesn't feel like much thought has gone into the examples used. We start out building pages which format the time, then we build a database centered on books, then we populate one table only to try out the admin interface using another, next we create a search form for a (still empty) table before skipping off to do a contact form...
When you're trying to follow along at home it's just a little too scatter-brained for my liking. Either do a tutorial, or go with a reference, but don't sit on the fence. And either way, if you're giving code examples please try to avoid them being reliant on things that you could've easily walked us through in earlier chapters. If I can't type something in and try it out there and then it disrupts the flow of my reading and has me skimming ahead for the next example I can use.
I think the Pragmatic Programmer's AWDwR has faults of its own, but the structure of the first half of that book is good demonstration of what I'm talking about. It steps you through the majority of what you need to know using an online book store metaphor and maintaining consistency throughout, even adding in a bit of meta-story about the client-developer relationship during production. It may sound like hand-holding, but that kind of attention to detail really makes for smooth learning as you step through the code example-by-example.
The other alternative, of course, is to get out of my way and give me a reference so I can put the pieces together myself. And yes, before you mention it, I know about the documentation at djangoproject.com. Maybe that will be a better fit for me in the long run, it's just a shame to see such issues with the chosen ambassador for what's obviously a pretty cool technology.
A People's History of the United States. OCR-ed copy of Howard Zinn's epic volume countering the adage that history is written by the victors.
Programmers At Work. Interviews from Susan Lammers' well received 1986 book. This was the inspiration behind the recent "Founders at Work" by a founding partner of Paul Graham's Y Combinator, which is a pretty interesting read in it's own right.
The Quake III Arena Bot. University thesis exploring bot AI in general and then delving deep into the specifics of the Quake III bot implementation.
The 400 Project. Noah Falstein and Hal Barwood's rules of thumb for game design (with contributions from other notable industry veterans). Currently 112 items in the list, it's an ongoing project.
Kate Beaton. Nova Scotia based comics person with a kooky wit and a lyrically doodling pen arm. Her site is filled with good stuff.
Questionaut. Beautifully produced educational flash game for the BBC by Amanita Design who did the two Samorost games.
Bell Labs Science Experiment Kits. "These weren't your typical kits like you buy today where you just snap part A to part B and hook up a 9 Volt battery. No, these were in a class of their own."
TED | Talks | Alan Kay. On teaching ideas, mainly with reference to children. With some demos of squeak, the $100 laptop and a couple of fun proofs of basic maths concepts.
Master Class in Video Games & Digital Media. Video of Warren Spector's lectures for the University of Texas at Austin, featuring contributions from such industry luminaries as Tim Willits and Richard Garriot. I've been hoping these would be released since I saw mention of them in an interview.
Of a Book Entitled “Mr. Turing's Computing Machine”. A "making of" for Charles Petzold's new book. Looks to be a semi-sequel to his "Code: The Hidden Language of Computer Hardware and Software", which is a wonderful book.
Bioshock: A Critical Historical Perspective. Short appraisal in a literary criticism style, with reference to the other games in Bioshock's lineage from Looking Glass Studios. Published in Eludamos a new "journal for computer game culture".
The Spirit. Awful, awful teaser site for the Frank Miller directed adaptation of Will Eisner's comic books. Mr. Miller just went down in my estimation for that insultingly bad Sin City knock-off poster, even if it is just a mock-up.
The Next Big Puzzle Game Wave? Interview with creator of Trism, accelerometer and touch-screen enhanced iPhone puzzle game. Also includes video of it in action.
Game Graphics During the 8-bit Computer Era. Short run through of the capabilities and limitations of early hardware like the Atari 800, Sinclair Spectrum and Commodore 64.
After the end of an incredible year for triple-A console titles we now find ourselves in a post-Christmas lull. There's a sour taste in our mouths from the few hopefuls who closed out the year with a rush to market in search of easy xmas dollahs (pointing no fingers). So what can be done to sweeten our palate? Well I don't know about you, but I'm seeing more and more promise in the lands of the portable, the web-based and the independent.
Let me enumerate the ways. First, three games I've played:
Professor Layton and the Curious Village

Ghibli-esque DS puzzle adventure in which Professor Layton and his boy apprentice solve the problems of the curious villagers and unravel their mysteries through a series of varied and perfectly-pitched puzzles. This thing is an instant classic, very charming and totally engaging throughout. It's also masterfully paced with each tiny piece of exposition being carefully interleaved between slices of puzzling gameplay and exploration.
My only gripe would be that it's a shame when they set games up with sequels and franchising in mind at the start. Obviously it's a perfect fit, and it's nice to know there's more on its way, but the quality can only diminish when there's a built in formula. Hopefully this one will hold up a bit better where lesser games (Pheonix Wright?) might begin to wilt.

NSFW web-based game in the form of an internet mirror-world parodying the worst of net archetypes and bad behaviour. Mechanically, gameplay takes the form of a turn-based combat RPG with character classes of Camwhore, Emo & Troll. But the outer shell feels like something new, with combat wearing the guise of forum flamewars, and NPC interaction performed via in-game IM. Its closest relative is probably Kingdom of Loathing and it sometimes brings to mind parody tabletop RPGs like Greg Costikyan's Paranoia, but the slick interface and clever matching of medium and message create something fresh. Andy Baio has just done an interview with lead developer Robin Ward.

Physics-y platformer with a mean difficulty curve, previously found success online as a flash game, now ported to XBLA. It's been tarted up with additional content, multiplayer and a built-in level editor. Incredibly addictive and incredibly difficult in equal measure, it didn't take long for me to rack up the "Practice Makes Perfect" achievement for dying 1000 times. Everything about it tells you that it was made by good, honest, indie gamers. From the old school die-and-try-again play ethic to the minimal anti-glitz look and feel. One more go?
Followed by three I can only admire from afar:
A sprinkling of Paper Mario's dimension-twisting mixed into a smattering of Cave Story's engrishly narrated pixel-art. The 2D platformer gains a 3rd dimension when you rotate a level, only to be flattened back down into 2 dimensions when the spinning stops. Best to watch a video to understand the head-scratching gameplay potential that enables. Also has siblings in Echochrome and Crush.
Painterly platformer due to arrive on XBLA sometime soon. I don't know much about this one yet but the graphics look lovely and I understand there's some time-rewinding action involved a-la Prince of Persia: Sands of Time.
Everyone seems to be talking about this one at the moment, which only makes me more eager to try it (PC only). By the looks of it, it's a block-matching puzzle set on a Wipeout-style race track with the twist being that the tracks are generated by music you play from your collection. I have to say I'm a little skeptical of this one. Vib Ribbin on the Playstation had a similar option and it was never as satisfying as the default tracks.
Dear oh dear. It seems to me that we're in a strange predicament at the moment. The sheer budget, visual polish and hollywood-ification of a lot of next-gen output is throwing our good/bad detectors off kilter. There's something very wrong when a game like Mass Effect sneaks into the metacritic charts alongside 90 percenters like Bioshock, The Orange Box, CoD4 and even Halo 3. Let's not beat about the bush, Mass Effect is a terrible game.
Fantastic character design, yes. Decent voice acting, yes. Pretty good writing, yes. Nice cut-scene cinematography, yes. Those things would be wonderful if this was an animated movie, but games are meant to be played, not watched. Apparently people are so blinded by the glossy visuals that they're unable to call it for what it is.
Mass Effect has the most uninspired level design I've ever seen. Most of the environments are barely designed at all. Locations look ok at first glance, but take a look at the overhead map and you'll be lucky to find yourself in anything more elaborate than a giant rectangular box room or on a snaking road taking you directly from A-to-B.
Combat would be passable if your enemies weren't often so tiny on screen that they're obscured by your equally tiny targeting reticle. So much for "the whites of their eyes". At one point, frustrated with repeated insta-kills, I went into the options and set the combat difficulty to easy, only to find the one-hit kills still in effect. Mini-games played to open item containers can barely call themselves games at all. And the over-plentiful items plundered from within are a selection of boring weapons, dull armor, or worthless upgrades. None of which have any appreciable effect on your character's handling or combat performance.
Many UI decisions are simply mind-boggling. Your team's health is represented by 3 small red bars in the lower left of your screen. If a team mate is damaged, but regenerating, their bar turns green. So red is sometimes good, sometimes bad, and green is... what, exactly? Good luck figuring it out at a glance.
The colour contrariness is also carried through to the inventory screen where you can compare your currently equipped items against those you've picked up. Here, the compared item's statistics are shown as green if identical, red if worse and yellowy green if better. But there's no grading of these colours, so an item that's slightly worse in one area, but much better in another shows up as having one stark bright red bar and one barely perceptible yellowy green bar.
The ineptitudes pervade almost every aspect of this game, and I stumbled across a blog post a while back that did a fantastic job of dissecting each horrible misstep in turn but I'm having trouble digging it back up. So for now, I'll have to leave you with the above cautionary morsels and hope you see fit to take the mainstream reviews with a generous hunk of rock salt.
ASCII by Jason Scott: The Feelies. 1930s inspiration for freebie knick-knacks included with Infocom games. I once read about a Lovecraftian play-by-mail game that sent you little props and physical clues with every turn. Sounded cool.
Penny Arcade Podcast: The Spore Cult. Gabe & Tycho speak the awful truth about Spore and Mass Effect. A lot of Will Wright's stuff seems like it's more about entertaining him than the player. The procedural content issue is also why things like Rogue-likes and Diablo don't appeal to me.
A Data Point on Every Block. In-depth interview with Django developer Adrian Holovaty on his new project EveryBlock.com, spinning off from the success of ChicagoCrime.org. Interesting to hear how much brute force data-munging they do.
YouTorrent.com. Fancy multi-tracker bit torrent search engine with a nice non-eye-gouging interface.
“So many toys, we find, only become serviceable with a little smashing.”— H.G. Wells, Floor Games
Floor Games. H.G. Wells' short treatise on the construction of building block dioramas for the purpose of being at play in imaginary worlds. See also his follow-up volume "Little Wars" on enacting war games in same.
The History Of DMA Design. Artefacts from the long and storied history of the games developers who were set to become Rockstar North.
Sola Rola - The Gravity Maze. Another ball rolling flash puzzler at Kongregate. This one's a bit easier going though. (Skip the terrible intro).
Spin The Black Circle. Fun rotate-y tilt-y physics-y puzzle-ish ball rolling game at Kongregate.
I just spent a fun couple of days tinkering with the engine of this site and have finally emerged bruised, tired and slathered in axle grease.
I started out just adding syntax highlighting but ended up adding page caching (to offset the performance hit of parsing code), and upgrading to Rails 2 (to get at a couple of caching related niceties). So due to all the change there may be the odd unresolved issue here or there that I've missed. Just drop me a comment if you spot anything poking out at an awkward angle.
I figured I'd inaugurate my code highlighting with a little write-up of how I ended up doing it. I originally planned to use Ultraviolet, but found it way too slow and a bit verbose in the CSS-naming department among other things. I also looked at various JS highlighters, but couldn't find one to suit, and decided it's a fairly resource intensive task to be off-loading onto the client anyway. Then I finally came back around to what I'd been looking at originally, which was the excellent Python library, Pygments. I was put off at first by it not being ruby-native, and wondered if I'd need something like RuPy to bridge the gap. In the end I decided it'd be acceptable to do a system call out to the pygmentize command line interface:
class BlueCloth
def escape_shell_arg(str)
"'%s'" % str.gsub("'","'\\\\''")
end
def transform_code_blocks(str, rs)
@log.debug " Transforming code blocks"
str.gsub(CodeBlockRegexp) {|block|
code,rest = $1,$2
# Remove the syntax line and extract the language from it
regx = /(?:[ ]{4}|\t)+@@(.*)\n+/
lang = code.slice!(regx).slice(regx,1)
# Call out to pygmentize to markup the code for highlighting
code = `echo #{escape_shell_arg(code)} | pygmentize -f html -l #{escape_shell_arg(lang)}`
# Remove the extraneous wrapper markup that we don't need
code.sub!(/<div class="highlight"><pre>(.*)<\/pre><\/div>/m, '\1')
# Generate the codeblock
%{\n\n<pre class="code"><code>%s\n</code></pre>\n\n%s} % [ outdent(code).rstrip, rest ]
}
end
end
As you can probably see, I'm using BlueCloth to format my posts, so I'm over-riding the method it calls to deal with indented code blocks. Doesn't provide any more graceful hooks unfortunately. I've also added an @@language line inspired by an article at Warpspire so that Pygments doesn't have to play the language guessing game. In fact, if you're using a JS highlighter and that's all you need, you can get away with something like this:
class BlueCloth
alias old_transform_code_blocks transform_code_blocks
def transform_code_blocks(str, rs)
str = old_transform_code_blocks(str, rs)
str.gsub!(/<code>@@(.*)\n+/, '<code class="\1">')
return str
end
end
Aliasing the existing handler method to another name so that we can write a wrapper for it rather than over-writing it completely.
Probably bears repeating that the first option isn't the speediest thing in the world, and might be best avoided unless you're prepared to implement some sort of caching. I should also mention that I finished putting this in place and then immediately found mention elsewhere of CodeRay, which is a self-professed "fast" Ruby-native highlighter. I haven't tried it out yet but it looks fairly young and recommends Pygments itself right there on the front page anyway. Worth a look though.
Oh, one last thing. I've used javascript (and Prototype) for my line-numbering so it doesn't get in the way in the source and stays out of CSS-unfriendly formats like RSS:
function codeLineNumbering() {
$$('pre.code code').each(function(code){
var count = code.innerHTML.split("\n").length - 1;
var lines = $A($R(1,count)).join("\n");
code.insert({before:'<pre class="line"><code>'+lines+'</code></pre>'});
});
}
Short and sweet!
Update: Seems I was a little hasty with that line numbering function, here's a version that should also work in IE.
Social Graph API - Google Code. Brad Fitzpatrick's Social Graph proposal gets a first public usable implementation. Don't have time to read deeper right now but looks like it has the potential to be big.
The Usborne Book of the Future. I seem to remember having the Robots and Future Cities sections of this as seperate books. Awesome and disturbing in equal measures. The floating, prosthetics-filled, invisible man has always stuck with me.
Textpow + Ultraviolet: TextMate Powered Syntax Highlighting. Looks like this is what I've been looking for in terms of a ruby-based equivalent to python's pygments. Shame it's not so self-contained though: Texmate bundles + Oniguruma + Textpow + Ultraviolet + a dollop of glue code in Rails. Whew!
I put off getting this after downloading the demo from live and having a bad experience with it. If I remember correctly, they'd added a security camera into a room in the demo where there isn't one in the final game, presumably to show off some of the extra interactions it brings. Unfortunately the room it was added to was largely lit in red making it hard to spot its field of vision. Consequently I found myself overwhelmed by multiple splicers and security bots at once, which is not something which suits my style of play. But what I found on making my way deeper into the game proper was that getting overwhelmed is all part of the fun.
What Bioshock introduces into the standard FPS recipe is a twist on the usual combat model. My normal approach would be to edge through levels an inch at a time picking off enemies one by one, safe in the knowledge that nothing is going to creep up behind me. In Rapture that's not quite so effective. Enemies crawl out of walls, wander the corridors, and will think nothing of chasing you from room to room. The environments tend to be broad and intertwined rather than long and linear, and the route you take through them is rarely enforced.
But the most colour is added by the variety of ways in which any problem can be attacked. For any one entity in rapture there are a multitude of ways of dealing with it and turning it to your advantage (in contrast to the average FPS where there are things to kill and things to pick up, and not much more to speak of). It's dizzying just to list what's on offer:
If you multiply everything together to find the number of available combinations implicit in that list you'll find that it yields a pretty impressive realm of possibility. Which leads to the fun in being overwhelmed which I mentioned earlier, sparking some of these interactions and standing back to see what happens can be pretty entertaining.
There are some odd bugs and some iffy UI decisions, and there's the failure of nerve in the final portion of the game that's been discussed elsewhere. But take the web of interactions I've talked about above and add to this some beautiful graphics, a great storyline, fantastic voice acting (spoilers) and you end up with a really great game, deservedly topping the metacritic charts. There's also enough tiny little fun scripted moments and bits modelled into the environment to show that the development team were enjoying themselves too. Something which always puts the cherry on the cake for me.
IMDB Trivia & Goofs Growler. Proper IMDB integration would be a wonderful thing for set-top boxes of the future. In the mean time, it's cool to see little solutions like this. Also a good demonstration of "small pieces loosely joined".
Numbrosia Puzzle. Cool numbers grid puzzle game. Could perhaps benefit from having it's interface smoothed a little though. Reminds me of Wei-Hwa's Google puzzles.
Blob Sallad – canvas tag and physics simulation. I need to have a go with this Canvas business at some point. Shame the performance isn't the best yet though. Roll on faster JS. Plus; explaining complex stuff with cute happy blobs FTW.
Pixar graphics papers. Fascinating to see how much goes into the tiniest details. Also seeing how images which seem so artful and pretty have more in common with maths and science behind the scenes.
In the interests of transparency, and because I've been a sucker for them ever since I first stumbled across one in the back of an Oreilly book, I've added a colophon to my about page.
It's also largely due to Mr. Willison putting the idea in my head this morning. He even advocates stuff when he's not intending too, the poor fellow!
Wired: Sociopaths of the Virtual World. An ethnographic study of griefing. Covers pranking in Second Life and MMORPGs, and it's roots in web communities like Something Awful and 4chan.
ClusterMarker. 3rd party Google Maps marker manager for handling clustering of overlapping icons.
FINE: I will look at LISP. Where do I start? Long Reddit thread / argument with links galore to lisp resources, implementations, books, etc.
GameSetWatch: WYSIWYG Game Design. Nice write-up of HUDless game design techniques: The missing targetting reticle in King Kong, the seamless FPS to terminal screen transitions in Doom 3, and Link's roaming gaze in Wind Waker.
Far Cry 2 stolen demo footage. Pre-alpha version, but already Crysis-esque and showing some interesting ideas. "Real world" map & compass, weapons that jam, healing yourself by extracting bullets with pliers, exploding ammo caches etc.
Official Google Maps API Blog: ExtInfoWindow. 3rd party extension to allow styling of info windows in Google maps. Should be needing this shortly.
Ruby on Rails Caching Tutorial. Nice and clear explanation in 2 parts, 1 for page-caching and 1 for action & fragment caching.
A rough diamond that I missed out on the first time around, given a second lease of life by the Xbox Originals download service on the 360.
It's a right little charmer filled with fun little bits of innovation and some obvious loving care from the developers. The driving plot doesn't take itself too seriously (although yes, it gets downright silly in places, throwing in every supernatural plot device it can think of), and the incredibly simple control scheme gets out of the way of the gameplay allowing it to be fairly freeform and unformulaic. It even makes a little bit of headway into the idealistic territory of "interactive cinema" that the developers were obviously striving towards.
There are definitely aspects that don't work so well; the much-maligned QTE sequences, the always terrible semi-fixed cameras, and the afore-mentioned farcical plot twists. But for every silly mistake there's a wonderful success. Not least of which is the ability to play multiple characters off against each other, and the mental state health bar which has you caring for your characters' well-being.
There's also a couple of firsts for gaming maturity by my reckoning: first non-camp gay character? first non-puerile (though slightly gratuitous) nudity?
I could go on about all of the above way more than would be seemly, but for now let's just finish by saying that Fahrenheit is a super fun game that you should have no hesitation in trying. My curiosity is piqued for Quantic Dream's upcoming Heavy Rain now, even if the teaser did sport the uncanniest valley I've ever seen.
p.s. I totally didn't realise it at the time, but it looks like I may have subconsciously stolen my blog's colour scheme from the old-style xbox boxes. Oops?
Ian Bicking: What PHP Deployment Gets Right. Re: my post from yesterday. PHP is uniquely positioned in having been created to solve the web problem from the outset, in contrast to other web solutions which piggy-back on existing languages with broader concerns.
There was a lot of chitter-chatter this last week about the new web frameworks and the situation with regard to their performance and ease of deployment in shared hosting environments:
I've been waiting for a while for the hype to die down so we could have a sensible conversation about all of this. It seems to me that the vast majority of the Rails naysaying has been hinged on a misguided comparison between it and PHP, and complaints about it's performance. There's clearly an issue there, but the issue doesn't seem to me to be with Rails in particular. The "it's hard" and "it's slow" complaints both seem to be missing the fact that Rails, Django et al are solving a much larger problem than PHP.
The new web-development technologies are insta-frameworks, they come with all your professionalism and all your infrastructure in place from the outset. And the necessary baggage of memory overhead and complexity come along for the ride. The old familiars that we've been used to; PHP, Perl and the like come from the direction of shell-scripting-land where the most common case is the most basic. There are 100 hello worlds for every 1 webapp with all mod-cons. In contrast, the new web frameworks have the giants of Java-land in their sights. They say: we expect you to use url-rewriting, ORM, granular caching, TDD, asset servers etc. They'll make it as easy as humanly possible to do so, but as part of the bargain they'll expect you to step up and fulfill your side of the contract as a modern web professional.
And therein lies the crux of the problem I think. The new web frameworks shine a harsh critical light on the yawning gap between how we all started out and where we all should be. It seems like the majority of "I tried it, I didn't like it" stories are from people who burnt their tongue on the first taste and realised their skills weren't up to it. And the cries of "deployment! performance!" are from those who are aghast that they should understand anything about the servers and environments their apps are running in.
When a framework solves all the problems you were familiar with, it's humbling to find that the problems you're left with are those you know the least about.
Yes, there's more to it than that and there is the odd complaint that's valid and well considered. There's certainly room for improvement, but these technologies are very, very young. If we can just support new ideas, give them a little breathing room, help investigate the new bottlenecks and understand that no technology can be all things to all men, then we might just see some progress.
xavierenigma's white dwarf. status: incomplete. Awesomely simple and effective flash game sketch. It's the old "avoider" thing with an extra Katamari-esque twist and some gravity thrown in for good measure.
Drawn to Life | The New York Times. Slideshow of storyboards and production artwork from the "better than the book" animated film adaptation of Marjane Satrapi's graphic novel Persepolis.
SAGE: Open Source Mathematics Software. I was learning a bit of maths recently and thought of trying out Mathematica, only to find when I looked into it that it costs about a grand. Maybe this would be enough for what I wanted.
First Person. Long list of essays on storytelling in games (both tabletop and digital) by games designers, theorists and scholars. Extracts from an ongoing trilogy of books published by MIT press.
Make your own vacuum tubes? Not without a lot of skill, time, patience and tools you won't. You can live vicariously though, through this amazing 17 minute video of a French amateur radio operator showing you how he does it.
Idle Thumbs: Dealing with Death. On friendly fire in games. I think HL2 gets it right here, lowering your weapon when facing a non-combatant and letting you break mission critical apparatus but giving you a carefully worded game over message straight after.
Alan Kay: Software Design, the Future of Programming and the Art of Learning. Broad-ranging interview with Alan Kay from 1999. Covers more than the title suggests.
“Adding my blog's url to every profile I have going in the vain hope of earning a few more spoonfuls of google juice.”— @twitter
Assembla - Tools for Agile Teams. Free multi-faceted project management tool with developers in mind. Integrated Trac, Subversion hosting, and plenty more.
The Osamu Tezuka Manga Museum. The owner of The Beguiling comic shop in Canada visits the museum of the creator of Atom Boy in Japan and takes lots of pictures.
Growing Up In The Universe. Royal Institution's 1991 Christmas Lecture by Richard Dawkins.
Thin - yet another web server. Combines the Mongrel parser, Event Machine & chneukirchen's Rack. Looks interesting, but could be misleading. The performance graph has no numbers and an unmarked axis, and a comment at Ruby Inside suggests it needs a bit more work. One to keep an eye on.
How to Design Programs. Free online book. HtDP is often mentioned in the same breath as SICP. The examples in this one are geared towards DrScheme though, which has versions available for all major OSes. Handy.
Cursor*10 (nekogames). Infuriating / interesting "1-player co-op" flash game. Would be a heck of a lot easier if the ghosts were a bit more ghosted. Finished it on my second try.
Rock, Paper, Shotgun: Dad & Doom. A story of gaming and the generation gap. Both melancholy and heartwarming at the same time. I've seen a few musings on cross-generational gaming lately, I wonder if it's indicative of anything?
Softies on Rails: Freezing Your Rails Application. I haven't needed this so far but it crossed my mind today that version conflicts are likely to become and issue for me fairly soon. This looks like a good walkthrough for when they do.
DNA seen through the eyes of a coder. A fun perspective, not too revelatory though.
Compensation for Xbox Live downtime? Good to know that the flakiness isn't just happening for me. And if the compensation happens to be in the form of a couple of hundred Live points I'll have enough for another Xbox Original, whoo!
1985 Sears Wishbook. Jump straight to the toys section and see some old friends you haven't seen in years.
Flickr: Photos from legohaulic. This guy's amazing. He uses Lego like he's sculpting clay.
Old Smalltalk Pics From PARC Place. I love these. Upright displays always look nice to me, I wonder what they're like to use.
Visit the archive if you wish to skip merrily through time in a devil may care fashion.