Doing what I love
Posted by Michael Buffington on April 02, 2007 at 03:21 PM
A few weeks ago at SXSW I got to see one of my heros give what was unarguably the best talk I've ever seen. I feasted on Will Wright's every word, and if you watch the video (1 2 3) of his talk, I think you might be able to understand why I rank it so high. Of course, I've always ranked Will's work highly.
I can thank Will Wright for sparking my interest in computers more so than any other individual. We had some sort of Apple II clone in my house as a kid, and Zork and the like were fun, but I really didn't get into computers until the original Sim City came out.
I spent a month during the summer between junior high and high school working for my dad so I could earn the money to buy the game, and spent the rest of the summer begging my mom for some computing time. My mom was writing a book at the time, so play time was sparse.
The next summer I worked hard manual labor for the entire summer break so that I could earn enough money to buy my own computer. My dedication was impressive, and I kept myself going by reading reviews about the RPGs Ultima 6 and Ultima 7. Ultima 7 had me especially drooling because it had simulated weather patterns. I was thrilled with the idea that at any moment while exploring this land that it could start snowing. At the end of the summer I had $2400 saved up (amazing what $5 an hour will get you as a teen).
My dad and I went to a computer show underneath the Anaheim stadium, bought a 386-33 with 2MB of RAM and a 85MB hard drive. I'm pretty sure he had to match my dollars, because at the time this was a top of the line machine.
I savored Ultima 6 and 7 for a few months until I discovered the modem. Within a year of buying my first computer, I had set up a BBS in my bedroom, and had hooked into Fidonet, effectively putting me on the Internet in 1991. I had several hundred local BBS members. We traded files, swapped stories, and played games like TradeWars 2002 and BRE along with a multitude of other BBS door games. It was a sublime period in my life, and when I look back on it, it's nearly shocking to think that some of the player to player interaction and community building aspects were stronger then, even with the limitations, than a lot of multiplayer games have now.
Within those first few years of owning a computer I knew, without question, that I wanted to do two things as a career and two things only: build communities, and build games. I've spent time doing both of those things in the past 12 years, but rarely both at the same time - I was most recently the community manager for Values of N, and before that built and ran llor.nu.
And now that Values of N has announced its second product, I intend to reorient myself with the original path I set out for so long ago. I've left Values of N - no bridges were burned and I wish Rael and crew the best the of luck. I learned an incredible amount about true entrepreneurism and how everything you do matters in a small startup and will use the lessons liberally moving forward.
I need to do some housekeeping first, but within a few months I'll be putting my focus back on building clever games on the web and building real communities around them. Will's talk didn't make the decision for me, but the seed he planted certainly helped remind me of what I enjoy doing: uniting and enabling people to have fun.
llor.nu up again
Posted by Michael Buffington on October 03, 2006 at 05:53 PM
I'll be doing a presentation on llor.nu tomorrow at the AjaxWorld Conference in Santa Clara, so I decided to pull llor.nu out of sabattical and get it back online and ready for play. I'll leave it this way until the new version comes out.
If you're at the conference, come say hello. Here's what I look like.
Enjoy!
Splog Attack
Posted by Michael Buffington on September 06, 2006 at 05:28 PM
Watching Luis von Ahn talk about building games to help solve problems with humans that computers can't figure out is incredibly inspiring to me. He does a great job of breaking down what seems to work, and what doesn't work, when designing a game that takes otherwise totally boring, menial tasks and turns them into compelling challenges.
While making the menial fun is great, I'm even more inspired by how simple some of these problems are to solve. I've mapped out several game ideas that, if executed with the same approach as Luis' games, would be dead easy to build.
With that said, I'd like to present splog attack. This is what Luis would describe as a symetrical verification game. Player 1 sees a blog entry, and makes a single determination - is it spam or not. Player 2 makes the same determination. If both come to the same conclusion they get points, and both move on to another round.
But there's a twist, interestingly, thrown in to fight against bots fouling the results. In addition to having to determine if the blog entry is spam, the players see three blog entries at a time from different blogs. Both players get the entries in random order, and must agree on all three blog entries, matching a spam label to the same spam label their counterpart matched. It doesn't totally eliminate bots from making random choices, but it certainly makes it harder.
So what can you do with the results? Wired Magazine just ran an article talking about some of problems search engines face with detecting spam blogs, and how they are having a difficult time weeding out the good from the bad. It's very easy for a human to see even just a sentence and make the determination that something isn't right, but far more difficult for a computer.
Push a particular blog through that filter enough times and you end up having a pretty clear picture of what's spam and what's not. Reward players for figuring it out quickly, and they may even outpace the production rate of spam blog bots, turning the tide. Provide search engines with the results, and spam blogs may become irrellavent.
While part of me would love to see the game succeed in killing spam, I'd miss the weird sort of anonymous interaction with another human mind. When you're both right, it feels great, and out ranking others doing the same thing is a lot of fun, especially knowing it's helping fight spam blogs.
Rendering HTML with JS
Posted by Michael Buffington on August 14, 2006 at 12:32 AM
In the game I'm currently working on I've been tinkering with creating Javascript objects for each tile, duplicating, and placing the tiles wherever I need them. This is in preparation for a smarter blitter that does an Ajax call to the server, asking for the squares it needs to fill the current game window.
In theory, making objects seems like the way to go because you'd think it's the most efficient way - make one thing, then duplicate it, only changing its properties enough so that it appears on the screen in the right place. In practice it renders very slowly.
So far, the most effective approach seems to be to ditch the object creation approach entirely. Instead, I build up a string, then append that string to the HTML element that's supposed to contain my squares. It looks like this:
function draw_map(tiles) {
for (var i = 0; i < tiles.length; i++) {
x_y = iso_node_to_screen(tiles[i].attributes['x_choord']-x_choord,tiles[i].attributes['y_choord']-y_choord);
insert_string += draw_tile(x_y[0],x_y[1],tiles[i].attributes['x_choord'],tiles[i].attributes['y_choord']);
}
new Insertion.Bottom('board',insert_string);
}
Insertion.Bottom* comes from Prototype and simply adds a string to whatever element I tell it to.
The problem is that even that doesn't provide instant response. In Firefox, it's quick, but with Safari there is a flash. It's worth noting that in my current game, I'll only grab that entire field of tiles on a new page load - as the user scrolls the window only a single row of squares will be added at any given time - a total of what'll probably be just 10 new squares.
I'm not quite sure how to get it any faster, but studying these benchmarks might help. Most suggest that using innerHTML is the way to go, so perhaps I can figure out how to write my own version of Insertion.Bottom that's a bit more efficient.
* Insertion.Bottom is by far the worst name for a method I think anyone could come up with.
Inventing
Posted by Michael Buffington on August 11, 2006 at 11:07 PM
I think I've invented something of significant purpose for something I'm becoming ever more passionate about. But to help paint the picture, let's think about the hero who invented compression molding presses. Without this kind of machine there'd be no inner tubes, no melamine crockery and no brake pads. There'd be no bike riding, no green bean casserole, no stopping of massive vehicles. Read: mayhem.
But no one goes out and tries to invent things like this, it just sort of falls into place. You need something to press the hell out of some bits of material, so you make something to do it, and you refine it, and with enough iterations you end up with some massive device with blinking lights and pressure gauges that can squeeze out a conveyor belt while you eat a Baby Ruth.
I've been doing the same thing with casually played massive multiplayer games. I keep finding the need for tools, and I keep building new things because I think I'm the only one daft enough to try and do this. But I have the same itch that the guy who needed to press the hell out of something had. I'm _compelled_ to do things like build programmatic routines that let me efficiently blit an isometric perspective tile map with depth sorting using just CSS and HTML. And while they're not yet perfect, they're a preview of what's to come.
Consider this example of depth sorting. It's not perfect, but it's a tool I really need for a new game I'm working on. Find the "North, South, East" and "West" links to see the red cube move around. There's no real magic going on here, but it took a lot of trial and error to determine the best way to pull it off, much like I'm sure the compression molders so near and dear to all of our hearts took.
I can only hope that I'll be able to make the work that I'm doing now to build rudimentary tools will become just as important, even if just indirectly, to what we do on the Internet as the compression molder is to baby bottle nipples.